github.com/bir3/gocompiler@v0.9.2202/src/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<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-25 12 #ifndef GOEXPERIMENT_regabiargs 13 MOVV a+0(FP), R4 14 MOVV b+8(FP), R5 15 MOVV size+16(FP), R6 16 #endif 17 BEQ R4, R5, eq 18 ADDV R4, R6, R7 19 PCALIGN $16 20 loop: 21 BNE R4, R7, test 22 MOVV $1, R4 23 #ifndef GOEXPERIMENT_regabiargs 24 MOVB R4, ret+24(FP) 25 #endif 26 RET 27 test: 28 MOVBU (R4), R9 29 ADDV $1, R4 30 MOVBU (R5), R10 31 ADDV $1, R5 32 BEQ R9, R10, loop 33 34 MOVB R0, R4 35 #ifndef GOEXPERIMENT_regabiargs 36 MOVB R0, ret+24(FP) 37 #endif 38 RET 39 eq: 40 MOVV $1, R4 41 #ifndef GOEXPERIMENT_regabiargs 42 MOVB R4, ret+24(FP) 43 #endif 44 RET 45 46 // memequal_varlen(a, b unsafe.Pointer) bool 47 TEXT runtime·memequal_varlen<ABIInternal>(SB),NOSPLIT,$40-17 48 #ifndef GOEXPERIMENT_regabiargs 49 MOVV a+0(FP), R4 50 MOVV b+8(FP), R5 51 #endif 52 BEQ R4, R5, eq 53 MOVV 8(REGCTXT), R6 // compiler stores size at offset 8 in the closure 54 MOVV R4, 8(R3) 55 MOVV R5, 16(R3) 56 MOVV R6, 24(R3) 57 JAL runtime·memequal(SB) 58 MOVBU 32(R3), R4 59 #ifndef GOEXPERIMENT_regabiargs 60 MOVB R4, ret+16(FP) 61 #endif 62 RET 63 eq: 64 MOVV $1, R4 65 #ifndef GOEXPERIMENT_regabiargs 66 MOVB R4, ret+16(FP) 67 #endif 68 RET