X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=libatomic.cc;h=a7b1fd67eb8b6cacba28ea1ab1ce9f3c969b4d7e;hb=b6db821be4ff9af669ff596a37d144006f6bbdaf;hp=059d2ae8d6aab1ac456a212b1b455d03214c33b9;hpb=df437a93a0599b75a4df8967d2943a01ca931a9a;p=model-checker.git diff --git a/libatomic.cc b/libatomic.cc index 059d2ae..a7b1fd6 100644 --- a/libatomic.cc +++ b/libatomic.cc @@ -1,14 +1,22 @@ #include "libatomic.h" #include "model.h" -#include "threads_internal.h" +#include "common.h" void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order) { - thread_current()->switch_to_master(new ModelAction(ATOMIC_WRITE, order, obj, value)); + DBG(); + model->switch_to_master(new ModelAction(ATOMIC_WRITE, order, obj, value)); } int atomic_load_explicit(struct atomic_object *obj, memory_order order) { - thread_current()->switch_to_master(new ModelAction(ATOMIC_READ, order, obj, VALUE_NONE)); - return 0; + DBG(); + model->switch_to_master(new ModelAction(ATOMIC_READ, order, obj)); + return (int) thread_current()->get_return_value(); +} + +void atomic_init(struct atomic_object *obj, int value) +{ + DBG(); + model->switch_to_master(new ModelAction(ATOMIC_INIT, memory_order_relaxed, obj, value)); }