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 <paulus@ozlabs.org>
pull/249/head
Paul Mackerras 4 years ago
parent 1037c6aa2e
commit 27ac74a341

@ -1131,10 +1131,16 @@ begin
if e_in.insn_type = OP_FETCH_FAILED then if e_in.insn_type = OP_FETCH_FAILED then
do_trace := '0'; do_trace := '0';
end if; 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'; 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_enable := '1';
v.e.exc_write_data := r.next_lr; v.e.exc_write_data := r.next_lr;
v.e.exc_write_reg := fast_spr_num(SPR_LR); v.e.exc_write_reg := fast_spr_num(SPR_LR);

Loading…
Cancel
Save