Bug 1317967 - Baldr: Fix x86 float32 stack argument passing (r=bbouvier)

MozReview-Commit-ID: 2NZPFZQZPcI
This commit is contained in:
Luke Wagner 2016-11-17 09:15:30 -06:00
Родитель 5cc591dc59
Коммит 724e0cf4c7
2 изменённых файлов: 44 добавлений и 1 удалений

Просмотреть файл

@ -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);
}
}

Просмотреть файл

@ -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: