add stub "remap" of register offsets
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 3 Nov 2018 10:57:49 +0000 (10:57 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 3 Nov 2018 10:57:49 +0000 (10:57 +0000)
riscv/sv_insn_redirect.cc
riscv/sv_insn_redirect.h

index c4d5b9e00d6c517b47084e0f5d25ab1a442063c4..a4ca88a7d2b6f4d6ebaac8fd1b3afb4092c336eb 100644 (file)
@@ -118,6 +118,16 @@ union freg_shift {
     uint8_t b[sizeof(freg_t)*8];
 };
 
+unsigned int sv_proc_t::remap(reg_spec_t const& spec)
+{
+    unsigned int offs = *spec.offset;
+    sv_shape_t *shape = p->get_state()->get_shape(spec.reg);
+    if (shape == NULL) {
+        return offs;
+    }
+    return offs; // XXX TODO
+}
+
 void (sv_proc_t::DO_WRITE_FREG)(reg_spec_t const& spec, sv_freg_t const& value)
 {
     int regflen = sizeof(freg_t) * 8; // FLEN (not specified in spike)
@@ -137,7 +147,7 @@ void (sv_proc_t::DO_WRITE_FREG)(reg_spec_t const& spec, sv_freg_t const& value)
     unsigned int offs = 0;
     if (spec.offset != NULL) {
         unsigned int nbytes = flen / bitwidth;
-        offs = *spec.offset;
+        offs = remap(spec);
         shift = offs % nbytes;
         offs /= nbytes;
         reg += offs;
@@ -189,7 +199,7 @@ void (sv_proc_t::WRITE_REG)(reg_spec_t const& spec, sv_reg_t const& value)
     unsigned int offs = 0;
     if (spec.offset != NULL) {
         unsigned int nbytes = xlen / bitwidth;
-        offs = *spec.offset;
+        offs = remap(spec);
         shift = offs % nbytes;
         offs /= nbytes;
         reg += offs;
@@ -241,7 +251,7 @@ freg_t (sv_proc_t::READ_FREG)(reg_spec_t const& spec)
         if (nbytes == 0) {
             nbytes = 1;
         }
-        offs = *spec.offset;
+        offs = remap(spec);
         shift = offs % nbytes;
         offs /= nbytes;
         reg += offs;
@@ -285,7 +295,7 @@ reg_t sv_proc_t::READ_REG(reg_spec_t const& spec,
         if (nbytes == 0) {
             nbytes = 1;
         }
-        offs = *spec.offset;
+        offs = remap(spec);
         shift = offs % nbytes;
         offs /= nbytes;
         reg += offs;
index b08840d99965d7a806fb9df8f010553814ea1ea7..9f77b17f09b49ca755d82699155a61df64a712f0 100644 (file)
@@ -260,6 +260,8 @@ public:
     sv_reg_t to_uint32(sv_freg_t const& reg);
     sv_reg_t to_uint32(sv_float32_t const& reg);
 
+    unsigned int remap(reg_spec_t const& regspec);
+
 #include "sv_insn_decl.h"
 };