繁体   English   中英

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

[英]Can pretty variable names be used for registers in GCC inline assembly?

我有一些内联汇编。 我希望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 */
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM