diff --git a/internal/engine/wazevo/backend/isa/amd64/machine.go b/internal/engine/wazevo/backend/isa/amd64/machine.go index 107930ae..8a10a082 100644 --- a/internal/engine/wazevo/backend/isa/amd64/machine.go +++ b/internal/engine/wazevo/backend/isa/amd64/machine.go @@ -2171,7 +2171,8 @@ func (m *machine) lowerFminFmax(instr *ssa.Instruction) { xDef, yDef := m.c.ValueDefinition(x), m.c.ValueDefinition(y) rm := m.getOperand_Reg(xDef) - rn := m.getOperand_Mem_Reg(yDef) + // We cannot ensure that y is aligned to 16 bytes, so we have to use it on reg. + rn := m.getOperand_Reg(yDef) rd := m.c.VRegOf(instr.Return()) tmp := m.copyToTmp(rm.reg()) diff --git a/internal/integration_test/fuzzcases/fuzzcases_test.go b/internal/integration_test/fuzzcases/fuzzcases_test.go index 8bd981d4..64a3420b 100644 --- a/internal/integration_test/fuzzcases/fuzzcases_test.go +++ b/internal/integration_test/fuzzcases/fuzzcases_test.go @@ -1018,3 +1018,10 @@ func Test2082(t *testing.T) { } nodiff.RequireNoDiffT(t, getWasmBinary(t, "2082"), true, true) } + +func Test2084(t *testing.T) { + if !platform.CompilerSupported() { + return + } + nodiff.RequireNoDiffT(t, getWasmBinary(t, "2084"), true, true) +} diff --git a/internal/integration_test/fuzzcases/testdata/2084.wasm b/internal/integration_test/fuzzcases/testdata/2084.wasm new file mode 100644 index 00000000..9c5ce9ae Binary files /dev/null and b/internal/integration_test/fuzzcases/testdata/2084.wasm differ diff --git a/internal/integration_test/fuzzcases/testdata/2084.wat b/internal/integration_test/fuzzcases/testdata/2084.wat new file mode 100644 index 00000000..7a644bbd --- /dev/null +++ b/internal/integration_test/fuzzcases/testdata/2084.wat @@ -0,0 +1,20 @@ +(module + (type (;0;) (func (param i32 f64))) + (func (;0;) (type 0) (param i32 f64) + (local i32 f32 f32) + i32.const 0 + if ;; label = @1 + unreachable + end + f32.const 0x0p+0 (;=0;) + memory.size + f32.load offset=93531 align=2 + f32.max + i32.reinterpret_f32 + i32.const 0 + i32.xor + global.set 0 + ) + (memory (;0;) 6 8) + (global (;0;) (mut i32) i32.const 0) + (export "" (func 0)))