inline void push(int d) { int oldTop, newTop,ret; __VERIFIER_atomic_index_malloc(&newTop); if(newTop == 0) exit(-1); INDIR(newTop,0) = d; while (1) { oldTop = top; INDIR(newTop,1) = oldTop; __VERIFIER_atomic_CAS(&top,oldTop,newTop,&ret); if(ret) return; } }
void push(int d) { int oldTop, newTop; __VERIFIER_atomic_index_malloc(&newTop); if(newTop == 0) exit(-1); INDIR(newTop,0) = d; while (1) { oldTop = top; INDIR(newTop,1) = oldTop; if(__sync_bool_compare_and_swap(&top,oldTop,newTop)) return; } }
inline void push(int d) { int oldTop = -1, newTop = -1; __VERIFIER_atomic_index_malloc(&newTop); if(newTop == 0) exit(-1); else{ INDIR(newTop,0) = d; __VERIFIER_atomic_acquire(); oldTop = top; INDIR(newTop,1) = oldTop; top = newTop; __VERIFIER_atomic_release(); } }