| | |
| | |
| | |
| |
|
| | |
| |
|
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT 路Cas(SB),NOSPLIT,$0-13 |
| | MOVW ptr+0(FP), R1 |
| | MOVW old+4(FP), R2 |
| | MOVW new+8(FP), R5 |
| | SYNC |
| | try_cas: |
| | MOVW R5, R3 |
| | LL (R1), R4 |
| | BNE R2, R4, cas_fail |
| | SC R3, (R1) |
| | BEQ R3, try_cas |
| | SYNC |
| | MOVB R3, ret+12(FP) |
| | RET |
| | cas_fail: |
| | SYNC |
| | MOVB R0, ret+12(FP) |
| | RET |
| |
|
| | TEXT 路Store(SB),NOSPLIT,$0-8 |
| | MOVW ptr+0(FP), R1 |
| | MOVW val+4(FP), R2 |
| | SYNC |
| | MOVW R2, 0(R1) |
| | SYNC |
| | RET |
| |
|
| | TEXT 路Store8(SB),NOSPLIT,$0-5 |
| | MOVW ptr+0(FP), R1 |
| | MOVB val+4(FP), R2 |
| | SYNC |
| | MOVB R2, 0(R1) |
| | SYNC |
| | RET |
| |
|
| | TEXT 路Load(SB),NOSPLIT,$0-8 |
| | MOVW ptr+0(FP), R1 |
| | SYNC |
| | MOVW 0(R1), R1 |
| | SYNC |
| | MOVW R1, ret+4(FP) |
| | RET |
| |
|
| | TEXT 路Load8(SB),NOSPLIT,$0-5 |
| | MOVW ptr+0(FP), R1 |
| | SYNC |
| | MOVB 0(R1), R1 |
| | SYNC |
| | MOVB R1, ret+4(FP) |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | TEXT 路Xadd(SB),NOSPLIT,$0-12 |
| | MOVW ptr+0(FP), R2 |
| | MOVW delta+4(FP), R3 |
| | SYNC |
| | try_xadd: |
| | LL (R2), R1 |
| | ADDU R1, R3, R4 |
| | MOVW R4, R1 |
| | SC R4, (R2) |
| | BEQ R4, try_xadd |
| | SYNC |
| | MOVW R1, ret+8(FP) |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | |
| | TEXT 路Xchg(SB),NOSPLIT,$0-12 |
| | MOVW ptr+0(FP), R2 |
| | MOVW new+4(FP), R5 |
| | SYNC |
| | try_xchg: |
| | MOVW R5, R3 |
| | LL (R2), R1 |
| | SC R3, (R2) |
| | BEQ R3, try_xchg |
| | SYNC |
| | MOVW R1, ret+8(FP) |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | |
| | TEXT 路Xchg8(SB), NOSPLIT, $0-9 |
| | MOVW ptr+0(FP), R2 |
| | MOVBU new+4(FP), R5 |
| | |
| | |
| | XOR $3, R2 |
| | |
| | |
| | AND $3, R2, R4 |
| | SLL $3, R4 |
| | |
| | MOVW $0xFF, R7 |
| | SLL R4, R7 |
| | XOR $-1, R7 |
| | AND $~3, R2 |
| | SLL R4, R5 |
| |
|
| | SYNC |
| | LL (R2), R9 |
| | AND R7, R9, R8 |
| | OR R5, R8 |
| | SC R8, (R2) |
| | BEQ R8, -5(PC) |
| | SYNC |
| | SRL R4, R9 |
| | MOVBU R9, ret+8(FP) |
| | RET |
| |
|
| | TEXT 路Casint32(SB),NOSPLIT,$0-13 |
| | JMP 路Cas(SB) |
| |
|
| | TEXT 路Casint64(SB),NOSPLIT,$0-21 |
| | JMP 路Cas64(SB) |
| |
|
| | TEXT 路Casuintptr(SB),NOSPLIT,$0-13 |
| | JMP 路Cas(SB) |
| |
|
| | TEXT 路CasRel(SB),NOSPLIT,$0-13 |
| | JMP 路Cas(SB) |
| |
|
| | TEXT 路Loaduintptr(SB),NOSPLIT,$0-8 |
| | JMP 路Load(SB) |
| |
|
| | TEXT 路Loaduint(SB),NOSPLIT,$0-8 |
| | JMP 路Load(SB) |
| |
|
| | TEXT 路Loadp(SB),NOSPLIT,$-0-8 |
| | JMP 路Load(SB) |
| |
|
| | TEXT 路Storeint32(SB),NOSPLIT,$0-8 |
| | JMP 路Store(SB) |
| |
|
| | TEXT 路Storeint64(SB),NOSPLIT,$0-12 |
| | JMP 路Store64(SB) |
| |
|
| | TEXT 路Storeuintptr(SB),NOSPLIT,$0-8 |
| | JMP 路Store(SB) |
| |
|
| | TEXT 路Xadduintptr(SB),NOSPLIT,$0-12 |
| | JMP 路Xadd(SB) |
| |
|
| | TEXT 路Loadint32(SB),NOSPLIT,$0-8 |
| | JMP 路Load(SB) |
| |
|
| | TEXT 路Loadint64(SB),NOSPLIT,$0-12 |
| | JMP 路Load64(SB) |
| |
|
| | TEXT 路Xaddint32(SB),NOSPLIT,$0-12 |
| | JMP 路Xadd(SB) |
| |
|
| | TEXT 路Xaddint64(SB),NOSPLIT,$0-20 |
| | JMP 路Xadd64(SB) |
| |
|
| | TEXT 路Casp1(SB),NOSPLIT,$0-13 |
| | JMP 路Cas(SB) |
| |
|
| | TEXT 路Xchgint32(SB),NOSPLIT,$0-12 |
| | JMP 路Xchg(SB) |
| |
|
| | TEXT 路Xchgint64(SB),NOSPLIT,$0-20 |
| | JMP 路Xchg64(SB) |
| |
|
| | TEXT 路Xchguintptr(SB),NOSPLIT,$0-12 |
| | JMP 路Xchg(SB) |
| |
|
| | TEXT 路StorepNoWB(SB),NOSPLIT,$0-8 |
| | JMP 路Store(SB) |
| |
|
| | TEXT 路StoreRel(SB),NOSPLIT,$0-8 |
| | JMP 路Store(SB) |
| |
|
| | TEXT 路StoreReluintptr(SB),NOSPLIT,$0-8 |
| | JMP 路Store(SB) |
| |
|
| | |
| | TEXT 路Or8(SB),NOSPLIT,$0-5 |
| | MOVW ptr+0(FP), R1 |
| | MOVBU val+4(FP), R2 |
| | MOVW $~3, R3 |
| | AND R1, R3 |
| | |
| | |
| | XOR $3, R1 |
| | |
| | AND $3, R1, R4 |
| | SLL $3, R4 |
| | SLL R4, R2, R2 |
| | SYNC |
| | try_or8: |
| | LL (R3), R4 |
| | OR R2, R4 |
| | SC R4, (R3) |
| | BEQ R4, try_or8 |
| | SYNC |
| | RET |
| |
|
| | |
| | TEXT 路And8(SB),NOSPLIT,$0-5 |
| | MOVW ptr+0(FP), R1 |
| | MOVBU val+4(FP), R2 |
| | MOVW $~3, R3 |
| | AND R1, R3 |
| | |
| | |
| | XOR $3, R1 |
| | |
| | AND $3, R1, R4 |
| | SLL $3, R4 |
| | MOVW $0xFF, R5 |
| | SLL R4, R2 |
| | SLL R4, R5 |
| | NOR R0, R5 |
| | OR R5, R2 |
| | SYNC |
| | try_and8: |
| | LL (R3), R4 |
| | AND R2, R4 |
| | SC R4, (R3) |
| | BEQ R4, try_and8 |
| | SYNC |
| | RET |
| |
|
| | |
| | TEXT 路Or(SB), NOSPLIT, $0-8 |
| | MOVW ptr+0(FP), R1 |
| | MOVW val+4(FP), R2 |
| |
|
| | SYNC |
| | LL (R1), R3 |
| | OR R2, R3 |
| | SC R3, (R1) |
| | BEQ R3, -4(PC) |
| | SYNC |
| | RET |
| |
|
| | |
| | TEXT 路And(SB), NOSPLIT, $0-8 |
| | MOVW ptr+0(FP), R1 |
| | MOVW val+4(FP), R2 |
| |
|
| | SYNC |
| | LL (R1), R3 |
| | AND R2, R3 |
| | SC R3, (R1) |
| | BEQ R3, -4(PC) |
| | SYNC |
| | RET |
| |
|
| | |
| | TEXT 路Or32(SB), NOSPLIT, $0-12 |
| | MOVW ptr+0(FP), R1 |
| | MOVW val+4(FP), R2 |
| |
|
| | SYNC |
| | LL (R1), R3 |
| | OR R2, R3, R4 |
| | SC R4, (R1) |
| | BEQ R4, -4(PC) |
| | SYNC |
| | MOVW R3, ret+8(FP) |
| | RET |
| |
|
| | |
| | TEXT 路And32(SB), NOSPLIT, $0-12 |
| | MOVW ptr+0(FP), R1 |
| | MOVW val+4(FP), R2 |
| |
|
| | SYNC |
| | LL (R1), R3 |
| | AND R2, R3, R4 |
| | SC R4, (R1) |
| | BEQ R4, -4(PC) |
| | SYNC |
| | MOVW R3, ret+8(FP) |
| | RET |
| |
|
| | |
| | TEXT 路Anduintptr(SB), NOSPLIT, $0-12 |
| | JMP 路And32(SB) |
| |
|
| | |
| | TEXT 路Oruintptr(SB), NOSPLIT, $0-12 |
| | JMP 路Or32(SB) |
| |
|
| | TEXT 路spinLock(SB),NOSPLIT,$0-4 |
| | MOVW state+0(FP), R1 |
| | MOVW $1, R2 |
| | SYNC |
| | try_lock: |
| | MOVW R2, R3 |
| | check_again: |
| | LL (R1), R4 |
| | BNE R4, check_again |
| | SC R3, (R1) |
| | BEQ R3, try_lock |
| | SYNC |
| | RET |
| |
|
| | TEXT 路spinUnlock(SB),NOSPLIT,$0-4 |
| | MOVW state+0(FP), R1 |
| | SYNC |
| | MOVW R0, (R1) |
| | SYNC |
| | RET |
| |
|