Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

internal/runtime/atomic: updated go assembler comments #72048

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 19 additions & 17 deletions src/internal/runtime/atomic/atomic_386.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
36 changes: 19 additions & 17 deletions src/internal/runtime/atomic/atomic_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
13 changes: 7 additions & 6 deletions src/internal/runtime/atomic/atomic_arm.s
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
27 changes: 14 additions & 13 deletions src/internal/runtime/atomic/atomic_arm64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
36 changes: 19 additions & 17 deletions src/internal/runtime/atomic/atomic_loong64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down
36 changes: 19 additions & 17 deletions src/internal/runtime/atomic/atomic_mips64x.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down
13 changes: 7 additions & 6 deletions src/internal/runtime/atomic/atomic_mipsx.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
36 changes: 19 additions & 17 deletions src/internal/runtime/atomic/atomic_ppc64x.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down
Loading