6
我想写气体宏生成包含根据所述参数n的各种MOVDQU指令xmm寄存器中的代码。在气体宏自动生成XMM寄存器的名字吗?
.macro xxmov n, p1
.if (\n == 1)
xor %eax, %eax
.endif
.if (\n - 1)
xxmov (\n - 1), \p1
.endif
movdqu ((\n - 1)*0x10)(\p1), %xmm0
.endm
xxmov 14, %rsi
一旦编译,反汇编代码,
0000000000000000 <.text>:
0: 31 c0 xor %eax,%eax
2: f3 0f 6f 06 movdqu (%rsi),%xmm0
6: f3 0f 6f 46 10 movdqu 0x10(%rsi),%xmm0
b: f3 0f 6f 46 20 movdqu 0x20(%rsi),%xmm0
10: f3 0f 6f 46 30 movdqu 0x30(%rsi),%xmm0
15: f3 0f 6f 46 40 movdqu 0x40(%rsi),%xmm0
1a: f3 0f 6f 46 50 movdqu 0x50(%rsi),%xmm0
1f: f3 0f 6f 46 60 movdqu 0x60(%rsi),%xmm0
24: f3 0f 6f 46 70 movdqu 0x70(%rsi),%xmm0
29: f3 0f 6f 86 80 00 00 movdqu 0x80(%rsi),%xmm0
30: 00
31: f3 0f 6f 86 90 00 00 movdqu 0x90(%rsi),%xmm0
38: 00
39: f3 0f 6f 86 a0 00 00 movdqu 0xa0(%rsi),%xmm0
40: 00
41: f3 0f 6f 86 b0 00 00 movdqu 0xb0(%rsi),%xmm0
48: 00
49: f3 0f 6f 86 c0 00 00 movdqu 0xc0(%rsi),%xmm0
50: 00
51: f3 0f 6f 86 d0 00 00 movdqu 0xd0(%rsi),%xmm0
58: 00
然而,当我替换上面xxmov宏%XMM \ n%XMM0,我得到了编译错误,
$ gcc -c mac.s
mac.s: Assembler messages:
mac.s:17: Error: bad register name `%xmm(((((((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((((((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm(((((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm(((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm(((((((14 - 1)- 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((((((14 - 1)- 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm(((((14 - 1)- 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((((14 - 1)- 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm(((14 - 1)- 1)- 1)'
mac.s:17: Error: bad register name `%xmm((14 - 1)- 1)'
mac.s:17: Error: bad register name `%xmm(14 - 1)'
因此,它有反正我可以操纵我的宏XMM寄存器名称(从%XMM0到%xmm_ {N-1})?我曾尝试\ @(%XMM \ @)在http://sourceware.org/binutils/docs/as/Macro.html#Macro提及。然而,它没有很好地工作,因为我想用这个宏多的时间,而\ @似乎单调递增..
没错,.altmacro确实有助于在这里。谢谢。 – 0xa5a5