starting to put in addr_mode
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 29 Oct 2018 02:00:17 +0000 (02:00 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 29 Oct 2018 02:00:17 +0000 (02:00 +0000)
riscv/sv_insn_redirect.cc

index 3e8f3893e8ec360489a1b0677a92afdf7771535c..1e2c542c13c6abf29ae8d915e7d712c63aad5e48 100644 (file)
@@ -153,15 +153,18 @@ reg_t sv_proc_t::READ_REG(reg_spec_t const& spec, sv_reg_t const& imm,
     int shift = 0;
     int offs = 0;
     if (spec.offset != NULL && spec.reg != 2) { // XXX HACK on spec.reg != 2
-        int nbytes = xlen / bitwidth;
+        int nbytes = width / bitwidth;
+        if (nbytes == 0) {
+            nbytes = 1;
+        }
         offs = *spec.offset;
         shift = offs % nbytes;
         offs /= nbytes;
         reg += offs;
     }
     uint64_t data = _insn->p->get_state()->XPR[reg];
-    uint64_t ndata = data;
-    if (xlen != bitwidth)
+    uint64_t ndata = data; // + (int64_t)imm;
+    if (((uint64_t)xlen) != ((uint64_t)bitwidth))
     {
         ndata = data >> (shift*bitwidth); // gets element within the reg-block
         ndata &= ((1UL<<bitwidth)-1UL); // masks off the right bits