fix mutex_trylock bug
[c11tester.git] / include / cmodelint.h
index 8530827cfe39b5cf673efa3e047a8f987f7642a1..fc76eb2e2c4fc74cb8933ea94b9ec35f6a7d930a 100644 (file)
 #if __cplusplus
 using std::memory_order;
 extern "C" {
+#else
+typedef int bool;
 #endif
 
+
 uint64_t model_read_action(void * obj, memory_order ord);
 void model_write_action(void * obj, memory_order ord, uint64_t val);
 void model_init_action(void * obj, uint64_t val);
@@ -22,12 +25,23 @@ void model_rmwc_action(void *obj, memory_order ord);
 void model_fence_action(memory_order ord);
 
 uint64_t model_rmwr_action_helper(void *obj, int atomic_index, const char *position);
-  uint64_t model_rmwrcas_action_helper(void *obj, int atomic_index, uint64_t oval, int size, const char *position);
+uint64_t model_rmwrcas_action_helper(void *obj, int atomic_index, uint64_t oval, int size, const char *position);
 void model_rmw_action_helper(void *obj, uint64_t val, int atomic_index, const char *position);
 void model_rmwc_action_helper(void *obj, int atomic_index, const char *position);
 // void model_fence_action_helper(int atomic_index);
 
 /* the following functions are used by llvm pass */
+// cds volatile loads
+uint8_t cds_volatile_load8(void * obj, const char * position);
+uint16_t cds_volatile_load16(void * obj, const char * position);
+uint32_t cds_volatile_load32(void * obj, const char * position);
+uint64_t cds_volatile_load64(void * obj, const char * position);
+
+// cds volatile stores
+void cds_volatile_store8(void * obj, uint8_t val, const char * position);
+void cds_volatile_store16(void * obj, uint16_t val, const char * position);
+void cds_volatile_store32(void * obj, uint32_t val, const char * position);
+void cds_volatile_store64(void * obj, uint64_t val, const char * position);
 
 void cds_atomic_init8(void * obj, uint8_t val, const char * position);
 void cds_atomic_init16(void * obj, uint16_t val, const char * position);
@@ -77,27 +91,30 @@ uint32_t cds_atomic_fetch_xor32(void* addr, uint32_t val, int atomic_index, cons
 uint64_t cds_atomic_fetch_xor64(void* addr, uint64_t val, int atomic_index, const char * position);
 
 // cds atomic compare and exchange (strong)
-uint8_t cds_atomic_compare_exchange8_v1(void* addr, uint8_t expected, uint8_t desire, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-uint16_t cds_atomic_compare_exchange16_v1(void* addr, uint16_t expected, uint16_t desire, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-uint32_t cds_atomic_compare_exchange32_v1(void* addr, uint32_t expected, uint32_t desire, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-uint64_t cds_atomic_compare_exchange64_v1(void* addr, uint64_t expected, uint64_t desire, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-
-bool cds_atomic_compare_exchange8_v2(void* addr, uint8_t* expected, uint8_t desired, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-bool cds_atomic_compare_exchange16_v2(void* addr, uint16_t* expected, uint16_t desired, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-bool cds_atomic_compare_exchange32_v2(void* addr, uint32_t* expected, uint32_t desired, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
-bool cds_atomic_compare_exchange64_v2(void* addr, uint64_t* expected, uint64_t desired, 
-               int atomic_index_succ, int atomic_index_fail, const char *position);
+uint8_t cds_atomic_compare_exchange8_v1(void* addr, uint8_t expected, uint8_t desire,
+                                                                                                                                                               int atomic_index_succ, int atomic_index_fail, const char *position);
+uint16_t cds_atomic_compare_exchange16_v1(void* addr, uint16_t expected, uint16_t desire,
+                                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
+uint32_t cds_atomic_compare_exchange32_v1(void* addr, uint32_t expected, uint32_t desire,
+                                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
+uint64_t cds_atomic_compare_exchange64_v1(void* addr, uint64_t expected, uint64_t desire,
+                                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
+
+bool cds_atomic_compare_exchange8_v2(void* addr, uint8_t* expected, uint8_t desired,
+                                                                                                                                                int atomic_index_succ, int atomic_index_fail, const char *position);
+bool cds_atomic_compare_exchange16_v2(void* addr, uint16_t* expected, uint16_t desired,
+                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
+bool cds_atomic_compare_exchange32_v2(void* addr, uint32_t* expected, uint32_t desired,
+                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
+bool cds_atomic_compare_exchange64_v2(void* addr, uint64_t* expected, uint64_t desired,
+                                                                                                                                                       int atomic_index_succ, int atomic_index_fail, const char *position);
 
 // cds atomic thread fence
 void cds_atomic_thread_fence(int atomic_index, const char * position);
 
+void cds_func_entry(const char * funcName);
+void cds_func_exit(const char * funcName);
+
 #if __cplusplus
 }
 #endif