diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2017-02-01 01:30:24 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2017-02-01 01:32:31 +0100 |
commit | 64ae9fe45662c8994b0e56ab469b01967408a154 (patch) | |
tree | e14d8b9a083b53dd38ba1dea2fbc518fb290980f | |
parent | efeca5dac690aafe7b921c6523eba86b9fbde9fe (diff) | |
download | glibc-64ae9fe45662c8994b0e56ab469b01967408a154.tar.gz glibc-64ae9fe45662c8994b0e56ab469b01967408a154.tar.xz glibc-64ae9fe45662c8994b0e56ab469b01967408a154.zip |
m68k: fix 64bit atomic ops
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/m68k/m680x0/m68020/atomic-machine.h | 14 |
2 files changed, 15 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index e715d6f454..194c8c4fd2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2017-02-01 Andreas Schwab <schwab@linux-m68k.org> + + * sysdeps/m68k/m680x0/m68020/atomic-machine.h + (__arch_compare_and_exchange_val_64_acq, atomic_exchange_acq) + (atomic_exchange_and_add, atomic_add): Add casts to 64 bit asm + operands. + 2017-01-31 Chung-Lin Tang <cltang@codesourcery.com> * sysdeps/unix/sysv/linux/nios2/ipc_priv.h: New file. diff --git a/sysdeps/m68k/m680x0/m68020/atomic-machine.h b/sysdeps/m68k/m680x0/m68020/atomic-machine.h index 5c37d86ce8..00dc22d79d 100644 --- a/sysdeps/m68k/m680x0/m68020/atomic-machine.h +++ b/sysdeps/m68k/m680x0/m68020/atomic-machine.h @@ -73,7 +73,7 @@ typedef uintmax_t uatomic_max_t; __typeof (mem) __memp = (mem); \ __asm __volatile ("cas2%.l %0:%R0,%1:%R1,(%2):(%3)" \ : "=d" (__ret) \ - : "d" (newval), "r" (__memp), \ + : "d" ((__typeof (*(mem))) (newval)), "r" (__memp), \ "r" ((char *) __memp + 4), "0" (oldval) \ : "memory"); \ __ret; }) @@ -101,8 +101,9 @@ typedef uintmax_t uatomic_max_t; __asm __volatile ("1: cas2%.l %0:%R0,%1:%R1,(%2):(%3);" \ " jbne 1b" \ : "=d" (__result) \ - : "d" (newvalue), "r" (__memp), \ - "r" ((char *) __memp + 4), "0" (__result) \ + : "d" ((__typeof (*(mem))) (newvalue)), \ + "r" (__memp), "r" ((char *) __memp + 4), \ + "0" (__result) \ : "memory"); \ } \ __result; }) @@ -144,7 +145,7 @@ typedef uintmax_t uatomic_max_t; " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \ " jbne 1b" \ : "=d" (__result), "=&d" (__temp) \ - : "d" (value), "r" (__memp), \ + : "d" ((__typeof (*(mem))) (value)), "r" (__memp), \ "r" ((char *) __memp + 4), "0" (__result) \ : "memory"); \ } \ @@ -175,8 +176,9 @@ typedef uintmax_t uatomic_max_t; " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \ " jbne 1b" \ : "=d" (__oldval), "=&d" (__temp) \ - : "d" (value), "r" (__memp), \ - "r" ((char *) __memp + 4), "0" (__oldval) \ + : "d" ((__typeof (*(mem))) (value)), \ + "r" (__memp), "r" ((char *) __memp + 4), \ + "0" (__oldval) \ : "memory"); \ } \ }) |