xref: /netbsd-src/common/lib/libc/arch/alpha/atomic/membar_ops.S (revision 4f8ce3b31dd3bccb2f78a8118c558aacc733ac7d)
1*4f8ce3b3Sriastradh/*	$NetBSD: membar_ops.S,v 1.9 2022/04/09 23:32:51 riastradh Exp $	*/
2fb900ec9Sad
3fb900ec9Sad/*-
4fb900ec9Sad * Copyright (c) 2006, 2007 The NetBSD Foundation, Inc.
5fb900ec9Sad * All rights reserved.
6fb900ec9Sad *
7fb900ec9Sad * This code is derived from software contributed to The NetBSD Foundation
8fb900ec9Sad * by Jason R. Thorpe.
9fb900ec9Sad *
10fb900ec9Sad * Redistribution and use in source and binary forms, with or without
11fb900ec9Sad * modification, are permitted provided that the following conditions
12fb900ec9Sad * are met:
13fb900ec9Sad * 1. Redistributions of source code must retain the above copyright
14fb900ec9Sad *    notice, this list of conditions and the following disclaimer.
15fb900ec9Sad * 2. Redistributions in binary form must reproduce the above copyright
16fb900ec9Sad *    notice, this list of conditions and the following disclaimer in the
17fb900ec9Sad *    documentation and/or other materials provided with the distribution.
18fb900ec9Sad *
19fb900ec9Sad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20fb900ec9Sad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21fb900ec9Sad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22fb900ec9Sad * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23fb900ec9Sad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24fb900ec9Sad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25fb900ec9Sad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26fb900ec9Sad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27fb900ec9Sad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28fb900ec9Sad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29fb900ec9Sad * POSSIBILITY OF SUCH DAMAGE.
30fb900ec9Sad */
31fb900ec9Sad
32fb900ec9Sad#include "atomic_op_asm.h"
33fb900ec9Sad
34fb900ec9Sad	.text
35fb900ec9Sad
362d0314d3Sad#ifdef _KERNEL
372d0314d3Sad
38fb900ec9Sad/*
39fb900ec9Sad * We start out with no-op versions that do nothing.  We hot-patch when
40fb900ec9Sad * we detect a MP system.
41fb900ec9Sad */
426740bb54SchsLEAF(_membar_producer, 0)
43fb900ec9Sad	RET
44fb900ec9Sad	nop
45fb900ec9SadEND(_membar_producer)
46fb900ec9SadEXPORT(_membar_producer_end)
47fb900ec9Sad
486740bb54SchsLEAF(_membar_sync, 0)
49fb900ec9Sad	RET
50fb900ec9Sad	nop
51fb900ec9SadEND(_membar_sync)
52fb900ec9SadEXPORT(_membar_sync_end)
53131790b4Smatt
546740bb54SchsLEAF(_membar_producer_mp, 0)
55*4f8ce3b3Sriastradh	wmb		/* store-before-store */
56fb900ec9Sad	RET
57fb900ec9SadEND(_membar_producer_mp)
58fb900ec9SadEXPORT(_membar_producer_mp_end)
59fb900ec9Sad
606740bb54SchsLEAF(_membar_sync_mp, 0)
61*4f8ce3b3Sriastradh	mb		/* load/store-before-load/store */
62fb900ec9Sad	RET
63fb900ec9SadEND(_membar_sync_mp)
64fb900ec9SadEXPORT(_membar_sync_mp_end)
65fb900ec9Sad
662d0314d3Sad#else	/* _KERNEL */
672d0314d3Sad
686740bb54SchsLEAF(_membar_producer, 0)
69*4f8ce3b3Sriastradh	mb		/* load/store-before-load/store */
702d0314d3Sad	RET
712d0314d3SadEND(_membar_producer)
722d0314d3SadEXPORT(_membar_producer_end)
732d0314d3Sad
746740bb54SchsLEAF(_membar_sync, 0)
75*4f8ce3b3Sriastradh	mb		/* load/store-before-load/store */
762d0314d3Sad	RET
772d0314d3SadEND(_membar_sync)
782d0314d3SadEXPORT(_membar_sync_end)
792d0314d3Sad
80fb900ec9Sad#endif	/* _KERNEL */
812d0314d3Sad
822d0314d3SadATOMIC_OP_ALIAS(membar_producer,_membar_producer)
832d0314d3SadATOMIC_OP_ALIAS(membar_sync,_membar_sync)
84*4f8ce3b3Sriastradh
85*4f8ce3b3SriastradhATOMIC_OP_ALIAS(membar_acquire,_membar_sync)
86*4f8ce3b3SriastradhSTRONG_ALIAS(_membar_acquire,_membar_sync)
87*4f8ce3b3SriastradhATOMIC_OP_ALIAS(membar_release,_membar_sync)
88*4f8ce3b3SriastradhSTRONG_ALIAS(_membar_release,_membar_sync)
892d0314d3SadATOMIC_OP_ALIAS(membar_enter,_membar_sync)
902d0314d3SadSTRONG_ALIAS(_membar_enter,_membar_sync)
912d0314d3SadATOMIC_OP_ALIAS(membar_exit,_membar_sync)
922d0314d3SadSTRONG_ALIAS(_membar_exit,_membar_sync)
932d0314d3SadATOMIC_OP_ALIAS(membar_consumer,_membar_sync)
942d0314d3SadSTRONG_ALIAS(_membar_consumer,_membar_sync)
95fe3ead6aSriastradhATOMIC_OP_ALIAS(membar_datadep_consumer,_membar_sync)
96fe3ead6aSriastradhSTRONG_ALIAS(_membar_datadep_consumer,_membar_sync)
97