From ac9725840de6aba21e79ac31e9a0c18d06a437a0 Mon Sep 17 00:00:00 2001 From: Afonso Bordado Date: Fri, 12 Aug 2022 01:57:00 +0100 Subject: [PATCH] cranelift: Add shifts and extends to fuzzer (#4700) * cranelift: Remove shifts-small-types runtests These were moved to the main shifts file in #4519 but this file was accidentaly left in tree. It also fixes the missing sshr_i8_i8 testcase * cranelift: Add shifts to fuzzer * cranelift: Add extends to fuzzer --- .../runtests/shifts-small-types.clif | 322 ------------------ .../filetests/filetests/runtests/shifts.clif | 10 +- cranelift/fuzzgen/src/function_generator.rs | 103 ++++++ 3 files changed, 108 insertions(+), 327 deletions(-) delete mode 100644 cranelift/filetests/filetests/runtests/shifts-small-types.clif diff --git a/cranelift/filetests/filetests/runtests/shifts-small-types.clif b/cranelift/filetests/filetests/runtests/shifts-small-types.clif deleted file mode 100644 index 9b2207a3933d..000000000000 --- a/cranelift/filetests/filetests/runtests/shifts-small-types.clif +++ /dev/null @@ -1,322 +0,0 @@ -test run -target aarch64 -target s390x - -; TODO: Merge this with the main shifts file when x86_64 passes these. - -function %ishl_i16_i64(i16, i64) -> i16 { -block0(v0: i16, v1: i64): - v2 = ishl.i16 v0, v1 - return v2 -} -; run: %ishl_i16_i64(0x0000, 0) == 0x0000 -; run: %ishl_i16_i64(0x0000, 1) == 0x0000 -; run: %ishl_i16_i64(0x000f, 0) == 0x000f -; run: %ishl_i16_i64(0x000f, 4) == 0x00f0 -; run: %ishl_i16_i64(0x0004, 16) == 0x0004 -; run: %ishl_i16_i64(0x0004, 17) == 0x0008 -; run: %ishl_i16_i64(0x0004, 18) == 0x0010 - -function %ishl_i16_i32(i16, i32) -> i16 { -block0(v0: i16, v1: i32): - v2 = ishl.i16 v0, v1 - return v2 -} -; run: %ishl_i16_i32(0x0000, 0) == 0x0000 -; run: %ishl_i16_i32(0x0000, 1) == 0x0000 -; run: %ishl_i16_i32(0x000f, 0) == 0x000f -; run: %ishl_i16_i32(0x000f, 4) == 0x00f0 -; run: %ishl_i16_i32(0x0004, 16) == 0x0004 -; run: %ishl_i16_i32(0x0004, 17) == 0x0008 -; run: %ishl_i16_i32(0x0004, 18) == 0x0010 - -function %ishl_i16_i16(i16, i16) -> i16 { -block0(v0: i16, v1: i16): - v2 = ishl.i16 v0, v1 - return v2 -} -; run: %ishl_i16_i16(0x0000, 0) == 0x0000 -; run: %ishl_i16_i16(0x0000, 1) == 0x0000 -; run: %ishl_i16_i16(0x000f, 0) == 0x000f -; run: %ishl_i16_i16(0x000f, 4) == 0x00f0 -; run: %ishl_i16_i16(0x0004, 16) == 0x0004 -; run: %ishl_i16_i16(0x0004, 17) == 0x0008 -; run: %ishl_i16_i16(0x0004, 18) == 0x0010 - -function %ishl_i16_i8(i16, i8) -> i16 { -block0(v0: i16, v1: i8): - v2 = ishl.i16 v0, v1 - return v2 -} -; run: %ishl_i16_i8(0x0000, 0) == 0x0000 -; run: %ishl_i16_i8(0x0000, 1) == 0x0000 -; run: %ishl_i16_i8(0x000f, 0) == 0x000f -; run: %ishl_i16_i8(0x000f, 4) == 0x00f0 -; run: %ishl_i16_i8(0x0004, 16) == 0x0004 -; run: %ishl_i16_i8(0x0004, 17) == 0x0008 -; run: %ishl_i16_i8(0x0004, 18) == 0x0010 - - -function %ishl_i8_i64(i8, i64) -> i8 { -block0(v0: i8, v1: i64): - v2 = ishl.i8 v0, v1 - return v2 -} -; run: %ishl_i8_i64(0x00, 0) == 0x00 -; run: %ishl_i8_i64(0x00, 1) == 0x00 -; run: %ishl_i8_i64(0x0f, 0) == 0x0f -; run: %ishl_i8_i64(0x0f, 4) == 0xf0 -; run: %ishl_i8_i64(0x04, 8) == 0x04 -; run: %ishl_i8_i64(0x04, 9) == 0x08 -; run: %ishl_i8_i64(0x04, 10) == 0x10 - -function %ishl_i8_i32(i8, i32) -> i8 { -block0(v0: i8, v1: i32): - v2 = ishl.i8 v0, v1 - return v2 -} -; run: %ishl_i8_i32(0x00, 0) == 0x00 -; run: %ishl_i8_i32(0x00, 1) == 0x00 -; run: %ishl_i8_i32(0x0f, 0) == 0x0f -; run: %ishl_i8_i32(0x0f, 4) == 0xf0 -; run: %ishl_i8_i32(0x04, 8) == 0x04 -; run: %ishl_i8_i32(0x04, 9) == 0x08 -; run: %ishl_i8_i32(0x04, 10) == 0x10 - -function %ishl_i8_i16(i8, i16) -> i8 { -block0(v0: i8, v1: i16): - v2 = ishl.i8 v0, v1 - return v2 -} -; run: %ishl_i8_i16(0x00, 0) == 0x00 -; run: %ishl_i8_i16(0x00, 1) == 0x00 -; run: %ishl_i8_i16(0x0f, 0) == 0x0f -; run: %ishl_i8_i16(0x0f, 4) == 0xf0 -; run: %ishl_i8_i16(0x04, 8) == 0x04 -; run: %ishl_i8_i16(0x04, 9) == 0x08 -; run: %ishl_i8_i16(0x04, 10) == 0x10 - -function %ishl_i8_i8(i8, i8) -> i8 { -block0(v0: i8, v1: i8): - v2 = ishl.i8 v0, v1 - return v2 -} -; run: %ishl_i8_i8(0x00, 0) == 0x00 -; run: %ishl_i8_i8(0x00, 1) == 0x00 -; run: %ishl_i8_i8(0x0f, 0) == 0x0f -; run: %ishl_i8_i8(0x0f, 4) == 0xf0 -; run: %ishl_i8_i8(0x04, 8) == 0x04 -; run: %ishl_i8_i8(0x04, 9) == 0x08 -; run: %ishl_i8_i8(0x04, 10) == 0x10 - - - -function %ushr_i16_i64(i16, i64) -> i16 { -block0(v0: i16, v1: i64): - v2 = ushr.i16 v0, v1 - return v2 -} -; run: %ushr_i16_i64(0x1000, 0) == 0x1000 -; run: %ushr_i16_i64(0x1000, 1) == 0x0800 -; run: %ushr_i16_i64(0xf000, 0) == 0xf000 -; run: %ushr_i16_i64(0xf000, 4) == 0x0f00 -; run: %ushr_i16_i64(0x4000, 16) == 0x4000 -; run: %ushr_i16_i64(0x4000, 17) == 0x2000 -; run: %ushr_i16_i64(0x4000, 18) == 0x1000 - -function %ushr_i16_i32(i16, i32) -> i16 { -block0(v0: i16, v1: i32): - v2 = ushr.i16 v0, v1 - return v2 -} -; run: %ushr_i16_i32(0x1000, 0) == 0x1000 -; run: %ushr_i16_i32(0x1000, 1) == 0x0800 -; run: %ushr_i16_i32(0xf000, 0) == 0xf000 -; run: %ushr_i16_i32(0xf000, 4) == 0x0f00 -; run: %ushr_i16_i32(0x4000, 16) == 0x4000 -; run: %ushr_i16_i32(0x4000, 17) == 0x2000 -; run: %ushr_i16_i32(0x4000, 18) == 0x1000 - -function %ushr_i16_i16(i16, i16) -> i16 { -block0(v0: i16, v1: i16): - v2 = ushr.i16 v0, v1 - return v2 -} -; run: %ushr_i16_i16(0x1000, 0) == 0x1000 -; run: %ushr_i16_i16(0x1000, 1) == 0x0800 -; run: %ushr_i16_i16(0xf000, 0) == 0xf000 -; run: %ushr_i16_i16(0xf000, 4) == 0x0f00 -; run: %ushr_i16_i16(0x4000, 16) == 0x4000 -; run: %ushr_i16_i16(0x4000, 17) == 0x2000 -; run: %ushr_i16_i16(0x4000, 18) == 0x1000 - -function %ushr_i16_i8(i16, i8) -> i16 { -block0(v0: i16, v1: i8): - v2 = ushr.i16 v0, v1 - return v2 -} -; run: %ushr_i16_i8(0x1000, 0) == 0x1000 -; run: %ushr_i16_i8(0x1000, 1) == 0x0800 -; run: %ushr_i16_i8(0xf000, 0) == 0xf000 -; run: %ushr_i16_i8(0xf000, 4) == 0x0f00 -; run: %ushr_i16_i8(0x4000, 16) == 0x4000 -; run: %ushr_i16_i8(0x4000, 17) == 0x2000 -; run: %ushr_i16_i8(0x4000, 18) == 0x1000 - -function %ushr_i8_i64(i8, i64) -> i8 { -block0(v0: i8, v1: i64): - v2 = ushr.i8 v0, v1 - return v2 -} -; run: %ushr_i8_i64(0x10, 0) == 0x10 -; run: %ushr_i8_i64(0x10, 1) == 0x08 -; run: %ushr_i8_i64(0xf0, 0) == 0xf0 -; run: %ushr_i8_i64(0xf0, 4) == 0x0f -; run: %ushr_i8_i64(0x40, 8) == 0x40 -; run: %ushr_i8_i64(0x40, 9) == 0x20 -; run: %ushr_i8_i64(0x40, 10) == 0x10 - -function %ushr_i8_i32(i8, i32) -> i8 { -block0(v0: i8, v1: i32): - v2 = ushr.i8 v0, v1 - return v2 -} -; run: %ushr_i8_i32(0x10, 0) == 0x10 -; run: %ushr_i8_i32(0x10, 1) == 0x08 -; run: %ushr_i8_i32(0xf0, 0) == 0xf0 -; run: %ushr_i8_i32(0xf0, 4) == 0x0f -; run: %ushr_i8_i32(0x40, 8) == 0x40 -; run: %ushr_i8_i32(0x40, 9) == 0x20 -; run: %ushr_i8_i32(0x40, 10) == 0x10 - -function %ushr_i8_i16(i8, i16) -> i8 { -block0(v0: i8, v1: i16): - v2 = ushr.i8 v0, v1 - return v2 -} -; run: %ushr_i8_i16(0x10, 0) == 0x10 -; run: %ushr_i8_i16(0x10, 1) == 0x08 -; run: %ushr_i8_i16(0xf0, 0) == 0xf0 -; run: %ushr_i8_i16(0xf0, 4) == 0x0f -; run: %ushr_i8_i16(0x40, 8) == 0x40 -; run: %ushr_i8_i16(0x40, 9) == 0x20 -; run: %ushr_i8_i16(0x40, 10) == 0x10 - -function %ushr_i8_i8(i8, i8) -> i8 { -block0(v0: i8, v1: i8): - v2 = ushr.i8 v0, v1 - return v2 -} -; run: %ushr_i8_i8(0x10, 0) == 0x10 -; run: %ushr_i8_i8(0x10, 1) == 0x08 -; run: %ushr_i8_i8(0xf0, 0) == 0xf0 -; run: %ushr_i8_i8(0xf0, 4) == 0x0f -; run: %ushr_i8_i8(0x40, 8) == 0x40 -; run: %ushr_i8_i8(0x40, 9) == 0x20 -; run: %ushr_i8_i8(0x40, 10) == 0x10 - - - -function %sshr_i16_i64(i16, i64) -> i16 { -block0(v0: i16, v1: i64): - v2 = sshr.i16 v0, v1 - return v2 -} -; run: %sshr_i16_i64(0x8000, 0) == 0x8000 -; run: %sshr_i16_i64(0x8000, 1) == 0xC000 -; run: %sshr_i16_i64(0xf000, 0) == 0xf000 -; run: %sshr_i16_i64(0xf000, 4) == 0xff00 -; run: %sshr_i16_i64(0x4000, 16) == 0x4000 -; run: %sshr_i16_i64(0x4000, 17) == 0x2000 -; run: %sshr_i16_i64(0x4000, 18) == 0x1000 - -function %sshr_i16_i32(i16, i32) -> i16 { -block0(v0: i16, v1: i32): - v2 = sshr.i16 v0, v1 - return v2 -} -; run: %sshr_i16_i32(0x8000, 0) == 0x8000 -; run: %sshr_i16_i32(0x8000, 1) == 0xC000 -; run: %sshr_i16_i32(0xf000, 0) == 0xf000 -; run: %sshr_i16_i32(0xf000, 4) == 0xff00 -; run: %sshr_i16_i32(0x4000, 16) == 0x4000 -; run: %sshr_i16_i32(0x4000, 17) == 0x2000 -; run: %sshr_i16_i32(0x4000, 18) == 0x1000 - -function %sshr_i16_i16(i16, i16) -> i16 { -block0(v0: i16, v1: i16): - v2 = sshr.i16 v0, v1 - return v2 -} -; run: %sshr_i16_i16(0x8000, 0) == 0x8000 -; run: %sshr_i16_i16(0x8000, 1) == 0xC000 -; run: %sshr_i16_i16(0xf000, 0) == 0xf000 -; run: %sshr_i16_i16(0xf000, 4) == 0xff00 -; run: %sshr_i16_i16(0x4000, 16) == 0x4000 -; run: %sshr_i16_i16(0x4000, 17) == 0x2000 -; run: %sshr_i16_i16(0x4000, 18) == 0x1000 - -function %sshr_i16_i8(i16, i8) -> i16 { -block0(v0: i16, v1: i8): - v2 = sshr.i16 v0, v1 - return v2 -} -; run: %sshr_i16_i8(0x8000, 0) == 0x8000 -; run: %sshr_i16_i8(0x8000, 1) == 0xC000 -; run: %sshr_i16_i8(0xf000, 0) == 0xf000 -; run: %sshr_i16_i8(0xf000, 4) == 0xff00 -; run: %sshr_i16_i8(0x4000, 16) == 0x4000 -; run: %sshr_i16_i8(0x4000, 17) == 0x2000 -; run: %sshr_i16_i8(0x4000, 18) == 0x1000 - -function %sshr_i8_i64(i8, i64) -> i8 { -block0(v0: i8, v1: i64): - v2 = sshr.i8 v0, v1 - return v2 -} -; run: %sshr_i8_i64(0x80, 0) == 0x80 -; run: %sshr_i8_i64(0x80, 1) == 0xC0 -; run: %sshr_i8_i64(0xf0, 0) == 0xf0 -; run: %sshr_i8_i64(0xf0, 4) == 0xff -; run: %sshr_i8_i64(0x40, 8) == 0x40 -; run: %sshr_i8_i64(0x40, 9) == 0x20 -; run: %sshr_i8_i64(0x40, 10) == 0x10 - -function %sshr_i8_i32(i8, i32) -> i8 { -block0(v0: i8, v1: i32): - v2 = sshr.i8 v0, v1 - return v2 -} -; run: %sshr_i8_i32(0x80, 0) == 0x80 -; run: %sshr_i8_i32(0x80, 1) == 0xC0 -; run: %sshr_i8_i32(0xf0, 0) == 0xf0 -; run: %sshr_i8_i32(0xf0, 4) == 0xff -; run: %sshr_i8_i32(0x40, 8) == 0x40 -; run: %sshr_i8_i32(0x40, 9) == 0x20 -; run: %sshr_i8_i32(0x40, 10) == 0x10 - -function %sshr_i8_i16(i8, i16) -> i8 { -block0(v0: i8, v1: i16): - v2 = sshr.i8 v0, v1 - return v2 -} -; run: %sshr_i8_i16(0x80, 0) == 0x80 -; run: %sshr_i8_i16(0x80, 1) == 0xC0 -; run: %sshr_i8_i16(0xf0, 0) == 0xf0 -; run: %sshr_i8_i16(0xf0, 4) == 0xff -; run: %sshr_i8_i16(0x40, 8) == 0x40 -; run: %sshr_i8_i16(0x40, 9) == 0x20 -; run: %sshr_i8_i16(0x40, 10) == 0x10 - -function %sshr_i8_i64(i8, i64) -> i8 { -block0(v0: i8, v1: i64): - v2 = sshr.i8 v0, v1 - return v2 -} -; run: %sshr_i8_i64(0x80, 0) == 0x80 -; run: %sshr_i8_i64(0x80, 1) == 0xC0 -; run: %sshr_i8_i64(0xf0, 0) == 0xf0 -; run: %sshr_i8_i64(0xf0, 4) == 0xff -; run: %sshr_i8_i64(0x40, 8) == 0x40 -; run: %sshr_i8_i64(0x40, 9) == 0x20 -; run: %sshr_i8_i64(0x40, 10) == 0x10 diff --git a/cranelift/filetests/filetests/runtests/shifts.clif b/cranelift/filetests/filetests/runtests/shifts.clif index 31fad8da36ce..9fd7657534f9 100644 --- a/cranelift/filetests/filetests/runtests/shifts.clif +++ b/cranelift/filetests/filetests/runtests/shifts.clif @@ -627,15 +627,15 @@ block0(v0: i8, v1: i16): ; run: %sshr_i8_i16(0x40, 33) == 0x20 ; run: %sshr_i8_i16(0x40, 34) == 0x10 -function %sshr_i8_i8(i16, i8) -> i16 { -block0(v0: i16, v1: i8): - v2 = sshr.i16 v0, v1 +function %sshr_i8_i8(i8, i8) -> i8 { +block0(v0: i8, v1: i8): + v2 = sshr.i8 v0, v1 return v2 } ; run: %sshr_i8_i8(0x80, 0) == 0x80 -; run: %sshr_i8_i8(0x80, 1) == 0x40 +; run: %sshr_i8_i8(0x80, 1) == 0xC0 ; run: %sshr_i8_i8(0xf0, 0) == 0xf0 -; run: %sshr_i8_i8(0xf0, 4) == 0x0f +; run: %sshr_i8_i8(0xf0, 4) == 0xff ; run: %sshr_i8_i8(0x40, 32) == 0x40 ; run: %sshr_i8_i8(0x40, 33) == 0x20 ; run: %sshr_i8_i8(0x40, 34) == 0x10 diff --git a/cranelift/fuzzgen/src/function_generator.rs b/cranelift/fuzzgen/src/function_generator.rs index 829c46365708..68e9af330ba1 100644 --- a/cranelift/fuzzgen/src/function_generator.rs +++ b/cranelift/fuzzgen/src/function_generator.rs @@ -193,6 +193,109 @@ const OPCODE_SIGNATURES: &'static [( (Opcode::Rotl, &[I128, I32], &[I128], insert_opcode), (Opcode::Rotl, &[I128, I64], &[I128], insert_opcode), (Opcode::Rotl, &[I128, I128], &[I128], insert_opcode), + // Ishl + // Some test cases disabled due to: https://github.com/bytecodealliance/wasmtime/issues/4699 + (Opcode::Ishl, &[I8, I8], &[I8], insert_opcode), + (Opcode::Ishl, &[I8, I16], &[I8], insert_opcode), + (Opcode::Ishl, &[I8, I32], &[I8], insert_opcode), + (Opcode::Ishl, &[I8, I64], &[I8], insert_opcode), + // (Opcode::Ishl, &[I8, I128], &[I8], insert_opcode), + (Opcode::Ishl, &[I16, I8], &[I16], insert_opcode), + (Opcode::Ishl, &[I16, I16], &[I16], insert_opcode), + (Opcode::Ishl, &[I16, I32], &[I16], insert_opcode), + (Opcode::Ishl, &[I16, I64], &[I16], insert_opcode), + // (Opcode::Ishl, &[I16, I128], &[I16], insert_opcode), + (Opcode::Ishl, &[I32, I8], &[I32], insert_opcode), + (Opcode::Ishl, &[I32, I16], &[I32], insert_opcode), + (Opcode::Ishl, &[I32, I32], &[I32], insert_opcode), + (Opcode::Ishl, &[I32, I64], &[I32], insert_opcode), + (Opcode::Ishl, &[I32, I128], &[I32], insert_opcode), + (Opcode::Ishl, &[I64, I8], &[I64], insert_opcode), + (Opcode::Ishl, &[I64, I16], &[I64], insert_opcode), + (Opcode::Ishl, &[I64, I32], &[I64], insert_opcode), + (Opcode::Ishl, &[I64, I64], &[I64], insert_opcode), + (Opcode::Ishl, &[I64, I128], &[I64], insert_opcode), + (Opcode::Ishl, &[I128, I8], &[I128], insert_opcode), + (Opcode::Ishl, &[I128, I16], &[I128], insert_opcode), + (Opcode::Ishl, &[I128, I32], &[I128], insert_opcode), + (Opcode::Ishl, &[I128, I64], &[I128], insert_opcode), + (Opcode::Ishl, &[I128, I128], &[I128], insert_opcode), + // Sshr + // Some test cases disabled due to: https://github.com/bytecodealliance/wasmtime/issues/4699 + (Opcode::Sshr, &[I8, I8], &[I8], insert_opcode), + (Opcode::Sshr, &[I8, I16], &[I8], insert_opcode), + (Opcode::Sshr, &[I8, I32], &[I8], insert_opcode), + (Opcode::Sshr, &[I8, I64], &[I8], insert_opcode), + // (Opcode::Sshr, &[I8, I128], &[I8], insert_opcode), + (Opcode::Sshr, &[I16, I8], &[I16], insert_opcode), + (Opcode::Sshr, &[I16, I16], &[I16], insert_opcode), + (Opcode::Sshr, &[I16, I32], &[I16], insert_opcode), + (Opcode::Sshr, &[I16, I64], &[I16], insert_opcode), + // (Opcode::Sshr, &[I16, I128], &[I16], insert_opcode), + (Opcode::Sshr, &[I32, I8], &[I32], insert_opcode), + (Opcode::Sshr, &[I32, I16], &[I32], insert_opcode), + (Opcode::Sshr, &[I32, I32], &[I32], insert_opcode), + (Opcode::Sshr, &[I32, I64], &[I32], insert_opcode), + (Opcode::Sshr, &[I32, I128], &[I32], insert_opcode), + (Opcode::Sshr, &[I64, I8], &[I64], insert_opcode), + (Opcode::Sshr, &[I64, I16], &[I64], insert_opcode), + (Opcode::Sshr, &[I64, I32], &[I64], insert_opcode), + (Opcode::Sshr, &[I64, I64], &[I64], insert_opcode), + (Opcode::Sshr, &[I64, I128], &[I64], insert_opcode), + (Opcode::Sshr, &[I128, I8], &[I128], insert_opcode), + (Opcode::Sshr, &[I128, I16], &[I128], insert_opcode), + (Opcode::Sshr, &[I128, I32], &[I128], insert_opcode), + (Opcode::Sshr, &[I128, I64], &[I128], insert_opcode), + (Opcode::Sshr, &[I128, I128], &[I128], insert_opcode), + // Ushr + // Some test cases disabled due to: https://github.com/bytecodealliance/wasmtime/issues/4699 + (Opcode::Ushr, &[I8, I8], &[I8], insert_opcode), + (Opcode::Ushr, &[I8, I16], &[I8], insert_opcode), + (Opcode::Ushr, &[I8, I32], &[I8], insert_opcode), + (Opcode::Ushr, &[I8, I64], &[I8], insert_opcode), + // (Opcode::Ushr, &[I8, I128], &[I8], insert_opcode), + (Opcode::Ushr, &[I16, I8], &[I16], insert_opcode), + (Opcode::Ushr, &[I16, I16], &[I16], insert_opcode), + (Opcode::Ushr, &[I16, I32], &[I16], insert_opcode), + (Opcode::Ushr, &[I16, I64], &[I16], insert_opcode), + // (Opcode::Ushr, &[I16, I128], &[I16], insert_opcode), + (Opcode::Ushr, &[I32, I8], &[I32], insert_opcode), + (Opcode::Ushr, &[I32, I16], &[I32], insert_opcode), + (Opcode::Ushr, &[I32, I32], &[I32], insert_opcode), + (Opcode::Ushr, &[I32, I64], &[I32], insert_opcode), + (Opcode::Ushr, &[I32, I128], &[I32], insert_opcode), + (Opcode::Ushr, &[I64, I8], &[I64], insert_opcode), + (Opcode::Ushr, &[I64, I16], &[I64], insert_opcode), + (Opcode::Ushr, &[I64, I32], &[I64], insert_opcode), + (Opcode::Ushr, &[I64, I64], &[I64], insert_opcode), + (Opcode::Ushr, &[I64, I128], &[I64], insert_opcode), + (Opcode::Ushr, &[I128, I8], &[I128], insert_opcode), + (Opcode::Ushr, &[I128, I16], &[I128], insert_opcode), + (Opcode::Ushr, &[I128, I32], &[I128], insert_opcode), + (Opcode::Ushr, &[I128, I64], &[I128], insert_opcode), + (Opcode::Ushr, &[I128, I128], &[I128], insert_opcode), + // Uextend + (Opcode::Uextend, &[I8], &[I16], insert_opcode), + (Opcode::Uextend, &[I8], &[I32], insert_opcode), + (Opcode::Uextend, &[I8], &[I64], insert_opcode), + (Opcode::Uextend, &[I8], &[I128], insert_opcode), + (Opcode::Uextend, &[I16], &[I32], insert_opcode), + (Opcode::Uextend, &[I16], &[I64], insert_opcode), + (Opcode::Uextend, &[I16], &[I128], insert_opcode), + (Opcode::Uextend, &[I32], &[I64], insert_opcode), + (Opcode::Uextend, &[I32], &[I128], insert_opcode), + (Opcode::Uextend, &[I64], &[I128], insert_opcode), + // Sextend + (Opcode::Sextend, &[I8], &[I16], insert_opcode), + (Opcode::Sextend, &[I8], &[I32], insert_opcode), + (Opcode::Sextend, &[I8], &[I64], insert_opcode), + (Opcode::Sextend, &[I8], &[I128], insert_opcode), + (Opcode::Sextend, &[I16], &[I32], insert_opcode), + (Opcode::Sextend, &[I16], &[I64], insert_opcode), + (Opcode::Sextend, &[I16], &[I128], insert_opcode), + (Opcode::Sextend, &[I32], &[I64], insert_opcode), + (Opcode::Sextend, &[I32], &[I128], insert_opcode), + (Opcode::Sextend, &[I64], &[I128], insert_opcode), // Fadd (Opcode::Fadd, &[F32, F32], &[F32], insert_opcode), (Opcode::Fadd, &[F64, F64], &[F64], insert_opcode),