finish promise support
[model-checker.git] / cmodelint.cc
1 #include "model.h"
2 #include "cmodelint.h"
3
4 /** Performs a read action.*/
5 uint64_t model_read_action(void * obj, memory_order ord) {
6         model->switch_to_master(new ModelAction(ATOMIC_READ, ord, obj));
7         return thread_current()->get_return_value();
8 }
9
10 /** Performs a write action.*/
11 void model_write_action(void * obj, memory_order ord, uint64_t val) {
12         model->switch_to_master(new ModelAction(ATOMIC_WRITE, ord, obj, val));
13 }
14
15 /** Performs an init action. */
16 void model_init_action(void * obj, uint64_t val) {
17         model->switch_to_master(new ModelAction(ATOMIC_INIT, memory_order_relaxed, obj, val));
18 }
19
20 /**
21  * Performs the read part of a RMW action. The next action must either be the
22  * write part of the RMW action or an explicit close out of the RMW action w/o
23  * a write.
24  */
25 uint64_t model_rmwr_action(void *obj, memory_order ord) {
26         model->switch_to_master(new ModelAction(ATOMIC_RMWR, ord, obj));
27         return thread_current()->get_return_value();
28 }
29
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));
33 }
34
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));
38 }