4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 .ident "%Z%%M% %I% %E% SMI"
31 #include <ia32/sys/asm_linkage.h>
34 ALTENTRY(atomic_inc_uchar)
39 SET_SIZE(atomic_inc_uchar)
40 SET_SIZE(atomic_inc_8)
43 ALTENTRY(atomic_inc_ushort)
48 SET_SIZE(atomic_inc_ushort)
49 SET_SIZE(atomic_inc_16)
52 ALTENTRY(atomic_inc_uint)
53 ALTENTRY(atomic_inc_ulong)
58 SET_SIZE(atomic_inc_ulong)
59 SET_SIZE(atomic_inc_uint)
60 SET_SIZE(atomic_inc_32)
62 ENTRY(atomic_inc_8_nv)
63 ALTENTRY(atomic_inc_uchar_nv)
73 SET_SIZE(atomic_inc_uchar_nv)
74 SET_SIZE(atomic_inc_8_nv)
76 ENTRY(atomic_inc_16_nv)
77 ALTENTRY(atomic_inc_ushort_nv)
87 SET_SIZE(atomic_inc_ushort_nv)
88 SET_SIZE(atomic_inc_16_nv)
90 ENTRY(atomic_inc_32_nv)
91 ALTENTRY(atomic_inc_uint_nv)
92 ALTENTRY(atomic_inc_ulong_nv)
102 SET_SIZE(atomic_inc_ulong_nv)
103 SET_SIZE(atomic_inc_uint_nv)
104 SET_SIZE(atomic_inc_32_nv)
107 * NOTE: If atomic_inc_64 and atomic_inc_64_nv are ever
108 * separated, you need to also edit the libc i386 platform
109 * specific mapfile and remove the NODYNSORT attribute
110 * from atomic_inc_64_nv.
113 ALTENTRY(atomic_inc_64_nv)
133 SET_SIZE(atomic_inc_64_nv)
134 SET_SIZE(atomic_inc_64)
137 ALTENTRY(atomic_dec_uchar)
142 SET_SIZE(atomic_dec_uchar)
143 SET_SIZE(atomic_dec_8)
146 ALTENTRY(atomic_dec_ushort)
151 SET_SIZE(atomic_dec_ushort)
152 SET_SIZE(atomic_dec_16)
155 ALTENTRY(atomic_dec_uint)
156 ALTENTRY(atomic_dec_ulong)
161 SET_SIZE(atomic_dec_ulong)
162 SET_SIZE(atomic_dec_uint)
163 SET_SIZE(atomic_dec_32)
165 ENTRY(atomic_dec_8_nv)
166 ALTENTRY(atomic_dec_uchar_nv)
176 SET_SIZE(atomic_dec_uchar_nv)
177 SET_SIZE(atomic_dec_8_nv)
179 ENTRY(atomic_dec_16_nv)
180 ALTENTRY(atomic_dec_ushort_nv)
190 SET_SIZE(atomic_dec_ushort_nv)
191 SET_SIZE(atomic_dec_16_nv)
193 ENTRY(atomic_dec_32_nv)
194 ALTENTRY(atomic_dec_uint_nv)
195 ALTENTRY(atomic_dec_ulong_nv)
201 cmpxchgl %ecx, (%edx)
205 SET_SIZE(atomic_dec_ulong_nv)
206 SET_SIZE(atomic_dec_uint_nv)
207 SET_SIZE(atomic_dec_32_nv)
210 * NOTE: If atomic_dec_64 and atomic_dec_64_nv are ever
211 * separated, it is important to edit the libc i386 platform
212 * specific mapfile and remove the NODYNSORT attribute
213 * from atomic_dec_64_nv.
216 ALTENTRY(atomic_dec_64_nv)
237 SET_SIZE(atomic_dec_64_nv)
238 SET_SIZE(atomic_dec_64)
241 ALTENTRY(atomic_add_char)
247 SET_SIZE(atomic_add_char)
248 SET_SIZE(atomic_add_8)
251 ALTENTRY(atomic_add_short)
257 SET_SIZE(atomic_add_short)
258 SET_SIZE(atomic_add_16)
261 ALTENTRY(atomic_add_int)
262 ALTENTRY(atomic_add_ptr)
263 ALTENTRY(atomic_add_long)
269 SET_SIZE(atomic_add_long)
270 SET_SIZE(atomic_add_ptr)
271 SET_SIZE(atomic_add_int)
272 SET_SIZE(atomic_add_32)
275 ALTENTRY(atomic_or_uchar)
281 SET_SIZE(atomic_or_uchar)
282 SET_SIZE(atomic_or_8)
285 ALTENTRY(atomic_or_ushort)
291 SET_SIZE(atomic_or_ushort)
292 SET_SIZE(atomic_or_16)
295 ALTENTRY(atomic_or_uint)
296 ALTENTRY(atomic_or_ulong)
302 SET_SIZE(atomic_or_ulong)
303 SET_SIZE(atomic_or_uint)
304 SET_SIZE(atomic_or_32)
307 ALTENTRY(atomic_and_uchar)
313 SET_SIZE(atomic_and_uchar)
314 SET_SIZE(atomic_and_8)
317 ALTENTRY(atomic_and_ushort)
323 SET_SIZE(atomic_and_ushort)
324 SET_SIZE(atomic_and_16)
327 ALTENTRY(atomic_and_uint)
328 ALTENTRY(atomic_and_ulong)
334 SET_SIZE(atomic_and_ulong)
335 SET_SIZE(atomic_and_uint)
336 SET_SIZE(atomic_and_32)
338 ENTRY(atomic_add_8_nv)
339 ALTENTRY(atomic_add_char_nv)
350 SET_SIZE(atomic_add_char_nv)
351 SET_SIZE(atomic_add_8_nv)
353 ENTRY(atomic_add_16_nv)
354 ALTENTRY(atomic_add_short_nv)
365 SET_SIZE(atomic_add_short_nv)
366 SET_SIZE(atomic_add_16_nv)
368 ENTRY(atomic_add_32_nv)
369 ALTENTRY(atomic_add_int_nv)
370 ALTENTRY(atomic_add_ptr_nv)
371 ALTENTRY(atomic_add_long_nv)
378 cmpxchgl %ecx, (%edx)
382 SET_SIZE(atomic_add_long_nv)
383 SET_SIZE(atomic_add_ptr_nv)
384 SET_SIZE(atomic_add_int_nv)
385 SET_SIZE(atomic_add_32_nv)
388 * NOTE: If atomic_add_64 and atomic_add_64_nv are ever
389 * separated, it is important to edit the libc i386 platform
390 * specific mapfile and remove the NODYNSORT attribute
391 * from atomic_add_64_nv.
394 ALTENTRY(atomic_add_64_nv)
413 SET_SIZE(atomic_add_64_nv)
414 SET_SIZE(atomic_add_64)
416 ENTRY(atomic_or_8_nv)
417 ALTENTRY(atomic_or_uchar_nv)
428 SET_SIZE(atomic_or_uchar_nv)
429 SET_SIZE(atomic_or_8_nv)
431 ENTRY(atomic_or_16_nv)
432 ALTENTRY(atomic_or_ushort_nv)
443 SET_SIZE(atomic_or_ushort_nv)
444 SET_SIZE(atomic_or_16_nv)
446 ENTRY(atomic_or_32_nv)
447 ALTENTRY(atomic_or_uint_nv)
448 ALTENTRY(atomic_or_ulong_nv)
455 cmpxchgl %ecx, (%edx)
459 SET_SIZE(atomic_or_ulong_nv)
460 SET_SIZE(atomic_or_uint_nv)
461 SET_SIZE(atomic_or_32_nv)
464 * NOTE: If atomic_or_64 and atomic_or_64_nv are ever
465 * separated, it is important to edit the libc i386 platform
466 * specific mapfile and remove the NODYNSORT attribute
467 * from atomic_or_64_nv.
470 ALTENTRY(atomic_or_64_nv)
489 SET_SIZE(atomic_or_64_nv)
490 SET_SIZE(atomic_or_64)
492 ENTRY(atomic_and_8_nv)
493 ALTENTRY(atomic_and_uchar_nv)
504 SET_SIZE(atomic_and_uchar_nv)
505 SET_SIZE(atomic_and_8_nv)
507 ENTRY(atomic_and_16_nv)
508 ALTENTRY(atomic_and_ushort_nv)
519 SET_SIZE(atomic_and_ushort_nv)
520 SET_SIZE(atomic_and_16_nv)
522 ENTRY(atomic_and_32_nv)
523 ALTENTRY(atomic_and_uint_nv)
524 ALTENTRY(atomic_and_ulong_nv)
531 cmpxchgl %ecx, (%edx)
535 SET_SIZE(atomic_and_ulong_nv)
536 SET_SIZE(atomic_and_uint_nv)
537 SET_SIZE(atomic_and_32_nv)
540 * NOTE: If atomic_and_64 and atomic_and_64_nv are ever
541 * separated, it is important to edit the libc i386 platform
542 * specific mapfile and remove the NODYNSORT attribute
543 * from atomic_and_64_nv.
546 ALTENTRY(atomic_and_64_nv)
565 SET_SIZE(atomic_and_64_nv)
566 SET_SIZE(atomic_and_64)
569 ALTENTRY(atomic_cas_uchar)
576 SET_SIZE(atomic_cas_uchar)
577 SET_SIZE(atomic_cas_8)
580 ALTENTRY(atomic_cas_ushort)
587 SET_SIZE(atomic_cas_ushort)
588 SET_SIZE(atomic_cas_16)
591 ALTENTRY(atomic_cas_uint)
592 ALTENTRY(atomic_cas_ulong)
593 ALTENTRY(atomic_cas_ptr)
598 cmpxchgl %ecx, (%edx)
600 SET_SIZE(atomic_cas_ptr)
601 SET_SIZE(atomic_cas_ulong)
602 SET_SIZE(atomic_cas_uint)
603 SET_SIZE(atomic_cas_32)
618 SET_SIZE(atomic_cas_64)
621 ALTENTRY(atomic_swap_uchar)
627 SET_SIZE(atomic_swap_uchar)
628 SET_SIZE(atomic_swap_8)
630 ENTRY(atomic_swap_16)
631 ALTENTRY(atomic_swap_ushort)
637 SET_SIZE(atomic_swap_ushort)
638 SET_SIZE(atomic_swap_16)
640 ENTRY(atomic_swap_32)
641 ALTENTRY(atomic_swap_uint)
642 ALTENTRY(atomic_swap_ptr)
643 ALTENTRY(atomic_swap_ulong)
649 SET_SIZE(atomic_swap_ulong)
650 SET_SIZE(atomic_swap_ptr)
651 SET_SIZE(atomic_swap_uint)
652 SET_SIZE(atomic_swap_32)
654 ENTRY(atomic_swap_64)
669 SET_SIZE(atomic_swap_64)
671 ENTRY(atomic_set_long_excl)
681 SET_SIZE(atomic_set_long_excl)
683 ENTRY(atomic_clear_long_excl)
693 SET_SIZE(atomic_clear_long_excl)
696 * NOTE: membar_enter, membar_exit, membar_producer, and
697 * membar_consumer are all identical routines. We define them
698 * separately, instead of using ALTENTRY definitions to alias them
699 * together, so that DTrace and debuggers will see a unique address
700 * for them, allowing more accurate tracing.
708 SET_SIZE(membar_enter)
714 SET_SIZE(membar_exit)
716 ENTRY(membar_producer)
720 SET_SIZE(membar_producer)
722 ENTRY(membar_consumer)
726 SET_SIZE(membar_consumer)
729 .section .note.GNU-stack,"",%progbits