aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2010-10-11 22:40:22 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2010-10-11 22:40:22 +0000
commit5dbae3676ba8c13f49caff3297606fc6f604805e (patch)
tree44b8f25b1a7be52e7999fe21e4a43f5d5a3a59e3 /gcc/config/pa
parenta0a2a39912679f761df40e4b88fed9326398e63b (diff)
downloadgcc-5dbae3676ba8c13f49caff3297606fc6f604805e.zip
gcc-5dbae3676ba8c13f49caff3297606fc6f604805e.tar.gz
gcc-5dbae3676ba8c13f49caff3297606fc6f604805e.tar.bz2
linux-atomic.c (__sync_val_compare_and_swap_4): Return actual_oldval.
* config/pa/linux-atomic.c (__sync_val_compare_and_swap_4): Return actual_oldval. Use __builtin_expect. (SUBWORD_VAL_CAS): Likewise. From-SVN: r165339
Diffstat (limited to 'gcc/config/pa')
-rw-r--r--gcc/config/pa/linux-atomic.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/config/pa/linux-atomic.c b/gcc/config/pa/linux-atomic.c
index 31593c6..2ae2426 100644
--- a/gcc/config/pa/linux-atomic.c
+++ b/gcc/config/pa/linux-atomic.c
@@ -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; \
} \
}