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_or_uchar)
240 SET_SIZE(atomic_or_uchar)
241 SET_SIZE(atomic_or_8)
244 ALTENTRY(atomic_or_ushort)
248 SET_SIZE(atomic_or_ushort)
249 SET_SIZE(atomic_or_16)
252 ALTENTRY(atomic_or_uint)
256 SET_SIZE(atomic_or_uint)
257 SET_SIZE(atomic_or_32)
260 ALTENTRY(atomic_or_ulong)
264 SET_SIZE(atomic_or_ulong)
265 SET_SIZE(atomic_or_64)
268 ALTENTRY(atomic_and_uchar)
272 SET_SIZE(atomic_and_uchar)
273 SET_SIZE(atomic_and_8)
276 ALTENTRY(atomic_and_ushort)
280 SET_SIZE(atomic_and_ushort)
281 SET_SIZE(atomic_and_16)
284 ALTENTRY(atomic_and_uint)
288 SET_SIZE(atomic_and_uint)
289 SET_SIZE(atomic_and_32)
292 ALTENTRY(atomic_and_ulong)
296 SET_SIZE(atomic_and_ulong)
297 SET_SIZE(atomic_and_64)
299 ENTRY(atomic_add_8_nv)
300 ALTENTRY(atomic_add_char_nv)
310 SET_SIZE(atomic_add_char_nv)
311 SET_SIZE(atomic_add_8_nv)
313 ENTRY(atomic_add_16_nv)
314 ALTENTRY(atomic_add_short_nv)
324 SET_SIZE(atomic_add_short_nv)
325 SET_SIZE(atomic_add_16_nv)
327 ENTRY(atomic_add_32_nv)
328 ALTENTRY(atomic_add_int_nv)
334 cmpxchgl %ecx, (%rdi)
338 SET_SIZE(atomic_add_int_nv)
339 SET_SIZE(atomic_add_32_nv)
341 ENTRY(atomic_add_64_nv)
342 ALTENTRY(atomic_add_ptr_nv)
343 ALTENTRY(atomic_add_long_nv)
349 cmpxchgq %rcx, (%rdi)
353 SET_SIZE(atomic_add_long_nv)
354 SET_SIZE(atomic_add_ptr_nv)
355 SET_SIZE(atomic_add_64_nv)
357 ENTRY(atomic_and_8_nv)
358 ALTENTRY(atomic_and_uchar_nv)
368 SET_SIZE(atomic_and_uchar_nv)
369 SET_SIZE(atomic_and_8_nv)
371 ENTRY(atomic_and_16_nv)
372 ALTENTRY(atomic_and_ushort_nv)
382 SET_SIZE(atomic_and_ushort_nv)
383 SET_SIZE(atomic_and_16_nv)
385 ENTRY(atomic_and_32_nv)
386 ALTENTRY(atomic_and_uint_nv)
392 cmpxchgl %ecx, (%rdi)
396 SET_SIZE(atomic_and_uint_nv)
397 SET_SIZE(atomic_and_32_nv)
399 ENTRY(atomic_and_64_nv)
400 ALTENTRY(atomic_and_ulong_nv)
406 cmpxchgq %rcx, (%rdi)
410 SET_SIZE(atomic_and_ulong_nv)
411 SET_SIZE(atomic_and_64_nv)
413 ENTRY(atomic_or_8_nv)
414 ALTENTRY(atomic_or_uchar_nv)
424 SET_SIZE(atomic_and_uchar_nv)
425 SET_SIZE(atomic_and_8_nv)
427 ENTRY(atomic_or_16_nv)
428 ALTENTRY(atomic_or_ushort_nv)
438 SET_SIZE(atomic_or_ushort_nv)
439 SET_SIZE(atomic_or_16_nv)
441 ENTRY(atomic_or_32_nv)
442 ALTENTRY(atomic_or_uint_nv)
448 cmpxchgl %ecx, (%rdi)
452 SET_SIZE(atomic_or_uint_nv)
453 SET_SIZE(atomic_or_32_nv)
455 ENTRY(atomic_or_64_nv)
456 ALTENTRY(atomic_or_ulong_nv)
462 cmpxchgq %rcx, (%rdi)
466 SET_SIZE(atomic_or_ulong_nv)
467 SET_SIZE(atomic_or_64_nv)
470 ALTENTRY(atomic_cas_uchar)
475 SET_SIZE(atomic_cas_uchar)
476 SET_SIZE(atomic_cas_8)
479 ALTENTRY(atomic_cas_ushort)
484 SET_SIZE(atomic_cas_ushort)
485 SET_SIZE(atomic_cas_16)
488 ALTENTRY(atomic_cas_uint)
491 cmpxchgl %edx, (%rdi)
493 SET_SIZE(atomic_cas_uint)
494 SET_SIZE(atomic_cas_32)
497 ALTENTRY(atomic_cas_ulong)
498 ALTENTRY(atomic_cas_ptr)
501 cmpxchgq %rdx, (%rdi)
503 SET_SIZE(atomic_cas_ptr)
504 SET_SIZE(atomic_cas_ulong)
505 SET_SIZE(atomic_cas_64)
508 ALTENTRY(atomic_swap_uchar)
513 SET_SIZE(atomic_swap_uchar)
514 SET_SIZE(atomic_swap_8)
516 ENTRY(atomic_swap_16)
517 ALTENTRY(atomic_swap_ushort)
522 SET_SIZE(atomic_swap_ushort)
523 SET_SIZE(atomic_swap_16)
525 ENTRY(atomic_swap_32)
526 ALTENTRY(atomic_swap_uint)
531 SET_SIZE(atomic_swap_uint)
532 SET_SIZE(atomic_swap_32)
534 ENTRY(atomic_swap_64)
535 ALTENTRY(atomic_swap_ulong)
536 ALTENTRY(atomic_swap_ptr)
541 SET_SIZE(atomic_swap_ptr)
542 SET_SIZE(atomic_swap_ulong)
543 SET_SIZE(atomic_swap_64)
545 ENTRY(atomic_set_long_excl)
553 SET_SIZE(atomic_set_long_excl)
555 ENTRY(atomic_clear_long_excl)
563 SET_SIZE(atomic_clear_long_excl)
566 * NOTE: membar_enter, and membar_exit are identical routines.
567 * We define them separately, instead of using an ALTENTRY
568 * definitions to alias them together, so that DTrace and
569 * debuggers will see a unique address for them, allowing
570 * more accurate tracing.
576 SET_SIZE(membar_enter)
581 SET_SIZE(membar_exit)
583 ENTRY(membar_producer)
586 SET_SIZE(membar_producer)
588 ENTRY(membar_consumer)
591 SET_SIZE(membar_consumer)
594 .section .note.GNU-stack,"",%progbits