Merge pull request #7 from akihikodaki:template

PiperOrigin-RevId: 718087600
Change-Id: I935e8de167bb5118acffc0b5818b80b595dbe66a
diff --git a/riscv/riscv_state.h b/riscv/riscv_state.h
index 3c4bbd2..a09c8d6 100644
--- a/riscv/riscv_state.h
+++ b/riscv/riscv_state.h
@@ -230,21 +230,6 @@
     return std::make_pair(AddRegister<RegisterType>(name), true);
   }
 
-  // Specialization for RiscV vector registers.
-  template <>
-  std::pair<RVVectorRegister *, bool> GetRegister<RVVectorRegister>(
-      absl::string_view name) {
-    int vector_byte_width = vector_register_width();
-    if (vector_byte_width == 0) return std::make_pair(nullptr, false);
-    auto ptr = registers()->find(std::string(name));
-    if (ptr != registers()->end())
-      return std::make_pair(static_cast<RVVectorRegister *>(ptr->second),
-                            false);
-    // Create a new register and return a pointer to the object.
-    return std::make_pair(
-        AddRegister<RVVectorRegister>(name, vector_byte_width), true);
-  }
-
   // Add register alias.
   template <typename RegisterType>
   absl::Status AddRegisterAlias(absl::string_view current_name,
@@ -448,6 +433,20 @@
   generic::SimpleCounter<int64_t> counter_interrupt_returns_;
 };
 
+// Specialization for RiscV vector registers.
+template <>
+inline std::pair<RVVectorRegister *, bool>
+RiscVState::GetRegister<RVVectorRegister>(absl::string_view name) {
+  int vector_byte_width = vector_register_width();
+  if (vector_byte_width == 0) return std::make_pair(nullptr, false);
+  auto ptr = registers()->find(std::string(name));
+  if (ptr != registers()->end())
+    return std::make_pair(static_cast<RVVectorRegister *>(ptr->second), false);
+  // Create a new register and return a pointer to the object.
+  return std::make_pair(AddRegister<RVVectorRegister>(name, vector_byte_width),
+                        true);
+}
+
 }  // namespace riscv
 }  // namespace sim
 }  // namespace mpact