From 935eacf3517b9c12f71d7693b9e0aada5cffa3ea Mon Sep 17 00:00:00 2001 From: ad Date: Thu, 29 Nov 2007 17:09:31 +0000 Subject: [PATCH] Pull in m68k atomic ops from the thorpej-atomic branch. --- common/lib/libc/arch/m68k/atomic/Makefile.inc | 17 +++++ common/lib/libc/arch/m68k/atomic/atomic_add.S | 72 +++++++++++++++++++ common/lib/libc/arch/m68k/atomic/atomic_and.S | 66 +++++++++++++++++ common/lib/libc/arch/m68k/atomic/atomic_cas.S | 57 +++++++++++++++ common/lib/libc/arch/m68k/atomic/atomic_dec.S | 70 ++++++++++++++++++ common/lib/libc/arch/m68k/atomic/atomic_inc.S | 70 ++++++++++++++++++ .../lib/libc/arch/m68k/atomic/atomic_op_asm.h | 54 ++++++++++++++ common/lib/libc/arch/m68k/atomic/atomic_or.S | 66 +++++++++++++++++ .../lib/libc/arch/m68k/atomic/atomic_swap.S | 58 +++++++++++++++ 9 files changed, 530 insertions(+) create mode 100644 common/lib/libc/arch/m68k/atomic/Makefile.inc create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_add.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_and.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_cas.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_dec.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_inc.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_op_asm.h create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_or.S create mode 100644 common/lib/libc/arch/m68k/atomic/atomic_swap.S diff --git a/common/lib/libc/arch/m68k/atomic/Makefile.inc b/common/lib/libc/arch/m68k/atomic/Makefile.inc new file mode 100644 index 000000000000..bd3e7ca99351 --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/Makefile.inc @@ -0,0 +1,17 @@ +# $NetBSD: Makefile.inc,v 1.2 2007/11/29 17:09:31 ad Exp $ + +# +# Note: The atomic operations here in these assembly files are atomic +# only with respect to regular memory on uniprocessor systems. Since +# we don't support any MP m68k systems, this is just fine. If we ever +# do, then these routines will probably need to be replaced with CAS- +# based routines (CAS generates an atomic bus cycle, whereas these +# others are merely single-instruction). +# + +.if defined(LIB) && (${LIB} == "kern") + +SRCS+= atomic_add.S atomic_and.S atomic_cas.S atomic_dec.S \ + atomic_inc.S atomic_or.S atomic_swap.S membar_ops_nop.c + +.endif diff --git a/common/lib/libc/arch/m68k/atomic/atomic_add.S b/common/lib/libc/arch/m68k/atomic/atomic_add.S new file mode 100644 index 000000000000..d7d61d32e8ac --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_add.S @@ -0,0 +1,72 @@ +/* $NetBSD: atomic_add.S,v 1.2 2007/11/29 17:09:31 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + .align 2 + +ENTRY_NOPROFILE(_atomic_add_32) + movl %sp@(4), %a0 + movl %sp@(8), %d0 + addl %d0, %a0@ + rts +ATOMIC_OP_ALIAS(atomic_add_32,_atomic_add_32) +ATOMIC_OP_ALIAS(atomic_add_int,_atomic_add_32) +STRONG_ALIAS(_atomic_add_int,_atomic_add_32) +ATOMIC_OP_ALIAS(atomic_add_long,_atomic_add_32) +STRONG_ALIAS(_atomic_add_long,_atomic_add_32) +ATOMIC_OP_ALIAS(atomic_add_ptr,_atomic_add_32) +STRONG_ALIAS(_atomic_add_ptr,_atomic_add_32) + +ENTRY_NOPROFILE(_atomic_add_32_nv) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %d0, %d1 + addl %sp@(8), %d0 + casl %d1, %d0, %a0@ + bne 1b + movl %d0, %a0 /* pointers return also in %a0 */ + rts +ATOMIC_OP_ALIAS(atomic_add_32_nv,_atomic_add_32_nv) +ATOMIC_OP_ALIAS(atomic_add_int_nv,_atomic_add_32_nv) +STRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv) +ATOMIC_OP_ALIAS(atomic_add_long_nv,_atomic_add_32_nv) +STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_32_nv) +ATOMIC_OP_ALIAS(atomic_add_ptr_nv,_atomic_add_32_nv) +STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_32_nv) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_and.S b/common/lib/libc/arch/m68k/atomic/atomic_and.S new file mode 100644 index 000000000000..e32d0153e8dd --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_and.S @@ -0,0 +1,66 @@ +/* $NetBSD: atomic_and.S,v 1.2 2007/11/29 17:09:32 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_and_32) + movl %sp@(4), %a0 + movl %sp@(8), %d0 + andl %d0, %a0@ + rts +ATOMIC_OP_ALIAS(atomic_and_32,_atomic_and_32) +ATOMIC_OP_ALIAS(atomic_and_uint,_atomic_and_32) +STRONG_ALIAS(_atomic_and_uint,_atomic_and_32) +ATOMIC_OP_ALIAS(atomic_and_ulong,_atomic_and_32) +STRONG_ALIAS(_atomic_and_ulong,_atomic_and_32) + +ENTRY_NOPROFILE(_atomic_and_32_nv) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %d0, %d1 + andl %sp@(8), %d0 + casl %d1, %d0, %a0@ + bne 1b + rts +ATOMIC_OP_ALIAS(atomic_and_32_nv,_atomic_and_32_nv) +ATOMIC_OP_ALIAS(atomic_and_uint_nv,_atomic_and_32_nv) +STRONG_ALIAS(_atomic_and_uint_nv,_atomic_and_32_nv) +ATOMIC_OP_ALIAS(atomic_and_ulong_nv,_atomic_and_32_nv) +STRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_32_nv) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_cas.S b/common/lib/libc/arch/m68k/atomic/atomic_cas.S new file mode 100644 index 000000000000..75a71ba35a3f --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_cas.S @@ -0,0 +1,57 @@ +/* $NetBSD: atomic_cas.S,v 1.2 2007/11/29 17:09:32 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_cas_32) + movl %sp@(4), %a0 + movl %sp@(8), %d0 + movl %sp@(12), %d1 + casl %d0, %d1, %a0@ + /* %d0 now contains the old value */ + movl %d0, %a0 /* pointers return also in %a0 */ + rts +ATOMIC_OP_ALIAS(atomic_cas_32,_atomic_cas_32) +ATOMIC_OP_ALIAS(atomic_cas_uint,_atomic_cas_32) +STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32) +ATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_32) +STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32) +ATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_32) +STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_dec.S b/common/lib/libc/arch/m68k/atomic/atomic_dec.S new file mode 100644 index 000000000000..692e5a623778 --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_dec.S @@ -0,0 +1,70 @@ +/* $NetBSD: atomic_dec.S,v 1.2 2007/11/29 17:09:32 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_dec_32) + movl %sp@(4), %a0 + subql #1, %a0@ + rts +ATOMIC_OP_ALIAS(atomic_dec_32,_atomic_dec_32) +ATOMIC_OP_ALIAS(atomic_dec_uint,_atomic_dec_32) +STRONG_ALIAS(_atomic_dec_uint,_atomic_dec_32) +ATOMIC_OP_ALIAS(atomic_dec_ulong,_atomic_dec_32) +STRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_32) +ATOMIC_OP_ALIAS(atomic_dec_ptr,_atomic_dec_32) +STRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_32) + +ENTRY_NOPROFILE(_atomic_dec_32_nv) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %d0, %d1 + subql #1, %d0 + casl %d1, %d0, %a0@ + bne 1b + movl %d0, %a0 /* pointers return also in %a0 */ + rts +ATOMIC_OP_ALIAS(atomic_dec_32_nv,_atomic_dec_32_nv) +ATOMIC_OP_ALIAS(atomic_dec_uint_nv,_atomic_dec_32_nv) +STRONG_ALIAS(_atomic_dec_uint_nv,_atomic_dec_32_nv) +ATOMIC_OP_ALIAS(atomic_dec_ulong_nv,_atomic_dec_32_nv) +STRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_32_nv) +ATOMIC_OP_ALIAS(atomic_dec_ptr_nv,_atomic_dec_32_nv) +STRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_32_nv) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_inc.S b/common/lib/libc/arch/m68k/atomic/atomic_inc.S new file mode 100644 index 000000000000..6e06fffe034a --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_inc.S @@ -0,0 +1,70 @@ +/* $NetBSD: atomic_inc.S,v 1.2 2007/11/29 17:09:32 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_inc_32) + movl %sp@(4), %a0 + addql #1, %a0@ + rts +ATOMIC_OP_ALIAS(atomic_inc_32,_atomic_inc_32) +ATOMIC_OP_ALIAS(atomic_inc_uint,_atomic_inc_32) +STRONG_ALIAS(_atomic_inc_uint,_atomic_inc_32) +ATOMIC_OP_ALIAS(atomic_inc_ulong,_atomic_inc_32) +STRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_32) +ATOMIC_OP_ALIAS(atomic_inc_ptr,_atomic_inc_32) +STRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_32) + +ENTRY_NOPROFILE(_atomic_inc_32_nv) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %d0, %d1 + addql #1, %d0 + casl %d1, %d0, %a0@ + bne 1b + movl %d0, %a0 /* pointers return also in %a0 */ + rts +ATOMIC_OP_ALIAS(atomic_inc_32_nv,_atomic_inc_32_nv) +ATOMIC_OP_ALIAS(atomic_inc_uint_nv,_atomic_inc_32_nv) +STRONG_ALIAS(_atomic_inc_uint_nv,_atomic_inc_32_nv) +ATOMIC_OP_ALIAS(atomic_inc_ulong_nv,_atomic_inc_32_nv) +STRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_32_nv) +ATOMIC_OP_ALIAS(atomic_inc_ptr_nv,_atomic_inc_32_nv) +STRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_32_nv) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_op_asm.h b/common/lib/libc/arch/m68k/atomic/atomic_op_asm.h new file mode 100644 index 000000000000..8fbc64d9ddce --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_op_asm.h @@ -0,0 +1,54 @@ +/* $NetBSD: atomic_op_asm.h,v 1.2 2007/11/29 17:09:32 ad Exp $ */ + +/*- + * Copyright (c) 2006, 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _ATOMIC_OP_ASM_H_ +#define _ATOMIC_OP_ASM_H_ + +#include + +#if defined(_KERNEL) + +#define ATOMIC_OP_ALIAS(a,s) STRONG_ALIAS(a,s) + +#else /* _KERNEL */ + +#define ATOMIC_OP_ALIAS(a,s) WEAK_ALIAS(a,s) + +#endif /* _KERNEL */ + +#endif /* _ATOMIC_OP_ASM_H_ */ diff --git a/common/lib/libc/arch/m68k/atomic/atomic_or.S b/common/lib/libc/arch/m68k/atomic/atomic_or.S new file mode 100644 index 000000000000..195feeacf199 --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_or.S @@ -0,0 +1,66 @@ +/* $NetBSD: atomic_or.S,v 1.2 2007/11/29 17:09:33 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_or_32) + movl %sp@(4), %a0 + movl %sp@(8), %d0 + orl %d0, %a0@ + rts +ATOMIC_OP_ALIAS(atomic_or_32,_atomic_or_32) +ATOMIC_OP_ALIAS(atomic_or_uint,_atomic_or_32) +STRONG_ALIAS(_atomic_or_uint,_atomic_or_32) +ATOMIC_OP_ALIAS(atomic_or_ulong,_atomic_or_32) +STRONG_ALIAS(_atomic_or_ulong,_atomic_or_32) + +ENTRY_NOPROFILE(_atomic_or_32_nv) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %d0, %d1 + orl %sp@(8), %d0 + casl %d1, %d0, %a0@ + bne 1b + rts +ATOMIC_OP_ALIAS(atomic_or_32_nv,_atomic_or_32_nv) +ATOMIC_OP_ALIAS(atomic_or_uint_nv,_atomic_or_32_nv) +STRONG_ALIAS(_atomic_or_uint_nv,_atomic_or_32_nv) +ATOMIC_OP_ALIAS(atomic_or_ulong_nv,_atomic_or_32_nv) +STRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_32_nv) diff --git a/common/lib/libc/arch/m68k/atomic/atomic_swap.S b/common/lib/libc/arch/m68k/atomic/atomic_swap.S new file mode 100644 index 000000000000..1607cc8bacea --- /dev/null +++ b/common/lib/libc/arch/m68k/atomic/atomic_swap.S @@ -0,0 +1,58 @@ +/* $NetBSD: atomic_swap.S,v 1.2 2007/11/29 17:09:33 ad Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "atomic_op_asm.h" + + .text + +ENTRY_NOPROFILE(_atomic_swap_32) + movl %sp@(4), %a0 +1: movl %a0@, %d0 + movl %sp@(8), %d1 + casl %d0, %d1, %a0@ + bne 1b + /* %d0 now contains the old value */ + movl %d0, %a0 /* pointers return also in %a0 */ + rts +ATOMIC_OP_ALIAS(atomic_swap_32,_atomic_swap_32) +ATOMIC_OP_ALIAS(atomic_swap_uint,_atomic_swap_32) +STRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32) +ATOMIC_OP_ALIAS(atomic_swap_ulong,_atomic_swap_32) +STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_32) +ATOMIC_OP_ALIAS(atomic_swap_ptr,_atomic_swap_32) +STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_32)