CacheMemory.hh (11034:a89984ca7d15) | CacheMemory.hh (11049:dfb0aa3f0649) |
---|---|
1/* 2 * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright --- 42 unchanged lines hidden (view full) --- 51{ 52 public: 53 typedef RubyCacheParams Params; 54 CacheMemory(const Params *p); 55 ~CacheMemory(); 56 57 void init(); 58 | 1/* 2 * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright --- 42 unchanged lines hidden (view full) --- 51{ 52 public: 53 typedef RubyCacheParams Params; 54 CacheMemory(const Params *p); 55 ~CacheMemory(); 56 57 void init(); 58 |
59 // Public Methods 60 // perform a cache access and see if we hit or not. Return true on a hit. 61 bool tryCacheAccess(Addr address, RubyRequestType type, 62 DataBlock*& data_ptr); 63 64 // similar to above, but doesn't require full access check 65 bool testCacheAccess(Addr address, RubyRequestType type, 66 DataBlock*& data_ptr); 67 |
|
59 // tests to see if an address is present in the cache 60 bool isTagPresent(Addr address) const; 61 62 // Returns true if there is: 63 // a) a tag match on this address or there is 64 // b) an unused line in the same cache "way" 65 bool cacheAvail(Addr address) const; 66 --- 17 unchanged lines hidden (view full) --- 84 85 // looks an address up in the cache 86 AbstractCacheEntry* lookup(Addr address); 87 const AbstractCacheEntry* lookup(Addr address) const; 88 89 Cycles getTagLatency() const { return tagArray.getLatency(); } 90 Cycles getDataLatency() const { return dataArray.getLatency(); } 91 | 68 // tests to see if an address is present in the cache 69 bool isTagPresent(Addr address) const; 70 71 // Returns true if there is: 72 // a) a tag match on this address or there is 73 // b) an unused line in the same cache "way" 74 bool cacheAvail(Addr address) const; 75 --- 17 unchanged lines hidden (view full) --- 93 94 // looks an address up in the cache 95 AbstractCacheEntry* lookup(Addr address); 96 const AbstractCacheEntry* lookup(Addr address) const; 97 98 Cycles getTagLatency() const { return tagArray.getLatency(); } 99 Cycles getDataLatency() const { return dataArray.getLatency(); } 100 |
92 bool isBlockInvalid(int64_t cache_set, int64_t loc); 93 bool isBlockNotBusy(int64_t cache_set, int64_t loc); | 101 bool isBlockInvalid(int64 cache_set, int64 loc); 102 bool isBlockNotBusy(int64 cache_set, int64 loc); |
94 95 // Hook for checkpointing the contents of the cache 96 void recordCacheContents(int cntrl, CacheRecorder* tr) const; 97 98 // Set this address to most recently used 99 void setMRU(Addr address); | 103 104 // Hook for checkpointing the contents of the cache 105 void recordCacheContents(int cntrl, CacheRecorder* tr) const; 106 107 // Set this address to most recently used 108 void setMRU(Addr address); |
100 // Set this entry to most recently used 101 void setMRU(const AbstractCacheEntry *e); | |
102 | 109 |
103 // Functions for locking and unlocking cache lines corresponding to the 104 // provided address. These are required for supporting atomic memory 105 // accesses. These are to be used when only the address of the cache entry 106 // is available. In case the entry itself is available. use the functions 107 // provided by the AbstractCacheEntry class. | |
108 void setLocked (Addr addr, int context); 109 void clearLocked (Addr addr); 110 bool isLocked (Addr addr, int context); 111 112 // Print cache contents 113 void print(std::ostream& out) const; 114 void printData(std::ostream& out) const; 115 --- 21 unchanged lines hidden (view full) --- 137 Stats::Scalar numDataArrayStalls; 138 139 int getCacheSize() const { return m_cache_size; } 140 int getNumBlocks() const { return m_cache_num_sets * m_cache_assoc; } 141 Addr getAddressAtIdx(int idx) const; 142 143 private: 144 // convert a Address to its location in the cache | 110 void setLocked (Addr addr, int context); 111 void clearLocked (Addr addr); 112 bool isLocked (Addr addr, int context); 113 114 // Print cache contents 115 void print(std::ostream& out) const; 116 void printData(std::ostream& out) const; 117 --- 21 unchanged lines hidden (view full) --- 139 Stats::Scalar numDataArrayStalls; 140 141 int getCacheSize() const { return m_cache_size; } 142 int getNumBlocks() const { return m_cache_num_sets * m_cache_assoc; } 143 Addr getAddressAtIdx(int idx) const; 144 145 private: 146 // convert a Address to its location in the cache |
145 int64_t addressToCacheSet(Addr address) const; | 147 int64 addressToCacheSet(Addr address) const; |
146 147 // Given a cache tag: returns the index of the tag in a set. 148 // returns -1 if the tag is not found. | 148 149 // Given a cache tag: returns the index of the tag in a set. 150 // returns -1 if the tag is not found. |
149 int findTagInSet(int64_t line, Addr tag) const; 150 int findTagInSetIgnorePermissions(int64_t cacheSet, Addr tag) const; | 151 int findTagInSet(int64 line, Addr tag) const; 152 int findTagInSetIgnorePermissions(int64 cacheSet, Addr tag) const; |
151 152 // Private copy constructor and assignment operator 153 CacheMemory(const CacheMemory& obj); 154 CacheMemory& operator=(const CacheMemory& obj); 155 156 private: 157 // Data Members (m_prefix) 158 bool m_is_instruction_only_cache; --- 22 unchanged lines hidden --- | 153 154 // Private copy constructor and assignment operator 155 CacheMemory(const CacheMemory& obj); 156 CacheMemory& operator=(const CacheMemory& obj); 157 158 private: 159 // Data Members (m_prefix) 160 bool m_is_instruction_only_cache; --- 22 unchanged lines hidden --- |