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
69
View as plain text