67 lines
1.2 KiB
ArmAsm
67 lines
1.2 KiB
ArmAsm
TEXT ainc(SB),$-8 /* long ainc(long *); */
|
|
MOVQ R0, R1 /* p */
|
|
inc1:
|
|
MOVLL (R1), R2 /* *p */
|
|
ADDL $1, R2
|
|
MOVQ R2, R0 /* copy to return */
|
|
MOVLC R2, (R1) /* (*p)++ */
|
|
BEQ R2, inc1 /* write failed, retry */
|
|
RET
|
|
|
|
TEXT adec(SB),$-8 /* long ainc(long *); */
|
|
MOVQ R0, R1 /* p */
|
|
dec1:
|
|
MOVLL (R1), R2 /* *p */
|
|
SUBL $1, R2
|
|
MOVQ R2, R0 /* copy to return */
|
|
MOVLC R2, (R1) /* (*p)++ */
|
|
BEQ R2, dec1 /* write failed, retry */
|
|
RET
|
|
|
|
TEXT _xinc(SB), $-8
|
|
MOVQ R0, R1 /* p */
|
|
xinc1:
|
|
MOVLL (R1), R0 /* *p */
|
|
ADDL $1, R0
|
|
MOVLC R0, (R1) /* (*p)++ */
|
|
BEQ R0, xinc1 /* write failed, retry */
|
|
RET
|
|
|
|
TEXT _xdec(SB), $-8
|
|
MOVQ R0, R1 /* p */
|
|
xdec1:
|
|
MOVLL (R1), R0 /* *p */
|
|
SUBL $1, R0
|
|
MOVQ R0, R2
|
|
MOVLC R2, (R1) /* --(*p) */
|
|
BEQ R2, xdec1 /* write failed, retry */
|
|
RET
|
|
|
|
TEXT cas(SB), $-8
|
|
TEXT casp(SB), $-8
|
|
MOVQ R0, R1 /* p */
|
|
MOVL old+4(FP), R2
|
|
MOVL new+8(FP), R3
|
|
MOVLL (R1), R0
|
|
CMPEQ R0, R2, R4
|
|
BEQ R4, fail /* if R0 != [sic] R2, goto fail */
|
|
MOVQ R3, R0
|
|
MOVLC R0, (R1)
|
|
RET
|
|
fail:
|
|
MOVL $0, R0
|
|
RET
|
|
|
|
TEXT loadlink(SB), $-8
|
|
MOVLL (R0), R0
|
|
RET
|
|
|
|
TEXT storecond(SB), $-8
|
|
MOVW val+4(FP), R1
|
|
MOVLC R1, (R0)
|
|
BEQ R1, storecondfail /* write failed */
|
|
MOVW $1, R0
|
|
RET
|
|
storecondfail:
|
|
MOVW $0, R0
|
|
RET
|