Open blackgeorge-boom opened 1 year ago
It seems that AArch64 spills the first argument, inside the recursive call to rec
, whereas X86 spills the second.
AArch64:
0000000000501020 rec:
501020: ff 03 01 d1 sub sp, sp, #0x40
501024: f4 4f 02 a9 stp x20, x19, [sp, #0x20]
501028: fd 7b 03 a9 stp x29, x30, [sp, #0x30]
50102c: fd c3 00 91 add x29, sp, #0x30
501030: e1 03 02 29 stp w1, w0, [sp, #0x10]
501034: e2 0f 00 b9 str w2, [sp, #0xc]
501038: 00 01 00 34 cbz w0, #0x20 <rec+0x38>
50103c: f4 23 42 29 ldp w20, w8, [sp, #0x10]
501040: f3 0f 40 b9 ldr w19, [sp, #0xc]
501044: 00 05 00 51 sub w0, w8, #0x1
501048: e1 03 14 2a mov w1, w20
50104c: e2 03 13 2a mov w2, w19
501050: e0 0b 00 b9 str w0, [sp, #0x8] <---
501054: f3 ff ff 97 bl #-0x34 <rec>
...
X86:
0000000000501020 <rec>:
501020: 55 push rbp
501021: 48 89 e5 mov rbp,rsp
501024: 53 push rbx
501025: 41 57 push r15
501027: 48 83 ec 20 sub rsp,0x20
50102b: 89 7d e4 mov DWORD PTR [rbp-0x1c],edi
50102e: 89 75 e0 mov DWORD PTR [rbp-0x20],esi
501031: 89 55 dc mov DWORD PTR [rbp-0x24],edx
501034: 85 ff test edi,edi
501036: 0f 84 1c 00 00 00 je 501058 <rec+0x38>
50103c: 8b 5d e4 mov ebx,DWORD PTR [rbp-0x1c]
50103f: ff cb dec ebx
501041: 8b 75 e0 mov esi,DWORD PTR [rbp-0x20]
501044: 89 75 d8 mov DWORD PTR [rbp-0x28],esi <---
501047: 44 8b 7d dc mov r15d,DWORD PTR [rbp-0x24]
50104b: 89 df mov edi,ebx
50104d: 44 89 fa mov edx,r15d
501050: 0f 1f 00 nop DWORD PTR [rax]
501053: e8 c8 ff ff ff call 501020 <rec>
...
Minimal example: