CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: mrg Date: Mon Sep 7 00:52:19 UTC 2020 Modified Files: src/common/lib/libc/atomic: atomic_c11_compare_exchange_cas_16.c atomic_c11_compare_exchange_cas_32.c atomic_c11_compare_exchange_cas_8.c atomic_load.c atomic_store.c Log Message: make some prototypes match the builtin properly. GCC 9 complains with the old version, GCC 8 is happy with this version. tested on sparc. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c \ src/common/lib/libc/atomic/atomic_load.c \ src/common/lib/libc/atomic/atomic_store.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.2 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.3 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.2 Tue Nov 4 19:56:44 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c Mon Sep 7 00:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_16.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_16.c,v 1.3 2020/09/07 00:52:19 mrg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,15 +36,15 @@ #endif #include -bool __atomic_compare_exchange_2(volatile uint16_t *, uint16_t *, uint16_t, +bool __atomic_compare_exchange_2(volatile void *, void *, uint16_t, bool, int, int); bool -__atomic_compare_exchange_2(volatile uint16_t *mem, -uint16_t *expected, uint16_t desired, +__atomic_compare_exchange_2(volatile void *mem, +void *expected, uint16_t desired, bool weak, int success, int failure) { - uint16_t old = *expected; + uint16_t old = *(uint16_t *)expected; /* * Ignore the details (weak, memory model on success and failure) Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.2 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.3 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.2 Tue Nov 4 19:56:44 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c Mon Sep 7 00:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_32.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_32.c,v 1.3 2020/09/07 00:52:19 mrg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,15 +36,15 @@ #endif #include -bool __atomic_compare_exchange_4(volatile uint32_t *, uint32_t *, uint32_t, +bool __atomic_compare_exchange_4(volatile void *, void *, uint32_t, bool, int, int); bool -__atomic_compare_exchange_4(volatile uint32_t *mem, -uint32_t *expected, uint32_t desired, +__atomic_compare_exchange_4(volatile void *mem, +void *expected, uint32_t desired, bool weak, int success, int failure) { - uint32_t old = *expected; + uint32_t old = *(uint32_t *)expected; /* * Ignore the details (weak, memory model on success and failure) Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.2 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.3 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.2 Tue Nov 4 19:56:44 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c Mon Sep 7 00:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_8.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_8.c,v 1.3 2020/09/07 00:52:19 mrg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,15 +36,15 @@ #endif #include -bool __atomic_compare_exchange_1(volatile uint8_t *, uint8_t *, uint8_t, +bool __atomic_compare_exchange_1(volatile void *, void *, uint8_t, bool, int, int); bool -__atomic_compare_exchange_1(volatile uint8_t *mem, -uint8_t *expected, uint8_t desired, +__atomic_compare_exchange_1(volatile void *mem, +void *expected, uint8_t desired, bool weak, int success, int failure) { - uint8_t old = *expected; + uint8_t old = *(uint8_t *)expected; /* * Ignore the details (weak, memory model on success and failure) Index: src/common/lib/libc/atomic/atomic_load.c diff -u src/common/lib/libc/atomic/atomic_load.c:1.2 src/common/lib/libc/atomic/atomic_load.c:1.3 --- src/common/lib/libc/atomic/atomic_load.c:1.2 Sun Jul 6 01:19:45 2014 +++ src/common/lib/libc/atomic/atomic_load.c Mon Sep 7 00:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD:
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri May 15 15:20:40 UTC 2020 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: PR 55239: initialize all RAS sections for non-MP configurations To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.16 src/common/lib/libc/atomic/atomic_init_testset.c:1.17 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.16 Mon Feb 18 11:22:56 2019 +++ src/common/lib/libc/atomic/atomic_init_testset.c Fri May 15 15:20:40 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.16 2019/02/18 11:22:56 martin Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.17 2020/05/15 15:20:40 martin Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include -__RCSID("$NetBSD: atomic_init_testset.c,v 1.16 2019/02/18 11:22:56 martin Exp $"); +__RCSID("$NetBSD: atomic_init_testset.c,v 1.17 2020/05/15 15:20:40 martin Exp $"); #include "atomic_op_namespace.h" @@ -296,30 +296,28 @@ __libc_atomic_init(void) return; if (ncpu > 1) return; + if (rasctl(RAS_ADDR(_atomic_cas), RAS_SIZE(_atomic_cas), RAS_INSTALL) == 0) { _atomic_cas_fn = _atomic_cas_up; - return; } + #ifdef __HAVE_ATOMIC_CAS_64_UP if (rasctl(RAS_ADDR(_atomic_cas_64), RAS_SIZE(_atomic_cas_64), RAS_INSTALL) == 0) { _atomic_cas_64_fn = _atomic_cas_64_up; - return; } #endif if (rasctl(RAS_ADDR(_atomic_cas_16), RAS_SIZE(_atomic_cas_16), RAS_INSTALL) == 0) { _atomic_cas_16_fn = _atomic_cas_16_up; - return; } if (rasctl(RAS_ADDR(_atomic_cas_8), RAS_SIZE(_atomic_cas_8), RAS_INSTALL) == 0) { _atomic_cas_8_fn = _atomic_cas_8_up; - return; } }
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: isaki Date: Fri Mar 1 09:57:32 UTC 2019 Modified Files: src/common/lib/libc/atomic: atomic_or_16_cas.c atomic_or_8_cas.c Log Message: Fix return value. or_and_fetch should return new value. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/atomic/atomic_or_16_cas.c \ src/common/lib/libc/atomic/atomic_or_8_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_or_16_cas.c diff -u src/common/lib/libc/atomic/atomic_or_16_cas.c:1.3 src/common/lib/libc/atomic/atomic_or_16_cas.c:1.4 --- src/common/lib/libc/atomic/atomic_or_16_cas.c:1.3 Mon Jun 23 21:53:45 2014 +++ src/common/lib/libc/atomic/atomic_or_16_cas.c Fri Mar 1 09:57:32 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_16_cas.c,v 1.3 2014/06/23 21:53:45 joerg Exp $ */ +/* $NetBSD: atomic_or_16_cas.c,v 1.4 2019/03/01 09:57:32 isaki Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ or_and_fetch_2(volatile uint16_t *addr, old = *addr; new = old | val; } while (atomic_cas_16(addr, old, new) != old); - return old; + return new; } __strong_alias(__atomic_fetch_or_2,__sync_fetch_and_or_2) Index: src/common/lib/libc/atomic/atomic_or_8_cas.c diff -u src/common/lib/libc/atomic/atomic_or_8_cas.c:1.3 src/common/lib/libc/atomic/atomic_or_8_cas.c:1.4 --- src/common/lib/libc/atomic/atomic_or_8_cas.c:1.3 Mon Jun 23 21:53:45 2014 +++ src/common/lib/libc/atomic/atomic_or_8_cas.c Fri Mar 1 09:57:32 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_8_cas.c,v 1.3 2014/06/23 21:53:45 joerg Exp $ */ +/* $NetBSD: atomic_or_8_cas.c,v 1.4 2019/03/01 09:57:32 isaki Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ or_and_fetch_1(volatile uint8_t *addr, u old = *addr; new = old | val; } while (atomic_cas_8(addr, old, new) != old); - return old; + return new; } __strong_alias(__atomic_fetch_or_1,__sync_fetch_and_or_1)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: isaki Date: Fri Mar 1 06:14:52 UTC 2019 Modified Files: src/common/lib/libc/atomic: atomic_nand_16_cas.c atomic_nand_32_cas.c atomic_nand_8_cas.c Log Message: Add missing alias for __atomic_fetch_nand_N. XXX I'm not sure why does llvm/sparc call __atomic instead of __sync though. XXX atomic_*_cas.c should be more symmetric... To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/atomic/atomic_nand_16_cas.c \ src/common/lib/libc/atomic/atomic_nand_8_cas.c cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_nand_32_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_nand_16_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.2 src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.3 --- src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.2 Fri Feb 21 16:06:48 2014 +++ src/common/lib/libc/atomic/atomic_nand_16_cas.c Fri Mar 1 06:14:52 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_16_cas.c,v 1.2 2014/02/21 16:06:48 martin Exp $ */ +/* $NetBSD: atomic_nand_16_cas.c,v 1.3 2019/03/01 06:14:52 isaki Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -61,3 +61,5 @@ nand_and_fetch_2(volatile uint16_t *addr } while (atomic_cas_16(addr, old, new) != old); return new; } + +__strong_alias(__atomic_fetch_nand_2,__sync_fetch_and_nand_2) Index: src/common/lib/libc/atomic/atomic_nand_8_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.2 src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.3 --- src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.2 Fri Feb 21 16:06:48 2014 +++ src/common/lib/libc/atomic/atomic_nand_8_cas.c Fri Mar 1 06:14:52 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_8_cas.c,v 1.2 2014/02/21 16:06:48 martin Exp $ */ +/* $NetBSD: atomic_nand_8_cas.c,v 1.3 2019/03/01 06:14:52 isaki Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -61,3 +61,5 @@ nand_and_fetch_1(volatile uint8_t *addr, } while (atomic_cas_8(addr, old, new) != old); return new; } + +__strong_alias(__atomic_fetch_nand_1,__sync_fetch_and_nand_1) Index: src/common/lib/libc/atomic/atomic_nand_32_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_32_cas.c:1.1 src/common/lib/libc/atomic/atomic_nand_32_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_nand_32_cas.c:1.1 Fri Feb 21 10:52:50 2014 +++ src/common/lib/libc/atomic/atomic_nand_32_cas.c Fri Mar 1 06:14:52 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_32_cas.c,v 1.1 2014/02/21 10:52:50 martin Exp $ */ +/* $NetBSD: atomic_nand_32_cas.c,v 1.2 2019/03/01 06:14:52 isaki Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -59,3 +59,5 @@ nand_and_fetch_4(volatile uint32_t *addr } while (atomic_cas_32(addr, old, new) != old); return new; } + +__strong_alias(__atomic_fetch_nand_4,__sync_fetch_and_nand_4)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Sat Feb 27 19:20:01 UTC 2016 Modified Files: src/common/lib/libc/atomic: atomic_add_32_nv_cas.c Log Message: Include the C11 atomic builtin alias. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/atomic/atomic_add_32_nv_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_32_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.6 src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.7 --- src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.6 Sat Feb 22 17:08:30 2014 +++ src/common/lib/libc/atomic/atomic_add_32_nv_cas.c Sat Feb 27 19:20:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_32_nv_cas.c,v 1.6 2014/02/22 17:08:30 martin Exp $ */ +/* $NetBSD: atomic_add_32_nv_cas.c,v 1.7 2016/02/27 19:20:01 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -49,6 +49,7 @@ atomic_add_32_nv(volatile uint32_t *addr #undef atomic_add_32_nv atomic_op_alias(atomic_add_32_nv,_atomic_add_32_nv) crt_alias(__sync_add_and_fetch_4,_atomic_add_32_nv) +crt_alias(__atomic_add_fetch_4,_atomic_add_32_nv) #undef atomic_add_int_nv atomic_op_alias(atomic_add_int_nv,_atomic_add_32_nv)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Tue Nov 4 19:56:44 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_c11_compare_exchange_cas_16.c atomic_c11_compare_exchange_cas_32.c atomic_c11_compare_exchange_cas_8.c Log Message: Provide prototypes to fix build with clang. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.1 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.2 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.1 Sun Oct 12 17:51:47 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c Tue Nov 4 19:56:44 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_16.c,v 1.1 2014/10/12 17:51:47 martin Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_16.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,6 +36,9 @@ #endif #include sys/atomic.h +bool __atomic_compare_exchange_2(volatile uint16_t *, uint16_t *, uint16_t, +bool, int, int); + bool __atomic_compare_exchange_2(volatile uint16_t *mem, uint16_t *expected, uint16_t desired, Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.1 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.2 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.1 Sun Oct 12 17:51:47 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c Tue Nov 4 19:56:44 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_32.c,v 1.1 2014/10/12 17:51:47 martin Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_32.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,6 +36,9 @@ #endif #include sys/atomic.h +bool __atomic_compare_exchange_4(volatile uint32_t *, uint32_t *, uint32_t, +bool, int, int); + bool __atomic_compare_exchange_4(volatile uint32_t *mem, uint32_t *expected, uint32_t desired, Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c diff -u src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.1 src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.2 --- src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c:1.1 Sun Oct 12 17:51:47 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c Tue Nov 4 19:56:44 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_c11_compare_exchange_cas_8.c,v 1.1 2014/10/12 17:51:47 martin Exp $ */ +/* $NetBSD: atomic_c11_compare_exchange_cas_8.c,v 1.2 2014/11/04 19:56:44 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -36,6 +36,9 @@ #endif #include sys/atomic.h +bool __atomic_compare_exchange_1(volatile uint8_t *, uint8_t *, uint8_t, +bool, int, int); + bool __atomic_compare_exchange_1(volatile uint8_t *mem, uint8_t *expected, uint8_t desired,
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Sun Oct 12 17:51:47 UTC 2014 Added Files: src/common/lib/libc/atomic: atomic_c11_compare_exchange_cas_16.c atomic_c11_compare_exchange_cas_32.c atomic_c11_compare_exchange_cas_8.c Log Message: Provide __atomic_compare_exchange_N (as needed for the C11 2011 atomic ops) via the corresponding CAS. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c \ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_8.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c diff -u /dev/null src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c:1.1 --- /dev/null Sun Oct 12 17:51:47 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_16.c Sun Oct 12 17:51:47 2014 @@ -0,0 +1,52 @@ +/* $NetBSD: atomic_c11_compare_exchange_cas_16.c,v 1.1 2014/10/12 17:51:47 martin Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann. + * + * 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. + * + * 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_namespace.h + +#if !defined(_KERNEL) !defined(_STANDALONE) +#include stdbool.h +#endif +#include sys/atomic.h + +bool +__atomic_compare_exchange_2(volatile uint16_t *mem, +uint16_t *expected, uint16_t desired, +bool weak, int success, int failure) +{ + uint16_t old = *expected; + + /* + * Ignore the details (weak, memory model on success and failure) + * and just do the cas. If we get here the compiler couldn't + * do better and it mostly will not matter at all. + */ + return atomic_cas_16(mem, old, desired) == old; +} Index: src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c diff -u /dev/null src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c:1.1 --- /dev/null Sun Oct 12 17:51:47 2014 +++ src/common/lib/libc/atomic/atomic_c11_compare_exchange_cas_32.c Sun Oct 12 17:51:47 2014 @@ -0,0 +1,52 @@ +/* $NetBSD: atomic_c11_compare_exchange_cas_32.c,v 1.1 2014/10/12 17:51:47 martin Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann. + * + * 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. + * + * 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 + *
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Wed Sep 3 19:30:47 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_cas_by_cas32.c Log Message: Add __sync_val_compare_and_swap_{1,2} aliases for _atomic_cas_{8,16} To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/atomic/atomic_cas_by_cas32.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_cas_by_cas32.c diff -u src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.3 src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.4 --- src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.3 Sun Mar 9 16:19:14 2014 +++ src/common/lib/libc/atomic/atomic_cas_by_cas32.c Wed Sep 3 19:30:47 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_by_cas32.c,v 1.3 2014/03/09 16:19:14 riastradh Exp $ */ +/* $NetBSD: atomic_cas_by_cas32.c,v 1.4 2014/09/03 19:30:47 matt Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #include sys/types.h #include sys/inttypes.h +#include atomic_op_namespace.h + uint32_t _atomic_cas_32(volatile uint32_t *addr, uint32_t old, uint32_t new); uint16_t _atomic_cas_16(volatile uint16_t *addr, uint16_t old, uint16_t new); uint8_t _atomic_cas_8(volatile uint8_t *addr, uint8_t old, uint8_t new); @@ -62,6 +64,8 @@ _atomic_cas_16(volatile uint16_t *addr, return old; } +crt_alias(__sync_val_compare_and_swap_2,_atomic_cas_16) + uint8_t _atomic_cas_8(volatile uint8_t *addr, uint8_t old, uint8_t new) { @@ -83,3 +87,5 @@ _atomic_cas_8(volatile uint8_t *addr, ui return old; } + +crt_alias(__sync_val_compare_and_swap_1,_atomic_cas_8)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Sun Jul 6 01:19:45 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_load.c atomic_store.c Log Message: Add unused memory model argument to make GCC happy. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_load.c \ src/common/lib/libc/atomic/atomic_store.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_load.c diff -u src/common/lib/libc/atomic/atomic_load.c:1.1 src/common/lib/libc/atomic/atomic_load.c:1.2 --- src/common/lib/libc/atomic/atomic_load.c:1.1 Sat Jul 5 20:44:46 2014 +++ src/common/lib/libc/atomic/atomic_load.c Sun Jul 6 01:19:45 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_load.c,v 1.1 2014/07/05 20:44:46 joerg Exp $ */ +/* $NetBSD: atomic_load.c,v 1.2 2014/07/06 01:19:45 joerg Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_load.c,v 1.1 2014/07/05 20:44:46 joerg Exp $); +__RCSID($NetBSD: atomic_load.c,v 1.2 2014/07/06 01:19:45 joerg Exp $); #include atomic_op_namespace.h @@ -35,9 +35,9 @@ __RCSID($NetBSD: atomic_load.c,v 1.1 20 #include sys/atomic.h #define atomic_load_n(n,b) \ -uint ## b ## _t __atomic_load_ ## n(volatile uint ## b ## _t *); \ +uint ## b ## _t __atomic_load_ ## n(volatile uint ## b ## _t *, int); \ uint ## b ## _t \ -__atomic_load_ ## n(volatile uint ## b ## _t *ptr) \ +__atomic_load_ ## n(volatile uint ## b ## _t *ptr, int memmodel) \ { \ uint## b ##_t val; \ membar_enter(); \ Index: src/common/lib/libc/atomic/atomic_store.c diff -u src/common/lib/libc/atomic/atomic_store.c:1.1 src/common/lib/libc/atomic/atomic_store.c:1.2 --- src/common/lib/libc/atomic/atomic_store.c:1.1 Sat Jul 5 20:44:46 2014 +++ src/common/lib/libc/atomic/atomic_store.c Sun Jul 6 01:19:45 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_store.c,v 1.1 2014/07/05 20:44:46 joerg Exp $ */ +/* $NetBSD: atomic_store.c,v 1.2 2014/07/06 01:19:45 joerg Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_store.c,v 1.1 2014/07/05 20:44:46 joerg Exp $); +__RCSID($NetBSD: atomic_store.c,v 1.2 2014/07/06 01:19:45 joerg Exp $); #include atomic_op_namespace.h @@ -35,9 +35,10 @@ __RCSID($NetBSD: atomic_store.c,v 1.1 2 #include sys/atomic.h #define atomic_store_n(n,b) \ -void __atomic_store_ ## n(volatile uint ## b ## _t *, uint ## b ## _t); \ +void __atomic_store_ ## n(volatile uint ## b ## _t *, uint ## b ## _t, int); \ void \ -__atomic_store_ ## n(volatile uint ## b ## _t *ptr, uint ## b ## _t val) \ +__atomic_store_ ## n(volatile uint ## b ## _t *ptr, uint ## b ## _t val, \ + int memmodel) \ { \ membar_enter(); \ *ptr = val; \
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: riastradh Date: Sun Mar 9 16:19:14 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_cas_by_cas32.c Log Message: Fix subword atomic_cas. - Don't loop forever on failure. - Don't shift away the result and return zero on success. Evidently we lack automatic tests for these! To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/atomic/atomic_cas_by_cas32.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_cas_by_cas32.c diff -u src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.2 src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.3 --- src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.2 Fri Mar 7 08:42:58 2014 +++ src/common/lib/libc/atomic/atomic_cas_by_cas32.c Sun Mar 9 16:19:14 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_by_cas32.c,v 1.2 2014/03/07 08:42:58 martin Exp $ */ +/* $NetBSD: atomic_cas_by_cas32.c,v 1.3 2014/03/09 16:19:14 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -48,14 +48,18 @@ _atomic_cas_16(volatile uint16_t *addr, volatile uint32_t * ptr = (volatile uint32_t *)base; const size_t shift = off*8; const uint32_t mask = 0x0 shift; + const uint32_t old32_part = (uint32_t)old shift; + const uint32_t new32_part = (uint32_t)new shift; uint32_t old32, new32; do { old32 = *ptr; - new32 = (old32 ~mask) | (uint32_t)new shift; - old32 = (old32 ~mask) | (uint32_t)old shift; + if ((old32 mask) != old32_part) + return (uint16_t)((old32 mask) shift); + new32 = (old32 ~mask) | new32_part; } while (_atomic_cas_32(ptr, old32, new32) != old32); - return (old mask) shift; + + return old; } uint8_t @@ -66,12 +70,16 @@ _atomic_cas_8(volatile uint8_t *addr, ui volatile uint32_t * ptr = (volatile uint32_t *)base; const size_t shift = off*8; const uint32_t mask = 0x0ff shift; + const uint32_t old32_part = (uint32_t)old shift; + const uint32_t new32_part = (uint32_t)new shift; uint32_t old32, new32; do { old32 = *ptr; - new32 = (old32 ~mask) | (uint32_t)new shift; - old32 = (old32 ~mask) | (uint32_t)old shift; + if ((old32 mask) != old32_part) + return (uint8_t)((old32 mask) shift); + new32 = (old32 ~mask) | new32_part; } while (_atomic_cas_32(ptr, old32, new32) != old32); - return (old mask) shift; + + return old; }
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Mar 7 08:42:58 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_cas_by_cas32.c Log Message: Fix return value (typo, noticed by Nick Hudson) To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_cas_by_cas32.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_cas_by_cas32.c diff -u src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.1 src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.2 --- src/common/lib/libc/atomic/atomic_cas_by_cas32.c:1.1 Mon Feb 24 16:15:43 2014 +++ src/common/lib/libc/atomic/atomic_cas_by_cas32.c Fri Mar 7 08:42:58 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_by_cas32.c,v 1.1 2014/02/24 16:15:43 martin Exp $ */ +/* $NetBSD: atomic_cas_by_cas32.c,v 1.2 2014/03/07 08:42:58 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -55,7 +55,7 @@ _atomic_cas_16(volatile uint16_t *addr, new32 = (old32 ~mask) | (uint32_t)new shift; old32 = (old32 ~mask) | (uint32_t)old shift; } while (_atomic_cas_32(ptr, old32, new32) != old32); - return (old shift) mask; + return (old mask) shift; } uint8_t @@ -73,5 +73,5 @@ _atomic_cas_8(volatile uint8_t *addr, ui new32 = (old32 ~mask) | (uint32_t)new shift; old32 = (old32 ~mask) | (uint32_t)old shift; } while (_atomic_cas_32(ptr, old32, new32) != old32); - return (old shift) mask; + return (old mask) shift; }
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Mon Feb 24 17:18:27 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: Provide CAS variants for 16 and 8 bit when running with more that 1 cpu To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.13 src/common/lib/libc/atomic/atomic_init_testset.c:1.14 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.13 Sat Feb 22 17:08:30 2014 +++ src/common/lib/libc/atomic/atomic_init_testset.c Mon Feb 24 17:18:27 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.13 2014/02/22 17:08:30 martin Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.14 2014/02/24 17:18:27 martin Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.13 2014/02/22 17:08:30 martin Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.14 2014/02/24 17:18:27 martin Exp $); #include atomic_op_namespace.h @@ -53,6 +53,12 @@ __RCSID($NetBSD: atomic_init_testset.c, #define I128 I16 I16 I16 I16 I16 I16 I16 I16 static __cpu_simple_lock_t atomic_locks[128] = { I128 }; +/* + * Pick a lock out of above array depending on the object address + * passed. Most variables used atomically will not be in the same + * cacheline - and if they are, using the same lock is fine. + */ +#define HASH(PTR) (((uintptr_t)(PTR) 3) 127) #ifdef __HAVE_ASM_ATOMIC_CAS_UP extern uint32_t _atomic_cas_up(volatile uint32_t *, uint32_t, uint32_t); @@ -143,7 +149,41 @@ _atomic_cas_mp(volatile uint32_t *ptr, u __cpu_simple_lock_t *lock; uint32_t ret; - lock = atomic_locks[((uintptr_t)ptr 3) 127]; + lock = atomic_locks[HASH(ptr)]; + __cpu_simple_lock(lock); + ret = *ptr; + if (__predict_true(ret == old)) { + *ptr = new; + } + __cpu_simple_unlock(lock); + + return ret; +} + +static uint16_t +_atomic_cas_16_mp(volatile uint16_t *ptr, uint16_t old, uint16_t new) +{ + __cpu_simple_lock_t *lock; + uint16_t ret; + + lock = atomic_locks[HASH(ptr)]; + __cpu_simple_lock(lock); + ret = *ptr; + if (__predict_true(ret == old)) { + *ptr = new; + } + __cpu_simple_unlock(lock); + + return ret; +} + +static uint8_t +_atomic_cas_8_mp(volatile uint8_t *ptr, uint8_t old, uint8_t new) +{ + __cpu_simple_lock_t *lock; + uint8_t ret; + + lock = atomic_locks[HASH(ptr)]; __cpu_simple_lock(lock); ret = *ptr; if (__predict_true(ret == old)) { @@ -186,6 +226,8 @@ __libc_atomic_init(void) size_t len; _atomic_cas_fn = _atomic_cas_mp; + _atomic_cas_16_fn = _atomic_cas_16_mp; + _atomic_cas_8_fn = _atomic_cas_8_mp; mib[0] = CTL_HW; mib[1] = HW_NCPU;
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Feb 21 10:27:34 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_swap_32_cas.c atomic_swap_64_cas.c Log Message: Add missing __sync_lock_test_and_set_* aliases for PR lib/48601 To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/atomic_swap_32_cas.c cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_swap_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_swap_32_cas.c diff -u src/common/lib/libc/atomic/atomic_swap_32_cas.c:1.4 src/common/lib/libc/atomic/atomic_swap_32_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_swap_32_cas.c:1.4 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_swap_32_cas.c Fri Feb 21 10:27:34 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_swap_32_cas.c,v 1.4 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_swap_32_cas.c,v 1.5 2014/02/21 10:27:34 martin Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -50,6 +50,7 @@ atomic_op_alias(atomic_swap_32,_atomic_s #undef atomic_swap_uint atomic_op_alias(atomic_swap_uint,_atomic_swap_32) __strong_alias(_atomic_swap_uint,_atomic_swap_32) +__strong_alias(__sync_lock_test_and_set_4,_atomic_swap_32) #if !defined(_LP64) #undef atomic_swap_ulong atomic_op_alias(atomic_swap_ulong,_atomic_swap_32) Index: src/common/lib/libc/atomic/atomic_swap_64_cas.c diff -u src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.5 src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.5 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_swap_64_cas.c Fri Feb 21 10:27:34 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_swap_64_cas.c,v 1.5 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_swap_64_cas.c,v 1.6 2014/02/21 10:27:34 martin Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -53,6 +53,7 @@ atomic_op_alias(atomic_swap_64,_atomic_s #undef atomic_swap_ulong atomic_op_alias(atomic_swap_ulong,_atomic_swap_64) __strong_alias(_atomic_swap_ulong,_atomic_swap_64) +__strong_alias(__sync_lock_test_and_set_8,_atomic_swap_64) #undef atomic_swap_ptr atomic_op_alias(atomic_swap_ptr,_atomic_swap_64) __strong_alias(_atomic_swap_ptr,_atomic_swap_64)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Feb 21 10:52:50 UTC 2014 Added Files: src/common/lib/libc/atomic: atomic_cas_32_cas.c atomic_nand_32_cas.c atomic_sub_32_cas.c atomic_xor_32_cas.c Log Message: Provide 32bit __sync ops based on atomic_cas_32. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/common/lib/libc/atomic/atomic_cas_32_cas.c \ src/common/lib/libc/atomic/atomic_nand_32_cas.c \ src/common/lib/libc/atomic/atomic_sub_32_cas.c \ src/common/lib/libc/atomic/atomic_xor_32_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/common/lib/libc/atomic/atomic_cas_32_cas.c diff -u /dev/null src/common/lib/libc/atomic/atomic_cas_32_cas.c:1.1 --- /dev/null Fri Feb 21 10:52:50 2014 +++ src/common/lib/libc/atomic/atomic_cas_32_cas.c Fri Feb 21 10:52:50 2014 @@ -0,0 +1,45 @@ +/* $NetBSD: atomic_cas_32_cas.c,v 1.1 2014/02/21 10:52:50 martin Exp $ */ + +/*- + * Copyright (c) 2014 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. + * + * 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. + */ + +#if !defined(_KERNEL) !defined(_STANDALONE) +#include stdbool.h +#endif +#include sys/atomic.h + +bool bool_compare_and_swap_4(volatile uint32_t *, uint32_t, uint32_t, ...) +asm(__sync_bool_compare_and_swap_4); + +bool +bool_compare_and_swap_4(volatile uint32_t *addr, uint32_t oldval, + uint32_t newval, ...) +{ + return atomic_cas_32(addr, oldval, newval) == oldval; +} Index: src/common/lib/libc/atomic/atomic_nand_32_cas.c diff -u /dev/null src/common/lib/libc/atomic/atomic_nand_32_cas.c:1.1 --- /dev/null Fri Feb 21 10:52:50 2014 +++ src/common/lib/libc/atomic/atomic_nand_32_cas.c Fri Feb 21 10:52:50 2014 @@ -0,0 +1,61 @@ +/* $NetBSD: atomic_nand_32_cas.c,v 1.1 2014/02/21 10:52:50 martin Exp $ */ + +/*- + * Copyright (c) 2014 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. + * + * 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 sys/atomic.h + +uint32_t fetch_and_nand_4(volatile uint32_t *, uint32_t, ...) +asm(__sync_fetch_and_nand_4); +uint32_t nand_and_fetch_4(volatile uint32_t *, uint32_t, ...) +asm(__sync_nand_and_fetch_4); +
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Feb 21 14:42:09 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_swap_64_cas.c Log Message: Fix previous: move the alias declaration outside of a #ifdef _LP64 To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/atomic/atomic_swap_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_swap_64_cas.c diff -u src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.6 src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.7 --- src/common/lib/libc/atomic/atomic_swap_64_cas.c:1.6 Fri Feb 21 10:27:34 2014 +++ src/common/lib/libc/atomic/atomic_swap_64_cas.c Fri Feb 21 14:42:09 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_swap_64_cas.c,v 1.6 2014/02/21 10:27:34 martin Exp $ */ +/* $NetBSD: atomic_swap_64_cas.c,v 1.7 2014/02/21 14:42:09 martin Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -49,11 +49,11 @@ atomic_swap_64(volatile uint64_t *addr, #undef atomic_swap_64 atomic_op_alias(atomic_swap_64,_atomic_swap_64) +__strong_alias(__sync_lock_test_and_set_8,_atomic_swap_64) #if defined(_LP64) #undef atomic_swap_ulong atomic_op_alias(atomic_swap_ulong,_atomic_swap_64) __strong_alias(_atomic_swap_ulong,_atomic_swap_64) -__strong_alias(__sync_lock_test_and_set_8,_atomic_swap_64) #undef atomic_swap_ptr atomic_op_alias(atomic_swap_ptr,_atomic_swap_64) __strong_alias(_atomic_swap_ptr,_atomic_swap_64)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Feb 21 15:51:07 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_op_namespace.h Added Files: src/common/lib/libc/atomic: atomic_add_16_cas.c atomic_add_8_cas.c atomic_and_16_cas.c atomic_and_8_cas.c atomic_cas_16_cas.c atomic_cas_8_cas.c atomic_nand_16_cas.c atomic_nand_8_cas.c atomic_or_16_cas.c atomic_or_8_cas.c atomic_sub_16_cas.c atomic_sub_8_cas.c atomic_swap_16_cas.c atomic_swap_8_cas.c atomic_xor_16_cas.c atomic_xor_8_cas.c Log Message: Provide 8 and 16 bit sync ops (using 16 bit and 8 bit cas) To generate a diff of this commit: cvs rdiff -u -r0 -r1.2 src/common/lib/libc/atomic/atomic_add_16_cas.c \ src/common/lib/libc/atomic/atomic_add_8_cas.c \ src/common/lib/libc/atomic/atomic_and_16_cas.c \ src/common/lib/libc/atomic/atomic_and_8_cas.c \ src/common/lib/libc/atomic/atomic_cas_16_cas.c \ src/common/lib/libc/atomic/atomic_cas_8_cas.c \ src/common/lib/libc/atomic/atomic_or_16_cas.c \ src/common/lib/libc/atomic/atomic_or_8_cas.c \ src/common/lib/libc/atomic/atomic_swap_16_cas.c \ src/common/lib/libc/atomic/atomic_swap_8_cas.c cvs rdiff -u -r0 -r1.1 src/common/lib/libc/atomic/atomic_nand_16_cas.c \ src/common/lib/libc/atomic/atomic_nand_8_cas.c \ src/common/lib/libc/atomic/atomic_sub_16_cas.c \ src/common/lib/libc/atomic/atomic_sub_8_cas.c \ src/common/lib/libc/atomic/atomic_xor_16_cas.c \ src/common/lib/libc/atomic/atomic_xor_8_cas.c cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/atomic_op_namespace.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_op_namespace.h diff -u src/common/lib/libc/atomic/atomic_op_namespace.h:1.4 src/common/lib/libc/atomic/atomic_op_namespace.h:1.5 --- src/common/lib/libc/atomic/atomic_op_namespace.h:1.4 Mon Jun 23 10:33:52 2008 +++ src/common/lib/libc/atomic/atomic_op_namespace.h Fri Feb 21 15:51:07 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_op_namespace.h,v 1.4 2008/06/23 10:33:52 ad Exp $ */ +/* $NetBSD: atomic_op_namespace.h,v 1.5 2014/02/21 15:51:07 martin Exp $ */ /*- * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. @@ -73,6 +73,8 @@ #define atomic_cas_ulong _atomic_cas_ulong #define atomic_cas_ptr _atomic_cas_ptr #define atomic_cas_64 _atomic_cas_64 +#define atomic_cas_16 _atomic_cas_16 +#define atomic_cas_8 _atomic_cas_8 #define atomic_cas_32_ni _atomic_cas_32_ni #define atomic_cas_uint_ni _atomic_cas_uint_ni Added files: Index: src/common/lib/libc/atomic/atomic_add_16_cas.c diff -u /dev/null src/common/lib/libc/atomic/atomic_add_16_cas.c:1.2 --- /dev/null Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_add_16_cas.c Fri Feb 21 15:51:07 2014 @@ -0,0 +1,63 @@ +/* $NetBSD: atomic_add_16_cas.c,v 1.2 2014/02/21 15:51:07 martin 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. + * + * 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_namespace.h + +#include sys/atomic.h + +uint16_t fetch_and_add_2(volatile uint16_t *, uint16_t, ...) +asm(__sync_fetch_and_add_2); +uint16_t add_and_fetch_2(volatile uint16_t *, uint16_t, ...) +asm(__sync_add_and_fetch_2); + +uint16_t +fetch_and_add_2(volatile uint16_t *addr, uint16_t val, ...) +{ + uint16_t old, new; + + do { + old = *addr; + new = old + val; + } while (atomic_cas_16(addr, old, new) != old); + return old; +} + +uint16_t
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Fri Feb 21 16:06:48 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_cas_16_cas.c atomic_cas_8_cas.c atomic_nand_16_cas.c atomic_nand_8_cas.c atomic_sub_16_cas.c atomic_sub_8_cas.c atomic_xor_16_cas.c atomic_xor_8_cas.c Log Message: Add a few missing namespace includes To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/atomic/atomic_cas_16_cas.c \ src/common/lib/libc/atomic/atomic_cas_8_cas.c cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_nand_16_cas.c \ src/common/lib/libc/atomic/atomic_nand_8_cas.c \ src/common/lib/libc/atomic/atomic_sub_16_cas.c \ src/common/lib/libc/atomic/atomic_sub_8_cas.c \ src/common/lib/libc/atomic/atomic_xor_16_cas.c \ src/common/lib/libc/atomic/atomic_xor_8_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_cas_16_cas.c diff -u src/common/lib/libc/atomic/atomic_cas_16_cas.c:1.2 src/common/lib/libc/atomic/atomic_cas_16_cas.c:1.3 --- src/common/lib/libc/atomic/atomic_cas_16_cas.c:1.2 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_cas_16_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_16_cas.c,v 1.2 2014/02/21 15:51:07 martin Exp $ */ +/* $NetBSD: atomic_cas_16_cas.c,v 1.3 2014/02/21 16:06:48 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include atomic_op_namespace.h + #if !defined(_KERNEL) !defined(_STANDALONE) #include stdbool.h #endif Index: src/common/lib/libc/atomic/atomic_cas_8_cas.c diff -u src/common/lib/libc/atomic/atomic_cas_8_cas.c:1.2 src/common/lib/libc/atomic/atomic_cas_8_cas.c:1.3 --- src/common/lib/libc/atomic/atomic_cas_8_cas.c:1.2 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_cas_8_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_8_cas.c,v 1.2 2014/02/21 15:51:07 martin Exp $ */ +/* $NetBSD: atomic_cas_8_cas.c,v 1.3 2014/02/21 16:06:48 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include atomic_op_namespace.h + #if !defined(_KERNEL) !defined(_STANDALONE) #include stdbool.h #endif Index: src/common/lib/libc/atomic/atomic_nand_16_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.1 src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_nand_16_cas.c:1.1 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_nand_16_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_16_cas.c,v 1.1 2014/02/21 15:51:07 martin Exp $ */ +/* $NetBSD: atomic_nand_16_cas.c,v 1.2 2014/02/21 16:06:48 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include atomic_op_namespace.h + #include sys/atomic.h uint16_t fetch_and_nand_2(volatile uint16_t *, uint16_t, ...) Index: src/common/lib/libc/atomic/atomic_nand_8_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.1 src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_nand_8_cas.c:1.1 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_nand_8_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_8_cas.c,v 1.1 2014/02/21 15:51:07 martin Exp $ */ +/* $NetBSD: atomic_nand_8_cas.c,v 1.2 2014/02/21 16:06:48 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include atomic_op_namespace.h + #include sys/atomic.h uint8_t fetch_and_nand_1(volatile uint8_t *, uint8_t, ...) Index: src/common/lib/libc/atomic/atomic_sub_16_cas.c diff -u src/common/lib/libc/atomic/atomic_sub_16_cas.c:1.1 src/common/lib/libc/atomic/atomic_sub_16_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_sub_16_cas.c:1.1 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_sub_16_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_sub_16_cas.c,v 1.1 2014/02/21 15:51:07 martin Exp $ */ +/* $NetBSD: atomic_sub_16_cas.c,v 1.2 2014/02/21 16:06:48 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include atomic_op_namespace.h + #include sys/atomic.h uint16_t fetch_and_sub_2(volatile uint16_t *, uint16_t, ...) Index: src/common/lib/libc/atomic/atomic_sub_8_cas.c diff -u src/common/lib/libc/atomic/atomic_sub_8_cas.c:1.1 src/common/lib/libc/atomic/atomic_sub_8_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_sub_8_cas.c:1.1 Fri Feb 21 15:51:07 2014 +++ src/common/lib/libc/atomic/atomic_sub_8_cas.c Fri Feb 21 16:06:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_sub_8_cas.c,v 1.1 2014/02/21 15:51:07 martin Exp $ */ +/*
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Tue Feb 18 12:23:07 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_cas_64_cas.c Log Message: Do not include stdbool.h in the kernel To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_cas_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_cas_64_cas.c diff -u src/common/lib/libc/atomic/atomic_cas_64_cas.c:1.1 src/common/lib/libc/atomic/atomic_cas_64_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_cas_64_cas.c:1.1 Tue Feb 18 10:16:55 2014 +++ src/common/lib/libc/atomic/atomic_cas_64_cas.c Tue Feb 18 12:23:07 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_cas_64_cas.c,v 1.1 2014/02/18 10:16:55 martin Exp $ */ +/* $NetBSD: atomic_cas_64_cas.c,v 1.2 2014/02/18 12:23:07 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,7 +29,9 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#if !defined(_KERNEL) !defined(_STANDALONE) #include stdbool.h +#endif #include sys/atomic.h #ifdef __HAVE_ATOMIC64_OPS
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Tue Feb 18 13:21:04 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_nand_64_cas.c atomic_sub_64_cas.c atomic_xor_64_cas.c Log Message: Make the _and_fetch_8 primitives return the new value they calculated and set - not whatever is found in memory later. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/atomic/atomic_nand_64_cas.c \ src/common/lib/libc/atomic/atomic_sub_64_cas.c \ src/common/lib/libc/atomic/atomic_xor_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_nand_64_cas.c diff -u src/common/lib/libc/atomic/atomic_nand_64_cas.c:1.1 src/common/lib/libc/atomic/atomic_nand_64_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_nand_64_cas.c:1.1 Tue Feb 18 10:16:55 2014 +++ src/common/lib/libc/atomic/atomic_nand_64_cas.c Tue Feb 18 13:21:04 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_nand_64_cas.c,v 1.1 2014/02/18 10:16:55 martin Exp $ */ +/* $NetBSD: atomic_nand_64_cas.c,v 1.2 2014/02/18 13:21:04 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ nand_and_fetch_8(volatile uint64_t *addr old = *addr; new = ~(old val); } while (atomic_cas_64(addr, old, new) != old); - return *addr; + return new; } #endif Index: src/common/lib/libc/atomic/atomic_sub_64_cas.c diff -u src/common/lib/libc/atomic/atomic_sub_64_cas.c:1.1 src/common/lib/libc/atomic/atomic_sub_64_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_sub_64_cas.c:1.1 Tue Feb 18 10:16:55 2014 +++ src/common/lib/libc/atomic/atomic_sub_64_cas.c Tue Feb 18 13:21:04 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_sub_64_cas.c,v 1.1 2014/02/18 10:16:55 martin Exp $ */ +/* $NetBSD: atomic_sub_64_cas.c,v 1.2 2014/02/18 13:21:04 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ sub_and_fetch_8(volatile uint64_t *addr, old = *addr; new = old - val; } while (atomic_cas_64(addr, old, new) != old); - return *addr; + return new; } #endif Index: src/common/lib/libc/atomic/atomic_xor_64_cas.c diff -u src/common/lib/libc/atomic/atomic_xor_64_cas.c:1.1 src/common/lib/libc/atomic/atomic_xor_64_cas.c:1.2 --- src/common/lib/libc/atomic/atomic_xor_64_cas.c:1.1 Tue Feb 18 10:16:55 2014 +++ src/common/lib/libc/atomic/atomic_xor_64_cas.c Tue Feb 18 13:21:04 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_xor_64_cas.c,v 1.1 2014/02/18 10:16:55 martin Exp $ */ +/* $NetBSD: atomic_xor_64_cas.c,v 1.2 2014/02/18 13:21:04 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ xor_and_fetch_8(volatile uint64_t *addr, old = *addr; new = old ^ val; } while (atomic_cas_64(addr, old, new) != old); - return *addr; + return new; } #endif
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Wed Jan 29 14:44:32 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: Fix copypasto To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.10 src/common/lib/libc/atomic/atomic_init_testset.c:1.11 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.10 Mon Jan 27 18:03:44 2014 +++ src/common/lib/libc/atomic/atomic_init_testset.c Wed Jan 29 14:44:32 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.10 2014/01/27 18:03:44 matt Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.11 2014/01/29 14:44:32 martin Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.10 2014/01/27 18:03:44 matt Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.11 2014/01/29 14:44:32 martin Exp $); #include atomic_op_namespace.h @@ -119,9 +119,9 @@ _atomic_cas_up_16(volatile uint16_t *ptr } #endif -#ifndef __HAVE_ASM_ATOMIC_CAS_UP +#ifndef __HAVE_ASM_ATOMIC_CAS_8_UP static uint8_t -_atomic_cas_up(volatile uint8_t *ptr, uint8_t old, uint8_t new) +_atomic_cas_8_up(volatile uint8_t *ptr, uint8_t old, uint8_t new) { uint8_t ret;
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: martin Date: Wed Jan 29 14:49:35 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: Fix a few more copypastos - now it actually builds. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.11 src/common/lib/libc/atomic/atomic_init_testset.c:1.12 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.11 Wed Jan 29 14:44:32 2014 +++ src/common/lib/libc/atomic/atomic_init_testset.c Wed Jan 29 14:49:35 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.11 2014/01/29 14:44:32 martin Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.12 2014/01/29 14:49:35 martin Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.11 2014/01/29 14:44:32 martin Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.12 2014/01/29 14:49:35 martin Exp $); #include atomic_op_namespace.h @@ -103,7 +103,7 @@ _atomic_cas_up(volatile uint32_t *ptr, u #ifndef __HAVE_ASM_ATOMIC_CAS_16_UP static uint16_t -_atomic_cas_up_16(volatile uint16_t *ptr, uint16_t old, uint16_t new) +_atomic_cas_16_up(volatile uint16_t *ptr, uint16_t old, uint16_t new) { uint16_t ret; @@ -131,7 +131,7 @@ _atomic_cas_8_up(volatile uint8_t *ptr, return ret; } *ptr = new; - RAS_END(_atomic_cas_16); + RAS_END(_atomic_cas_8); return ret; }
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Wed Jan 29 15:59:12 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_32_cas.c atomic_and_32_cas.c atomic_or_32_cas.c Log Message: Fix up the remaining __sync_* functions to build with Clang on ARM. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/atomic/atomic_add_32_cas.c cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/atomic/atomic_and_32_cas.c \ src/common/lib/libc/atomic/atomic_or_32_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_32_cas.c diff -u src/common/lib/libc/atomic/atomic_add_32_cas.c:1.6 src/common/lib/libc/atomic/atomic_add_32_cas.c:1.7 --- src/common/lib/libc/atomic/atomic_add_32_cas.c:1.6 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_add_32_cas.c Wed Jan 29 15:59:11 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_add_32_cas.c,v 1.7 2014/01/29 15:59:11 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,10 +33,11 @@ #include sys/atomic.h -uint32_t __sync_fetch_and_add_4(volatile uint32_t *, int32_t); +uint32_t fetch_and_add_4(volatile uint32_t *, uint32_t, ...) +asm(__sync_fetch_and_add_4); uint32_t -__sync_fetch_and_add_4(volatile uint32_t *addr, int32_t val) +fetch_and_add_4(volatile uint32_t *addr, uint32_t val, ...) { uint32_t old, new; @@ -50,7 +51,7 @@ __sync_fetch_and_add_4(volatile uint32_t void atomic_add_32(volatile uint32_t *addr, int32_t val) { - (void) __sync_fetch_and_add_4(addr, val); + (void) fetch_and_add_4(addr, val); } #undef atomic_add_32 Index: src/common/lib/libc/atomic/atomic_and_32_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_cas.c:1.7 src/common/lib/libc/atomic/atomic_and_32_cas.c:1.8 --- src/common/lib/libc/atomic/atomic_and_32_cas.c:1.7 Mon Jan 27 18:36:52 2014 +++ src/common/lib/libc/atomic/atomic_and_32_cas.c Wed Jan 29 15:59:11 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_cas.c,v 1.7 2014/01/27 18:36:52 matt Exp $ */ +/* $NetBSD: atomic_and_32_cas.c,v 1.8 2014/01/29 15:59:11 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,10 +33,11 @@ #include sys/atomic.h -uint32_t __sync_fetch_and_and_4(volatile uint32_t *, uint32_t); +uint32_t fetch_and_and_4(volatile uint32_t *, uint32_t, ...) +asm(__sync_fetch_and_and_4); uint32_t -__sync_fetch_and_and_4(volatile uint32_t *addr, uint32_t val) +fetch_and_and_4(volatile uint32_t *addr, uint32_t val, ...) { uint32_t old, new; @@ -50,7 +51,7 @@ __sync_fetch_and_and_4(volatile uint32_t void atomic_and_32(volatile uint32_t *addr, uint32_t val) { - (void) __sync_fetch_and_and_4(addr, val); + (void) fetch_and_and_4(addr, val); } #undef atomic_and_32 Index: src/common/lib/libc/atomic/atomic_or_32_cas.c diff -u src/common/lib/libc/atomic/atomic_or_32_cas.c:1.7 src/common/lib/libc/atomic/atomic_or_32_cas.c:1.8 --- src/common/lib/libc/atomic/atomic_or_32_cas.c:1.7 Mon Jan 27 18:36:52 2014 +++ src/common/lib/libc/atomic/atomic_or_32_cas.c Wed Jan 29 15:59:11 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_32_cas.c,v 1.7 2014/01/27 18:36:52 matt Exp $ */ +/* $NetBSD: atomic_or_32_cas.c,v 1.8 2014/01/29 15:59:11 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,10 +33,11 @@ #include sys/atomic.h -uint32_t __sync_fetch_and_or_4(volatile uint32_t *, uint32_t); +uint32_t fetch_and_or_4(volatile uint32_t *, uint32_t, ...) +asm(__sync_fetch_and_or_4); uint32_t -__sync_fetch_and_or_4(volatile uint32_t *addr, uint32_t val) +fetch_and_or_4(volatile uint32_t *addr, uint32_t val, ...) { uint32_t old, new; @@ -50,7 +51,7 @@ __sync_fetch_and_or_4(volatile uint32_t void atomic_or_32(volatile uint32_t *addr, uint32_t val) { - (void) __sync_fetch_and_or_4(addr, val); + (void) fetch_and_or_4(addr, val); } #undef atomic_or_32
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Tue Jan 28 21:47:48 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_64_cas.c atomic_and_64_cas.c atomic_or_64_cas.c Log Message: Allow building with clang. XXX __RENAME is currently not allowed for the kernel, so use plain asm. Clang rejects definitions of builtins, so it doesn't work without. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/atomic/atomic_add_64_cas.c cvs rdiff -u -r1.8 -r1.9 src/common/lib/libc/atomic/atomic_and_64_cas.c \ src/common/lib/libc/atomic/atomic_or_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_64_cas.c diff -u src/common/lib/libc/atomic/atomic_add_64_cas.c:1.7 src/common/lib/libc/atomic/atomic_add_64_cas.c:1.8 --- src/common/lib/libc/atomic/atomic_add_64_cas.c:1.7 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_add_64_cas.c Tue Jan 28 21:47:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_64_cas.c,v 1.7 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_add_64_cas.c,v 1.8 2014/01/28 21:47:48 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -35,10 +35,11 @@ #ifdef __HAVE_ATOMIC64_OPS -uint64_t __sync_fetch_and_add_8(volatile uint64_t *, int64_t); +uint64_t fetch_and_add_8(volatile uint64_t *, uint64_t, ...) +asm(__sync_fetch_and_add_8); uint64_t -__sync_fetch_and_add_8(volatile uint64_t *addr, int64_t val) +fetch_and_add_8(volatile uint64_t *addr, uint64_t val, ...) { uint64_t old, new; @@ -52,7 +53,7 @@ __sync_fetch_and_add_8(volatile uint64_t void atomic_add_64(volatile uint64_t *addr, int64_t val) { - (void) __sync_fetch_and_add_8(addr, val); + (void) fetch_and_add_8(addr, val); } #undef atomic_add_64 Index: src/common/lib/libc/atomic/atomic_and_64_cas.c diff -u src/common/lib/libc/atomic/atomic_and_64_cas.c:1.8 src/common/lib/libc/atomic/atomic_and_64_cas.c:1.9 --- src/common/lib/libc/atomic/atomic_and_64_cas.c:1.8 Mon Jan 27 20:01:50 2014 +++ src/common/lib/libc/atomic/atomic_and_64_cas.c Tue Jan 28 21:47:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_64_cas.c,v 1.8 2014/01/27 20:01:50 matt Exp $ */ +/* $NetBSD: atomic_and_64_cas.c,v 1.9 2014/01/28 21:47:48 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -35,10 +35,11 @@ #ifdef __HAVE_ATOMIC64_OPS -uint64_t __sync_fetch_and_and_8(volatile uint64_t *, uint64_t); +uint64_t fetch_and_and_8(volatile uint64_t *, uint64_t, ...) +asm(__sync_fetch_and_and_8); uint64_t -__sync_fetch_and_and_8(volatile uint64_t *addr, uint64_t val) +fetch_and_and_8(volatile uint64_t *addr, uint64_t val, ...) { uint64_t old, new; @@ -52,7 +53,7 @@ __sync_fetch_and_and_8(volatile uint64_t void atomic_and_64(volatile uint64_t *addr, uint64_t val) { - (void) __sync_fetch_and_and_8(addr, val); + (void) fetch_and_and_8(addr, val); } #undef atomic_and_64 Index: src/common/lib/libc/atomic/atomic_or_64_cas.c diff -u src/common/lib/libc/atomic/atomic_or_64_cas.c:1.8 src/common/lib/libc/atomic/atomic_or_64_cas.c:1.9 --- src/common/lib/libc/atomic/atomic_or_64_cas.c:1.8 Mon Jan 27 20:44:29 2014 +++ src/common/lib/libc/atomic/atomic_or_64_cas.c Tue Jan 28 21:47:48 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_64_cas.c,v 1.8 2014/01/27 20:44:29 matt Exp $ */ +/* $NetBSD: atomic_or_64_cas.c,v 1.9 2014/01/28 21:47:48 joerg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -35,10 +35,11 @@ #ifdef __HAVE_ATOMIC64_OPS -uint64_t __sync_fetch_and_or_8(volatile uint64_t *addr, uint64_t val); +uint64_t fetch_and_or_8(volatile uint64_t *addr, uint64_t val, ...) +asm(__sync_fetch_and_or_8); uint64_t -__sync_fetch_and_or_8(volatile uint64_t *addr, uint64_t val) +fetch_and_or_8(volatile uint64_t *addr, uint64_t val, ...) { uint64_t old, new; @@ -52,7 +53,7 @@ __sync_fetch_and_or_8(volatile uint64_t void atomic_or_64(volatile uint64_t *addr, uint64_t val) { - (void) __sync_fetch_and_or_8(addr, val); + (void) fetch_and_or_8(addr, val); } #undef atomic_or_64
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:03:44 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: Add _atomic_cas_16 and _atomic_cas_8 and their aliases __sync_val_compare_and_swap_2 __sync_val_compare_and_swap_1 To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.9 src/common/lib/libc/atomic/atomic_init_testset.c:1.10 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.9 Wed Aug 21 03:00:56 2013 +++ src/common/lib/libc/atomic/atomic_init_testset.c Mon Jan 27 18:03:44 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.9 2013/08/21 03:00:56 matt Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.10 2014/01/27 18:03:44 matt Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.9 2013/08/21 03:00:56 matt Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.10 2014/01/27 18:03:44 matt Exp $); #include atomic_op_namespace.h @@ -59,13 +59,29 @@ extern uint32_t _atomic_cas_up(volatile #else static uint32_t _atomic_cas_up(volatile uint32_t *, uint32_t, uint32_t); #endif - static uint32_t (*_atomic_cas_fn)(volatile uint32_t *, uint32_t, uint32_t) = _atomic_cas_up; +RAS_DECL(_atomic_cas); -void __libc_atomic_init(void) __attribute__ ((visibility(hidden))); +#ifdef __HAVE_ASM_ATOMIC_CAS_16_UP +extern uint16_t _atomic_cas_16_up(volatile uint16_t *, uint16_t, uint16_t); +#else +static uint16_t _atomic_cas_16_up(volatile uint16_t *, uint16_t, uint16_t); +#endif +static uint16_t (*_atomic_cas_16_fn)(volatile uint16_t *, uint16_t, uint16_t) = +_atomic_cas_16_up; +RAS_DECL(_atomic_cas_16); -RAS_DECL(_atomic_cas); +#ifdef __HAVE_ASM_ATOMIC_CAS_8_UP +extern uint8_t _atomic_cas_8_up(volatile uint8_t *, uint8_t, uint8_t); +#else +static uint8_t _atomic_cas_8_up(volatile uint8_t *, uint8_t, uint8_t); +#endif +static uint8_t (*_atomic_cas_8_fn)(volatile uint8_t *, uint8_t, uint8_t) = +_atomic_cas_8_up; +RAS_DECL(_atomic_cas_8); + +void __libc_atomic_init(void) __attribute__ ((visibility(hidden))); #ifndef __HAVE_ASM_ATOMIC_CAS_UP static uint32_t @@ -85,6 +101,42 @@ _atomic_cas_up(volatile uint32_t *ptr, u } #endif +#ifndef __HAVE_ASM_ATOMIC_CAS_16_UP +static uint16_t +_atomic_cas_up_16(volatile uint16_t *ptr, uint16_t old, uint16_t new) +{ + uint16_t ret; + + RAS_START(_atomic_cas_16); + ret = *ptr; + if (__predict_false(ret != old)) { + return ret; + } + *ptr = new; + RAS_END(_atomic_cas_16); + + return ret; +} +#endif + +#ifndef __HAVE_ASM_ATOMIC_CAS_UP +static uint8_t +_atomic_cas_up(volatile uint8_t *ptr, uint8_t old, uint8_t new) +{ + uint8_t ret; + + RAS_START(_atomic_cas_8); + ret = *ptr; + if (__predict_false(ret != old)) { + return ret; + } + *ptr = new; + RAS_END(_atomic_cas_16); + + return ret; +} +#endif + static uint32_t _atomic_cas_mp(volatile uint32_t *ptr, uint32_t old, uint32_t new) { @@ -109,6 +161,24 @@ _atomic_cas_32(volatile uint32_t *ptr, u return (*_atomic_cas_fn)(ptr, old, new); } +uint16_t _atomic_cas_16(volatile uint16_t *, uint16_t, uint16_t); + +uint16_t +_atomic_cas_16(volatile uint16_t *ptr, uint16_t old, uint16_t new) +{ + + return (*_atomic_cas_16_fn)(ptr, old, new); +} + +uint8_t _atomic_cas_8(volatile uint8_t *, uint8_t, uint8_t); + +uint8_t +_atomic_cas_8(volatile uint8_t *ptr, uint8_t old, uint8_t new) +{ + + return (*_atomic_cas_8_fn)(ptr, old, new); +} + void __section(.text.startup) __libc_atomic_init(void) { @@ -129,6 +199,18 @@ __libc_atomic_init(void) _atomic_cas_fn = _atomic_cas_up; return; } + + if (rasctl(RAS_ADDR(_atomic_cas_16), RAS_SIZE(_atomic_cas_16), + RAS_INSTALL) == 0) { + _atomic_cas_16_fn = _atomic_cas_16_up; + return; + } + + if (rasctl(RAS_ADDR(_atomic_cas_8), RAS_SIZE(_atomic_cas_8), + RAS_INSTALL) == 0) { + _atomic_cas_8_fn = _atomic_cas_8_up; + return; + } } #undef atomic_cas_32 @@ -156,3 +238,7 @@ atomic_op_alias(atomic_cas_ulong_ni,_ato __strong_alias(_atomic_cas_ulong_ni,_atomic_cas_32) atomic_op_alias(atomic_cas_ptr_ni,_atomic_cas_32) __strong_alias(_atomic_cas_ptr_ni,_atomic_cas_32) + +__strong_alias(__sync_val_compare_and_swap_4,_atomic_cas_32) +__strong_alias(__sync_val_compare_and_swap_2,_atomic_cas_16) +__strong_alias(__sync_val_compare_and_swap_1,_atomic_cas_8)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:09:51 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_64_cas.c Log Message: Add __sync_fetch_and_add_8 alias To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_add_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_64_cas.c diff -u src/common/lib/libc/atomic/atomic_add_64_cas.c:1.5 src/common/lib/libc/atomic/atomic_add_64_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_add_64_cas.c:1.5 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_add_64_cas.c Mon Jan 27 18:09:51 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_64_cas.c,v 1.5 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_add_64_cas.c,v 1.6 2014/01/27 18:09:51 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,7 @@ atomic_add_64(volatile uint64_t *addr, i #undef atomic_add_64 atomic_op_alias(atomic_add_64,_atomic_add_64) +__strong_alias(__sync_fetch_and_add_8,_atomic_add_64) #if defined(_LP64) #undef atomic_add_long
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:08:37 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_32_cas.c Log Message: Add __sync_fetch_and_add_4 alias To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/atomic_add_32_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_32_cas.c diff -u src/common/lib/libc/atomic/atomic_add_32_cas.c:1.4 src/common/lib/libc/atomic/atomic_add_32_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_add_32_cas.c:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_add_32_cas.c Mon Jan 27 18:08:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_32_cas.c,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_add_32_cas.c,v 1.5 2014/01/27 18:08:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -50,6 +50,7 @@ atomic_op_alias(atomic_add_32,_atomic_ad #undef atomic_add_int atomic_op_alias(atomic_add_int,_atomic_add_32) __strong_alias(_atomic_add_int,_atomic_add_32) +__strong_alias(__sync_fetch_and_add_4,_atomic_add_32) #if !defined(_LP64) #undef atomic_add_long
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:12:57 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_and_32_cas.c atomic_and_64_cas.c atomic_or_32_cas.c atomic_or_64_cas.c Log Message: Add __sync_fetch_and_OP_N aliases To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/atomic_and_32_cas.c \ src/common/lib/libc/atomic/atomic_or_32_cas.c cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_and_64_cas.c \ src/common/lib/libc/atomic/atomic_or_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_and_32_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_cas.c:1.4 src/common/lib/libc/atomic/atomic_and_32_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_and_32_cas.c:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_and_32_cas.c Mon Jan 27 18:12:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_cas.c,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_and_32_cas.c,v 1.5 2014/01/27 18:12:57 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -46,6 +46,8 @@ atomic_and_32(volatile uint32_t *addr, u #undef atomic_and_32 atomic_op_alias(atomic_and_32,_atomic_and_32) +__strong_alias(__sync_fetch_and_and_4,_atomic_and_32) + #undef atomic_and_uint atomic_op_alias(atomic_and_uint,_atomic_and_32) __strong_alias(_atomic_and_uint,_atomic_and_32) Index: src/common/lib/libc/atomic/atomic_or_32_cas.c diff -u src/common/lib/libc/atomic/atomic_or_32_cas.c:1.4 src/common/lib/libc/atomic/atomic_or_32_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_or_32_cas.c:1.4 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_or_32_cas.c Mon Jan 27 18:12:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_32_cas.c,v 1.4 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_or_32_cas.c,v 1.5 2014/01/27 18:12:57 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -46,6 +46,8 @@ atomic_or_32(volatile uint32_t *addr, ui #undef atomic_or_32 atomic_op_alias(atomic_or_32,_atomic_or_32) +__strong_alias(__sync_fetch_and_or_4,_atomic_or_32) + #undef atomic_or_uint atomic_op_alias(atomic_or_uint,_atomic_or_32) __strong_alias(_atomic_or_uint,_atomic_or_32) Index: src/common/lib/libc/atomic/atomic_and_64_cas.c diff -u src/common/lib/libc/atomic/atomic_and_64_cas.c:1.5 src/common/lib/libc/atomic/atomic_and_64_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_and_64_cas.c:1.5 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_and_64_cas.c Mon Jan 27 18:12:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_64_cas.c,v 1.5 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_and_64_cas.c,v 1.6 2014/01/27 18:12:57 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,8 @@ atomic_and_64(volatile uint64_t *addr, u #undef atomic_and_64 atomic_op_alias(atomic_and_64,_atomic_and_64) +__strong_alias(__sync_fetch_and_and_8,_atomic_and_64) + #if defined(_LP64) #undef atomic_and_ulong atomic_op_alias(atomic_and_ulong,_atomic_and_64) Index: src/common/lib/libc/atomic/atomic_or_64_cas.c diff -u src/common/lib/libc/atomic/atomic_or_64_cas.c:1.5 src/common/lib/libc/atomic/atomic_or_64_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_or_64_cas.c:1.5 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_or_64_cas.c Mon Jan 27 18:12:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_64_cas.c,v 1.5 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_or_64_cas.c,v 1.6 2014/01/27 18:12:57 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,8 @@ atomic_or_64(volatile uint64_t *addr, ui #undef atomic_or_64 atomic_op_alias(atomic_or_64,_atomic_or_64) +__strong_alias(__sync_fetch_and_or_8,_atomic_or_64) + #if defined(_LP64) #undef atomic_or_ulong atomic_op_alias(atomic_or_ulong,_atomic_or_64)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:29:47 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_32_cas.c atomic_add_64_cas.c atomic_and_32_cas.c atomic_and_64_cas.c atomic_or_32_cas.c atomic_or_64_cas.c Log Message: Rework so that __sync_fetch_and_OP_N actually returns a value. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_add_32_cas.c \ src/common/lib/libc/atomic/atomic_and_32_cas.c \ src/common/lib/libc/atomic/atomic_or_32_cas.c cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/atomic/atomic_add_64_cas.c \ src/common/lib/libc/atomic/atomic_and_64_cas.c \ src/common/lib/libc/atomic/atomic_or_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_32_cas.c diff -u src/common/lib/libc/atomic/atomic_add_32_cas.c:1.5 src/common/lib/libc/atomic/atomic_add_32_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_add_32_cas.c:1.5 Mon Jan 27 18:08:37 2014 +++ src/common/lib/libc/atomic/atomic_add_32_cas.c Mon Jan 27 18:29:47 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_32_cas.c,v 1.5 2014/01/27 18:08:37 matt Exp $ */ +/* $NetBSD: atomic_add_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,8 +33,10 @@ #include sys/atomic.h -void -atomic_add_32(volatile uint32_t *addr, int32_t val) +uint32_t __sync_fetch_and_add_4(volatile uint32_t *, int32_t); + +uint32_t +__sync_fetch_and_add_4(volatile uint32_t *addr, int32_t val) { uint32_t old, new; @@ -42,6 +44,13 @@ atomic_add_32(volatile uint32_t *addr, i old = *addr; new = old + val; } while (atomic_cas_32(addr, old, new) != old); + return old; +} + +void +atomic_add_32(volatile uint32_t *addr, int32_t val) +{ + (void) __sync_fetch_and_add_4(addr, val); } #undef atomic_add_32 @@ -50,7 +59,6 @@ atomic_op_alias(atomic_add_32,_atomic_ad #undef atomic_add_int atomic_op_alias(atomic_add_int,_atomic_add_32) __strong_alias(_atomic_add_int,_atomic_add_32) -__strong_alias(__sync_fetch_and_add_4,_atomic_add_32) #if !defined(_LP64) #undef atomic_add_long Index: src/common/lib/libc/atomic/atomic_and_32_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_cas.c:1.5 src/common/lib/libc/atomic/atomic_and_32_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_and_32_cas.c:1.5 Mon Jan 27 18:12:57 2014 +++ src/common/lib/libc/atomic/atomic_and_32_cas.c Mon Jan 27 18:29:47 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_cas.c,v 1.5 2014/01/27 18:12:57 matt Exp $ */ +/* $NetBSD: atomic_and_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,8 +33,10 @@ #include sys/atomic.h -void -atomic_and_32(volatile uint32_t *addr, uint32_t val) +uint32_t atomic_and_32(volatile uint32_t *, uint32_t); + +uint32_t +__sync_fetch_and_and_4(volatile uint32_t *addr, uint32_t val) { uint32_t old, new; @@ -42,11 +44,17 @@ atomic_and_32(volatile uint32_t *addr, u old = *addr; new = old val; } while (atomic_cas_32(addr, old, new) != old); + return old; +} + +void +atomic_and_32(volatile uint32_t *addr, uint32_t val) +{ + (void) __sync_fetch_and_and_4(addr, val); } #undef atomic_and_32 atomic_op_alias(atomic_and_32,_atomic_and_32) -__strong_alias(__sync_fetch_and_and_4,_atomic_and_32) #undef atomic_and_uint atomic_op_alias(atomic_and_uint,_atomic_and_32) Index: src/common/lib/libc/atomic/atomic_or_32_cas.c diff -u src/common/lib/libc/atomic/atomic_or_32_cas.c:1.5 src/common/lib/libc/atomic/atomic_or_32_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_or_32_cas.c:1.5 Mon Jan 27 18:12:57 2014 +++ src/common/lib/libc/atomic/atomic_or_32_cas.c Mon Jan 27 18:29:47 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_32_cas.c,v 1.5 2014/01/27 18:12:57 matt Exp $ */ +/* $NetBSD: atomic_or_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,8 +33,10 @@ #include sys/atomic.h -void -atomic_or_32(volatile uint32_t *addr, uint32_t val) +uint32_t __sync_fetch_and_or_4(volatile uint32_t *, uint32_t); + +uint32_t +__sync_fetch_and_or_4(volatile uint32_t *addr, uint32_t val) { uint32_t old, new; @@ -42,11 +44,17 @@ atomic_or_32(volatile uint32_t *addr, ui old = *addr; new = old | val; } while (atomic_cas_32(addr, old, new) != old); + return old; +} + +void +atomic_or_32(volatile uint32_t *addr, uint32_t val) +{ + (void) __sync_val_compare_and_swap_4(addr, val); } #undef atomic_or_32 atomic_op_alias(atomic_or_32,_atomic_or_32) -__strong_alias(__sync_fetch_and_or_4,_atomic_or_32) #undef atomic_or_uint atomic_op_alias(atomic_or_uint,_atomic_or_32) Index: src/common/lib/libc/atomic/atomic_add_64_cas.c diff -u src/common/lib/libc/atomic/atomic_add_64_cas.c:1.6 src/common/lib/libc/atomic/atomic_add_64_cas.c:1.7 ---
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:36:53 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_and_32_cas.c atomic_or_32_cas.c Log Message: fix tpyos. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/atomic/atomic_and_32_cas.c \ src/common/lib/libc/atomic/atomic_or_32_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_and_32_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_cas.c:1.6 src/common/lib/libc/atomic/atomic_and_32_cas.c:1.7 --- src/common/lib/libc/atomic/atomic_and_32_cas.c:1.6 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_and_32_cas.c Mon Jan 27 18:36:52 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_and_32_cas.c,v 1.7 2014/01/27 18:36:52 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #include sys/atomic.h -uint32_t atomic_and_32(volatile uint32_t *, uint32_t); +uint32_t __sync_fetch_and_and_4(volatile uint32_t *, uint32_t); uint32_t __sync_fetch_and_and_4(volatile uint32_t *addr, uint32_t val) Index: src/common/lib/libc/atomic/atomic_or_32_cas.c diff -u src/common/lib/libc/atomic/atomic_or_32_cas.c:1.6 src/common/lib/libc/atomic/atomic_or_32_cas.c:1.7 --- src/common/lib/libc/atomic/atomic_or_32_cas.c:1.6 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_or_32_cas.c Mon Jan 27 18:36:52 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_32_cas.c,v 1.6 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_or_32_cas.c,v 1.7 2014/01/27 18:36:52 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -50,7 +50,7 @@ __sync_fetch_and_or_4(volatile uint32_t void atomic_or_32(volatile uint32_t *addr, uint32_t val) { - (void) __sync_val_compare_and_swap_4(addr, val); + (void) __sync_fetch_and_or_4(addr, val); } #undef atomic_or_32
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:36:37 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_add_32_nv_cas.c atomic_add_64_nv_cas.c atomic_and_32_nv_cas.c atomic_and_64_nv_cas.c atomic_or_32_nv_cas.c atomic_or_64_nv_cas.c Log Message: Add __sync_OP_and_fetch_N aliases To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/atomic_add_32_nv_cas.c \ src/common/lib/libc/atomic/atomic_and_32_nv_cas.c \ src/common/lib/libc/atomic/atomic_or_32_nv_cas.c cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_add_64_nv_cas.c \ src/common/lib/libc/atomic/atomic_and_64_nv_cas.c \ src/common/lib/libc/atomic/atomic_or_64_nv_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_add_32_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.4 src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_add_32_nv_cas.c:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_add_32_nv_cas.c Mon Jan 27 18:36:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_32_nv_cas.c,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_add_32_nv_cas.c,v 1.5 2014/01/27 18:36:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,7 @@ atomic_add_32_nv(volatile uint32_t *addr #undef atomic_add_32_nv atomic_op_alias(atomic_add_32_nv,_atomic_add_32_nv) +__strong_alias(__sync_add_and_fetch_4,_atomic_add_32_nv) #undef atomic_add_int_nv atomic_op_alias(atomic_add_int_nv,_atomic_add_32_nv) Index: src/common/lib/libc/atomic/atomic_and_32_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.4 src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_and_32_nv_cas.c Mon Jan 27 18:36:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_nv_cas.c,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_and_32_nv_cas.c,v 1.5 2014/01/27 18:36:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,8 @@ atomic_and_32_nv(volatile uint32_t *addr #undef atomic_and_32_nv atomic_op_alias(atomic_and_32_nv,_atomic_and_32_nv) +__strong_alias(__sync_and_and_fetch_4,_atomic_add_32_nv) + #undef atomic_and_uint_nv atomic_op_alias(atomic_and_uint_nv,_atomic_and_32_nv) __strong_alias(_atomic_and_uint_nv,_atomic_and_32_nv) Index: src/common/lib/libc/atomic/atomic_or_32_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_or_32_nv_cas.c:1.4 src/common/lib/libc/atomic/atomic_or_32_nv_cas.c:1.5 --- src/common/lib/libc/atomic/atomic_or_32_nv_cas.c:1.4 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_or_32_nv_cas.c Mon Jan 27 18:36:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_32_nv_cas.c,v 1.4 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_or_32_nv_cas.c,v 1.5 2014/01/27 18:36:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,8 @@ atomic_or_32_nv(volatile uint32_t *addr, #undef atomic_or_32_nv atomic_op_alias(atomic_or_32_nv,_atomic_or_32_nv) +__strong_alias(__sync_or_and_fetch_4,_atomic_or_32_nv) + #undef atomic_or_uint_nv atomic_op_alias(atomic_or_uint_nv,_atomic_or_32_nv) __strong_alias(_atomic_or_uint_nv,_atomic_or_32_nv) Index: src/common/lib/libc/atomic/atomic_add_64_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_add_64_nv_cas.c:1.5 src/common/lib/libc/atomic/atomic_add_64_nv_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_add_64_nv_cas.c:1.5 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_add_64_nv_cas.c Mon Jan 27 18:36:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_add_64_nv_cas.c,v 1.5 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_add_64_nv_cas.c,v 1.6 2014/01/27 18:36:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -50,6 +50,7 @@ atomic_add_64_nv(volatile uint64_t *addr #undef atomic_add_64_nv atomic_op_alias(atomic_add_64_nv,_atomic_add_64_nv) +__strong_alias(__sync_add_and_fetch_8,_atomic_add_64_nv) #if defined(_LP64) #undef atomic_add_long_nv Index: src/common/lib/libc/atomic/atomic_and_64_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_and_64_nv_cas.c:1.5 src/common/lib/libc/atomic/atomic_and_64_nv_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_and_64_nv_cas.c:1.5 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/atomic/atomic_and_64_nv_cas.c Mon Jan 27 18:36:37 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_64_nv_cas.c,v 1.5 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: atomic_and_64_nv_cas.c,v 1.6 2014/01/27 18:36:37 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -50,6 +50,8 @@ atomic_and_64_nv(volatile uint64_t *addr #undef atomic_and_64_nv
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 18:43:07 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_and_32_nv_cas.c Log Message: Fix tpyo (add-and) To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/atomic_and_32_nv_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_and_32_nv_cas.c diff -u src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.5 src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.6 --- src/common/lib/libc/atomic/atomic_and_32_nv_cas.c:1.5 Mon Jan 27 18:36:37 2014 +++ src/common/lib/libc/atomic/atomic_and_32_nv_cas.c Mon Jan 27 18:43:07 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_32_nv_cas.c,v 1.5 2014/01/27 18:36:37 matt Exp $ */ +/* $NetBSD: atomic_and_32_nv_cas.c,v 1.6 2014/01/27 18:43:07 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ atomic_and_32_nv(volatile uint32_t *addr #undef atomic_and_32_nv atomic_op_alias(atomic_and_32_nv,_atomic_and_32_nv) -__strong_alias(__sync_and_and_fetch_4,_atomic_add_32_nv) +__strong_alias(__sync_and_and_fetch_4,_atomic_and_32_nv) #undef atomic_and_uint_nv atomic_op_alias(atomic_and_uint_nv,_atomic_and_32_nv)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 20:01:50 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_and_64_cas.c Log Message: Return old To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/atomic/atomic_and_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_and_64_cas.c diff -u src/common/lib/libc/atomic/atomic_and_64_cas.c:1.7 src/common/lib/libc/atomic/atomic_and_64_cas.c:1.8 --- src/common/lib/libc/atomic/atomic_and_64_cas.c:1.7 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_and_64_cas.c Mon Jan 27 20:01:50 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_and_64_cas.c,v 1.7 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_and_64_cas.c,v 1.8 2014/01/27 20:01:50 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -46,6 +46,7 @@ __sync_fetch_and_and_8(volatile uint64_t old = *addr; new = old val; } while (atomic_cas_64(addr, old, new) != old); + return old; } void
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Mon Jan 27 20:44:29 UTC 2014 Modified Files: src/common/lib/libc/atomic: atomic_or_64_cas.c Log Message: fix cp bug. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/atomic/atomic_or_64_cas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_or_64_cas.c diff -u src/common/lib/libc/atomic/atomic_or_64_cas.c:1.7 src/common/lib/libc/atomic/atomic_or_64_cas.c:1.8 --- src/common/lib/libc/atomic/atomic_or_64_cas.c:1.7 Mon Jan 27 18:29:47 2014 +++ src/common/lib/libc/atomic/atomic_or_64_cas.c Mon Jan 27 20:44:29 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_or_64_cas.c,v 1.7 2014/01/27 18:29:47 matt Exp $ */ +/* $NetBSD: atomic_or_64_cas.c,v 1.8 2014/01/27 20:44:29 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ uint64_t __sync_fetch_and_or_8(volatile uint64_t *addr, uint64_t val); -void +uint64_t __sync_fetch_and_or_8(volatile uint64_t *addr, uint64_t val) { uint64_t old, new;
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: skrll Date: Sat Dec 7 13:09:55 UTC 2013 Modified Files: src/common/lib/libc/atomic: membar_ops_nop.c Log Message: Add __sync_synchronize alias. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/atomic/membar_ops_nop.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/membar_ops_nop.c diff -u src/common/lib/libc/atomic/membar_ops_nop.c:1.5 src/common/lib/libc/atomic/membar_ops_nop.c:1.6 --- src/common/lib/libc/atomic/membar_ops_nop.c:1.5 Fri Aug 21 14:31:02 2009 +++ src/common/lib/libc/atomic/membar_ops_nop.c Sat Dec 7 13:09:55 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: membar_ops_nop.c,v 1.5 2009/08/21 14:31:02 skrll Exp $ */ +/* $NetBSD: membar_ops_nop.c,v 1.6 2013/12/07 13:09:55 skrll Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -54,3 +54,4 @@ atomic_op_alias(membar_consumer,_membar_ __strong_alias(_membar_consumer,_membar_sync) #undef membar_sync atomic_op_alias(membar_sync,_membar_sync) +atomic_op_alias(__sync_synchronize,_membar_sync)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: matt Date: Wed Aug 21 03:00:56 UTC 2013 Modified Files: src/common/lib/libc/atomic: atomic_init_cas.c atomic_init_testset.c Log Message: Use __section(.test.startup) for the init routines To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/atomic/atomic_init_cas.c cvs rdiff -u -r1.8 -r1.9 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_cas.c diff -u src/common/lib/libc/atomic/atomic_init_cas.c:1.3 src/common/lib/libc/atomic/atomic_init_cas.c:1.4 --- src/common/lib/libc/atomic/atomic_init_cas.c:1.3 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/atomic_init_cas.c Wed Aug 21 03:00:56 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_cas.c,v 1.3 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: atomic_init_cas.c,v 1.4 2013/08/21 03:00:56 matt Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -32,11 +32,11 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_cas.c,v 1.3 2008/04/28 20:22:53 martin Exp $); +__RCSID($NetBSD: atomic_init_cas.c,v 1.4 2013/08/21 03:00:56 matt Exp $); void __libc_atomic_init(void) __attribute__ ((visibility(hidden))); -void +void __section(.text.startup) __libc_atomic_init(void) { Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.8 src/common/lib/libc/atomic/atomic_init_testset.c:1.9 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.8 Tue Feb 28 20:41:19 2012 +++ src/common/lib/libc/atomic/atomic_init_testset.c Wed Aug 21 03:00:56 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.8 2012/02/28 20:41:19 joerg Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.9 2013/08/21 03:00:56 matt Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.8 2012/02/28 20:41:19 joerg Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.9 2013/08/21 03:00:56 matt Exp $); #include atomic_op_namespace.h @@ -109,7 +109,7 @@ _atomic_cas_32(volatile uint32_t *ptr, u return (*_atomic_cas_fn)(ptr, old, new); } -void +void __section(.text.startup) __libc_atomic_init(void) { int ncpu, mib[2];
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: joerg Date: Tue Feb 28 20:41:19 UTC 2012 Modified Files: src/common/lib/libc/atomic: atomic_init_testset.c Log Message: Make sure to create the right aliases. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/atomic/atomic_init_testset.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/atomic_init_testset.c diff -u src/common/lib/libc/atomic/atomic_init_testset.c:1.7 src/common/lib/libc/atomic/atomic_init_testset.c:1.8 --- src/common/lib/libc/atomic/atomic_init_testset.c:1.7 Mon Dec 14 00:39:00 2009 +++ src/common/lib/libc/atomic/atomic_init_testset.c Tue Feb 28 20:41:19 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.7 2009/12/14 00:39:00 matt Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.8 2012/02/28 20:41:19 joerg Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include sys/cdefs.h -__RCSID($NetBSD: atomic_init_testset.c,v 1.7 2009/12/14 00:39:00 matt Exp $); +__RCSID($NetBSD: atomic_init_testset.c,v 1.8 2012/02/28 20:41:19 joerg Exp $); #include atomic_op_namespace.h @@ -135,6 +135,10 @@ __libc_atomic_init(void) #undef atomic_cas_uint #undef atomic_cas_ulong #undef atomic_cas_ptr +#undef atomic_cas_32_ni +#undef atomic_cas_uint_ni +#undef atomic_cas_ulong_ni +#undef atomic_cas_ptr_ni atomic_op_alias(atomic_cas_32,_atomic_cas_32) atomic_op_alias(atomic_cas_uint,_atomic_cas_32)
CVS commit: src/common/lib/libc/atomic
Module Name:src Committed By: skrll Date: Fri Aug 21 14:31:03 UTC 2009 Modified Files: src/common/lib/libc/atomic: membar_ops_nop.c Log Message: __strong_alias(foo,foo) is... pointless. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/atomic/membar_ops_nop.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/atomic/membar_ops_nop.c diff -u src/common/lib/libc/atomic/membar_ops_nop.c:1.4 src/common/lib/libc/atomic/membar_ops_nop.c:1.5 --- src/common/lib/libc/atomic/membar_ops_nop.c:1.4 Mon Apr 28 20:22:53 2008 +++ src/common/lib/libc/atomic/membar_ops_nop.c Fri Aug 21 14:31:02 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: membar_ops_nop.c,v 1.4 2008/04/28 20:22:53 martin Exp $ */ +/* $NetBSD: membar_ops_nop.c,v 1.5 2009/08/21 14:31:02 skrll Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -54,4 +54,3 @@ __strong_alias(_membar_consumer,_membar_sync) #undef membar_sync atomic_op_alias(membar_sync,_membar_sync) -__strong_alias(_membar_sync,_membar_sync)