Module Name:    src
Committed By:   skrll
Date:           Wed Aug 12 12:59:57 UTC 2020

Modified Files:
        src/common/lib/libc/arch/aarch64/atomic: atomic_cas_16.S
            atomic_cas_32.S atomic_cas_64.S atomic_cas_8.S atomic_dec_32.S
            atomic_dec_64.S atomic_inc_32.S atomic_inc_64.S atomic_nand_16.S
            atomic_nand_32.S atomic_nand_64.S atomic_nand_8.S atomic_swap_16.S
            atomic_swap_32.S atomic_swap_64.S atomic_swap_8.S

Log Message:
Part I of ad@'s performance improvements for aarch64

- Remove memory barriers from the atomic ops.  I don't understand why those
  are there.  Is it some architectural thing, or for a CPU bug, or just
  over-caution maybe?  They're not needed for correctness.

- Have unlikely conditional branches go forwards to help the static branch
  predictor.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 \
    src/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S \
    src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S
cvs rdiff -u -r1.3 -r1.4 \
    src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S

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/arch/aarch64/atomic/atomic_cas_16.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_cas_16.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_cas_16.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_cas_16)
 	cmp	w0, w1			/*   compare? */
 	b.ne	2f
 	stxrh	w3, w2, [x4]		/* store new value */
-	cbnz	w3, 1b			/*   succeed? nope, try again. */
-	dmb	st			/* data memory barrier */
+	cbnz	w3, 3f			/*   succeed? nope, try again. */
 2:	ret				/* return. */
+3:	b	1b
 END(_atomic_cas_16)
 
 ATOMIC_OP_ALIAS(atomic_cas_16,_atomic_cas_16)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_cas_32.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_cas_32.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_cas_32)
 	cmp	w0, w1			/*   compare? */
 	b.ne	2f			/*     return if different */
 	stxr	w3, w2, [x4]		/* store new value */
-	cbnz	w3, 1b			/*   succeed? nope, try again. */
-	dmb	st
+	cbnz	w3, 3f			/*   succeed? nope, try again. */
 2:	ret				/* return. */
+3:	b	1b
 END(_atomic_cas_32)
 
 ATOMIC_OP_ALIAS(atomic_cas_32,_atomic_cas_32)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_cas_8.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_cas_8.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_cas_8)
 	cmp	w0, w1			/*   compare? */
 	b.ne	2f
 	stxrb	w3, w2, [x4]		/* store new value */
-	cbnz	w3, 1b			/*   succeed? nope, try again. */
-	dmb	st			/* data memory barrier */
+	cbnz	w3, 3f			/*   succeed? nope, try again. */
 2:	ret				/* return. */
+3:	b	1b
 END(_atomic_cas_8)
 
 ATOMIC_OP_ALIAS(atomic_cas_8,_atomic_cas_8)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_dec_32.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_dec_32.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_dec_32)
 1:	ldxr	w3, [x0]		/* load old value (return value) */
 	sub	w3, w3, #1		/* calculate new value */
 	stxr	w2, w3, [x0]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_dec_32)
 
 ATOMIC_OP_ALIAS(atomic_dec_32,_atomic_dec_32)
@@ -49,9 +49,9 @@ ENTRY_NP(_atomic_dec_32_nv)
 1:	ldxr	w0, [x4]		/* load old value */
 	sub	w0, w0, #1		/* calculate new value (return value) */
 	stxr	w3, w0, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_dec_32_nv)
 
 ATOMIC_OP_ALIAS(atomic_dec_32_nv,_atomic_dec_32_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_dec_64.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_dec_64.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_dec_64)
 1:	ldxr	x2, [x0]		/* load old value (return value) */
 	sub	x2, x2, #1		/* calculate new value */
 	stxr	w3, x2, [x0]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_dec_64)
 
 ATOMIC_OP_ALIAS(atomic_dec_64,_atomic_dec_64)
@@ -51,9 +51,9 @@ ENTRY_NP(_atomic_dec_64_nv)
 1:	ldxr	x0, [x4]		/* load old value */
 	sub	x0, x0, #1		/* calculate new value (return value) */
 	stxr	w3, x0, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_dec_64_nv)
 
 ATOMIC_OP_ALIAS(atomic_dec_64_nv,_atomic_dec_64_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_inc_32.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_inc_32.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_inc_32)
 1:	ldxr	w3, [x0]		/* load old value (return value) */
 	add	w3, w3, #1		/* calculate new value */
 	stxr	w2, w3, [x0]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_inc_32)
 
 ATOMIC_OP_ALIAS(atomic_inc_32,_atomic_inc_32)
@@ -49,9 +49,9 @@ ENTRY_NP(_atomic_inc_32_nv)
 1:	ldxr	w0, [x4]		/* load old value */
 	add	w0, w0, #1		/* calculate new value (return value) */
 	stxr	w3, w0, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_inc_32_nv)
 
 ATOMIC_OP_ALIAS(atomic_inc_32_nv,_atomic_inc_32_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_inc_64.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_inc_64.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_inc_64)
 1:	ldxr	x2, [x0]		/* load old value (return value) */
 	add	x2, x2, #1		/* calculate new value */
 	stxr	w3, x2, [x0]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_inc_64)
 
 ATOMIC_OP_ALIAS(atomic_inc_64,_atomic_inc_64)
@@ -51,9 +51,9 @@ ENTRY_NP(_atomic_inc_64_nv)
 1:	ldxr	x0, [x4]		/* load old value */
 	add	x0, x0, #1		/* calculate new value (return value) */
 	stxr	w3, x0, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_inc_64_nv)
 
 ATOMIC_OP_ALIAS(atomic_inc_64_nv,_atomic_inc_64_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_nand_16.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_nand_16.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_nand_16)
 	mvn	w3, w0			/* complement source */
 	and	w3, w3, w1		/* calculate new value */
 	stxrh	w2, w3, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again */
 	ret				/* return old value */
+2:	b	1b
 END(_atomic_nand_16)
 
 ATOMIC_OP_ALIAS(atomic_nand_16,_atomic_nand_16)
@@ -53,9 +53,9 @@ ENTRY_NP(_atomic_nand_16_nv)
 	mvn	w0, w0			/* complement source */
 	and	w0, w0, w1		/* calculate new value (return value) */
 	stxrh	w2, w0, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_nand_16_nv)
 
 ATOMIC_OP_ALIAS(atomic_nand_16_nv,_atomic_nand_16_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_nand_32.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_nand_32.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_nand_32)
 	mvn	w3, w0			/* complement source */
 	and	w3, w3, w1		/* calculate new value */
 	stxr	w2, w3, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again */
 	ret				/* return old value */
+2:	b	1b
 END(_atomic_nand_32)
 
 ATOMIC_OP_ALIAS(atomic_nand_32,_atomic_nand_32)
@@ -53,9 +53,9 @@ ENTRY_NP(_atomic_nand_32_nv)
 	mvn	w0, w0			/* complement source */
 	and	w0, w0, w1		/* calculate new value (return value) */
 	stxr	w2, w0, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_nand_32_nv)
 
 ATOMIC_OP_ALIAS(atomic_nand_32_nv,_atomic_nand_32_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_nand_64.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_nand_64.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_nand_64)
 	mvn	x2, x0			/* complement source */
 	and	x2, x2, x1		/* calculate new value */
 	stxr	w3, x2, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again */
 	ret				/* return old value */
+2:	b	1b
 END(_atomic_nand_64)
 
 ATOMIC_OP_ALIAS(atomic_nand_64,_atomic_nand_64)
@@ -53,9 +53,9 @@ ENTRY_NP(_atomic_nand_64_nv)
 	mvn	x0, x0			/* complement source */
 	and	x0, x0, x1		/* calculate new value (return value) */
 	stxr	w3, x0, [x4]		/* try to store */
-	cbnz	w3, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w3, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_nand_64_nv)
 
 ATOMIC_OP_ALIAS(atomic_nand_64_nv,_atomic_nand_64_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_nand_8.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_nand_8.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_nand_8)
 	mvn	w3, w0			/* complement source */
 	and	w3, w3, w1		/* calculate new value */
 	stxrb	w2, w3, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again */
 	ret				/* return old value */
+2:	b	1b
 END(_atomic_nand_8)
 
 ATOMIC_OP_ALIAS(atomic_nand_8,_atomic_nand_8)
@@ -53,9 +53,9 @@ ENTRY_NP(_atomic_nand_8_nv)
 	mvn	w0, w0			/* complement source */
 	and	w0, w0, w1		/* calculate new value (return value) */
 	stxrb	w2, w0, [x4]		/* try to store */
-	cbnz	w2, 1b			/*   succeed? no, try again? */
-	dmb	st
+	cbnz	w2, 2f			/*   succeed? no, try again? */
 	ret				/* return new value */
+2:	b	1b
 END(_atomic_nand_8_nv)
 
 ATOMIC_OP_ALIAS(atomic_nand_8_nv,_atomic_nand_8_nv)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_swap_16.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_swap_16.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_swap_16)
 	mov	x4, x0
 1:	ldxrh	w0, [x4]
 	stxrh	w3, w1, [x4]
-	cbnz	w3, 1b
-	dmb	st
+	cbnz	w3, 2f
 	ret
+2:	b	1b
 END(_atomic_swap_16)
 
 ATOMIC_OP_ALIAS(atomic_swap_16,_atomic_swap_16)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_swap_32.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_swap_32.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_swap_32)
 	mov	x4, x0
 1:	ldxr	w0, [x4]
 	stxr	w3, w1, [x4]
-	cbnz	w3, 1b
-	dmb	st
+	cbnz	w3, 2f
 	ret
+2:	b	1b
 END(_atomic_swap_32)
 
 ATOMIC_OP_ALIAS(atomic_swap_32,_atomic_swap_32)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_swap_64.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_swap_64.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_swap_64)
 	mov	x4, x0
 1:	ldxr	x0, [x4]
 	stxr	w3, x1, [x4]
-	cbnz	w3, 1b
-	dmb	st
+	cbnz	w3, 2f
 	ret
+2:	b	1b
 END(_atomic_swap_64)
 
 ATOMIC_OP_ALIAS(atomic_swap_64,_atomic_swap_64)
Index: src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S:1.2
--- src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S:1.1	Sun Aug 10 05:47:35 2014
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_swap_8.S,v 1.1 2014/08/10 05:47:35 matt Exp $ */
+/* $NetBSD: atomic_swap_8.S,v 1.2 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -35,9 +35,9 @@ ENTRY_NP(_atomic_swap_8)
 	mov	x4, x0
 1:	ldxrb	w0, [x4]
 	stxrb	w3, w1, [x4]
-	cbnz	w3, 1b
-	dmb	st
+	cbnz	w3, 2f
 	ret
+2:	b	1b
 END(_atomic_swap_8)
 
 ATOMIC_OP_ALIAS(atomic_swap_8,_atomic_swap_8)

Index: src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S
diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S:1.3 src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S:1.4
--- src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S:1.3	Tue Feb 19 12:51:44 2019
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S	Wed Aug 12 12:59:57 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_cas_64.S,v 1.3 2019/02/19 12:51:44 rin Exp $ */
+/* $NetBSD: atomic_cas_64.S,v 1.4 2020/08/12 12:59:57 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -37,9 +37,9 @@ ENTRY_NP(_atomic_cas_64)
 	cmp	x0, x1			/*   compare? */
 	b.ne	2f			/*     return if different */
 	stxr	w3, x2, [x4]		/* store new value */
-	cbnz	w3, 1b			/*   succeed? nope, try again. */
-	dmb	st
+	cbnz	w3, 3f			/*   succeed? nope, try again. */
 2:	ret				/* return. */
+3:	b	1b
 END(_atomic_cas_64)
 
 ATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64)

Reply via email to