48 : numAtomicLocs(n_atomic_locs),
49 numLocsPerAtomic(n_normal_locs_per_atomic)
90 assert(loc < numAtomicLocs + numNormalLocs && loc >= 0);
99 return ret_atomic_loc;
142 assert(loc_begin <= loc_end);
174 assert(firstMark >= 0);
175 assert(firstMark <= secondMark);
176 assert(secondMark <= arraySize);
178 assert(loadStoreMap.empty());
184 expectedValues.insert(requestCount - 1);
185 expectedValues.insert(requestCount - 2);
191 assert(firstMark >= 0);
192 assert(firstMark <= secondMark);
193 assert(secondMark <= arraySize);
195 if (firstMark == arraySize) {
201 int range_size = arraySize - firstMark;
205 LdStMap::iterator it = loadStoreMap.find(ret_loc);
207 if (it == loadStoreMap.end()) {
214 (it->second).first =
true;
224 assert(firstMark >= 0);
225 assert(firstMark <= secondMark);
226 assert(secondMark <= arraySize);
228 if (firstMark == secondMark) {
233 int range_size = secondMark - firstMark;
237 LdStMap::iterator it = loadStoreMap.find(ret_loc);
239 if (it == loadStoreMap.end()) {
246 (it->second).second =
true;
263 assert(firstMark >= 0);
264 assert(firstMark <= secondMark);
265 assert(secondMark <= arraySize);
267 for (
auto& it : loadStoreMap) {
271 assert(loc >= locationBase && loc < locationBase + arraySize);
272 LocProperty& loc_prop = locProps[loc - locationBase];
274 if (
p.first && !
p.second) {
277 assert(inSecondRegion(loc_prop.first) ||
278 inThirdRegion(loc_prop.first));
280 if (inSecondRegion(loc_prop.first)) {
282 assert(loc_prop.second == 0);
285 Location swapped_loc = locArray[secondMark - 1];
287 locProps[swapped_loc - locationBase];
290 swap(loc_prop, swapped_loc_prop);
298 }
else if (
p.second) {
301 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
304 Location swapped_loc = locArray[firstMark];
306 locProps[swapped_loc - locationBase];
309 swap(loc_prop, swapped_loc_prop);
317 panic(
"Location in loadStoreMap but wasn't picked in any"
323 loadStoreMap.clear();
329 assert(loc >= locationBase && loc < locationBase + arraySize);
331 LocProperty& loc_prop = locProps[loc - locationBase];
333 if (inFirstRegion(loc_prop.first)) {
335 assert(loc_prop.second == 1);
338 Location swapped_loc = locArray[firstMark - 1];
339 LocProperty& swapped_loc_prop = locProps[swapped_loc - locationBase];
342 swap(loc_prop, swapped_loc_prop);
349 }
else if (inThirdRegion(loc_prop.first)) {
351 assert(loc_prop.second >= 1);
353 if (loc_prop.second == 1) {
355 Location swapped_loc = locArray[secondMark];
357 locProps[swapped_loc - locationBase];
360 swap(loc_prop, swapped_loc_prop);
369 assert(inSecondRegion(loc_prop.first) && loc_prop.second == 0);
376 ExpectedValueSet::iterator it = expectedValues.find(
val);
378 if (it == expectedValues.end()) {
379 std::stringstream exp_val_ss;
380 for (
auto&
val : expectedValues) {
381 exp_val_ss <<
" " <<
val;
384 warn(
"Expected return values are:\n\t%s\n", exp_val_ss.str());
390 expectedValues.erase(it);
398 int new_idx_1 = prop_2.first;
399 int new_idx_2 = prop_1.first;
402 Location tmp = locArray[prop_1.first];
403 locArray[prop_1.first] = locArray[prop_2.first];
404 locArray[prop_2.first] = tmp;
407 prop_1.first = new_idx_1;
408 prop_2.first = new_idx_2;
414 Value new_value,
Tick cur_tick,
int cu_id)
417 logTable[loc]->update(thread_id, cu_id, episode_id, new_value, cur_tick);
424 return logTable[loc]->getLastStoredValue();