1 /* |
1 /* |
2 * CDDL HEADER START |
2 * CDDL HEADER START |
3 * |
3 * |
4 * The contents of this file are subject to the terms of the |
4 * The contents of this file are subject to the terms of the |
5 * Common Development and Distribution License, Version 1.0 only |
5 * Common Development and Distribution License (the "License"). |
6 * (the "License"). You may not use this file except in compliance |
6 * You may not use this file except in compliance with the License. |
7 * with the License. |
|
8 * |
7 * |
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
10 * or http://www.opensolaris.org/os/licensing. |
9 * or http://www.opensolaris.org/os/licensing. |
11 * See the License for the specific language governing permissions |
10 * See the License for the specific language governing permissions |
12 * and limitations under the License. |
11 * and limitations under the License. |
18 * information: Portions Copyright [yyyy] [name of copyright owner] |
17 * information: Portions Copyright [yyyy] [name of copyright owner] |
19 * |
18 * |
20 * CDDL HEADER END |
19 * CDDL HEADER END |
21 */ |
20 */ |
22 /* |
21 /* |
23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. |
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. |
24 * Use is subject to license terms. |
23 * Use is subject to license terms. |
25 */ |
24 */ |
26 |
25 |
27 .ident "%Z%%M% %I% %E% SMI" |
26 .ident "%Z%%M% %I% %E% SMI" |
28 |
27 |
47 * Include the definitions for the libc weak aliases. |
46 * Include the definitions for the libc weak aliases. |
48 */ |
47 */ |
49 #include "../atomic_asm_weak.h" |
48 #include "../atomic_asm_weak.h" |
50 #endif |
49 #endif |
51 |
50 |
|
51 /* |
|
52 * NOTE: If atomic_inc_8 and atomic_inc_8_nv are ever |
|
53 * separated, you need to also edit the libc sparc platform |
|
54 * specific mapfile and remove the NODYNSORT attribute |
|
55 * from atomic_inc_8_nv. |
|
56 */ |
52 ENTRY(atomic_inc_8) |
57 ENTRY(atomic_inc_8) |
53 ALTENTRY(atomic_inc_8_nv) |
58 ALTENTRY(atomic_inc_8_nv) |
54 ALTENTRY(atomic_inc_uchar) |
59 ALTENTRY(atomic_inc_uchar) |
55 ALTENTRY(atomic_inc_uchar_nv) |
60 ALTENTRY(atomic_inc_uchar_nv) |
56 ba add_8 |
61 ba add_8 |
58 SET_SIZE(atomic_inc_uchar_nv) |
63 SET_SIZE(atomic_inc_uchar_nv) |
59 SET_SIZE(atomic_inc_uchar) |
64 SET_SIZE(atomic_inc_uchar) |
60 SET_SIZE(atomic_inc_8_nv) |
65 SET_SIZE(atomic_inc_8_nv) |
61 SET_SIZE(atomic_inc_8) |
66 SET_SIZE(atomic_inc_8) |
62 |
67 |
|
68 /* |
|
69 * NOTE: If atomic_dec_8 and atomic_dec_8_nv are ever |
|
70 * separated, you need to also edit the libc sparc platform |
|
71 * specific mapfile and remove the NODYNSORT attribute |
|
72 * from atomic_dec_8_nv. |
|
73 */ |
63 ENTRY(atomic_dec_8) |
74 ENTRY(atomic_dec_8) |
64 ALTENTRY(atomic_dec_8_nv) |
75 ALTENTRY(atomic_dec_8_nv) |
65 ALTENTRY(atomic_dec_uchar) |
76 ALTENTRY(atomic_dec_uchar) |
66 ALTENTRY(atomic_dec_uchar_nv) |
77 ALTENTRY(atomic_dec_uchar_nv) |
67 ba add_8 |
78 ba add_8 |
69 SET_SIZE(atomic_dec_uchar_nv) |
80 SET_SIZE(atomic_dec_uchar_nv) |
70 SET_SIZE(atomic_dec_uchar) |
81 SET_SIZE(atomic_dec_uchar) |
71 SET_SIZE(atomic_dec_8_nv) |
82 SET_SIZE(atomic_dec_8_nv) |
72 SET_SIZE(atomic_dec_8) |
83 SET_SIZE(atomic_dec_8) |
73 |
84 |
|
85 /* |
|
86 * NOTE: If atomic_add_8 and atomic_add_8_nv are ever |
|
87 * separated, you need to also edit the libc sparc platform |
|
88 * specific mapfile and remove the NODYNSORT attribute |
|
89 * from atomic_add_8_nv. |
|
90 */ |
74 ENTRY(atomic_add_8) |
91 ENTRY(atomic_add_8) |
75 ALTENTRY(atomic_add_8_nv) |
92 ALTENTRY(atomic_add_8_nv) |
76 ALTENTRY(atomic_add_char) |
93 ALTENTRY(atomic_add_char) |
77 ALTENTRY(atomic_add_char_nv) |
94 ALTENTRY(atomic_add_char_nv) |
78 add_8: |
95 add_8: |
101 SET_SIZE(atomic_add_char_nv) |
118 SET_SIZE(atomic_add_char_nv) |
102 SET_SIZE(atomic_add_char) |
119 SET_SIZE(atomic_add_char) |
103 SET_SIZE(atomic_add_8_nv) |
120 SET_SIZE(atomic_add_8_nv) |
104 SET_SIZE(atomic_add_8) |
121 SET_SIZE(atomic_add_8) |
105 |
122 |
|
123 /* |
|
124 * NOTE: If atomic_inc_16 and atomic_inc_16_nv are ever |
|
125 * separated, you need to also edit the libc sparc platform |
|
126 * specific mapfile and remove the NODYNSORT attribute |
|
127 * from atomic_inc_16_nv. |
|
128 */ |
106 ENTRY(atomic_inc_16) |
129 ENTRY(atomic_inc_16) |
107 ALTENTRY(atomic_inc_16_nv) |
130 ALTENTRY(atomic_inc_16_nv) |
108 ALTENTRY(atomic_inc_ushort) |
131 ALTENTRY(atomic_inc_ushort) |
109 ALTENTRY(atomic_inc_ushort_nv) |
132 ALTENTRY(atomic_inc_ushort_nv) |
110 ba add_16 |
133 ba add_16 |
112 SET_SIZE(atomic_inc_ushort_nv) |
135 SET_SIZE(atomic_inc_ushort_nv) |
113 SET_SIZE(atomic_inc_ushort) |
136 SET_SIZE(atomic_inc_ushort) |
114 SET_SIZE(atomic_inc_16_nv) |
137 SET_SIZE(atomic_inc_16_nv) |
115 SET_SIZE(atomic_inc_16) |
138 SET_SIZE(atomic_inc_16) |
116 |
139 |
|
140 /* |
|
141 * NOTE: If atomic_dec_16 and atomic_dec_16_nv are ever |
|
142 * separated, you need to also edit the libc sparc platform |
|
143 * specific mapfile and remove the NODYNSORT attribute |
|
144 * from atomic_dec_16_nv. |
|
145 */ |
117 ENTRY(atomic_dec_16) |
146 ENTRY(atomic_dec_16) |
118 ALTENTRY(atomic_dec_16_nv) |
147 ALTENTRY(atomic_dec_16_nv) |
119 ALTENTRY(atomic_dec_ushort) |
148 ALTENTRY(atomic_dec_ushort) |
120 ALTENTRY(atomic_dec_ushort_nv) |
149 ALTENTRY(atomic_dec_ushort_nv) |
121 ba add_16 |
150 ba add_16 |
123 SET_SIZE(atomic_dec_ushort_nv) |
152 SET_SIZE(atomic_dec_ushort_nv) |
124 SET_SIZE(atomic_dec_ushort) |
153 SET_SIZE(atomic_dec_ushort) |
125 SET_SIZE(atomic_dec_16_nv) |
154 SET_SIZE(atomic_dec_16_nv) |
126 SET_SIZE(atomic_dec_16) |
155 SET_SIZE(atomic_dec_16) |
127 |
156 |
|
157 /* |
|
158 * NOTE: If atomic_add_16 and atomic_add_16_nv are ever |
|
159 * separated, you need to also edit the libc sparc platform |
|
160 * specific mapfile and remove the NODYNSORT attribute |
|
161 * from atomic_add_16_nv. |
|
162 */ |
128 ENTRY(atomic_add_16) |
163 ENTRY(atomic_add_16) |
129 ALTENTRY(atomic_add_16_nv) |
164 ALTENTRY(atomic_add_16_nv) |
130 ALTENTRY(atomic_add_short) |
165 ALTENTRY(atomic_add_short) |
131 ALTENTRY(atomic_add_short_nv) |
166 ALTENTRY(atomic_add_short_nv) |
132 add_16: |
167 add_16: |
157 SET_SIZE(atomic_add_short_nv) |
192 SET_SIZE(atomic_add_short_nv) |
158 SET_SIZE(atomic_add_short) |
193 SET_SIZE(atomic_add_short) |
159 SET_SIZE(atomic_add_16_nv) |
194 SET_SIZE(atomic_add_16_nv) |
160 SET_SIZE(atomic_add_16) |
195 SET_SIZE(atomic_add_16) |
161 |
196 |
|
197 /* |
|
198 * NOTE: If atomic_inc_32 and atomic_inc_32_nv are ever |
|
199 * separated, you need to also edit the libc sparc platform |
|
200 * specific mapfile and remove the NODYNSORT attribute |
|
201 * from atomic_inc_32_nv. |
|
202 */ |
162 ENTRY(atomic_inc_32) |
203 ENTRY(atomic_inc_32) |
163 ALTENTRY(atomic_inc_32_nv) |
204 ALTENTRY(atomic_inc_32_nv) |
164 ALTENTRY(atomic_inc_uint) |
205 ALTENTRY(atomic_inc_uint) |
165 ALTENTRY(atomic_inc_uint_nv) |
206 ALTENTRY(atomic_inc_uint_nv) |
166 ALTENTRY(atomic_inc_ulong) |
207 ALTENTRY(atomic_inc_ulong) |
172 SET_SIZE(atomic_inc_uint_nv) |
213 SET_SIZE(atomic_inc_uint_nv) |
173 SET_SIZE(atomic_inc_uint) |
214 SET_SIZE(atomic_inc_uint) |
174 SET_SIZE(atomic_inc_32_nv) |
215 SET_SIZE(atomic_inc_32_nv) |
175 SET_SIZE(atomic_inc_32) |
216 SET_SIZE(atomic_inc_32) |
176 |
217 |
|
218 /* |
|
219 * NOTE: If atomic_dec_32 and atomic_dec_32_nv are ever |
|
220 * separated, you need to also edit the libc sparc platform |
|
221 * specific mapfile and remove the NODYNSORT attribute |
|
222 * from atomic_dec_32_nv. |
|
223 */ |
177 ENTRY(atomic_dec_32) |
224 ENTRY(atomic_dec_32) |
178 ALTENTRY(atomic_dec_32_nv) |
225 ALTENTRY(atomic_dec_32_nv) |
179 ALTENTRY(atomic_dec_uint) |
226 ALTENTRY(atomic_dec_uint) |
180 ALTENTRY(atomic_dec_uint_nv) |
227 ALTENTRY(atomic_dec_uint_nv) |
181 ALTENTRY(atomic_dec_ulong) |
228 ALTENTRY(atomic_dec_ulong) |
187 SET_SIZE(atomic_dec_uint_nv) |
234 SET_SIZE(atomic_dec_uint_nv) |
188 SET_SIZE(atomic_dec_uint) |
235 SET_SIZE(atomic_dec_uint) |
189 SET_SIZE(atomic_dec_32_nv) |
236 SET_SIZE(atomic_dec_32_nv) |
190 SET_SIZE(atomic_dec_32) |
237 SET_SIZE(atomic_dec_32) |
191 |
238 |
|
239 /* |
|
240 * NOTE: If atomic_add_32 and atomic_add_32_nv are ever |
|
241 * separated, you need to also edit the libc sparc platform |
|
242 * specific mapfile and remove the NODYNSORT attribute |
|
243 * from atomic_add_32_nv. |
|
244 */ |
192 ENTRY(atomic_add_32) |
245 ENTRY(atomic_add_32) |
193 ALTENTRY(atomic_add_32_nv) |
246 ALTENTRY(atomic_add_32_nv) |
194 ALTENTRY(atomic_add_int) |
247 ALTENTRY(atomic_add_int) |
195 ALTENTRY(atomic_add_int_nv) |
248 ALTENTRY(atomic_add_int_nv) |
196 ALTENTRY(atomic_add_ptr) |
249 ALTENTRY(atomic_add_ptr) |
214 SET_SIZE(atomic_add_int_nv) |
267 SET_SIZE(atomic_add_int_nv) |
215 SET_SIZE(atomic_add_int) |
268 SET_SIZE(atomic_add_int) |
216 SET_SIZE(atomic_add_32_nv) |
269 SET_SIZE(atomic_add_32_nv) |
217 SET_SIZE(atomic_add_32) |
270 SET_SIZE(atomic_add_32) |
218 |
271 |
|
272 /* |
|
273 * NOTE: If atomic_inc_64 and atomic_inc_64_nv are ever |
|
274 * separated, you need to also edit the libc sparc platform |
|
275 * specific mapfile and remove the NODYNSORT attribute |
|
276 * from atomic_inc_64_nv. |
|
277 */ |
219 ENTRY(atomic_inc_64) |
278 ENTRY(atomic_inc_64) |
220 ALTENTRY(atomic_inc_64_nv) |
279 ALTENTRY(atomic_inc_64_nv) |
221 ba add_64 |
280 ba add_64 |
222 add %g0, 1, %o1 |
281 add %g0, 1, %o1 |
223 SET_SIZE(atomic_inc_64_nv) |
282 SET_SIZE(atomic_inc_64_nv) |
224 SET_SIZE(atomic_inc_64) |
283 SET_SIZE(atomic_inc_64) |
225 |
284 |
|
285 /* |
|
286 * NOTE: If atomic_dec_64 and atomic_dec_64_nv are ever |
|
287 * separated, you need to also edit the libc sparc platform |
|
288 * specific mapfile and remove the NODYNSORT attribute |
|
289 * from atomic_dec_64_nv. |
|
290 */ |
226 ENTRY(atomic_dec_64) |
291 ENTRY(atomic_dec_64) |
227 ALTENTRY(atomic_dec_64_nv) |
292 ALTENTRY(atomic_dec_64_nv) |
228 ba add_64 |
293 ba add_64 |
229 sub %g0, 1, %o1 |
294 sub %g0, 1, %o1 |
230 SET_SIZE(atomic_dec_64_nv) |
295 SET_SIZE(atomic_dec_64_nv) |
231 SET_SIZE(atomic_dec_64) |
296 SET_SIZE(atomic_dec_64) |
232 |
297 |
|
298 /* |
|
299 * NOTE: If atomic_add_64 and atomic_add_64_nv are ever |
|
300 * separated, you need to also edit the libc sparc platform |
|
301 * specific mapfile and remove the NODYNSORT attribute |
|
302 * from atomic_add_64_nv. |
|
303 */ |
233 ENTRY(atomic_add_64) |
304 ENTRY(atomic_add_64) |
234 ALTENTRY(atomic_add_64_nv) |
305 ALTENTRY(atomic_add_64_nv) |
235 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
306 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
236 srl %o2, 0, %o2 |
307 srl %o2, 0, %o2 |
237 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |
308 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |
247 retl |
318 retl |
248 srlx %o1, 32, %o0 ! return upper 32-bits in %o0 |
319 srlx %o1, 32, %o0 ! return upper 32-bits in %o0 |
249 SET_SIZE(atomic_add_64_nv) |
320 SET_SIZE(atomic_add_64_nv) |
250 SET_SIZE(atomic_add_64) |
321 SET_SIZE(atomic_add_64) |
251 |
322 |
|
323 /* |
|
324 * NOTE: If atomic_or_8 and atomic_or_8_nv are ever |
|
325 * separated, you need to also edit the libc sparc platform |
|
326 * specific mapfile and remove the NODYNSORT attribute |
|
327 * from atomic_or_8_nv. |
|
328 */ |
252 ENTRY(atomic_or_8) |
329 ENTRY(atomic_or_8) |
253 ALTENTRY(atomic_or_8_nv) |
330 ALTENTRY(atomic_or_8_nv) |
254 ALTENTRY(atomic_or_uchar) |
331 ALTENTRY(atomic_or_uchar) |
255 ALTENTRY(atomic_or_uchar_nv) |
332 ALTENTRY(atomic_or_uchar_nv) |
256 and %o0, 0x3, %o4 ! %o4 = byte offset, left-to-right |
333 and %o0, 0x3, %o4 ! %o4 = byte offset, left-to-right |
275 SET_SIZE(atomic_or_uchar_nv) |
352 SET_SIZE(atomic_or_uchar_nv) |
276 SET_SIZE(atomic_or_uchar) |
353 SET_SIZE(atomic_or_uchar) |
277 SET_SIZE(atomic_or_8_nv) |
354 SET_SIZE(atomic_or_8_nv) |
278 SET_SIZE(atomic_or_8) |
355 SET_SIZE(atomic_or_8) |
279 |
356 |
|
357 /* |
|
358 * NOTE: If atomic_or_16 and atomic_or_16_nv are ever |
|
359 * separated, you need to also edit the libc sparc platform |
|
360 * specific mapfile and remove the NODYNSORT attribute |
|
361 * from atomic_or_16_nv. |
|
362 */ |
280 ENTRY(atomic_or_16) |
363 ENTRY(atomic_or_16) |
281 ALTENTRY(atomic_or_16_nv) |
364 ALTENTRY(atomic_or_16_nv) |
282 ALTENTRY(atomic_or_ushort) |
365 ALTENTRY(atomic_or_ushort) |
283 ALTENTRY(atomic_or_ushort_nv) |
366 ALTENTRY(atomic_or_ushort_nv) |
284 and %o0, 0x2, %o4 ! %o4 = byte offset, left-to-right |
367 and %o0, 0x2, %o4 ! %o4 = byte offset, left-to-right |
305 SET_SIZE(atomic_or_ushort_nv) |
388 SET_SIZE(atomic_or_ushort_nv) |
306 SET_SIZE(atomic_or_ushort) |
389 SET_SIZE(atomic_or_ushort) |
307 SET_SIZE(atomic_or_16_nv) |
390 SET_SIZE(atomic_or_16_nv) |
308 SET_SIZE(atomic_or_16) |
391 SET_SIZE(atomic_or_16) |
309 |
392 |
|
393 /* |
|
394 * NOTE: If atomic_or_32 and atomic_or_32_nv are ever |
|
395 * separated, you need to also edit the libc sparc platform |
|
396 * specific mapfile and remove the NODYNSORT attribute |
|
397 * from atomic_or_32_nv. |
|
398 */ |
310 ENTRY(atomic_or_32) |
399 ENTRY(atomic_or_32) |
311 ALTENTRY(atomic_or_32_nv) |
400 ALTENTRY(atomic_or_32_nv) |
312 ALTENTRY(atomic_or_uint) |
401 ALTENTRY(atomic_or_uint) |
313 ALTENTRY(atomic_or_uint_nv) |
402 ALTENTRY(atomic_or_uint_nv) |
314 ALTENTRY(atomic_or_ulong) |
403 ALTENTRY(atomic_or_ulong) |
327 SET_SIZE(atomic_or_uint_nv) |
416 SET_SIZE(atomic_or_uint_nv) |
328 SET_SIZE(atomic_or_uint) |
417 SET_SIZE(atomic_or_uint) |
329 SET_SIZE(atomic_or_32_nv) |
418 SET_SIZE(atomic_or_32_nv) |
330 SET_SIZE(atomic_or_32) |
419 SET_SIZE(atomic_or_32) |
331 |
420 |
|
421 /* |
|
422 * NOTE: If atomic_or_64 and atomic_or_64_nv are ever |
|
423 * separated, you need to also edit the libc sparc platform |
|
424 * specific mapfile and remove the NODYNSORT attribute |
|
425 * from atomic_or_64_nv. |
|
426 */ |
332 ENTRY(atomic_or_64) |
427 ENTRY(atomic_or_64) |
333 ALTENTRY(atomic_or_64_nv) |
428 ALTENTRY(atomic_or_64_nv) |
334 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
429 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
335 srl %o2, 0, %o2 |
430 srl %o2, 0, %o2 |
336 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |
431 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |
345 retl |
440 retl |
346 srlx %o1, 32, %o0 ! return upper 32-bits in %o0 |
441 srlx %o1, 32, %o0 ! return upper 32-bits in %o0 |
347 SET_SIZE(atomic_or_64_nv) |
442 SET_SIZE(atomic_or_64_nv) |
348 SET_SIZE(atomic_or_64) |
443 SET_SIZE(atomic_or_64) |
349 |
444 |
|
445 /* |
|
446 * NOTE: If atomic_and_8 and atomic_and_8_nv are ever |
|
447 * separated, you need to also edit the libc sparc platform |
|
448 * specific mapfile and remove the NODYNSORT attribute |
|
449 * from atomic_and_8_nv. |
|
450 */ |
350 ENTRY(atomic_and_8) |
451 ENTRY(atomic_and_8) |
351 ALTENTRY(atomic_and_8_nv) |
452 ALTENTRY(atomic_and_8_nv) |
352 ALTENTRY(atomic_and_uchar) |
453 ALTENTRY(atomic_and_uchar) |
353 ALTENTRY(atomic_and_uchar_nv) |
454 ALTENTRY(atomic_and_uchar_nv) |
354 and %o0, 0x3, %o4 ! %o4 = byte offset, left-to-right |
455 and %o0, 0x3, %o4 ! %o4 = byte offset, left-to-right |
373 SET_SIZE(atomic_and_uchar_nv) |
474 SET_SIZE(atomic_and_uchar_nv) |
374 SET_SIZE(atomic_and_uchar) |
475 SET_SIZE(atomic_and_uchar) |
375 SET_SIZE(atomic_and_8_nv) |
476 SET_SIZE(atomic_and_8_nv) |
376 SET_SIZE(atomic_and_8) |
477 SET_SIZE(atomic_and_8) |
377 |
478 |
|
479 /* |
|
480 * NOTE: If atomic_and_16 and atomic_and_16_nv are ever |
|
481 * separated, you need to also edit the libc sparc platform |
|
482 * specific mapfile and remove the NODYNSORT attribute |
|
483 * from atomic_and_16_nv. |
|
484 */ |
378 ENTRY(atomic_and_16) |
485 ENTRY(atomic_and_16) |
379 ALTENTRY(atomic_and_16_nv) |
486 ALTENTRY(atomic_and_16_nv) |
380 ALTENTRY(atomic_and_ushort) |
487 ALTENTRY(atomic_and_ushort) |
381 ALTENTRY(atomic_and_ushort_nv) |
488 ALTENTRY(atomic_and_ushort_nv) |
382 and %o0, 0x2, %o4 ! %o4 = byte offset, left-to-right |
489 and %o0, 0x2, %o4 ! %o4 = byte offset, left-to-right |
403 SET_SIZE(atomic_and_ushort_nv) |
510 SET_SIZE(atomic_and_ushort_nv) |
404 SET_SIZE(atomic_and_ushort) |
511 SET_SIZE(atomic_and_ushort) |
405 SET_SIZE(atomic_and_16_nv) |
512 SET_SIZE(atomic_and_16_nv) |
406 SET_SIZE(atomic_and_16) |
513 SET_SIZE(atomic_and_16) |
407 |
514 |
|
515 /* |
|
516 * NOTE: If atomic_and_32 and atomic_and_32_nv are ever |
|
517 * separated, you need to also edit the libc sparc platform |
|
518 * specific mapfile and remove the NODYNSORT attribute |
|
519 * from atomic_and_32_nv. |
|
520 */ |
408 ENTRY(atomic_and_32) |
521 ENTRY(atomic_and_32) |
409 ALTENTRY(atomic_and_32_nv) |
522 ALTENTRY(atomic_and_32_nv) |
410 ALTENTRY(atomic_and_uint) |
523 ALTENTRY(atomic_and_uint) |
411 ALTENTRY(atomic_and_uint_nv) |
524 ALTENTRY(atomic_and_uint_nv) |
412 ALTENTRY(atomic_and_ulong) |
525 ALTENTRY(atomic_and_ulong) |
425 SET_SIZE(atomic_and_uint_nv) |
538 SET_SIZE(atomic_and_uint_nv) |
426 SET_SIZE(atomic_and_uint) |
539 SET_SIZE(atomic_and_uint) |
427 SET_SIZE(atomic_and_32_nv) |
540 SET_SIZE(atomic_and_32_nv) |
428 SET_SIZE(atomic_and_32) |
541 SET_SIZE(atomic_and_32) |
429 |
542 |
|
543 /* |
|
544 * NOTE: If atomic_and_64 and atomic_and_64_nv are ever |
|
545 * separated, you need to also edit the libc sparc platform |
|
546 * specific mapfile and remove the NODYNSORT attribute |
|
547 * from atomic_and_64_nv. |
|
548 */ |
430 ENTRY(atomic_and_64) |
549 ENTRY(atomic_and_64) |
431 ALTENTRY(atomic_and_64_nv) |
550 ALTENTRY(atomic_and_64_nv) |
432 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
551 sllx %o1, 32, %o1 ! upper 32 in %o1, lower in %o2 |
433 srl %o2, 0, %o2 |
552 srl %o2, 0, %o2 |
434 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |
553 add %o1, %o2, %o1 ! convert 2 32-bit args into 1 64-bit |