Home | History | Annotate | Line # | Download | only in atomic
atomic.S revision 1.16
      1  1.16  joerg /*	$NetBSD: atomic.S,v 1.16 2011/01/12 23:12:10 joerg Exp $	*/
      2   1.1     ad 
      3   1.1     ad /*-
      4   1.1     ad  * Copyright (c) 2007 The NetBSD Foundation, Inc.
      5   1.1     ad  * All rights reserved.
      6   1.1     ad  *
      7   1.1     ad  * This code is derived from software contributed to The NetBSD Foundation
      8   1.1     ad  * by Jason R. Thorpe, and by Andrew Doran.
      9   1.1     ad  *
     10   1.1     ad  * Redistribution and use in source and binary forms, with or without
     11   1.1     ad  * modification, are permitted provided that the following conditions
     12   1.1     ad  * are met:
     13   1.1     ad  * 1. Redistributions of source code must retain the above copyright
     14   1.1     ad  *    notice, this list of conditions and the following disclaimer.
     15   1.1     ad  * 2. Redistributions in binary form must reproduce the above copyright
     16   1.1     ad  *    notice, this list of conditions and the following disclaimer in the
     17   1.1     ad  *    documentation and/or other materials provided with the distribution.
     18   1.1     ad  *
     19   1.1     ad  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20   1.1     ad  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21   1.1     ad  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22   1.1     ad  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23   1.1     ad  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24   1.1     ad  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25   1.1     ad  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26   1.1     ad  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27   1.1     ad  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28   1.1     ad  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29   1.1     ad  * POSSIBILITY OF SUCH DAMAGE.
     30   1.1     ad  */
     31   1.1     ad 
     32  1.14  pooka #include <sys/param.h>
     33   1.1     ad #include <machine/asm.h>
     34   1.1     ad 
     35  1.15  pooka #ifdef _KERNEL
     36  1.15  pooka #define	ALIAS(f, t)	STRONG_ALIAS(f,t)
     37  1.15  pooka #else
     38  1.15  pooka #define	ALIAS(f, t)	WEAK_ALIAS(f,t)
     39  1.15  pooka #endif
     40  1.15  pooka 
     41  1.13  pooka #ifdef _HARDKERNEL
     42  1.16  joerg #define	LOCK(n)		.Lpatch ## n:	lock
     43  1.11   yamt #define	ENDLABEL(a)	_ALIGN_TEXT; LABEL(a)
     44   1.1     ad #else
     45   1.1     ad #define	LOCK(n)		lock
     46  1.11   yamt #define	ENDLABEL(a)	/* nothing */
     47   1.1     ad #endif
     48   1.1     ad 
     49   1.1     ad 	.text
     50   1.1     ad 
     51   1.1     ad /* 32-bit */
     52   1.1     ad 
     53  1.12    chs ENTRY(_atomic_add_32)
     54   1.1     ad 	LOCK(1)
     55   1.1     ad 	addl	%esi, (%rdi)
     56   1.1     ad 	ret
     57   1.1     ad 
     58  1.12    chs ENTRY(_atomic_add_32_nv)
     59   1.1     ad 	movl	%esi, %eax
     60   1.1     ad 	LOCK(2)
     61   1.1     ad 	xaddl	%eax, (%rdi)
     62   1.1     ad 	addl	%esi, %eax
     63   1.1     ad 	ret
     64   1.1     ad 
     65  1.12    chs ENTRY(_atomic_and_32)
     66   1.1     ad 	LOCK(3)
     67   1.1     ad 	andl	%esi, (%rdi)
     68   1.1     ad 	ret
     69   1.1     ad 
     70  1.12    chs ENTRY(_atomic_and_32_nv)
     71   1.1     ad 	movl	(%rdi), %eax
     72   1.1     ad 1:
     73   1.1     ad 	movl	%eax, %ecx
     74   1.1     ad 	andl	%esi, %ecx
     75   1.1     ad 	LOCK(4)
     76   1.1     ad 	cmpxchgl %ecx, (%rdi)
     77   1.1     ad 	jnz	1b
     78   1.1     ad 	movl	%ecx, %eax
     79   1.1     ad 	ret
     80   1.1     ad 
     81  1.12    chs ENTRY(_atomic_dec_32)
     82   1.1     ad 	LOCK(5)
     83   1.1     ad 	decl	(%rdi)
     84   1.1     ad 	ret
     85   1.1     ad 
     86  1.12    chs ENTRY(_atomic_dec_32_nv)
     87   1.1     ad 	movl	$-1, %eax
     88   1.1     ad 	LOCK(6)
     89   1.1     ad 	xaddl	%eax, (%rdi)
     90   1.1     ad 	decl	%eax
     91   1.1     ad 	ret
     92   1.1     ad 
     93  1.12    chs ENTRY(_atomic_inc_32)
     94   1.1     ad 	LOCK(7)
     95   1.1     ad 	incl	(%rdi)
     96   1.1     ad 	ret
     97   1.1     ad 
     98  1.12    chs ENTRY(_atomic_inc_32_nv)
     99   1.1     ad 	movl	$1, %eax
    100   1.1     ad 	LOCK(8)
    101   1.1     ad 	xaddl	%eax, (%rdi)
    102   1.1     ad 	incl	%eax
    103   1.1     ad 	ret
    104   1.1     ad 
    105  1.12    chs ENTRY(_atomic_or_32)
    106   1.1     ad 	LOCK(9)
    107   1.1     ad 	orl	%esi, (%rdi)
    108   1.1     ad 	ret
    109   1.1     ad 
    110  1.12    chs ENTRY(_atomic_or_32_nv)
    111   1.1     ad 	movl	(%rdi), %eax
    112   1.1     ad 1:
    113   1.1     ad 	movl	%eax, %ecx
    114   1.1     ad 	orl	%esi, %ecx
    115   1.1     ad 	LOCK(10)
    116   1.1     ad 	cmpxchgl %ecx, (%rdi)
    117   1.1     ad 	jnz	1b
    118   1.1     ad 	movl	%ecx, %eax
    119   1.1     ad 	ret
    120   1.1     ad 
    121  1.12    chs ENTRY(_atomic_swap_32)
    122   1.5     ad 	movl	%esi, %eax
    123   1.5     ad 	xchgl	%eax, (%rdi)
    124   1.1     ad 	ret
    125   1.1     ad 
    126  1.12    chs ENTRY(_atomic_cas_32)
    127   1.1     ad 	movl	%esi, %eax
    128   1.1     ad 	LOCK(12)
    129   1.1     ad 	cmpxchgl %edx, (%rdi)
    130   1.1     ad 	/* %eax now contains the old value */
    131   1.1     ad 	ret
    132   1.1     ad 
    133  1.12    chs ENTRY(_atomic_cas_32_ni)
    134   1.9     ad 	movl	%esi, %eax
    135   1.9     ad 	cmpxchgl %edx, (%rdi)
    136   1.9     ad 	/* %eax now contains the old value */
    137   1.9     ad 	ret
    138   1.9     ad 
    139   1.1     ad /* 64-bit */
    140   1.1     ad 
    141  1.12    chs ENTRY(_atomic_add_64)
    142   1.1     ad 	LOCK(13)
    143   1.1     ad 	addq	%rsi, (%rdi)
    144   1.1     ad 	ret
    145   1.1     ad 
    146  1.12    chs ENTRY(_atomic_add_64_nv)
    147   1.1     ad 	movq	%rsi, %rax
    148   1.1     ad 	LOCK(14)
    149   1.1     ad 	xaddq	%rax, (%rdi)
    150   1.1     ad 	addq	%rsi, %rax
    151   1.1     ad 	ret
    152   1.1     ad 
    153  1.12    chs ENTRY(_atomic_and_64)
    154   1.1     ad 	LOCK(15)
    155   1.1     ad 	andq	%rsi, (%rdi)
    156   1.1     ad 	ret
    157   1.1     ad 
    158  1.12    chs ENTRY(_atomic_and_64_nv)
    159   1.1     ad 	movq	(%rdi), %rax
    160   1.1     ad 1:
    161   1.1     ad 	movq	%rax, %rcx
    162   1.1     ad 	andq	%rsi, %rcx
    163   1.1     ad 	LOCK(16)
    164   1.1     ad 	cmpxchgq %rcx, (%rdi)
    165   1.1     ad 	jnz	1b
    166   1.1     ad 	movq	%rcx, %rax
    167   1.1     ad 	ret
    168   1.1     ad 
    169  1.12    chs ENTRY(_atomic_dec_64)
    170   1.1     ad 	LOCK(17)
    171   1.1     ad 	decq	(%rdi)
    172   1.1     ad 	ret
    173   1.1     ad 
    174  1.12    chs ENTRY(_atomic_dec_64_nv)
    175   1.1     ad 	movq	$-1, %rax
    176   1.1     ad 	LOCK(18)
    177   1.1     ad 	xaddq	%rax, (%rdi)
    178   1.1     ad 	decq	%rax
    179   1.1     ad 	ret
    180   1.1     ad 
    181  1.12    chs ENTRY(_atomic_inc_64)
    182   1.1     ad 	LOCK(19)
    183   1.1     ad 	incq	(%rdi)
    184   1.1     ad 	ret
    185   1.1     ad 
    186  1.12    chs ENTRY(_atomic_inc_64_nv)
    187   1.1     ad 	movq	$1, %rax
    188   1.1     ad 	LOCK(20)
    189   1.1     ad 	xaddq	%rax, (%rdi)
    190   1.1     ad 	incq	%rax
    191   1.1     ad 	ret
    192   1.1     ad 
    193  1.12    chs ENTRY(_atomic_or_64)
    194   1.1     ad 	LOCK(21)
    195   1.1     ad 	orq	%rsi, (%rdi)
    196   1.1     ad 	ret
    197   1.1     ad 
    198  1.12    chs ENTRY(_atomic_or_64_nv)
    199   1.1     ad 	movq	(%rdi), %rax
    200   1.1     ad 1:
    201   1.1     ad 	movq	%rax, %rcx
    202   1.1     ad 	orq	%rsi, %rcx
    203   1.1     ad 	LOCK(22)
    204   1.1     ad 	cmpxchgq %rcx, (%rdi)
    205   1.1     ad 	jnz	1b
    206   1.1     ad 	movq	%rcx, %rax
    207   1.1     ad 	ret
    208   1.1     ad 
    209  1.12    chs ENTRY(_atomic_swap_64)
    210   1.5     ad 	movq	%rsi, %rax
    211   1.5     ad 	xchgq	%rax, (%rdi)
    212   1.1     ad 	ret
    213   1.1     ad 
    214  1.12    chs ENTRY(_atomic_cas_64)
    215   1.1     ad 	movq	%rsi, %rax
    216   1.1     ad 	LOCK(24)
    217   1.7     ad 	cmpxchgq %rdx, (%rdi)
    218   1.1     ad 	/* %eax now contains the old value */
    219   1.1     ad 	ret
    220   1.1     ad 
    221  1.12    chs ENTRY(_atomic_cas_64_ni)
    222   1.9     ad 	movq	%rsi, %rax
    223   1.9     ad 	cmpxchgq %rdx, (%rdi)
    224   1.9     ad 	/* %eax now contains the old value */
    225   1.9     ad 	ret
    226   1.9     ad 
    227   1.1     ad /* memory barriers */
    228   1.1     ad 
    229  1.12    chs ENTRY(_membar_consumer)
    230   1.1     ad 	LOCK(25)
    231   1.1     ad 	addq	$0, -8(%rsp)
    232   1.1     ad 	ret
    233  1.11   yamt ENDLABEL(membar_consumer_end)
    234   1.1     ad 
    235  1.12    chs ENTRY(_membar_producer)
    236   1.1     ad 	/* A store is enough */
    237   1.1     ad 	movq	$0, -8(%rsp)
    238   1.1     ad 	ret
    239  1.11   yamt ENDLABEL(membar_producer_end)
    240   1.1     ad 
    241  1.12    chs ENTRY(_membar_sync)
    242   1.1     ad 	LOCK(26)
    243   1.1     ad 	addq	$0, -8(%rsp)
    244   1.1     ad 	ret
    245  1.11   yamt ENDLABEL(membar_sync_end)
    246   1.1     ad 
    247  1.13  pooka #ifdef _HARDKERNEL
    248  1.12    chs ENTRY(sse2_lfence)
    249   1.1     ad 	lfence
    250   1.1     ad 	ret
    251  1.11   yamt ENDLABEL(sse2_lfence_end)
    252   1.1     ad 
    253  1.12    chs ENTRY(sse2_mfence)
    254   1.1     ad 	mfence
    255   1.1     ad 	ret
    256  1.11   yamt ENDLABEL(sse2_mfence_end)
    257   1.1     ad 
    258   1.1     ad atomic_lockpatch:
    259   1.1     ad 	.globl	atomic_lockpatch
    260   1.2     ad 	.quad	.Lpatch1, .Lpatch2, .Lpatch3, .Lpatch4, .Lpatch5
    261   1.2     ad 	.quad	.Lpatch6, .Lpatch7, .Lpatch8, .Lpatch9, .Lpatch10
    262   1.3     ad 	.quad	.Lpatch12, .Lpatch13, .Lpatch14, .Lpatch15
    263   1.2     ad 	.quad	.Lpatch16, .Lpatch17, .Lpatch18, .Lpatch19, .Lpatch20
    264   1.3     ad 	.quad	.Lpatch21, .Lpatch22, .Lpatch24, .Lpatch25
    265   1.2     ad 	.quad	.Lpatch26, 0
    266  1.13  pooka #endif	/* _HARDKERNEL */
    267   1.1     ad 
    268   1.1     ad ALIAS(atomic_add_32,_atomic_add_32)
    269   1.1     ad ALIAS(atomic_add_64,_atomic_add_64)
    270   1.4     ad ALIAS(atomic_add_int,_atomic_add_32)
    271   1.4     ad ALIAS(atomic_add_long,_atomic_add_64)
    272   1.1     ad ALIAS(atomic_add_ptr,_atomic_add_64)
    273   1.1     ad 
    274   1.1     ad ALIAS(atomic_add_32_nv,_atomic_add_32_nv)
    275   1.1     ad ALIAS(atomic_add_64_nv,_atomic_add_64_nv)
    276   1.4     ad ALIAS(atomic_add_int_nv,_atomic_add_32_nv)
    277   1.4     ad ALIAS(atomic_add_long_nv,_atomic_add_64_nv)
    278   1.1     ad ALIAS(atomic_add_ptr_nv,_atomic_add_64_nv)
    279   1.1     ad 
    280   1.1     ad ALIAS(atomic_and_32,_atomic_and_32)
    281   1.1     ad ALIAS(atomic_and_64,_atomic_and_64)
    282   1.1     ad ALIAS(atomic_and_uint,_atomic_and_32)
    283   1.1     ad ALIAS(atomic_and_ulong,_atomic_and_64)
    284   1.1     ad ALIAS(atomic_and_ptr,_atomic_and_64)
    285   1.1     ad 
    286   1.1     ad ALIAS(atomic_and_32_nv,_atomic_and_32_nv)
    287   1.1     ad ALIAS(atomic_and_64_nv,_atomic_and_64_nv)
    288   1.1     ad ALIAS(atomic_and_uint_nv,_atomic_and_32_nv)
    289   1.1     ad ALIAS(atomic_and_ulong_nv,_atomic_and_64_nv)
    290   1.1     ad ALIAS(atomic_and_ptr_nv,_atomic_and_64_nv)
    291   1.1     ad 
    292   1.1     ad ALIAS(atomic_dec_32,_atomic_dec_32)
    293   1.1     ad ALIAS(atomic_dec_64,_atomic_dec_64)
    294   1.1     ad ALIAS(atomic_dec_uint,_atomic_dec_32)
    295   1.1     ad ALIAS(atomic_dec_ulong,_atomic_dec_64)
    296   1.1     ad ALIAS(atomic_dec_ptr,_atomic_dec_64)
    297   1.1     ad 
    298   1.1     ad ALIAS(atomic_dec_32_nv,_atomic_dec_32_nv)
    299   1.1     ad ALIAS(atomic_dec_64_nv,_atomic_dec_64_nv)
    300   1.1     ad ALIAS(atomic_dec_uint_nv,_atomic_dec_32_nv)
    301   1.1     ad ALIAS(atomic_dec_ulong_nv,_atomic_dec_64_nv)
    302   1.1     ad ALIAS(atomic_dec_ptr_nv,_atomic_dec_64_nv)
    303   1.1     ad 
    304   1.1     ad ALIAS(atomic_inc_32,_atomic_inc_32)
    305   1.1     ad ALIAS(atomic_inc_64,_atomic_inc_64)
    306   1.1     ad ALIAS(atomic_inc_uint,_atomic_inc_32)
    307   1.1     ad ALIAS(atomic_inc_ulong,_atomic_inc_64)
    308   1.1     ad ALIAS(atomic_inc_ptr,_atomic_inc_64)
    309   1.1     ad 
    310   1.1     ad ALIAS(atomic_inc_32_nv,_atomic_inc_32_nv)
    311   1.1     ad ALIAS(atomic_inc_64_nv,_atomic_inc_64_nv)
    312   1.1     ad ALIAS(atomic_inc_uint_nv,_atomic_inc_32_nv)
    313   1.1     ad ALIAS(atomic_inc_ulong_nv,_atomic_inc_64_nv)
    314   1.1     ad ALIAS(atomic_inc_ptr_nv,_atomic_inc_64_nv)
    315   1.1     ad 
    316   1.1     ad ALIAS(atomic_or_32,_atomic_or_32)
    317   1.1     ad ALIAS(atomic_or_uint,_atomic_or_32)
    318   1.1     ad ALIAS(atomic_or_ulong,_atomic_or_64)
    319   1.1     ad ALIAS(atomic_or_ptr,_atomic_or_64)
    320   1.1     ad 
    321   1.1     ad ALIAS(atomic_or_32_nv,_atomic_or_32_nv)
    322   1.1     ad ALIAS(atomic_or_64_nv,_atomic_or_64_nv)
    323   1.1     ad ALIAS(atomic_or_uint_nv,_atomic_or_32_nv)
    324   1.1     ad ALIAS(atomic_or_ulong_nv,_atomic_or_64_nv)
    325   1.1     ad ALIAS(atomic_or_ptr_nv,_atomic_or_64_nv)
    326   1.1     ad 
    327   1.1     ad ALIAS(atomic_swap_32,_atomic_swap_32)
    328   1.1     ad ALIAS(atomic_swap_64,_atomic_swap_64)
    329   1.1     ad ALIAS(atomic_swap_uint,_atomic_swap_32)
    330   1.1     ad ALIAS(atomic_swap_ulong,_atomic_swap_64)
    331   1.1     ad ALIAS(atomic_swap_ptr,_atomic_swap_64)
    332   1.1     ad 
    333   1.1     ad ALIAS(atomic_cas_32,_atomic_cas_32)
    334   1.1     ad ALIAS(atomic_cas_64,_atomic_cas_64)
    335   1.1     ad ALIAS(atomic_cas_uint,_atomic_cas_32)
    336   1.1     ad ALIAS(atomic_cas_ulong,_atomic_cas_64)
    337   1.1     ad ALIAS(atomic_cas_ptr,_atomic_cas_64)
    338   1.1     ad 
    339   1.9     ad ALIAS(atomic_cas_32_ni,_atomic_cas_32_ni)
    340   1.9     ad ALIAS(atomic_cas_64_ni,_atomic_cas_64_ni)
    341   1.9     ad ALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni)
    342   1.9     ad ALIAS(atomic_cas_ulong_ni,_atomic_cas_64_ni)
    343   1.9     ad ALIAS(atomic_cas_ptr_ni,_atomic_cas_64_ni)
    344   1.9     ad 
    345   1.1     ad ALIAS(membar_consumer,_membar_consumer)
    346   1.1     ad ALIAS(membar_producer,_membar_producer)
    347   1.8     ad ALIAS(membar_enter,_membar_consumer)
    348   1.8     ad ALIAS(membar_exit,_membar_producer)
    349   1.1     ad ALIAS(membar_sync,_membar_sync)
    350   1.6     ad 
    351   1.6     ad STRONG_ALIAS(_atomic_add_int,_atomic_add_32)
    352   1.6     ad STRONG_ALIAS(_atomic_add_long,_atomic_add_64)
    353   1.6     ad STRONG_ALIAS(_atomic_add_ptr,_atomic_add_64)
    354   1.6     ad 
    355   1.6     ad STRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv)
    356   1.6     ad STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_64_nv)
    357   1.6     ad STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_64_nv)
    358   1.6     ad 
    359   1.6     ad STRONG_ALIAS(_atomic_and_uint,_atomic_and_32)
    360   1.6     ad STRONG_ALIAS(_atomic_and_ulong,_atomic_and_64)
    361   1.6     ad STRONG_ALIAS(_atomic_and_ptr,_atomic_and_64)
    362   1.6     ad 
    363   1.6     ad STRONG_ALIAS(_atomic_and_uint_nv,_atomic_and_32_nv)
    364   1.6     ad STRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_64_nv)
    365   1.6     ad STRONG_ALIAS(_atomic_and_ptr_nv,_atomic_and_64_nv)
    366   1.6     ad 
    367   1.6     ad STRONG_ALIAS(_atomic_dec_uint,_atomic_dec_32)
    368   1.6     ad STRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_64)
    369   1.6     ad STRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_64)
    370   1.6     ad 
    371   1.6     ad STRONG_ALIAS(_atomic_dec_uint_nv,_atomic_dec_32_nv)
    372   1.6     ad STRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_64_nv)
    373   1.6     ad STRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_64_nv)
    374   1.6     ad 
    375   1.6     ad STRONG_ALIAS(_atomic_inc_uint,_atomic_inc_32)
    376   1.6     ad STRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_64)
    377   1.6     ad STRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_64)
    378   1.6     ad 
    379   1.6     ad STRONG_ALIAS(_atomic_inc_uint_nv,_atomic_inc_32_nv)
    380   1.6     ad STRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_64_nv)
    381   1.6     ad STRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_64_nv)
    382   1.6     ad 
    383   1.6     ad STRONG_ALIAS(_atomic_or_uint,_atomic_or_32)
    384   1.6     ad STRONG_ALIAS(_atomic_or_ulong,_atomic_or_64)
    385   1.6     ad STRONG_ALIAS(_atomic_or_ptr,_atomic_or_64)
    386   1.6     ad 
    387   1.6     ad STRONG_ALIAS(_atomic_or_uint_nv,_atomic_or_32_nv)
    388   1.6     ad STRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_64_nv)
    389   1.6     ad STRONG_ALIAS(_atomic_or_ptr_nv,_atomic_or_64_nv)
    390   1.6     ad 
    391   1.6     ad STRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32)
    392   1.6     ad STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_64)
    393   1.6     ad STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_64)
    394   1.6     ad 
    395   1.6     ad STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32)
    396   1.6     ad STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64)
    397   1.6     ad STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64)
    398   1.8     ad 
    399   1.9     ad STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni)
    400   1.9     ad STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64_ni)
    401   1.9     ad STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64_ni)
    402   1.9     ad 
    403   1.8     ad STRONG_ALIAS(_membar_enter,_membar_consumer)
    404   1.8     ad STRONG_ALIAS(_membar_exit,_membar_producer)
    405