whitequark opened PR #1786 from x86_32-fix-stack_addr-encoding
to master
:
Consider this testcase:
target i686 function u0:0() -> i32 system_v { ss0 = explicit_slot 0 block0: v2 = stack_addr.i32 ss0 return v2 }
Before this commit, in 32-bit mode the x86 backend would generate incorrect code for stack addresses:
0: 55 push ebp 1: 89 e5 mov ebp, esp 3: 83 ec 08 sub esp, 8 6: 8d 44 24 00 lea eax, [esp] a: 00 00 add byte ptr [eax], al c: 00 83 c4 08 5d c3 add byte ptr [ebx - 0x3ca2f73c], al
This happened because the ModRM byte indicated a disp8 encoding, but the instruction actually used a disp32 encoding. After this commit, correct code is generated:
0: 55 push ebp 1: 89 e5 mov ebp, esp 3: 83 ec 08 sub esp, 8 6: 8d 84 24 00 00 00 00 lea eax, [esp] d: 83 c4 08 add esp, 8 10: 5d pop ebp 11: c3 ret
iximeow submitted PR Review.
iximeow merged PR #1786.
Last updated: Dec 23 2024 at 12:05 UTC