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
32 __deque = createIntegerList();
35 destroyIntegerList(__deque);
39 return res != EMPTY && res != ABORT;
43 @Commutativity: Push <-> Steal: true
44 @Commutativity: Take <-> Steal: true
45 @Commutativity: Steal <-> Steal: _Method1.__RET__ == ABORT || _Method2.__RET__ == ABORT
52 void resize(Deque *q);
57 @Commit_point_set: TakeReadBottom | TakeReadBuffer | TakeReadTop
58 @ID: succ(__RET__) ? __RET__ : DEFAULT_CALL_ID
64 //model_print("take: elem=%d, __RET__=%d\n", elem, __RET__);
66 @Post_check: succ(__RET__) ? __RET__ == elem : true
74 @Commit_point_set: PushUpdateBuffer
77 push_back(__deque, x);
78 //model_print("push: elem=%d\n", x);
81 void push(Deque *q, int x);
86 @Commit_point_set: StealReadTop1 | StealReadTop2 | StealReadBuffer
87 @ID: succ(__RET__) ? __RET__ : DEFAULT_CALL_ID
91 elem = front(__deque);
93 //model_print("steal: elem=%d, __RET__=%d\n", elem, __RET__);
95 @Post_check: succ(__RET__) ? __RET__ == elem : true