diff --git a/utils.h b/utils.h index 03fefe9..581883b 100644 --- a/utils.h +++ b/utils.h @@ -255,15 +255,12 @@ namespace sequence { // this should work with pointer types, or pairs of integers template inline bool CAS(ET *ptr, ET oldv, ET newv) { - if (sizeof(ET) == 8) { - long* o = (long*) &oldv; - long* n = (long*) &newv; - return __sync_bool_compare_and_swap((long*)ptr, *o, *n); - } else if (sizeof(ET) == 4) { - int* o = (int*) &oldv; - int* n = (int*) &newv; - return __sync_bool_compare_and_swap((int*)ptr, *o, *n); - } else { + if (sizeof(ET) == 4) { + return __sync_bool_compare_and_swap((int*)ptr, *((int*)&oldv), *((int*)&newv)); + } else if (sizeof(ET) == 8) { + return __sync_bool_compare_and_swap((long*)ptr, *((long*)&oldv), *((long*)&newv)); + } + else { std::cout << "CAS bad length" << std::endl; abort(); }