1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
| // Copyright 2016 The Go Authors. All rights reserved.
| // Use of this source code is governed by a BSD-style
| // license that can be found in the LICENSE file.
|
| #include "textflag.h"
|
| // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
| TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT|NOFRAME,$0-16
| MOVD ptr+0(FP), R4
| MOVD n+8(FP), R5
|
| start:
| CMPBLE R5, $3, clear0to3
| CMPBLE R5, $7, clear4to7
| CMPBLE R5, $11, clear8to11
| CMPBLE R5, $15, clear12to15
| CMP R5, $32
| BGE clearmt32
| MOVD $0, 0(R4)
| MOVD $0, 8(R4)
| ADD $16, R4
| SUB $16, R5
| BR start
|
| clear0to3:
| CMPBEQ R5, $0, done
| CMPBNE R5, $1, clear2
| MOVB $0, 0(R4)
| RET
| clear2:
| CMPBNE R5, $2, clear3
| MOVH $0, 0(R4)
| RET
| clear3:
| MOVH $0, 0(R4)
| MOVB $0, 2(R4)
| RET
|
| clear4to7:
| CMPBNE R5, $4, clear5
| MOVW $0, 0(R4)
| RET
| clear5:
| CMPBNE R5, $5, clear6
| MOVW $0, 0(R4)
| MOVB $0, 4(R4)
| RET
| clear6:
| CMPBNE R5, $6, clear7
| MOVW $0, 0(R4)
| MOVH $0, 4(R4)
| RET
| clear7:
| MOVW $0, 0(R4)
| MOVH $0, 4(R4)
| MOVB $0, 6(R4)
| RET
|
| clear8to11:
| CMPBNE R5, $8, clear9
| MOVD $0, 0(R4)
| RET
| clear9:
| CMPBNE R5, $9, clear10
| MOVD $0, 0(R4)
| MOVB $0, 8(R4)
| RET
| clear10:
| CMPBNE R5, $10, clear11
| MOVD $0, 0(R4)
| MOVH $0, 8(R4)
| RET
| clear11:
| MOVD $0, 0(R4)
| MOVH $0, 8(R4)
| MOVB $0, 10(R4)
| RET
|
| clear12to15:
| CMPBNE R5, $12, clear13
| MOVD $0, 0(R4)
| MOVW $0, 8(R4)
| RET
| clear13:
| CMPBNE R5, $13, clear14
| MOVD $0, 0(R4)
| MOVW $0, 8(R4)
| MOVB $0, 12(R4)
| RET
| clear14:
| CMPBNE R5, $14, clear15
| MOVD $0, 0(R4)
| MOVW $0, 8(R4)
| MOVH $0, 12(R4)
| RET
| clear15:
| MOVD $0, 0(R4)
| MOVW $0, 8(R4)
| MOVH $0, 12(R4)
| MOVB $0, 14(R4)
| RET
|
| clearmt32:
| CMP R5, $256
| BLT clearlt256
| XC $256, 0(R4), 0(R4)
| ADD $256, R4
| ADD $-256, R5
| BR clearmt32
| clearlt256:
| CMPBEQ R5, $0, done
| ADD $-1, R5
| EXRL $runtime·memclr_s390x_exrl_xc(SB), R5
| done:
| RET
|
| // DO NOT CALL - target for exrl (execute relative long) instruction.
| TEXT runtime·memclr_s390x_exrl_xc(SB),NOSPLIT|NOFRAME,$0-0
| XC $1, 0(R4), 0(R4)
| MOVD $0, 0(R0)
| RET
|
|