File tree Expand file tree Collapse file tree 3 files changed +86
-3
lines changed
src/runtime/internal/atomic Expand file tree Collapse file tree 3 files changed +86
-3
lines changed Original file line number Diff line number Diff line change 1
- // +build wasm
1
+ //go:build wasm || ppc64 || ppc64le
2
+ // +build wasm ppc64 ppc64le
3
+
2
4
//
3
5
// Copyright 2023 The Go Authors. All rights reserved.
4
6
// Use of this source code is governed by a BSD-style
9
11
package atomic_test
10
12
11
13
import (
12
- "testing"
13
14
"runtime/internal/atomic"
15
+ "testing"
14
16
)
15
17
16
18
func TestAnd32 (t * testing.T ) {
@@ -166,4 +168,3 @@ func TestOr64(t *testing.T) {
166
168
}
167
169
}
168
170
}
169
-
Original file line number Diff line number Diff line change @@ -61,6 +61,24 @@ func And(ptr *uint32, val uint32)
61
61
//go:noescape
62
62
func Or (ptr * uint32 , val uint32 )
63
63
64
+ //go:noescape
65
+ func And32 (ptr * uint32 , val uint32 ) uint32
66
+
67
+ //go:noescape
68
+ func Or32 (ptr * uint32 , val uint32 ) uint32
69
+
70
+ //go:noescape
71
+ func And64 (ptr * uint64 , val uint64 ) uint64
72
+
73
+ //go:noescape
74
+ func Or64 (ptr * uint64 , val uint64 ) uint64
75
+
76
+ //go:noescape
77
+ func Anduintptr (ptr * uintptr , val uintptr ) uintptr
78
+
79
+ //go:noescape
80
+ func Oruintptr (ptr * uintptr , val uintptr ) uintptr
81
+
64
82
//go:noescape
65
83
func Cas64 (ptr * uint64 , old , new uint64 ) bool
66
84
Original file line number Diff line number Diff line change @@ -360,3 +360,67 @@ again:
360
360
STWCCC R6 , (R3)
361
361
BNE again
362
362
RET
363
+
364
+ // func Or32(addr * uint32 , v uint32) old uint32
365
+ TEXT ·Or32(SB) , NOSPLIT , $ 0 - 20
366
+ MOVD ptr + 0 (FP) , R3
367
+ MOVW val + 8 (FP) , R4
368
+ LWSYNC
369
+ again:
370
+ LWAR (R3) , R6
371
+ MOVW R6 , R7
372
+ OR R4 , R6
373
+ STWCCC R6 , (R3)
374
+ BNE again
375
+ MOVW R7 , ret + 16 (FP)
376
+ RET
377
+
378
+ // func And32(addr * uint32 , v uint32) old uint32
379
+ TEXT ·And32(SB) , NOSPLIT , $ 0 - 20
380
+ MOVD ptr + 0 (FP) , R3
381
+ MOVW val + 8 (FP) , R4
382
+ LWSYNC
383
+ again:
384
+ LWAR (R3) , R6
385
+ MOVW R6 , R7
386
+ AND R4 , R6
387
+ STWCCC R6 , (R3)
388
+ BNE again
389
+ MOVW R7 , ret + 16 (FP)
390
+ RET
391
+
392
+ // func Or64(addr * uint64 , v uint64) old uint64
393
+ TEXT ·Or64(SB) , NOSPLIT , $ 0 - 24
394
+ MOVD ptr + 0 (FP) , R3
395
+ MOVD val + 8 (FP) , R4
396
+ LWSYNC
397
+ again:
398
+ LDAR (R3) , R6
399
+ MOVD R6 , R7
400
+ OR R4 , R6
401
+ STDCCC R6 , (R3)
402
+ BNE again
403
+ MOVD R7 , ret + 16 (FP)
404
+ RET
405
+
406
+ // func And64(addr * uint64 , v uint64) old uint64
407
+ TEXT ·And64(SB) , NOSPLIT , $ 0 - 24
408
+ MOVD ptr + 0 (FP) , R3
409
+ MOVD val + 8 (FP) , R4
410
+ LWSYNC
411
+ again:
412
+ LDAR (R3) , R6
413
+ MOVD R6 , R7
414
+ AND R4 , R6
415
+ STDCCC R6 , (R3)
416
+ BNE again
417
+ MOVD R7 , ret + 16 (FP)
418
+ RET
419
+
420
+ // func Anduintptr(addr * uintptr , v uintptr) old uintptr
421
+ TEXT ·Anduintptr(SB) , NOSPLIT , $ 0 - 24
422
+ JMP ·And64(SB)
423
+
424
+ // func Oruintptr(addr * uintptr , v uintptr) old uintptr
425
+ TEXT ·Oruintptr(SB) , NOSPLIT , $ 0 - 24
426
+ JMP ·Or64(SB)
You can’t perform that action at this time.
0 commit comments