patches/glibc/2.9/500-ppc-glibc-2.9-atomic.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1201 c9967a6e3b25
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

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