From 724e0cf4c731a94b7818cfb82ad918289039157e Mon Sep 17 00:00:00 2001 From: Luke Wagner Date: Thu, 17 Nov 2016 09:15:30 -0600 Subject: [PATCH] Bug 1317967 - Baldr: Fix x86 float32 stack argument passing (r=bbouvier) MozReview-Commit-ID: 2NZPFZQZPcI --- js/src/jit-test/tests/wasm/wasm-abi.js | 41 +++++++++++++++++++ .../x86-shared/CodeGenerator-x86-shared.cpp | 4 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 js/src/jit-test/tests/wasm/wasm-abi.js diff --git a/js/src/jit-test/tests/wasm/wasm-abi.js b/js/src/jit-test/tests/wasm/wasm-abi.js new file mode 100644 index 000000000000..510e94cac0dc --- /dev/null +++ b/js/src/jit-test/tests/wasm/wasm-abi.js @@ -0,0 +1,41 @@ +load(libdir + "wasm.js"); + +for (let numLocals of [3, 4, 5, 6, 17, 18, 19]) { + for (let numParams of [1, 2, 3, 4, 5, 6, 7, 8]) { + let locals = ` (local `; + let setLocals = ``; + let getLocals = ``; + let adds = ``; + let sum = 0; + for (let i = 0; i < numLocals; i++) { + sum += i + 1; + locals += `i32 `; + setLocals += ` (set_local ${i + 1} (i32.add (get_local 0) (i32.const ${i + 1})))\n`; + getLocals += ` get_local ${i + 1}\n`; + if (i > 0) + adds += ` i32.add\n`; + } + locals += `)\n`; + + var callee = ` (func $f (param `; + var caller = ` (call $f `; + for (let i = 0; i < numParams; i++) { + callee += `f32 `; + caller += `(f32.const ${i}) `; + } + callee += `))\n`; + caller += `)\n`; + + var code = `(module \n` + + callee + + ` (func (export "run") (param i32) (result i32)\n` + + locals + + setLocals + + caller + + getLocals + + adds + + ` )\n` + + `)`; + wasmFullPass(code, numLocals * 100 + sum, undefined, 100); + } +} diff --git a/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp b/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp index 3e6de1c22539..9cf03aedeb43 100644 --- a/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp +++ b/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp @@ -294,9 +294,11 @@ CodeGeneratorX86Shared::visitWasmStackArg(LWasmStackArg* ins) } else { switch (mir->input()->type()) { case MIRType::Double: - case MIRType::Float32: masm.storeDouble(ToFloatRegister(ins->arg()), dst); return; + case MIRType::Float32: + masm.storeFloat32(ToFloatRegister(ins->arg()), dst); + return; // StackPointer is SIMD-aligned and ABIArgGenerator guarantees // stack offsets are SIMD-aligned. case MIRType::Int32x4: