From 27ac74a3415d894437d5a3b146d270615c637f6f Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Sat, 21 Nov 2020 13:54:14 +1100 Subject: [PATCH] execute1: Fix writing LR for bdnzl/bdzl instructions Branch instructions which do a redirect and write both CTR and LR were not doing the write to LR due to a logic error. This fixes it. Signed-off-by: Paul Mackerras --- execute1.vhdl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/execute1.vhdl b/execute1.vhdl index de6bd25..61df974 100644 --- a/execute1.vhdl +++ b/execute1.vhdl @@ -1131,10 +1131,16 @@ begin if e_in.insn_type = OP_FETCH_FAILED then do_trace := '0'; end if; + end if; + + -- The following cases all occur when r.busy = 1 and therefore + -- valid_in = 0. Hence they don't happen in the same cycle as any of + -- the cases above which depend on valid_in = 1. - elsif r.f.redirect = '1' then + if r.f.redirect = '1' then v.e.valid := '1'; - elsif r.lr_update = '1' then + end if; + if r.lr_update = '1' then v.e.exc_write_enable := '1'; v.e.exc_write_data := r.next_lr; v.e.exc_write_reg := fast_spr_num(SPR_LR);