50 : numAtomicLocs(n_atomic_locs),
51 numLocsPerAtomic(n_normal_locs_per_atomic)
92 assert(loc < numAtomicLocs + numNormalLocs && loc >= 0);
101 return ret_atomic_loc;
144 assert(loc_begin <= loc_end);
176 assert(firstMark >= 0);
177 assert(firstMark <= secondMark);
178 assert(secondMark <= arraySize);
180 assert(loadStoreMap.empty());
186 expectedValues.insert(requestCount - 1);
187 expectedValues.insert(requestCount - 2);
193 assert(firstMark >= 0);
194 assert(firstMark <= secondMark);
195 assert(secondMark <= arraySize);
197 if (firstMark == arraySize) {
203 int range_size = arraySize - firstMark;
207 LdStMap::iterator it = loadStoreMap.find(ret_loc);
209 if (it == loadStoreMap.end()) {
216 (it->second).first =
true;
226 assert(firstMark >= 0);
227 assert(firstMark <= secondMark);
228 assert(secondMark <= arraySize);
230 if (firstMark == secondMark) {
235 int range_size = secondMark - firstMark;
239 LdStMap::iterator it = loadStoreMap.find(ret_loc);
241 if (it == loadStoreMap.end()) {
248 (it->second).second =
true;
265 assert(firstMark >= 0);
266 assert(firstMark <= secondMark);
267 assert(secondMark <= arraySize);
269 for (
auto& it : loadStoreMap) {
273 assert(loc >= locationBase && loc < locationBase + arraySize);
274 LocProperty& loc_prop = locProps[loc - locationBase];
276 if (
p.first && !
p.second) {
279 assert(inSecondRegion(loc_prop.first) ||
280 inThirdRegion(loc_prop.first));
282 if (inSecondRegion(loc_prop.first)) {
284 assert(loc_prop.second == 0);
287 Location swapped_loc = locArray[secondMark - 1];
289 locProps[swapped_loc - locationBase];
292 swap(loc_prop, swapped_loc_prop);
300 }
else if (
p.second) {
303 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
306 Location swapped_loc = locArray[firstMark];
308 locProps[swapped_loc - locationBase];
311 swap(loc_prop, swapped_loc_prop);
319 panic(
"Location in loadStoreMap but wasn't picked in any"
325 loadStoreMap.clear();
331 assert(loc >= locationBase && loc < locationBase + arraySize);
333 LocProperty& loc_prop = locProps[loc - locationBase];
335 if (inFirstRegion(loc_prop.first)) {
337 assert(loc_prop.second == 1);
340 Location swapped_loc = locArray[firstMark - 1];
341 LocProperty& swapped_loc_prop = locProps[swapped_loc - locationBase];
344 swap(loc_prop, swapped_loc_prop);
351 }
else if (inThirdRegion(loc_prop.first)) {
353 assert(loc_prop.second >= 1);
355 if (loc_prop.second == 1) {
357 Location swapped_loc = locArray[secondMark];
359 locProps[swapped_loc - locationBase];
362 swap(loc_prop, swapped_loc_prop);
371 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
378 ExpectedValueSet::iterator it = expectedValues.find(
val);
380 if (it == expectedValues.end()) {
381 std::stringstream exp_val_ss;
382 for (
auto&
val : expectedValues) {
383 exp_val_ss <<
" " <<
val;
386 warn(
"Expected return values are:\n\t%s\n", exp_val_ss.str());
392 expectedValues.erase(it);
400 int new_idx_1 = prop_2.first;
401 int new_idx_2 = prop_1.first;
404 Location tmp = locArray[prop_1.first];
405 locArray[prop_1.first] = locArray[prop_2.first];
406 locArray[prop_2.first] = tmp;
409 prop_1.first = new_idx_1;
410 prop_2.first = new_idx_2;
416 Value new_value,
Tick cur_tick,
int cu_id)
419 logTable[loc]->update(thread_id, cu_id, episode_id, new_value, cur_tick);
426 return logTable[loc]->getLastStoredValue();