4 #include "threads-model.h"
6 /** Performs a read action.*/
7 uint64_t model_read_action(void * obj, memory_order ord) {
8 return model->switch_to_master(new ModelAction(ATOMIC_READ, ord, obj));
11 /** Performs a write action.*/
12 void model_write_action(void * obj, memory_order ord, uint64_t val) {
13 model->switch_to_master(new ModelAction(ATOMIC_WRITE, ord, obj, val));
16 /** Performs an init action. */
17 void model_init_action(void * obj, uint64_t val) {
18 model->switch_to_master(new ModelAction(ATOMIC_INIT, memory_order_relaxed, obj, val));
22 * Performs the read part of a RMW action. The next action must either be the
23 * write part of the RMW action or an explicit close out of the RMW action w/o
26 uint64_t model_rmwr_action(void *obj, memory_order ord) {
27 return model->switch_to_master(new ModelAction(ATOMIC_RMWR, ord, obj));
30 /** Performs the write part of a RMW action. */
31 void model_rmw_action(void *obj, memory_order ord, uint64_t val) {
32 model->switch_to_master(new ModelAction(ATOMIC_RMW, ord, obj, val));
35 /** Closes out a RMW action without doing a write. */
36 void model_rmwc_action(void *obj, memory_order ord) {
37 model->switch_to_master(new ModelAction(ATOMIC_RMWC, ord, obj));
40 /** Issues a fence operation. */
41 void model_fence_action(memory_order ord) {
42 model->switch_to_master(new ModelAction(ATOMIC_FENCE, ord, FENCE_LOCATION));