m68k: fix 64-bit arithmetic in atomic operations (bug 18128)

This commit is contained in:
Andreas Schwab 2015-03-13 18:21:55 +01:00
parent 2ecccaede9
commit a3905fd9de
3 changed files with 16 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2015-03-14 Andreas Schwab <schwab@linux-m68k.org>
[BZ #18128]
* sysdeps/m68k/m680x0/m68020/bits/atomic.h (atomic_exchange_and_add)
(atomic_add, atomic_increment_and_test)
(atomic_decrement_and_test): Fix 64-bit arithmetic.
2015-03-13 Paul Eggert <eggert@cs.ucla.edu>
* stdlib/setenv.c (__add_to_environ):

2
NEWS
View File

@ -14,7 +14,7 @@ Version 2.22
17779, 17792, 17836, 17912, 17916, 17932, 17944, 17949, 17964, 17965,
17967, 17969, 17978, 17987, 17991, 17996, 17998, 17999, 18019, 18020,
18029, 18030, 18032, 18036, 18038, 18039, 18042, 18043, 18046, 18047,
18068, 18080, 18093, 18104, 18110, 18111.
18068, 18080, 18093, 18104, 18110, 18111, 18128.
* Character encoding and ctype tables were updated to Unicode 7.0.0, using
new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red

View File

@ -139,8 +139,8 @@ typedef uintmax_t uatomic_max_t;
__typeof (mem) __memp = (mem); \
__asm __volatile ("1: move%.l %0,%1;" \
" move%.l %R0,%R1;" \
" add%.l %2,%1;" \
" addx%.l %R2,%R1;" \
" add%.l %R2,%R1;" \
" addx%.l %2,%1;" \
" cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \
" jbne 1b" \
: "=d" (__result), "=&d" (__temp) \
@ -170,8 +170,8 @@ typedef uintmax_t uatomic_max_t;
__typeof (*(mem)) __temp; \
__asm __volatile ("1: move%.l %0,%1;" \
" move%.l %R0,%R1;" \
" add%.l %2,%1;" \
" addx%.l %R2,%R1;" \
" add%.l %R2,%R1;" \
" addx%.l %2,%1;" \
" cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \
" jbne 1b" \
: "=d" (__oldval), "=&d" (__temp) \
@ -199,8 +199,8 @@ typedef uintmax_t uatomic_max_t;
__typeof (*(mem)) __temp; \
__asm __volatile ("1: move%.l %1,%2;" \
" move%.l %R1,%R2;" \
" addq%.l %#1,%2;" \
" addx%.l %5,%R2;" \
" addq%.l %#1,%R2;" \
" addx%.l %5,%2;" \
" seq %0;" \
" cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \
" jbne 1b" \
@ -230,8 +230,8 @@ typedef uintmax_t uatomic_max_t;
__typeof (*(mem)) __temp; \
__asm __volatile ("1: move%.l %1,%2;" \
" move%.l %R1,%R2;" \
" subq%.l %#1,%2;" \
" subx%.l %5,%R2;" \
" subq%.l %#1,%R2;" \
" subx%.l %5,%2;" \
" seq %0;" \
" cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \
" jbne 1b" \