X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=cmodelint.cc;h=76b4c90fa51b139cb8e70f891d8cc13692a34515;hp=4754a826800ab3cee4d6d32baf152905fb3d2d70;hb=1857316e6637ac144952a274ff020629abe83807;hpb=247e28f81f258c3c380be00a89430186f8ac11ed diff --git a/cmodelint.cc b/cmodelint.cc index 4754a826..76b4c90f 100644 --- a/cmodelint.cc +++ b/cmodelint.cc @@ -1,28 +1,42 @@ #include "model.h" #include "cmodelint.h" +#include "threads-model.h" +/** Performs a read action.*/ uint64_t model_read_action(void * obj, memory_order ord) { - model->switch_to_master(new ModelAction(ATOMIC_READ, ord, obj)); - return thread_current()->get_return_value(); + return model->switch_to_master(new ModelAction(ATOMIC_READ, ord, obj)); } +/** Performs a write action.*/ void model_write_action(void * obj, memory_order ord, uint64_t val) { model->switch_to_master(new ModelAction(ATOMIC_WRITE, ord, obj, val)); } +/** Performs an init action. */ void model_init_action(void * obj, uint64_t val) { model->switch_to_master(new ModelAction(ATOMIC_INIT, memory_order_relaxed, obj, val)); } +/** + * Performs the read part of a RMW action. The next action must either be the + * write part of the RMW action or an explicit close out of the RMW action w/o + * a write. + */ uint64_t model_rmwr_action(void *obj, memory_order ord) { - model->switch_to_master(new ModelAction(ATOMIC_RMWR, ord, obj)); - return thread_current()->get_return_value(); + return model->switch_to_master(new ModelAction(ATOMIC_RMWR, ord, obj)); } +/** Performs the write part of a RMW action. */ void model_rmw_action(void *obj, memory_order ord, uint64_t val) { model->switch_to_master(new ModelAction(ATOMIC_RMW, ord, obj, val)); } +/** Closes out a RMW action without doing a write. */ void model_rmwc_action(void *obj, memory_order ord) { model->switch_to_master(new ModelAction(ATOMIC_RMWC, ord, obj)); } + +/** Issues a fence operation. */ +void model_fence_action(memory_order ord) { + model->switch_to_master(new ModelAction(ATOMIC_FENCE, ord, NULL)); +}