зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1317967 - Baldr: Fix x86 float32 stack argument passing (r=bbouvier)
MozReview-Commit-ID: 2NZPFZQZPcI
This commit is contained in:
Родитель
5cc591dc59
Коммит
724e0cf4c7
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче