5 #include <cdsannotate.h>
6 #include <specannotation.h>
7 #include <model_memory.h>
16 atomic_size_t top, bottom;
17 atomic_uintptr_t array; /* Atomic(Array *) */
20 #define EMPTY 0xffffffff
21 #define ABORT 0xfffffffe
29 typedef struct tag_elem {
38 __deque= new_spec_list();
39 tag = new_id_tag(); // Beginning of available id
41 tag_elem_t* new_tag_elem(call_id_t id, int data) {
42 tag_elem_t *e = (tag_elem_t*) CMODEL_MALLOC(sizeof(tag_elem_t));
48 call_id_t get_id(void *wrapper) {
49 return ((tag_elem_t*) wrapper)->id;
52 int get_data(void *wrapper) {
53 return ((tag_elem_t*) wrapper)->data;
63 void resize(Deque *q);
68 @Commit_point_set: Take_Point1 | Take_Point2 | Take_Point3 | Take_Point4
69 @ID: size(__deque) == 0 ? DEFAULT_CALL_ID : get_id(back(__deque))
72 if (size(__deque) > 0) {
73 _Old_Val = get_data(back(__deque));
85 @Commit_point_set: Push_Point
86 @ID: get_and_inc(tag);
88 tag_elem_t *elem = new_tag_elem(__ID__, x);
89 push_back(__deque, elem);
92 void push(Deque *q, int x);
97 @Commit_point_set: Steal_Point1 | Steal_Point2 | Steal_Point3
98 @ID: size(__deque) == 0 ? DEFAULT_CALL_ID : get_id(front(__deque))
100 int _Old_Val = EMPTY;
101 if (size(__deque) > 0) {
102 _Old_Val = get_data(front(__deque));