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