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