* config/pa/linux-atomic.c (__sync_val_compare_and_swap_4): Return
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Oct 2010 22:40:22 +0000 (22:40 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Oct 2010 22:40:22 +0000 (22:40 +0000)
actual_oldval.  Use __builtin_expect.
(SUBWORD_VAL_CAS): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165339 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/pa/linux-atomic.c

index fa11af7..233f62b 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * config/pa/linux-atomic.c (__sync_val_compare_and_swap_4): Return
+       actual_oldval.  Use __builtin_expect.
+       (SUBWORD_VAL_CAS): Likewise.
+
 2010-10-11  Nathan Froyd  <froydnj@codesourcery.com>
 
        * recog.c (nonmemory_operand): Call immediate_operand for
index 31593c6..2ae2426 100644 (file)
@@ -191,13 +191,13 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
     {
       actual_oldval = *ptr;
 
-      if (oldval != actual_oldval)
+      if (__builtin_expect (oldval != actual_oldval, 0))
        return actual_oldval;
 
       fail = __kernel_cmpxchg (actual_oldval, newval, ptr);
   
-      if (!fail)
-       return oldval;
+      if (__builtin_expect (!fail, 1))
+       return actual_oldval;
     }
 }
 
@@ -216,8 +216,9 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
       {                                                                        \
        actual_oldval = *wordptr;                                       \
                                                                        \
-       if (((actual_oldval & mask) >> shift) != (unsigned int) oldval) \
-          return (actual_oldval & mask) >> shift;                      \
+       if (__builtin_expect (((actual_oldval & mask) >> shift)         \
+                             != (unsigned int) oldval, 0))             \
+         return (actual_oldval & mask) >> shift;                       \
                                                                        \
        actual_newval = (actual_oldval & ~mask)                         \
                        | (((unsigned int) newval << shift) & mask);    \
@@ -225,8 +226,8 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
        fail = __kernel_cmpxchg (actual_oldval, actual_newval,          \
                                 wordptr);                              \
                                                                        \
-       if (!fail)                                                      \
-         return oldval;                                                \
+       if (__builtin_expect (!fail, 1))                                \
+         return (actual_oldval & mask) >> shift;                       \
       }                                                                        \
   }