Fix atomicops internal implementation using GCC intrinsics.
BUG=116317
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10879019

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152833 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/atomicops_internals_gcc.h b/base/atomicops_internals_gcc.h
index fe7a862..ed1b2d7 100644
--- a/base/atomicops_internals_gcc.h
+++ b/base/atomicops_internals_gcc.h
@@ -17,9 +17,11 @@
                                          Atomic32 new_value) {
   Atomic32 prev_value;
   do {
-    prev_value = __sync_val_compare_and_swap(ptr, old_value, new_value);
-  } while (prev_value != old_value);
-  return old_value;
+    if (__sync_bool_compare_and_swap(ptr, old_value, new_value))
+      return old_value;
+    prev_value = *ptr;
+  } while (prev_value == old_value);
+  return prev_value;
 }
 
 inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,