void cds_volatile_store ## size (void * obj, uint ## size ## _t val, const char * position) { \
ensureModel(); \
model->switch_to_master(new ModelAction(ATOMIC_WRITE, position, memory_order_relaxed, obj, (uint64_t) val)); \
+ *((volatile uint ## size ## _t *)obj) = val; \
}
VOLATILESTORE(8)
void cds_atomic_init ## size (void * obj, uint ## size ## _t val, const char * position) { \
ensureModel(); \
model->switch_to_master(new ModelAction(ATOMIC_INIT, position, memory_order_relaxed, obj, (uint64_t) val)); \
- *((uint ## size ## _t *)obj) = val; \
+ *((volatile uint ## size ## _t *)obj) = val; \
thread_id_t tid = thread_current()->get_id(); \
for(int i=0;i < size / 8;i++) { \
recordWrite(tid, (void *)(((char *)obj)+i)); \
void cds_atomic_store ## size(void * obj, uint ## size ## _t val, int atomic_index, const char * position) { \
ensureModel(); \
model->switch_to_master(new ModelAction(ATOMIC_WRITE, position, orders[atomic_index], obj, (uint64_t) val)); \
- *((uint ## size ## _t *)obj) = val; \
+ *((volatile uint ## size ## _t *)obj) = val; \
thread_id_t tid = thread_current()->get_id(); \
for(int i=0;i < size / 8;i++) { \
recordWrite(tid, (void *)(((char *)obj)+i)); \
uint ## size ## _t _val = val; \
_copy __op__ _val; \
model_rmw_action_helper(addr, (uint64_t) _copy, atomic_index, position); \
- *((uint ## size ## _t *)addr) = _copy; \
+ *((volatile uint ## size ## _t *)addr) = _copy; \
thread_id_t tid = thread_current()->get_id(); \
for(int i=0;i < size / 8;i++) { \
recordWrite(tid, (void *)(((char *)addr)+i)); \
uint ## size ## _t _old = model_rmwrcas_action_helper(addr, atomic_index, _expected, sizeof(_expected), position); \
if (_old == _expected) { \
model_rmw_action_helper(addr, (uint64_t) _desired, atomic_index, position); \
- *((uint ## size ## _t *)addr) = desired; \
+ *((volatile uint ## size ## _t *)addr) = desired; \
thread_id_t tid = thread_current()->get_id(); \
for(int i=0;i < size / 8;i++) { \
recordWrite(tid, (void *)(((char *)addr)+i)); \
extern int model_out;
#define model_print(fmt, ...) do { \
- char mprintbuf[256]; \
- int printbuflen=snprintf_(mprintbuf, 256, fmt, ## __VA_ARGS__); \
- int lenleft = printbuflen < 256 ? printbuflen : 256; \
+ char mprintbuf[2048]; \
+ int printbuflen=snprintf_(mprintbuf, 2048, fmt, ## __VA_ARGS__); \
+ int lenleft = printbuflen < 2048 ? printbuflen : 2048; \
int totalwritten = 0; \
while(lenleft) { \
int byteswritten=write(model_out, &mprintbuf[totalwritten], lenleft); \