6 #include <cdsannotate.h>
7 #include <specannotation.h>
8 #include <model_memory.h>
17 atomic_size_t top, bottom;
18 atomic_uintptr_t array; /* Atomic(Array *) */
21 #define EMPTY 0xffffffff
22 #define ABORT 0xfffffffe
24 inline bool fail(int ret);
33 __deque = createIntegerList();
36 destroyIntegerList(__deque);
40 return res != EMPTY && res != ABORT;
44 @Commutativity: Push <-> Steal: true
45 @Commutativity: Take <-> Steal: true
46 @Commutativity: Steal <-> Steal: fail(_Method1.__RET__) || fail(_Method2.__RET__)
53 void resize(Deque *q);
58 @Commit_point_set: TakeReadBottom | TakeReadBuffer | TakeReadTop
59 @ID: succ(__RET__) ? __RET__ : DEFAULT_CALL_ID
65 //model_print("take: elem=%d, __RET__=%d\n", elem, __RET__);
67 @Post_check: succ(__RET__) ? __RET__ == elem : true
75 @Commit_point_set: PushUpdateBuffer
78 push_back(__deque, x);
79 //model_print("push: elem=%d\n", x);
82 void push(Deque *q, int x);
87 @Commit_point_set: StealReadTop1 | StealReadTop2 | StealReadBuffer
88 @ID: succ(__RET__) ? __RET__ : DEFAULT_CALL_ID
92 elem = front(__deque);
94 //model_print("steal: elem=%d, __RET__=%d\n", elem, __RET__);
96 @Post_check: succ(__RET__) ? __RET__ == elem : true