gpt4 book ai didi

gcc - GCC 内联汇编中的寄存器可以使用漂亮的变量名吗?

转载 作者:行者123 更新时间:2023-12-01 11:34:48 24 4
gpt4 key购买 nike

我有一些内联汇编。我希望 GCC 在选择要分配的 GP 寄存器方面拥有完全的自由。我还想为程序集内的寄存器使用漂亮的名称,以便于 future 的维护者理解。我想我以前(10 多年前)为 ARM 5te 做过这个,但现在在编写一些 AArch64 代码时摸不着头脑。

在一个更简单的例子中,这就是我想要的:

uint32_t arg1 = 1, arg2 = 2, result;

asm volatile(
"add %result, %arg1, %arg2\n"
// Outputs:
: ???
// Inputs:
: ???
// Clobbered:
: ???
);

我想我需要正确的巫术才能到达我在上面写的 "???" 的地方。

这可能吗?

最佳答案

是的。

[arg1] "r" (arg1)

例如。这两个名称(上面的[arg1](arg1))可以不同。

在汇编代码中,您将使用:

add %[result], %[arg1], %[arg2]

Documentation link .

这是修改后的整个示例(更改程序集变量的大小写只是为了说明它们不必相同):

uint32_t arg1 = 1, arg2 = 2, result;

asm volatile(
"add %[RESULT], %[ARG1], %[ARG2]\n"
: [RESULT]"=r"(result) /* output */
: [ARG1]"r"(arg1), [ARG2]"r"(arg2) /* inputs */
: /* no clobbers */
);

关于gcc - GCC 内联汇编中的寄存器可以使用漂亮的变量名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com