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)
38 SET_SIZE(atomic_inc_uchar)
39 SET_SIZE(atomic_inc_8)
42 ALTENTRY(atomic_inc_ushort)
46 SET_SIZE(atomic_inc_ushort)
47 SET_SIZE(atomic_inc_16)
50 ALTENTRY(atomic_inc_uint)
54 SET_SIZE(atomic_inc_uint)
55 SET_SIZE(atomic_inc_32)
58 ALTENTRY(atomic_inc_ulong)
62 SET_SIZE(atomic_inc_ulong)
63 SET_SIZE(atomic_inc_64)
65 ENTRY(atomic_inc_8_nv)
66 ALTENTRY(atomic_inc_uchar_nv)
75 SET_SIZE(atomic_inc_uchar_nv)
76 SET_SIZE(atomic_inc_8_nv)
78 ENTRY(atomic_inc_16_nv)
79 ALTENTRY(atomic_inc_ushort_nv)
88 SET_SIZE(atomic_inc_ushort_nv)
89 SET_SIZE(atomic_inc_16_nv)
91 ENTRY(atomic_inc_32_nv)
92 ALTENTRY(atomic_inc_uint_nv)
101 SET_SIZE(atomic_inc_uint_nv)
102 SET_SIZE(atomic_inc_32_nv)
104 ENTRY(atomic_inc_64_nv)
105 ALTENTRY(atomic_inc_ulong_nv)
110 cmpxchgq %rcx, (%rdi)
114 SET_SIZE(atomic_inc_ulong_nv)
115 SET_SIZE(atomic_inc_64_nv)
118 ALTENTRY(atomic_dec_uchar)
122 SET_SIZE(atomic_dec_uchar)
123 SET_SIZE(atomic_dec_8)
126 ALTENTRY(atomic_dec_ushort)
130 SET_SIZE(atomic_dec_ushort)
131 SET_SIZE(atomic_dec_16)
134 ALTENTRY(atomic_dec_uint)
138 SET_SIZE(atomic_dec_uint)
139 SET_SIZE(atomic_dec_32)
142 ALTENTRY(atomic_dec_ulong)
146 SET_SIZE(atomic_dec_ulong)
147 SET_SIZE(atomic_dec_64)
149 ENTRY(atomic_dec_8_nv)
150 ALTENTRY(atomic_dec_uchar_nv)
159 SET_SIZE(atomic_dec_uchar_nv)
160 SET_SIZE(atomic_dec_8_nv)
162 ENTRY(atomic_dec_16_nv)
163 ALTENTRY(atomic_dec_ushort_nv)
172 SET_SIZE(atomic_dec_ushort_nv)
173 SET_SIZE(atomic_dec_16_nv)
175 ENTRY(atomic_dec_32_nv)
176 ALTENTRY(atomic_dec_uint_nv)
181 cmpxchgl %ecx, (%rdi)
185 SET_SIZE(atomic_dec_uint_nv)
186 SET_SIZE(atomic_dec_32_nv)
188 ENTRY(atomic_dec_64_nv)
189 ALTENTRY(atomic_dec_ulong_nv)
194 cmpxchgq %rcx, (%rdi)
198 SET_SIZE(atomic_dec_ulong_nv)
199 SET_SIZE(atomic_dec_64_nv)
202 ALTENTRY(atomic_add_char)
206 SET_SIZE(atomic_add_char)
207 SET_SIZE(atomic_add_8)
210 ALTENTRY(atomic_add_short)
214 SET_SIZE(atomic_add_short)
215 SET_SIZE(atomic_add_16)
218 ALTENTRY(atomic_add_int)
222 SET_SIZE(atomic_add_int)
223 SET_SIZE(atomic_add_32)
226 ALTENTRY(atomic_add_ptr)
227 ALTENTRY(atomic_add_long)
231 SET_SIZE(atomic_add_long)
232 SET_SIZE(atomic_add_ptr)
233 SET_SIZE(atomic_add_64)
236 ALTENTRY(atomic_sub_char)
240 SET_SIZE(atomic_sub_char)
241 SET_SIZE(atomic_sub_8)
244 ALTENTRY(atomic_sub_short)
248 SET_SIZE(atomic_sub_short)
249 SET_SIZE(atomic_sub_16)
252 ALTENTRY(atomic_sub_int)
256 SET_SIZE(atomic_sub_int)
257 SET_SIZE(atomic_sub_32)
260 ALTENTRY(atomic_sub_ptr)
261 ALTENTRY(atomic_sub_long)
265 SET_SIZE(atomic_sub_long)
266 SET_SIZE(atomic_sub_ptr)
267 SET_SIZE(atomic_sub_64)
270 ALTENTRY(atomic_or_uchar)
274 SET_SIZE(atomic_or_uchar)
275 SET_SIZE(atomic_or_8)
278 ALTENTRY(atomic_or_ushort)
282 SET_SIZE(atomic_or_ushort)
283 SET_SIZE(atomic_or_16)
286 ALTENTRY(atomic_or_uint)
290 SET_SIZE(atomic_or_uint)
291 SET_SIZE(atomic_or_32)
294 ALTENTRY(atomic_or_ulong)
298 SET_SIZE(atomic_or_ulong)
299 SET_SIZE(atomic_or_64)
302 ALTENTRY(atomic_and_uchar)
306 SET_SIZE(atomic_and_uchar)
307 SET_SIZE(atomic_and_8)
310 ALTENTRY(atomic_and_ushort)
314 SET_SIZE(atomic_and_ushort)
315 SET_SIZE(atomic_and_16)
318 ALTENTRY(atomic_and_uint)
322 SET_SIZE(atomic_and_uint)
323 SET_SIZE(atomic_and_32)
326 ALTENTRY(atomic_and_ulong)
330 SET_SIZE(atomic_and_ulong)
331 SET_SIZE(atomic_and_64)
333 ENTRY(atomic_add_8_nv)
334 ALTENTRY(atomic_add_char_nv)
344 SET_SIZE(atomic_add_char_nv)
345 SET_SIZE(atomic_add_8_nv)
347 ENTRY(atomic_add_16_nv)
348 ALTENTRY(atomic_add_short_nv)
358 SET_SIZE(atomic_add_short_nv)
359 SET_SIZE(atomic_add_16_nv)
361 ENTRY(atomic_add_32_nv)
362 ALTENTRY(atomic_add_int_nv)
368 cmpxchgl %ecx, (%rdi)
372 SET_SIZE(atomic_add_int_nv)
373 SET_SIZE(atomic_add_32_nv)
375 ENTRY(atomic_add_64_nv)
376 ALTENTRY(atomic_add_ptr_nv)
377 ALTENTRY(atomic_add_long_nv)
383 cmpxchgq %rcx, (%rdi)
387 SET_SIZE(atomic_add_long_nv)
388 SET_SIZE(atomic_add_ptr_nv)
389 SET_SIZE(atomic_add_64_nv)
391 ENTRY(atomic_sub_8_nv)
392 ALTENTRY(atomic_sub_char_nv)
402 SET_SIZE(atomic_sub_char_nv)
403 SET_SIZE(atomic_sub_8_nv)
405 ENTRY(atomic_sub_16_nv)
406 ALTENTRY(atomic_sub_short_nv)
416 SET_SIZE(atomic_sub_short_nv)
417 SET_SIZE(atomic_sub_16_nv)
419 ENTRY(atomic_sub_32_nv)
420 ALTENTRY(atomic_sub_int_nv)
426 cmpxchgl %ecx, (%rdi)
430 SET_SIZE(atomic_sub_int_nv)
431 SET_SIZE(atomic_sub_32_nv)
433 ENTRY(atomic_sub_64_nv)
434 ALTENTRY(atomic_sub_ptr_nv)
435 ALTENTRY(atomic_sub_long_nv)
441 cmpxchgq %rcx, (%rdi)
445 SET_SIZE(atomic_sub_long_nv)
446 SET_SIZE(atomic_sub_ptr_nv)
447 SET_SIZE(atomic_sub_64_nv)
449 ENTRY(atomic_and_8_nv)
450 ALTENTRY(atomic_and_uchar_nv)
460 SET_SIZE(atomic_and_uchar_nv)
461 SET_SIZE(atomic_and_8_nv)
463 ENTRY(atomic_and_16_nv)
464 ALTENTRY(atomic_and_ushort_nv)
474 SET_SIZE(atomic_and_ushort_nv)
475 SET_SIZE(atomic_and_16_nv)
477 ENTRY(atomic_and_32_nv)
478 ALTENTRY(atomic_and_uint_nv)
484 cmpxchgl %ecx, (%rdi)
488 SET_SIZE(atomic_and_uint_nv)
489 SET_SIZE(atomic_and_32_nv)
491 ENTRY(atomic_and_64_nv)
492 ALTENTRY(atomic_and_ulong_nv)
498 cmpxchgq %rcx, (%rdi)
502 SET_SIZE(atomic_and_ulong_nv)
503 SET_SIZE(atomic_and_64_nv)
505 ENTRY(atomic_or_8_nv)
506 ALTENTRY(atomic_or_uchar_nv)
516 SET_SIZE(atomic_and_uchar_nv)
517 SET_SIZE(atomic_and_8_nv)
519 ENTRY(atomic_or_16_nv)
520 ALTENTRY(atomic_or_ushort_nv)
530 SET_SIZE(atomic_or_ushort_nv)
531 SET_SIZE(atomic_or_16_nv)
533 ENTRY(atomic_or_32_nv)
534 ALTENTRY(atomic_or_uint_nv)
540 cmpxchgl %ecx, (%rdi)
544 SET_SIZE(atomic_or_uint_nv)
545 SET_SIZE(atomic_or_32_nv)
547 ENTRY(atomic_or_64_nv)
548 ALTENTRY(atomic_or_ulong_nv)
554 cmpxchgq %rcx, (%rdi)
558 SET_SIZE(atomic_or_ulong_nv)
559 SET_SIZE(atomic_or_64_nv)
562 ALTENTRY(atomic_cas_uchar)
567 SET_SIZE(atomic_cas_uchar)
568 SET_SIZE(atomic_cas_8)
571 ALTENTRY(atomic_cas_ushort)
576 SET_SIZE(atomic_cas_ushort)
577 SET_SIZE(atomic_cas_16)
580 ALTENTRY(atomic_cas_uint)
583 cmpxchgl %edx, (%rdi)
585 SET_SIZE(atomic_cas_uint)
586 SET_SIZE(atomic_cas_32)
589 ALTENTRY(atomic_cas_ulong)
590 ALTENTRY(atomic_cas_ptr)
593 cmpxchgq %rdx, (%rdi)
595 SET_SIZE(atomic_cas_ptr)
596 SET_SIZE(atomic_cas_ulong)
597 SET_SIZE(atomic_cas_64)
600 ALTENTRY(atomic_swap_uchar)
605 SET_SIZE(atomic_swap_uchar)
606 SET_SIZE(atomic_swap_8)
608 ENTRY(atomic_swap_16)
609 ALTENTRY(atomic_swap_ushort)
614 SET_SIZE(atomic_swap_ushort)
615 SET_SIZE(atomic_swap_16)
617 ENTRY(atomic_swap_32)
618 ALTENTRY(atomic_swap_uint)
623 SET_SIZE(atomic_swap_uint)
624 SET_SIZE(atomic_swap_32)
626 ENTRY(atomic_swap_64)
627 ALTENTRY(atomic_swap_ulong)
628 ALTENTRY(atomic_swap_ptr)
633 SET_SIZE(atomic_swap_ptr)
634 SET_SIZE(atomic_swap_ulong)
635 SET_SIZE(atomic_swap_64)
637 ENTRY(atomic_set_long_excl)
645 SET_SIZE(atomic_set_long_excl)
647 ENTRY(atomic_clear_long_excl)
655 SET_SIZE(atomic_clear_long_excl)
658 * NOTE: membar_enter, and membar_exit are identical routines.
659 * We define them separately, instead of using an ALTENTRY
660 * definitions to alias them together, so that DTrace and
661 * debuggers will see a unique address for them, allowing
662 * more accurate tracing.
668 SET_SIZE(membar_enter)
673 SET_SIZE(membar_exit)
675 ENTRY(membar_producer)
678 SET_SIZE(membar_producer)
680 ENTRY(membar_consumer)
683 SET_SIZE(membar_consumer)
686 .section .note.GNU-stack,"",%progbits