Merge pull request #389 from paulusmack/fix-sc

execute1: Fix trace interrupt on sc instruction
branch-alias
Anton Blanchard 2 years ago committed by GitHub
commit 3c9b3c39ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -94,6 +94,7 @@ architecture behaviour of execute1 is
complete : std_ulogic; complete : std_ulogic;
exception : std_ulogic; exception : std_ulogic;
trap : std_ulogic; trap : std_ulogic;
advance_nia : std_ulogic;
new_msr : std_ulogic_vector(63 downto 0); new_msr : std_ulogic_vector(63 downto 0);
take_branch : std_ulogic; take_branch : std_ulogic;
direct_branch : std_ulogic; direct_branch : std_ulogic;
@ -1030,8 +1031,8 @@ begin
-- 0 would mean scv, so generate an illegal instruction interrupt -- 0 would mean scv, so generate an illegal instruction interrupt
if e_in.insn(1) = '1' then if e_in.insn(1) = '1' then
v.trap := '1'; v.trap := '1';
v.advance_nia := '1';
v.e.intr_vec := 16#C00#; v.e.intr_vec := 16#C00#;
v.e.last_nia := next_nia;
if e_in.valid = '1' then if e_in.valid = '1' then
report "sc"; report "sc";
end if; end if;
@ -1460,6 +1461,9 @@ begin
v.div_in_progress := actions.start_div; v.div_in_progress := actions.start_div;
v.br_mispredict := v.e.redirect and actions.direct_branch; v.br_mispredict := v.e.redirect and actions.direct_branch;
exception := actions.trap; exception := actions.trap;
if actions.advance_nia = '1' then
v.e.last_nia := next_nia;
end if;


-- Go busy while division is happening because the -- Go busy while division is happening because the
-- divider is not pipelined. Also go busy while a -- divider is not pipelined. Also go busy while a

Loading…
Cancel
Save