No public description PiperOrigin-RevId: 727035909 Change-Id: Ia4377773d2fe98b9206d2c488d96cafe6edea23f
diff --git a/riscv/riscv32g_encoding.cc b/riscv/riscv32g_encoding.cc index 3ac5fa4..34b155f 100644 --- a/riscv/riscv32g_encoding.cc +++ b/riscv/riscv32g_encoding.cc
@@ -410,7 +410,7 @@ dest_op_getters_.insert( std::make_pair(static_cast<int>(DestOpEnum::kC3rd), [this](int latency) { int num = encoding::inst16_format::ExtractClRd(inst_word_); - return GetRegisterDestinationOp<RVFpRegister>( + return GetRegisterDestinationOp<RV32Register>( state_, absl::StrCat(RiscVState::kXregPrefix, num), latency); })); dest_op_getters_.insert( @@ -450,7 +450,7 @@ return GetRegisterDestinationOp<RV32Register>( state_, "X0Dest", 0, xreg_alias_[0]); } else { - return GetRegisterDestinationOp<RVFpRegister>( + return GetRegisterDestinationOp<RV32Register>( state_, absl::StrCat(RiscVState::kXregPrefix, num), latency, xreg_alias_[num]); }
diff --git a/riscv/test/BUILD b/riscv/test/BUILD index 4ea63fe..6aaf46a 100644 --- a/riscv/test/BUILD +++ b/riscv/test/BUILD
@@ -515,6 +515,7 @@ "@com_google_absl//absl/strings", "@com_google_googletest//:gtest_main", "@com_google_mpact-sim//mpact/sim/generic:instruction", + "@com_google_mpact-sim//mpact/sim/generic:type_helpers", ], )
diff --git a/riscv/test/riscv_fp_test_base.h b/riscv/test/riscv_fp_test_base.h index f427a52..fb115c5 100644 --- a/riscv/test/riscv_fp_test_base.h +++ b/riscv/test/riscv_fp_test_base.h
@@ -439,7 +439,16 @@ const std::string kRdName = absl::StrCat(reg_prefixes[1], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name}, {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); FillArrayWithRandomFPValues<LHS>(lhs_span); using LhsInt = typename FPTypeInfo<LHS>::IntType; @@ -491,7 +500,16 @@ const std::string kRdName = absl::StrCat(reg_prefixes[1], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name, kRmName}, {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); auto *flag_op = rv_fp_->fflags()->CreateSetDestinationOperand(0, "fflags"); instruction_->AppendDestination(flag_op); @@ -557,7 +575,21 @@ const std::string kRdName = absl::StrCat(reg_prefixes[2], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name, kR2Name}, {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kR2Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR2Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR2Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); auto *flag_op = rv_fp_->fflags()->CreateSetDestinationOperand(0, "fflags"); instruction_->AppendDestination(flag_op); @@ -620,7 +652,21 @@ const std::string kRdName = absl::StrCat(reg_prefixes[2], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name, kR2Name}, {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kR2Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR2Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR2Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); auto *flag_op = rv_fp_->fflags()->CreateSetDestinationOperand(0, "fflags"); instruction_->AppendDestination(flag_op); @@ -690,8 +736,26 @@ const std::string kRdName = absl::StrCat(reg_prefixes[3], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name, kR2Name, kR3Name}, - {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kR2Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR2Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR2Name}, {}); + } + if (kR3Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR3Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR3Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); FillArrayWithRandomFPValues<LHS>(lhs_span); FillArrayWithRandomFPValues<MHS>(mhs_span); @@ -753,8 +817,26 @@ const std::string kRdName = absl::StrCat(reg_prefixes[3], 5); // This is used for the rounding mode operand. const std::string kRmName = absl::StrCat("x", 10); - AppendRegisterOperands<RVFpRegister>({kR1Name, kR2Name, kR3Name}, - {kRdName}); + if (kR1Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR1Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR1Name}, {}); + } + if (kR2Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR2Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR2Name}, {}); + } + if (kR3Name[0] == 'x') { + AppendRegisterOperands<RV32Register>({kR3Name}, {}); + } else { + AppendRegisterOperands<RVFpRegister>({kR3Name}, {}); + } + if (kRdName[0] == 'x') { + AppendRegisterOperands<RV32Register>({}, {kRdName}); + } else { + AppendRegisterOperands<RVFpRegister>({}, {kRdName}); + } AppendRegisterOperands<RV32Register>({kRmName}, {}); auto *flag_op = rv_fp_->fflags()->CreateSetDestinationOperand(0, "fflags"); instruction_->AppendDestination(flag_op);
diff --git a/riscv/test/riscv_vector_basic_bit_manipulation_test.cc b/riscv/test/riscv_vector_basic_bit_manipulation_test.cc index 7ddd73d..96f4843 100644 --- a/riscv/test/riscv_vector_basic_bit_manipulation_test.cc +++ b/riscv/test/riscv_vector_basic_bit_manipulation_test.cc
@@ -43,6 +43,8 @@ using ::mpact::sim::riscv::Vwsll; using ::mpact::sim::riscv::test::RiscVVectorInstructionsTestBase; +using RVScalarRegister = ::mpact::sim::riscv::RV32Register; + class RiscVVectorBasicBitManipulationTest : public RiscVVectorInstructionsTestBase {}; @@ -61,7 +63,7 @@ template <typename T> inline void VandnVXHelper(RiscVVectorBasicBitManipulationTest *tester) { tester->SetSemanticFunction(&Vandn); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vandn", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T rs1) -> T { return ~rs1 & vs2; }); } @@ -143,7 +145,7 @@ template <typename T> inline void VrolVXHelper(RiscVVectorBasicBitManipulationTest *tester) { tester->SetSemanticFunction(&Vrol); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vrol", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T rs1) -> T { T bitsize = sizeof(T) * 8; @@ -278,7 +280,7 @@ inline void VwsllVXHelper(RiscVVectorBasicBitManipulationTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwsll); - tester->BinaryOpTestHelperVV<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwsll", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T rs1) -> WT { T shift_mask = 2 * 8 * sizeof(T) - 1;
diff --git a/riscv/test/riscv_vector_fp_compare_instructions_test.cc b/riscv/test/riscv_vector_fp_compare_instructions_test.cc index 7ef13c2..58de677 100644 --- a/riscv/test/riscv_vector_fp_compare_instructions_test.cc +++ b/riscv/test/riscv_vector_fp_compare_instructions_test.cc
@@ -228,7 +228,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {}); - AppendRegisterOperands<Fs1>({kFs1Name}, {}); + AppendRegisterOperands<RVFpRegister>({kFs1Name}, {}); AppendVectorRegisterOperands({kVmask}, {kVd}); // Initialize input values. FillArrayWithRandomValues<Vs2>(vs2_span);
diff --git a/riscv/test/riscv_vector_fp_instructions_test.cc b/riscv/test/riscv_vector_fp_instructions_test.cc index c23519c..cf123c6 100644 --- a/riscv/test/riscv_vector_fp_instructions_test.cc +++ b/riscv/test/riscv_vector_fp_instructions_test.cc
@@ -39,6 +39,7 @@ using Instruction = ::mpact::sim::generic::Instruction; using ::mpact::sim::generic::operator*; // NOLINT: used below. +using RVScalarRegister = ::mpact::sim::riscv::RVFpRegister; // Functions to test. using ::mpact::sim::riscv::Vfadd; @@ -515,12 +516,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfadd); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfadd_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs2 + vs1; }); ResetInstruction(); SetSemanticFunction(&Vfadd); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfadd_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs2 + vs1; }); } @@ -540,12 +541,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfsub); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfsub_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs2 - vs1; }); ResetInstruction(); SetSemanticFunction(&Vfsub); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfsub_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs2 - vs1; }); } @@ -565,12 +566,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfrsub); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfrsub_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs1 - vs2; }); ResetInstruction(); SetSemanticFunction(&Vfrsub); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfrsub_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs1 - vs2; }); } @@ -587,7 +588,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfwadd); - BinaryOpFPTestHelperVX<double, float, float>( + BinaryOpFPTestHelperVX<double, float, float, RVScalarRegister>( "Vfwadd_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> double { return static_cast<double>(vs2) + static_cast<double>(vs1); @@ -606,7 +607,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfwsub); - BinaryOpFPTestHelperVX<double, float, float>( + BinaryOpFPTestHelperVX<double, float, float, RVScalarRegister>( "Vfwsub_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> double { return static_cast<double>(vs2) - static_cast<double>(vs1); @@ -625,7 +626,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfwaddw); - BinaryOpFPTestHelperVX<double, double, float>( + BinaryOpFPTestHelperVX<double, double, float, RVScalarRegister>( "Vfwaddw_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](double vs2, float vs1) -> double { return vs2 + static_cast<double>(vs1); @@ -644,7 +645,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfwsubw); - BinaryOpFPTestHelperVX<double, double, float>( + BinaryOpFPTestHelperVX<double, double, float, RVScalarRegister>( "Vfwsubw_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](double vs2, float vs1) -> double { return vs2 - static_cast<double>(vs1); @@ -666,12 +667,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfmul); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfmul_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs2 * vs1; }); ResetInstruction(); SetSemanticFunction(&Vfmul); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfmul_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs2 * vs1; }); } @@ -691,12 +692,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfdiv); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfdiv_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs2 / vs1; }); ResetInstruction(); SetSemanticFunction(&Vfdiv); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfdiv_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs2 / vs1; }); } @@ -716,12 +717,12 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfrdiv); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfrdiv_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { return vs1 / vs2; }); ResetInstruction(); SetSemanticFunction(&Vfrdiv); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfrdiv_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { return vs1 / vs2; }); } @@ -738,7 +739,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfwmul); - BinaryOpFPTestHelperVX<double, float, float>( + BinaryOpFPTestHelperVX<double, float, float, RVScalarRegister>( "Vfwmul_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> double { return static_cast<double>(vs2) * static_cast<double>(vs1); @@ -1146,7 +1147,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfsgnj); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfsgnj_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { using Int = typename FPTypeInfo<float>::IntType; @@ -1156,7 +1157,7 @@ }); ResetInstruction(); SetSemanticFunction(&Vfsgnj); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfsgnj_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { using Int = typename FPTypeInfo<double>::IntType; @@ -1191,7 +1192,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfsgnjn); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfsgnjn_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { using Int = typename FPTypeInfo<float>::IntType; @@ -1201,7 +1202,7 @@ }); ResetInstruction(); SetSemanticFunction(&Vfsgnjn); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfsgnjn_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { using Int = typename FPTypeInfo<double>::IntType; @@ -1236,7 +1237,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfsgnjx); - BinaryOpFPTestHelperVX<float, float, float>( + BinaryOpFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfsgnjx_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> float { using Int = typename FPTypeInfo<float>::IntType; @@ -1246,7 +1247,7 @@ }); ResetInstruction(); SetSemanticFunction(&Vfsgnjx); - BinaryOpFPTestHelperVX<double, double, double>( + BinaryOpFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfsgnjx_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> double { using Int = typename FPTypeInfo<double>::IntType; @@ -1312,7 +1313,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfmax); - BinaryOpWithFflagsFPTestHelperVX<float, float, float>( + BinaryOpWithFflagsFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfmax_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> std::tuple<float, uint32_t> { using T = float; @@ -1322,7 +1323,7 @@ }); ResetInstruction(); SetSemanticFunction(&Vfmax); - BinaryOpWithFflagsFPTestHelperVX<double, double, double>( + BinaryOpWithFflagsFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfmax_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> std::tuple<double, uint32_t> { using T = double; @@ -1356,7 +1357,7 @@ // Vector-scalar. ResetInstruction(); SetSemanticFunction(&Vfmin); - BinaryOpWithFflagsFPTestHelperVX<float, float, float>( + BinaryOpWithFflagsFPTestHelperVX<float, float, float, RVScalarRegister>( "Vfmin_vx32", /*sew*/ 32, instruction_, /*delta_position*/ 32, [](float vs2, float vs1) -> std::tuple<float, uint32_t> { using T = float; @@ -1366,7 +1367,7 @@ }); ResetInstruction(); SetSemanticFunction(&Vfmin); - BinaryOpWithFflagsFPTestHelperVX<double, double, double>( + BinaryOpWithFflagsFPTestHelperVX<double, double, double, RVScalarRegister>( "Vfmin_vx64", /*sew*/ 64, instruction_, /*delta_position*/ 64, [](double vs2, double vs1) -> std::tuple<double, uint32_t> { using T = double; @@ -1379,12 +1380,12 @@ TEST_F(RiscVFPInstructionsTest, Vfmerge) { // Vector-scalar. SetSemanticFunction(&Vfmerge); - BinaryOpFPWithMaskTestHelperVX<float, float, float>( + BinaryOpFPWithMaskTestHelperVX<float, float, float, RVScalarRegister>( "Vfmerge_vx32", /*sew*/ 32, instruction_, /*delta position*/ 32, [](float vs2, float vs1, bool mask) -> float { return mask ? vs1 : vs2; }); - BinaryOpFPWithMaskTestHelperVX<double, double, double>( + BinaryOpFPWithMaskTestHelperVX<double, double, double, RVScalarRegister>( "Vfmerge_vx64", /*sew*/ 64, instruction_, /*delta position*/ 64, [](double vs2, double vs1, bool mask) -> double { return mask ? vs1 : vs2;
diff --git a/riscv/test/riscv_vector_fp_test_utilities.h b/riscv/test/riscv_vector_fp_test_utilities.h index 9ab9d3a..9ed5ff4 100644 --- a/riscv/test/riscv_vector_fp_test_utilities.h +++ b/riscv/test/riscv_vector_fp_test_utilities.h
@@ -607,7 +607,7 @@ // Floating point test needs to ensure to use the fp special values (inf, // NaN etc.) during testing, not just random values. - template <typename Vd, typename Vs2, typename Fs1> + template <typename Vd, typename Vs2, typename Fs1, typename ScalarReg> void BinaryOpWithFflagsFPTestHelperVX( absl::string_view name, int sew, Instruction *inst, int delta_position, std::function<std::tuple<Vd, uint32_t>(Vs2, Fs1)> operation) { @@ -628,7 +628,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {kVd}); - AppendRegisterOperands<Fs1>({kFs1Name}, {}); + AppendRegisterOperands<ScalarReg>({kFs1Name}, {}); auto *flag_op = rv_fp_->fflags()->CreateSetDestinationOperand(0, "fflags"); instruction_->AppendDestination(flag_op); AppendVectorRegisterOperands({kVmask}, {}); @@ -776,7 +776,7 @@ // Floating point test needs to ensure to use the fp special values (inf, // NaN etc.) during testing, not just random values. This function handles // vector scalar instructions. - template <typename Vd, typename Vs2, typename Fs1> + template <typename Vd, typename Vs2, typename Fs1, typename ScalarReg> void BinaryOpFPWithMaskTestHelperVX( absl::string_view name, int sew, Instruction *inst, int delta_position, std::function<Vd(Vs2, Fs1, bool)> operation) { @@ -797,7 +797,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {kVd}); - AppendRegisterOperands<Fs1>({kFs1Name}, {}); + AppendRegisterOperands<ScalarReg>({kFs1Name}, {}); AppendVectorRegisterOperands({kVmask}, {}); SetVectorRegisterValues<uint8_t>( {{kVmaskName, Span<const uint8_t>(kA5Mask)}}); @@ -930,11 +930,11 @@ // Templated helper function that tests FP vector-scalar instructions that do // not use the value of the mask bit. - template <typename Vd, typename Vs2, typename Vs1> + template <typename Vd, typename Vs2, typename Vs1, typename ScalarReg> void BinaryOpFPTestHelperVX(absl::string_view name, int sew, Instruction *inst, int delta_position, std::function<Vd(Vs2, Vs1)> operation) { - BinaryOpFPWithMaskTestHelperVX<Vd, Vs2, Vs1>( + BinaryOpFPWithMaskTestHelperVX<Vd, Vs2, Vs1, ScalarReg>( name, sew, inst, delta_position, [operation](Vs2 vs2, Vs1 vs1, bool mask_value) -> Vd { if (mask_value) {
diff --git a/riscv/test/riscv_vector_instructions_test_base.h b/riscv/test/riscv_vector_instructions_test_base.h index 7ba43ce..bc0892a 100644 --- a/riscv/test/riscv_vector_instructions_test_base.h +++ b/riscv/test/riscv_vector_instructions_test_base.h
@@ -185,11 +185,11 @@ const std::vector<std::string> &sources, const std::vector<std::string> &destinations) { for (auto ®_name : sources) { - auto *reg = state_->GetRegister<RV32Register>(reg_name).first; + auto *reg = state_->GetRegister<T>(reg_name).first; inst->AppendSource(reg->CreateSourceOperand()); } for (auto ®_name : destinations) { - auto *reg = state_->GetRegister<RV32Register>(reg_name).first; + auto *reg = state_->GetRegister<T>(reg_name).first; inst->AppendDestination(reg->CreateDestinationOperand(0)); } } @@ -548,7 +548,7 @@ // Helper function for testing vector-scalar/immediate instructions that use // the value of the mask bit. - template <typename Vd, typename Vs2, typename Rs1> + template <typename Vd, typename Vs2, typename Rs1, typename ScalarReg> void BinaryOpWithMaskTestHelperVX( absl::string_view name, int sew, Instruction *inst, std::function<Vd(Vs2, Rs1, bool)> operation) { @@ -566,7 +566,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {}); - AppendRegisterOperands<Rs1>({kRs1Name}, {}); + AppendRegisterOperands<ScalarReg>({kRs1Name}, {}); AppendVectorRegisterOperands({kVmask}, {kVd}); // Initialize input values. FillArrayWithRandomValues<Vs2>(vs2_span); @@ -663,10 +663,10 @@ // Templated helper function that tests vector-scalar instructions that do // not use the value of the mask bit. - template <typename Vd, typename Vs2, typename Vs1> + template <typename Vd, typename Vs2, typename Vs1, typename ScalarReg> void BinaryOpTestHelperVX(absl::string_view name, int sew, Instruction *inst, std::function<Vd(Vs2, Vs1)> operation) { - BinaryOpWithMaskTestHelperVX<Vd, Vs2, Vs1>( + BinaryOpWithMaskTestHelperVX<Vd, Vs2, Vs1, ScalarReg>( name, sew, inst, [operation](Vs2 vs2, Vs1 vs1, bool mask_value) -> Vd { if (mask_value) { return operation(vs2, vs1); @@ -814,7 +814,7 @@ // Helper function for testing vector-scalar/immediate instructions that use // the value of the mask bit. - template <typename Vd, typename Vs2, typename Rs1> + template <typename Vd, typename Vs2, typename Rs1, typename ScalarReg> void TernaryOpWithMaskTestHelperVX( absl::string_view name, int sew, Instruction *inst, std::function<Vd(Vs2, Rs1, Vd, bool)> operation) { @@ -835,7 +835,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {}); - AppendRegisterOperands<Rs1>({kRs1Name}, {}); + AppendRegisterOperands<ScalarReg>({kRs1Name}, {}); AppendVectorRegisterOperands({kVd, kVmask}, {kVd}); // Initialize input values. FillArrayWithRandomValues<Vd>(vd_span); @@ -945,10 +945,10 @@ // Templated helper function that tests vector-scalar instructions that do // not use the value of the mask bit. - template <typename Vd, typename Vs2, typename Rs1> + template <typename Vd, typename Vs2, typename Rs1, typename ScalarReg> void TernaryOpTestHelperVX(absl::string_view name, int sew, Instruction *inst, std::function<Vd(Vs2, Rs1, Vd)> operation) { - TernaryOpWithMaskTestHelperVX<Vd, Vs2, Rs1>( + TernaryOpWithMaskTestHelperVX<Vd, Vs2, Rs1, ScalarReg>( name, sew, inst, [operation](Vs2 vs2, Rs1 rs1, Vd vd, bool mask_value) -> Vd { if (mask_value) { @@ -1075,7 +1075,7 @@ // Helper function for testing mask vector-scalar/immediate instructions that // use the mask bit. - template <typename Vs2, typename Rs1> + template <typename Vs2, typename Rs1, typename ScalarReg> void BinaryMaskOpWithMaskTestHelperVX( absl::string_view name, int sew, Instruction *inst, std::function<uint8_t(Vs2, Rs1, bool)> operation) { @@ -1092,7 +1092,7 @@ Vs2 vs2_value[vs2_size * 8]; auto vs2_span = Span<Vs2>(vs2_value); AppendVectorRegisterOperands({kVs2}, {}); - AppendRegisterOperands<Rs1>({kRs1Name}, {}); + AppendRegisterOperands<ScalarReg>({kRs1Name}, {}); AppendVectorRegisterOperands({kVmask}, {kVd}); // Initialize input values. FillArrayWithRandomValues<Vs2>(vs2_span); @@ -1172,11 +1172,11 @@ // Helper function for testing mask vector-vector instructions that do not // use the mask bit. - template <typename Vs2, typename Vs1> + template <typename Vs2, typename Vs1, typename ScalarReg> void BinaryMaskOpTestHelperVX(absl::string_view name, int sew, Instruction *inst, std::function<uint8_t(Vs2, Vs1)> operation) { - BinaryMaskOpWithMaskTestHelperVX<Vs2, Vs1>( + BinaryMaskOpWithMaskTestHelperVX<Vs2, Vs1, ScalarReg>( name, sew, inst, [operation](Vs2 vs2, Vs1 vs1, bool mask_value) -> uint8_t { if (mask_value) {
diff --git a/riscv/test/riscv_vector_opi_instructions_test.cc b/riscv/test/riscv_vector_opi_instructions_test.cc index 170b760..28cefbe 100644 --- a/riscv/test/riscv_vector_opi_instructions_test.cc +++ b/riscv/test/riscv_vector_opi_instructions_test.cc
@@ -86,6 +86,8 @@ using ::mpact::sim::riscv::test::kVectorLengthInBytes; using ::mpact::sim::riscv::test::kVs2; +using RVScalarRegister = RV32Register; + class RiscVVectorInstructionsTest : public RiscVVectorInstructionsTestBase {}; // Each instruction is tested for each element width, and for vector-vector @@ -125,7 +127,7 @@ TEST_F(RiscVVectorInstructionsTest, Vadd8VX) { SetSemanticFunction(&Vadd); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vadd8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 + static_cast<uint8_t>(val1); @@ -134,21 +136,21 @@ TEST_F(RiscVVectorInstructionsTest, Vadd16VX) { SetSemanticFunction(&Vadd); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vadd16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 + val1; }); } TEST_F(RiscVVectorInstructionsTest, Vadd32VX) { SetSemanticFunction(&Vadd); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vadd32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 + val1; }); } TEST_F(RiscVVectorInstructionsTest, Vadd64VX) { SetSemanticFunction(&Vadd); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vadd64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 + val1; }); } @@ -186,28 +188,28 @@ // Vector-scalar. TEST_F(RiscVVectorInstructionsTest, Vsub8VX) { SetSemanticFunction(&Vsub); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vsub8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 - val1; }); } TEST_F(RiscVVectorInstructionsTest, Vsub16VX) { SetSemanticFunction(&Vsub); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vsub16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 - val1; }); } TEST_F(RiscVVectorInstructionsTest, Vsub32VX) { SetSemanticFunction(&Vsub); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vsub32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 - val1; }); } TEST_F(RiscVVectorInstructionsTest, Vsub64VX) { SetSemanticFunction(&Vsub); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vsub64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 - val1; }); } @@ -216,28 +218,28 @@ // Vector-Scalar only. TEST_F(RiscVVectorInstructionsTest, Vrsub8VX) { SetSemanticFunction(&Vrsub); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vrsub8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val1 - val0; }); } TEST_F(RiscVVectorInstructionsTest, Vrsub16VX) { SetSemanticFunction(&Vrsub); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vrsub16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val1 - val0; }); } TEST_F(RiscVVectorInstructionsTest, Vrsub32VX) { SetSemanticFunction(&Vrsub); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vrsub32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val1 - val0; }); } TEST_F(RiscVVectorInstructionsTest, Vrsub64VX) { SetSemanticFunction(&Vrsub); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vrsub64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val1 - val0; }); } @@ -280,7 +282,7 @@ TEST_F(RiscVVectorInstructionsTest, Vand8VX) { SetSemanticFunction(&Vand); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vand8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 & val1; }); } @@ -288,7 +290,7 @@ TEST_F(RiscVVectorInstructionsTest, Vand16VX) { SetSemanticFunction(&Vand); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vand16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 & val1; }); } @@ -296,7 +298,7 @@ TEST_F(RiscVVectorInstructionsTest, Vand32VX) { SetSemanticFunction(&Vand); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vand32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 & val1; }); } @@ -304,7 +306,7 @@ TEST_F(RiscVVectorInstructionsTest, Vand64VX) { SetSemanticFunction(&Vand); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vand64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 & val1; }); } @@ -347,7 +349,7 @@ TEST_F(RiscVVectorInstructionsTest, Vor8VX) { SetSemanticFunction(&Vor); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vor8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 | val1; }); } @@ -355,7 +357,7 @@ TEST_F(RiscVVectorInstructionsTest, Vor16VX) { SetSemanticFunction(&Vor); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vor16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 | val1; }); } @@ -363,7 +365,7 @@ TEST_F(RiscVVectorInstructionsTest, Vor32VX) { SetSemanticFunction(&Vor); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vor32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 | val1; }); } @@ -371,7 +373,7 @@ TEST_F(RiscVVectorInstructionsTest, Vor64VX) { SetSemanticFunction(&Vor); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vor64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 | val1; }); } @@ -413,7 +415,7 @@ TEST_F(RiscVVectorInstructionsTest, Vxor8VX) { SetSemanticFunction(&Vxor); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vxor8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 ^ val1; }); } @@ -421,7 +423,7 @@ TEST_F(RiscVVectorInstructionsTest, Vxor16VX) { SetSemanticFunction(&Vxor); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vxor16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 ^ val1; }); } @@ -429,7 +431,7 @@ TEST_F(RiscVVectorInstructionsTest, Vxor32VX) { SetSemanticFunction(&Vxor); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vxor32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 ^ val1; }); } @@ -437,7 +439,7 @@ TEST_F(RiscVVectorInstructionsTest, Vxor64VX) { SetSemanticFunction(&Vxor); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vxor64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 ^ val1; }); } @@ -488,7 +490,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsll8VX) { SetSemanticFunction(&Vsll); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vsll8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 << (val1 & 0b111); @@ -498,7 +500,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsll16VX) { SetSemanticFunction(&Vsll); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vsll16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 << (val1 & 0b1111); @@ -508,7 +510,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsll32VX) { SetSemanticFunction(&Vsll); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vsll32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 << (val1 & 0b1'1111); @@ -518,7 +520,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsll64VX) { SetSemanticFunction(&Vsll); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vsll64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 << (val1 & 0b11'1111); @@ -571,7 +573,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsrl8VX) { SetSemanticFunction(&Vsrl); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vsrl8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return val0 >> (val1 & 0b111); @@ -581,7 +583,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsrl16VX) { SetSemanticFunction(&Vsrl); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vsrl16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return val0 >> (val1 & 0b1111); @@ -591,7 +593,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsrl32VX) { SetSemanticFunction(&Vsrl); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vsrl32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return val0 >> (val1 & 0b1'1111); @@ -601,7 +603,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsrl64VX) { SetSemanticFunction(&Vsrl); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vsrl64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return val0 >> (val1 & 0b11'1111); @@ -654,7 +656,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsra8VX) { SetSemanticFunction(&Vsra); - BinaryOpTestHelperVX<uint8_t, int8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, int8_t, uint8_t, RVScalarRegister>( "Vsra8", /*sew*/ 8, instruction_, [](int8_t val0, uint8_t val1) -> int8_t { return val0 >> (val1 & 0b111); @@ -664,7 +666,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsra16VX) { SetSemanticFunction(&Vsra); - BinaryOpTestHelperVX<uint16_t, int16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, int16_t, uint16_t, RVScalarRegister>( "Vsra16", /*sew*/ 16, instruction_, [](int16_t val0, uint16_t val1) -> int16_t { return val0 >> (val1 & 0b1111); @@ -674,7 +676,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsra32VX) { SetSemanticFunction(&Vsra); - BinaryOpTestHelperVX<uint32_t, int32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, int32_t, uint32_t, RVScalarRegister>( "Vsra32", /*sew*/ 32, instruction_, [](int32_t val0, uint32_t val1) -> int32_t { return val0 >> (val1 & 0b1'1111); @@ -684,7 +686,7 @@ TEST_F(RiscVVectorInstructionsTest, Vsra64VX) { SetSemanticFunction(&Vsra); - BinaryOpTestHelperVX<uint64_t, int64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, int64_t, uint64_t, RVScalarRegister>( "Vsll64", /*sew*/ 64, instruction_, [](int64_t val0, uint64_t val1) -> int64_t { return val0 >> (val1 & 0b11'1111); @@ -727,7 +729,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsrl8VX) { SetSemanticFunction(&Vnsrl); - BinaryOpTestHelperVX<uint8_t, uint16_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint16_t, uint8_t, RVScalarRegister>( "Vsra8", /*sew*/ 8, instruction_, [](uint16_t val0, uint8_t val1) -> uint8_t { return static_cast<uint8_t>(val0 >> (val1 & 0b1111)); @@ -737,7 +739,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsrl16VX) { SetSemanticFunction(&Vnsrl); - BinaryOpTestHelperVX<uint16_t, uint32_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint32_t, uint16_t, RVScalarRegister>( "Vsll16", /*sew*/ 16, instruction_, [](uint32_t val0, uint16_t val1) -> uint16_t { return static_cast<uint16_t>(val0 >> (val1 & 0b1'1111)); @@ -747,7 +749,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsrl32VX) { SetSemanticFunction(&Vnsrl); - BinaryOpTestHelperVX<uint32_t, uint64_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint64_t, uint32_t, RVScalarRegister>( "Vsll32", /*sew*/ 32, instruction_, [](uint64_t val0, uint32_t val1) -> uint32_t { return static_cast<uint32_t>(val0 >> (val1 & 0b11'1111)); @@ -790,7 +792,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsra8VX) { SetSemanticFunction(&Vnsra); - BinaryOpTestHelperVX<uint8_t, uint16_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint16_t, uint8_t, RVScalarRegister>( "Vsra8", /*sew*/ 8, instruction_, [](int16_t val0, uint8_t val1) -> uint8_t { return static_cast<uint8_t>(val0 >> (val1 & 0b1111)); @@ -800,7 +802,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsra16VX) { SetSemanticFunction(&Vnsra); - BinaryOpTestHelperVX<uint16_t, uint32_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint32_t, uint16_t, RVScalarRegister>( "Vsll16", /*sew*/ 16, instruction_, [](int32_t val0, uint16_t val1) -> uint16_t { return static_cast<uint16_t>(val0 >> (val1 & 0b1'1111)); @@ -810,7 +812,7 @@ TEST_F(RiscVVectorInstructionsTest, Vnsra32VX) { SetSemanticFunction(&Vnsra); - BinaryOpTestHelperVX<uint32_t, uint64_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint64_t, uint32_t, RVScalarRegister>( "Vsll32", /*sew*/ 32, instruction_, [](int64_t val0, uint32_t val1) -> uint32_t { return static_cast<uint32_t>(val0 >> (val1 & 0b11'1111)); @@ -854,7 +856,7 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vminu8VX) { SetSemanticFunction(&Vminu); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vminu8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 < val1) ? val0 : val1; @@ -862,7 +864,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vminu16VX) { SetSemanticFunction(&Vminu); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vminu16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return (val0 < val1) ? val0 : val1; @@ -870,7 +872,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vminu32VX) { SetSemanticFunction(&Vminu); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vminu32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return (val0 < val1) ? val0 : val1; @@ -878,7 +880,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vminu64VX) { SetSemanticFunction(&Vminu); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vminu64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return (val0 < val1) ? val0 : val1; @@ -921,14 +923,14 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vmin8VX) { SetSemanticFunction(&Vmin); - BinaryOpTestHelperVX<int8_t, int8_t, int8_t>( + BinaryOpTestHelperVX<int8_t, int8_t, int8_t, RVScalarRegister>( "Vmin8", /*sew*/ 8, instruction_, [](int8_t val0, int8_t val1) -> int8_t { return (val0 < val1) ? val0 : val1; }); } TEST_F(RiscVVectorInstructionsTest, Vmin16VX) { SetSemanticFunction(&Vmin); - BinaryOpTestHelperVX<int16_t, int16_t, int16_t>( + BinaryOpTestHelperVX<int16_t, int16_t, int16_t, RVScalarRegister>( "Vmin16", /*sew*/ 16, instruction_, [](int16_t val0, int16_t val1) -> int16_t { return (val0 < val1) ? val0 : val1; @@ -936,7 +938,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmin32VX) { SetSemanticFunction(&Vmin); - BinaryOpTestHelperVX<int32_t, int32_t, int32_t>( + BinaryOpTestHelperVX<int32_t, int32_t, int32_t, RVScalarRegister>( "Vmin32", /*sew*/ 32, instruction_, [](int32_t val0, int32_t val1) -> int32_t { return (val0 < val1) ? val0 : val1; @@ -944,7 +946,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmin64VX) { SetSemanticFunction(&Vmin); - BinaryOpTestHelperVX<int64_t, int64_t, int64_t>( + BinaryOpTestHelperVX<int64_t, int64_t, int64_t, RVScalarRegister>( "Vmin64", /*sew*/ 64, instruction_, [](int64_t val0, int64_t val1) -> int64_t { return (val0 < val1) ? val0 : val1; @@ -988,7 +990,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmaxu8VX) { SetSemanticFunction(&Vmaxu); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vmaxu8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 > val1) ? val0 : val1; @@ -996,7 +998,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmaxu16VX) { SetSemanticFunction(&Vmaxu); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vmaxu16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint16_t { return (val0 > val1) ? val0 : val1; @@ -1004,7 +1006,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmaxu32VX) { SetSemanticFunction(&Vmaxu); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vmaxu32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint32_t { return (val0 > val1) ? val0 : val1; @@ -1012,7 +1014,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmaxu64VX) { SetSemanticFunction(&Vmaxu); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vmaxu64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint64_t { return (val0 > val1) ? val0 : val1; @@ -1054,14 +1056,14 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vmax8VX) { SetSemanticFunction(&Vmax); - BinaryOpTestHelperVX<int8_t, int8_t, int8_t>( + BinaryOpTestHelperVX<int8_t, int8_t, int8_t, RVScalarRegister>( "Vmin8", /*sew*/ 8, instruction_, [](int8_t val0, int8_t val1) -> int8_t { return (val0 > val1) ? val0 : val1; }); } TEST_F(RiscVVectorInstructionsTest, Vmax16VX) { SetSemanticFunction(&Vmax); - BinaryOpTestHelperVX<int16_t, int16_t, int16_t>( + BinaryOpTestHelperVX<int16_t, int16_t, int16_t, RVScalarRegister>( "Vmin16", /*sew*/ 16, instruction_, [](int16_t val0, int16_t val1) -> int16_t { return (val0 > val1) ? val0 : val1; @@ -1069,7 +1071,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmax32VX) { SetSemanticFunction(&Vmax); - BinaryOpTestHelperVX<int32_t, int32_t, int32_t>( + BinaryOpTestHelperVX<int32_t, int32_t, int32_t, RVScalarRegister>( "Vmin32", /*sew*/ 32, instruction_, [](int32_t val0, int32_t val1) -> int32_t { return (val0 > val1) ? val0 : val1; @@ -1077,7 +1079,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmax64VX) { SetSemanticFunction(&Vmax); - BinaryOpTestHelperVX<int64_t, int64_t, int64_t>( + BinaryOpTestHelperVX<int64_t, int64_t, int64_t, RVScalarRegister>( "Vmin64", /*sew*/ 64, instruction_, [](int64_t val0, int64_t val1) -> int64_t { return (val0 > val1) ? val0 : val1; @@ -1123,7 +1125,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmseq8VX) { SetSemanticFunction(&Vmseq); - BinaryMaskOpTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmseq8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 == val1) ? 1 : 0; @@ -1131,7 +1133,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmseq16VX) { SetSemanticFunction(&Vmseq); - BinaryMaskOpTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmseq16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint8_t { return (val0 == val1) ? 1 : 0; @@ -1139,7 +1141,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmseq32VX) { SetSemanticFunction(&Vmseq); - BinaryMaskOpTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmseq32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint8_t { return (val0 == val1) ? 1 : 0; @@ -1147,7 +1149,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmseq64VX) { SetSemanticFunction(&Vmseq); - BinaryMaskOpTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmseq64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint8_t { return (val0 == val1) ? 1 : 0; @@ -1191,7 +1193,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsne8VX) { SetSemanticFunction(&Vmsne); - BinaryMaskOpTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmsne8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 != val1) ? 1 : 0; @@ -1199,7 +1201,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsne16VX) { SetSemanticFunction(&Vmsne); - BinaryMaskOpTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmsne16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint8_t { return (val0 != val1) ? 1 : 0; @@ -1207,7 +1209,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsne32VX) { SetSemanticFunction(&Vmsne); - BinaryMaskOpTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmsne32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint8_t { return (val0 != val1) ? 1 : 0; @@ -1215,7 +1217,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsne64VX) { SetSemanticFunction(&Vmsne); - BinaryMaskOpTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmsne64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint8_t { return (val0 != val1) ? 1 : 0; @@ -1259,7 +1261,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsltu8VX) { SetSemanticFunction(&Vmsltu); - BinaryMaskOpTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmsltu8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1267,7 +1269,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsltu16VX) { SetSemanticFunction(&Vmsltu); - BinaryMaskOpTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmsltu16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1275,7 +1277,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsltu32VX) { SetSemanticFunction(&Vmsltu); - BinaryMaskOpTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmsltu32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1283,7 +1285,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsltu64VX) { SetSemanticFunction(&Vmsltu); - BinaryMaskOpTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmsltu64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1327,7 +1329,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmslt8VX) { SetSemanticFunction(&Vmslt); - BinaryMaskOpTestHelperVX<int8_t, int8_t>( + BinaryMaskOpTestHelperVX<int8_t, int8_t, RVScalarRegister>( "Vmslt8", /*sew*/ 8, instruction_, [](int8_t val0, int8_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1335,7 +1337,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmslt16VX) { SetSemanticFunction(&Vmslt); - BinaryMaskOpTestHelperVX<int16_t, int16_t>( + BinaryMaskOpTestHelperVX<int16_t, int16_t, RVScalarRegister>( "Vmslt16", /*sew*/ 16, instruction_, [](int16_t val0, int16_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1343,7 +1345,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmslt32VX) { SetSemanticFunction(&Vmslt); - BinaryMaskOpTestHelperVX<int32_t, int32_t>( + BinaryMaskOpTestHelperVX<int32_t, int32_t, RVScalarRegister>( "Vmslt32", /*sew*/ 32, instruction_, [](int32_t val0, int32_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1351,7 +1353,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmslt64VX) { SetSemanticFunction(&Vmslt); - BinaryMaskOpTestHelperVX<int64_t, int64_t>( + BinaryMaskOpTestHelperVX<int64_t, int64_t, RVScalarRegister>( "Vmslt64", /*sew*/ 64, instruction_, [](int64_t val0, int64_t val1) -> uint8_t { return (val0 < val1) ? 1 : 0; @@ -1395,7 +1397,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsleu8VX) { SetSemanticFunction(&Vmsleu); - BinaryMaskOpTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmsleu8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1403,7 +1405,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsleu16VX) { SetSemanticFunction(&Vmsleu); - BinaryMaskOpTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmsleu16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1411,7 +1413,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsleu32VX) { SetSemanticFunction(&Vmsleu); - BinaryMaskOpTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmsleu32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1419,7 +1421,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsleu64VX) { SetSemanticFunction(&Vmsleu); - BinaryMaskOpTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmsleu64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1463,7 +1465,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsle8VX) { SetSemanticFunction(&Vmsle); - BinaryMaskOpTestHelperVX<int8_t, int8_t>( + BinaryMaskOpTestHelperVX<int8_t, int8_t, RVScalarRegister>( "Vmsle8", /*sew*/ 8, instruction_, [](int8_t val0, int8_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1471,7 +1473,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsle16VX) { SetSemanticFunction(&Vmsle); - BinaryMaskOpTestHelperVX<int16_t, int16_t>( + BinaryMaskOpTestHelperVX<int16_t, int16_t, RVScalarRegister>( "Vmsle16", /*sew*/ 16, instruction_, [](int16_t val0, int16_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1479,7 +1481,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsle32VX) { SetSemanticFunction(&Vmsle); - BinaryMaskOpTestHelperVX<int32_t, int32_t>( + BinaryMaskOpTestHelperVX<int32_t, int32_t, RVScalarRegister>( "Vmsle32", /*sew*/ 32, instruction_, [](int32_t val0, int32_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1487,7 +1489,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsle64VX) { SetSemanticFunction(&Vmsle); - BinaryMaskOpTestHelperVX<int64_t, int64_t>( + BinaryMaskOpTestHelperVX<int64_t, int64_t, RVScalarRegister>( "Vmsle64", /*sew*/ 64, instruction_, [](int64_t val0, int64_t val1) -> uint8_t { return (val0 <= val1) ? 1 : 0; @@ -1498,7 +1500,7 @@ // Vector-Vector. TEST_F(RiscVVectorInstructionsTest, Vmsgtu8VX) { SetSemanticFunction(&Vmsgtu); - BinaryMaskOpTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmsgtu8", /*sew*/ 8, instruction_, [](uint8_t val0, uint8_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1506,7 +1508,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgtu16VX) { SetSemanticFunction(&Vmsgtu); - BinaryMaskOpTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmsgtu16", /*sew*/ 16, instruction_, [](uint16_t val0, uint16_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1514,7 +1516,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgtu32VX) { SetSemanticFunction(&Vmsgtu); - BinaryMaskOpTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmsgtu32", /*sew*/ 32, instruction_, [](uint32_t val0, uint32_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1522,7 +1524,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgtu64VX) { SetSemanticFunction(&Vmsgtu); - BinaryMaskOpTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmsgtuk64", /*sew*/ 64, instruction_, [](uint64_t val0, uint64_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1533,7 +1535,7 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsgt8VX) { SetSemanticFunction(&Vmsgt); - BinaryMaskOpTestHelperVX<int8_t, int8_t>( + BinaryMaskOpTestHelperVX<int8_t, int8_t, RVScalarRegister>( "Vmsgt8", /*sew*/ 8, instruction_, [](int8_t val0, int8_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1541,7 +1543,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgt16VX) { SetSemanticFunction(&Vmsgt); - BinaryMaskOpTestHelperVX<int16_t, int16_t>( + BinaryMaskOpTestHelperVX<int16_t, int16_t, RVScalarRegister>( "Vmsgt16", /*sew*/ 16, instruction_, [](int16_t val0, int16_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1549,7 +1551,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgt32VX) { SetSemanticFunction(&Vmsgt); - BinaryMaskOpTestHelperVX<int32_t, int32_t>( + BinaryMaskOpTestHelperVX<int32_t, int32_t, RVScalarRegister>( "Vmsgt32", /*sew*/ 32, instruction_, [](int32_t val0, int32_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1557,7 +1559,7 @@ } TEST_F(RiscVVectorInstructionsTest, Vmsgt64VX) { SetSemanticFunction(&Vmsgt); - BinaryMaskOpTestHelperVX<int64_t, int64_t>( + BinaryMaskOpTestHelperVX<int64_t, int64_t, RVScalarRegister>( "Vmsgt64", /*sew*/ 64, instruction_, [](int64_t val0, int64_t val1) -> uint8_t { return (val0 > val1) ? 1 : 0; @@ -1598,22 +1600,22 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vsaddu8VX) { SetSemanticFunction(&Vsaddu); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vsaddu8", /*sew*/ 8, instruction_, VsadduHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vsaddu16VX) { SetSemanticFunction(&Vsaddu); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vsaddu16", /*sew*/ 16, instruction_, VsadduHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vsaddu32VX) { SetSemanticFunction(&Vsaddu); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vsaddu32", /*sew*/ 32, instruction_, VsadduHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vsaddu64VX) { SetSemanticFunction(&Vsaddu); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vsaddu64", /*sew*/ 64, instruction_, VsadduHelper<uint64_t>); } @@ -1659,22 +1661,22 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vsadd8VX) { SetSemanticFunction(&Vsadd); - BinaryOpTestHelperVX<int8_t, int8_t, int8_t>( + BinaryOpTestHelperVX<int8_t, int8_t, int8_t, RVScalarRegister>( "Vsadd8", /*sew*/ 8, instruction_, VsaddHelper<int8_t>); } TEST_F(RiscVVectorInstructionsTest, Vsadd16VX) { SetSemanticFunction(&Vsadd); - BinaryOpTestHelperVX<int16_t, int16_t, int16_t>( + BinaryOpTestHelperVX<int16_t, int16_t, int16_t, RVScalarRegister>( "Vsadd16", /*sew*/ 16, instruction_, VsaddHelper<int16_t>); } TEST_F(RiscVVectorInstructionsTest, Vsadd32VX) { SetSemanticFunction(&Vsadd); - BinaryOpTestHelperVX<int32_t, int32_t, int32_t>( + BinaryOpTestHelperVX<int32_t, int32_t, int32_t, RVScalarRegister>( "Vsadd32", /*sew*/ 32, instruction_, VsaddHelper<int32_t>); } TEST_F(RiscVVectorInstructionsTest, Vsadd64VX) { SetSemanticFunction(&Vsadd); - BinaryOpTestHelperVX<int64_t, int64_t, int64_t>( + BinaryOpTestHelperVX<int64_t, int64_t, int64_t, RVScalarRegister>( "Vsadd64", /*sew*/ 64, instruction_, VsaddHelper<int64_t>); } @@ -1713,22 +1715,22 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vssubu8VX) { SetSemanticFunction(&Vssubu); - BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vssubu8", /*sew*/ 8, instruction_, SsubuHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vssubu16VX) { SetSemanticFunction(&Vssubu); - BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vssubu16", /*sew*/ 16, instruction_, SsubuHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vssubu32VX) { SetSemanticFunction(&Vssubu); - BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vssubu32", /*sew*/ 32, instruction_, SsubuHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vssubu64VX) { SetSemanticFunction(&Vssubu); - BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vssubu64", /*sew*/ 64, instruction_, SsubuHelper<uint64_t>); } @@ -1769,22 +1771,22 @@ // Vector-Scalar TEST_F(RiscVVectorInstructionsTest, Vssub8VX) { SetSemanticFunction(&Vssub); - BinaryOpTestHelperVX<int8_t, int8_t, int8_t>( + BinaryOpTestHelperVX<int8_t, int8_t, int8_t, RVScalarRegister>( "Vssub8", /*sew*/ 8, instruction_, VssubHelper<int8_t>); } TEST_F(RiscVVectorInstructionsTest, Vssub16VX) { SetSemanticFunction(&Vssub); - BinaryOpTestHelperVX<int16_t, int16_t, int16_t>( + BinaryOpTestHelperVX<int16_t, int16_t, int16_t, RVScalarRegister>( "Vssub16", /*sew*/ 16, instruction_, VssubHelper<int16_t>); } TEST_F(RiscVVectorInstructionsTest, Vssub32VX) { SetSemanticFunction(&Vssub); - BinaryOpTestHelperVX<int32_t, int32_t, int32_t>( + BinaryOpTestHelperVX<int32_t, int32_t, int32_t, RVScalarRegister>( "Vssub32", /*sew*/ 32, instruction_, VssubHelper<int32_t>); } TEST_F(RiscVVectorInstructionsTest, Vssub64VX) { SetSemanticFunction(&Vssub); - BinaryOpTestHelperVX<int64_t, int64_t, int64_t>( + BinaryOpTestHelperVX<int64_t, int64_t, int64_t, RVScalarRegister>( "Vssub64", /*sew*/ 64, instruction_, VssubHelper<int64_t>); } @@ -1818,22 +1820,22 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vadc8VX) { SetSemanticFunction(&Vadc); - BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vadc", /*sew*/ 8, instruction_, VadcHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vadc16VX) { SetSemanticFunction(&Vadc); - BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vadc", /*sew*/ 16, instruction_, VadcHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vadc32VX) { SetSemanticFunction(&Vadc); - BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vadc", /*sew*/ 32, instruction_, VadcHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vadc64VX) { SetSemanticFunction(&Vadc); - BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vadc", /*sew*/ 64, instruction_, VadcHelper<uint64_t>); } @@ -1873,22 +1875,22 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmadc8VX) { SetSemanticFunction(&Vmadc); - BinaryMaskOpWithMaskTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpWithMaskTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmadc", /*sew*/ 8, instruction_, VmadcHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vmadc16VX) { SetSemanticFunction(&Vmadc); - BinaryMaskOpWithMaskTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpWithMaskTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmadc", /*sew*/ 16, instruction_, VmadcHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vmadc32VX) { SetSemanticFunction(&Vmadc); - BinaryMaskOpWithMaskTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpWithMaskTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmadc", /*sew*/ 32, instruction_, VmadcHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vmadc64VX) { SetSemanticFunction(&Vmadc); - BinaryMaskOpWithMaskTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpWithMaskTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmadc", /*sew*/ 64, instruction_, VmadcHelper<uint64_t>); } @@ -1921,22 +1923,22 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vsbc8VX) { SetSemanticFunction(&Vsbc); - BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vsbc", /*sew*/ 8, instruction_, VsbcHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vsbc16VX) { SetSemanticFunction(&Vsbc); - BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vsbc", /*sew*/ 16, instruction_, VsbcHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vsbc32VX) { SetSemanticFunction(&Vsbc); - BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "Vsbc", /*sew*/ 32, instruction_, VsbcHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vsbc64VX) { SetSemanticFunction(&Vsbc); - BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vsbc", /*sew*/ 64, instruction_, VsbcHelper<uint64_t>); } @@ -1972,22 +1974,22 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmsbc8VX) { SetSemanticFunction(&Vmsbc); - BinaryMaskOpWithMaskTestHelperVX<uint8_t, uint8_t>( + BinaryMaskOpWithMaskTestHelperVX<uint8_t, uint8_t, RVScalarRegister>( "Vmsbc", /*sew*/ 8, instruction_, VmsbcHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vmsbc16VX) { SetSemanticFunction(&Vmsbc); - BinaryMaskOpWithMaskTestHelperVX<uint16_t, uint16_t>( + BinaryMaskOpWithMaskTestHelperVX<uint16_t, uint16_t, RVScalarRegister>( "Vmsbc", /*sew*/ 16, instruction_, VmsbcHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vmsbc32VX) { SetSemanticFunction(&Vmsbc); - BinaryMaskOpWithMaskTestHelperVX<uint32_t, uint32_t>( + BinaryMaskOpWithMaskTestHelperVX<uint32_t, uint32_t, RVScalarRegister>( "Vmsbc", /*sew*/ 32, instruction_, VmsbcHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vmsbc64VX) { SetSemanticFunction(&Vmsbc); - BinaryMaskOpWithMaskTestHelperVX<uint64_t, uint64_t>( + BinaryMaskOpWithMaskTestHelperVX<uint64_t, uint64_t, RVScalarRegister>( "Vmsbc", /*sew*/ 64, instruction_, VmsbcHelper<uint64_t>); } @@ -2020,22 +2022,22 @@ // Vector-Scalar. TEST_F(RiscVVectorInstructionsTest, Vmerge8VX) { SetSemanticFunction(&Vmerge); - BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t>( + BinaryOpWithMaskTestHelperVX<uint8_t, uint8_t, uint8_t, RVScalarRegister>( "Vmerge", /*sew*/ 8, instruction_, VmergeHelper<uint8_t>); } TEST_F(RiscVVectorInstructionsTest, Vmerge16VX) { SetSemanticFunction(&Vmerge); - BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t>( + BinaryOpWithMaskTestHelperVX<uint16_t, uint16_t, uint16_t, RVScalarRegister>( "Vmerge", /*sew*/ 16, instruction_, VmergeHelper<uint16_t>); } TEST_F(RiscVVectorInstructionsTest, Vmerge32VX) { SetSemanticFunction(&Vmerge); - BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t>( + BinaryOpWithMaskTestHelperVX<uint32_t, uint32_t, uint32_t, RVScalarRegister>( "mergec", /*sew*/ 32, instruction_, VmergeHelper<uint32_t>); } TEST_F(RiscVVectorInstructionsTest, Vmerge64VX) { SetSemanticFunction(&Vmerge); - BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t>( + BinaryOpWithMaskTestHelperVX<uint64_t, uint64_t, uint64_t, RVScalarRegister>( "Vmerge", /*sew*/ 64, instruction_, VmergeHelper<uint64_t>); } @@ -2127,7 +2129,7 @@ // Iterate across rounding modes. for (int rm = 0; rm < 4; rm++) { tester->rv_vector()->set_vxrm(rm); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vssrl_", rm), /*sew*/ sizeof(T) * 8, inst, [rm, tester](T vs2, T vs1) -> T { return VssrHelper<T>(tester, vs2, vs1, rm);
diff --git a/riscv/test/riscv_vector_opm_instructions_test.cc b/riscv/test/riscv_vector_opm_instructions_test.cc index ebec892..1a6c396 100644 --- a/riscv/test/riscv_vector_opm_instructions_test.cc +++ b/riscv/test/riscv_vector_opm_instructions_test.cc
@@ -14,25 +14,21 @@ #include "riscv/riscv_vector_opm_instructions.h" -#include <algorithm> #include <cstdint> #include <functional> #include <ios> -#include <limits> -#include <optional> -#include <string> #include <type_traits> #include <vector> #include "absl/base/casts.h" #include "absl/log/check.h" #include "absl/numeric/int128.h" -#include "absl/random/random.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "googlemock/include/gmock/gmock.h" #include "mpact/sim/generic/instruction.h" -#include "riscv/riscv_vector_state.h" +#include "mpact/sim/generic/type_helpers.h" +#include "riscv/riscv_register.h" #include "riscv/test/riscv_vector_instructions_test_base.h" namespace { @@ -40,6 +36,7 @@ using Instruction = ::mpact::sim::generic::Instruction; using ::mpact::sim::generic::WideType; using ::mpact::sim::riscv::test::RiscVVectorInstructionsTestBase; +using RVScalarRegister = ::mpact::sim::riscv::RV32Register; using ::mpact::sim::riscv::Vaadd; using ::mpact::sim::riscv::Vaaddu; @@ -192,7 +189,7 @@ template <typename T> inline void VaadduVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vaaddu); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vaaddu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [tester](T val0, T val1) -> T { return VaaddHelper(tester, val0, val1); @@ -235,7 +232,7 @@ template <typename T> inline void VaaddVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vaadd); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vaaddu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [tester](T val0, T val1) -> T { return VaaddHelper(tester, val0, val1); @@ -277,7 +274,7 @@ template <typename T> inline void VasubuVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vasubu); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vasubu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [tester](T val0, T val1) -> T { return VasubHelper(tester, val0, val1); @@ -319,7 +316,7 @@ template <typename T> inline void VasubVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vasub); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vasub", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [tester](T val0, T val1) -> T { return VasubHelper(tester, val0, val1); @@ -413,7 +410,7 @@ template <typename T> inline void VdivuVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vdivu); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vdivu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { if (vs1 == 0) return ~vs1; @@ -457,7 +454,7 @@ template <typename T> inline void VdivVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vdiv); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vdiv", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { if (vs1 == 0) return ~vs1; @@ -501,7 +498,7 @@ template <typename T> inline void VremuVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vremu); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vremu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { if (vs1 == 0) return vs2; @@ -545,7 +542,7 @@ template <typename T> inline void VremVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vrem); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vrem", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { if (vs1 == 0) return vs2; @@ -591,7 +588,7 @@ template <typename T> inline void VmulhuVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vmulhu); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vmulhu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { absl::uint128 vs2_w = static_cast<absl::uint128>(vs2); @@ -640,7 +637,7 @@ template <typename T> inline void VmulhVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vmulh); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vmulh", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { absl::int128 vs2_w = static_cast<absl::int128>(vs2); @@ -688,7 +685,7 @@ inline void VmulVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vmul); - tester->BinaryOpTestHelperVX<T, T, T>( + tester->BinaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vmul", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> T { return static_cast<T>(static_cast<WT>(vs2) * static_cast<WT>(vs1)); @@ -736,7 +733,7 @@ inline void VmulhsuVXHelper(RiscVVectorOpmInstructionsTest *tester) { using ST = typename std::make_signed<T>::type; tester->SetSemanticFunction(&Vmulhsu); - tester->BinaryOpTestHelperVX<T, ST, T>( + tester->BinaryOpTestHelperVX<T, ST, T, RVScalarRegister>( absl::StrCat("Vmulhsu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](ST vs2, T vs1) -> T { absl::int128 vs2_w = static_cast<absl::int128>(vs2); @@ -789,7 +786,7 @@ template <typename T> inline void VmaddVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vmadd); - tester->TernaryOpTestHelperVX<T, T, T>( + tester->TernaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vmadd", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, T vd) { if (sizeof(T) < 4) { @@ -846,7 +843,7 @@ template <typename T> inline void VnmsubVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vnmsub); - tester->TernaryOpTestHelperVX<T, T, T>( + tester->TernaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vnmsub", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, T vd) { if (sizeof(T) < 4) { @@ -903,7 +900,7 @@ template <typename T> inline void VmaccVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vmacc); - tester->TernaryOpTestHelperVX<T, T, T>( + tester->TernaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vmacc", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, T vd) { if (sizeof(T) < 4) { @@ -960,7 +957,7 @@ template <typename T> inline void VnmsacVXHelper(RiscVVectorOpmInstructionsTest *tester) { tester->SetSemanticFunction(&Vnmsac); - tester->TernaryOpTestHelperVX<T, T, T>( + tester->TernaryOpTestHelperVX<T, T, T, RVScalarRegister>( absl::StrCat("Vnmsac", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, T vd) { if (sizeof(T) < 4) { @@ -1012,7 +1009,7 @@ inline void VwadduVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwaddu); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwaddu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { return static_cast<WT>(vs2) + static_cast<WT>(vs1); @@ -1055,7 +1052,7 @@ inline void VwsubuVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwsubu); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwsubu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { return static_cast<WT>(vs2) - static_cast<WT>(vs1); @@ -1098,7 +1095,7 @@ inline void VwaddVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwadd); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwadd", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { return static_cast<WT>(vs2) + static_cast<WT>(vs1); @@ -1144,7 +1141,7 @@ inline void VwsubVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwsub); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwsub", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { WT vs2_w = vs2; @@ -1189,7 +1186,7 @@ inline void VwadduwVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwadduw); - tester->BinaryOpTestHelperVX<WT, WT, T>( + tester->BinaryOpTestHelperVX<WT, WT, T, RVScalarRegister>( absl::StrCat("Vwadduw", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](WT vs2, T vs1) -> WT { return vs2 + static_cast<WT>(vs1); }); @@ -1230,7 +1227,7 @@ inline void VwsubuwVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwsubuw); - tester->BinaryOpTestHelperVX<WT, WT, T>( + tester->BinaryOpTestHelperVX<WT, WT, T, RVScalarRegister>( absl::StrCat("Vwsubuw", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](WT vs2, T vs1) -> WT { return vs2 - static_cast<WT>(vs1); }); @@ -1271,7 +1268,7 @@ inline void VwaddwVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwaddw); - tester->BinaryOpTestHelperVX<WT, WT, T>( + tester->BinaryOpTestHelperVX<WT, WT, T, RVScalarRegister>( absl::StrCat("Vwaddw", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](WT vs2, T vs1) -> WT { return vs2 + static_cast<WT>(vs1); }); @@ -1312,7 +1309,7 @@ inline void VwsubwVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwsubw); - tester->BinaryOpTestHelperVX<WT, WT, T>( + tester->BinaryOpTestHelperVX<WT, WT, T, RVScalarRegister>( absl::StrCat("Vwsubw", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](WT vs2, T vs1) -> WT { return vs2 - static_cast<WT>(vs1); }); @@ -1354,7 +1351,7 @@ inline void VwmuluVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwmulu); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwmulu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { return static_cast<WT>(vs2) * static_cast<WT>(vs1); @@ -1397,7 +1394,7 @@ inline void VwmulVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwmul); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwmul", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1) -> WT { return static_cast<WT>(vs2) * static_cast<WT>(vs1); @@ -1442,7 +1439,7 @@ using WT = typename WideType<T>::type; using UT = typename std::make_unsigned<T>::type; tester->SetSemanticFunction(&Vwmulsu); - tester->BinaryOpTestHelperVX<WT, T, T>( + tester->BinaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwmulsu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, UT vs1) -> WT { return static_cast<WT>(vs2) * static_cast<WT>(vs1); @@ -1485,7 +1482,7 @@ inline void VwmaccuVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwmaccu); - tester->TernaryOpTestHelperVX<WT, T, T>( + tester->TernaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwmaccu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, WT vd) { return static_cast<WT>(vs2) * static_cast<WT>(vs1) + vd; @@ -1531,7 +1528,7 @@ inline void VwmaccVXHelper(RiscVVectorOpmInstructionsTest *tester) { using WT = typename WideType<T>::type; tester->SetSemanticFunction(&Vwmacc); - tester->TernaryOpTestHelperVX<WT, T, T>( + tester->TernaryOpTestHelperVX<WT, T, T, RVScalarRegister>( absl::StrCat("Vwmacc", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, T vs1, WT vd) -> WT { WT vs1_w = vs1; @@ -1584,7 +1581,7 @@ using WT = typename WideType<T>::type; using UT = typename std::make_unsigned<T>::type; tester->SetSemanticFunction(&Vwmaccus); - tester->TernaryOpTestHelperVX<WT, T, UT>( + tester->TernaryOpTestHelperVX<WT, T, UT, RVScalarRegister>( absl::StrCat("Vwmaccus", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](T vs2, UT vs1, WT vd) -> WT { using UWT = typename std::make_unsigned<WT>::type; @@ -1637,7 +1634,7 @@ using WT = typename WideType<T>::type; using UT = typename std::make_unsigned<T>::type; tester->SetSemanticFunction(&Vwmaccsu); - tester->TernaryOpTestHelperVX<WT, UT, T>( + tester->TernaryOpTestHelperVX<WT, UT, T, RVScalarRegister>( absl::StrCat("Vwmaccsu", sizeof(T) * 8, "vx"), /*sew*/ sizeof(T) * 8, tester->instruction(), [](UT vs2, T vs1, WT vd) -> WT { using UWT = typename std::make_unsigned<WT>::type;