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} |