diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2015-03-13 18:21:55 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2015-03-14 22:27:36 +0100 |
commit | a3905fd9de77ffce9d2b6042b512b1816d90a3d2 (patch) | |
tree | ad219d2b9b2e63e160525f14c742063be1e07691 | |
parent | 2ecccaede9097f867284d352a881d8f226ba4fb7 (diff) | |
download | glibc-a3905fd9de77ffce9d2b6042b512b1816d90a3d2.zip glibc-a3905fd9de77ffce9d2b6042b512b1816d90a3d2.tar.gz glibc-a3905fd9de77ffce9d2b6042b512b1816d90a3d2.tar.bz2 |
m68k: fix 64-bit arithmetic in atomic operations (bug 18128)
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | sysdeps/m68k/m680x0/m68020/bits/atomic.h | 16 |
3 files changed, 16 insertions, 9 deletions
@@ -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): @@ -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 diff --git a/sysdeps/m68k/m680x0/m68020/bits/atomic.h b/sysdeps/m68k/m680x0/m68020/bits/atomic.h index 2038037..9a29022 100644 --- a/sysdeps/m68k/m680x0/m68020/bits/atomic.h +++ b/sysdeps/m68k/m680x0/m68020/bits/atomic.h @@ -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" \ |