How about rather than counting down you keep a variable to count up? Like this: .macro xxmov n, p1, cnt=0 .if (\cnt == 0) xor %eax, %eax .endif .if (\cnt != \n) movdqu \@*0x10(\p1), %xmm\@ xxmov \n, \p1, (\cnt + 1) .endif.endm xxmov 14, %rsi Which generates: 0000000000000000 <.text>: 0: 31 c0 xor %eax,%eax 2: f3 0f 6f 06 movdqu (%rsi),%xmm0 6: f3 0f 6f 4e 10 movdqu 0x10(%rsi),%xmm1 b: f3 0f 6f 56 20 movdqu 0x20(%rsi),%xmm2 10: f3 0f 6f 5e 30 movdqu 0x30(%rsi),%xmm3 15: f3 0f 6f 66 40 movdqu 0x40(%rsi),%xmm4 1a: f3 0f 6f 6e 50 movdqu 0x50(%rsi),%xmm5 1f: f3 0f 6f 76 60 movdqu 0x60(%rsi),%xmm6 24: f3 0f 6f 7e 70 movdqu 0x70(%rsi),%xmm7 29: f3 44 0f 6f 86 80 00 00 00 movdqu 0x80(%rsi),%xmm8 32: f3 44 0f 6f 8e 90 00 00 00 movdqu 0x90(%rsi),%xmm9 3b: f3 44 0f 6f 96 a0 00 00 00 movdqu 0xa0(%rsi),%xmm10 44: f3 44 0f 6f 9e b0 00 00 00 movdqu 0xb0(%rsi),%xmm11 4d: f3 44 0f 6f a6 c0 00 00 00 movdqu 0xc0(%rsi),%xmm12 56: f3 44 0f 6f ae d0 00 00 00 movdqu 0xd0(%rsi),%xmm13 Update: Oops, that only works for the first macro usage in the file. If you need to use it more than once in the same file, it looks like using the .altmacro.macro xxmov n, p .if (\n == 1) xor %eax, %eax .endif .if (\n > 1) xxmov %(\n - 1), \p .endif movdqu (\n - 1)*0x10 (%\p) , %xmm\n.endm xxmov 4, rsi xxmov 14, rsi
|