cranelift: Implement {u,s}extend.i128 in interpreter (#4505)

This commit is contained in:
Afonso Bordado
2022-07-22 18:47:10 +01:00
committed by GitHub
parent 2ba3025e67
commit d89c262657
3 changed files with 16 additions and 1 deletions

View File

@@ -1,3 +1,4 @@
test interpret
test run test run
target aarch64 target aarch64
target s390x target s390x
@@ -210,4 +211,3 @@ block0(v0: i32, v1: i32):
} }
; run: %add_sextend32_64(0xffff_ee00, 0x1000_0001) == 0x0000_0000_0fff_ee01 ; run: %add_sextend32_64(0xffff_ee00, 0x1000_0001) == 0x0000_0000_0fff_ee01
; run: %add_sextend32_64(0xffff_ee00, 0x9000_0001) == 0xffff_ffff_8fff_ee01 ; run: %add_sextend32_64(0xffff_ee00, 0x9000_0001) == 0xffff_ffff_8fff_ee01

View File

@@ -1,3 +1,4 @@
test interpret
test run test run
set enable_llvm_abi_extensions=true set enable_llvm_abi_extensions=true
target aarch64 target aarch64

View File

@@ -343,15 +343,22 @@ impl Value for DataValue {
(DataValue::U8(n), types::I16) => DataValue::U16(n as u16), (DataValue::U8(n), types::I16) => DataValue::U16(n as u16),
(DataValue::U8(n), types::I32) => DataValue::U32(n as u32), (DataValue::U8(n), types::I32) => DataValue::U32(n as u32),
(DataValue::U8(n), types::I64) => DataValue::U64(n as u64), (DataValue::U8(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U8(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I8(n), types::I16) => DataValue::I16(n as i16), (DataValue::I8(n), types::I16) => DataValue::I16(n as i16),
(DataValue::I8(n), types::I32) => DataValue::I32(n as i32), (DataValue::I8(n), types::I32) => DataValue::I32(n as i32),
(DataValue::I8(n), types::I64) => DataValue::I64(n as i64), (DataValue::I8(n), types::I64) => DataValue::I64(n as i64),
(DataValue::I8(n), types::I128) => DataValue::I128(n as i128),
(DataValue::U16(n), types::I32) => DataValue::U32(n as u32), (DataValue::U16(n), types::I32) => DataValue::U32(n as u32),
(DataValue::U16(n), types::I64) => DataValue::U64(n as u64), (DataValue::U16(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U16(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I16(n), types::I32) => DataValue::I32(n as i32), (DataValue::I16(n), types::I32) => DataValue::I32(n as i32),
(DataValue::I16(n), types::I64) => DataValue::I64(n as i64), (DataValue::I16(n), types::I64) => DataValue::I64(n as i64),
(DataValue::I16(n), types::I128) => DataValue::I128(n as i128),
(DataValue::U32(n), types::I64) => DataValue::U64(n as u64), (DataValue::U32(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U32(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I32(n), types::I64) => DataValue::I64(n as i64), (DataValue::I32(n), types::I64) => DataValue::I64(n as i64),
(DataValue::I32(n), types::I128) => DataValue::I128(n as i128),
(DataValue::U64(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I64(n), types::I128) => DataValue::I128(n as i128), (DataValue::I64(n), types::I128) => DataValue::I128(n as i128),
(dv, _) => unimplemented!("conversion: {} -> {:?}", dv.ty(), kind), (dv, _) => unimplemented!("conversion: {} -> {:?}", dv.ty(), kind),
}, },
@@ -359,15 +366,22 @@ impl Value for DataValue {
(DataValue::U8(n), types::I16) => DataValue::U16(n as u16), (DataValue::U8(n), types::I16) => DataValue::U16(n as u16),
(DataValue::U8(n), types::I32) => DataValue::U32(n as u32), (DataValue::U8(n), types::I32) => DataValue::U32(n as u32),
(DataValue::U8(n), types::I64) => DataValue::U64(n as u64), (DataValue::U8(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U8(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I8(n), types::I16) => DataValue::I16(n as u8 as i16), (DataValue::I8(n), types::I16) => DataValue::I16(n as u8 as i16),
(DataValue::I8(n), types::I32) => DataValue::I32(n as u8 as i32), (DataValue::I8(n), types::I32) => DataValue::I32(n as u8 as i32),
(DataValue::I8(n), types::I64) => DataValue::I64(n as u8 as i64), (DataValue::I8(n), types::I64) => DataValue::I64(n as u8 as i64),
(DataValue::I8(n), types::I128) => DataValue::I128(n as u8 as i128),
(DataValue::U16(n), types::I32) => DataValue::U32(n as u32), (DataValue::U16(n), types::I32) => DataValue::U32(n as u32),
(DataValue::U16(n), types::I64) => DataValue::U64(n as u64), (DataValue::U16(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U16(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I16(n), types::I32) => DataValue::I32(n as u16 as i32), (DataValue::I16(n), types::I32) => DataValue::I32(n as u16 as i32),
(DataValue::I16(n), types::I64) => DataValue::I64(n as u16 as i64), (DataValue::I16(n), types::I64) => DataValue::I64(n as u16 as i64),
(DataValue::I16(n), types::I128) => DataValue::I128(n as u16 as i128),
(DataValue::U32(n), types::I64) => DataValue::U64(n as u64), (DataValue::U32(n), types::I64) => DataValue::U64(n as u64),
(DataValue::U32(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I32(n), types::I64) => DataValue::I64(n as u32 as i64), (DataValue::I32(n), types::I64) => DataValue::I64(n as u32 as i64),
(DataValue::I32(n), types::I128) => DataValue::I128(n as u32 as i128),
(DataValue::U64(n), types::I128) => DataValue::U128(n as u128),
(DataValue::I64(n), types::I128) => DataValue::I128(n as u64 as i128), (DataValue::I64(n), types::I128) => DataValue::I128(n as u64 as i128),
(from, to) if from.ty() == to => from, (from, to) if from.ty() == to => from,
(dv, _) => unimplemented!("conversion: {} -> {:?}", dv.ty(), kind), (dv, _) => unimplemented!("conversion: {} -> {:?}", dv.ty(), kind),