summaryrefslogtreecommitdiff
path: root/cpu/beta_cpu/btb.hh
diff options
context:
space:
mode:
Diffstat (limited to 'cpu/beta_cpu/btb.hh')
-rw-r--r--cpu/beta_cpu/btb.hh52
1 files changed, 52 insertions, 0 deletions
diff --git a/cpu/beta_cpu/btb.hh b/cpu/beta_cpu/btb.hh
new file mode 100644
index 000000000..81069eabe
--- /dev/null
+++ b/cpu/beta_cpu/btb.hh
@@ -0,0 +1,52 @@
+#ifndef __BTB_HH__
+#define __BTB_HH__
+
+// For Addr type.
+#include "arch/alpha/isa_traits.hh"
+
+class DefaultBTB
+{
+ private:
+ struct BTBEntry
+ {
+ BTBEntry()
+ : tag(0), target(0), valid(false)
+ {
+ }
+
+ Addr tag;
+ Addr target;
+ bool valid;
+ };
+
+ public:
+ DefaultBTB(unsigned numEntries, unsigned tagBits,
+ unsigned instShiftAmt);
+
+ Addr lookup(const Addr &inst_PC);
+
+ bool valid(const Addr &inst_PC);
+
+ void update(const Addr &inst_PC, const Addr &target_PC);
+
+ private:
+ inline unsigned getIndex(const Addr &inst_PC);
+
+ inline Addr getTag(const Addr &inst_PC);
+
+ BTBEntry *btb;
+
+ unsigned numEntries;
+
+ unsigned idxMask;
+
+ unsigned tagBits;
+
+ unsigned tagMask;
+
+ unsigned instShiftAmt;
+
+ unsigned tagShiftAmt;
+};
+
+#endif // __BTB_HH__