...
Text file src/pkg/internal/bytealg/equal_mips64x.s
1 // Copyright 2018 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 // +build mips64 mips64le
6
7 #include "go_asm.h"
8 #include "textflag.h"
9
10 #define REGCTXT R22
11
12 // memequal(a, b unsafe.Pointer, size uintptr) bool
13 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
14 MOVV a+0(FP), R1
15 MOVV b+8(FP), R2
16 BEQ R1, R2, eq
17 MOVV size+16(FP), R3
18 ADDV R1, R3, R4
19 loop:
20 BNE R1, R4, test
21 MOVV $1, R1
22 MOVB R1, ret+24(FP)
23 RET
24 test:
25 MOVBU (R1), R6
26 ADDV $1, R1
27 MOVBU (R2), R7
28 ADDV $1, R2
29 BEQ R6, R7, loop
30
31 MOVB R0, ret+24(FP)
32 RET
33 eq:
34 MOVV $1, R1
35 MOVB R1, ret+24(FP)
36 RET
37
38 // memequal_varlen(a, b unsafe.Pointer) bool
39 TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17
40 MOVV a+0(FP), R1
41 MOVV b+8(FP), R2
42 BEQ R1, R2, eq
43 MOVV 8(REGCTXT), R3 // compiler stores size at offset 8 in the closure
44 MOVV R1, 8(R29)
45 MOVV R2, 16(R29)
46 MOVV R3, 24(R29)
47 JAL runtime·memequal(SB)
48 MOVBU 32(R29), R1
49 MOVB R1, ret+16(FP)
50 RET
51 eq:
52 MOVV $1, R1
53 MOVB R1, ret+16(FP)
54 RET
View as plain text