fuzzgen: Add a few SIMD arithmetic ops (#5994)

This commit is contained in:
Afonso Bordado
2023-03-17 15:24:23 +00:00
committed by GitHub
parent b53d66e634
commit d939bdbd07

View File

@@ -415,6 +415,7 @@ fn valid_for_target(triple: &Triple, op: Opcode, args: &[Type], rets: &[Type]) -
Architecture::X86_64 => { Architecture::X86_64 => {
exceptions!( exceptions!(
(Opcode::IaddCout, &([I8, I8] | [I16, I16] | [I128, I128])), (Opcode::IaddCout, &([I8, I8] | [I16, I16] | [I128, I128])),
(Opcode::Imul, &[I8X16, I8X16]),
// https://github.com/bytecodealliance/wasmtime/issues/5468 // https://github.com/bytecodealliance/wasmtime/issues/5468
(Opcode::Smulhi | Opcode::Umulhi, &[I8, I8]), (Opcode::Smulhi | Opcode::Umulhi, &[I8, I8]),
// https://github.com/bytecodealliance/wasmtime/issues/4756 // https://github.com/bytecodealliance/wasmtime/issues/4756
@@ -680,6 +681,10 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Iadd, &[I32, I32], &[I32]), (Opcode::Iadd, &[I32, I32], &[I32]),
(Opcode::Iadd, &[I64, I64], &[I64]), (Opcode::Iadd, &[I64, I64], &[I64]),
(Opcode::Iadd, &[I128, I128], &[I128]), (Opcode::Iadd, &[I128, I128], &[I128]),
(Opcode::Iadd, &[I8X16, I8X16], &[I8X16]),
(Opcode::Iadd, &[I16X8, I16X8], &[I16X8]),
(Opcode::Iadd, &[I32X4, I32X4], &[I32X4]),
(Opcode::Iadd, &[I64X2, I64X2], &[I64X2]),
// IaddCout // IaddCout
(Opcode::IaddCout, &[I8, I8], &[I8, I8]), (Opcode::IaddCout, &[I8, I8], &[I8, I8]),
(Opcode::IaddCout, &[I16, I16], &[I16, I8]), (Opcode::IaddCout, &[I16, I16], &[I16, I8]),
@@ -702,6 +707,10 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Isub, &[I32, I32], &[I32]), (Opcode::Isub, &[I32, I32], &[I32]),
(Opcode::Isub, &[I64, I64], &[I64]), (Opcode::Isub, &[I64, I64], &[I64]),
(Opcode::Isub, &[I128, I128], &[I128]), (Opcode::Isub, &[I128, I128], &[I128]),
(Opcode::Isub, &[I8X16, I8X16], &[I8X16]),
(Opcode::Isub, &[I16X8, I16X8], &[I16X8]),
(Opcode::Isub, &[I32X4, I32X4], &[I32X4]),
(Opcode::Isub, &[I64X2, I64X2], &[I64X2]),
// UsubSat // UsubSat
(Opcode::UsubSat, &[I8X16, I8X16], &[I8X16]), (Opcode::UsubSat, &[I8X16, I8X16], &[I8X16]),
(Opcode::UsubSat, &[I16X8, I16X8], &[I16X8]), (Opcode::UsubSat, &[I16X8, I16X8], &[I16X8]),
@@ -718,6 +727,10 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Imul, &[I32, I32], &[I32]), (Opcode::Imul, &[I32, I32], &[I32]),
(Opcode::Imul, &[I64, I64], &[I64]), (Opcode::Imul, &[I64, I64], &[I64]),
(Opcode::Imul, &[I128, I128], &[I128]), (Opcode::Imul, &[I128, I128], &[I128]),
(Opcode::Imul, &[I8X16, I8X16], &[I8X16]),
(Opcode::Imul, &[I16X8, I16X8], &[I16X8]),
(Opcode::Imul, &[I32X4, I32X4], &[I32X4]),
(Opcode::Imul, &[I64X2, I64X2], &[I64X2]),
// Smulhi // Smulhi
(Opcode::Smulhi, &[I8, I8], &[I8]), (Opcode::Smulhi, &[I8, I8], &[I8]),
(Opcode::Smulhi, &[I16, I16], &[I16]), (Opcode::Smulhi, &[I16, I16], &[I16]),
@@ -991,6 +1004,12 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Band, &[I128, I128], &[I128]), (Opcode::Band, &[I128, I128], &[I128]),
(Opcode::Band, &[F32, F32], &[F32]), (Opcode::Band, &[F32, F32], &[F32]),
(Opcode::Band, &[F64, F64], &[F64]), (Opcode::Band, &[F64, F64], &[F64]),
(Opcode::Band, &[I8X16, I8X16], &[I8X16]),
(Opcode::Band, &[I16X8, I16X8], &[I16X8]),
(Opcode::Band, &[I32X4, I32X4], &[I32X4]),
(Opcode::Band, &[I64X2, I64X2], &[I64X2]),
(Opcode::Band, &[F32X4, F32X4], &[F32X4]),
(Opcode::Band, &[F64X2, F64X2], &[F64X2]),
// Bor // Bor
(Opcode::Bor, &[I8, I8], &[I8]), (Opcode::Bor, &[I8, I8], &[I8]),
(Opcode::Bor, &[I16, I16], &[I16]), (Opcode::Bor, &[I16, I16], &[I16]),
@@ -999,6 +1018,12 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Bor, &[I128, I128], &[I128]), (Opcode::Bor, &[I128, I128], &[I128]),
(Opcode::Bor, &[F32, F32], &[F32]), (Opcode::Bor, &[F32, F32], &[F32]),
(Opcode::Bor, &[F64, F64], &[F64]), (Opcode::Bor, &[F64, F64], &[F64]),
(Opcode::Bor, &[I8X16, I8X16], &[I8X16]),
(Opcode::Bor, &[I16X8, I16X8], &[I16X8]),
(Opcode::Bor, &[I32X4, I32X4], &[I32X4]),
(Opcode::Bor, &[I64X2, I64X2], &[I64X2]),
(Opcode::Bor, &[F32X4, F32X4], &[F32X4]),
(Opcode::Bor, &[F64X2, F64X2], &[F64X2]),
// Bxor // Bxor
(Opcode::Bxor, &[I8, I8], &[I8]), (Opcode::Bxor, &[I8, I8], &[I8]),
(Opcode::Bxor, &[I16, I16], &[I16]), (Opcode::Bxor, &[I16, I16], &[I16]),
@@ -1007,14 +1032,26 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Bxor, &[I128, I128], &[I128]), (Opcode::Bxor, &[I128, I128], &[I128]),
(Opcode::Bxor, &[F32, F32], &[F32]), (Opcode::Bxor, &[F32, F32], &[F32]),
(Opcode::Bxor, &[F64, F64], &[F64]), (Opcode::Bxor, &[F64, F64], &[F64]),
(Opcode::Bxor, &[I8X16, I8X16], &[I8X16]),
(Opcode::Bxor, &[I16X8, I16X8], &[I16X8]),
(Opcode::Bxor, &[I32X4, I32X4], &[I32X4]),
(Opcode::Bxor, &[I64X2, I64X2], &[I64X2]),
(Opcode::Bxor, &[F32X4, F32X4], &[F32X4]),
(Opcode::Bxor, &[F64X2, F64X2], &[F64X2]),
// Bnot // Bnot
(Opcode::Bnot, &[I8, I8], &[I8]), (Opcode::Bnot, &[I8], &[I8]),
(Opcode::Bnot, &[I16, I16], &[I16]), (Opcode::Bnot, &[I16], &[I16]),
(Opcode::Bnot, &[I32, I32], &[I32]), (Opcode::Bnot, &[I32], &[I32]),
(Opcode::Bnot, &[I64, I64], &[I64]), (Opcode::Bnot, &[I64], &[I64]),
(Opcode::Bnot, &[I128, I128], &[I128]), (Opcode::Bnot, &[I128], &[I128]),
(Opcode::Bnot, &[F32, F32], &[F32]), (Opcode::Bnot, &[F32], &[F32]),
(Opcode::Bnot, &[F64, F64], &[F64]), (Opcode::Bnot, &[F64], &[F64]),
(Opcode::Bnot, &[I8X16], &[I8X16]),
(Opcode::Bnot, &[I16X8], &[I16X8]),
(Opcode::Bnot, &[I32X4], &[I32X4]),
(Opcode::Bnot, &[I64X2], &[I64X2]),
(Opcode::Bnot, &[F32X4], &[F32X4]),
(Opcode::Bnot, &[F64X2], &[F64X2]),
// BandNot // BandNot
(Opcode::BandNot, &[I8, I8], &[I8]), (Opcode::BandNot, &[I8, I8], &[I8]),
(Opcode::BandNot, &[I16, I16], &[I16]), (Opcode::BandNot, &[I16, I16], &[I16]),
@@ -1023,6 +1060,12 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::BandNot, &[I128, I128], &[I128]), (Opcode::BandNot, &[I128, I128], &[I128]),
(Opcode::BandNot, &[F32, F32], &[F32]), (Opcode::BandNot, &[F32, F32], &[F32]),
(Opcode::BandNot, &[F64, F64], &[F64]), (Opcode::BandNot, &[F64, F64], &[F64]),
(Opcode::BandNot, &[I8X16, I8X16], &[I8X16]),
(Opcode::BandNot, &[I16X8, I16X8], &[I16X8]),
(Opcode::BandNot, &[I32X4, I32X4], &[I32X4]),
(Opcode::BandNot, &[I64X2, I64X2], &[I64X2]),
(Opcode::BandNot, &[F32X4, F32X4], &[F32X4]),
(Opcode::BandNot, &[F64X2, F64X2], &[F64X2]),
// BorNot // BorNot
(Opcode::BorNot, &[I8, I8], &[I8]), (Opcode::BorNot, &[I8, I8], &[I8]),
(Opcode::BorNot, &[I16, I16], &[I16]), (Opcode::BorNot, &[I16, I16], &[I16]),
@@ -1031,6 +1074,12 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::BorNot, &[I128, I128], &[I128]), (Opcode::BorNot, &[I128, I128], &[I128]),
(Opcode::BorNot, &[F32, F32], &[F32]), (Opcode::BorNot, &[F32, F32], &[F32]),
(Opcode::BorNot, &[F64, F64], &[F64]), (Opcode::BorNot, &[F64, F64], &[F64]),
(Opcode::BorNot, &[I8X16, I8X16], &[I8X16]),
(Opcode::BorNot, &[I16X8, I16X8], &[I16X8]),
(Opcode::BorNot, &[I32X4, I32X4], &[I32X4]),
(Opcode::BorNot, &[I64X2, I64X2], &[I64X2]),
(Opcode::BorNot, &[F32X4, F32X4], &[F32X4]),
(Opcode::BorNot, &[F64X2, F64X2], &[F64X2]),
// BxorNot // BxorNot
(Opcode::BxorNot, &[I8, I8], &[I8]), (Opcode::BxorNot, &[I8, I8], &[I8]),
(Opcode::BxorNot, &[I16, I16], &[I16]), (Opcode::BxorNot, &[I16, I16], &[I16]),
@@ -1039,6 +1088,12 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::BxorNot, &[I128, I128], &[I128]), (Opcode::BxorNot, &[I128, I128], &[I128]),
(Opcode::BxorNot, &[F32, F32], &[F32]), (Opcode::BxorNot, &[F32, F32], &[F32]),
(Opcode::BxorNot, &[F64, F64], &[F64]), (Opcode::BxorNot, &[F64, F64], &[F64]),
(Opcode::BxorNot, &[I8X16, I8X16], &[I8X16]),
(Opcode::BxorNot, &[I16X8, I16X8], &[I16X8]),
(Opcode::BxorNot, &[I32X4, I32X4], &[I32X4]),
(Opcode::BxorNot, &[I64X2, I64X2], &[I64X2]),
(Opcode::BxorNot, &[F32X4, F32X4], &[F32X4]),
(Opcode::BxorNot, &[F64X2, F64X2], &[F64X2]),
// Bitrev // Bitrev
(Opcode::Bitrev, &[I8], &[I8]), (Opcode::Bitrev, &[I8], &[I8]),
(Opcode::Bitrev, &[I16], &[I16]), (Opcode::Bitrev, &[I16], &[I16]),
@@ -1114,6 +1169,10 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
(Opcode::Bitselect, &[I32, I32, I32], &[I32]), (Opcode::Bitselect, &[I32, I32, I32], &[I32]),
(Opcode::Bitselect, &[I64, I64, I64], &[I64]), (Opcode::Bitselect, &[I64, I64, I64], &[I64]),
(Opcode::Bitselect, &[I128, I128, I128], &[I128]), (Opcode::Bitselect, &[I128, I128, I128], &[I128]),
(Opcode::Bitselect, &[I8X16, I8X16, I8X16], &[I8X16]),
(Opcode::Bitselect, &[I16X8, I16X8, I16X8], &[I16X8]),
(Opcode::Bitselect, &[I32X4, I32X4, I32X4], &[I32X4]),
(Opcode::Bitselect, &[I64X2, I64X2, I64X2], &[I64X2]),
// Select // Select
(Opcode::Select, &[I8, I8, I8], &[I8]), (Opcode::Select, &[I8, I8, I8], &[I8]),
(Opcode::Select, &[I8, I16, I16], &[I16]), (Opcode::Select, &[I8, I16, I16], &[I16]),
@@ -1169,15 +1228,23 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
// Fadd // Fadd
(Opcode::Fadd, &[F32, F32], &[F32]), (Opcode::Fadd, &[F32, F32], &[F32]),
(Opcode::Fadd, &[F64, F64], &[F64]), (Opcode::Fadd, &[F64, F64], &[F64]),
(Opcode::Fadd, &[F32X4, F32X4], &[F32X4]),
(Opcode::Fadd, &[F64X2, F64X2], &[F64X2]),
// Fmul // Fmul
(Opcode::Fmul, &[F32, F32], &[F32]), (Opcode::Fmul, &[F32, F32], &[F32]),
(Opcode::Fmul, &[F64, F64], &[F64]), (Opcode::Fmul, &[F64, F64], &[F64]),
(Opcode::Fmul, &[F32X4, F32X4], &[F32X4]),
(Opcode::Fmul, &[F64X2, F64X2], &[F64X2]),
// Fsub // Fsub
(Opcode::Fsub, &[F32, F32], &[F32]), (Opcode::Fsub, &[F32, F32], &[F32]),
(Opcode::Fsub, &[F64, F64], &[F64]), (Opcode::Fsub, &[F64, F64], &[F64]),
(Opcode::Fsub, &[F32X4, F32X4], &[F32X4]),
(Opcode::Fsub, &[F64X2, F64X2], &[F64X2]),
// Fdiv // Fdiv
(Opcode::Fdiv, &[F32, F32], &[F32]), (Opcode::Fdiv, &[F32, F32], &[F32]),
(Opcode::Fdiv, &[F64, F64], &[F64]), (Opcode::Fdiv, &[F64, F64], &[F64]),
(Opcode::Fdiv, &[F32X4, F32X4], &[F32X4]),
(Opcode::Fdiv, &[F64X2, F64X2], &[F64X2]),
// Fmin // Fmin
(Opcode::Fmin, &[F32, F32], &[F32]), (Opcode::Fmin, &[F32, F32], &[F32]),
(Opcode::Fmin, &[F64, F64], &[F64]), (Opcode::Fmin, &[F64, F64], &[F64]),
@@ -1198,27 +1265,43 @@ const OPCODE_SIGNATURES: &[OpcodeSignature] = &[
// Fma // Fma
(Opcode::Fma, &[F32, F32, F32], &[F32]), (Opcode::Fma, &[F32, F32, F32], &[F32]),
(Opcode::Fma, &[F64, F64, F64], &[F64]), (Opcode::Fma, &[F64, F64, F64], &[F64]),
(Opcode::Fma, &[F32X4, F32X4, F32X4], &[F32X4]),
(Opcode::Fma, &[F64X2, F64X2, F64X4], &[F64X2]),
// Fabs // Fabs
(Opcode::Fabs, &[F32], &[F32]), (Opcode::Fabs, &[F32], &[F32]),
(Opcode::Fabs, &[F64], &[F64]), (Opcode::Fabs, &[F64], &[F64]),
(Opcode::Fabs, &[F32X4], &[F32X4]),
(Opcode::Fabs, &[F64X2], &[F64X2]),
// Fneg // Fneg
(Opcode::Fneg, &[F32], &[F32]), (Opcode::Fneg, &[F32], &[F32]),
(Opcode::Fneg, &[F64], &[F64]), (Opcode::Fneg, &[F64], &[F64]),
(Opcode::Fneg, &[F32X4], &[F32X4]),
(Opcode::Fneg, &[F64X2], &[F64X2]),
// Sqrt // Sqrt
(Opcode::Sqrt, &[F32], &[F32]), (Opcode::Sqrt, &[F32], &[F32]),
(Opcode::Sqrt, &[F64], &[F64]), (Opcode::Sqrt, &[F64], &[F64]),
(Opcode::Sqrt, &[F32X4], &[F32X4]),
(Opcode::Sqrt, &[F64X2], &[F64X2]),
// Ceil // Ceil
(Opcode::Ceil, &[F32], &[F32]), (Opcode::Ceil, &[F32], &[F32]),
(Opcode::Ceil, &[F64], &[F64]), (Opcode::Ceil, &[F64], &[F64]),
(Opcode::Ceil, &[F32X4], &[F32X4]),
(Opcode::Ceil, &[F64X2], &[F64X2]),
// Floor // Floor
(Opcode::Floor, &[F32], &[F32]), (Opcode::Floor, &[F32], &[F32]),
(Opcode::Floor, &[F64], &[F64]), (Opcode::Floor, &[F64], &[F64]),
(Opcode::Floor, &[F32X4], &[F32X4]),
(Opcode::Floor, &[F64X2], &[F64X2]),
// Trunc // Trunc
(Opcode::Trunc, &[F32], &[F32]), (Opcode::Trunc, &[F32], &[F32]),
(Opcode::Trunc, &[F64], &[F64]), (Opcode::Trunc, &[F64], &[F64]),
(Opcode::Trunc, &[F32X4], &[F32X4]),
(Opcode::Trunc, &[F64X2], &[F64X2]),
// Nearest // Nearest
(Opcode::Nearest, &[F32], &[F32]), (Opcode::Nearest, &[F32], &[F32]),
(Opcode::Nearest, &[F64], &[F64]), (Opcode::Nearest, &[F64], &[F64]),
(Opcode::Nearest, &[F32X4], &[F32X4]),
(Opcode::Nearest, &[F64X2], &[F64X2]),
// Fpromote // Fpromote
(Opcode::Fpromote, &[F32], &[F64]), (Opcode::Fpromote, &[F32], &[F64]),
// Fdemote // Fdemote