Text file
src/runtime/memclr_mips64x.s
Documentation: runtime
1 // Copyright 2015 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 //go:build mips64 || mips64le
6 // +build mips64 mips64le
7
8 #include "go_asm.h"
9 #include "textflag.h"
10
11 // See memclrNoHeapPointers Go doc for important implementation constraints.
12
13 // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
14 TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-16
15 MOVV ptr+0(FP), R1
16 MOVV n+8(FP), R2
17 ADDV R1, R2, R4
18
19 // if less than 16 bytes or no MSA, do words check
20 SGTU $16, R2, R3
21 BNE R3, no_msa
22 MOVBU internal∕cpu·MIPS64X+const_offsetMIPS64XHasMSA(SB), R3
23 BEQ R3, R0, no_msa
24
25 VMOVB $0, W0
26
27 SGTU $128, R2, R3
28 BEQ R3, msa_large
29
30 AND $15, R2, R5
31 XOR R2, R5, R6
32 ADDVU R1, R6
33
34 msa_small:
35 VMOVB W0, (R1)
36 ADDVU $16, R1
37 SGTU R6, R1, R3
38 BNE R3, R0, msa_small
39 BEQ R5, R0, done
40 VMOVB W0, -16(R4)
41 JMP done
42
43 msa_large:
44 AND $127, R2, R5
45 XOR R2, R5, R6
46 ADDVU R1, R6
47
48 msa_large_loop:
49 VMOVB W0, (R1)
50 VMOVB W0, 16(R1)
51 VMOVB W0, 32(R1)
52 VMOVB W0, 48(R1)
53 VMOVB W0, 64(R1)
54 VMOVB W0, 80(R1)
55 VMOVB W0, 96(R1)
56 VMOVB W0, 112(R1)
57
58 ADDVU $128, R1
59 SGTU R6, R1, R3
60 BNE R3, R0, msa_large_loop
61 BEQ R5, R0, done
62 VMOVB W0, -128(R4)
63 VMOVB W0, -112(R4)
64 VMOVB W0, -96(R4)
65 VMOVB W0, -80(R4)
66 VMOVB W0, -64(R4)
67 VMOVB W0, -48(R4)
68 VMOVB W0, -32(R4)
69 VMOVB W0, -16(R4)
70 JMP done
71
72 no_msa:
73 // if less than 8 bytes, do one byte at a time
74 SGTU $8, R2, R3
75 BNE R3, out
76
77 // do one byte at a time until 8-aligned
78 AND $7, R1, R3
79 BEQ R3, words
80 MOVB R0, (R1)
81 ADDV $1, R1
82 JMP -4(PC)
83
84 words:
85 // do 8 bytes at a time if there is room
86 ADDV $-7, R4, R2
87
88 SGTU R2, R1, R3
89 BEQ R3, out
90 MOVV R0, (R1)
91 ADDV $8, R1
92 JMP -4(PC)
93
94 out:
95 BEQ R1, R4, done
96 MOVB R0, (R1)
97 ADDV $1, R1
98 JMP -3(PC)
99 done:
100 RET
101
View as plain text