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 &reg_name : sources) {
-      auto *reg = state_->GetRegister<RV32Register>(reg_name).first;
+      auto *reg = state_->GetRegister<T>(reg_name).first;
       inst->AppendSource(reg->CreateSourceOperand());
     }
     for (auto &reg_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;
