簡體   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