From c3d01756a33d9a8276c65b39fd432ffb09495f28 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Wed, 25 Sep 2019 14:09:11 +0200 Subject: [PATCH] Baldrdash: uses ECX for the WasmTableCallSigReg on x86 32-bits; --- cranelift/codegen/src/isa/x86/abi.rs | 9 ++++++++- .../filetests/isa/x86/baldrdash-table-sig-reg.clif | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 cranelift/filetests/filetests/isa/x86/baldrdash-table-sig-reg.clif diff --git a/cranelift/codegen/src/isa/x86/abi.rs b/cranelift/codegen/src/isa/x86/abi.rs index 6252a3fb77..6bd766724e 100644 --- a/cranelift/codegen/src/isa/x86/abi.rs +++ b/cranelift/codegen/src/isa/x86/abi.rs @@ -120,7 +120,14 @@ impl ArgAssigner for Args { .into(); } // This is SpiderMonkey's `WasmTableCallSigReg`. - ArgumentPurpose::SignatureId => return ArgumentLoc::Reg(RU::r10 as RegUnit).into(), + ArgumentPurpose::SignatureId => { + return ArgumentLoc::Reg(if self.pointer_bits == 64 { + RU::r10 + } else { + RU::rcx + } as RegUnit) + .into() + } _ => {} } } diff --git a/cranelift/filetests/filetests/isa/x86/baldrdash-table-sig-reg.clif b/cranelift/filetests/filetests/isa/x86/baldrdash-table-sig-reg.clif new file mode 100644 index 0000000000..73aaaeb283 --- /dev/null +++ b/cranelift/filetests/filetests/isa/x86/baldrdash-table-sig-reg.clif @@ -0,0 +1,14 @@ +test compile +set probestack_enabled=false +target i686 + +function u0:0(i32 vmctx) baldrdash_system_v { + sig0 = (i32 vmctx, i32 sigid) baldrdash_system_v + +ebb0(v0: i32): + v2 = iconst.i32 0 + v8 = iconst.i32 0 + v9 = iconst.i32 0 + call_indirect sig0, v8(v9, v2) + trap user0 +}