d5a04867a6d83d16b0108eddf9e4d31f29f68410
[c11tester.git] / include / cmodelint.h
1 /** @file cmodelint.h
2  *  @brief C interface to the model checker.
3  */
4
5 #ifndef CMODELINT_H
6 #define CMODELINT_H
7 #include <inttypes.h>
8 #include "memoryorder.h"
9
10 #if __cplusplus
11 using std::memory_order;
12 extern "C" {
13 #endif
14
15 uint64_t model_read_action(void * obj, memory_order ord);
16 void model_write_action(void * obj, memory_order ord, uint64_t val);
17 void model_init_action(void * obj, uint64_t val);
18 uint64_t model_rmwr_action(void *obj, memory_order ord);
19 uint64_t model_rmwrcas_action(void *obj, memory_order ord, uint64_t oval, int size);
20 void model_rmw_action(void *obj, memory_order ord, uint64_t val);
21 void model_rmwc_action(void *obj, memory_order ord);
22 void model_fence_action(memory_order ord);
23
24 // void model_init_action_helper(void * obj, uint64_t val);
25 uint64_t model_rmwr_action_helper(void *obj, int atomic_index);
26 void model_rmw_action_helper(void *obj, int atomic_index, uint64_t val);
27 void model_rmwc_action_helper(void *obj, int atomic_index);
28 void model_fence_action_helper(int atomic_index);
29
30 // WL
31 uint8_t  cds_atomic_load8(void * obj, int atomic_index);
32 uint16_t cds_atomic_load16(void * obj, int atomic_index);
33 uint32_t cds_atomic_load32(void * obj, int atomic_index);
34 uint64_t cds_atomic_load64(void * obj, int atomic_index);
35
36 void cds_atomic_store8(void * obj, int atomic_index, uint8_t val);
37 void cds_atomic_store16(void * obj, int atomic_index, uint16_t val);
38 void cds_atomic_store32(void * obj, int atomic_index, uint32_t val);
39 void cds_atomic_store64(void * obj, int atomic_index, uint64_t val);
40
41
42 // cds atomic exchange
43 uint8_t cds_atomic_exchange8(void* addr, int atomic_index, uint8_t val);
44 uint16_t cds_atomic_exchange16(void* addr, int atomic_index, uint16_t val);
45 uint32_t cds_atomic_exchange32(void* addr, int atomic_index, uint32_t val);
46 uint64_t cds_atomic_exchange64(void* addr, int atomic_index, uint64_t val);
47 // cds atomic fetch add
48 uint8_t  cds_atomic_fetch_add8(void* addr, int atomic_index, uint8_t val);
49 uint16_t cds_atomic_fetch_add16(void* addr, int atomic_index, uint16_t val);
50 uint32_t cds_atomic_fetch_add32(void* addr, int atomic_index, uint32_t val);
51 uint64_t cds_atomic_fetch_add64(void* addr, int atomic_index, uint64_t val);
52 // cds atomic fetch sub
53 uint8_t  cds_atomic_fetch_sub8(void* addr, int atomic_index, uint8_t val);
54 uint16_t cds_atomic_fetch_sub16(void* addr, int atomic_index, uint16_t val);
55 uint32_t cds_atomic_fetch_sub32(void* addr, int atomic_index, uint32_t val);
56 uint64_t cds_atomic_fetch_sub64(void* addr, int atomic_index, uint64_t val);
57 // cds atomic fetch and
58 uint8_t cds_atomic_fetch_and8(void* addr, int atomic_index, uint8_t val);
59 uint16_t cds_atomic_fetch_and16(void* addr, int atomic_index, uint16_t val);
60 uint32_t cds_atomic_fetch_and32(void* addr, int atomic_index, uint32_t val);
61 uint64_t cds_atomic_fetch_and64(void* addr, int atomic_index, uint64_t val);
62 // cds atomic fetch or
63 uint8_t cds_atomic_fetch_or8(void* addr, int atomic_index, uint8_t val);
64 uint16_t cds_atomic_fetch_or16(void* addr, int atomic_index, uint16_t val);
65 uint32_t cds_atomic_fetch_or32(void* addr, int atomic_index, uint32_t val);
66 uint64_t cds_atomic_fetch_or64(void* addr, int atomic_index, uint64_t val);
67 // cds atomic fetch xor
68 uint8_t cds_atomic_fetch_xor8(void* addr, int atomic_index, uint8_t val);
69 uint16_t cds_atomic_fetch_xor16(void* addr, int atomic_index, uint16_t val);
70 uint32_t cds_atomic_fetch_xor32(void* addr, int atomic_index, uint32_t val);
71 uint64_t cds_atomic_fetch_xor64(void* addr, int atomic_index, uint64_t val);
72
73 // cds atomic compare and exchange (strong)
74
75 uint8_t cds_atomic_compare_exchange8(void* addr, uint8_t expected, 
76                   uint8_t desire, int atomic_index_succ, int atomic_index_fail );
77 uint16_t cds_atomic_compare_exchange16(void* addr, uint16_t expected,
78                   uint16_t desire, int atomic_index_succ, int atomic_index_fail );
79 uint32_t cds_atomic_compare_exchange32(void* addr, uint32_t expected, 
80                   uint32_t desire, int atomic_index_succ, int atomic_index_fail );
81 uint64_t cds_atomic_compare_exchange64(void* addr, uint64_t expected, 
82                   uint64_t desire, int atomic_index_succ, int atomic_index_fail );
83
84 // cds atomic thread fence
85 void cds_atomic_thread_fence(int atomic_index);
86
87 #if __cplusplus
88 }
89 #endif
90
91 #endif