Source code

Revision control

Copy as Markdown

Other Tools

// Bug 1322450 is about the baseline compiler not properly handling a byte store
// from a wider datum on 32-bit x86 because it does not move the value to be
// stored to a valid byte register if it is in a 32-bit register that does not
// have a byte part (EDI/ESI/EBP).
//
// This test is white-box because it knows about the register allocation order:
// the two values pushed onto the stack occupy EAX and ECX, and the i64.store8
// will use EDX for the index and (EDI or ESI or EBP) for the low register of
// the value to be stored. The i64.store8 instruction will then assert in the
// assembler.
//
// If the baseline compiler starts allocating registers in a different order
// then this test will be ineffective.
wasmEvalText(`(module
(memory 1)
(func $run (param i64) (param i32) (param i32)
local.get 1
local.get 2
i32.add
local.get 1
local.get 2
i32.add
i32.const 0
local.get 0
i64.store8
drop
drop
)
(export "run" (func $run))
)`);