summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rtl/core/control/select.sv4
-rw-r--r--tb/sim/shifts.S3
-rw-r--r--tb/sim/shifts.py1
3 files changed, 7 insertions, 1 deletions
diff --git a/rtl/core/control/select.sv b/rtl/core/control/select.sv
index 1ea2c31..0ab7bb2 100644
--- a/rtl/core/control/select.sv
+++ b/rtl/core/control/select.sv
@@ -29,7 +29,9 @@ module core_control_select
if(next_cycle.issue) begin
ra = dec.data.rn;
rb = dec.snd.r;
- end else if(next_cycle.transfer) begin
+ end else if(next_cycle.rd_indirect_shift)
+ rb = r_shift;
+ else if(next_cycle.transfer) begin
if(ldst_next)
// final_rd viene de dec.ldst.rd
rb = pop_valid ? popped : final_rd;
diff --git a/tb/sim/shifts.S b/tb/sim/shifts.S
index 68ef3f8..6209157 100644
--- a/tb/sim/shifts.S
+++ b/tb/sim/shifts.S
@@ -14,4 +14,7 @@ reset:
# tmp = 0
# r2 = r0 = 00015000
eor r2, r0, r2, asr #7
+ ldr r4, =(512 << 20)
+ ldr r5, =#60
+ lsr r4, r4, r5
mov pc, lr
diff --git a/tb/sim/shifts.py b/tb/sim/shifts.py
index 38f24a2..9923124 100644
--- a/tb/sim/shifts.py
+++ b/tb/sim/shifts.py
@@ -2,3 +2,4 @@ def final():
assert_reg(r0, 0x00015000)
assert_reg(r2, 0x00015000)
assert_reg(r3, 0xaaa9fd55)
+ assert_reg(r4, 0)