From: Paul Mackerras Date: Sat, 21 Nov 2020 02:54:14 +0000 (+1100) Subject: execute1: Fix writing LR for bdnzl/bdzl instructions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=27ac74a3415d894437d5a3b146d270615c637f6f;p=microwatt.git 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 --- 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);