我有一些内联汇编。我希望GCC在选择要分配的GP寄存器方面拥有完全的自由。我还想在程序集中的寄存器中使用漂亮的名称,以方便将来的维护人员理解。我想我以前(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]
文档链接。
这是您重新制作的整个示例(更改了装配变量的大小写,只是为了说明它们不必相同):
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 */
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句