Fix incorrect tracking of predictedness of fetch data phase. Fixes performance regression in RV32IMC CoreMark (now runs faster, as it should.)
This commit is contained in:
parent
979e80be99
commit
31efd07042
|
@ -131,9 +131,8 @@ assign d_pc = pc;
|
|||
// Frontend should mark the whole instruction, and nothing but the
|
||||
// instruction, as a predicted branch. This goes wrong when we execute the
|
||||
// address containing the predicted branch twice with different 16-bit
|
||||
// alignments! We don't care about performance in this case(it took BMC to
|
||||
// find it), but need to issue a branch-to-self to get back on a linear path,
|
||||
// otherwise PC and CIR will diverge and we will misexecute.
|
||||
// alignments (!). We need to issue a branch-to-self to get back on a linear
|
||||
// path, otherwise PC and CIR will diverge and we will misexecute.
|
||||
wire partial_predicted_branch = !d_starved &&
|
||||
|BRANCH_PREDICTOR && d_instr_is_32bit && ^fd_cir_predbranch;
|
||||
|
||||
|
|
|
@ -386,7 +386,7 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
};
|
||||
end
|
||||
mem_data_predbranch <=
|
||||
|BRANCH_PREDICTOR && btb_match_current_addr ? (
|
||||
|BRANCH_PREDICTOR && btb_match_word ? (
|
||||
btb_src_addr[1] ? 2'b10 :
|
||||
btb_src_size ? 2'b11 : 2'b01
|
||||
) :
|
||||
|
|
Loading…
Reference in New Issue