Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/common/lib/libc/arch/aarch64/atomic Part I of ad@'s performa...
details: https://anonhg.NetBSD.org/src/rev/89adcf06ed50
branches: trunk
changeset: 974815:89adcf06ed50
user: skrll <skrll%NetBSD.org@localhost>
date: Wed Aug 12 12:59:57 2020 +0000
description:
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.
diffstat:
common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_nand_8.S | 10 +++++-----
common/lib/libc/arch/aarch64/atomic/atomic_swap_16.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_swap_32.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_swap_64.S | 6 +++---
common/lib/libc/arch/aarch64/atomic/atomic_swap_8.S | 6 +++---
16 files changed, 64 insertions(+), 64 deletions(-)
diffs (truncated from 432 to 300 lines):
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_cas_16.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_cas_32.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_cas_64.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_cas_8.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_dec_32.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_dec_64.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_inc_32.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_inc_64.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_nand_16.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_nand_32.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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 @@
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)
diff -r 8fb448120383 -r 89adcf06ed50 common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S
--- a/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S Wed Aug 12 10:21:00 2020 +0000
+++ b/common/lib/libc/arch/aarch64/atomic/atomic_nand_64.S Wed Aug 12 12:59:57 2020 +0000
@@ -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 @@
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
Home |
Main Index |
Thread Index |
Old Index