#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
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
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
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
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
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
#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:
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
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
#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
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
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)
#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
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
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)
#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
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
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
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)
// 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
#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)