mirror of
https://github.com/golang/go.git
synced 2025-10-19 11:03:18 +00:00
internal/runtime/atomic: updated go assembler comments
Updated comments in go assembler package
Change-Id: I174e344ca45fae6ef70af2e0b29cd783b003b4c2
GitHub-Last-Rev: 8ab3720889
GitHub-Pull-Request: golang/go#72048
Reviewed-on: https://go-review.googlesource.com/c/go/+/654478
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: PRABHAV DOGRA <prabhavdogra1@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
895bcf178d
commit
04164e5f5a
10 changed files with 136 additions and 122 deletions
|
@ -5,13 +5,14 @@
|
|||
#include "textflag.h"
|
||||
#include "funcdata.h"
|
||||
|
||||
// bool Cas(int32 *val, int32 old, int32 new)
|
||||
// func Cas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// }else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-13
|
||||
MOVL ptr+0(FP), BX
|
||||
MOVL old+4(FP), AX
|
||||
|
@ -63,13 +64,13 @@ TEXT ·Xaddint32(SB), NOSPLIT, $0-12
|
|||
TEXT ·Xaddint64(SB), NOSPLIT, $0-20
|
||||
JMP ·Xadd64(SB)
|
||||
|
||||
// bool ·Cas64(uint64 *val, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return 0;
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-21
|
||||
NO_LOCAL_POINTERS
|
||||
|
@ -86,13 +87,14 @@ TEXT ·Cas64(SB), NOSPLIT, $0-21
|
|||
SETEQ ret+20(FP)
|
||||
RET
|
||||
|
||||
// bool Casp1(void **p, void *old, void *new)
|
||||
// func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool
|
||||
// Atomically:
|
||||
// if(*p == old){
|
||||
// *p = new;
|
||||
// return 1;
|
||||
// }else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Casp1(SB), NOSPLIT, $0-13
|
||||
MOVL ptr+0(FP), BX
|
||||
MOVL old+4(FP), AX
|
||||
|
|
|
@ -19,13 +19,14 @@ TEXT ·Loadint32(SB), NOSPLIT, $0-12
|
|||
TEXT ·Loadint64(SB), NOSPLIT, $0-16
|
||||
JMP ·Load64(SB)
|
||||
|
||||
// bool Cas(int32 *val, int32 old, int32 new)
|
||||
// func Cas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB),NOSPLIT,$0-17
|
||||
MOVQ ptr+0(FP), BX
|
||||
MOVL old+8(FP), AX
|
||||
|
@ -35,13 +36,13 @@ TEXT ·Cas(SB),NOSPLIT,$0-17
|
|||
SETEQ ret+16(FP)
|
||||
RET
|
||||
|
||||
// bool ·Cas64(uint64 *val, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return 0;
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-25
|
||||
MOVQ ptr+0(FP), BX
|
||||
|
@ -52,13 +53,14 @@ TEXT ·Cas64(SB), NOSPLIT, $0-25
|
|||
SETEQ ret+24(FP)
|
||||
RET
|
||||
|
||||
// bool Casp1(void **val, void *old, void *new)
|
||||
// func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Casp1(SB), NOSPLIT, $0-25
|
||||
MOVQ ptr+0(FP), BX
|
||||
MOVQ old+8(FP), AX
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
#include "textflag.h"
|
||||
#include "funcdata.h"
|
||||
|
||||
// bool armcas(int32 *val, int32 old, int32 new)
|
||||
// func armcas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// }else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
//
|
||||
// To implement ·cas in sys_$GOOS_arm.s
|
||||
// using the native instructions, use:
|
||||
|
|
|
@ -192,13 +192,14 @@ load_store_loop:
|
|||
RET
|
||||
#endif
|
||||
|
||||
// bool Cas(uint32 *ptr, uint32 old, uint32 new)
|
||||
// func Cas(ptr *uint32, old, new uint32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-17
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVW old+8(FP), R1
|
||||
|
@ -226,14 +227,14 @@ ok:
|
|||
RET
|
||||
#endif
|
||||
|
||||
// bool ·Cas64(uint64 *ptr, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else {
|
||||
// return 0;
|
||||
// }
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-25
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVD old+8(FP), R1
|
||||
|
|
|
@ -5,13 +5,14 @@
|
|||
#include "go_asm.h"
|
||||
#include "textflag.h"
|
||||
|
||||
// bool cas(uint32 *ptr, uint32 old, uint32 new)
|
||||
// func Cas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*ptr == old){
|
||||
// *ptr = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-17
|
||||
MOVV ptr+0(FP), R4
|
||||
MOVW old+8(FP), R5
|
||||
|
@ -45,13 +46,13 @@ cas_fail1:
|
|||
MOVV $0, R4
|
||||
JMP -4(PC)
|
||||
|
||||
// bool cas64(uint64 *ptr, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*ptr == old){
|
||||
// *ptr = new;
|
||||
// return 1;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return 0;
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-25
|
||||
MOVV ptr+0(FP), R4
|
||||
|
@ -119,13 +120,14 @@ TEXT ·Xaddint32(SB),NOSPLIT,$0-20
|
|||
TEXT ·Xaddint64(SB), NOSPLIT, $0-24
|
||||
JMP ·Xadd64(SB)
|
||||
|
||||
// bool casp(void **val, void *old, void *new)
|
||||
// func Casp(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Casp1(SB), NOSPLIT, $0-25
|
||||
JMP ·Cas64(SB)
|
||||
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
|
||||
#define SYNC WORD $0xf
|
||||
|
||||
// bool cas(uint32 *ptr, uint32 old, uint32 new)
|
||||
// func cas(ptr *uint32, old, new uint32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-17
|
||||
MOVV ptr+0(FP), R1
|
||||
MOVW old+8(FP), R2
|
||||
|
@ -34,13 +35,13 @@ cas_fail:
|
|||
MOVV $0, R1
|
||||
JMP -4(PC)
|
||||
|
||||
// bool cas64(uint64 *ptr, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return 0;
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-25
|
||||
MOVV ptr+0(FP), R1
|
||||
|
@ -103,13 +104,14 @@ TEXT ·Xaddint32(SB), NOSPLIT, $0-20
|
|||
TEXT ·Xaddint64(SB), NOSPLIT, $0-24
|
||||
JMP ·Xadd64(SB)
|
||||
|
||||
// bool casp(void **val, void *old, void *new)
|
||||
// func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Casp1(SB), NOSPLIT, $0-25
|
||||
JMP ·Cas64(SB)
|
||||
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
|
||||
#include "textflag.h"
|
||||
|
||||
// bool Cas(int32 *val, int32 old, int32 new)
|
||||
// func Cas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB),NOSPLIT,$0-13
|
||||
MOVW ptr+0(FP), R1
|
||||
MOVW old+4(FP), R2
|
||||
|
|
|
@ -78,13 +78,14 @@ TEXT ·LoadAcq64(SB),NOSPLIT|NOFRAME,$-8-16
|
|||
MOVD R3, ret+8(FP)
|
||||
RET
|
||||
|
||||
// bool cas(uint32 *ptr, uint32 old, uint32 new)
|
||||
// func Cas(ptr *int32, old, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-17
|
||||
MOVD ptr+0(FP), R3
|
||||
MOVWZ old+8(FP), R4
|
||||
|
@ -105,13 +106,13 @@ cas_fail:
|
|||
MOVB R0, ret+16(FP)
|
||||
RET
|
||||
|
||||
// bool ·Cas64(uint64 *ptr, uint64 old, uint64 new)
|
||||
// func Cas64(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return 0;
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas64(SB), NOSPLIT, $0-25
|
||||
MOVD ptr+0(FP), R3
|
||||
|
@ -196,13 +197,14 @@ TEXT ·Xaddint32(SB), NOSPLIT, $0-20
|
|||
TEXT ·Xaddint64(SB), NOSPLIT, $0-24
|
||||
BR ·Xadd64(SB)
|
||||
|
||||
// bool casp(void **val, void *old, void *new)
|
||||
// func Casp1(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Casp1(SB), NOSPLIT, $0-25
|
||||
BR ·Cas64(SB)
|
||||
|
||||
|
|
|
@ -32,12 +32,12 @@
|
|||
|
||||
// func Cas(ptr *uint64, old, new uint64) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// } else {
|
||||
// return 0;
|
||||
// }
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB), NOSPLIT, $0-17
|
||||
MOV ptr+0(FP), A0
|
||||
MOVW old+8(FP), A1
|
||||
|
|
|
@ -7,13 +7,14 @@
|
|||
#include "textflag.h"
|
||||
|
||||
// TODO(minux): this is only valid for ARMv6+
|
||||
// bool armcas(int32 *val, int32 old, int32 new)
|
||||
// func armcas(ptr *int32, old int32, new int32) bool
|
||||
// Atomically:
|
||||
// if(*val == old){
|
||||
// *val = new;
|
||||
// return 1;
|
||||
// }else
|
||||
// return 0;
|
||||
// if *ptr == old {
|
||||
// *ptr = new
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
TEXT ·Cas(SB),NOSPLIT,$0
|
||||
JMP ·armcas(SB)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue