Home | History | Annotate | Line # | Download | only in atomic
atomic.S revision 1.17
      1  1.17  uebayasi /*	$NetBSD: atomic.S,v 1.17 2014/05/22 15:23:11 uebayasi 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.17  uebayasi END(_atomic_add_32)
     58   1.1        ad 
     59  1.12       chs ENTRY(_atomic_add_32_nv)
     60   1.1        ad 	movl	%esi, %eax
     61   1.1        ad 	LOCK(2)
     62   1.1        ad 	xaddl	%eax, (%rdi)
     63   1.1        ad 	addl	%esi, %eax
     64   1.1        ad 	ret
     65  1.17  uebayasi END(_atomic_add_32_nv)
     66   1.1        ad 
     67  1.12       chs ENTRY(_atomic_and_32)
     68   1.1        ad 	LOCK(3)
     69   1.1        ad 	andl	%esi, (%rdi)
     70   1.1        ad 	ret
     71  1.17  uebayasi END(_atomic_and_32)
     72   1.1        ad 
     73  1.12       chs ENTRY(_atomic_and_32_nv)
     74   1.1        ad 	movl	(%rdi), %eax
     75   1.1        ad 1:
     76   1.1        ad 	movl	%eax, %ecx
     77   1.1        ad 	andl	%esi, %ecx
     78   1.1        ad 	LOCK(4)
     79   1.1        ad 	cmpxchgl %ecx, (%rdi)
     80   1.1        ad 	jnz	1b
     81   1.1        ad 	movl	%ecx, %eax
     82   1.1        ad 	ret
     83  1.17  uebayasi END(_atomic_and_32_nv)
     84   1.1        ad 
     85  1.12       chs ENTRY(_atomic_dec_32)
     86   1.1        ad 	LOCK(5)
     87   1.1        ad 	decl	(%rdi)
     88   1.1        ad 	ret
     89  1.17  uebayasi END(_atomic_dec_32)
     90   1.1        ad 
     91  1.12       chs ENTRY(_atomic_dec_32_nv)
     92   1.1        ad 	movl	$-1, %eax
     93   1.1        ad 	LOCK(6)
     94   1.1        ad 	xaddl	%eax, (%rdi)
     95   1.1        ad 	decl	%eax
     96   1.1        ad 	ret
     97  1.17  uebayasi END(_atomic_dec_32_nv)
     98   1.1        ad 
     99  1.12       chs ENTRY(_atomic_inc_32)
    100   1.1        ad 	LOCK(7)
    101   1.1        ad 	incl	(%rdi)
    102   1.1        ad 	ret
    103  1.17  uebayasi END(_atomic_inc_32)
    104   1.1        ad 
    105  1.12       chs ENTRY(_atomic_inc_32_nv)
    106   1.1        ad 	movl	$1, %eax
    107   1.1        ad 	LOCK(8)
    108   1.1        ad 	xaddl	%eax, (%rdi)
    109   1.1        ad 	incl	%eax
    110   1.1        ad 	ret
    111  1.17  uebayasi END(_atomic_inc_32_nv)
    112   1.1        ad 
    113  1.12       chs ENTRY(_atomic_or_32)
    114   1.1        ad 	LOCK(9)
    115   1.1        ad 	orl	%esi, (%rdi)
    116   1.1        ad 	ret
    117  1.17  uebayasi END(_atomic_or_32)
    118   1.1        ad 
    119  1.12       chs ENTRY(_atomic_or_32_nv)
    120   1.1        ad 	movl	(%rdi), %eax
    121   1.1        ad 1:
    122   1.1        ad 	movl	%eax, %ecx
    123   1.1        ad 	orl	%esi, %ecx
    124   1.1        ad 	LOCK(10)
    125   1.1        ad 	cmpxchgl %ecx, (%rdi)
    126   1.1        ad 	jnz	1b
    127   1.1        ad 	movl	%ecx, %eax
    128   1.1        ad 	ret
    129  1.17  uebayasi END(_atomic_or_32_nv)
    130   1.1        ad 
    131  1.12       chs ENTRY(_atomic_swap_32)
    132   1.5        ad 	movl	%esi, %eax
    133   1.5        ad 	xchgl	%eax, (%rdi)
    134   1.1        ad 	ret
    135  1.17  uebayasi END(_atomic_swap_32)
    136   1.1        ad 
    137  1.12       chs ENTRY(_atomic_cas_32)
    138   1.1        ad 	movl	%esi, %eax
    139   1.1        ad 	LOCK(12)
    140   1.1        ad 	cmpxchgl %edx, (%rdi)
    141   1.1        ad 	/* %eax now contains the old value */
    142   1.1        ad 	ret
    143  1.17  uebayasi END(_atomic_cas_32)
    144   1.1        ad 
    145  1.12       chs ENTRY(_atomic_cas_32_ni)
    146   1.9        ad 	movl	%esi, %eax
    147   1.9        ad 	cmpxchgl %edx, (%rdi)
    148   1.9        ad 	/* %eax now contains the old value */
    149   1.9        ad 	ret
    150  1.17  uebayasi END(_atomic_cas_32_ni)
    151   1.9        ad 
    152   1.1        ad /* 64-bit */
    153   1.1        ad 
    154  1.12       chs ENTRY(_atomic_add_64)
    155   1.1        ad 	LOCK(13)
    156   1.1        ad 	addq	%rsi, (%rdi)
    157   1.1        ad 	ret
    158  1.17  uebayasi END(_atomic_add_64)
    159   1.1        ad 
    160  1.12       chs ENTRY(_atomic_add_64_nv)
    161   1.1        ad 	movq	%rsi, %rax
    162   1.1        ad 	LOCK(14)
    163   1.1        ad 	xaddq	%rax, (%rdi)
    164   1.1        ad 	addq	%rsi, %rax
    165   1.1        ad 	ret
    166  1.17  uebayasi END(_atomic_add_64_nv)
    167   1.1        ad 
    168  1.12       chs ENTRY(_atomic_and_64)
    169   1.1        ad 	LOCK(15)
    170   1.1        ad 	andq	%rsi, (%rdi)
    171   1.1        ad 	ret
    172  1.17  uebayasi END(_atomic_and_64)
    173   1.1        ad 
    174  1.12       chs ENTRY(_atomic_and_64_nv)
    175   1.1        ad 	movq	(%rdi), %rax
    176   1.1        ad 1:
    177   1.1        ad 	movq	%rax, %rcx
    178   1.1        ad 	andq	%rsi, %rcx
    179   1.1        ad 	LOCK(16)
    180   1.1        ad 	cmpxchgq %rcx, (%rdi)
    181   1.1        ad 	jnz	1b
    182   1.1        ad 	movq	%rcx, %rax
    183   1.1        ad 	ret
    184  1.17  uebayasi END(_atomic_and_64_nv)
    185   1.1        ad 
    186  1.12       chs ENTRY(_atomic_dec_64)
    187   1.1        ad 	LOCK(17)
    188   1.1        ad 	decq	(%rdi)
    189   1.1        ad 	ret
    190  1.17  uebayasi END(_atomic_dec_64)
    191   1.1        ad 
    192  1.12       chs ENTRY(_atomic_dec_64_nv)
    193   1.1        ad 	movq	$-1, %rax
    194   1.1        ad 	LOCK(18)
    195   1.1        ad 	xaddq	%rax, (%rdi)
    196   1.1        ad 	decq	%rax
    197   1.1        ad 	ret
    198  1.17  uebayasi END(_atomic_dec_64_nv)
    199   1.1        ad 
    200  1.12       chs ENTRY(_atomic_inc_64)
    201   1.1        ad 	LOCK(19)
    202   1.1        ad 	incq	(%rdi)
    203   1.1        ad 	ret
    204  1.17  uebayasi END(_atomic_inc_64)
    205   1.1        ad 
    206  1.12       chs ENTRY(_atomic_inc_64_nv)
    207   1.1        ad 	movq	$1, %rax
    208   1.1        ad 	LOCK(20)
    209   1.1        ad 	xaddq	%rax, (%rdi)
    210   1.1        ad 	incq	%rax
    211   1.1        ad 	ret
    212  1.17  uebayasi END(_atomic_inc_64_nv)
    213   1.1        ad 
    214  1.12       chs ENTRY(_atomic_or_64)
    215   1.1        ad 	LOCK(21)
    216   1.1        ad 	orq	%rsi, (%rdi)
    217   1.1        ad 	ret
    218  1.17  uebayasi END(_atomic_or_64)
    219   1.1        ad 
    220  1.12       chs ENTRY(_atomic_or_64_nv)
    221   1.1        ad 	movq	(%rdi), %rax
    222   1.1        ad 1:
    223   1.1        ad 	movq	%rax, %rcx
    224   1.1        ad 	orq	%rsi, %rcx
    225   1.1        ad 	LOCK(22)
    226   1.1        ad 	cmpxchgq %rcx, (%rdi)
    227   1.1        ad 	jnz	1b
    228   1.1        ad 	movq	%rcx, %rax
    229   1.1        ad 	ret
    230  1.17  uebayasi END(_atomic_or_64_nv)
    231   1.1        ad 
    232  1.12       chs ENTRY(_atomic_swap_64)
    233   1.5        ad 	movq	%rsi, %rax
    234   1.5        ad 	xchgq	%rax, (%rdi)
    235   1.1        ad 	ret
    236  1.17  uebayasi END(_atomic_swap_64)
    237   1.1        ad 
    238  1.12       chs ENTRY(_atomic_cas_64)
    239   1.1        ad 	movq	%rsi, %rax
    240   1.1        ad 	LOCK(24)
    241   1.7        ad 	cmpxchgq %rdx, (%rdi)
    242   1.1        ad 	/* %eax now contains the old value */
    243   1.1        ad 	ret
    244  1.17  uebayasi END(_atomic_cas_64)
    245   1.1        ad 
    246  1.12       chs ENTRY(_atomic_cas_64_ni)
    247   1.9        ad 	movq	%rsi, %rax
    248   1.9        ad 	cmpxchgq %rdx, (%rdi)
    249   1.9        ad 	/* %eax now contains the old value */
    250   1.9        ad 	ret
    251  1.17  uebayasi END(_atomic_cas_64_ni)
    252   1.9        ad 
    253   1.1        ad /* memory barriers */
    254   1.1        ad 
    255  1.12       chs ENTRY(_membar_consumer)
    256   1.1        ad 	LOCK(25)
    257   1.1        ad 	addq	$0, -8(%rsp)
    258   1.1        ad 	ret
    259  1.17  uebayasi END(_membar_consumer)
    260  1.11      yamt ENDLABEL(membar_consumer_end)
    261   1.1        ad 
    262  1.12       chs ENTRY(_membar_producer)
    263   1.1        ad 	/* A store is enough */
    264   1.1        ad 	movq	$0, -8(%rsp)
    265   1.1        ad 	ret
    266  1.17  uebayasi END(_membar_producer)
    267  1.11      yamt ENDLABEL(membar_producer_end)
    268   1.1        ad 
    269  1.12       chs ENTRY(_membar_sync)
    270   1.1        ad 	LOCK(26)
    271   1.1        ad 	addq	$0, -8(%rsp)
    272   1.1        ad 	ret
    273  1.17  uebayasi END(_membar_sync)
    274  1.11      yamt ENDLABEL(membar_sync_end)
    275   1.1        ad 
    276  1.13     pooka #ifdef _HARDKERNEL
    277  1.12       chs ENTRY(sse2_lfence)
    278   1.1        ad 	lfence
    279   1.1        ad 	ret
    280  1.17  uebayasi END(sse2_lfence)
    281  1.11      yamt ENDLABEL(sse2_lfence_end)
    282   1.1        ad 
    283  1.12       chs ENTRY(sse2_mfence)
    284   1.1        ad 	mfence
    285   1.1        ad 	ret
    286  1.17  uebayasi END(sse2_mfence)
    287  1.11      yamt ENDLABEL(sse2_mfence_end)
    288   1.1        ad 
    289   1.1        ad atomic_lockpatch:
    290   1.1        ad 	.globl	atomic_lockpatch
    291   1.2        ad 	.quad	.Lpatch1, .Lpatch2, .Lpatch3, .Lpatch4, .Lpatch5
    292   1.2        ad 	.quad	.Lpatch6, .Lpatch7, .Lpatch8, .Lpatch9, .Lpatch10
    293   1.3        ad 	.quad	.Lpatch12, .Lpatch13, .Lpatch14, .Lpatch15
    294   1.2        ad 	.quad	.Lpatch16, .Lpatch17, .Lpatch18, .Lpatch19, .Lpatch20
    295   1.3        ad 	.quad	.Lpatch21, .Lpatch22, .Lpatch24, .Lpatch25
    296   1.2        ad 	.quad	.Lpatch26, 0
    297  1.13     pooka #endif	/* _HARDKERNEL */
    298   1.1        ad 
    299   1.1        ad ALIAS(atomic_add_32,_atomic_add_32)
    300   1.1        ad ALIAS(atomic_add_64,_atomic_add_64)
    301   1.4        ad ALIAS(atomic_add_int,_atomic_add_32)
    302   1.4        ad ALIAS(atomic_add_long,_atomic_add_64)
    303   1.1        ad ALIAS(atomic_add_ptr,_atomic_add_64)
    304   1.1        ad 
    305   1.1        ad ALIAS(atomic_add_32_nv,_atomic_add_32_nv)
    306   1.1        ad ALIAS(atomic_add_64_nv,_atomic_add_64_nv)
    307   1.4        ad ALIAS(atomic_add_int_nv,_atomic_add_32_nv)
    308   1.4        ad ALIAS(atomic_add_long_nv,_atomic_add_64_nv)
    309   1.1        ad ALIAS(atomic_add_ptr_nv,_atomic_add_64_nv)
    310   1.1        ad 
    311   1.1        ad ALIAS(atomic_and_32,_atomic_and_32)
    312   1.1        ad ALIAS(atomic_and_64,_atomic_and_64)
    313   1.1        ad ALIAS(atomic_and_uint,_atomic_and_32)
    314   1.1        ad ALIAS(atomic_and_ulong,_atomic_and_64)
    315   1.1        ad ALIAS(atomic_and_ptr,_atomic_and_64)
    316   1.1        ad 
    317   1.1        ad ALIAS(atomic_and_32_nv,_atomic_and_32_nv)
    318   1.1        ad ALIAS(atomic_and_64_nv,_atomic_and_64_nv)
    319   1.1        ad ALIAS(atomic_and_uint_nv,_atomic_and_32_nv)
    320   1.1        ad ALIAS(atomic_and_ulong_nv,_atomic_and_64_nv)
    321   1.1        ad ALIAS(atomic_and_ptr_nv,_atomic_and_64_nv)
    322   1.1        ad 
    323   1.1        ad ALIAS(atomic_dec_32,_atomic_dec_32)
    324   1.1        ad ALIAS(atomic_dec_64,_atomic_dec_64)
    325   1.1        ad ALIAS(atomic_dec_uint,_atomic_dec_32)
    326   1.1        ad ALIAS(atomic_dec_ulong,_atomic_dec_64)
    327   1.1        ad ALIAS(atomic_dec_ptr,_atomic_dec_64)
    328   1.1        ad 
    329   1.1        ad ALIAS(atomic_dec_32_nv,_atomic_dec_32_nv)
    330   1.1        ad ALIAS(atomic_dec_64_nv,_atomic_dec_64_nv)
    331   1.1        ad ALIAS(atomic_dec_uint_nv,_atomic_dec_32_nv)
    332   1.1        ad ALIAS(atomic_dec_ulong_nv,_atomic_dec_64_nv)
    333   1.1        ad ALIAS(atomic_dec_ptr_nv,_atomic_dec_64_nv)
    334   1.1        ad 
    335   1.1        ad ALIAS(atomic_inc_32,_atomic_inc_32)
    336   1.1        ad ALIAS(atomic_inc_64,_atomic_inc_64)
    337   1.1        ad ALIAS(atomic_inc_uint,_atomic_inc_32)
    338   1.1        ad ALIAS(atomic_inc_ulong,_atomic_inc_64)
    339   1.1        ad ALIAS(atomic_inc_ptr,_atomic_inc_64)
    340   1.1        ad 
    341   1.1        ad ALIAS(atomic_inc_32_nv,_atomic_inc_32_nv)
    342   1.1        ad ALIAS(atomic_inc_64_nv,_atomic_inc_64_nv)
    343   1.1        ad ALIAS(atomic_inc_uint_nv,_atomic_inc_32_nv)
    344   1.1        ad ALIAS(atomic_inc_ulong_nv,_atomic_inc_64_nv)
    345   1.1        ad ALIAS(atomic_inc_ptr_nv,_atomic_inc_64_nv)
    346   1.1        ad 
    347   1.1        ad ALIAS(atomic_or_32,_atomic_or_32)
    348   1.1        ad ALIAS(atomic_or_uint,_atomic_or_32)
    349   1.1        ad ALIAS(atomic_or_ulong,_atomic_or_64)
    350   1.1        ad ALIAS(atomic_or_ptr,_atomic_or_64)
    351   1.1        ad 
    352   1.1        ad ALIAS(atomic_or_32_nv,_atomic_or_32_nv)
    353   1.1        ad ALIAS(atomic_or_64_nv,_atomic_or_64_nv)
    354   1.1        ad ALIAS(atomic_or_uint_nv,_atomic_or_32_nv)
    355   1.1        ad ALIAS(atomic_or_ulong_nv,_atomic_or_64_nv)
    356   1.1        ad ALIAS(atomic_or_ptr_nv,_atomic_or_64_nv)
    357   1.1        ad 
    358   1.1        ad ALIAS(atomic_swap_32,_atomic_swap_32)
    359   1.1        ad ALIAS(atomic_swap_64,_atomic_swap_64)
    360   1.1        ad ALIAS(atomic_swap_uint,_atomic_swap_32)
    361   1.1        ad ALIAS(atomic_swap_ulong,_atomic_swap_64)
    362   1.1        ad ALIAS(atomic_swap_ptr,_atomic_swap_64)
    363   1.1        ad 
    364   1.1        ad ALIAS(atomic_cas_32,_atomic_cas_32)
    365   1.1        ad ALIAS(atomic_cas_64,_atomic_cas_64)
    366   1.1        ad ALIAS(atomic_cas_uint,_atomic_cas_32)
    367   1.1        ad ALIAS(atomic_cas_ulong,_atomic_cas_64)
    368   1.1        ad ALIAS(atomic_cas_ptr,_atomic_cas_64)
    369   1.1        ad 
    370   1.9        ad ALIAS(atomic_cas_32_ni,_atomic_cas_32_ni)
    371   1.9        ad ALIAS(atomic_cas_64_ni,_atomic_cas_64_ni)
    372   1.9        ad ALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni)
    373   1.9        ad ALIAS(atomic_cas_ulong_ni,_atomic_cas_64_ni)
    374   1.9        ad ALIAS(atomic_cas_ptr_ni,_atomic_cas_64_ni)
    375   1.9        ad 
    376   1.1        ad ALIAS(membar_consumer,_membar_consumer)
    377   1.1        ad ALIAS(membar_producer,_membar_producer)
    378   1.8        ad ALIAS(membar_enter,_membar_consumer)
    379   1.8        ad ALIAS(membar_exit,_membar_producer)
    380   1.1        ad ALIAS(membar_sync,_membar_sync)
    381   1.6        ad 
    382   1.6        ad STRONG_ALIAS(_atomic_add_int,_atomic_add_32)
    383   1.6        ad STRONG_ALIAS(_atomic_add_long,_atomic_add_64)
    384   1.6        ad STRONG_ALIAS(_atomic_add_ptr,_atomic_add_64)
    385   1.6        ad 
    386   1.6        ad STRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv)
    387   1.6        ad STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_64_nv)
    388   1.6        ad STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_64_nv)
    389   1.6        ad 
    390   1.6        ad STRONG_ALIAS(_atomic_and_uint,_atomic_and_32)
    391   1.6        ad STRONG_ALIAS(_atomic_and_ulong,_atomic_and_64)
    392   1.6        ad STRONG_ALIAS(_atomic_and_ptr,_atomic_and_64)
    393   1.6        ad 
    394   1.6        ad STRONG_ALIAS(_atomic_and_uint_nv,_atomic_and_32_nv)
    395   1.6        ad STRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_64_nv)
    396   1.6        ad STRONG_ALIAS(_atomic_and_ptr_nv,_atomic_and_64_nv)
    397   1.6        ad 
    398   1.6        ad STRONG_ALIAS(_atomic_dec_uint,_atomic_dec_32)
    399   1.6        ad STRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_64)
    400   1.6        ad STRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_64)
    401   1.6        ad 
    402   1.6        ad STRONG_ALIAS(_atomic_dec_uint_nv,_atomic_dec_32_nv)
    403   1.6        ad STRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_64_nv)
    404   1.6        ad STRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_64_nv)
    405   1.6        ad 
    406   1.6        ad STRONG_ALIAS(_atomic_inc_uint,_atomic_inc_32)
    407   1.6        ad STRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_64)
    408   1.6        ad STRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_64)
    409   1.6        ad 
    410   1.6        ad STRONG_ALIAS(_atomic_inc_uint_nv,_atomic_inc_32_nv)
    411   1.6        ad STRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_64_nv)
    412   1.6        ad STRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_64_nv)
    413   1.6        ad 
    414   1.6        ad STRONG_ALIAS(_atomic_or_uint,_atomic_or_32)
    415   1.6        ad STRONG_ALIAS(_atomic_or_ulong,_atomic_or_64)
    416   1.6        ad STRONG_ALIAS(_atomic_or_ptr,_atomic_or_64)
    417   1.6        ad 
    418   1.6        ad STRONG_ALIAS(_atomic_or_uint_nv,_atomic_or_32_nv)
    419   1.6        ad STRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_64_nv)
    420   1.6        ad STRONG_ALIAS(_atomic_or_ptr_nv,_atomic_or_64_nv)
    421   1.6        ad 
    422   1.6        ad STRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32)
    423   1.6        ad STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_64)
    424   1.6        ad STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_64)
    425   1.6        ad 
    426   1.6        ad STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32)
    427   1.6        ad STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64)
    428   1.6        ad STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64)
    429   1.8        ad 
    430   1.9        ad STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni)
    431   1.9        ad STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_64_ni)
    432   1.9        ad STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_64_ni)
    433   1.9        ad 
    434   1.8        ad STRONG_ALIAS(_membar_enter,_membar_consumer)
    435   1.8        ad STRONG_ALIAS(_membar_exit,_membar_producer)
    436