patches/glibc/ports-2.13/560-ppc-atomic.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue May 03 00:19:56 2011 +0200 (2011-05-03)
changeset 2438 2ba5655f6297
permissions -rw-r--r--
libc/glibc: add 2.13

Patchset provided by "Ioannis E. Venetis" <venetis@mail.capsl.udel.edu>
http://sourceware.org/ml/crossgcc/2011-04/msg00072.html
http://sourceware.org/ml/crossgcc/2011-04/msg00073.html

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2438
     1
sniped from suse
yann@2438
     2
yann@2438
     3
Index: sysdeps/powerpc/bits/atomic.h
yann@2438
     4
===================================================================
yann@2438
     5
RCS file: /cvs/glibc/libc/sysdeps/powerpc/bits/atomic.h,v
yann@2438
     6
retrieving revision 1.17
yann@2438
     7
diff -u -a -p -r1.17 atomic.h
yann@2438
     8
yann@2438
     9
diff -durN glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h glibc-2.13/sysdeps/powerpc/bits/atomic.h
yann@2438
    10
--- glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h	2007-03-26 22:15:28.000000000 +0200
yann@2438
    11
+++ glibc-2.13/sysdeps/powerpc/bits/atomic.h	2009-11-13 00:51:19.000000000 +0100
yann@2438
    12
@@ -85,14 +85,14 @@
yann@2438
    13
       __typeof (*(mem)) __tmp;						      \
yann@2438
    14
       __typeof (mem)  __memp = (mem);					      \
yann@2438
    15
       __asm __volatile (						      \
yann@2438
    16
-		        "1:	lwarx	%0,0,%1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
    17
+		        "1:	lwarx	%0,%y1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
    18
 		        "	cmpw	%0,%2\n"			      \
yann@2438
    19
 		        "	bne	2f\n"				      \
yann@2438
    20
-		        "	stwcx.	%3,0,%1\n"			      \
yann@2438
    21
+		        "	stwcx.	%3,%y1\n"			      \
yann@2438
    22
 		        "	bne-	1b\n"				      \
yann@2438
    23
 		        "2:	" __ARCH_ACQ_INSTR			      \
yann@2438
    24
-		        : "=&r" (__tmp)					      \
yann@2438
    25
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
yann@2438
    26
+		        : "=&r" (__tmp), "+Z" (*__memp)			      \
yann@2438
    27
+		        : "r" (oldval), "r" (newval)			      \
yann@2438
    28
 		        : "cr0", "memory");				      \
yann@2438
    29
       __tmp;								      \
yann@2438
    30
   })
yann@2438
    31
@@ -102,14 +102,14 @@
yann@2438
    32
       __typeof (*(mem)) __tmp;						      \
yann@2438
    33
       __typeof (mem)  __memp = (mem);					      \
yann@2438
    34
       __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
    35
-		        "1:	lwarx	%0,0,%1" MUTEX_HINT_REL "\n"	      \
yann@2438
    36
+		        "1:	lwarx	%0,%y1" MUTEX_HINT_REL "\n"	      \
yann@2438
    37
 		        "	cmpw	%0,%2\n"			      \
yann@2438
    38
 		        "	bne	2f\n"				      \
yann@2438
    39
-		        "	stwcx.	%3,0,%1\n"			      \
yann@2438
    40
+		        "	stwcx.	%3,%y1\n"			      \
yann@2438
    41
 		        "	bne-	1b\n"				      \
yann@2438
    42
 		        "2:	"					      \
yann@2438
    43
-		        : "=&r" (__tmp)					      \
yann@2438
    44
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
yann@2438
    45
+		        : "=&r" (__tmp), "+Z" (__memp)			      \
yann@2438
    46
+		        : "r" (oldval), "r" (newval)			      \
yann@2438
    47
 		        : "cr0", "memory");				      \
yann@2438
    48
       __tmp;								      \
yann@2438
    49
   })
yann@2438
    50
@@ -118,12 +118,12 @@
yann@2438
    51
   ({									      \
yann@2438
    52
     __typeof (*mem) __val;						      \
yann@2438
    53
     __asm __volatile (							      \
yann@2438
    54
-		      "1:	lwarx	%0,0,%2" MUTEX_HINT_ACQ "\n"	      \
yann@2438
    55
-		      "		stwcx.	%3,0,%2\n"			      \
yann@2438
    56
+		      "1:	lwarx	%0,%y1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
    57
+		      "		stwcx.	%2,%y1\n"			      \
yann@2438
    58
 		      "		bne-	1b\n"				      \
yann@2438
    59
 		      "   " __ARCH_ACQ_INSTR				      \
yann@2438
    60
-		      : "=&r" (__val), "=m" (*mem)			      \
yann@2438
    61
-		      : "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
    62
+		      : "=&r" (__val), "+Z" (*mem)			      \
yann@2438
    63
+		      : "r" (value)					      \
yann@2438
    64
 		      : "cr0", "memory");				      \
yann@2438
    65
     __val;								      \
yann@2438
    66
   })
yann@2438
    67
@@ -132,11 +132,11 @@
yann@2438
    68
   ({									      \
yann@2438
    69
     __typeof (*mem) __val;						      \
yann@2438
    70
     __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
    71
-		      "1:	lwarx	%0,0,%2" MUTEX_HINT_REL "\n"	      \
yann@2438
    72
-		      "		stwcx.	%3,0,%2\n"			      \
yann@2438
    73
+		      "1:	lwarx	%0,%y1" MUTEX_HINT_REL "\n"	      \
yann@2438
    74
+		      "		stwcx.	%2,%y1\n"			      \
yann@2438
    75
 		      "		bne-	1b"				      \
yann@2438
    76
-		      : "=&r" (__val), "=m" (*mem)			      \
yann@2438
    77
-		      : "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
    78
+		      : "=&r" (__val), "+Z" (*mem)			      \
yann@2438
    79
+		      : "r" (value)					      \
yann@2438
    80
 		      : "cr0", "memory");				      \
yann@2438
    81
     __val;								      \
yann@2438
    82
   })
yann@2438
    83
@@ -144,12 +144,12 @@
yann@2438
    84
 #define __arch_atomic_exchange_and_add_32(mem, value) \
yann@2438
    85
   ({									      \
yann@2438
    86
     __typeof (*mem) __val, __tmp;					      \
yann@2438
    87
-    __asm __volatile ("1:	lwarx	%0,0,%3\n"			      \
yann@2438
    88
-		      "		add	%1,%0,%4\n"			      \
yann@2438
    89
-		      "		stwcx.	%1,0,%3\n"			      \
yann@2438
    90
+    __asm __volatile ("1:	lwarx	%0,%y2\n"			      \
yann@2438
    91
+		      "		add	%1,%0,%3\n"			      \
yann@2438
    92
+		      "		stwcx.	%1,%y2\n"			      \
yann@2438
    93
 		      "		bne-	1b"				      \
yann@2438
    94
-		      : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
yann@2438
    95
-		      : "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
    96
+		      : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem)	      \
yann@2438
    97
+		      : "r" (value)					      \
yann@2438
    98
 		      : "cr0", "memory");				      \
yann@2438
    99
     __val;								      \
yann@2438
   100
   })
yann@2438
   101
@@ -157,12 +157,12 @@
yann@2438
   102
 #define __arch_atomic_increment_val_32(mem) \
yann@2438
   103
   ({									      \
yann@2438
   104
     __typeof (*(mem)) __val;						      \
yann@2438
   105
-    __asm __volatile ("1:	lwarx	%0,0,%2\n"			      \
yann@2438
   106
+    __asm __volatile ("1:	lwarx	%0,%y1\n"			      \
yann@2438
   107
 		      "		addi	%0,%0,1\n"			      \
yann@2438
   108
-		      "		stwcx.	%0,0,%2\n"			      \
yann@2438
   109
+		      "		stwcx.	%0,%y1\n"			      \
yann@2438
   110
 		      "		bne-	1b"				      \
yann@2438
   111
-		      : "=&b" (__val), "=m" (*mem)			      \
yann@2438
   112
-		      : "b" (mem), "m" (*mem)				      \
yann@2438
   113
+		      : "=&b" (__val), "+Z" (*mem)			      \
yann@2438
   114
+		      :							      \
yann@2438
   115
 		      : "cr0", "memory");				      \
yann@2438
   116
     __val;								      \
yann@2438
   117
   })
yann@2438
   118
@@ -170,27 +170,27 @@
yann@2438
   119
 #define __arch_atomic_decrement_val_32(mem) \
yann@2438
   120
   ({									      \
yann@2438
   121
     __typeof (*(mem)) __val;						      \
yann@2438
   122
-    __asm __volatile ("1:	lwarx	%0,0,%2\n"			      \
yann@2438
   123
+    __asm __volatile ("1:	lwarx	%0,%y1\n"			      \
yann@2438
   124
 		      "		subi	%0,%0,1\n"			      \
yann@2438
   125
-		      "		stwcx.	%0,0,%2\n"			      \
yann@2438
   126
+		      "		stwcx.	%0,%y1\n"			      \
yann@2438
   127
 		      "		bne-	1b"				      \
yann@2438
   128
-		      : "=&b" (__val), "=m" (*mem)			      \
yann@2438
   129
-		      : "b" (mem), "m" (*mem)				      \
yann@2438
   130
+		      : "=&b" (__val), "+Z" (*mem)			      \
yann@2438
   131
+		      :							      \
yann@2438
   132
 		      : "cr0", "memory");				      \
yann@2438
   133
     __val;								      \
yann@2438
   134
   })
yann@2438
   135
 
yann@2438
   136
 #define __arch_atomic_decrement_if_positive_32(mem) \
yann@2438
   137
   ({ int __val, __tmp;							      \
yann@2438
   138
-     __asm __volatile ("1:	lwarx	%0,0,%3\n"			      \
yann@2438
   139
+     __asm __volatile ("1:	lwarx	%0,%y2\n"			      \
yann@2438
   140
 		       "	cmpwi	0,%0,0\n"			      \
yann@2438
   141
 		       "	addi	%1,%0,-1\n"			      \
yann@2438
   142
 		       "	ble	2f\n"				      \
yann@2438
   143
-		       "	stwcx.	%1,0,%3\n"			      \
yann@2438
   144
+		       "	stwcx.	%1,%y2\n"			      \
yann@2438
   145
 		       "	bne-	1b\n"				      \
yann@2438
   146
 		       "2:	" __ARCH_ACQ_INSTR			      \
yann@2438
   147
-		       : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
yann@2438
   148
-		       : "b" (mem), "m" (*mem)				      \
yann@2438
   149
+		       : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem)	      \
yann@2438
   150
+		       :						      \
yann@2438
   151
 		       : "cr0", "memory");				      \
yann@2438
   152
      __val;								      \
yann@2438
   153
   })
yann@2438
   154
diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h
yann@2438
   155
--- glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h	2007-03-26 22:15:45.000000000 +0200
yann@2438
   156
+++ glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h	2009-11-13 00:51:19.000000000 +0100
yann@2438
   157
@@ -44,14 +44,14 @@
yann@2438
   158
 ({									      \
yann@2438
   159
   unsigned int __tmp;							      \
yann@2438
   160
   __asm __volatile (							      \
yann@2438
   161
-		    "1:	lwarx	%0,0,%1" MUTEX_HINT_ACQ "\n"		      \
yann@2438
   162
+		    "1:	lwarx	%0,%y1" MUTEX_HINT_ACQ "\n"		      \
yann@2438
   163
 		    "	subf.	%0,%2,%0\n"				      \
yann@2438
   164
 		    "	bne	2f\n"					      \
yann@2438
   165
-		    "	stwcx.	%3,0,%1\n"				      \
yann@2438
   166
+		    "	stwcx.	%3,%y1\n"				      \
yann@2438
   167
 		    "	bne-	1b\n"					      \
yann@2438
   168
 		    "2:	" __ARCH_ACQ_INSTR				      \
yann@2438
   169
-		    : "=&r" (__tmp)					      \
yann@2438
   170
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
yann@2438
   171
+		    : "=&r" (__tmp), "+Z" (*(mem))			      \
yann@2438
   172
+		    : "r" (oldval), "r" (newval)			      \
yann@2438
   173
 		    : "cr0", "memory");					      \
yann@2438
   174
   __tmp != 0;								      \
yann@2438
   175
 })
yann@2438
   176
@@ -60,14 +60,14 @@
yann@2438
   177
 ({									      \
yann@2438
   178
   unsigned int __tmp;							      \
yann@2438
   179
   __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   180
-		    "1:	lwarx	%0,0,%1" MUTEX_HINT_REL "\n"		      \
yann@2438
   181
+		    "1:	lwarx	%0,%y1" MUTEX_HINT_REL "\n"		      \
yann@2438
   182
 		    "	subf.	%0,%2,%0\n"				      \
yann@2438
   183
 		    "	bne	2f\n"					      \
yann@2438
   184
-		    "	stwcx.	%3,0,%1\n"				      \
yann@2438
   185
+		    "	stwcx.	%3,%y1\n"				      \
yann@2438
   186
 		    "	bne-	1b\n"					      \
yann@2438
   187
 		    "2:	"						      \
yann@2438
   188
-		    : "=&r" (__tmp)					      \
yann@2438
   189
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
yann@2438
   190
+		    : "=&r" (__tmp), "+Z" (*(mem))			      \
yann@2438
   191
+		    : "r" (oldval), "r" (newval)			      \
yann@2438
   192
 		    : "cr0", "memory");					      \
yann@2438
   193
   __tmp != 0;								      \
yann@2438
   194
 })
yann@2438
   195
diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h
yann@2438
   196
--- glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h	2007-03-26 22:16:03.000000000 +0200
yann@2438
   197
+++ glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h	2009-11-13 00:51:19.000000000 +0100
yann@2438
   198
@@ -44,14 +44,14 @@
yann@2438
   199
 ({									      \
yann@2438
   200
   unsigned int __tmp, __tmp2;						      \
yann@2438
   201
   __asm __volatile ("   clrldi  %1,%1,32\n"				      \
yann@2438
   202
-		    "1:	lwarx	%0,0,%2" MUTEX_HINT_ACQ "\n"	 	      \
yann@2438
   203
+		    "1:	lwarx	%0,%y2" MUTEX_HINT_ACQ "\n"	 	      \
yann@2438
   204
 		    "	subf.	%0,%1,%0\n"				      \
yann@2438
   205
 		    "	bne	2f\n"					      \
yann@2438
   206
-		    "	stwcx.	%4,0,%2\n"				      \
yann@2438
   207
+		    "	stwcx.	%4,%y2\n"				      \
yann@2438
   208
 		    "	bne-	1b\n"					      \
yann@2438
   209
 		    "2:	" __ARCH_ACQ_INSTR				      \
yann@2438
   210
-		    : "=&r" (__tmp), "=r" (__tmp2)			      \
yann@2438
   211
-		    : "b" (mem), "1" (oldval), "r" (newval)		      \
yann@2438
   212
+		    : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem))	      \
yann@2438
   213
+		    : "1" (oldval), "r" (newval)			      \
yann@2438
   214
 		    : "cr0", "memory");					      \
yann@2438
   215
   __tmp != 0;								      \
yann@2438
   216
 })
yann@2438
   217
@@ -61,14 +61,14 @@
yann@2438
   218
   unsigned int __tmp, __tmp2;						      \
yann@2438
   219
   __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   220
 		    "   clrldi  %1,%1,32\n"				      \
yann@2438
   221
-		    "1:	lwarx	%0,0,%2" MUTEX_HINT_REL "\n"		      \
yann@2438
   222
+		    "1:	lwarx	%0,%y2" MUTEX_HINT_REL "\n"		      \
yann@2438
   223
 		    "	subf.	%0,%1,%0\n"				      \
yann@2438
   224
 		    "	bne	2f\n"					      \
yann@2438
   225
-		    "	stwcx.	%4,0,%2\n"				      \
yann@2438
   226
+		    "	stwcx.	%4,%y2\n"				      \
yann@2438
   227
 		    "	bne-	1b\n"					      \
yann@2438
   228
 		    "2:	"						      \
yann@2438
   229
-		    : "=&r" (__tmp), "=r" (__tmp2)			      \
yann@2438
   230
-		    : "b" (mem), "1" (oldval), "r" (newval)		      \
yann@2438
   231
+		    : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem))	      \
yann@2438
   232
+		    : "1" (oldval), "r" (newval)			      \
yann@2438
   233
 		    : "cr0", "memory");					      \
yann@2438
   234
   __tmp != 0;								      \
yann@2438
   235
 })
yann@2438
   236
@@ -82,14 +82,14 @@
yann@2438
   237
 ({									      \
yann@2438
   238
   unsigned long	__tmp;							      \
yann@2438
   239
   __asm __volatile (							      \
yann@2438
   240
-		    "1:	ldarx	%0,0,%1" MUTEX_HINT_ACQ "\n"		      \
yann@2438
   241
+		    "1:	ldarx	%0,%y1" MUTEX_HINT_ACQ "\n"		      \
yann@2438
   242
 		    "	subf.	%0,%2,%0\n"				      \
yann@2438
   243
 		    "	bne	2f\n"					      \
yann@2438
   244
-		    "	stdcx.	%3,0,%1\n"				      \
yann@2438
   245
+		    "	stdcx.	%3,%y1\n"				      \
yann@2438
   246
 		    "	bne-	1b\n"					      \
yann@2438
   247
 		    "2:	" __ARCH_ACQ_INSTR				      \
yann@2438
   248
-		    : "=&r" (__tmp)					      \
yann@2438
   249
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
yann@2438
   250
+		    : "=&r" (__tmp), "+Z" (*(mem))			      \
yann@2438
   251
+		    : "r" (oldval), "r" (newval)			      \
yann@2438
   252
 		    : "cr0", "memory");					      \
yann@2438
   253
   __tmp != 0;								      \
yann@2438
   254
 })
yann@2438
   255
@@ -98,14 +98,14 @@
yann@2438
   256
 ({									      \
yann@2438
   257
   unsigned long	__tmp;							      \
yann@2438
   258
   __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   259
-		    "1:	ldarx	%0,0,%2" MUTEX_HINT_REL "\n"		      \
yann@2438
   260
+		    "1:	ldarx	%0,%y1" MUTEX_HINT_REL "\n"		      \
yann@2438
   261
 		    "	subf.	%0,%2,%0\n"				      \
yann@2438
   262
 		    "	bne	2f\n"					      \
yann@2438
   263
-		    "	stdcx.	%3,0,%1\n"				      \
yann@2438
   264
+		    "	stdcx.	%3,%y1\n"				      \
yann@2438
   265
 		    "	bne-	1b\n"					      \
yann@2438
   266
 		    "2:	"						      \
yann@2438
   267
-		    : "=&r" (__tmp)					      \
yann@2438
   268
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
yann@2438
   269
+		    : "=&r" (__tmp), "+Z" (*(mem))			      \
yann@2438
   270
+		    : "r" (oldval), "r" (newval)			      \
yann@2438
   271
 		    : "cr0", "memory");					      \
yann@2438
   272
   __tmp != 0;								      \
yann@2438
   273
 })
yann@2438
   274
@@ -115,14 +115,14 @@
yann@2438
   275
       __typeof (*(mem)) __tmp;						      \
yann@2438
   276
       __typeof (mem)  __memp = (mem);					      \
yann@2438
   277
       __asm __volatile (						      \
yann@2438
   278
-		        "1:	ldarx	%0,0,%1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
   279
+		        "1:	ldarx	%0,%y1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
   280
 		        "	cmpd	%0,%2\n"			      \
yann@2438
   281
 		        "	bne	2f\n"				      \
yann@2438
   282
-		        "	stdcx.	%3,0,%1\n"			      \
yann@2438
   283
+		        "	stdcx.	%3,%y1\n"			      \
yann@2438
   284
 		        "	bne-	1b\n"				      \
yann@2438
   285
 		        "2:	" __ARCH_ACQ_INSTR			      \
yann@2438
   286
-		        : "=&r" (__tmp)					      \
yann@2438
   287
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
yann@2438
   288
+		        : "=&r" (__tmp), "+Z" (*__memp)			      \
yann@2438
   289
+		        : "r" (oldval), "r" (newval)			      \
yann@2438
   290
 		        : "cr0", "memory");				      \
yann@2438
   291
       __tmp;								      \
yann@2438
   292
   })
yann@2438
   293
@@ -132,14 +132,14 @@
yann@2438
   294
       __typeof (*(mem)) __tmp;						      \
yann@2438
   295
       __typeof (mem)  __memp = (mem);					      \
yann@2438
   296
       __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   297
-		        "1:	ldarx	%0,0,%1" MUTEX_HINT_REL "\n"	      \
yann@2438
   298
+		        "1:	ldarx	%0,%y1" MUTEX_HINT_REL "\n"	      \
yann@2438
   299
 		        "	cmpd	%0,%2\n"			      \
yann@2438
   300
 		        "	bne	2f\n"				      \
yann@2438
   301
-		        "	stdcx.	%3,0,%1\n"			      \
yann@2438
   302
+		        "	stdcx.	%3,%y1\n"			      \
yann@2438
   303
 		        "	bne-	1b\n"				      \
yann@2438
   304
 		        "2:	"					      \
yann@2438
   305
-		        : "=&r" (__tmp)					      \
yann@2438
   306
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
yann@2438
   307
+		        : "=&r" (__tmp), "+Z" (*__memp)			      \
yann@2438
   308
+		        : "r" (oldval), "r" (newval)			      \
yann@2438
   309
 		        : "cr0", "memory");				      \
yann@2438
   310
       __tmp;								      \
yann@2438
   311
   })
yann@2438
   312
@@ -148,12 +148,12 @@
yann@2438
   313
     ({									      \
yann@2438
   314
       __typeof (*mem) __val;						      \
yann@2438
   315
       __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   316
-			"1:	ldarx	%0,0,%2" MUTEX_HINT_ACQ "\n"	      \
yann@2438
   317
-			"	stdcx.	%3,0,%2\n"			      \
yann@2438
   318
+			"1:	ldarx	%0,%y1" MUTEX_HINT_ACQ "\n"	      \
yann@2438
   319
+			"	stdcx.	%2,%y1\n"			      \
yann@2438
   320
 			"	bne-	1b\n"				      \
yann@2438
   321
 		  " " __ARCH_ACQ_INSTR					      \
yann@2438
   322
-			: "=&r" (__val), "=m" (*mem)			      \
yann@2438
   323
-			: "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
   324
+			: "=&r" (__val), "+Z" (*(mem))			      \
yann@2438
   325
+			: "r" (value)					      \
yann@2438
   326
 			: "cr0", "memory");				      \
yann@2438
   327
       __val;								      \
yann@2438
   328
     })
yann@2438
   329
@@ -162,11 +162,11 @@
yann@2438
   330
     ({									      \
yann@2438
   331
       __typeof (*mem) __val;						      \
yann@2438
   332
       __asm __volatile (__ARCH_REL_INSTR "\n"				      \
yann@2438
   333
-			"1:	ldarx	%0,0,%2" MUTEX_HINT_REL "\n"	      \
yann@2438
   334
-			"	stdcx.	%3,0,%2\n"			      \
yann@2438
   335
+			"1:	ldarx	%0,%y1" MUTEX_HINT_REL "\n"	      \
yann@2438
   336
+			"	stdcx.	%2,%y1\n"			      \
yann@2438
   337
 			"	bne-	1b"				      \
yann@2438
   338
-			: "=&r" (__val), "=m" (*mem)			      \
yann@2438
   339
-			: "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
   340
+			: "=&r" (__val), "+Z" (*(mem))			      \
yann@2438
   341
+			: "r" (value)					      \
yann@2438
   342
 			: "cr0", "memory");				      \
yann@2438
   343
       __val;								      \
yann@2438
   344
     })
yann@2438
   345
@@ -174,12 +174,12 @@
yann@2438
   346
 #define __arch_atomic_exchange_and_add_64(mem, value) \
yann@2438
   347
     ({									      \
yann@2438
   348
       __typeof (*mem) __val, __tmp;					      \
yann@2438
   349
-      __asm __volatile ("1:	ldarx	%0,0,%3\n"			      \
yann@2438
   350
-			"	add	%1,%0,%4\n"			      \
yann@2438
   351
-			"	stdcx.	%1,0,%3\n"			      \
yann@2438
   352
+      __asm __volatile ("1:	ldarx	%0,%y2\n"			      \
yann@2438
   353
+			"	add	%1,%0,%3\n"			      \
yann@2438
   354
+			"	stdcx.	%1,%y2\n"			      \
yann@2438
   355
 			"	bne-	1b"				      \
yann@2438
   356
-			: "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
yann@2438
   357
-			: "b" (mem), "r" (value), "m" (*mem)		      \
yann@2438
   358
+			: "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem))	      \
yann@2438
   359
+			: "r" (value)					      \
yann@2438
   360
 			: "cr0", "memory");				      \
yann@2438
   361
       __val;								      \
yann@2438
   362
     })
yann@2438
   363
@@ -187,12 +187,12 @@
yann@2438
   364
 #define __arch_atomic_increment_val_64(mem) \
yann@2438
   365
     ({									      \
yann@2438
   366
       __typeof (*(mem)) __val;						      \
yann@2438
   367
-      __asm __volatile ("1:	ldarx	%0,0,%2\n"			      \
yann@2438
   368
+      __asm __volatile ("1:	ldarx	%0,%y1\n"			      \
yann@2438
   369
 			"	addi	%0,%0,1\n"			      \
yann@2438
   370
-			"	stdcx.	%0,0,%2\n"			      \
yann@2438
   371
+			"	stdcx.	%0,%y1\n"			      \
yann@2438
   372
 			"	bne-	1b"				      \
yann@2438
   373
-			: "=&b" (__val), "=m" (*mem)			      \
yann@2438
   374
-			: "b" (mem), "m" (*mem)				      \
yann@2438
   375
+			: "=&b" (__val), "+Z" (*(mem))			      \
yann@2438
   376
+			:						      \
yann@2438
   377
 			: "cr0", "memory");				      \
yann@2438
   378
       __val;								      \
yann@2438
   379
     })
yann@2438
   380
@@ -200,27 +200,27 @@
yann@2438
   381
 #define __arch_atomic_decrement_val_64(mem) \
yann@2438
   382
     ({									      \
yann@2438
   383
       __typeof (*(mem)) __val;						      \
yann@2438
   384
-      __asm __volatile ("1:	ldarx	%0,0,%2\n"			      \
yann@2438
   385
+      __asm __volatile ("1:	ldarx	%0,%y1\n"			      \
yann@2438
   386
 			"	subi	%0,%0,1\n"			      \
yann@2438
   387
-			"	stdcx.	%0,0,%2\n"			      \
yann@2438
   388
+			"	stdcx.	%0,%y1\n"			      \
yann@2438
   389
 			"	bne-	1b"				      \
yann@2438
   390
-			: "=&b" (__val), "=m" (*mem)			      \
yann@2438
   391
-			: "b" (mem), "m" (*mem)				      \
yann@2438
   392
+			: "=&b" (__val), "+Z" (*(mem))			      \
yann@2438
   393
+			:						      \
yann@2438
   394
 			: "cr0", "memory");				      \
yann@2438
   395
       __val;								      \
yann@2438
   396
     })
yann@2438
   397
 
yann@2438
   398
 #define __arch_atomic_decrement_if_positive_64(mem) \
yann@2438
   399
   ({ int __val, __tmp;							      \
yann@2438
   400
-     __asm __volatile ("1:	ldarx	%0,0,%3\n"			      \
yann@2438
   401
+     __asm __volatile ("1:	ldarx	%0,%y2\n"			      \
yann@2438
   402
 		       "	cmpdi	0,%0,0\n"			      \
yann@2438
   403
 		       "	addi	%1,%0,-1\n"			      \
yann@2438
   404
 		       "	ble	2f\n"				      \
yann@2438
   405
-		       "	stdcx.	%1,0,%3\n"			      \
yann@2438
   406
+		       "	stdcx.	%1,%y2\n"			      \
yann@2438
   407
 		       "	bne-	1b\n"				      \
yann@2438
   408
 		       "2:	" __ARCH_ACQ_INSTR			      \
yann@2438
   409
-		       : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
yann@2438
   410
-		       : "b" (mem), "m" (*mem)				      \
yann@2438
   411
+		       : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem))	      \
yann@2438
   412
+		       :						      \
yann@2438
   413
 		       : "cr0", "memory");				      \
yann@2438
   414
      __val;								      \
yann@2438
   415
   })