Remove C/C++11 header files that we don't really use
[satcheck.git] / test / userprog.c
1 #include <stdio.h>
2 #include "threads.h"
3 #include "libinterface.h"
4
5 int x;
6 int y;
7 int gr1;
8 int gr2;
9
10 static void a(void *obj)
11 {
12         MCID mr1=MC2_nextOpLoad(MCID_NODEP);
13         int r1 = load_32(&y);
14         MC2_nextOpStore(MCID_NODEP, mr1);
15         store_32(&x, r1);
16
17         MC2_nextOpStore(MCID_NODEP, mr1);
18         store_32(&gr1, r1);
19         printf("r1=%d\n",r1);
20 }
21
22 static void b(void *obj)
23 {
24         MCID mr2=MC2_nextOpLoad(MCID_NODEP);
25         int r2=load_32(&x);
26         MC2_nextOpStore(MCID_NODEP, MCID_NODEP);
27         store_32(&y, 42);
28
29         MC2_nextOpStore(MCID_NODEP, mr2);
30         store_32(&gr2, r2);
31         printf("r2=%d\n",r2);
32 }
33
34 int user_main(int argc, char **argv)
35 {
36         thrd_t t1, t2;
37
38         MC2_nextOpStore(MCID_NODEP, MCID_NODEP);
39         store_32(&x, 0);
40         MC2_nextOpStore(MCID_NODEP, MCID_NODEP);
41         store_32(&y, 0);
42
43         printf("Main thread: creating 2 threads\n");
44         MC2_nextOpThrd_create(MCID_NODEP, MCID_NODEP);
45         thrd_create(&t1, (thrd_start_t)&a, NULL);
46         MC2_nextOpThrd_create(MCID_NODEP, MCID_NODEP);
47         thrd_create(&t2, (thrd_start_t)&b, NULL);
48
49         MC2_nextOpThrd_join(MCID_NODEP);
50         thrd_join(t1);
51         MC2_nextOpThrd_join(MCID_NODEP);
52         thrd_join(t2);
53         printf("Main thread is finished\n");
54         MCID mlgr1=MC2_nextOpLoad(MCID_NODEP);
55         int lgr1=load_32(&gr1);
56
57         MCID mlgr2=MC2_nextOpLoad(MCID_NODEP);
58         int lgr2=load_32(&gr2);
59         printf("lrg1=%d lrg2=%d\n", lgr1, lgr2);
60         MCID br1,br2;
61         if (lgr1==42) {
62                 br1=MC2_branchUsesID(mlgr1, 1, 2, true);
63                 if (lgr2==42) {
64                         br2=MC2_branchUsesID(mlgr2, 1, 2, true);
65                 } else {
66                         br2=MC2_branchUsesID(mlgr2, 0, 2, true);
67                 }
68                 MC2_merge(br2);
69         } else {
70                 br1=MC2_branchUsesID(mlgr1, 0, 2, true);
71         }
72         MC2_merge(br1);
73
74         return 0;
75 }