| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| TEXT 路Cas(SB), NOSPLIT, $0-17 |
| MOV ptr+0(FP), A0 |
| MOVW old+8(FP), A1 |
| MOVW new+12(FP), A2 |
| cas_again: |
| LRW (A0), A3 |
| BNE A3, A1, cas_fail |
| SCW A2, (A0), A4 |
| BNE A4, ZERO, cas_again |
| MOV $1, A0 |
| MOVB A0, ret+16(FP) |
| RET |
| cas_fail: |
| MOV $0, A0 |
| MOV A0, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Cas64(SB), NOSPLIT, $0-25 |
| MOV ptr+0(FP), A0 |
| MOV old+8(FP), A1 |
| MOV new+16(FP), A2 |
| cas_again: |
| LRD (A0), A3 |
| BNE A3, A1, cas_fail |
| SCD A2, (A0), A4 |
| BNE A4, ZERO, cas_again |
| MOV $1, A0 |
| MOVB A0, ret+24(FP) |
| RET |
| cas_fail: |
| MOVB ZERO, ret+24(FP) |
| RET |
|
|
| |
| TEXT 路Load(SB),NOSPLIT|NOFRAME,$0-12 |
| MOV ptr+0(FP), A0 |
| LRW (A0), A0 |
| MOVW A0, ret+8(FP) |
| RET |
| |
| // func Load8(ptr *uint8) uint8 |
| TEXT 路Load8(SB),NOSPLIT|NOFRAME,$0-9 |
| MOV ptr+0(FP), A0 |
| FENCE |
| MOVBU (A0), A1 |
| FENCE |
| MOVB A1, ret+8(FP) |
| RET |
|
|
| |
| TEXT 路Load64(SB),NOSPLIT|NOFRAME,$0-16 |
| MOV ptr+0(FP), A0 |
| LRD (A0), A0 |
| MOV A0, ret+8(FP) |
| RET |
| |
| // func Store(ptr *uint32, val uint32) |
| TEXT 路Store(SB), NOSPLIT, $0-12 |
| MOV ptr+0(FP), A0 |
| MOVW val+8(FP), A1 |
| AMOSWAPW A1, (A0), ZERO |
| RET |
| |
| // func Store8(ptr *uint8, val uint8) |
| TEXT 路Store8(SB), NOSPLIT, $0-9 |
| MOV ptr+0(FP), A0 |
| MOVBU val+8(FP), A1 |
| FENCE |
| MOVB A1, (A0) |
| FENCE |
| RET |
| |
| // func Store64(ptr *uint64, val uint64) |
| TEXT 路Store64(SB), NOSPLIT, $0-16 |
| MOV ptr+0(FP), A0 |
| MOV val+8(FP), A1 |
| AMOSWAPD A1, (A0), ZERO |
| RET |
| |
| TEXT 路Casp1(SB), NOSPLIT, $0-25 |
| JMP 路Cas64(SB) |
| |
| TEXT 路Casint32(SB),NOSPLIT,$0-17 |
| JMP 路Cas(SB) |
| |
| TEXT 路Casint64(SB),NOSPLIT,$0-25 |
| JMP 路Cas64(SB) |
| |
| TEXT 路Casuintptr(SB),NOSPLIT,$0-25 |
| JMP 路Cas64(SB) |
| |
| TEXT 路CasRel(SB), NOSPLIT, $0-17 |
| JMP 路Cas(SB) |
| |
| TEXT 路Loaduintptr(SB),NOSPLIT,$0-16 |
| JMP 路Load64(SB) |
| |
| TEXT 路Storeint32(SB),NOSPLIT,$0-12 |
| JMP 路Store(SB) |
| |
| TEXT 路Storeint64(SB),NOSPLIT,$0-16 |
| JMP 路Store64(SB) |
| |
| TEXT 路Storeuintptr(SB),NOSPLIT,$0-16 |
| JMP 路Store64(SB) |
| |
| TEXT 路Loaduint(SB),NOSPLIT,$0-16 |
| JMP 路Loaduintptr(SB) |
| |
| TEXT 路Loadint32(SB),NOSPLIT,$0-12 |
| JMP 路Load(SB) |
| |
| TEXT 路Loadint64(SB),NOSPLIT,$0-16 |
| JMP 路Load64(SB) |
| |
| TEXT 路Xaddint32(SB),NOSPLIT,$0-20 |
| JMP 路Xadd(SB) |
| |
| TEXT 路Xaddint64(SB),NOSPLIT,$0-24 |
| MOV ptr+0(FP), A0 |
| MOV delta+8(FP), A1 |
| AMOADDD A1, (A0), A0 |
| ADD A0, A1, A0 |
| MOVW A0, ret+16(FP) |
| RET |
| |
| TEXT 路LoadAcq(SB),NOSPLIT|NOFRAME,$0-12 |
| JMP 路Load(SB) |
|
|
| TEXT 路LoadAcq64(SB),NOSPLIT|NOFRAME,$0-16 |
| JMP 路Load64(SB) |
| |
| TEXT 路LoadAcquintptr(SB),NOSPLIT|NOFRAME,$0-16 |
| JMP 路Load64(SB) |
|
|
| |
| TEXT 路Loadp(SB),NOSPLIT,$0-16 |
| JMP 路Load64(SB) |
|
|
| |
| TEXT 路StorepNoWB(SB), NOSPLIT, $0-16 |
| JMP 路Store64(SB) |
|
|
| TEXT 路StoreRel(SB), NOSPLIT, $0-12 |
| JMP 路Store(SB) |
|
|
| TEXT 路StoreRel64(SB), NOSPLIT, $0-16 |
| JMP 路Store64(SB) |
|
|
| TEXT 路StoreReluintptr(SB), NOSPLIT, $0-16 |
| JMP 路Store64(SB) |
|
|
| |
| TEXT 路Xchg(SB), NOSPLIT, $0-20 |
| MOV ptr+0(FP), A0 |
| MOVW new+8(FP), A1 |
| AMOSWAPW A1, (A0), A1 |
| MOVW A1, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Xchg8(SB), NOSPLIT, $0-17 |
| MOV ptr+0(FP), A0 |
| MOVBU new+8(FP), A1 |
| AND $3, A0, A2 |
| SLL $3, A2 |
| MOV $255, A4 |
| SLL A2, A4 |
| NOT A4 |
| AND $~3, A0 |
| SLL A2, A1 |
| xchg8_again: |
| LRW (A0), A5 |
| AND A4, A5, A3 |
| OR A1, A3 |
| SCW A3, (A0), A6 |
| BNEZ A6, xchg8_again |
| SRL A2, A5 |
| MOVB A5, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Xchg64(SB), NOSPLIT, $0-24 |
| MOV ptr+0(FP), A0 |
| MOV new+8(FP), A1 |
| AMOSWAPD A1, (A0), A1 |
| MOV A1, ret+16(FP) |
| RET |
|
|
| |
| |
| |
|
|
| |
| TEXT 路Xadd(SB), NOSPLIT, $0-20 |
| MOV ptr+0(FP), A0 |
| MOVW delta+8(FP), A1 |
| AMOADDW A1, (A0), A2 |
| ADD A2,A1,A0 |
| MOVW A0, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Xadd64(SB), NOSPLIT, $0-24 |
| MOV ptr+0(FP), A0 |
| MOV delta+8(FP), A1 |
| AMOADDD A1, (A0), A2 |
| ADD A2, A1, A0 |
| MOV A0, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Xadduintptr(SB), NOSPLIT, $0-24 |
| JMP 路Xadd64(SB) |
|
|
| |
| TEXT 路Xchgint32(SB), NOSPLIT, $0-20 |
| JMP 路Xchg(SB) |
|
|
| |
| TEXT 路Xchgint64(SB), NOSPLIT, $0-24 |
| JMP 路Xchg64(SB) |
|
|
| |
| TEXT 路Xchguintptr(SB), NOSPLIT, $0-24 |
| JMP 路Xchg64(SB) |
|
|
| |
| TEXT 路And8(SB), NOSPLIT, $0-9 |
| MOV ptr+0(FP), A0 |
| MOVBU val+8(FP), A1 |
| AND $3, A0, A2 |
| AND $-4, A0 |
| SLL $3, A2 |
| XOR $255, A1 |
| SLL A2, A1 |
| XOR $-1, A1 |
| AMOANDW A1, (A0), ZERO |
| RET |
|
|
| |
| TEXT 路Or8(SB), NOSPLIT, $0-9 |
| MOV ptr+0(FP), A0 |
| MOVBU val+8(FP), A1 |
| AND $3, A0, A2 |
| AND $-4, A0 |
| SLL $3, A2 |
| SLL A2, A1 |
| AMOORW A1, (A0), ZERO |
| RET |
|
|
| |
| TEXT 路And(SB), NOSPLIT, $0-12 |
| MOV ptr+0(FP), A0 |
| MOVW val+8(FP), A1 |
| AMOANDW A1, (A0), ZERO |
| RET |
|
|
| |
| TEXT 路Or(SB), NOSPLIT, $0-12 |
| MOV ptr+0(FP), A0 |
| MOVW val+8(FP), A1 |
| AMOORW A1, (A0), ZERO |
| RET |
|
|
| |
| TEXT 路Or32(SB), NOSPLIT, $0-20 |
| MOV ptr+0(FP), A0 |
| MOVW val+8(FP), A1 |
| AMOORW A1, (A0), A2 |
| MOVW A2, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路And32(SB), NOSPLIT, $0-20 |
| MOV ptr+0(FP), A0 |
| MOVW val+8(FP), A1 |
| AMOANDW A1, (A0), A2 |
| MOVW A2, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Or64(SB), NOSPLIT, $0-24 |
| MOV ptr+0(FP), A0 |
| MOV val+8(FP), A1 |
| AMOORD A1, (A0), A2 |
| MOV A2, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路And64(SB), NOSPLIT, $0-24 |
| MOV ptr+0(FP), A0 |
| MOV val+8(FP), A1 |
| AMOANDD A1, (A0), A2 |
| MOV A2, ret+16(FP) |
| RET |
|
|
| |
| TEXT 路Anduintptr(SB), NOSPLIT, $0-24 |
| JMP 路And64(SB) |
|
|
| |
| TEXT 路Oruintptr(SB), NOSPLIT, $0-24 |
| JMP 路Or64(SB) |
|
|