47 : numAtomicLocs(n_atomic_locs),
48 numLocsPerAtomic(n_normal_locs_per_atomic)
89 assert(loc < numAtomicLocs + numNormalLocs && loc >= 0);
98 return ret_atomic_loc;
141 assert(loc_begin <= loc_end);
173 assert(firstMark >= 0);
174 assert(firstMark <= secondMark);
175 assert(secondMark <= arraySize);
177 assert(loadStoreMap.empty());
183 expectedValues.insert(requestCount - 1);
184 expectedValues.insert(requestCount - 2);
190 assert(firstMark >= 0);
191 assert(firstMark <= secondMark);
192 assert(secondMark <= arraySize);
194 if (firstMark == arraySize) {
200 int range_size = arraySize - firstMark;
204 LdStMap::iterator it = loadStoreMap.find(ret_loc);
206 if (it == loadStoreMap.end()) {
213 (it->second).first =
true;
223 assert(firstMark >= 0);
224 assert(firstMark <= secondMark);
225 assert(secondMark <= arraySize);
227 if (firstMark == secondMark) {
232 int range_size = secondMark - firstMark;
236 LdStMap::iterator it = loadStoreMap.find(ret_loc);
238 if (it == loadStoreMap.end()) {
245 (it->second).second =
true;
262 assert(firstMark >= 0);
263 assert(firstMark <= secondMark);
264 assert(secondMark <= arraySize);
266 for (
auto& it : loadStoreMap) {
270 assert(loc >= locationBase && loc < locationBase + arraySize);
271 LocProperty& loc_prop = locProps[loc - locationBase];
273 if (
p.first && !
p.second) {
276 assert(inSecondRegion(loc_prop.first) ||
277 inThirdRegion(loc_prop.first));
279 if (inSecondRegion(loc_prop.first)) {
281 assert(loc_prop.second == 0);
284 Location swapped_loc = locArray[secondMark - 1];
286 locProps[swapped_loc - locationBase];
289 swap(loc_prop, swapped_loc_prop);
297 }
else if (
p.second) {
300 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
303 Location swapped_loc = locArray[firstMark];
305 locProps[swapped_loc - locationBase];
308 swap(loc_prop, swapped_loc_prop);
316 panic(
"Location in loadStoreMap but wasn't picked in any"
322 loadStoreMap.clear();
328 assert(loc >= locationBase && loc < locationBase + arraySize);
330 LocProperty& loc_prop = locProps[loc - locationBase];
332 if (inFirstRegion(loc_prop.first)) {
334 assert(loc_prop.second == 1);
337 Location swapped_loc = locArray[firstMark - 1];
338 LocProperty& swapped_loc_prop = locProps[swapped_loc - locationBase];
341 swap(loc_prop, swapped_loc_prop);
348 }
else if (inThirdRegion(loc_prop.first)) {
350 assert(loc_prop.second >= 1);
352 if (loc_prop.second == 1) {
354 Location swapped_loc = locArray[secondMark];
356 locProps[swapped_loc - locationBase];
359 swap(loc_prop, swapped_loc_prop);
368 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
375 ExpectedValueSet::iterator it = expectedValues.find(
val);
377 if (it == expectedValues.end()) {
378 std::stringstream exp_val_ss;
379 for (
auto&
val : expectedValues) {
380 exp_val_ss <<
" " <<
val;
383 warn(
"Expected return values are:\n\t%s\n", exp_val_ss.str());
389 expectedValues.erase(it);
397 int new_idx_1 = prop_2.first;
398 int new_idx_2 = prop_1.first;
401 Location tmp = locArray[prop_1.first];
402 locArray[prop_1.first] = locArray[prop_2.first];
403 locArray[prop_2.first] = tmp;
406 prop_1.first = new_idx_1;
407 prop_2.first = new_idx_2;
413 Value new_value,
Tick cur_tick,
int cu_id)
416 logTable[loc]->update(thread_id, cu_id, episode_id, new_value, cur_tick);
423 return logTable[loc]->getLastStoredValue();