clang 无法从 PowerPC 解析 LR 寄存器

clang fails to parse the LR register from PowerPC

代码:

.globl main
main:
  mfspr 0, lr

clang 内部汇编程序认为 lr 是一个符号,而不是寄存器:

$ clang --target=ppc32 regs.s -c; nm regs.o
         U lr
00000000 T main

有人知道怎么回事吗?

使用 %lr 根据 llvm-objdump -d 得到 7c 08 02 a6 mflr 0,没有未解析的 lr 符号。

gcc -mregnames 将 C 编译为 PPC asm 使用类似 %r3 的名称:https://godbolt.org/z/7dMnK74vc

Clang 不支持该选项;除非有不同名称的类似选项,否则 clang 的 asm 输出总是使用像 add 3, 3, 4 这样只有数字的指令。但我猜 clang / LLVM 的汇编程序支持与 GAS 相同的“符号”寄存器名称,并且这些名称以 % 开头,大概是为了将它们与符号区分开来。 (同样,以数字开头意味着它们不能是符号。)