gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
indirect.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 ARM Limited
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Mitch Hayenga
29  */
30 
31 #ifndef __CPU_PRED_INDIRECT_HH__
32 #define __CPU_PRED_INDIRECT_HH__
33 
34 #include <deque>
35 
36 #include "arch/isa_traits.hh"
37 #include "config/the_isa.hh"
38 #include "cpu/inst_seq.hh"
39 
41 {
42  public:
43  IndirectPredictor(bool hash_ghr, bool hash_targets,
44  unsigned num_sets, unsigned num_ways,
45  unsigned tag_bits, unsigned path_len,
46  unsigned inst_shift, unsigned num_threads);
47  bool lookup(Addr br_addr, unsigned ghr, TheISA::PCState& br_target,
48  ThreadID tid);
49  void recordIndirect(Addr br_addr, Addr tgt_addr, InstSeqNum seq_num,
50  ThreadID tid);
51  void commit(InstSeqNum seq_num, ThreadID tid);
52  void squash(InstSeqNum seq_num, ThreadID tid);
53  void recordTarget(InstSeqNum seq_num, unsigned ghr,
54  const TheISA::PCState& target, ThreadID tid);
55 
56  private:
57  const bool hashGHR;
58  const bool hashTargets;
59  const unsigned numSets;
60  const unsigned numWays;
61  const unsigned tagBits;
62  const unsigned pathLength;
63  const unsigned instShift;
64 
65  struct IPredEntry
66  {
67  IPredEntry() : tag(0), target(0) { }
70  };
71 
73 
74  Addr getSetIndex(Addr br_addr, unsigned ghr, ThreadID tid);
75  Addr getTag(Addr br_addr);
76 
77  struct HistoryEntry
78  {
79  HistoryEntry(Addr br_addr, Addr tgt_addr, InstSeqNum seq_num)
80  : pcAddr(br_addr), targetAddr(tgt_addr), seqNum(seq_num) { }
84  };
85 
86 
87  struct ThreadInfo {
89 
91  unsigned headHistEntry;
92  };
93 
95 };
96 
97 #endif // __CPU_PRED_INDIRECT_HH__
std::vector< ThreadInfo > threadInfo
Definition: indirect.hh:94
const unsigned pathLength
Definition: indirect.hh:62
std::vector< std::vector< IPredEntry > > targetCache
Definition: indirect.hh:72
STL vector class.
Definition: stl.hh:40
const unsigned numWays
Definition: indirect.hh:60
TheISA::PCState target
Definition: indirect.hh:69
Addr getTag(Addr br_addr)
Definition: indirect.cc:182
Addr getSetIndex(Addr br_addr, unsigned ghr, ThreadID tid)
Definition: indirect.cc:162
void commit(InstSeqNum seq_num, ThreadID tid)
Definition: indirect.cc:88
uint64_t InstSeqNum
Definition: inst_seq.hh:40
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
STL deque class.
Definition: stl.hh:47
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:171
const unsigned numSets
Definition: indirect.hh:59
const bool hashTargets
Definition: indirect.hh:58
void recordIndirect(Addr br_addr, Addr tgt_addr, InstSeqNum seq_num, ThreadID tid)
Definition: indirect.cc:79
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
void recordTarget(InstSeqNum seq_num, unsigned ghr, const TheISA::PCState &target, ThreadID tid)
Definition: indirect.cc:126
IndirectPredictor(bool hash_ghr, bool hash_targets, unsigned num_sets, unsigned num_ways, unsigned tag_bits, unsigned path_len, unsigned inst_shift, unsigned num_threads)
Definition: indirect.cc:36
std::deque< HistoryEntry > pathHist
Definition: indirect.hh:90
HistoryEntry(Addr br_addr, Addr tgt_addr, InstSeqNum seq_num)
Definition: indirect.hh:79
bool lookup(Addr br_addr, unsigned ghr, TheISA::PCState &br_target, ThreadID tid)
Definition: indirect.cc:57
const unsigned instShift
Definition: indirect.hh:63
void squash(InstSeqNum seq_num, ThreadID tid)
Definition: indirect.cc:106
const bool hashGHR
Definition: indirect.hh:57
const unsigned tagBits
Definition: indirect.hh:61

Generated on Fri Jun 9 2017 13:03:44 for gem5 by doxygen 1.8.6