model: bugfix - iterator naming conflict
[model-checker.git] / librace.cc
1 #define __STDC_FORMAT_MACROS
2 #include <inttypes.h>
3
4 #include "librace.h"
5 #include "common.h"
6 #include "datarace.h"
7 #include "model.h"
8
9 void store_8(void *addr, uint8_t val)
10 {
11         DEBUG("addr = %p, val = %" PRIu8 "\n", addr, val);
12         thread_id_t tid=thread_current()->get_id();
13         ClockVector * cv=model->get_cv(tid);
14         raceCheckWrite(tid, addr, cv);
15         (*(uint8_t *)addr) = val;
16 }
17
18 void store_16(void *addr, uint16_t val)
19 {
20         DEBUG("addr = %p, val = %" PRIu16 "\n", addr, val);
21         thread_id_t tid=thread_current()->get_id();
22         ClockVector * cv=model->get_cv(tid);
23         raceCheckWrite(tid, addr, cv);
24         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+1), cv);
25         (*(uint16_t *)addr) = val;
26 }
27
28 void store_32(void *addr, uint32_t val)
29 {
30         DEBUG("addr = %p, val = %" PRIu32 "\n", addr, val);
31         thread_id_t tid=thread_current()->get_id();
32         ClockVector * cv=model->get_cv(tid);
33         raceCheckWrite(tid, addr, cv);
34         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+1), cv);
35         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+2), cv);
36         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+3), cv);
37         (*(uint32_t *)addr) = val;
38 }
39
40 void store_64(void *addr, uint64_t val)
41 {
42         DEBUG("addr = %p, val = %" PRIu64 "\n", addr, val);
43         thread_id_t tid=thread_current()->get_id();
44         ClockVector * cv=model->get_cv(tid);
45         raceCheckWrite(tid, addr, cv);
46         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+1), cv);
47         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+2), cv);
48         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+3), cv);
49         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+4), cv);
50         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+5), cv);
51         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+6), cv);
52         raceCheckWrite(tid, (void *)(((uintptr_t)addr)+7), cv);
53         (*(uint64_t *)addr) = val;
54 }
55
56 uint8_t load_8(void *addr)
57 {
58         DEBUG("addr = %p\n", addr);
59         thread_id_t tid=thread_current()->get_id();
60         ClockVector * cv=model->get_cv(tid);
61         raceCheckRead(tid, addr, cv);
62         return *((uint8_t *)addr);
63 }
64
65 uint16_t load_16(void *addr)
66 {
67         DEBUG("addr = %p\n", addr);
68         thread_id_t tid=thread_current()->get_id();
69         ClockVector * cv=model->get_cv(tid);
70         raceCheckRead(tid, addr, cv);
71         raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
72         return *((uint16_t *)addr);
73 }
74
75 uint32_t load_32(void *addr)
76 {
77         DEBUG("addr = %p\n", addr);
78         thread_id_t tid=thread_current()->get_id();
79         ClockVector * cv=model->get_cv(tid);
80         raceCheckRead(tid, addr, cv);
81         raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
82         raceCheckRead(tid, (void *)(((uintptr_t)addr)+2), cv);
83         raceCheckRead(tid, (void *)(((uintptr_t)addr)+3), cv);
84         return *((uint32_t *)addr);
85 }
86
87 uint64_t load_64(void *addr)
88 {
89         DEBUG("addr = %p\n", addr);
90         thread_id_t tid=thread_current()->get_id();
91         ClockVector * cv=model->get_cv(tid);
92         raceCheckRead(tid, addr, cv);
93         raceCheckRead(tid, (void *)(((uintptr_t)addr)+1), cv);
94         raceCheckRead(tid, (void *)(((uintptr_t)addr)+2), cv);
95         raceCheckRead(tid, (void *)(((uintptr_t)addr)+3), cv);
96         raceCheckRead(tid, (void *)(((uintptr_t)addr)+4), cv);
97         raceCheckRead(tid, (void *)(((uintptr_t)addr)+5), cv);
98         raceCheckRead(tid, (void *)(((uintptr_t)addr)+6), cv);
99         raceCheckRead(tid, (void *)(((uintptr_t)addr)+7), cv);
100         return *((uint64_t *)addr);
101 }