1
2
3
4
5
6
7
8
9
10
11
12
13 .text
14 .p2align 4
15
16
17
18
19
20
21
22
23
24
25 .globl memset,__memset_end
26 .type memset,@function
27memset:
28 orcc.p gr10,gr0,gr5,icc3 ; GR5 = count
29 andi gr9,
30 or.p gr8,gr0,gr4 ; GR4 = address
31 beqlr icc3,
32
33
34 setlos.p
35 andicc gr4,
36 ckne icc0,cc7
37 cstb.p gr9,@(gr4,gr0) ,cc7,
38 csubcc gr5,gr6,gr5 ,cc7,
39 cadd.p gr4,gr6,gr4 ,cc7,
40 beqlr icc3,
41
42
43 andicc.p gr4,
44 subicc gr5,
45 setlos.p
46 ckne icc0,cc7
47 slli.p gr9,
48 cknc icc1,cc5
49 or.p gr9,gr12,gr12
50 andcr cc7,cc5,cc7
51
52 csth.p gr12,@(gr4,gr0) ,cc7,
53 csubcc gr5,gr6,gr5 ,cc7,
54 cadd.p gr4,gr6,gr4 ,cc7,
55 beqlr icc3,
56
57
58 andicc.p gr4,
59 subicc gr5,
60 setlos.p
61 ckne icc0,cc7
62 slli.p gr12,
63 cknc icc1,cc5
64 or.p gr13,gr12,gr12
65 andcr cc7,cc5,cc7
66
67 cst.p gr12,@(gr4,gr0) ,cc7,
68 csubcc gr5,gr6,gr5 ,cc7,
69 cadd.p gr4,gr6,gr4 ,cc7,
70 beqlr icc3,
71
72 or.p gr12,gr12,gr13 ; need to octuple-up the pattern
73
74
75 setlos
76 subi.p gr4,
77 setlos
78
79 subicc gr5,
800: cknc icc0,cc7
81 cstdu gr12,@(gr4,gr7) ,cc7,
82 cstdu gr12,@(gr4,gr7) ,cc7,
83 cstdu gr12,@(gr4,gr7) ,cc7,
84 cstdu gr12,@(gr4,gr7) ,cc7,
85 cstdu gr12,@(gr4,gr7) ,cc7,
86 cstdu.p gr12,@(gr4,gr7) ,cc7,
87 csubcc gr5,gr6,gr5 ,cc7,
88 cstdu.p gr12,@(gr4,gr7) ,cc7,
89 subicc gr5,
90 cstdu.p gr12,@(gr4,gr7) ,cc7,
91 beqlr icc3,
92 bnc icc0,
93
94
95 subicc.p gr5,
96 setlos
97 cknc icc0,cc7
98 cstdu.p gr12,@(gr4,gr7) ,cc7,
99 csubcc gr5,gr6,gr5 ,cc7,
100 cstdu.p gr12,@(gr4,gr7) ,cc7,
101 setlos
102 cstdu.p gr12,@(gr4,gr7) ,cc7,
103 subicc gr5,
104 cstdu.p gr12,@(gr4,gr7) ,cc7,
105 beqlr icc3,
106
107
108 cknc icc0,cc7
109 cstdu.p gr12,@(gr4,gr7) ,cc7,
110 csubcc gr5,gr6,gr5 ,cc7,
111 cstdu.p gr12,@(gr4,gr7) ,cc7,
112 beqlr icc3,
113
114
115 subicc gr5,
116 cknc icc1,cc7
117 cstdu.p gr12,@(gr4,gr7) ,cc7,
118 csubcc gr5,gr7,gr5 ,cc7,
119 setlos.p
120 beqlr icc3,
121
122
123 subicc gr5,
124 addi.p gr4,
125 cknc icc0,cc7
126 cstu.p gr12,@(gr4,gr7) ,cc7,
127 csubcc gr5,gr7,gr5 ,cc7,
128 subicc.p gr5,
129 beqlr icc3,
130
131
132 setlos
133 addi.p gr4,
134 cknc icc1,cc7
135 csthu.p gr12,@(gr4,gr7) ,cc7,
136 csubcc gr5,gr7,gr5 ,cc7,
137 subicc.p gr5,
138 beqlr icc3,
139
140
141 setlos
142 addi.p gr4,
143 cknc icc0,cc7
144 cstb.p gr12,@(gr4,gr0) ,cc7,
145 bralr
146__memset_end:
147
148 .size memset, __memset_end-memset
149
150
151
152
153
154
155
156
157
158 .globl __memset_user, __memset_user_error_lr, __memset_user_error_handler
159 .type __memset_user,@function
160__memset_user:
161 movsg lr,gr11
162
163
164 or.p gr9,gr9,gr10
165 setlos
166 call memset
167__memset_user_error_lr:
168 jmpl.p @(gr11,gr0)
169 setlos
170
171
172
173
174
175
176__memset_user_error_handler:
177 add.p gr4,gr7,gr4
178 add gr8,gr10,gr8
179 jmpl.p @(gr11,gr0)
180 sub gr8,gr4,gr8 ; we return the amount left uncleared
181
182 .size __memset_user, .-__memset_user
183