use class-based sv_reg_t and sv_sreg_t
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 19 Oct 2018 10:58:25 +0000 (11:58 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 19 Oct 2018 10:58:25 +0000 (11:58 +0100)
riscv/sv_decode.h
riscv/sv_insn_redirect.cc
riscv/sv_insn_redirect.h
riscv/sv_reg.h

index deab21757039a49efe5c64bc6766c8a903e0e855..88e434739c20b946a345ebd27d623475152e3ab6 100644 (file)
@@ -5,8 +5,8 @@
 
 #include "sv.h"
 #include "decode.h"
-//#include "sv_reg.h"
-typedef reg_t sv_reg_t;
+#include "sv_reg.h"
+//typedef reg_t sv_reg_t;
 
 //#include "processor.h"
 
index 7282b88f859204f96f9d8b95064758320bc79a02..f4d7711c71f9ac1ded2403fb1bde68ba4d689667 100644 (file)
@@ -1,7 +1,7 @@
 #include "sv_insn_redirect.h"
 #include "processor.h"
 #include "mulhi.h"
-//#include "sv_reg.h"
+#include "sv_reg.h"
 
 void (sv_proc_t::WRITE_FRD)(float32_t value)
 {
index 045d2aba6d22572c51146aff6502766e065a9965..9d09eb7fb34aa8b7ce213f0edb7cfa77dba1ef55 100644 (file)
@@ -4,7 +4,7 @@
 #include <stdio.h>
 #include "decode.h"
 #include "sv_decode.h"
-//#include "sv_reg.h"
+#include "sv_reg.h"
 
 #undef RS1
 #undef RS2
@@ -44,8 +44,8 @@ class insn_t;
 #define SHAMT get_shamt()
 #define UINT64_MAX uint64_max()
 
-typedef reg_t sv_reg_t;
-typedef sreg_t sv_sreg_t;
+//typedef reg_t sv_reg_t;
+//typedef sreg_t sv_sreg_t;
 
 class sv_proc_t
 {
index a1a6dbf9aded5de3fb59efed39b412a09fbbaa93..a29bcfcf2a88647c8dd9e874d4fde67c1161d59d 100644 (file)
@@ -1,9 +1,11 @@
 #ifndef SV_REG_H
 #define SV_REG_H
 
+class sv_sreg_t;
+
 class sv_reg_t {
 public:
-    sv_reg_t(uint64_t _reg) : reg(_reg), elwidth(0) {} // default elwidth
+    sv_reg_t(uint64_t _reg) : reg(_reg), elwidth(0) { } // default elwidth
     sv_reg_t(uint64_t _reg, uint8_t _elwidth) : reg(_reg), elwidth(_elwidth) {}
 
     uint64_t reg;
@@ -11,6 +13,11 @@ public:
 public:
   uint64_t get_data() { return reg; }
   uint8_t get_width() { return elwidth; }
+
+  //operator uint32_t() { return (uint32_t)get_data(); }
+  operator uint64_t() { return (uint64_t)get_data(); }
+  //operator int64_t() { return (int64_t)get_data(); }
+  operator sv_sreg_t();
 };
 
 class sv_sreg_t {
@@ -23,7 +30,11 @@ public:
 public:
   int64_t get_data() { return reg; }
   uint8_t get_width() { return elwidth; }
+
+  operator int64_t() { return (int64_t)get_data(); }
+  operator sv_reg_t() { return sv_reg_t((uint64_t)reg, elwidth); }
 };
 
+inline sv_reg_t::operator sv_sreg_t() { return sv_sreg_t((int64_t)reg, elwidth); }
 
 #endif