From b54db0ba23266f2792eb94fcc24e41a991aed28d Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Tue, 2 Aug 2016 15:23:40 -0700 Subject: [PATCH] [rocket] don't update BTB on not-taken branches Only update the BHT; don't set the target prediction to pc+4. --- rocket/src/main/scala/rocket.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocket/src/main/scala/rocket.scala b/rocket/src/main/scala/rocket.scala index 4de3521a..272c16e4 100644 --- a/rocket/src/main/scala/rocket.scala +++ b/rocket/src/main/scala/rocket.scala @@ -577,7 +577,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p) { ibuf.io.inst(0).ready := !ctrl_stalld || csr.io.interrupt - io.imem.btb_update.valid := (mem_reg_replay && mem_reg_btb_hit) || (mem_reg_valid && !take_pc_wb && mem_wrong_npc) + io.imem.btb_update.valid := (mem_reg_replay && mem_reg_btb_hit) || (mem_reg_valid && !take_pc_wb && (mem_cfi_taken || !mem_cfi) && mem_wrong_npc) io.imem.btb_update.bits.isValid := !mem_reg_replay && mem_cfi io.imem.btb_update.bits.isJump := mem_ctrl.jal || mem_ctrl.jalr io.imem.btb_update.bits.isReturn := mem_ctrl.jalr && mem_reg_inst(19,15) === BitPat("b00??1")