disable subvl-mult on predication remap
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 27 Jun 2019 12:52:30 +0000 (13:52 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 27 Jun 2019 12:52:30 +0000 (13:52 +0100)
riscv/sv_insn_redirect.cc

index 988cfcaa99fad14863b67e619cf640a3de8ed0af..3d6d2e95b6f15243c990c295affe26de5baecb0a 100644 (file)
@@ -136,7 +136,9 @@ unsigned int sv_proc_t::remap(reg_spec_t const& spec, bool pred)
     // register offset is computed.  if subvl is active, it's a multiplier
     //fprintf(stderr, "remap %ld subvl %ld offs %ld subo %ld\n",
     //                spec.reg, p->get_state()->sv().subvl, offs, subo);
-    offs = offs * p->get_state()->sv().subvl + subo;
+    if (!pred) {
+        offs = offs * p->get_state()->sv().subvl + subo;
+    }
     sv_shape_t *shape = p->get_state()->get_shape(spec.reg, pred);
     if (shape == NULL) {
         return offs;