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 |
})
|