diff --git a/sim/decoder.cc b/sim/decoder.cc
index eeb1d43..a98f6b3 100644
--- a/sim/decoder.cc
+++ b/sim/decoder.cc
@@ -1,7 +1,11 @@
 #include "sim/decoder.h"
 
+#include "mpact/sim/generic/type_helpers.h"
+
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;  // NOLINT: is used below (clang error).
+
 KelvinDecoder::KelvinDecoder(KelvinState *state,
                              mpact::sim::util::MemoryInterface *memory)
     : state_(state), memory_(memory) {
diff --git a/sim/kelvin_instructions.cc b/sim/kelvin_instructions.cc
index dbc25d6..1d2605a 100644
--- a/sim/kelvin_instructions.cc
+++ b/sim/kelvin_instructions.cc
@@ -4,9 +4,14 @@
 #include <string>
 
 #include "sim/kelvin_state.h"
+#include "riscv/riscv_state.h"
+#include "mpact/sim/generic/instruction.h"
+#include "mpact/sim/generic/type_helpers.h"
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;  // NOLINT: is used below (clang error).
+
 void KelvinIllegalInstruction(mpact::sim::generic::Instruction *inst) {
   auto *state = static_cast<KelvinState *>(inst->state());
   state->Trap(/*is_interrupt*/ false, /*trap_value*/ 0,
diff --git a/sim/kelvin_top.cc b/sim/kelvin_top.cc
index d3b7f03..a18cc08 100644
--- a/sim/kelvin_top.cc
+++ b/sim/kelvin_top.cc
@@ -46,7 +46,7 @@
 
 namespace kelvin::sim {
 
-using ::mpact::sim::riscv::operator*;  // NOLINT: clang-tidy false positive.
+using ::mpact::sim::generic::operator*;  // NOLINT: clang-tidy false positive.
 
 constexpr char kKelvinName[] = "Kelvin";
 
diff --git a/sim/kelvin_vector_convolution_instructions.cc b/sim/kelvin_vector_convolution_instructions.cc
index 2f7fbf1..4557362 100644
--- a/sim/kelvin_vector_convolution_instructions.cc
+++ b/sim/kelvin_vector_convolution_instructions.cc
@@ -10,9 +10,12 @@
 #include "riscv/riscv_state.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/instruction.h"
+#include "mpact/sim/generic/type_helpers.h"
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;  // NOLINT: is used below (clang error).
+
 using mpact::sim::generic::GetInstructionSource;
 using mpact::sim::riscv::RV32VectorSourceOperand;
 
diff --git a/sim/kelvin_vector_instructions.cc b/sim/kelvin_vector_instructions.cc
index 241789d..fb3f361 100644
--- a/sim/kelvin_vector_instructions.cc
+++ b/sim/kelvin_vector_instructions.cc
@@ -18,6 +18,7 @@
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;
 using mpact::sim::generic::DataBuffer;
 using mpact::sim::generic::GetInstructionSource;
 using mpact::sim::riscv::RV32VectorDestinationOperand;
@@ -532,7 +533,7 @@
 // Halving addition with optional rounding bit.
 template <typename T>
 T KelvinVHaddHelper(bool round, T vs1, T vs2) {
-  using WT = typename mpact::sim::riscv::WideType<T>::type;
+  using WT = typename mpact::sim::generic::WideType<T>::type;
   return static_cast<T>(
       (static_cast<WT>(vs1) + static_cast<WT>(vs2) + (round ? 1 : 0)) >> 1);
 }
@@ -553,7 +554,7 @@
 // Halving subtraction with optional rounding bit.
 template <typename T>
 T KelvinVHsubHelper(bool round, T vs1, T vs2) {
-  using WT = typename mpact::sim::riscv::WideType<T>::type;
+  using WT = typename mpact::sim::generic::WideType<T>::type;
   return static_cast<T>(
       (static_cast<WT>(vs1) - static_cast<WT>(vs2) + (round ? 1 : 0)) >> 1);
 }
@@ -712,7 +713,7 @@
 // result.
 template <typename T>
 T KelvinVShiftHelper(bool round, T vs1, T vs2) {
-  using WT = typename mpact::sim::riscv::WideType<T>::type;
+  using WT = typename mpact::sim::generic::WideType<T>::type;
   if (std::is_signed<T>::value == true) {
     constexpr int kMaxShiftBit = sizeof(T) * 8;
     int shamt = vs2;
@@ -734,7 +735,7 @@
       CHECK_LE(ushamt, kMaxShiftBit);
       CHECK_GE(ushamt, 0);
       // Use unsigned WideType to prevent undefined negative shift.
-      using UWT = typename mpact::sim::riscv::WideType<UT>::type;
+      using UWT = typename mpact::sim::generic::WideType<UT>::type;
       shift = static_cast<WT>(static_cast<UWT>(vs1) << ushamt);
     }
     T neg_max = std::numeric_limits<T>::min();
@@ -863,7 +864,7 @@
   static_assert(2 * sizeof(Td) == sizeof(Ts) || 4 * sizeof(Td) == sizeof(Ts));
   constexpr int src_bits = sizeof(Ts) * 8;
   vs2 &= (src_bits - 1);
-  using WTs = typename mpact::sim::riscv::WideType<Ts>::type;
+  using WTs = typename mpact::sim::generic::WideType<Ts>::type;
   WTs res = (static_cast<WTs>(vs1) +
              (vs2 && round ? static_cast<WTs>(1ll << (vs2 - 1)) : 0)) >>
             vs2;
@@ -897,7 +898,7 @@
 void KelvinVMul(bool scalar, bool strip_mine, Instruction *inst) {
   KelvinBinaryVectorOp(
       inst, scalar, strip_mine, std::function<T(T, T)>([](T vs1, T vs2) -> T {
-        using WT = typename mpact::sim::riscv::WideType<T>::type;
+        using WT = typename mpact::sim::generic::WideType<T>::type;
 
         return static_cast<T>(static_cast<WT>(vs1) * static_cast<WT>(vs2));
       }));
@@ -911,7 +912,7 @@
 void KelvinVMuls(bool scalar, bool strip_mine, Instruction *inst) {
   KelvinBinaryVectorOp(
       inst, scalar, strip_mine, std::function<T(T, T)>([](T vs1, T vs2) -> T {
-        using WT = typename mpact::sim::riscv::WideType<T>::type;
+        using WT = typename mpact::sim::generic::WideType<T>::type;
         WT result = static_cast<WT>(vs1) * static_cast<WT>(vs2);
         if (std::is_signed<T>::value) {
           result = std::max(
@@ -949,7 +950,7 @@
 // Returns high half.
 template <typename T>
 T KelvinVMulhHelper(bool round, T vs1, T vs2) {
-  using WT = typename mpact::sim::riscv::WideType<T>::type;
+  using WT = typename mpact::sim::generic::WideType<T>::type;
   constexpr int n = sizeof(T) * 8;
 
   WT result = static_cast<WT>(vs1) * static_cast<WT>(vs2);
@@ -975,7 +976,7 @@
 template <typename T>
 T KelvinVDmulhHelper(bool round, bool round_neg, T vs1, T vs2) {
   constexpr int n = sizeof(T) * 8;
-  using WT = typename mpact::sim::riscv::WideType<T>::type;
+  using WT = typename mpact::sim::generic::WideType<T>::type;
   WT result = static_cast<WT>(vs1) * static_cast<WT>(vs2);
   if (round) {
     WT rnd = static_cast<WT>(0x40000000ll >> (32 - n));
@@ -1008,7 +1009,7 @@
   KelvinBinaryVectorOp<false /* halftype */, false /* widen_dst */, T, T, T, T>(
       inst, scalar, strip_mine,
       std::function<T(T, T, T)>([](T vd, T vs1, T vs2) -> T {
-        using WT = typename mpact::sim::riscv::WideType<T>::type;
+        using WT = typename mpact::sim::generic::WideType<T>::type;
         return static_cast<WT>(vd) +
                static_cast<WT>(vs1) * static_cast<WT>(vs2);
       }));
@@ -1023,7 +1024,7 @@
   KelvinBinaryVectorOp<false /* halftype */, false /* widen_dst */, T, T, T, T>(
       inst, scalar, strip_mine,
       std::function<T(T, T, T)>([](T vd, T vs1, T vs2) -> T {
-        using WT = typename mpact::sim::riscv::WideType<T>::type;
+        using WT = typename mpact::sim::generic::WideType<T>::type;
         return static_cast<WT>(vs1) +
                static_cast<WT>(vd) * static_cast<WT>(vs2);
       }));
diff --git a/sim/renode/kelvin_renode_reigster_info.cc b/sim/renode/kelvin_renode_reigster_info.cc
index 8a3be56..5af05bb 100644
--- a/sim/renode/kelvin_renode_reigster_info.cc
+++ b/sim/renode/kelvin_renode_reigster_info.cc
@@ -4,6 +4,8 @@
 
 namespace kelvin::sim {
 
+using ::mpact::sim::generic::operator*;  // NOLINT: used below (clange error).
+
 KelvinRenodeRegisterInfo *KelvinRenodeRegisterInfo::instance_ = nullptr;
 
 void KelvinRenodeRegisterInfo::InitializeRenodeRegisterInfo() {
diff --git a/sim/renode/renode_mpact.cc b/sim/renode/renode_mpact.cc
index e01903f..f8a796d 100644
--- a/sim/renode/renode_mpact.cc
+++ b/sim/renode/renode_mpact.cc
@@ -243,7 +243,7 @@
   // If the previous halt reason was a semihost halt request, then we shouldn't
   // step any further. Just return with "waiting for interrupt" code.
   using HaltReason = RenodeDebugInterface::HaltReason;
-  using mpact::sim::riscv::operator*;  // NOLINT: used below.
+  using mpact::sim::generic::operator*;  // NOLINT: used below.
   if (halt_res.value() == *HaltReason::kSemihostHaltRequest) {
     if (status != nullptr) {
       *status = static_cast<int32_t>(ExecutionResult::kAborted);
@@ -334,7 +334,7 @@
   }
   // Map the halt status appropriately.
   using HaltReason = RenodeDebugInterface::HaltReason;
-  using mpact::sim::riscv::operator*;  // NOLINT: used below.
+  using mpact::sim::generic::operator*;  // NOLINT: used below.
   if (status != nullptr) {
     switch (halt_res.value()) {
       case *HaltReason::kSemihostHaltRequest:
diff --git a/sim/test/kelvin_vector_instructions_test_base.h b/sim/test/kelvin_vector_instructions_test_base.h
index d5c4f70..8c9fb57 100644
--- a/sim/test/kelvin_vector_instructions_test_base.h
+++ b/sim/test/kelvin_vector_instructions_test_base.h
@@ -202,7 +202,7 @@
       SetRegisterValues<RV32Register::ValueType>({{kRs1Name, rs2_reg_value}});
       // Cast the value to the appropriate width, sign-extending if needed.
       rs2_value = static_cast<Ts2>(
-          static_cast<typename mpact::sim::riscv::SameSignedType<
+          static_cast<typename mpact::sim::generic::SameSignedType<
               RV32Register::ValueType, Ts2>::type>(rs2_reg_value));
     } else if (!halftype_op) {
       // Use the value slightly greater than min so VShift won't complain
