simplify sv_proc_t redirection of RS1-3 / FRS1 macrhos
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 12 Oct 2018 15:12:31 +0000 (16:12 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 12 Oct 2018 15:12:31 +0000 (16:12 +0100)
riscv/sv_insn_redirect.cc
riscv/sv_insn_redirect.h

index 616ed3356983988aac724186509c4d1488e694d3..f0759bc6d152901203aa79d60b34731dc9f6f5cd 100644 (file)
@@ -3,7 +3,7 @@
 
 void (sv_proc_t::WRITE_RD)(reg_t value)
 {
-    WRITE_RD( value );
+    WRITE_REG( insn->rd(), value );
 }
 
 /*
@@ -13,11 +13,18 @@ reg_t (sv_proc_t::READ_REG)(uint64_t i)
 }
 */
 
-RS1::operator reg_t () const & {
-    return _insn->p->get_state()->XPR[_insn->rs1()];
+reg_t sv_proc_t::get_rs1()
+{
+    return insn->p->get_state()->XPR[insn->rs1()];
 }
 
-RS2::operator reg_t () const & {
-    return _insn->p->get_state()->XPR[_insn->rs2()];
+reg_t sv_proc_t::get_rs2()
+{
+    return insn->p->get_state()->XPR[insn->rs2()];
+}
+
+freg_t sv_proc_t::get_frs1()
+{
+    return READ_FREG(insn->rs1());
 }
 
index 2efcce3c664b2c169346ecb544924c786bc516f1..cb4848ae769249db206deda5f63f8f887a41864e 100644 (file)
@@ -7,19 +7,27 @@
 
 #undef RS1
 #undef RS2
+#undef FRS1
 
 class processor_t;
 class insn_t;
 
-class RS1 {
+/*
+class FRS1 {
     public:
         sv_insn_t *_insn;
-        RS1() : _insn(NULL) {}
+        FRS1() : _insn(NULL) {}
         //sv_insn_t & operator = (sv_insn_t &i)
         //{ _insn = &i; return i; }
-        operator reg_t () const &;
+        operator freg_t () const &;
 };
+*/
+
+#define FRS1 get_frs1()
+#define RS1 get_rs1()
+#define RS2 get_rs2()
 
+/*
 class RS2 {
     public:
         sv_insn_t *_insn;
@@ -28,34 +36,27 @@ class RS2 {
         //{ _insn = &i; return i; }
         operator reg_t () const &;
 };
+*/
 
 class sv_proc_t
 {
 public:
-    sv_proc_t(processor_t *_p) : p(_p) {}
+    sv_proc_t(processor_t *_p) : p(_p), insn(NULL) {}
     void (WRITE_RD)(reg_t value);
     //reg_t (READ_REG)(uint64_t i);
 
     processor_t *p;
-
-    class RS1 RS1;
-    class RS2 RS2;
-
-    class {
-        public:
-        sv_insn_t *_insn;
-        sv_insn_t & operator = (sv_insn_t &i)
-        { _insn = &i; return i; }
-        operator sv_insn_t () const & { return *_insn; }
-        uint64_t rd() { return _insn->rd(); }
-    } insn;
+    sv_insn_t *insn;
 
     void set_insn(sv_insn_t *i) {
-        this->insn = *i;
-        RS1._insn = i;
-        RS2._insn = i;
+        this->insn = i;
     }
 
+    reg_t get_rs1();
+    reg_t get_rs2();
+
+    freg_t get_frs1();
+
 #include "sv_insn_decl.h"
 };