github.com/songzhibin97/go-baseutils@v0.0.2-0.20240302024150-487d8ce9c082/structure/queues/lscq/asm_arm64.s (about) 1 #include "textflag.h" 2 #include "funcdata.h" 3 4 TEXT ·compareAndSwapUint128(SB), NOSPLIT, $0-41 5 MOVD addr+0(FP), R0 6 MOVD old1+8(FP), R2 7 MOVD old2+16(FP), R3 8 MOVD new1+24(FP), R4 9 MOVD new2+32(FP), R5 10 MOVBU ·arm64HasAtomics+0(SB), R1 11 CBZ R1, load_store_loop 12 MOVD R2, R6 13 MOVD R3, R7 14 CASPD (R2, R3), (R0), (R4, R5) 15 CMP R2, R6 16 BNE ok 17 CMP R3, R7 18 CSET EQ, R0 19 MOVB R0, ret+40(FP) 20 RET 21 load_store_loop: 22 LDAXP (R0), (R6, R7) 23 CMP R2, R6 24 BNE ok 25 CMP R3, R7 26 BNE ok 27 STLXP (R4, R5), (R0), R6 28 CBNZ R6, load_store_loop 29 ok: 30 CSET EQ, R0 31 MOVB R0, ret+40(FP) 32 RET 33 34 TEXT ·loadUint128(SB),NOSPLIT,$0-24 35 MOVD ptr+0(FP), R0 36 LDAXP (R0), (R0, R1) 37 MOVD R0, ret+8(FP) 38 MOVD R1, ret+16(FP) 39 RET 40 41 TEXT ·loadSCQNodeUint64(SB),NOSPLIT,$0 42 MOVD ptr+0(FP), R0 43 LDAXP (R0), (R0, R1) 44 MOVD R0, ret+8(FP) 45 MOVD R1, ret+16(FP) 46 RET 47 48 TEXT ·loadSCQNodePointer(SB),NOSPLIT,$0 49 MOVD ptr+0(FP), R0 50 LDAXP (R0), (R0, R1) 51 MOVD R0, ret+8(FP) 52 MOVD R1, ret+16(FP) 53 RET 54 55 TEXT ·atomicTestAndSetFirstBit(SB),NOSPLIT,$0 56 MOVD addr+0(FP), R0 57 load_store_loop: 58 LDAXR (R0), R1 59 ORR $(1<<63), R1, R1 60 STLXR R1, (R0), R2 61 CBNZ R2, load_store_loop 62 MOVD R1, val+8(FP) 63 RET 64 65 66 TEXT ·atomicTestAndSetSecondBit(SB),NOSPLIT,$0 67 MOVD addr+0(FP), R0 68 load_store_loop: 69 LDAXR (R0), R1 70 ORR $(1<<62), R1, R1 71 STLXR R1, (R0), R2 72 CBNZ R2, load_store_loop 73 MOVD R1, val+8(FP) 74 RET 75 76 TEXT ·resetNode(SB),NOSPLIT,$0 77 MOVD addr+0(FP), R0 78 MOVD $0, 8(R0) 79 load_store_loop: 80 LDAXR (R0), R1 81 ORR $(1<<62), R1, R1 82 STLXR R1, (R0), R2 83 CBNZ R2, load_store_loop 84 RET 85 86 TEXT ·runtimeEnableWriteBarrier(SB),NOSPLIT,$0 87 MOVW runtime·writeBarrier(SB), R0 88 MOVB R0, ret+0(FP) 89 RET