Commit 890b96f
committed
cmd/asm, cmd/internal/obj: generate proper atomic ops for riscv64
Go's memory model closely follows the approach C++ concurrency memory
model (https://go.dev/ref/mem) and Go atomic "has the same semantics as C++'s
sequentially consistent atomics".
Meanwhile according to RISCV manual A.6 "Mappings from C/C++ primitives to RISC-V primitives".
C/C++ atomic operations (memory_order_acq_rel) should be map to "amo<op>.{w|d}.aqrl"
LR/SC (memory_order_acq_rel) should map to "lr.{w|d}.aq; <op>; sc.{w|d}.rl"
goos: linux
goarch: riscv64
pkg: runtime/internal/atomic
│ atomic.old.bench │ atomic.new.bench │
│ sec/op │ sec/op vs base │
AtomicLoad64-4 4.216n ± 1% 4.202n ± 0% ~ (p=0.127 n=10)
AtomicStore64-4 5.040n ± 0% 6.718n ± 0% +33.30% (p=0.000 n=10)
AtomicLoad-4 4.217n ± 0% 4.213n ± 0% ~ (p=0.145 n=10)
AtomicStore-4 5.040n ± 0% 6.718n ± 0% +33.30% (p=0.000 n=10)
And8-4 9.237n ± 0% 9.240n ± 0% ~ (p=0.582 n=10)
And-4 5.878n ± 0% 6.719n ± 0% +14.31% (p=0.000 n=10)
And8Parallel-4 28.44n ± 0% 28.46n ± 0% +0.07% (p=0.000 n=10)
AndParallel-4 28.40n ± 0% 28.43n ± 0% +0.11% (p=0.000 n=10)
Or8-4 8.399n ± 0% 8.398n ± 0% ~ (p=0.357 n=10)
Or-4 5.879n ± 0% 6.718n ± 0% +14.27% (p=0.000 n=10)
Or8Parallel-4 28.43n ± 0% 28.45n ± 0% +0.09% (p=0.000 n=10)
OrParallel-4 28.40n ± 0% 28.43n ± 0% +0.11% (p=0.000 n=10)
Xadd-4 30.05n ± 0% 30.10n ± 0% +0.18% (p=0.000 n=10)
Xadd64-4 30.05n ± 0% 30.09n ± 0% +0.12% (p=0.000 n=10)
Cas-4 60.48n ± 0% 61.13n ± 0% +1.08% (p=0.000 n=10)
Cas64-4 62.28n ± 0% 62.34n ± 0% ~ (p=0.810 n=10)
Xchg-4 30.05n ± 0% 30.09n ± 0% +0.15% (p=0.000 n=10)
Xchg64-4 30.05n ± 0% 30.09n ± 0% +0.13% (p=0.000 n=10)
geomean 15.42n 16.17n +4.89%
Fixes #61295
Change-Id: I97b5325db50467eeec36fb079bded7b09a32330f
Reviewed-on: https://go-review.googlesource.com/c/go/+/508715
Reviewed-by: Austin Clements <[email protected]>
Reviewed-by: Joel Sing <[email protected]>
Run-TryBot: M Zhuo <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
Reviewed-by: Bryan Mills <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>1 parent 5fe3f0a commit 890b96f
2 files changed
Lines changed: 29 additions & 24 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
186 | | - | |
187 | | - | |
| 186 | + | |
| 187 | + | |
188 | 188 | | |
189 | 189 | | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2067 | 2067 | | |
2068 | 2068 | | |
2069 | 2069 | | |
2070 | | - | |
| 2070 | + | |
2071 | 2071 | | |
2072 | 2072 | | |
2073 | 2073 | | |
2074 | 2074 | | |
2075 | 2075 | | |
2076 | 2076 | | |
2077 | | - | |
| 2077 | + | |
| 2078 | + | |
| 2079 | + | |
| 2080 | + | |
| 2081 | + | |
| 2082 | + | |
2078 | 2083 | | |
2079 | | - | |
2080 | | - | |
| 2084 | + | |
| 2085 | + | |
2081 | 2086 | | |
2082 | 2087 | | |
2083 | 2088 | | |
| |||
0 commit comments