Stream: git-wasmtime

Topic: wasmtime / PR #1786 x86_32: fix stack_addr encoding


view this post on Zulip Wasmtime GitHub notifications bot (May 29 2020 at 15:28):

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

view this post on Zulip Wasmtime GitHub notifications bot (May 29 2020 at 15:37):

iximeow submitted PR Review.

view this post on Zulip Wasmtime GitHub notifications bot (May 29 2020 at 16:17):

iximeow merged PR #1786.


Last updated: Dec 23 2024 at 12:05 UTC