зеркало из 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 {
|
} else {
|
||||||
switch (mir->input()->type()) {
|
switch (mir->input()->type()) {
|
||||||
case MIRType::Double:
|
case MIRType::Double:
|
||||||
case MIRType::Float32:
|
|
||||||
masm.storeDouble(ToFloatRegister(ins->arg()), dst);
|
masm.storeDouble(ToFloatRegister(ins->arg()), dst);
|
||||||
return;
|
return;
|
||||||
|
case MIRType::Float32:
|
||||||
|
masm.storeFloat32(ToFloatRegister(ins->arg()), dst);
|
||||||
|
return;
|
||||||
// StackPointer is SIMD-aligned and ABIArgGenerator guarantees
|
// StackPointer is SIMD-aligned and ABIArgGenerator guarantees
|
||||||
// stack offsets are SIMD-aligned.
|
// stack offsets are SIMD-aligned.
|
||||||
case MIRType::Int32x4:
|
case MIRType::Int32x4:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче