]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
m68k: fix 64bit atomic ops
authorAndreas Schwab <schwab@linux-m68k.org>
Wed, 1 Feb 2017 00:30:24 +0000 (01:30 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Fri, 16 Jun 2017 23:27:09 +0000 (01:27 +0200)
(cherry picked from commit 64ae9fe45662c8994b0e56ab469b01967408a154)

ChangeLog
sysdeps/m68k/m680x0/m68020/atomic-machine.h

index 3d4f5f83502a9b796d862055670e7d84ed3dc20c..1795e284ef6536259514a68530b76651cb778299 100644 (file)
--- 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-05-12  Florian Weimer  <fweimer@redhat.com>
 
        [BZ #21386]
index 24bc5c5ef7e35e2536a9bc29a1874314cf72ab24..65965cca9eb24dc7ba8c012e05b0eea70151a71c 100644 (file)
@@ -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");                                \
              }                                                               \
            })