Add a null encoding for ireduce.i32.i64.
This conversion doesn't require any code, we're just looking at the bits differently.
This commit is contained in:
11
cranelift/filetests/wasm/conversions.cton
Normal file
11
cranelift/filetests/wasm/conversions.cton
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
; Test code generation for WebAssembly type conversion operators.
|
||||||
|
test compile
|
||||||
|
|
||||||
|
set is_64bit=1
|
||||||
|
isa intel haswell
|
||||||
|
|
||||||
|
function %i32_wrap_i64(i64) -> i32 {
|
||||||
|
ebb0(v0: i64):
|
||||||
|
v1 = ireduce.i32 v0
|
||||||
|
return v1
|
||||||
|
}
|
||||||
@@ -193,3 +193,8 @@ I64.enc(base.bint.i64.b1, *r.urm.rex(0x0f, 0xb6, w=1))
|
|||||||
I64.enc(base.bint.i64.b1, *r.urm_abcd(0x0f, 0xb6)) # zext to i64 implicit.
|
I64.enc(base.bint.i64.b1, *r.urm_abcd(0x0f, 0xb6)) # zext to i64 implicit.
|
||||||
I64.enc(base.bint.i32.b1, *r.urm.rex(0x0f, 0xb6))
|
I64.enc(base.bint.i32.b1, *r.urm.rex(0x0f, 0xb6))
|
||||||
I64.enc(base.bint.i32.b1, *r.urm_abcd(0x0f, 0xb6))
|
I64.enc(base.bint.i32.b1, *r.urm_abcd(0x0f, 0xb6))
|
||||||
|
|
||||||
|
# Numerical conversions.
|
||||||
|
|
||||||
|
# Converting i64 to i32 is a no-op in 64-bit mode.
|
||||||
|
I64.enc(base.ireduce.i32.i64, r.null, 0)
|
||||||
|
|||||||
@@ -190,6 +190,10 @@ class TailRecipe:
|
|||||||
return (self.recipes[name], bits)
|
return (self.recipes[name], bits)
|
||||||
|
|
||||||
|
|
||||||
|
# A null unary instruction that takes a GPR register. Can be used for identity
|
||||||
|
# copies and no-op conversions.
|
||||||
|
null = EncRecipe('null', Unary, size=0, ins=GPR, outs=0, emit='')
|
||||||
|
|
||||||
# XX /r
|
# XX /r
|
||||||
rr = TailRecipe(
|
rr = TailRecipe(
|
||||||
'rr', Binary, size=1, ins=(GPR, GPR), outs=0,
|
'rr', Binary, size=1, ins=(GPR, GPR), outs=0,
|
||||||
|
|||||||
Reference in New Issue
Block a user