xref: /minix3/common/lib/libc/arch/i386/atomic/atomic.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc/*	$NetBSD: atomic.S,v 1.22 2014/05/23 03:17:31 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>
34*0a6a1f1dSLionel Sambuc/*
35*0a6a1f1dSLionel Sambuc * __HAVE_ constants should not be in <machine/types.h>
36*0a6a1f1dSLionel Sambuc * because we can't use them from assembly. OTOH we
37*0a6a1f1dSLionel Sambuc * only need __HAVE_ATOMIC64_OPS here, and we don't.
38*0a6a1f1dSLionel Sambuc */
39b6cbf720SGianluca Guida#ifdef _KERNEL
40b6cbf720SGianluca Guida#define	ALIAS(f, t)	STRONG_ALIAS(f,t)
41b6cbf720SGianluca Guida#else
42b6cbf720SGianluca Guida#define	ALIAS(f, t)	WEAK_ALIAS(f,t)
43b6cbf720SGianluca Guida#endif
44b6cbf720SGianluca Guida
45b6cbf720SGianluca Guida#ifdef _HARDKERNEL
46b6cbf720SGianluca Guida#define	LOCK(n)		.Lpatch ## n:	lock
47b6cbf720SGianluca Guida#define	ENDLABEL(a)	_ALIGN_TEXT; LABEL(a)
48b6cbf720SGianluca Guida#else
49b6cbf720SGianluca Guida#define	LOCK(n)		lock
50b6cbf720SGianluca Guida#define	ENDLABEL(a)	/* nothing */
51b6cbf720SGianluca Guida#endif
52b6cbf720SGianluca Guida
53b6cbf720SGianluca Guida	.text
54b6cbf720SGianluca Guida
55b6cbf720SGianluca GuidaENTRY(_atomic_add_32)
56b6cbf720SGianluca Guida	movl	4(%esp), %edx
57b6cbf720SGianluca Guida	movl	8(%esp), %eax
58b6cbf720SGianluca Guida	LOCK(1)
59b6cbf720SGianluca Guida	addl	%eax, (%edx)
60b6cbf720SGianluca Guida	ret
61*0a6a1f1dSLionel SambucEND(_atomic_add_32)
62b6cbf720SGianluca Guida
63b6cbf720SGianluca GuidaENTRY(_atomic_add_32_nv)
64b6cbf720SGianluca Guida	movl	4(%esp), %edx
65b6cbf720SGianluca Guida	movl	8(%esp), %eax
66b6cbf720SGianluca Guida	movl	%eax, %ecx
67b6cbf720SGianluca Guida	LOCK(2)
68b6cbf720SGianluca Guida	xaddl	%eax, (%edx)
69b6cbf720SGianluca Guida	addl	%ecx, %eax
70b6cbf720SGianluca Guida	ret
71*0a6a1f1dSLionel SambucEND(_atomic_add_32_nv)
72b6cbf720SGianluca Guida
73b6cbf720SGianluca GuidaENTRY(_atomic_and_32)
74b6cbf720SGianluca Guida	movl	4(%esp), %edx
75b6cbf720SGianluca Guida	movl	8(%esp), %eax
76b6cbf720SGianluca Guida	LOCK(3)
77b6cbf720SGianluca Guida	andl	%eax, (%edx)
78b6cbf720SGianluca Guida	ret
79*0a6a1f1dSLionel SambucEND(_atomic_and_32)
80b6cbf720SGianluca Guida
81b6cbf720SGianluca GuidaENTRY(_atomic_and_32_nv)
82b6cbf720SGianluca Guida	movl	4(%esp), %edx
83b6cbf720SGianluca Guida	movl	(%edx), %eax
84b6cbf720SGianluca Guida0:
85b6cbf720SGianluca Guida	movl	%eax, %ecx
86b6cbf720SGianluca Guida	andl	8(%esp), %ecx
87b6cbf720SGianluca Guida	LOCK(4)
88b6cbf720SGianluca Guida	cmpxchgl %ecx, (%edx)
89b6cbf720SGianluca Guida	jnz	1f
90b6cbf720SGianluca Guida	movl	%ecx, %eax
91b6cbf720SGianluca Guida	ret
92b6cbf720SGianluca Guida1:
93b6cbf720SGianluca Guida	jmp	0b
94*0a6a1f1dSLionel SambucEND(_atomic_and_32_nv)
95b6cbf720SGianluca Guida
96b6cbf720SGianluca GuidaENTRY(_atomic_dec_32)
97b6cbf720SGianluca Guida	movl	4(%esp), %edx
98b6cbf720SGianluca Guida	LOCK(5)
99b6cbf720SGianluca Guida	decl	(%edx)
100b6cbf720SGianluca Guida	ret
101*0a6a1f1dSLionel SambucEND(_atomic_dec_32)
102b6cbf720SGianluca Guida
103b6cbf720SGianluca GuidaENTRY(_atomic_dec_32_nv)
104b6cbf720SGianluca Guida	movl	4(%esp), %edx
105b6cbf720SGianluca Guida	movl	$-1, %eax
106b6cbf720SGianluca Guida	LOCK(6)
107b6cbf720SGianluca Guida	xaddl	%eax, (%edx)
108b6cbf720SGianluca Guida	decl	%eax
109b6cbf720SGianluca Guida	ret
110*0a6a1f1dSLionel SambucEND(_atomic_dec_32_nv)
111b6cbf720SGianluca Guida
112b6cbf720SGianluca GuidaENTRY(_atomic_inc_32)
113b6cbf720SGianluca Guida	movl	4(%esp), %edx
114b6cbf720SGianluca Guida	LOCK(7)
115b6cbf720SGianluca Guida	incl	(%edx)
116b6cbf720SGianluca Guida	ret
117*0a6a1f1dSLionel SambucEND(_atomic_inc_32)
118b6cbf720SGianluca Guida
119b6cbf720SGianluca GuidaENTRY(_atomic_inc_32_nv)
120b6cbf720SGianluca Guida	movl	4(%esp), %edx
121b6cbf720SGianluca Guida	movl	$1, %eax
122b6cbf720SGianluca Guida	LOCK(8)
123b6cbf720SGianluca Guida	xaddl	%eax, (%edx)
124b6cbf720SGianluca Guida	incl	%eax
125b6cbf720SGianluca Guida	ret
126*0a6a1f1dSLionel SambucEND(_atomic_inc_32_nv)
127b6cbf720SGianluca Guida
128b6cbf720SGianluca GuidaENTRY(_atomic_or_32)
129b6cbf720SGianluca Guida	movl	4(%esp), %edx
130b6cbf720SGianluca Guida	movl	8(%esp), %eax
131b6cbf720SGianluca Guida	LOCK(9)
132b6cbf720SGianluca Guida	orl	%eax, (%edx)
133b6cbf720SGianluca Guida	ret
134*0a6a1f1dSLionel SambucEND(_atomic_or_32)
135b6cbf720SGianluca Guida
136b6cbf720SGianluca GuidaENTRY(_atomic_or_32_nv)
137b6cbf720SGianluca Guida	movl	4(%esp), %edx
138b6cbf720SGianluca Guida	movl	(%edx), %eax
139b6cbf720SGianluca Guida0:
140b6cbf720SGianluca Guida	movl	%eax, %ecx
141b6cbf720SGianluca Guida	orl	8(%esp), %ecx
142b6cbf720SGianluca Guida	LOCK(10)
143b6cbf720SGianluca Guida	cmpxchgl %ecx, (%edx)
144b6cbf720SGianluca Guida	jnz	1f
145b6cbf720SGianluca Guida	movl	%ecx, %eax
146b6cbf720SGianluca Guida	ret
147b6cbf720SGianluca Guida1:
148b6cbf720SGianluca Guida	jmp	0b
149*0a6a1f1dSLionel SambucEND(_atomic_or_32_nv)
150b6cbf720SGianluca Guida
151b6cbf720SGianluca GuidaENTRY(_atomic_swap_32)
152b6cbf720SGianluca Guida	movl	4(%esp), %edx
153b6cbf720SGianluca Guida	movl	8(%esp), %eax
154b6cbf720SGianluca Guida	xchgl	%eax, (%edx)
155b6cbf720SGianluca Guida	ret
156*0a6a1f1dSLionel SambucEND(_atomic_swap_32)
157b6cbf720SGianluca Guida
158b6cbf720SGianluca GuidaENTRY(_atomic_cas_32)
159b6cbf720SGianluca Guida	movl	4(%esp), %edx
160b6cbf720SGianluca Guida	movl	8(%esp), %eax
161b6cbf720SGianluca Guida	movl	12(%esp), %ecx
162b6cbf720SGianluca Guida	LOCK(12)
163b6cbf720SGianluca Guida	cmpxchgl %ecx, (%edx)
164b6cbf720SGianluca Guida	/* %eax now contains the old value */
165b6cbf720SGianluca Guida	ret
166*0a6a1f1dSLionel SambucEND(_atomic_cas_32)
167b6cbf720SGianluca Guida
168b6cbf720SGianluca GuidaENTRY(_atomic_cas_32_ni)
169b6cbf720SGianluca Guida	movl	4(%esp), %edx
170b6cbf720SGianluca Guida	movl	8(%esp), %eax
171b6cbf720SGianluca Guida	movl	12(%esp), %ecx
172b6cbf720SGianluca Guida	cmpxchgl %ecx, (%edx)
173b6cbf720SGianluca Guida	/* %eax now contains the old value */
174b6cbf720SGianluca Guida	ret
175*0a6a1f1dSLionel SambucEND(_atomic_cas_32_ni)
176b6cbf720SGianluca Guida
177b6cbf720SGianluca GuidaENTRY(_membar_consumer)
178b6cbf720SGianluca Guida	LOCK(13)
179b6cbf720SGianluca Guida	addl	$0, -4(%esp)
180b6cbf720SGianluca Guida	ret
181*0a6a1f1dSLionel SambucEND(_membar_consumer)
182b6cbf720SGianluca GuidaENDLABEL(membar_consumer_end)
183b6cbf720SGianluca Guida
184b6cbf720SGianluca GuidaENTRY(_membar_producer)
185b6cbf720SGianluca Guida	/* A store is enough */
186b6cbf720SGianluca Guida	movl	$0, -4(%esp)
187b6cbf720SGianluca Guida	ret
188*0a6a1f1dSLionel SambucEND(_membar_producer)
189b6cbf720SGianluca GuidaENDLABEL(membar_producer_end)
190b6cbf720SGianluca Guida
191b6cbf720SGianluca GuidaENTRY(_membar_sync)
192b6cbf720SGianluca Guida	LOCK(14)
193b6cbf720SGianluca Guida	addl	$0, -4(%esp)
194b6cbf720SGianluca Guida	ret
195*0a6a1f1dSLionel SambucEND(_membar_sync)
196b6cbf720SGianluca GuidaENDLABEL(membar_sync_end)
197b6cbf720SGianluca Guida
198*0a6a1f1dSLionel Sambuc#if defined(__HAVE_ATOMIC64_OPS) || defined(_KERNEL)
199b6cbf720SGianluca GuidaENTRY(_atomic_cas_64)
200*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL
201b6cbf720SGianluca Guida	pushf
202b6cbf720SGianluca Guida	cli
203*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */
204b6cbf720SGianluca Guida	pushl	%edi
205b6cbf720SGianluca Guida	pushl	%ebx
206b6cbf720SGianluca Guida	movl	12(%esp), %edi
207b6cbf720SGianluca Guida	movl	16(%esp), %eax
208b6cbf720SGianluca Guida	movl	20(%esp), %edx
209b6cbf720SGianluca Guida	movl	24(%esp), %ebx
210b6cbf720SGianluca Guida	movl	28(%esp), %ecx
211b6cbf720SGianluca Guida	cmpl	0(%edi), %eax
212b6cbf720SGianluca Guida	jne	2f
213b6cbf720SGianluca Guida	cmpl	4(%edi), %edx
214b6cbf720SGianluca Guida	jne	2f
215b6cbf720SGianluca Guida	movl	%ebx, 0(%edi)
216b6cbf720SGianluca Guida	movl	%ecx, 4(%edi)
217b6cbf720SGianluca Guida1:
218b6cbf720SGianluca Guida	popl	%ebx
219b6cbf720SGianluca Guida	popl	%edi
220*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL
221b6cbf720SGianluca Guida	popf
222*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */
223b6cbf720SGianluca Guida	ret
224b6cbf720SGianluca Guida2:
225b6cbf720SGianluca Guida	movl	0(%edi), %eax
226b6cbf720SGianluca Guida	movl	4(%edi), %edx
227b6cbf720SGianluca Guida	jmp	1b
228*0a6a1f1dSLionel SambucEND(_atomic_cas_64)
229b6cbf720SGianluca GuidaENDLABEL(_atomic_cas_64_end)
230b6cbf720SGianluca Guida
231b6cbf720SGianluca GuidaENTRY(_atomic_cas_cx8)
232b6cbf720SGianluca Guida	pushl	%edi
233b6cbf720SGianluca Guida	pushl	%ebx
234b6cbf720SGianluca Guida	movl	12(%esp), %edi
235b6cbf720SGianluca Guida	movl	16(%esp), %eax
236b6cbf720SGianluca Guida	movl	20(%esp), %edx
237b6cbf720SGianluca Guida	movl	24(%esp), %ebx
238b6cbf720SGianluca Guida	movl	28(%esp), %ecx
239b6cbf720SGianluca Guida	LOCK(15)
240b6cbf720SGianluca Guida	cmpxchg8b (%edi)
241b6cbf720SGianluca Guida	popl	%ebx
242b6cbf720SGianluca Guida	popl	%edi
243b6cbf720SGianluca Guida	ret
244*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL
245b6cbf720SGianluca Guida#ifdef GPROF
246b6cbf720SGianluca Guida	.space	16, 0x90
247b6cbf720SGianluca Guida#else
248b6cbf720SGianluca Guida	.space	32, 0x90
249b6cbf720SGianluca Guida#endif
250*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */
251*0a6a1f1dSLionel SambucEND(_atomic_cas_cx8)
252b6cbf720SGianluca GuidaENDLABEL(_atomic_cas_cx8_end)
253*0a6a1f1dSLionel Sambuc#endif /* __HAVE_ATOMIC64_OPS || _KERNEL */
254b6cbf720SGianluca Guida
255*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL
256b6cbf720SGianluca GuidaENTRY(sse2_lfence)
257b6cbf720SGianluca Guida	lfence
258b6cbf720SGianluca Guida	ret
259*0a6a1f1dSLionel SambucEND(sse2_lfence)
260b6cbf720SGianluca GuidaENDLABEL(sse2_lfence_end)
261b6cbf720SGianluca Guida
262b6cbf720SGianluca GuidaENTRY(sse2_mfence)
263b6cbf720SGianluca Guida	mfence
264b6cbf720SGianluca Guida	ret
265*0a6a1f1dSLionel SambucEND(sse2_mfence)
266b6cbf720SGianluca GuidaENDLABEL(sse2_mfence_end)
267b6cbf720SGianluca Guida
268b6cbf720SGianluca Guidaatomic_lockpatch:
269b6cbf720SGianluca Guida	.globl	atomic_lockpatch
270b6cbf720SGianluca Guida	.long	.Lpatch1, .Lpatch2, .Lpatch3, .Lpatch4, .Lpatch5
271b6cbf720SGianluca Guida	.long	.Lpatch6, .Lpatch7, .Lpatch8, .Lpatch9, .Lpatch10
272b6cbf720SGianluca Guida	.long	.Lpatch12, .Lpatch13, .Lpatch14, .Lpatch15, 0
273b6cbf720SGianluca Guida#endif	/* _HARDKERNEL */
274b6cbf720SGianluca Guida
275b6cbf720SGianluca GuidaALIAS(atomic_add_32,_atomic_add_32)
276b6cbf720SGianluca GuidaALIAS(atomic_add_int,_atomic_add_32)
277b6cbf720SGianluca GuidaALIAS(atomic_add_long,_atomic_add_32)
278b6cbf720SGianluca GuidaALIAS(atomic_add_ptr,_atomic_add_32)
279b6cbf720SGianluca Guida
280b6cbf720SGianluca GuidaALIAS(atomic_add_32_nv,_atomic_add_32_nv)
281b6cbf720SGianluca GuidaALIAS(atomic_add_int_nv,_atomic_add_32_nv)
282b6cbf720SGianluca GuidaALIAS(atomic_add_long_nv,_atomic_add_32_nv)
283b6cbf720SGianluca GuidaALIAS(atomic_add_ptr_nv,_atomic_add_32_nv)
284b6cbf720SGianluca Guida
285b6cbf720SGianluca GuidaALIAS(atomic_and_32,_atomic_and_32)
286b6cbf720SGianluca GuidaALIAS(atomic_and_uint,_atomic_and_32)
287b6cbf720SGianluca GuidaALIAS(atomic_and_ulong,_atomic_and_32)
288b6cbf720SGianluca GuidaALIAS(atomic_and_ptr,_atomic_and_32)
289b6cbf720SGianluca Guida
290b6cbf720SGianluca GuidaALIAS(atomic_and_32_nv,_atomic_and_32_nv)
291b6cbf720SGianluca GuidaALIAS(atomic_and_uint_nv,_atomic_and_32_nv)
292b6cbf720SGianluca GuidaALIAS(atomic_and_ulong_nv,_atomic_and_32_nv)
293b6cbf720SGianluca GuidaALIAS(atomic_and_ptr_nv,_atomic_and_32_nv)
294b6cbf720SGianluca Guida
295b6cbf720SGianluca GuidaALIAS(atomic_dec_32,_atomic_dec_32)
296b6cbf720SGianluca GuidaALIAS(atomic_dec_uint,_atomic_dec_32)
297b6cbf720SGianluca GuidaALIAS(atomic_dec_ulong,_atomic_dec_32)
298b6cbf720SGianluca GuidaALIAS(atomic_dec_ptr,_atomic_dec_32)
299b6cbf720SGianluca Guida
300b6cbf720SGianluca GuidaALIAS(atomic_dec_32_nv,_atomic_dec_32_nv)
301b6cbf720SGianluca GuidaALIAS(atomic_dec_uint_nv,_atomic_dec_32_nv)
302b6cbf720SGianluca GuidaALIAS(atomic_dec_ulong_nv,_atomic_dec_32_nv)
303b6cbf720SGianluca GuidaALIAS(atomic_dec_ptr_nv,_atomic_dec_32_nv)
304b6cbf720SGianluca Guida
305b6cbf720SGianluca GuidaALIAS(atomic_inc_32,_atomic_inc_32)
306b6cbf720SGianluca GuidaALIAS(atomic_inc_uint,_atomic_inc_32)
307b6cbf720SGianluca GuidaALIAS(atomic_inc_ulong,_atomic_inc_32)
308b6cbf720SGianluca GuidaALIAS(atomic_inc_ptr,_atomic_inc_32)
309b6cbf720SGianluca Guida
310b6cbf720SGianluca GuidaALIAS(atomic_inc_32_nv,_atomic_inc_32_nv)
311b6cbf720SGianluca GuidaALIAS(atomic_inc_uint_nv,_atomic_inc_32_nv)
312b6cbf720SGianluca GuidaALIAS(atomic_inc_ulong_nv,_atomic_inc_32_nv)
313b6cbf720SGianluca GuidaALIAS(atomic_inc_ptr_nv,_atomic_inc_32_nv)
314b6cbf720SGianluca Guida
315b6cbf720SGianluca GuidaALIAS(atomic_or_32,_atomic_or_32)
316b6cbf720SGianluca GuidaALIAS(atomic_or_uint,_atomic_or_32)
317b6cbf720SGianluca GuidaALIAS(atomic_or_ulong,_atomic_or_32)
318b6cbf720SGianluca GuidaALIAS(atomic_or_ptr,_atomic_or_32)
319b6cbf720SGianluca Guida
320b6cbf720SGianluca GuidaALIAS(atomic_or_32_nv,_atomic_or_32_nv)
321b6cbf720SGianluca GuidaALIAS(atomic_or_uint_nv,_atomic_or_32_nv)
322b6cbf720SGianluca GuidaALIAS(atomic_or_ulong_nv,_atomic_or_32_nv)
323b6cbf720SGianluca GuidaALIAS(atomic_or_ptr_nv,_atomic_or_32_nv)
324b6cbf720SGianluca Guida
325b6cbf720SGianluca GuidaALIAS(atomic_swap_32,_atomic_swap_32)
326b6cbf720SGianluca GuidaALIAS(atomic_swap_uint,_atomic_swap_32)
327b6cbf720SGianluca GuidaALIAS(atomic_swap_ulong,_atomic_swap_32)
328b6cbf720SGianluca GuidaALIAS(atomic_swap_ptr,_atomic_swap_32)
329b6cbf720SGianluca Guida
330b6cbf720SGianluca GuidaALIAS(atomic_cas_32,_atomic_cas_32)
331b6cbf720SGianluca GuidaALIAS(atomic_cas_uint,_atomic_cas_32)
332b6cbf720SGianluca GuidaALIAS(atomic_cas_ulong,_atomic_cas_32)
333b6cbf720SGianluca GuidaALIAS(atomic_cas_ptr,_atomic_cas_32)
334b6cbf720SGianluca Guida
335b6cbf720SGianluca GuidaALIAS(atomic_cas_32_ni,_atomic_cas_32_ni)
336b6cbf720SGianluca GuidaALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni)
337b6cbf720SGianluca GuidaALIAS(atomic_cas_ulong_ni,_atomic_cas_32_ni)
338b6cbf720SGianluca GuidaALIAS(atomic_cas_ptr_ni,_atomic_cas_32_ni)
339b6cbf720SGianluca Guida
340*0a6a1f1dSLionel Sambuc#if defined(__HAVE_ATOMIC64_OPS) || defined(_KERNEL)
341b6cbf720SGianluca GuidaALIAS(atomic_cas_64,_atomic_cas_64)
342b6cbf720SGianluca GuidaALIAS(atomic_cas_64_ni,_atomic_cas_64)
343*0a6a1f1dSLionel SambucALIAS(__sync_val_compare_and_swap_8,_atomic_cas_64)
344*0a6a1f1dSLionel Sambuc#endif /* __HAVE_ATOMIC64_OPS || _KERNEL */
345b6cbf720SGianluca Guida
346b6cbf720SGianluca GuidaALIAS(membar_consumer,_membar_consumer)
347b6cbf720SGianluca GuidaALIAS(membar_producer,_membar_producer)
348b6cbf720SGianluca GuidaALIAS(membar_enter,_membar_consumer)
349b6cbf720SGianluca GuidaALIAS(membar_exit,_membar_producer)
350b6cbf720SGianluca GuidaALIAS(membar_sync,_membar_sync)
351b6cbf720SGianluca Guida
352b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_int,_atomic_add_32)
353b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_long,_atomic_add_32)
354b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_ptr,_atomic_add_32)
355b6cbf720SGianluca Guida
356b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv)
357b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_long_nv,_atomic_add_32_nv)
358b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_32_nv)
359b6cbf720SGianluca Guida
360b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_uint,_atomic_and_32)
361b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ulong,_atomic_and_32)
362b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ptr,_atomic_and_32)
363b6cbf720SGianluca Guida
364b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_uint_nv,_atomic_and_32_nv)
365b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_32_nv)
366b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ptr_nv,_atomic_and_32_nv)
367b6cbf720SGianluca Guida
368b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_uint,_atomic_dec_32)
369b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_32)
370b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_32)
371b6cbf720SGianluca Guida
372b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_uint_nv,_atomic_dec_32_nv)
373b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_32_nv)
374b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_32_nv)
375b6cbf720SGianluca Guida
376b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_uint,_atomic_inc_32)
377b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_32)
378b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_32)
379b6cbf720SGianluca Guida
380b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_uint_nv,_atomic_inc_32_nv)
381b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_32_nv)
382b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_32_nv)
383b6cbf720SGianluca Guida
384b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_uint,_atomic_or_32)
385b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ulong,_atomic_or_32)
386b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ptr,_atomic_or_32)
387b6cbf720SGianluca Guida
388b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_uint_nv,_atomic_or_32_nv)
389b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_32_nv)
390b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ptr_nv,_atomic_or_32_nv)
391b6cbf720SGianluca Guida
392b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32)
393b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_32)
394b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_32)
395b6cbf720SGianluca Guida
396b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32)
397b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32)
398b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32)
399b6cbf720SGianluca Guida
400b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni)
401b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_32_ni)
402b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_32_ni)
403b6cbf720SGianluca Guida
404b6cbf720SGianluca GuidaSTRONG_ALIAS(_membar_enter,_membar_consumer)
405b6cbf720SGianluca GuidaSTRONG_ALIAS(_membar_exit,_membar_producer)
406