github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/internal/bytealg/equal_loong64.s (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "go_asm.h" 6 #include "textflag.h" 7 8 #define REGCTXT R29 9 10 // memequal(a, b unsafe.Pointer, size uintptr) bool 11 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 12 MOVV a+0(FP), R4 13 MOVV b+8(FP), R5 14 BEQ R4, R5, eq 15 MOVV size+16(FP), R6 16 ADDV R4, R6, R7 17 PCALIGN $16 18 loop: 19 BNE R4, R7, test 20 MOVV $1, R4 21 MOVB R4, ret+24(FP) 22 RET 23 test: 24 MOVBU (R4), R9 25 ADDV $1, R4 26 MOVBU (R5), R10 27 ADDV $1, R5 28 BEQ R9, R10, loop 29 30 MOVB R0, ret+24(FP) 31 RET 32 eq: 33 MOVV $1, R4 34 MOVB R4, ret+24(FP) 35 RET 36 37 // memequal_varlen(a, b unsafe.Pointer) bool 38 TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 39 MOVV a+0(FP), R4 40 MOVV b+8(FP), R5 41 BEQ R4, R5, eq 42 MOVV 8(REGCTXT), R6 // compiler stores size at offset 8 in the closure 43 MOVV R4, 8(R3) 44 MOVV R5, 16(R3) 45 MOVV R6, 24(R3) 46 JAL runtime·memequal(SB) 47 MOVBU 32(R3), R4 48 MOVB R4, ret+16(FP) 49 RET 50 eq: 51 MOVV $1, R4 52 MOVB R4, ret+16(FP) 53 RET