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 #include "go_asm.h"
6 #include "textflag.h"
7
8 // memequal(p, q unsafe.Pointer, size uintptr) bool
9 TEXT runtime·memequal(SB), NOSPLIT, $0-25
10 Get SP
11 I64Load a+0(FP)
12 I64Load b+8(FP)
13 I64Load size+16(FP)
14 Call memeqbody<>(SB)
15 I64Store8 ret+24(FP)
16 RET
17
18 // memequal_varlen(a, b unsafe.Pointer) bool
19 TEXT runtime·memequal_varlen(SB), NOSPLIT, $0-17
20 Get SP
21 I64Load a+0(FP)
22 I64Load b+8(FP)
23 I64Load 8(CTXT) // compiler stores size at offset 8 in the closure
24 Call memeqbody<>(SB)
25 I64Store8 ret+16(FP)
26 RET
27
28 // params: a, b, len
29 // ret: 0/1
30 TEXT memeqbody<>(SB), NOSPLIT, $0-0
31 Get R0
32 Get R1
33 I64Eq
34 If
35 I64Const $1
36 Return
37 End
38
39 loop:
40 Loop
41 Get R2
42 I64Eqz
43 If
44 I64Const $1
45 Return
46 End
47
48 Get R0
49 I32WrapI64
50 I64Load8U $0
51 Get R1
52 I32WrapI64
53 I64Load8U $0
54 I64Ne
55 If
56 I64Const $0
57 Return
58 End
59
60 Get R0
61 I64Const $1
62 I64Add
63 Set R0
64
65 Get R1
66 I64Const $1
67 I64Add
68 Set R1
69
70 Get R2
71 I64Const $1
72 I64Sub
73 Set R2
74
75 Br loop
76 End
77 UNDEF
78
View as plain text