stride.cc (10053:b0b69dbafc08) stride.cc (10054:baaed1733069)
1/*
2 * Copyright (c) 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 84 unchanged lines hidden (view full) ---

93
94 if (iter != tab.end()) {
95 // Hit in table
96
97 int new_stride = data_addr - (*iter)->missAddr;
98 bool stride_match = (new_stride == (*iter)->stride);
99
100 if (stride_match && new_stride != 0) {
1/*
2 * Copyright (c) 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 84 unchanged lines hidden (view full) ---

93
94 if (iter != tab.end()) {
95 // Hit in table
96
97 int new_stride = data_addr - (*iter)->missAddr;
98 bool stride_match = (new_stride == (*iter)->stride);
99
100 if (stride_match && new_stride != 0) {
101 (*iter)->tolerance = true;
101 if ((*iter)->confidence < Max_Conf)
102 (*iter)->confidence++;
103 } else {
102 if ((*iter)->confidence < Max_Conf)
103 (*iter)->confidence++;
104 } else {
104 (*iter)->stride = new_stride;
105 if ((*iter)->confidence > Min_Conf)
106 (*iter)->confidence = 0;
105 if (!((*iter)->tolerance)) {
106 (*iter)->stride = new_stride;
107 if ((*iter)->confidence > Min_Conf)
108 (*iter)->confidence = 0;
109 } else {
110 (*iter)->tolerance = false;
111 }
107 }
108
109 DPRINTF(HWPrefetch, "hit: PC %x data_addr %x (%s) stride %d (%s), "
110 "conf %d\n", pc, data_addr, is_secure ? "s" : "ns", new_stride,
111 stride_match ? "match" : "change",
112 (*iter)->confidence);
113
114 (*iter)->missAddr = data_addr;
115 (*iter)->isSecure = is_secure;
116
117 if ((*iter)->confidence <= 0)
118 return;
119
120 for (int d = 1; d <= degree; d++) {
112 }
113
114 DPRINTF(HWPrefetch, "hit: PC %x data_addr %x (%s) stride %d (%s), "
115 "conf %d\n", pc, data_addr, is_secure ? "s" : "ns", new_stride,
116 stride_match ? "match" : "change",
117 (*iter)->confidence);
118
119 (*iter)->missAddr = data_addr;
120 (*iter)->isSecure = is_secure;
121
122 if ((*iter)->confidence <= 0)
123 return;
124
125 for (int d = 1; d <= degree; d++) {
121 Addr new_addr = data_addr + d * new_stride;
126 Addr new_addr = data_addr + d * (*iter)->stride;
122 if (pageStop && !samePage(data_addr, new_addr)) {
123 // Spanned the page, so now stop
124 pfSpanPage += degree - d + 1;
125 return;
126 } else {
127 DPRINTF(HWPrefetch, " queuing prefetch to %x (%s) @ %d\n",
128 new_addr, is_secure ? "s" : "ns", latency);
129 addresses.push_back(new_addr);

--- 25 unchanged lines hidden (view full) ---

155 }
156
157 StrideEntry *new_entry = new StrideEntry;
158 new_entry->instAddr = pc;
159 new_entry->missAddr = data_addr;
160 new_entry->isSecure = is_secure;
161 new_entry->stride = 0;
162 new_entry->confidence = 0;
127 if (pageStop && !samePage(data_addr, new_addr)) {
128 // Spanned the page, so now stop
129 pfSpanPage += degree - d + 1;
130 return;
131 } else {
132 DPRINTF(HWPrefetch, " queuing prefetch to %x (%s) @ %d\n",
133 new_addr, is_secure ? "s" : "ns", latency);
134 addresses.push_back(new_addr);

--- 25 unchanged lines hidden (view full) ---

160 }
161
162 StrideEntry *new_entry = new StrideEntry;
163 new_entry->instAddr = pc;
164 new_entry->missAddr = data_addr;
165 new_entry->isSecure = is_secure;
166 new_entry->stride = 0;
167 new_entry->confidence = 0;
168 new_entry->tolerance = false;
163 tab.push_back(new_entry);
164 }
165}
166
167
168StridePrefetcher*
169StridePrefetcherParams::create()
170{
171 return new StridePrefetcher(this);
172}
169 tab.push_back(new_entry);
170 }
171}
172
173
174StridePrefetcher*
175StridePrefetcherParams::create()
176{
177 return new StridePrefetcher(this);
178}