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

时间:2015-02-04 15:48:59

标签: gcc assembly 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:
  : ???
);

我认为我需要正确的伏都教去我上面写的" ???"

有可能吗?

1 个答案:

答案 0 :(得分:5)

[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 */
);