diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2010-10-11 22:40:22 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2010-10-11 22:40:22 +0000 |
commit | 5dbae3676ba8c13f49caff3297606fc6f604805e (patch) | |
tree | 44b8f25b1a7be52e7999fe21e4a43f5d5a3a59e3 /gcc/config | |
parent | a0a2a39912679f761df40e4b88fed9326398e63b (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/config/pa/linux-atomic.c | 15 |
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; \ } \ } |