Otawa  0.10
PureCache.h
Go to the documentation of this file.
1 /*
2  * $Id$
3  * Copyright (c) 2005, IRIT UPS.
4  *
5  * otawa/hard/PureCache.h -- interface for Cache class.
6  */
7 #ifndef OTAWA_HARD_PURECACHE_H
8 #define OTAWA_HARD_PURECACHE_H
9 
10 #include <elm/assert.h>
11 #include <elm/io.h>
12 #include <elm/serial2/macros.h>
13 #include <elm/genstruct/Vector.h>
14 #include <otawa/base.h>
15 
16 namespace otawa { namespace hard {
17 
18 // PureCache class
19 class PureCache {
20 public:
21  typedef enum replace_policy_t {
22  NONE = 0,
23  OTHER = 1,
24  LRU = 2,
25  RANDOM = 3,
26  FIFO = 4,
27  PLRU = 5
29 
31  int row_bits;
32  int way_bits;
34 
35 private:
37  DFIELD(block_bits,4) &
38  DFIELD(row_bits,12) &
39  DFIELD(way_bits,0) &
40  elm::field("replace", replace, LRU)
41  );
42  const PureCache *_next;
43 
44 public:
45  inline PureCache(void);
46  virtual ~PureCache(void) { }
47 
48  // Simple accessors
49 
50  inline ot::size cacheSize(void) const;
51  inline ot::size blockSize(void) const;
52  inline int wayCount(void) const { return 1 << wayBits(); }
53  inline int rowCount(void) const { return 1 << rowBits(); }
54  inline int blockCount(void) const
55  { return 1 << (row_bits + way_bits); }
56  inline replace_policy_t replacementPolicy(void) const;
57 
58  // Low-level information
59  inline int blockBits(void) const;
60  inline int rowBits(void) const;
61  inline int tagBits(void) const;
62  inline int wayBits(void) const;
63  inline ot::mask blockMask(void) const;
64  inline ot::mask lineMask(void) const;
65  inline ot::mask tagMask(void) const;
66 
67  // Address decomposition
68  inline ot::mask offset(address_t addr) const;
69  inline ot::mask line(address_t addr) const;
70  inline ot::mask tag(address_t addr) const;
71  inline ot::mask block(address_t addr) const;
72 
73  // Modifiers
74  void setBlockBits(int block_bits);
75  void setRowBits(int set_bits);
76  void setWayBits(int way_bits);
78 
79 };
80 
81 
82 // Inlines
83 inline PureCache::PureCache(void) {
84 }
85 
86 inline ot::size PureCache::cacheSize(void) const {
87  return 1 << (blockBits() + rowBits() + wayBits());
88 }
89 
90 inline ot::size PureCache::blockSize(void) const {
91  return 1 << blockBits();
92 }
93 
95  return replace;
96 }
97 
98 
99 inline int PureCache::blockBits(void) const {
100  return block_bits;
101 }
102 
103 inline int PureCache::rowBits(void) const {
104  return row_bits;
105 }
106 
107 inline int PureCache::wayBits(void) const {
108  return way_bits;
109 }
110 
111 inline int PureCache::tagBits(void) const {
112  return 32 - blockBits() + rowBits();
113 }
114 
115 inline ot::mask PureCache::blockMask(void) const {
116  return blockSize() - 1;
117 }
118 
119 inline ot::mask PureCache::lineMask(void) const {
120  return (rowCount() - 1) << blockBits();
121 }
122 
123 inline ot::mask PureCache::tagMask(void) const {
124  return ~(lineMask() | blockMask());
125 }
126 
128  return ((ot::mask)addr.offset()) & blockMask();
129 }
130 
131 inline ot::mask PureCache::line(address_t addr) const {
132  return (((ot::mask)addr.offset()) & lineMask()) >> blockBits();
133 }
134 
135 inline ot::mask PureCache::tag(address_t addr) const {
136  return ((ot::mask)addr.offset()) >> (blockBits() + rowBits());
137 }
138 
139 inline ot::mask PureCache::block(address_t addr) const {
140  return ((ot::mask)addr.offset()) >> blockBits();
141 }
142 
143 
144 
145 } } // otawa::hard
146 
148 
149 #endif
Definition: PureCache.h:19
Definition: PureCache.h:26
int wayBits(void) const
Definition: PureCache.h:107
t::uint32 mask
Definition: base.h:45
int wayCount(void) const
Definition: PureCache.h:52
virtual ~PureCache(void)
Definition: PureCache.h:46
void setReplacePolicy(replace_policy_t replace)
Set the replace policy of the cache.
Definition: hardware_PureCache.cpp:176
ot::mask block(address_t addr) const
Definition: PureCache.h:139
int rowBits(void) const
Definition: PureCache.h:103
Definition: PureCache.h:27
void setBlockBits(int block_bits)
Definition: hardware_PureCache.cpp:144
replace_policy_t replace
Definition: PureCache.h:33
ENUM(otawa::hard::PureCache::replace_policy_t)
ot::mask blockMask(void) const
Definition: PureCache.h:115
Definition: PureCache.h:23
ot::mask lineMask(void) const
Definition: PureCache.h:119
int tagBits(void) const
Definition: PureCache.h:111
t::uint32 size
Definition: base.h:46
Field< T > field(CString name, T &value)
ot::mask tagMask(void) const
Definition: PureCache.h:123
ot::mask offset(address_t addr) const
Definition: PureCache.h:127
offset_t offset(void) const
Get the offset value.
Definition: base.h:70
ot::size blockSize(void) const
Definition: PureCache.h:90
The representation of an address in OTAWA.
Definition: base.h:54
int rowCount(void) const
Definition: PureCache.h:53
int block_bits
Definition: PureCache.h:30
ot::mask tag(address_t addr) const
Definition: PureCache.h:135
Definition: PureCache.h:22
void setWayBits(int way_bits)
Set the way count as a number of bits.
Definition: hardware_PureCache.cpp:166
replace_policy_t
Definition: PureCache.h:21
int blockBits(void) const
Definition: PureCache.h:99
int way_bits
Definition: PureCache.h:32
Definition: PureCache.h:24
int blockCount(void) const
Definition: PureCache.h:54
PureCache(void)
Definition: PureCache.h:83
Definition: PureCache.h:25
ot::size cacheSize(void) const
Definition: PureCache.h:86
void setRowBits(int set_bits)
Set the row count as a number of bits.
Definition: hardware_PureCache.cpp:155
const PureCache * _next
Definition: PureCache.h:42
int row_bits
Definition: PureCache.h:31
ot::mask line(address_t addr) const
Definition: PureCache.h:131
SERIALIZABLE(PureCache, DFIELD(block_bits, 4)&DFIELD(row_bits, 12)&DFIELD(way_bits, 0)&elm::field("replace", replace, LRU))
replace_policy_t replacementPolicy(void) const
Definition: PureCache.h:94