1
2
3 package rewritearm
4
5 import "internal/buildcfg"
6 import "cmd/compile/internal/types"
7 import "cmd/compile/internal/ssa/block"
8 import "cmd/compile/internal/ssa/ssaop"
9 import "cmd/compile/internal/ssa"
10
11 func RewriteValue(v *ssa.Value) bool {
12 switch v.Op {
13 case ssaop.OpARMADC:
14 return rewriteValue_OpARMADC(v)
15 case ssaop.OpARMADCconst:
16 return rewriteValue_OpARMADCconst(v)
17 case ssaop.OpARMADCshiftLL:
18 return rewriteValue_OpARMADCshiftLL(v)
19 case ssaop.OpARMADCshiftLLreg:
20 return rewriteValue_OpARMADCshiftLLreg(v)
21 case ssaop.OpARMADCshiftRA:
22 return rewriteValue_OpARMADCshiftRA(v)
23 case ssaop.OpARMADCshiftRAreg:
24 return rewriteValue_OpARMADCshiftRAreg(v)
25 case ssaop.OpARMADCshiftRL:
26 return rewriteValue_OpARMADCshiftRL(v)
27 case ssaop.OpARMADCshiftRLreg:
28 return rewriteValue_OpARMADCshiftRLreg(v)
29 case ssaop.OpARMADD:
30 return rewriteValue_OpARMADD(v)
31 case ssaop.OpARMADDD:
32 return rewriteValue_OpARMADDD(v)
33 case ssaop.OpARMADDF:
34 return rewriteValue_OpARMADDF(v)
35 case ssaop.OpARMADDS:
36 return rewriteValue_OpARMADDS(v)
37 case ssaop.OpARMADDSshiftLL:
38 return rewriteValue_OpARMADDSshiftLL(v)
39 case ssaop.OpARMADDSshiftLLreg:
40 return rewriteValue_OpARMADDSshiftLLreg(v)
41 case ssaop.OpARMADDSshiftRA:
42 return rewriteValue_OpARMADDSshiftRA(v)
43 case ssaop.OpARMADDSshiftRAreg:
44 return rewriteValue_OpARMADDSshiftRAreg(v)
45 case ssaop.OpARMADDSshiftRL:
46 return rewriteValue_OpARMADDSshiftRL(v)
47 case ssaop.OpARMADDSshiftRLreg:
48 return rewriteValue_OpARMADDSshiftRLreg(v)
49 case ssaop.OpARMADDconst:
50 return rewriteValue_OpARMADDconst(v)
51 case ssaop.OpARMADDshiftLL:
52 return rewriteValue_OpARMADDshiftLL(v)
53 case ssaop.OpARMADDshiftLLreg:
54 return rewriteValue_OpARMADDshiftLLreg(v)
55 case ssaop.OpARMADDshiftRA:
56 return rewriteValue_OpARMADDshiftRA(v)
57 case ssaop.OpARMADDshiftRAreg:
58 return rewriteValue_OpARMADDshiftRAreg(v)
59 case ssaop.OpARMADDshiftRL:
60 return rewriteValue_OpARMADDshiftRL(v)
61 case ssaop.OpARMADDshiftRLreg:
62 return rewriteValue_OpARMADDshiftRLreg(v)
63 case ssaop.OpARMAND:
64 return rewriteValue_OpARMAND(v)
65 case ssaop.OpARMANDconst:
66 return rewriteValue_OpARMANDconst(v)
67 case ssaop.OpARMANDshiftLL:
68 return rewriteValue_OpARMANDshiftLL(v)
69 case ssaop.OpARMANDshiftLLreg:
70 return rewriteValue_OpARMANDshiftLLreg(v)
71 case ssaop.OpARMANDshiftRA:
72 return rewriteValue_OpARMANDshiftRA(v)
73 case ssaop.OpARMANDshiftRAreg:
74 return rewriteValue_OpARMANDshiftRAreg(v)
75 case ssaop.OpARMANDshiftRL:
76 return rewriteValue_OpARMANDshiftRL(v)
77 case ssaop.OpARMANDshiftRLreg:
78 return rewriteValue_OpARMANDshiftRLreg(v)
79 case ssaop.OpARMBFX:
80 return rewriteValue_OpARMBFX(v)
81 case ssaop.OpARMBFXU:
82 return rewriteValue_OpARMBFXU(v)
83 case ssaop.OpARMBIC:
84 return rewriteValue_OpARMBIC(v)
85 case ssaop.OpARMBICconst:
86 return rewriteValue_OpARMBICconst(v)
87 case ssaop.OpARMBICshiftLL:
88 return rewriteValue_OpARMBICshiftLL(v)
89 case ssaop.OpARMBICshiftLLreg:
90 return rewriteValue_OpARMBICshiftLLreg(v)
91 case ssaop.OpARMBICshiftRA:
92 return rewriteValue_OpARMBICshiftRA(v)
93 case ssaop.OpARMBICshiftRAreg:
94 return rewriteValue_OpARMBICshiftRAreg(v)
95 case ssaop.OpARMBICshiftRL:
96 return rewriteValue_OpARMBICshiftRL(v)
97 case ssaop.OpARMBICshiftRLreg:
98 return rewriteValue_OpARMBICshiftRLreg(v)
99 case ssaop.OpARMCMN:
100 return rewriteValue_OpARMCMN(v)
101 case ssaop.OpARMCMNconst:
102 return rewriteValue_OpARMCMNconst(v)
103 case ssaop.OpARMCMNshiftLL:
104 return rewriteValue_OpARMCMNshiftLL(v)
105 case ssaop.OpARMCMNshiftLLreg:
106 return rewriteValue_OpARMCMNshiftLLreg(v)
107 case ssaop.OpARMCMNshiftRA:
108 return rewriteValue_OpARMCMNshiftRA(v)
109 case ssaop.OpARMCMNshiftRAreg:
110 return rewriteValue_OpARMCMNshiftRAreg(v)
111 case ssaop.OpARMCMNshiftRL:
112 return rewriteValue_OpARMCMNshiftRL(v)
113 case ssaop.OpARMCMNshiftRLreg:
114 return rewriteValue_OpARMCMNshiftRLreg(v)
115 case ssaop.OpARMCMOVWHSconst:
116 return rewriteValue_OpARMCMOVWHSconst(v)
117 case ssaop.OpARMCMOVWLSconst:
118 return rewriteValue_OpARMCMOVWLSconst(v)
119 case ssaop.OpARMCMP:
120 return rewriteValue_OpARMCMP(v)
121 case ssaop.OpARMCMPD:
122 return rewriteValue_OpARMCMPD(v)
123 case ssaop.OpARMCMPF:
124 return rewriteValue_OpARMCMPF(v)
125 case ssaop.OpARMCMPconst:
126 return rewriteValue_OpARMCMPconst(v)
127 case ssaop.OpARMCMPshiftLL:
128 return rewriteValue_OpARMCMPshiftLL(v)
129 case ssaop.OpARMCMPshiftLLreg:
130 return rewriteValue_OpARMCMPshiftLLreg(v)
131 case ssaop.OpARMCMPshiftRA:
132 return rewriteValue_OpARMCMPshiftRA(v)
133 case ssaop.OpARMCMPshiftRAreg:
134 return rewriteValue_OpARMCMPshiftRAreg(v)
135 case ssaop.OpARMCMPshiftRL:
136 return rewriteValue_OpARMCMPshiftRL(v)
137 case ssaop.OpARMCMPshiftRLreg:
138 return rewriteValue_OpARMCMPshiftRLreg(v)
139 case ssaop.OpARMEqual:
140 return rewriteValue_OpARMEqual(v)
141 case ssaop.OpARMGreaterEqual:
142 return rewriteValue_OpARMGreaterEqual(v)
143 case ssaop.OpARMGreaterEqualU:
144 return rewriteValue_OpARMGreaterEqualU(v)
145 case ssaop.OpARMGreaterThan:
146 return rewriteValue_OpARMGreaterThan(v)
147 case ssaop.OpARMGreaterThanU:
148 return rewriteValue_OpARMGreaterThanU(v)
149 case ssaop.OpARMLessEqual:
150 return rewriteValue_OpARMLessEqual(v)
151 case ssaop.OpARMLessEqualU:
152 return rewriteValue_OpARMLessEqualU(v)
153 case ssaop.OpARMLessThan:
154 return rewriteValue_OpARMLessThan(v)
155 case ssaop.OpARMLessThanU:
156 return rewriteValue_OpARMLessThanU(v)
157 case ssaop.OpARMLoweredPanicBoundsRC:
158 return rewriteValue_OpARMLoweredPanicBoundsRC(v)
159 case ssaop.OpARMLoweredPanicBoundsRR:
160 return rewriteValue_OpARMLoweredPanicBoundsRR(v)
161 case ssaop.OpARMLoweredPanicExtendRC:
162 return rewriteValue_OpARMLoweredPanicExtendRC(v)
163 case ssaop.OpARMLoweredPanicExtendRR:
164 return rewriteValue_OpARMLoweredPanicExtendRR(v)
165 case ssaop.OpARMMOVBUload:
166 return rewriteValue_OpARMMOVBUload(v)
167 case ssaop.OpARMMOVBUloadidx:
168 return rewriteValue_OpARMMOVBUloadidx(v)
169 case ssaop.OpARMMOVBUreg:
170 return rewriteValue_OpARMMOVBUreg(v)
171 case ssaop.OpARMMOVBload:
172 return rewriteValue_OpARMMOVBload(v)
173 case ssaop.OpARMMOVBloadidx:
174 return rewriteValue_OpARMMOVBloadidx(v)
175 case ssaop.OpARMMOVBreg:
176 return rewriteValue_OpARMMOVBreg(v)
177 case ssaop.OpARMMOVBstore:
178 return rewriteValue_OpARMMOVBstore(v)
179 case ssaop.OpARMMOVBstoreidx:
180 return rewriteValue_OpARMMOVBstoreidx(v)
181 case ssaop.OpARMMOVDload:
182 return rewriteValue_OpARMMOVDload(v)
183 case ssaop.OpARMMOVDstore:
184 return rewriteValue_OpARMMOVDstore(v)
185 case ssaop.OpARMMOVFload:
186 return rewriteValue_OpARMMOVFload(v)
187 case ssaop.OpARMMOVFstore:
188 return rewriteValue_OpARMMOVFstore(v)
189 case ssaop.OpARMMOVHUload:
190 return rewriteValue_OpARMMOVHUload(v)
191 case ssaop.OpARMMOVHUloadidx:
192 return rewriteValue_OpARMMOVHUloadidx(v)
193 case ssaop.OpARMMOVHUreg:
194 return rewriteValue_OpARMMOVHUreg(v)
195 case ssaop.OpARMMOVHload:
196 return rewriteValue_OpARMMOVHload(v)
197 case ssaop.OpARMMOVHloadidx:
198 return rewriteValue_OpARMMOVHloadidx(v)
199 case ssaop.OpARMMOVHreg:
200 return rewriteValue_OpARMMOVHreg(v)
201 case ssaop.OpARMMOVHstore:
202 return rewriteValue_OpARMMOVHstore(v)
203 case ssaop.OpARMMOVHstoreidx:
204 return rewriteValue_OpARMMOVHstoreidx(v)
205 case ssaop.OpARMMOVWload:
206 return rewriteValue_OpARMMOVWload(v)
207 case ssaop.OpARMMOVWloadidx:
208 return rewriteValue_OpARMMOVWloadidx(v)
209 case ssaop.OpARMMOVWloadshiftLL:
210 return rewriteValue_OpARMMOVWloadshiftLL(v)
211 case ssaop.OpARMMOVWloadshiftRA:
212 return rewriteValue_OpARMMOVWloadshiftRA(v)
213 case ssaop.OpARMMOVWloadshiftRL:
214 return rewriteValue_OpARMMOVWloadshiftRL(v)
215 case ssaop.OpARMMOVWnop:
216 return rewriteValue_OpARMMOVWnop(v)
217 case ssaop.OpARMMOVWreg:
218 return rewriteValue_OpARMMOVWreg(v)
219 case ssaop.OpARMMOVWstore:
220 return rewriteValue_OpARMMOVWstore(v)
221 case ssaop.OpARMMOVWstoreidx:
222 return rewriteValue_OpARMMOVWstoreidx(v)
223 case ssaop.OpARMMOVWstoreshiftLL:
224 return rewriteValue_OpARMMOVWstoreshiftLL(v)
225 case ssaop.OpARMMOVWstoreshiftRA:
226 return rewriteValue_OpARMMOVWstoreshiftRA(v)
227 case ssaop.OpARMMOVWstoreshiftRL:
228 return rewriteValue_OpARMMOVWstoreshiftRL(v)
229 case ssaop.OpARMMUL:
230 return rewriteValue_OpARMMUL(v)
231 case ssaop.OpARMMULA:
232 return rewriteValue_OpARMMULA(v)
233 case ssaop.OpARMMULD:
234 return rewriteValue_OpARMMULD(v)
235 case ssaop.OpARMMULF:
236 return rewriteValue_OpARMMULF(v)
237 case ssaop.OpARMMULS:
238 return rewriteValue_OpARMMULS(v)
239 case ssaop.OpARMMVN:
240 return rewriteValue_OpARMMVN(v)
241 case ssaop.OpARMMVNshiftLL:
242 return rewriteValue_OpARMMVNshiftLL(v)
243 case ssaop.OpARMMVNshiftLLreg:
244 return rewriteValue_OpARMMVNshiftLLreg(v)
245 case ssaop.OpARMMVNshiftRA:
246 return rewriteValue_OpARMMVNshiftRA(v)
247 case ssaop.OpARMMVNshiftRAreg:
248 return rewriteValue_OpARMMVNshiftRAreg(v)
249 case ssaop.OpARMMVNshiftRL:
250 return rewriteValue_OpARMMVNshiftRL(v)
251 case ssaop.OpARMMVNshiftRLreg:
252 return rewriteValue_OpARMMVNshiftRLreg(v)
253 case ssaop.OpARMNEGD:
254 return rewriteValue_OpARMNEGD(v)
255 case ssaop.OpARMNEGF:
256 return rewriteValue_OpARMNEGF(v)
257 case ssaop.OpARMNMULD:
258 return rewriteValue_OpARMNMULD(v)
259 case ssaop.OpARMNMULF:
260 return rewriteValue_OpARMNMULF(v)
261 case ssaop.OpARMNotEqual:
262 return rewriteValue_OpARMNotEqual(v)
263 case ssaop.OpARMOR:
264 return rewriteValue_OpARMOR(v)
265 case ssaop.OpARMORconst:
266 return rewriteValue_OpARMORconst(v)
267 case ssaop.OpARMORshiftLL:
268 return rewriteValue_OpARMORshiftLL(v)
269 case ssaop.OpARMORshiftLLreg:
270 return rewriteValue_OpARMORshiftLLreg(v)
271 case ssaop.OpARMORshiftRA:
272 return rewriteValue_OpARMORshiftRA(v)
273 case ssaop.OpARMORshiftRAreg:
274 return rewriteValue_OpARMORshiftRAreg(v)
275 case ssaop.OpARMORshiftRL:
276 return rewriteValue_OpARMORshiftRL(v)
277 case ssaop.OpARMORshiftRLreg:
278 return rewriteValue_OpARMORshiftRLreg(v)
279 case ssaop.OpARMRSB:
280 return rewriteValue_OpARMRSB(v)
281 case ssaop.OpARMRSBSshiftLL:
282 return rewriteValue_OpARMRSBSshiftLL(v)
283 case ssaop.OpARMRSBSshiftLLreg:
284 return rewriteValue_OpARMRSBSshiftLLreg(v)
285 case ssaop.OpARMRSBSshiftRA:
286 return rewriteValue_OpARMRSBSshiftRA(v)
287 case ssaop.OpARMRSBSshiftRAreg:
288 return rewriteValue_OpARMRSBSshiftRAreg(v)
289 case ssaop.OpARMRSBSshiftRL:
290 return rewriteValue_OpARMRSBSshiftRL(v)
291 case ssaop.OpARMRSBSshiftRLreg:
292 return rewriteValue_OpARMRSBSshiftRLreg(v)
293 case ssaop.OpARMRSBconst:
294 return rewriteValue_OpARMRSBconst(v)
295 case ssaop.OpARMRSBshiftLL:
296 return rewriteValue_OpARMRSBshiftLL(v)
297 case ssaop.OpARMRSBshiftLLreg:
298 return rewriteValue_OpARMRSBshiftLLreg(v)
299 case ssaop.OpARMRSBshiftRA:
300 return rewriteValue_OpARMRSBshiftRA(v)
301 case ssaop.OpARMRSBshiftRAreg:
302 return rewriteValue_OpARMRSBshiftRAreg(v)
303 case ssaop.OpARMRSBshiftRL:
304 return rewriteValue_OpARMRSBshiftRL(v)
305 case ssaop.OpARMRSBshiftRLreg:
306 return rewriteValue_OpARMRSBshiftRLreg(v)
307 case ssaop.OpARMRSCconst:
308 return rewriteValue_OpARMRSCconst(v)
309 case ssaop.OpARMRSCshiftLL:
310 return rewriteValue_OpARMRSCshiftLL(v)
311 case ssaop.OpARMRSCshiftLLreg:
312 return rewriteValue_OpARMRSCshiftLLreg(v)
313 case ssaop.OpARMRSCshiftRA:
314 return rewriteValue_OpARMRSCshiftRA(v)
315 case ssaop.OpARMRSCshiftRAreg:
316 return rewriteValue_OpARMRSCshiftRAreg(v)
317 case ssaop.OpARMRSCshiftRL:
318 return rewriteValue_OpARMRSCshiftRL(v)
319 case ssaop.OpARMRSCshiftRLreg:
320 return rewriteValue_OpARMRSCshiftRLreg(v)
321 case ssaop.OpARMSBC:
322 return rewriteValue_OpARMSBC(v)
323 case ssaop.OpARMSBCconst:
324 return rewriteValue_OpARMSBCconst(v)
325 case ssaop.OpARMSBCshiftLL:
326 return rewriteValue_OpARMSBCshiftLL(v)
327 case ssaop.OpARMSBCshiftLLreg:
328 return rewriteValue_OpARMSBCshiftLLreg(v)
329 case ssaop.OpARMSBCshiftRA:
330 return rewriteValue_OpARMSBCshiftRA(v)
331 case ssaop.OpARMSBCshiftRAreg:
332 return rewriteValue_OpARMSBCshiftRAreg(v)
333 case ssaop.OpARMSBCshiftRL:
334 return rewriteValue_OpARMSBCshiftRL(v)
335 case ssaop.OpARMSBCshiftRLreg:
336 return rewriteValue_OpARMSBCshiftRLreg(v)
337 case ssaop.OpARMSLL:
338 return rewriteValue_OpARMSLL(v)
339 case ssaop.OpARMSLLconst:
340 return rewriteValue_OpARMSLLconst(v)
341 case ssaop.OpARMSRA:
342 return rewriteValue_OpARMSRA(v)
343 case ssaop.OpARMSRAcond:
344 return rewriteValue_OpARMSRAcond(v)
345 case ssaop.OpARMSRAconst:
346 return rewriteValue_OpARMSRAconst(v)
347 case ssaop.OpARMSRL:
348 return rewriteValue_OpARMSRL(v)
349 case ssaop.OpARMSRLconst:
350 return rewriteValue_OpARMSRLconst(v)
351 case ssaop.OpARMSRR:
352 return rewriteValue_OpARMSRR(v)
353 case ssaop.OpARMSUB:
354 return rewriteValue_OpARMSUB(v)
355 case ssaop.OpARMSUBD:
356 return rewriteValue_OpARMSUBD(v)
357 case ssaop.OpARMSUBF:
358 return rewriteValue_OpARMSUBF(v)
359 case ssaop.OpARMSUBS:
360 return rewriteValue_OpARMSUBS(v)
361 case ssaop.OpARMSUBSshiftLL:
362 return rewriteValue_OpARMSUBSshiftLL(v)
363 case ssaop.OpARMSUBSshiftLLreg:
364 return rewriteValue_OpARMSUBSshiftLLreg(v)
365 case ssaop.OpARMSUBSshiftRA:
366 return rewriteValue_OpARMSUBSshiftRA(v)
367 case ssaop.OpARMSUBSshiftRAreg:
368 return rewriteValue_OpARMSUBSshiftRAreg(v)
369 case ssaop.OpARMSUBSshiftRL:
370 return rewriteValue_OpARMSUBSshiftRL(v)
371 case ssaop.OpARMSUBSshiftRLreg:
372 return rewriteValue_OpARMSUBSshiftRLreg(v)
373 case ssaop.OpARMSUBconst:
374 return rewriteValue_OpARMSUBconst(v)
375 case ssaop.OpARMSUBshiftLL:
376 return rewriteValue_OpARMSUBshiftLL(v)
377 case ssaop.OpARMSUBshiftLLreg:
378 return rewriteValue_OpARMSUBshiftLLreg(v)
379 case ssaop.OpARMSUBshiftRA:
380 return rewriteValue_OpARMSUBshiftRA(v)
381 case ssaop.OpARMSUBshiftRAreg:
382 return rewriteValue_OpARMSUBshiftRAreg(v)
383 case ssaop.OpARMSUBshiftRL:
384 return rewriteValue_OpARMSUBshiftRL(v)
385 case ssaop.OpARMSUBshiftRLreg:
386 return rewriteValue_OpARMSUBshiftRLreg(v)
387 case ssaop.OpARMTEQ:
388 return rewriteValue_OpARMTEQ(v)
389 case ssaop.OpARMTEQconst:
390 return rewriteValue_OpARMTEQconst(v)
391 case ssaop.OpARMTEQshiftLL:
392 return rewriteValue_OpARMTEQshiftLL(v)
393 case ssaop.OpARMTEQshiftLLreg:
394 return rewriteValue_OpARMTEQshiftLLreg(v)
395 case ssaop.OpARMTEQshiftRA:
396 return rewriteValue_OpARMTEQshiftRA(v)
397 case ssaop.OpARMTEQshiftRAreg:
398 return rewriteValue_OpARMTEQshiftRAreg(v)
399 case ssaop.OpARMTEQshiftRL:
400 return rewriteValue_OpARMTEQshiftRL(v)
401 case ssaop.OpARMTEQshiftRLreg:
402 return rewriteValue_OpARMTEQshiftRLreg(v)
403 case ssaop.OpARMTST:
404 return rewriteValue_OpARMTST(v)
405 case ssaop.OpARMTSTconst:
406 return rewriteValue_OpARMTSTconst(v)
407 case ssaop.OpARMTSTshiftLL:
408 return rewriteValue_OpARMTSTshiftLL(v)
409 case ssaop.OpARMTSTshiftLLreg:
410 return rewriteValue_OpARMTSTshiftLLreg(v)
411 case ssaop.OpARMTSTshiftRA:
412 return rewriteValue_OpARMTSTshiftRA(v)
413 case ssaop.OpARMTSTshiftRAreg:
414 return rewriteValue_OpARMTSTshiftRAreg(v)
415 case ssaop.OpARMTSTshiftRL:
416 return rewriteValue_OpARMTSTshiftRL(v)
417 case ssaop.OpARMTSTshiftRLreg:
418 return rewriteValue_OpARMTSTshiftRLreg(v)
419 case ssaop.OpARMXOR:
420 return rewriteValue_OpARMXOR(v)
421 case ssaop.OpARMXORconst:
422 return rewriteValue_OpARMXORconst(v)
423 case ssaop.OpARMXORshiftLL:
424 return rewriteValue_OpARMXORshiftLL(v)
425 case ssaop.OpARMXORshiftLLreg:
426 return rewriteValue_OpARMXORshiftLLreg(v)
427 case ssaop.OpARMXORshiftRA:
428 return rewriteValue_OpARMXORshiftRA(v)
429 case ssaop.OpARMXORshiftRAreg:
430 return rewriteValue_OpARMXORshiftRAreg(v)
431 case ssaop.OpARMXORshiftRL:
432 return rewriteValue_OpARMXORshiftRL(v)
433 case ssaop.OpARMXORshiftRLreg:
434 return rewriteValue_OpARMXORshiftRLreg(v)
435 case ssaop.OpARMXORshiftRR:
436 return rewriteValue_OpARMXORshiftRR(v)
437 case ssaop.OpAbs:
438 v.Op = ssaop.OpARMABSD
439 return true
440 case ssaop.OpAdd16:
441 v.Op = ssaop.OpARMADD
442 return true
443 case ssaop.OpAdd32:
444 v.Op = ssaop.OpARMADD
445 return true
446 case ssaop.OpAdd32F:
447 v.Op = ssaop.OpARMADDF
448 return true
449 case ssaop.OpAdd32carry:
450 v.Op = ssaop.OpARMADDS
451 return true
452 case ssaop.OpAdd32carrywithcarry:
453 v.Op = ssaop.OpARMADCS
454 return true
455 case ssaop.OpAdd32withcarry:
456 v.Op = ssaop.OpARMADC
457 return true
458 case ssaop.OpAdd64F:
459 v.Op = ssaop.OpARMADDD
460 return true
461 case ssaop.OpAdd8:
462 v.Op = ssaop.OpARMADD
463 return true
464 case ssaop.OpAddPtr:
465 v.Op = ssaop.OpARMADD
466 return true
467 case ssaop.OpAddr:
468 return rewriteValue_OpAddr(v)
469 case ssaop.OpAnd16:
470 v.Op = ssaop.OpARMAND
471 return true
472 case ssaop.OpAnd32:
473 v.Op = ssaop.OpARMAND
474 return true
475 case ssaop.OpAnd8:
476 v.Op = ssaop.OpARMAND
477 return true
478 case ssaop.OpAndB:
479 v.Op = ssaop.OpARMAND
480 return true
481 case ssaop.OpAvg32u:
482 return rewriteValue_OpAvg32u(v)
483 case ssaop.OpBitLen16:
484 return rewriteValue_OpBitLen16(v)
485 case ssaop.OpBitLen32:
486 return rewriteValue_OpBitLen32(v)
487 case ssaop.OpBitLen8:
488 return rewriteValue_OpBitLen8(v)
489 case ssaop.OpBswap32:
490 return rewriteValue_OpBswap32(v)
491 case ssaop.OpClosureCall:
492 v.Op = ssaop.OpARMCALLclosure
493 return true
494 case ssaop.OpCom16:
495 v.Op = ssaop.OpARMMVN
496 return true
497 case ssaop.OpCom32:
498 v.Op = ssaop.OpARMMVN
499 return true
500 case ssaop.OpCom8:
501 v.Op = ssaop.OpARMMVN
502 return true
503 case ssaop.OpConst16:
504 return rewriteValue_OpConst16(v)
505 case ssaop.OpConst32:
506 return rewriteValue_OpConst32(v)
507 case ssaop.OpConst32F:
508 return rewriteValue_OpConst32F(v)
509 case ssaop.OpConst64F:
510 return rewriteValue_OpConst64F(v)
511 case ssaop.OpConst8:
512 return rewriteValue_OpConst8(v)
513 case ssaop.OpConstBool:
514 return rewriteValue_OpConstBool(v)
515 case ssaop.OpConstNil:
516 return rewriteValue_OpConstNil(v)
517 case ssaop.OpCtz16:
518 return rewriteValue_OpCtz16(v)
519 case ssaop.OpCtz16NonZero:
520 v.Op = ssaop.OpCtz32
521 return true
522 case ssaop.OpCtz32:
523 return rewriteValue_OpCtz32(v)
524 case ssaop.OpCtz32NonZero:
525 v.Op = ssaop.OpCtz32
526 return true
527 case ssaop.OpCtz8:
528 return rewriteValue_OpCtz8(v)
529 case ssaop.OpCtz8NonZero:
530 v.Op = ssaop.OpCtz32
531 return true
532 case ssaop.OpCvt32Fto32:
533 v.Op = ssaop.OpARMMOVFW
534 return true
535 case ssaop.OpCvt32Fto32U:
536 v.Op = ssaop.OpARMMOVFWU
537 return true
538 case ssaop.OpCvt32Fto64F:
539 v.Op = ssaop.OpARMMOVFD
540 return true
541 case ssaop.OpCvt32Uto32F:
542 v.Op = ssaop.OpARMMOVWUF
543 return true
544 case ssaop.OpCvt32Uto64F:
545 v.Op = ssaop.OpARMMOVWUD
546 return true
547 case ssaop.OpCvt32to32F:
548 v.Op = ssaop.OpARMMOVWF
549 return true
550 case ssaop.OpCvt32to64F:
551 v.Op = ssaop.OpARMMOVWD
552 return true
553 case ssaop.OpCvt64Fto32:
554 v.Op = ssaop.OpARMMOVDW
555 return true
556 case ssaop.OpCvt64Fto32F:
557 v.Op = ssaop.OpARMMOVDF
558 return true
559 case ssaop.OpCvt64Fto32U:
560 v.Op = ssaop.OpARMMOVDWU
561 return true
562 case ssaop.OpCvtBoolToUint8:
563 v.Op = ssaop.OpCopy
564 return true
565 case ssaop.OpDiv16:
566 return rewriteValue_OpDiv16(v)
567 case ssaop.OpDiv16u:
568 return rewriteValue_OpDiv16u(v)
569 case ssaop.OpDiv32:
570 return rewriteValue_OpDiv32(v)
571 case ssaop.OpDiv32F:
572 v.Op = ssaop.OpARMDIVF
573 return true
574 case ssaop.OpDiv32u:
575 return rewriteValue_OpDiv32u(v)
576 case ssaop.OpDiv64F:
577 v.Op = ssaop.OpARMDIVD
578 return true
579 case ssaop.OpDiv8:
580 return rewriteValue_OpDiv8(v)
581 case ssaop.OpDiv8u:
582 return rewriteValue_OpDiv8u(v)
583 case ssaop.OpEq16:
584 return rewriteValue_OpEq16(v)
585 case ssaop.OpEq32:
586 return rewriteValue_OpEq32(v)
587 case ssaop.OpEq32F:
588 return rewriteValue_OpEq32F(v)
589 case ssaop.OpEq64F:
590 return rewriteValue_OpEq64F(v)
591 case ssaop.OpEq8:
592 return rewriteValue_OpEq8(v)
593 case ssaop.OpEqB:
594 return rewriteValue_OpEqB(v)
595 case ssaop.OpEqPtr:
596 return rewriteValue_OpEqPtr(v)
597 case ssaop.OpFMA:
598 return rewriteValue_OpFMA(v)
599 case ssaop.OpGetCallerPC:
600 v.Op = ssaop.OpARMLoweredGetCallerPC
601 return true
602 case ssaop.OpGetCallerSP:
603 v.Op = ssaop.OpARMLoweredGetCallerSP
604 return true
605 case ssaop.OpGetClosurePtr:
606 v.Op = ssaop.OpARMLoweredGetClosurePtr
607 return true
608 case ssaop.OpHmul32:
609 v.Op = ssaop.OpARMHMUL
610 return true
611 case ssaop.OpHmul32u:
612 v.Op = ssaop.OpARMHMULU
613 return true
614 case ssaop.OpInterCall:
615 v.Op = ssaop.OpARMCALLinter
616 return true
617 case ssaop.OpIsInBounds:
618 return rewriteValue_OpIsInBounds(v)
619 case ssaop.OpIsNonNil:
620 return rewriteValue_OpIsNonNil(v)
621 case ssaop.OpIsSliceInBounds:
622 return rewriteValue_OpIsSliceInBounds(v)
623 case ssaop.OpLeq16:
624 return rewriteValue_OpLeq16(v)
625 case ssaop.OpLeq16U:
626 return rewriteValue_OpLeq16U(v)
627 case ssaop.OpLeq32:
628 return rewriteValue_OpLeq32(v)
629 case ssaop.OpLeq32F:
630 return rewriteValue_OpLeq32F(v)
631 case ssaop.OpLeq32U:
632 return rewriteValue_OpLeq32U(v)
633 case ssaop.OpLeq64F:
634 return rewriteValue_OpLeq64F(v)
635 case ssaop.OpLeq8:
636 return rewriteValue_OpLeq8(v)
637 case ssaop.OpLeq8U:
638 return rewriteValue_OpLeq8U(v)
639 case ssaop.OpLess16:
640 return rewriteValue_OpLess16(v)
641 case ssaop.OpLess16U:
642 return rewriteValue_OpLess16U(v)
643 case ssaop.OpLess32:
644 return rewriteValue_OpLess32(v)
645 case ssaop.OpLess32F:
646 return rewriteValue_OpLess32F(v)
647 case ssaop.OpLess32U:
648 return rewriteValue_OpLess32U(v)
649 case ssaop.OpLess64F:
650 return rewriteValue_OpLess64F(v)
651 case ssaop.OpLess8:
652 return rewriteValue_OpLess8(v)
653 case ssaop.OpLess8U:
654 return rewriteValue_OpLess8U(v)
655 case ssaop.OpLoad:
656 return rewriteValue_OpLoad(v)
657 case ssaop.OpLocalAddr:
658 return rewriteValue_OpLocalAddr(v)
659 case ssaop.OpLsh16x16:
660 return rewriteValue_OpLsh16x16(v)
661 case ssaop.OpLsh16x32:
662 return rewriteValue_OpLsh16x32(v)
663 case ssaop.OpLsh16x64:
664 return rewriteValue_OpLsh16x64(v)
665 case ssaop.OpLsh16x8:
666 return rewriteValue_OpLsh16x8(v)
667 case ssaop.OpLsh32x16:
668 return rewriteValue_OpLsh32x16(v)
669 case ssaop.OpLsh32x32:
670 return rewriteValue_OpLsh32x32(v)
671 case ssaop.OpLsh32x64:
672 return rewriteValue_OpLsh32x64(v)
673 case ssaop.OpLsh32x8:
674 return rewriteValue_OpLsh32x8(v)
675 case ssaop.OpLsh8x16:
676 return rewriteValue_OpLsh8x16(v)
677 case ssaop.OpLsh8x32:
678 return rewriteValue_OpLsh8x32(v)
679 case ssaop.OpLsh8x64:
680 return rewriteValue_OpLsh8x64(v)
681 case ssaop.OpLsh8x8:
682 return rewriteValue_OpLsh8x8(v)
683 case ssaop.OpMod16:
684 return rewriteValue_OpMod16(v)
685 case ssaop.OpMod16u:
686 return rewriteValue_OpMod16u(v)
687 case ssaop.OpMod32:
688 return rewriteValue_OpMod32(v)
689 case ssaop.OpMod32u:
690 return rewriteValue_OpMod32u(v)
691 case ssaop.OpMod8:
692 return rewriteValue_OpMod8(v)
693 case ssaop.OpMod8u:
694 return rewriteValue_OpMod8u(v)
695 case ssaop.OpMove:
696 return rewriteValue_OpMove(v)
697 case ssaop.OpMul16:
698 v.Op = ssaop.OpARMMUL
699 return true
700 case ssaop.OpMul32:
701 v.Op = ssaop.OpARMMUL
702 return true
703 case ssaop.OpMul32F:
704 v.Op = ssaop.OpARMMULF
705 return true
706 case ssaop.OpMul32uhilo:
707 v.Op = ssaop.OpARMMULLU
708 return true
709 case ssaop.OpMul64F:
710 v.Op = ssaop.OpARMMULD
711 return true
712 case ssaop.OpMul8:
713 v.Op = ssaop.OpARMMUL
714 return true
715 case ssaop.OpNeg16:
716 return rewriteValue_OpNeg16(v)
717 case ssaop.OpNeg32:
718 return rewriteValue_OpNeg32(v)
719 case ssaop.OpNeg32F:
720 v.Op = ssaop.OpARMNEGF
721 return true
722 case ssaop.OpNeg64F:
723 v.Op = ssaop.OpARMNEGD
724 return true
725 case ssaop.OpNeg8:
726 return rewriteValue_OpNeg8(v)
727 case ssaop.OpNeq16:
728 return rewriteValue_OpNeq16(v)
729 case ssaop.OpNeq32:
730 return rewriteValue_OpNeq32(v)
731 case ssaop.OpNeq32F:
732 return rewriteValue_OpNeq32F(v)
733 case ssaop.OpNeq64F:
734 return rewriteValue_OpNeq64F(v)
735 case ssaop.OpNeq8:
736 return rewriteValue_OpNeq8(v)
737 case ssaop.OpNeqB:
738 v.Op = ssaop.OpARMXOR
739 return true
740 case ssaop.OpNeqPtr:
741 return rewriteValue_OpNeqPtr(v)
742 case ssaop.OpNilCheck:
743 v.Op = ssaop.OpARMLoweredNilCheck
744 return true
745 case ssaop.OpNot:
746 return rewriteValue_OpNot(v)
747 case ssaop.OpOffPtr:
748 return rewriteValue_OpOffPtr(v)
749 case ssaop.OpOr16:
750 v.Op = ssaop.OpARMOR
751 return true
752 case ssaop.OpOr32:
753 v.Op = ssaop.OpARMOR
754 return true
755 case ssaop.OpOr8:
756 v.Op = ssaop.OpARMOR
757 return true
758 case ssaop.OpOrB:
759 v.Op = ssaop.OpARMOR
760 return true
761 case ssaop.OpPanicBounds:
762 v.Op = ssaop.OpARMLoweredPanicBoundsRR
763 return true
764 case ssaop.OpPanicExtend:
765 v.Op = ssaop.OpARMLoweredPanicExtendRR
766 return true
767 case ssaop.OpRotateLeft16:
768 return rewriteValue_OpRotateLeft16(v)
769 case ssaop.OpRotateLeft32:
770 return rewriteValue_OpRotateLeft32(v)
771 case ssaop.OpRotateLeft8:
772 return rewriteValue_OpRotateLeft8(v)
773 case ssaop.OpRound32F:
774 v.Op = ssaop.OpCopy
775 return true
776 case ssaop.OpRound64F:
777 v.Op = ssaop.OpCopy
778 return true
779 case ssaop.OpRsh16Ux16:
780 return rewriteValue_OpRsh16Ux16(v)
781 case ssaop.OpRsh16Ux32:
782 return rewriteValue_OpRsh16Ux32(v)
783 case ssaop.OpRsh16Ux64:
784 return rewriteValue_OpRsh16Ux64(v)
785 case ssaop.OpRsh16Ux8:
786 return rewriteValue_OpRsh16Ux8(v)
787 case ssaop.OpRsh16x16:
788 return rewriteValue_OpRsh16x16(v)
789 case ssaop.OpRsh16x32:
790 return rewriteValue_OpRsh16x32(v)
791 case ssaop.OpRsh16x64:
792 return rewriteValue_OpRsh16x64(v)
793 case ssaop.OpRsh16x8:
794 return rewriteValue_OpRsh16x8(v)
795 case ssaop.OpRsh32Ux16:
796 return rewriteValue_OpRsh32Ux16(v)
797 case ssaop.OpRsh32Ux32:
798 return rewriteValue_OpRsh32Ux32(v)
799 case ssaop.OpRsh32Ux64:
800 return rewriteValue_OpRsh32Ux64(v)
801 case ssaop.OpRsh32Ux8:
802 return rewriteValue_OpRsh32Ux8(v)
803 case ssaop.OpRsh32x16:
804 return rewriteValue_OpRsh32x16(v)
805 case ssaop.OpRsh32x32:
806 return rewriteValue_OpRsh32x32(v)
807 case ssaop.OpRsh32x64:
808 return rewriteValue_OpRsh32x64(v)
809 case ssaop.OpRsh32x8:
810 return rewriteValue_OpRsh32x8(v)
811 case ssaop.OpRsh8Ux16:
812 return rewriteValue_OpRsh8Ux16(v)
813 case ssaop.OpRsh8Ux32:
814 return rewriteValue_OpRsh8Ux32(v)
815 case ssaop.OpRsh8Ux64:
816 return rewriteValue_OpRsh8Ux64(v)
817 case ssaop.OpRsh8Ux8:
818 return rewriteValue_OpRsh8Ux8(v)
819 case ssaop.OpRsh8x16:
820 return rewriteValue_OpRsh8x16(v)
821 case ssaop.OpRsh8x32:
822 return rewriteValue_OpRsh8x32(v)
823 case ssaop.OpRsh8x64:
824 return rewriteValue_OpRsh8x64(v)
825 case ssaop.OpRsh8x8:
826 return rewriteValue_OpRsh8x8(v)
827 case ssaop.OpSelect0:
828 return rewriteValue_OpSelect0(v)
829 case ssaop.OpSelect1:
830 return rewriteValue_OpSelect1(v)
831 case ssaop.OpSignExt16to32:
832 v.Op = ssaop.OpARMMOVHreg
833 return true
834 case ssaop.OpSignExt8to16:
835 v.Op = ssaop.OpARMMOVBreg
836 return true
837 case ssaop.OpSignExt8to32:
838 v.Op = ssaop.OpARMMOVBreg
839 return true
840 case ssaop.OpSignmask:
841 return rewriteValue_OpSignmask(v)
842 case ssaop.OpSlicemask:
843 return rewriteValue_OpSlicemask(v)
844 case ssaop.OpSqrt:
845 v.Op = ssaop.OpARMSQRTD
846 return true
847 case ssaop.OpSqrt32:
848 v.Op = ssaop.OpARMSQRTF
849 return true
850 case ssaop.OpStaticCall:
851 v.Op = ssaop.OpARMCALLstatic
852 return true
853 case ssaop.OpStore:
854 return rewriteValue_OpStore(v)
855 case ssaop.OpSub16:
856 v.Op = ssaop.OpARMSUB
857 return true
858 case ssaop.OpSub32:
859 v.Op = ssaop.OpARMSUB
860 return true
861 case ssaop.OpSub32F:
862 v.Op = ssaop.OpARMSUBF
863 return true
864 case ssaop.OpSub32carry:
865 v.Op = ssaop.OpARMSUBS
866 return true
867 case ssaop.OpSub32withcarry:
868 v.Op = ssaop.OpARMSBC
869 return true
870 case ssaop.OpSub64F:
871 v.Op = ssaop.OpARMSUBD
872 return true
873 case ssaop.OpSub8:
874 v.Op = ssaop.OpARMSUB
875 return true
876 case ssaop.OpSubPtr:
877 v.Op = ssaop.OpARMSUB
878 return true
879 case ssaop.OpTailCall:
880 v.Op = ssaop.OpARMCALLtail
881 return true
882 case ssaop.OpTailCallInter:
883 v.Op = ssaop.OpARMCALLtailinter
884 return true
885 case ssaop.OpTrunc16to8:
886 v.Op = ssaop.OpCopy
887 return true
888 case ssaop.OpTrunc32to16:
889 v.Op = ssaop.OpCopy
890 return true
891 case ssaop.OpTrunc32to8:
892 v.Op = ssaop.OpCopy
893 return true
894 case ssaop.OpWB:
895 v.Op = ssaop.OpARMLoweredWB
896 return true
897 case ssaop.OpXor16:
898 v.Op = ssaop.OpARMXOR
899 return true
900 case ssaop.OpXor32:
901 v.Op = ssaop.OpARMXOR
902 return true
903 case ssaop.OpXor8:
904 v.Op = ssaop.OpARMXOR
905 return true
906 case ssaop.OpZero:
907 return rewriteValue_OpZero(v)
908 case ssaop.OpZeroExt16to32:
909 v.Op = ssaop.OpARMMOVHUreg
910 return true
911 case ssaop.OpZeroExt8to16:
912 v.Op = ssaop.OpARMMOVBUreg
913 return true
914 case ssaop.OpZeroExt8to32:
915 v.Op = ssaop.OpARMMOVBUreg
916 return true
917 case ssaop.OpZeromask:
918 return rewriteValue_OpZeromask(v)
919 }
920 return false
921 }
922 func rewriteValue_OpARMADC(v *ssa.Value) bool {
923 v_2 := v.Args[2]
924 v_1 := v.Args[1]
925 v_0 := v.Args[0]
926
927
928 for {
929 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
930 if v_0.Op != ssaop.OpARMMOVWconst {
931 continue
932 }
933 c := ssa.AuxIntToInt32(v_0.AuxInt)
934 x := v_1
935 flags := v_2
936 v.Reset(ssaop.OpARMADCconst)
937 v.AuxInt = ssa.Int32ToAuxInt(c)
938 v.AddArg2(x, flags)
939 return true
940 }
941 break
942 }
943
944
945 for {
946 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
947 x := v_0
948 if v_1.Op != ssaop.OpARMSLLconst {
949 continue
950 }
951 c := ssa.AuxIntToInt32(v_1.AuxInt)
952 y := v_1.Args[0]
953 flags := v_2
954 v.Reset(ssaop.OpARMADCshiftLL)
955 v.AuxInt = ssa.Int32ToAuxInt(c)
956 v.AddArg3(x, y, flags)
957 return true
958 }
959 break
960 }
961
962
963 for {
964 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
965 x := v_0
966 if v_1.Op != ssaop.OpARMSRLconst {
967 continue
968 }
969 c := ssa.AuxIntToInt32(v_1.AuxInt)
970 y := v_1.Args[0]
971 flags := v_2
972 v.Reset(ssaop.OpARMADCshiftRL)
973 v.AuxInt = ssa.Int32ToAuxInt(c)
974 v.AddArg3(x, y, flags)
975 return true
976 }
977 break
978 }
979
980
981 for {
982 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
983 x := v_0
984 if v_1.Op != ssaop.OpARMSRAconst {
985 continue
986 }
987 c := ssa.AuxIntToInt32(v_1.AuxInt)
988 y := v_1.Args[0]
989 flags := v_2
990 v.Reset(ssaop.OpARMADCshiftRA)
991 v.AuxInt = ssa.Int32ToAuxInt(c)
992 v.AddArg3(x, y, flags)
993 return true
994 }
995 break
996 }
997
998
999 for {
1000 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1001 x := v_0
1002 if v_1.Op != ssaop.OpARMSLL {
1003 continue
1004 }
1005 z := v_1.Args[1]
1006 y := v_1.Args[0]
1007 flags := v_2
1008 v.Reset(ssaop.OpARMADCshiftLLreg)
1009 v.AddArg4(x, y, z, flags)
1010 return true
1011 }
1012 break
1013 }
1014
1015
1016 for {
1017 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1018 x := v_0
1019 if v_1.Op != ssaop.OpARMSRL {
1020 continue
1021 }
1022 z := v_1.Args[1]
1023 y := v_1.Args[0]
1024 flags := v_2
1025 v.Reset(ssaop.OpARMADCshiftRLreg)
1026 v.AddArg4(x, y, z, flags)
1027 return true
1028 }
1029 break
1030 }
1031
1032
1033 for {
1034 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1035 x := v_0
1036 if v_1.Op != ssaop.OpARMSRA {
1037 continue
1038 }
1039 z := v_1.Args[1]
1040 y := v_1.Args[0]
1041 flags := v_2
1042 v.Reset(ssaop.OpARMADCshiftRAreg)
1043 v.AddArg4(x, y, z, flags)
1044 return true
1045 }
1046 break
1047 }
1048 return false
1049 }
1050 func rewriteValue_OpARMADCconst(v *ssa.Value) bool {
1051 v_1 := v.Args[1]
1052 v_0 := v.Args[0]
1053
1054
1055 for {
1056 c := ssa.AuxIntToInt32(v.AuxInt)
1057 if v_0.Op != ssaop.OpARMADDconst {
1058 break
1059 }
1060 d := ssa.AuxIntToInt32(v_0.AuxInt)
1061 x := v_0.Args[0]
1062 flags := v_1
1063 v.Reset(ssaop.OpARMADCconst)
1064 v.AuxInt = ssa.Int32ToAuxInt(c + d)
1065 v.AddArg2(x, flags)
1066 return true
1067 }
1068
1069
1070 for {
1071 c := ssa.AuxIntToInt32(v.AuxInt)
1072 if v_0.Op != ssaop.OpARMSUBconst {
1073 break
1074 }
1075 d := ssa.AuxIntToInt32(v_0.AuxInt)
1076 x := v_0.Args[0]
1077 flags := v_1
1078 v.Reset(ssaop.OpARMADCconst)
1079 v.AuxInt = ssa.Int32ToAuxInt(c - d)
1080 v.AddArg2(x, flags)
1081 return true
1082 }
1083 return false
1084 }
1085 func rewriteValue_OpARMADCshiftLL(v *ssa.Value) bool {
1086 v_2 := v.Args[2]
1087 v_1 := v.Args[1]
1088 v_0 := v.Args[0]
1089 b := v.Block
1090
1091
1092 for {
1093 d := ssa.AuxIntToInt32(v.AuxInt)
1094 if v_0.Op != ssaop.OpARMMOVWconst {
1095 break
1096 }
1097 c := ssa.AuxIntToInt32(v_0.AuxInt)
1098 x := v_1
1099 flags := v_2
1100 v.Reset(ssaop.OpARMADCconst)
1101 v.AuxInt = ssa.Int32ToAuxInt(c)
1102 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
1103 v0.AuxInt = ssa.Int32ToAuxInt(d)
1104 v0.AddArg(x)
1105 v.AddArg2(v0, flags)
1106 return true
1107 }
1108
1109
1110 for {
1111 d := ssa.AuxIntToInt32(v.AuxInt)
1112 x := v_0
1113 if v_1.Op != ssaop.OpARMMOVWconst {
1114 break
1115 }
1116 c := ssa.AuxIntToInt32(v_1.AuxInt)
1117 flags := v_2
1118 v.Reset(ssaop.OpARMADCconst)
1119 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
1120 v.AddArg2(x, flags)
1121 return true
1122 }
1123 return false
1124 }
1125 func rewriteValue_OpARMADCshiftLLreg(v *ssa.Value) bool {
1126 v_3 := v.Args[3]
1127 v_2 := v.Args[2]
1128 v_1 := v.Args[1]
1129 v_0 := v.Args[0]
1130 b := v.Block
1131
1132
1133 for {
1134 if v_0.Op != ssaop.OpARMMOVWconst {
1135 break
1136 }
1137 c := ssa.AuxIntToInt32(v_0.AuxInt)
1138 x := v_1
1139 y := v_2
1140 flags := v_3
1141 v.Reset(ssaop.OpARMADCconst)
1142 v.AuxInt = ssa.Int32ToAuxInt(c)
1143 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
1144 v0.AddArg2(x, y)
1145 v.AddArg2(v0, flags)
1146 return true
1147 }
1148
1149
1150
1151 for {
1152 x := v_0
1153 y := v_1
1154 if v_2.Op != ssaop.OpARMMOVWconst {
1155 break
1156 }
1157 c := ssa.AuxIntToInt32(v_2.AuxInt)
1158 flags := v_3
1159 if !(0 <= c && c < 32) {
1160 break
1161 }
1162 v.Reset(ssaop.OpARMADCshiftLL)
1163 v.AuxInt = ssa.Int32ToAuxInt(c)
1164 v.AddArg3(x, y, flags)
1165 return true
1166 }
1167 return false
1168 }
1169 func rewriteValue_OpARMADCshiftRA(v *ssa.Value) bool {
1170 v_2 := v.Args[2]
1171 v_1 := v.Args[1]
1172 v_0 := v.Args[0]
1173 b := v.Block
1174
1175
1176 for {
1177 d := ssa.AuxIntToInt32(v.AuxInt)
1178 if v_0.Op != ssaop.OpARMMOVWconst {
1179 break
1180 }
1181 c := ssa.AuxIntToInt32(v_0.AuxInt)
1182 x := v_1
1183 flags := v_2
1184 v.Reset(ssaop.OpARMADCconst)
1185 v.AuxInt = ssa.Int32ToAuxInt(c)
1186 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
1187 v0.AuxInt = ssa.Int32ToAuxInt(d)
1188 v0.AddArg(x)
1189 v.AddArg2(v0, flags)
1190 return true
1191 }
1192
1193
1194 for {
1195 d := ssa.AuxIntToInt32(v.AuxInt)
1196 x := v_0
1197 if v_1.Op != ssaop.OpARMMOVWconst {
1198 break
1199 }
1200 c := ssa.AuxIntToInt32(v_1.AuxInt)
1201 flags := v_2
1202 v.Reset(ssaop.OpARMADCconst)
1203 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
1204 v.AddArg2(x, flags)
1205 return true
1206 }
1207 return false
1208 }
1209 func rewriteValue_OpARMADCshiftRAreg(v *ssa.Value) bool {
1210 v_3 := v.Args[3]
1211 v_2 := v.Args[2]
1212 v_1 := v.Args[1]
1213 v_0 := v.Args[0]
1214 b := v.Block
1215
1216
1217 for {
1218 if v_0.Op != ssaop.OpARMMOVWconst {
1219 break
1220 }
1221 c := ssa.AuxIntToInt32(v_0.AuxInt)
1222 x := v_1
1223 y := v_2
1224 flags := v_3
1225 v.Reset(ssaop.OpARMADCconst)
1226 v.AuxInt = ssa.Int32ToAuxInt(c)
1227 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
1228 v0.AddArg2(x, y)
1229 v.AddArg2(v0, flags)
1230 return true
1231 }
1232
1233
1234
1235 for {
1236 x := v_0
1237 y := v_1
1238 if v_2.Op != ssaop.OpARMMOVWconst {
1239 break
1240 }
1241 c := ssa.AuxIntToInt32(v_2.AuxInt)
1242 flags := v_3
1243 if !(0 <= c && c < 32) {
1244 break
1245 }
1246 v.Reset(ssaop.OpARMADCshiftRA)
1247 v.AuxInt = ssa.Int32ToAuxInt(c)
1248 v.AddArg3(x, y, flags)
1249 return true
1250 }
1251 return false
1252 }
1253 func rewriteValue_OpARMADCshiftRL(v *ssa.Value) bool {
1254 v_2 := v.Args[2]
1255 v_1 := v.Args[1]
1256 v_0 := v.Args[0]
1257 b := v.Block
1258
1259
1260 for {
1261 d := ssa.AuxIntToInt32(v.AuxInt)
1262 if v_0.Op != ssaop.OpARMMOVWconst {
1263 break
1264 }
1265 c := ssa.AuxIntToInt32(v_0.AuxInt)
1266 x := v_1
1267 flags := v_2
1268 v.Reset(ssaop.OpARMADCconst)
1269 v.AuxInt = ssa.Int32ToAuxInt(c)
1270 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
1271 v0.AuxInt = ssa.Int32ToAuxInt(d)
1272 v0.AddArg(x)
1273 v.AddArg2(v0, flags)
1274 return true
1275 }
1276
1277
1278 for {
1279 d := ssa.AuxIntToInt32(v.AuxInt)
1280 x := v_0
1281 if v_1.Op != ssaop.OpARMMOVWconst {
1282 break
1283 }
1284 c := ssa.AuxIntToInt32(v_1.AuxInt)
1285 flags := v_2
1286 v.Reset(ssaop.OpARMADCconst)
1287 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1288 v.AddArg2(x, flags)
1289 return true
1290 }
1291 return false
1292 }
1293 func rewriteValue_OpARMADCshiftRLreg(v *ssa.Value) bool {
1294 v_3 := v.Args[3]
1295 v_2 := v.Args[2]
1296 v_1 := v.Args[1]
1297 v_0 := v.Args[0]
1298 b := v.Block
1299
1300
1301 for {
1302 if v_0.Op != ssaop.OpARMMOVWconst {
1303 break
1304 }
1305 c := ssa.AuxIntToInt32(v_0.AuxInt)
1306 x := v_1
1307 y := v_2
1308 flags := v_3
1309 v.Reset(ssaop.OpARMADCconst)
1310 v.AuxInt = ssa.Int32ToAuxInt(c)
1311 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
1312 v0.AddArg2(x, y)
1313 v.AddArg2(v0, flags)
1314 return true
1315 }
1316
1317
1318
1319 for {
1320 x := v_0
1321 y := v_1
1322 if v_2.Op != ssaop.OpARMMOVWconst {
1323 break
1324 }
1325 c := ssa.AuxIntToInt32(v_2.AuxInt)
1326 flags := v_3
1327 if !(0 <= c && c < 32) {
1328 break
1329 }
1330 v.Reset(ssaop.OpARMADCshiftRL)
1331 v.AuxInt = ssa.Int32ToAuxInt(c)
1332 v.AddArg3(x, y, flags)
1333 return true
1334 }
1335 return false
1336 }
1337 func rewriteValue_OpARMADD(v *ssa.Value) bool {
1338 v_1 := v.Args[1]
1339 v_0 := v.Args[0]
1340 b := v.Block
1341
1342
1343
1344 for {
1345 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1346 x := v_0
1347 if v_1.Op != ssaop.OpARMMOVWconst {
1348 continue
1349 }
1350 t := v_1.Type
1351 c := ssa.AuxIntToInt32(v_1.AuxInt)
1352 if !(!t.IsPtr()) {
1353 continue
1354 }
1355 v.Reset(ssaop.OpARMADDconst)
1356 v.AuxInt = ssa.Int32ToAuxInt(c)
1357 v.AddArg(x)
1358 return true
1359 }
1360 break
1361 }
1362
1363
1364 for {
1365 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1366 x := v_0
1367 if v_1.Op != ssaop.OpARMSLLconst {
1368 continue
1369 }
1370 c := ssa.AuxIntToInt32(v_1.AuxInt)
1371 y := v_1.Args[0]
1372 v.Reset(ssaop.OpARMADDshiftLL)
1373 v.AuxInt = ssa.Int32ToAuxInt(c)
1374 v.AddArg2(x, y)
1375 return true
1376 }
1377 break
1378 }
1379
1380
1381 for {
1382 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1383 x := v_0
1384 if v_1.Op != ssaop.OpARMSRLconst {
1385 continue
1386 }
1387 c := ssa.AuxIntToInt32(v_1.AuxInt)
1388 y := v_1.Args[0]
1389 v.Reset(ssaop.OpARMADDshiftRL)
1390 v.AuxInt = ssa.Int32ToAuxInt(c)
1391 v.AddArg2(x, y)
1392 return true
1393 }
1394 break
1395 }
1396
1397
1398 for {
1399 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1400 x := v_0
1401 if v_1.Op != ssaop.OpARMSRAconst {
1402 continue
1403 }
1404 c := ssa.AuxIntToInt32(v_1.AuxInt)
1405 y := v_1.Args[0]
1406 v.Reset(ssaop.OpARMADDshiftRA)
1407 v.AuxInt = ssa.Int32ToAuxInt(c)
1408 v.AddArg2(x, y)
1409 return true
1410 }
1411 break
1412 }
1413
1414
1415 for {
1416 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1417 x := v_0
1418 if v_1.Op != ssaop.OpARMSLL {
1419 continue
1420 }
1421 z := v_1.Args[1]
1422 y := v_1.Args[0]
1423 v.Reset(ssaop.OpARMADDshiftLLreg)
1424 v.AddArg3(x, y, z)
1425 return true
1426 }
1427 break
1428 }
1429
1430
1431 for {
1432 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1433 x := v_0
1434 if v_1.Op != ssaop.OpARMSRL {
1435 continue
1436 }
1437 z := v_1.Args[1]
1438 y := v_1.Args[0]
1439 v.Reset(ssaop.OpARMADDshiftRLreg)
1440 v.AddArg3(x, y, z)
1441 return true
1442 }
1443 break
1444 }
1445
1446
1447 for {
1448 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1449 x := v_0
1450 if v_1.Op != ssaop.OpARMSRA {
1451 continue
1452 }
1453 z := v_1.Args[1]
1454 y := v_1.Args[0]
1455 v.Reset(ssaop.OpARMADDshiftRAreg)
1456 v.AddArg3(x, y, z)
1457 return true
1458 }
1459 break
1460 }
1461
1462
1463 for {
1464 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1465 x := v_0
1466 if v_1.Op != ssaop.OpARMRSBconst || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
1467 continue
1468 }
1469 y := v_1.Args[0]
1470 v.Reset(ssaop.OpARMSUB)
1471 v.AddArg2(x, y)
1472 return true
1473 }
1474 break
1475 }
1476
1477
1478 for {
1479 t := v.Type
1480 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1481 if v_0.Op != ssaop.OpARMRSBconst {
1482 continue
1483 }
1484 c := ssa.AuxIntToInt32(v_0.AuxInt)
1485 x := v_0.Args[0]
1486 if v_1.Op != ssaop.OpARMRSBconst {
1487 continue
1488 }
1489 d := ssa.AuxIntToInt32(v_1.AuxInt)
1490 y := v_1.Args[0]
1491 v.Reset(ssaop.OpARMRSBconst)
1492 v.AuxInt = ssa.Int32ToAuxInt(c + d)
1493 v0 := b.NewValue0(v.Pos, ssaop.OpARMADD, t)
1494 v0.AddArg2(x, y)
1495 v.AddArg(v0)
1496 return true
1497 }
1498 break
1499 }
1500
1501
1502 for {
1503 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1504 if v_0.Op != ssaop.OpARMMUL {
1505 continue
1506 }
1507 y := v_0.Args[1]
1508 x := v_0.Args[0]
1509 a := v_1
1510 v.Reset(ssaop.OpARMMULA)
1511 v.AddArg3(x, y, a)
1512 return true
1513 }
1514 break
1515 }
1516 return false
1517 }
1518 func rewriteValue_OpARMADDD(v *ssa.Value) bool {
1519 v_1 := v.Args[1]
1520 v_0 := v.Args[0]
1521
1522
1523
1524 for {
1525 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1526 a := v_0
1527 if v_1.Op != ssaop.OpARMMULD {
1528 continue
1529 }
1530 y := v_1.Args[1]
1531 x := v_1.Args[0]
1532 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1533 continue
1534 }
1535 v.Reset(ssaop.OpARMMULAD)
1536 v.AddArg3(a, x, y)
1537 return true
1538 }
1539 break
1540 }
1541
1542
1543
1544 for {
1545 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1546 a := v_0
1547 if v_1.Op != ssaop.OpARMNMULD {
1548 continue
1549 }
1550 y := v_1.Args[1]
1551 x := v_1.Args[0]
1552 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1553 continue
1554 }
1555 v.Reset(ssaop.OpARMMULSD)
1556 v.AddArg3(a, x, y)
1557 return true
1558 }
1559 break
1560 }
1561 return false
1562 }
1563 func rewriteValue_OpARMADDF(v *ssa.Value) bool {
1564 v_1 := v.Args[1]
1565 v_0 := v.Args[0]
1566
1567
1568
1569 for {
1570 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1571 a := v_0
1572 if v_1.Op != ssaop.OpARMMULF {
1573 continue
1574 }
1575 y := v_1.Args[1]
1576 x := v_1.Args[0]
1577 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1578 continue
1579 }
1580 v.Reset(ssaop.OpARMMULAF)
1581 v.AddArg3(a, x, y)
1582 return true
1583 }
1584 break
1585 }
1586
1587
1588
1589 for {
1590 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1591 a := v_0
1592 if v_1.Op != ssaop.OpARMNMULF {
1593 continue
1594 }
1595 y := v_1.Args[1]
1596 x := v_1.Args[0]
1597 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1598 continue
1599 }
1600 v.Reset(ssaop.OpARMMULSF)
1601 v.AddArg3(a, x, y)
1602 return true
1603 }
1604 break
1605 }
1606 return false
1607 }
1608 func rewriteValue_OpARMADDS(v *ssa.Value) bool {
1609 v_1 := v.Args[1]
1610 v_0 := v.Args[0]
1611
1612
1613 for {
1614 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1615 x := v_0
1616 if v_1.Op != ssaop.OpARMMOVWconst {
1617 continue
1618 }
1619 c := ssa.AuxIntToInt32(v_1.AuxInt)
1620 v.Reset(ssaop.OpARMADDSconst)
1621 v.AuxInt = ssa.Int32ToAuxInt(c)
1622 v.AddArg(x)
1623 return true
1624 }
1625 break
1626 }
1627
1628
1629 for {
1630 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1631 x := v_0
1632 if v_1.Op != ssaop.OpARMSLLconst {
1633 continue
1634 }
1635 c := ssa.AuxIntToInt32(v_1.AuxInt)
1636 y := v_1.Args[0]
1637 v.Reset(ssaop.OpARMADDSshiftLL)
1638 v.AuxInt = ssa.Int32ToAuxInt(c)
1639 v.AddArg2(x, y)
1640 return true
1641 }
1642 break
1643 }
1644
1645
1646 for {
1647 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1648 x := v_0
1649 if v_1.Op != ssaop.OpARMSRLconst {
1650 continue
1651 }
1652 c := ssa.AuxIntToInt32(v_1.AuxInt)
1653 y := v_1.Args[0]
1654 v.Reset(ssaop.OpARMADDSshiftRL)
1655 v.AuxInt = ssa.Int32ToAuxInt(c)
1656 v.AddArg2(x, y)
1657 return true
1658 }
1659 break
1660 }
1661
1662
1663 for {
1664 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1665 x := v_0
1666 if v_1.Op != ssaop.OpARMSRAconst {
1667 continue
1668 }
1669 c := ssa.AuxIntToInt32(v_1.AuxInt)
1670 y := v_1.Args[0]
1671 v.Reset(ssaop.OpARMADDSshiftRA)
1672 v.AuxInt = ssa.Int32ToAuxInt(c)
1673 v.AddArg2(x, y)
1674 return true
1675 }
1676 break
1677 }
1678
1679
1680 for {
1681 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1682 x := v_0
1683 if v_1.Op != ssaop.OpARMSLL {
1684 continue
1685 }
1686 z := v_1.Args[1]
1687 y := v_1.Args[0]
1688 v.Reset(ssaop.OpARMADDSshiftLLreg)
1689 v.AddArg3(x, y, z)
1690 return true
1691 }
1692 break
1693 }
1694
1695
1696 for {
1697 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1698 x := v_0
1699 if v_1.Op != ssaop.OpARMSRL {
1700 continue
1701 }
1702 z := v_1.Args[1]
1703 y := v_1.Args[0]
1704 v.Reset(ssaop.OpARMADDSshiftRLreg)
1705 v.AddArg3(x, y, z)
1706 return true
1707 }
1708 break
1709 }
1710
1711
1712 for {
1713 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1714 x := v_0
1715 if v_1.Op != ssaop.OpARMSRA {
1716 continue
1717 }
1718 z := v_1.Args[1]
1719 y := v_1.Args[0]
1720 v.Reset(ssaop.OpARMADDSshiftRAreg)
1721 v.AddArg3(x, y, z)
1722 return true
1723 }
1724 break
1725 }
1726 return false
1727 }
1728 func rewriteValue_OpARMADDSshiftLL(v *ssa.Value) bool {
1729 v_1 := v.Args[1]
1730 v_0 := v.Args[0]
1731 b := v.Block
1732
1733
1734 for {
1735 d := ssa.AuxIntToInt32(v.AuxInt)
1736 if v_0.Op != ssaop.OpARMMOVWconst {
1737 break
1738 }
1739 c := ssa.AuxIntToInt32(v_0.AuxInt)
1740 x := v_1
1741 v.Reset(ssaop.OpARMADDSconst)
1742 v.AuxInt = ssa.Int32ToAuxInt(c)
1743 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
1744 v0.AuxInt = ssa.Int32ToAuxInt(d)
1745 v0.AddArg(x)
1746 v.AddArg(v0)
1747 return true
1748 }
1749
1750
1751 for {
1752 d := ssa.AuxIntToInt32(v.AuxInt)
1753 x := v_0
1754 if v_1.Op != ssaop.OpARMMOVWconst {
1755 break
1756 }
1757 c := ssa.AuxIntToInt32(v_1.AuxInt)
1758 v.Reset(ssaop.OpARMADDSconst)
1759 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
1760 v.AddArg(x)
1761 return true
1762 }
1763 return false
1764 }
1765 func rewriteValue_OpARMADDSshiftLLreg(v *ssa.Value) bool {
1766 v_2 := v.Args[2]
1767 v_1 := v.Args[1]
1768 v_0 := v.Args[0]
1769 b := v.Block
1770
1771
1772 for {
1773 if v_0.Op != ssaop.OpARMMOVWconst {
1774 break
1775 }
1776 c := ssa.AuxIntToInt32(v_0.AuxInt)
1777 x := v_1
1778 y := v_2
1779 v.Reset(ssaop.OpARMADDSconst)
1780 v.AuxInt = ssa.Int32ToAuxInt(c)
1781 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
1782 v0.AddArg2(x, y)
1783 v.AddArg(v0)
1784 return true
1785 }
1786
1787
1788
1789 for {
1790 x := v_0
1791 y := v_1
1792 if v_2.Op != ssaop.OpARMMOVWconst {
1793 break
1794 }
1795 c := ssa.AuxIntToInt32(v_2.AuxInt)
1796 if !(0 <= c && c < 32) {
1797 break
1798 }
1799 v.Reset(ssaop.OpARMADDSshiftLL)
1800 v.AuxInt = ssa.Int32ToAuxInt(c)
1801 v.AddArg2(x, y)
1802 return true
1803 }
1804 return false
1805 }
1806 func rewriteValue_OpARMADDSshiftRA(v *ssa.Value) bool {
1807 v_1 := v.Args[1]
1808 v_0 := v.Args[0]
1809 b := v.Block
1810
1811
1812 for {
1813 d := ssa.AuxIntToInt32(v.AuxInt)
1814 if v_0.Op != ssaop.OpARMMOVWconst {
1815 break
1816 }
1817 c := ssa.AuxIntToInt32(v_0.AuxInt)
1818 x := v_1
1819 v.Reset(ssaop.OpARMADDSconst)
1820 v.AuxInt = ssa.Int32ToAuxInt(c)
1821 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
1822 v0.AuxInt = ssa.Int32ToAuxInt(d)
1823 v0.AddArg(x)
1824 v.AddArg(v0)
1825 return true
1826 }
1827
1828
1829 for {
1830 d := ssa.AuxIntToInt32(v.AuxInt)
1831 x := v_0
1832 if v_1.Op != ssaop.OpARMMOVWconst {
1833 break
1834 }
1835 c := ssa.AuxIntToInt32(v_1.AuxInt)
1836 v.Reset(ssaop.OpARMADDSconst)
1837 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
1838 v.AddArg(x)
1839 return true
1840 }
1841 return false
1842 }
1843 func rewriteValue_OpARMADDSshiftRAreg(v *ssa.Value) bool {
1844 v_2 := v.Args[2]
1845 v_1 := v.Args[1]
1846 v_0 := v.Args[0]
1847 b := v.Block
1848
1849
1850 for {
1851 if v_0.Op != ssaop.OpARMMOVWconst {
1852 break
1853 }
1854 c := ssa.AuxIntToInt32(v_0.AuxInt)
1855 x := v_1
1856 y := v_2
1857 v.Reset(ssaop.OpARMADDSconst)
1858 v.AuxInt = ssa.Int32ToAuxInt(c)
1859 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
1860 v0.AddArg2(x, y)
1861 v.AddArg(v0)
1862 return true
1863 }
1864
1865
1866
1867 for {
1868 x := v_0
1869 y := v_1
1870 if v_2.Op != ssaop.OpARMMOVWconst {
1871 break
1872 }
1873 c := ssa.AuxIntToInt32(v_2.AuxInt)
1874 if !(0 <= c && c < 32) {
1875 break
1876 }
1877 v.Reset(ssaop.OpARMADDSshiftRA)
1878 v.AuxInt = ssa.Int32ToAuxInt(c)
1879 v.AddArg2(x, y)
1880 return true
1881 }
1882 return false
1883 }
1884 func rewriteValue_OpARMADDSshiftRL(v *ssa.Value) bool {
1885 v_1 := v.Args[1]
1886 v_0 := v.Args[0]
1887 b := v.Block
1888
1889
1890 for {
1891 d := ssa.AuxIntToInt32(v.AuxInt)
1892 if v_0.Op != ssaop.OpARMMOVWconst {
1893 break
1894 }
1895 c := ssa.AuxIntToInt32(v_0.AuxInt)
1896 x := v_1
1897 v.Reset(ssaop.OpARMADDSconst)
1898 v.AuxInt = ssa.Int32ToAuxInt(c)
1899 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
1900 v0.AuxInt = ssa.Int32ToAuxInt(d)
1901 v0.AddArg(x)
1902 v.AddArg(v0)
1903 return true
1904 }
1905
1906
1907 for {
1908 d := ssa.AuxIntToInt32(v.AuxInt)
1909 x := v_0
1910 if v_1.Op != ssaop.OpARMMOVWconst {
1911 break
1912 }
1913 c := ssa.AuxIntToInt32(v_1.AuxInt)
1914 v.Reset(ssaop.OpARMADDSconst)
1915 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1916 v.AddArg(x)
1917 return true
1918 }
1919 return false
1920 }
1921 func rewriteValue_OpARMADDSshiftRLreg(v *ssa.Value) bool {
1922 v_2 := v.Args[2]
1923 v_1 := v.Args[1]
1924 v_0 := v.Args[0]
1925 b := v.Block
1926
1927
1928 for {
1929 if v_0.Op != ssaop.OpARMMOVWconst {
1930 break
1931 }
1932 c := ssa.AuxIntToInt32(v_0.AuxInt)
1933 x := v_1
1934 y := v_2
1935 v.Reset(ssaop.OpARMADDSconst)
1936 v.AuxInt = ssa.Int32ToAuxInt(c)
1937 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
1938 v0.AddArg2(x, y)
1939 v.AddArg(v0)
1940 return true
1941 }
1942
1943
1944
1945 for {
1946 x := v_0
1947 y := v_1
1948 if v_2.Op != ssaop.OpARMMOVWconst {
1949 break
1950 }
1951 c := ssa.AuxIntToInt32(v_2.AuxInt)
1952 if !(0 <= c && c < 32) {
1953 break
1954 }
1955 v.Reset(ssaop.OpARMADDSshiftRL)
1956 v.AuxInt = ssa.Int32ToAuxInt(c)
1957 v.AddArg2(x, y)
1958 return true
1959 }
1960 return false
1961 }
1962 func rewriteValue_OpARMADDconst(v *ssa.Value) bool {
1963 v_0 := v.Args[0]
1964
1965
1966 for {
1967 off1 := ssa.AuxIntToInt32(v.AuxInt)
1968 if v_0.Op != ssaop.OpARMMOVWaddr {
1969 break
1970 }
1971 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
1972 sym := ssa.AuxToSym(v_0.Aux)
1973 ptr := v_0.Args[0]
1974 v.Reset(ssaop.OpARMMOVWaddr)
1975 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
1976 v.Aux = ssa.SymToAux(sym)
1977 v.AddArg(ptr)
1978 return true
1979 }
1980
1981
1982 for {
1983 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
1984 break
1985 }
1986 x := v_0
1987 v.CopyOf(x)
1988 return true
1989 }
1990
1991
1992
1993 for {
1994 c := ssa.AuxIntToInt32(v.AuxInt)
1995 x := v_0
1996 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
1997 break
1998 }
1999 v.Reset(ssaop.OpARMSUBconst)
2000 v.AuxInt = ssa.Int32ToAuxInt(-c)
2001 v.AddArg(x)
2002 return true
2003 }
2004
2005
2006
2007 for {
2008 c := ssa.AuxIntToInt32(v.AuxInt)
2009 x := v_0
2010 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
2011 break
2012 }
2013 v.Reset(ssaop.OpARMSUBconst)
2014 v.AuxInt = ssa.Int32ToAuxInt(-c)
2015 v.AddArg(x)
2016 return true
2017 }
2018
2019
2020 for {
2021 c := ssa.AuxIntToInt32(v.AuxInt)
2022 if v_0.Op != ssaop.OpARMMOVWconst {
2023 break
2024 }
2025 d := ssa.AuxIntToInt32(v_0.AuxInt)
2026 v.Reset(ssaop.OpARMMOVWconst)
2027 v.AuxInt = ssa.Int32ToAuxInt(c + d)
2028 return true
2029 }
2030
2031
2032 for {
2033 c := ssa.AuxIntToInt32(v.AuxInt)
2034 if v_0.Op != ssaop.OpARMADDconst {
2035 break
2036 }
2037 d := ssa.AuxIntToInt32(v_0.AuxInt)
2038 x := v_0.Args[0]
2039 v.Reset(ssaop.OpARMADDconst)
2040 v.AuxInt = ssa.Int32ToAuxInt(c + d)
2041 v.AddArg(x)
2042 return true
2043 }
2044
2045
2046 for {
2047 c := ssa.AuxIntToInt32(v.AuxInt)
2048 if v_0.Op != ssaop.OpARMSUBconst {
2049 break
2050 }
2051 d := ssa.AuxIntToInt32(v_0.AuxInt)
2052 x := v_0.Args[0]
2053 v.Reset(ssaop.OpARMADDconst)
2054 v.AuxInt = ssa.Int32ToAuxInt(c - d)
2055 v.AddArg(x)
2056 return true
2057 }
2058
2059
2060 for {
2061 c := ssa.AuxIntToInt32(v.AuxInt)
2062 if v_0.Op != ssaop.OpARMRSBconst {
2063 break
2064 }
2065 d := ssa.AuxIntToInt32(v_0.AuxInt)
2066 x := v_0.Args[0]
2067 v.Reset(ssaop.OpARMRSBconst)
2068 v.AuxInt = ssa.Int32ToAuxInt(c + d)
2069 v.AddArg(x)
2070 return true
2071 }
2072 return false
2073 }
2074 func rewriteValue_OpARMADDshiftLL(v *ssa.Value) bool {
2075 v_1 := v.Args[1]
2076 v_0 := v.Args[0]
2077 b := v.Block
2078 typ := &b.Func.Config.Types
2079
2080
2081 for {
2082 d := ssa.AuxIntToInt32(v.AuxInt)
2083 if v_0.Op != ssaop.OpARMMOVWconst {
2084 break
2085 }
2086 c := ssa.AuxIntToInt32(v_0.AuxInt)
2087 x := v_1
2088 v.Reset(ssaop.OpARMADDconst)
2089 v.AuxInt = ssa.Int32ToAuxInt(c)
2090 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
2091 v0.AuxInt = ssa.Int32ToAuxInt(d)
2092 v0.AddArg(x)
2093 v.AddArg(v0)
2094 return true
2095 }
2096
2097
2098 for {
2099 d := ssa.AuxIntToInt32(v.AuxInt)
2100 x := v_0
2101 if v_1.Op != ssaop.OpARMMOVWconst {
2102 break
2103 }
2104 c := ssa.AuxIntToInt32(v_1.AuxInt)
2105 v.Reset(ssaop.OpARMADDconst)
2106 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
2107 v.AddArg(x)
2108 return true
2109 }
2110
2111
2112 for {
2113 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMBFXU || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != int32(ssa.ArmBFAuxInt(8, 8)) {
2114 break
2115 }
2116 x := v_0.Args[0]
2117 if x != v_1 {
2118 break
2119 }
2120 v.Reset(ssaop.OpARMREV16)
2121 v.AddArg(x)
2122 return true
2123 }
2124
2125
2126
2127 for {
2128 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMSRLconst || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != 24 {
2129 break
2130 }
2131 v_0_0 := v_0.Args[0]
2132 if v_0_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0_0.AuxInt) != 16 {
2133 break
2134 }
2135 x := v_0_0.Args[0]
2136 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
2137 break
2138 }
2139 v.Reset(ssaop.OpARMREV16)
2140 v.AddArg(x)
2141 return true
2142 }
2143 return false
2144 }
2145 func rewriteValue_OpARMADDshiftLLreg(v *ssa.Value) bool {
2146 v_2 := v.Args[2]
2147 v_1 := v.Args[1]
2148 v_0 := v.Args[0]
2149 b := v.Block
2150
2151
2152 for {
2153 if v_0.Op != ssaop.OpARMMOVWconst {
2154 break
2155 }
2156 c := ssa.AuxIntToInt32(v_0.AuxInt)
2157 x := v_1
2158 y := v_2
2159 v.Reset(ssaop.OpARMADDconst)
2160 v.AuxInt = ssa.Int32ToAuxInt(c)
2161 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
2162 v0.AddArg2(x, y)
2163 v.AddArg(v0)
2164 return true
2165 }
2166
2167
2168
2169 for {
2170 x := v_0
2171 y := v_1
2172 if v_2.Op != ssaop.OpARMMOVWconst {
2173 break
2174 }
2175 c := ssa.AuxIntToInt32(v_2.AuxInt)
2176 if !(0 <= c && c < 32) {
2177 break
2178 }
2179 v.Reset(ssaop.OpARMADDshiftLL)
2180 v.AuxInt = ssa.Int32ToAuxInt(c)
2181 v.AddArg2(x, y)
2182 return true
2183 }
2184 return false
2185 }
2186 func rewriteValue_OpARMADDshiftRA(v *ssa.Value) bool {
2187 v_1 := v.Args[1]
2188 v_0 := v.Args[0]
2189 b := v.Block
2190
2191
2192 for {
2193 d := ssa.AuxIntToInt32(v.AuxInt)
2194 if v_0.Op != ssaop.OpARMMOVWconst {
2195 break
2196 }
2197 c := ssa.AuxIntToInt32(v_0.AuxInt)
2198 x := v_1
2199 v.Reset(ssaop.OpARMADDconst)
2200 v.AuxInt = ssa.Int32ToAuxInt(c)
2201 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
2202 v0.AuxInt = ssa.Int32ToAuxInt(d)
2203 v0.AddArg(x)
2204 v.AddArg(v0)
2205 return true
2206 }
2207
2208
2209 for {
2210 d := ssa.AuxIntToInt32(v.AuxInt)
2211 x := v_0
2212 if v_1.Op != ssaop.OpARMMOVWconst {
2213 break
2214 }
2215 c := ssa.AuxIntToInt32(v_1.AuxInt)
2216 v.Reset(ssaop.OpARMADDconst)
2217 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
2218 v.AddArg(x)
2219 return true
2220 }
2221 return false
2222 }
2223 func rewriteValue_OpARMADDshiftRAreg(v *ssa.Value) bool {
2224 v_2 := v.Args[2]
2225 v_1 := v.Args[1]
2226 v_0 := v.Args[0]
2227 b := v.Block
2228
2229
2230 for {
2231 if v_0.Op != ssaop.OpARMMOVWconst {
2232 break
2233 }
2234 c := ssa.AuxIntToInt32(v_0.AuxInt)
2235 x := v_1
2236 y := v_2
2237 v.Reset(ssaop.OpARMADDconst)
2238 v.AuxInt = ssa.Int32ToAuxInt(c)
2239 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
2240 v0.AddArg2(x, y)
2241 v.AddArg(v0)
2242 return true
2243 }
2244
2245
2246
2247 for {
2248 x := v_0
2249 y := v_1
2250 if v_2.Op != ssaop.OpARMMOVWconst {
2251 break
2252 }
2253 c := ssa.AuxIntToInt32(v_2.AuxInt)
2254 if !(0 <= c && c < 32) {
2255 break
2256 }
2257 v.Reset(ssaop.OpARMADDshiftRA)
2258 v.AuxInt = ssa.Int32ToAuxInt(c)
2259 v.AddArg2(x, y)
2260 return true
2261 }
2262 return false
2263 }
2264 func rewriteValue_OpARMADDshiftRL(v *ssa.Value) bool {
2265 v_1 := v.Args[1]
2266 v_0 := v.Args[0]
2267 b := v.Block
2268
2269
2270 for {
2271 d := ssa.AuxIntToInt32(v.AuxInt)
2272 if v_0.Op != ssaop.OpARMMOVWconst {
2273 break
2274 }
2275 c := ssa.AuxIntToInt32(v_0.AuxInt)
2276 x := v_1
2277 v.Reset(ssaop.OpARMADDconst)
2278 v.AuxInt = ssa.Int32ToAuxInt(c)
2279 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
2280 v0.AuxInt = ssa.Int32ToAuxInt(d)
2281 v0.AddArg(x)
2282 v.AddArg(v0)
2283 return true
2284 }
2285
2286
2287 for {
2288 d := ssa.AuxIntToInt32(v.AuxInt)
2289 x := v_0
2290 if v_1.Op != ssaop.OpARMMOVWconst {
2291 break
2292 }
2293 c := ssa.AuxIntToInt32(v_1.AuxInt)
2294 v.Reset(ssaop.OpARMADDconst)
2295 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2296 v.AddArg(x)
2297 return true
2298 }
2299 return false
2300 }
2301 func rewriteValue_OpARMADDshiftRLreg(v *ssa.Value) bool {
2302 v_2 := v.Args[2]
2303 v_1 := v.Args[1]
2304 v_0 := v.Args[0]
2305 b := v.Block
2306
2307
2308 for {
2309 if v_0.Op != ssaop.OpARMMOVWconst {
2310 break
2311 }
2312 c := ssa.AuxIntToInt32(v_0.AuxInt)
2313 x := v_1
2314 y := v_2
2315 v.Reset(ssaop.OpARMADDconst)
2316 v.AuxInt = ssa.Int32ToAuxInt(c)
2317 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
2318 v0.AddArg2(x, y)
2319 v.AddArg(v0)
2320 return true
2321 }
2322
2323
2324
2325 for {
2326 x := v_0
2327 y := v_1
2328 if v_2.Op != ssaop.OpARMMOVWconst {
2329 break
2330 }
2331 c := ssa.AuxIntToInt32(v_2.AuxInt)
2332 if !(0 <= c && c < 32) {
2333 break
2334 }
2335 v.Reset(ssaop.OpARMADDshiftRL)
2336 v.AuxInt = ssa.Int32ToAuxInt(c)
2337 v.AddArg2(x, y)
2338 return true
2339 }
2340 return false
2341 }
2342 func rewriteValue_OpARMAND(v *ssa.Value) bool {
2343 v_1 := v.Args[1]
2344 v_0 := v.Args[0]
2345
2346
2347 for {
2348 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2349 x := v_0
2350 if v_1.Op != ssaop.OpARMMOVWconst {
2351 continue
2352 }
2353 c := ssa.AuxIntToInt32(v_1.AuxInt)
2354 v.Reset(ssaop.OpARMANDconst)
2355 v.AuxInt = ssa.Int32ToAuxInt(c)
2356 v.AddArg(x)
2357 return true
2358 }
2359 break
2360 }
2361
2362
2363 for {
2364 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2365 x := v_0
2366 if v_1.Op != ssaop.OpARMSLLconst {
2367 continue
2368 }
2369 c := ssa.AuxIntToInt32(v_1.AuxInt)
2370 y := v_1.Args[0]
2371 v.Reset(ssaop.OpARMANDshiftLL)
2372 v.AuxInt = ssa.Int32ToAuxInt(c)
2373 v.AddArg2(x, y)
2374 return true
2375 }
2376 break
2377 }
2378
2379
2380 for {
2381 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2382 x := v_0
2383 if v_1.Op != ssaop.OpARMSRLconst {
2384 continue
2385 }
2386 c := ssa.AuxIntToInt32(v_1.AuxInt)
2387 y := v_1.Args[0]
2388 v.Reset(ssaop.OpARMANDshiftRL)
2389 v.AuxInt = ssa.Int32ToAuxInt(c)
2390 v.AddArg2(x, y)
2391 return true
2392 }
2393 break
2394 }
2395
2396
2397 for {
2398 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2399 x := v_0
2400 if v_1.Op != ssaop.OpARMSRAconst {
2401 continue
2402 }
2403 c := ssa.AuxIntToInt32(v_1.AuxInt)
2404 y := v_1.Args[0]
2405 v.Reset(ssaop.OpARMANDshiftRA)
2406 v.AuxInt = ssa.Int32ToAuxInt(c)
2407 v.AddArg2(x, y)
2408 return true
2409 }
2410 break
2411 }
2412
2413
2414 for {
2415 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2416 x := v_0
2417 if v_1.Op != ssaop.OpARMSLL {
2418 continue
2419 }
2420 z := v_1.Args[1]
2421 y := v_1.Args[0]
2422 v.Reset(ssaop.OpARMANDshiftLLreg)
2423 v.AddArg3(x, y, z)
2424 return true
2425 }
2426 break
2427 }
2428
2429
2430 for {
2431 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2432 x := v_0
2433 if v_1.Op != ssaop.OpARMSRL {
2434 continue
2435 }
2436 z := v_1.Args[1]
2437 y := v_1.Args[0]
2438 v.Reset(ssaop.OpARMANDshiftRLreg)
2439 v.AddArg3(x, y, z)
2440 return true
2441 }
2442 break
2443 }
2444
2445
2446 for {
2447 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2448 x := v_0
2449 if v_1.Op != ssaop.OpARMSRA {
2450 continue
2451 }
2452 z := v_1.Args[1]
2453 y := v_1.Args[0]
2454 v.Reset(ssaop.OpARMANDshiftRAreg)
2455 v.AddArg3(x, y, z)
2456 return true
2457 }
2458 break
2459 }
2460
2461
2462 for {
2463 x := v_0
2464 if x != v_1 {
2465 break
2466 }
2467 v.CopyOf(x)
2468 return true
2469 }
2470
2471
2472 for {
2473 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2474 x := v_0
2475 if v_1.Op != ssaop.OpARMMVN {
2476 continue
2477 }
2478 y := v_1.Args[0]
2479 v.Reset(ssaop.OpARMBIC)
2480 v.AddArg2(x, y)
2481 return true
2482 }
2483 break
2484 }
2485
2486
2487 for {
2488 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2489 x := v_0
2490 if v_1.Op != ssaop.OpARMMVNshiftLL {
2491 continue
2492 }
2493 c := ssa.AuxIntToInt32(v_1.AuxInt)
2494 y := v_1.Args[0]
2495 v.Reset(ssaop.OpARMBICshiftLL)
2496 v.AuxInt = ssa.Int32ToAuxInt(c)
2497 v.AddArg2(x, y)
2498 return true
2499 }
2500 break
2501 }
2502
2503
2504 for {
2505 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2506 x := v_0
2507 if v_1.Op != ssaop.OpARMMVNshiftRL {
2508 continue
2509 }
2510 c := ssa.AuxIntToInt32(v_1.AuxInt)
2511 y := v_1.Args[0]
2512 v.Reset(ssaop.OpARMBICshiftRL)
2513 v.AuxInt = ssa.Int32ToAuxInt(c)
2514 v.AddArg2(x, y)
2515 return true
2516 }
2517 break
2518 }
2519
2520
2521 for {
2522 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2523 x := v_0
2524 if v_1.Op != ssaop.OpARMMVNshiftRA {
2525 continue
2526 }
2527 c := ssa.AuxIntToInt32(v_1.AuxInt)
2528 y := v_1.Args[0]
2529 v.Reset(ssaop.OpARMBICshiftRA)
2530 v.AuxInt = ssa.Int32ToAuxInt(c)
2531 v.AddArg2(x, y)
2532 return true
2533 }
2534 break
2535 }
2536 return false
2537 }
2538 func rewriteValue_OpARMANDconst(v *ssa.Value) bool {
2539 v_0 := v.Args[0]
2540
2541
2542 for {
2543 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
2544 break
2545 }
2546 v.Reset(ssaop.OpARMMOVWconst)
2547 v.AuxInt = ssa.Int32ToAuxInt(0)
2548 return true
2549 }
2550
2551
2552
2553 for {
2554 c := ssa.AuxIntToInt32(v.AuxInt)
2555 x := v_0
2556 if !(int32(c) == -1) {
2557 break
2558 }
2559 v.CopyOf(x)
2560 return true
2561 }
2562
2563
2564
2565 for {
2566 c := ssa.AuxIntToInt32(v.AuxInt)
2567 x := v_0
2568 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
2569 break
2570 }
2571 v.Reset(ssaop.OpARMBICconst)
2572 v.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(c)))
2573 v.AddArg(x)
2574 return true
2575 }
2576
2577
2578
2579 for {
2580 c := ssa.AuxIntToInt32(v.AuxInt)
2581 x := v_0
2582 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
2583 break
2584 }
2585 v.Reset(ssaop.OpARMBICconst)
2586 v.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(c)))
2587 v.AddArg(x)
2588 return true
2589 }
2590
2591
2592 for {
2593 c := ssa.AuxIntToInt32(v.AuxInt)
2594 if v_0.Op != ssaop.OpARMMOVWconst {
2595 break
2596 }
2597 d := ssa.AuxIntToInt32(v_0.AuxInt)
2598 v.Reset(ssaop.OpARMMOVWconst)
2599 v.AuxInt = ssa.Int32ToAuxInt(c & d)
2600 return true
2601 }
2602
2603
2604 for {
2605 c := ssa.AuxIntToInt32(v.AuxInt)
2606 if v_0.Op != ssaop.OpARMANDconst {
2607 break
2608 }
2609 d := ssa.AuxIntToInt32(v_0.AuxInt)
2610 x := v_0.Args[0]
2611 v.Reset(ssaop.OpARMANDconst)
2612 v.AuxInt = ssa.Int32ToAuxInt(c & d)
2613 v.AddArg(x)
2614 return true
2615 }
2616 return false
2617 }
2618 func rewriteValue_OpARMANDshiftLL(v *ssa.Value) bool {
2619 v_1 := v.Args[1]
2620 v_0 := v.Args[0]
2621 b := v.Block
2622
2623
2624 for {
2625 d := ssa.AuxIntToInt32(v.AuxInt)
2626 if v_0.Op != ssaop.OpARMMOVWconst {
2627 break
2628 }
2629 c := ssa.AuxIntToInt32(v_0.AuxInt)
2630 x := v_1
2631 v.Reset(ssaop.OpARMANDconst)
2632 v.AuxInt = ssa.Int32ToAuxInt(c)
2633 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
2634 v0.AuxInt = ssa.Int32ToAuxInt(d)
2635 v0.AddArg(x)
2636 v.AddArg(v0)
2637 return true
2638 }
2639
2640
2641 for {
2642 d := ssa.AuxIntToInt32(v.AuxInt)
2643 x := v_0
2644 if v_1.Op != ssaop.OpARMMOVWconst {
2645 break
2646 }
2647 c := ssa.AuxIntToInt32(v_1.AuxInt)
2648 v.Reset(ssaop.OpARMANDconst)
2649 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
2650 v.AddArg(x)
2651 return true
2652 }
2653
2654
2655 for {
2656 c := ssa.AuxIntToInt32(v.AuxInt)
2657 y := v_0
2658 if y.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(y.AuxInt) != c {
2659 break
2660 }
2661 x := y.Args[0]
2662 if x != v_1 {
2663 break
2664 }
2665 v.CopyOf(y)
2666 return true
2667 }
2668 return false
2669 }
2670 func rewriteValue_OpARMANDshiftLLreg(v *ssa.Value) bool {
2671 v_2 := v.Args[2]
2672 v_1 := v.Args[1]
2673 v_0 := v.Args[0]
2674 b := v.Block
2675
2676
2677 for {
2678 if v_0.Op != ssaop.OpARMMOVWconst {
2679 break
2680 }
2681 c := ssa.AuxIntToInt32(v_0.AuxInt)
2682 x := v_1
2683 y := v_2
2684 v.Reset(ssaop.OpARMANDconst)
2685 v.AuxInt = ssa.Int32ToAuxInt(c)
2686 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
2687 v0.AddArg2(x, y)
2688 v.AddArg(v0)
2689 return true
2690 }
2691
2692
2693
2694 for {
2695 x := v_0
2696 y := v_1
2697 if v_2.Op != ssaop.OpARMMOVWconst {
2698 break
2699 }
2700 c := ssa.AuxIntToInt32(v_2.AuxInt)
2701 if !(0 <= c && c < 32) {
2702 break
2703 }
2704 v.Reset(ssaop.OpARMANDshiftLL)
2705 v.AuxInt = ssa.Int32ToAuxInt(c)
2706 v.AddArg2(x, y)
2707 return true
2708 }
2709 return false
2710 }
2711 func rewriteValue_OpARMANDshiftRA(v *ssa.Value) bool {
2712 v_1 := v.Args[1]
2713 v_0 := v.Args[0]
2714 b := v.Block
2715
2716
2717 for {
2718 d := ssa.AuxIntToInt32(v.AuxInt)
2719 if v_0.Op != ssaop.OpARMMOVWconst {
2720 break
2721 }
2722 c := ssa.AuxIntToInt32(v_0.AuxInt)
2723 x := v_1
2724 v.Reset(ssaop.OpARMANDconst)
2725 v.AuxInt = ssa.Int32ToAuxInt(c)
2726 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
2727 v0.AuxInt = ssa.Int32ToAuxInt(d)
2728 v0.AddArg(x)
2729 v.AddArg(v0)
2730 return true
2731 }
2732
2733
2734 for {
2735 d := ssa.AuxIntToInt32(v.AuxInt)
2736 x := v_0
2737 if v_1.Op != ssaop.OpARMMOVWconst {
2738 break
2739 }
2740 c := ssa.AuxIntToInt32(v_1.AuxInt)
2741 v.Reset(ssaop.OpARMANDconst)
2742 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
2743 v.AddArg(x)
2744 return true
2745 }
2746
2747
2748 for {
2749 c := ssa.AuxIntToInt32(v.AuxInt)
2750 y := v_0
2751 if y.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(y.AuxInt) != c {
2752 break
2753 }
2754 x := y.Args[0]
2755 if x != v_1 {
2756 break
2757 }
2758 v.CopyOf(y)
2759 return true
2760 }
2761 return false
2762 }
2763 func rewriteValue_OpARMANDshiftRAreg(v *ssa.Value) bool {
2764 v_2 := v.Args[2]
2765 v_1 := v.Args[1]
2766 v_0 := v.Args[0]
2767 b := v.Block
2768
2769
2770 for {
2771 if v_0.Op != ssaop.OpARMMOVWconst {
2772 break
2773 }
2774 c := ssa.AuxIntToInt32(v_0.AuxInt)
2775 x := v_1
2776 y := v_2
2777 v.Reset(ssaop.OpARMANDconst)
2778 v.AuxInt = ssa.Int32ToAuxInt(c)
2779 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
2780 v0.AddArg2(x, y)
2781 v.AddArg(v0)
2782 return true
2783 }
2784
2785
2786
2787 for {
2788 x := v_0
2789 y := v_1
2790 if v_2.Op != ssaop.OpARMMOVWconst {
2791 break
2792 }
2793 c := ssa.AuxIntToInt32(v_2.AuxInt)
2794 if !(0 <= c && c < 32) {
2795 break
2796 }
2797 v.Reset(ssaop.OpARMANDshiftRA)
2798 v.AuxInt = ssa.Int32ToAuxInt(c)
2799 v.AddArg2(x, y)
2800 return true
2801 }
2802 return false
2803 }
2804 func rewriteValue_OpARMANDshiftRL(v *ssa.Value) bool {
2805 v_1 := v.Args[1]
2806 v_0 := v.Args[0]
2807 b := v.Block
2808
2809
2810 for {
2811 d := ssa.AuxIntToInt32(v.AuxInt)
2812 if v_0.Op != ssaop.OpARMMOVWconst {
2813 break
2814 }
2815 c := ssa.AuxIntToInt32(v_0.AuxInt)
2816 x := v_1
2817 v.Reset(ssaop.OpARMANDconst)
2818 v.AuxInt = ssa.Int32ToAuxInt(c)
2819 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
2820 v0.AuxInt = ssa.Int32ToAuxInt(d)
2821 v0.AddArg(x)
2822 v.AddArg(v0)
2823 return true
2824 }
2825
2826
2827 for {
2828 d := ssa.AuxIntToInt32(v.AuxInt)
2829 x := v_0
2830 if v_1.Op != ssaop.OpARMMOVWconst {
2831 break
2832 }
2833 c := ssa.AuxIntToInt32(v_1.AuxInt)
2834 v.Reset(ssaop.OpARMANDconst)
2835 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2836 v.AddArg(x)
2837 return true
2838 }
2839
2840
2841 for {
2842 c := ssa.AuxIntToInt32(v.AuxInt)
2843 y := v_0
2844 if y.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(y.AuxInt) != c {
2845 break
2846 }
2847 x := y.Args[0]
2848 if x != v_1 {
2849 break
2850 }
2851 v.CopyOf(y)
2852 return true
2853 }
2854 return false
2855 }
2856 func rewriteValue_OpARMANDshiftRLreg(v *ssa.Value) bool {
2857 v_2 := v.Args[2]
2858 v_1 := v.Args[1]
2859 v_0 := v.Args[0]
2860 b := v.Block
2861
2862
2863 for {
2864 if v_0.Op != ssaop.OpARMMOVWconst {
2865 break
2866 }
2867 c := ssa.AuxIntToInt32(v_0.AuxInt)
2868 x := v_1
2869 y := v_2
2870 v.Reset(ssaop.OpARMANDconst)
2871 v.AuxInt = ssa.Int32ToAuxInt(c)
2872 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
2873 v0.AddArg2(x, y)
2874 v.AddArg(v0)
2875 return true
2876 }
2877
2878
2879
2880 for {
2881 x := v_0
2882 y := v_1
2883 if v_2.Op != ssaop.OpARMMOVWconst {
2884 break
2885 }
2886 c := ssa.AuxIntToInt32(v_2.AuxInt)
2887 if !(0 <= c && c < 32) {
2888 break
2889 }
2890 v.Reset(ssaop.OpARMANDshiftRL)
2891 v.AuxInt = ssa.Int32ToAuxInt(c)
2892 v.AddArg2(x, y)
2893 return true
2894 }
2895 return false
2896 }
2897 func rewriteValue_OpARMBFX(v *ssa.Value) bool {
2898 v_0 := v.Args[0]
2899
2900
2901 for {
2902 c := ssa.AuxIntToInt32(v.AuxInt)
2903 if v_0.Op != ssaop.OpARMMOVWconst {
2904 break
2905 }
2906 d := ssa.AuxIntToInt32(v_0.AuxInt)
2907 v.Reset(ssaop.OpARMMOVWconst)
2908 v.AuxInt = ssa.Int32ToAuxInt(d << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8)))
2909 return true
2910 }
2911 return false
2912 }
2913 func rewriteValue_OpARMBFXU(v *ssa.Value) bool {
2914 v_0 := v.Args[0]
2915
2916
2917 for {
2918 c := ssa.AuxIntToInt32(v.AuxInt)
2919 if v_0.Op != ssaop.OpARMMOVWconst {
2920 break
2921 }
2922 d := ssa.AuxIntToInt32(v_0.AuxInt)
2923 v.Reset(ssaop.OpARMMOVWconst)
2924 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(d) << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8))))
2925 return true
2926 }
2927 return false
2928 }
2929 func rewriteValue_OpARMBIC(v *ssa.Value) bool {
2930 v_1 := v.Args[1]
2931 v_0 := v.Args[0]
2932
2933
2934 for {
2935 x := v_0
2936 if v_1.Op != ssaop.OpARMMOVWconst {
2937 break
2938 }
2939 c := ssa.AuxIntToInt32(v_1.AuxInt)
2940 v.Reset(ssaop.OpARMBICconst)
2941 v.AuxInt = ssa.Int32ToAuxInt(c)
2942 v.AddArg(x)
2943 return true
2944 }
2945
2946
2947 for {
2948 x := v_0
2949 if v_1.Op != ssaop.OpARMSLLconst {
2950 break
2951 }
2952 c := ssa.AuxIntToInt32(v_1.AuxInt)
2953 y := v_1.Args[0]
2954 v.Reset(ssaop.OpARMBICshiftLL)
2955 v.AuxInt = ssa.Int32ToAuxInt(c)
2956 v.AddArg2(x, y)
2957 return true
2958 }
2959
2960
2961 for {
2962 x := v_0
2963 if v_1.Op != ssaop.OpARMSRLconst {
2964 break
2965 }
2966 c := ssa.AuxIntToInt32(v_1.AuxInt)
2967 y := v_1.Args[0]
2968 v.Reset(ssaop.OpARMBICshiftRL)
2969 v.AuxInt = ssa.Int32ToAuxInt(c)
2970 v.AddArg2(x, y)
2971 return true
2972 }
2973
2974
2975 for {
2976 x := v_0
2977 if v_1.Op != ssaop.OpARMSRAconst {
2978 break
2979 }
2980 c := ssa.AuxIntToInt32(v_1.AuxInt)
2981 y := v_1.Args[0]
2982 v.Reset(ssaop.OpARMBICshiftRA)
2983 v.AuxInt = ssa.Int32ToAuxInt(c)
2984 v.AddArg2(x, y)
2985 return true
2986 }
2987
2988
2989 for {
2990 x := v_0
2991 if v_1.Op != ssaop.OpARMSLL {
2992 break
2993 }
2994 z := v_1.Args[1]
2995 y := v_1.Args[0]
2996 v.Reset(ssaop.OpARMBICshiftLLreg)
2997 v.AddArg3(x, y, z)
2998 return true
2999 }
3000
3001
3002 for {
3003 x := v_0
3004 if v_1.Op != ssaop.OpARMSRL {
3005 break
3006 }
3007 z := v_1.Args[1]
3008 y := v_1.Args[0]
3009 v.Reset(ssaop.OpARMBICshiftRLreg)
3010 v.AddArg3(x, y, z)
3011 return true
3012 }
3013
3014
3015 for {
3016 x := v_0
3017 if v_1.Op != ssaop.OpARMSRA {
3018 break
3019 }
3020 z := v_1.Args[1]
3021 y := v_1.Args[0]
3022 v.Reset(ssaop.OpARMBICshiftRAreg)
3023 v.AddArg3(x, y, z)
3024 return true
3025 }
3026
3027
3028 for {
3029 x := v_0
3030 if x != v_1 {
3031 break
3032 }
3033 v.Reset(ssaop.OpARMMOVWconst)
3034 v.AuxInt = ssa.Int32ToAuxInt(0)
3035 return true
3036 }
3037 return false
3038 }
3039 func rewriteValue_OpARMBICconst(v *ssa.Value) bool {
3040 v_0 := v.Args[0]
3041
3042
3043 for {
3044 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
3045 break
3046 }
3047 x := v_0
3048 v.CopyOf(x)
3049 return true
3050 }
3051
3052
3053
3054 for {
3055 c := ssa.AuxIntToInt32(v.AuxInt)
3056 if !(int32(c) == -1) {
3057 break
3058 }
3059 v.Reset(ssaop.OpARMMOVWconst)
3060 v.AuxInt = ssa.Int32ToAuxInt(0)
3061 return true
3062 }
3063
3064
3065
3066 for {
3067 c := ssa.AuxIntToInt32(v.AuxInt)
3068 x := v_0
3069 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
3070 break
3071 }
3072 v.Reset(ssaop.OpARMANDconst)
3073 v.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(c)))
3074 v.AddArg(x)
3075 return true
3076 }
3077
3078
3079
3080 for {
3081 c := ssa.AuxIntToInt32(v.AuxInt)
3082 x := v_0
3083 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
3084 break
3085 }
3086 v.Reset(ssaop.OpARMANDconst)
3087 v.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(c)))
3088 v.AddArg(x)
3089 return true
3090 }
3091
3092
3093 for {
3094 c := ssa.AuxIntToInt32(v.AuxInt)
3095 if v_0.Op != ssaop.OpARMMOVWconst {
3096 break
3097 }
3098 d := ssa.AuxIntToInt32(v_0.AuxInt)
3099 v.Reset(ssaop.OpARMMOVWconst)
3100 v.AuxInt = ssa.Int32ToAuxInt(d &^ c)
3101 return true
3102 }
3103
3104
3105 for {
3106 c := ssa.AuxIntToInt32(v.AuxInt)
3107 if v_0.Op != ssaop.OpARMBICconst {
3108 break
3109 }
3110 d := ssa.AuxIntToInt32(v_0.AuxInt)
3111 x := v_0.Args[0]
3112 v.Reset(ssaop.OpARMBICconst)
3113 v.AuxInt = ssa.Int32ToAuxInt(c | d)
3114 v.AddArg(x)
3115 return true
3116 }
3117 return false
3118 }
3119 func rewriteValue_OpARMBICshiftLL(v *ssa.Value) bool {
3120 v_1 := v.Args[1]
3121 v_0 := v.Args[0]
3122
3123
3124 for {
3125 d := ssa.AuxIntToInt32(v.AuxInt)
3126 x := v_0
3127 if v_1.Op != ssaop.OpARMMOVWconst {
3128 break
3129 }
3130 c := ssa.AuxIntToInt32(v_1.AuxInt)
3131 v.Reset(ssaop.OpARMBICconst)
3132 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
3133 v.AddArg(x)
3134 return true
3135 }
3136
3137
3138 for {
3139 c := ssa.AuxIntToInt32(v.AuxInt)
3140 if v_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
3141 break
3142 }
3143 x := v_0.Args[0]
3144 if x != v_1 {
3145 break
3146 }
3147 v.Reset(ssaop.OpARMMOVWconst)
3148 v.AuxInt = ssa.Int32ToAuxInt(0)
3149 return true
3150 }
3151 return false
3152 }
3153 func rewriteValue_OpARMBICshiftLLreg(v *ssa.Value) bool {
3154 v_2 := v.Args[2]
3155 v_1 := v.Args[1]
3156 v_0 := v.Args[0]
3157
3158
3159
3160 for {
3161 x := v_0
3162 y := v_1
3163 if v_2.Op != ssaop.OpARMMOVWconst {
3164 break
3165 }
3166 c := ssa.AuxIntToInt32(v_2.AuxInt)
3167 if !(0 <= c && c < 32) {
3168 break
3169 }
3170 v.Reset(ssaop.OpARMBICshiftLL)
3171 v.AuxInt = ssa.Int32ToAuxInt(c)
3172 v.AddArg2(x, y)
3173 return true
3174 }
3175 return false
3176 }
3177 func rewriteValue_OpARMBICshiftRA(v *ssa.Value) bool {
3178 v_1 := v.Args[1]
3179 v_0 := v.Args[0]
3180
3181
3182 for {
3183 d := ssa.AuxIntToInt32(v.AuxInt)
3184 x := v_0
3185 if v_1.Op != ssaop.OpARMMOVWconst {
3186 break
3187 }
3188 c := ssa.AuxIntToInt32(v_1.AuxInt)
3189 v.Reset(ssaop.OpARMBICconst)
3190 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
3191 v.AddArg(x)
3192 return true
3193 }
3194
3195
3196 for {
3197 c := ssa.AuxIntToInt32(v.AuxInt)
3198 if v_0.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
3199 break
3200 }
3201 x := v_0.Args[0]
3202 if x != v_1 {
3203 break
3204 }
3205 v.Reset(ssaop.OpARMMOVWconst)
3206 v.AuxInt = ssa.Int32ToAuxInt(0)
3207 return true
3208 }
3209 return false
3210 }
3211 func rewriteValue_OpARMBICshiftRAreg(v *ssa.Value) bool {
3212 v_2 := v.Args[2]
3213 v_1 := v.Args[1]
3214 v_0 := v.Args[0]
3215
3216
3217
3218 for {
3219 x := v_0
3220 y := v_1
3221 if v_2.Op != ssaop.OpARMMOVWconst {
3222 break
3223 }
3224 c := ssa.AuxIntToInt32(v_2.AuxInt)
3225 if !(0 <= c && c < 32) {
3226 break
3227 }
3228 v.Reset(ssaop.OpARMBICshiftRA)
3229 v.AuxInt = ssa.Int32ToAuxInt(c)
3230 v.AddArg2(x, y)
3231 return true
3232 }
3233 return false
3234 }
3235 func rewriteValue_OpARMBICshiftRL(v *ssa.Value) bool {
3236 v_1 := v.Args[1]
3237 v_0 := v.Args[0]
3238
3239
3240 for {
3241 d := ssa.AuxIntToInt32(v.AuxInt)
3242 x := v_0
3243 if v_1.Op != ssaop.OpARMMOVWconst {
3244 break
3245 }
3246 c := ssa.AuxIntToInt32(v_1.AuxInt)
3247 v.Reset(ssaop.OpARMBICconst)
3248 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3249 v.AddArg(x)
3250 return true
3251 }
3252
3253
3254 for {
3255 c := ssa.AuxIntToInt32(v.AuxInt)
3256 if v_0.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
3257 break
3258 }
3259 x := v_0.Args[0]
3260 if x != v_1 {
3261 break
3262 }
3263 v.Reset(ssaop.OpARMMOVWconst)
3264 v.AuxInt = ssa.Int32ToAuxInt(0)
3265 return true
3266 }
3267 return false
3268 }
3269 func rewriteValue_OpARMBICshiftRLreg(v *ssa.Value) bool {
3270 v_2 := v.Args[2]
3271 v_1 := v.Args[1]
3272 v_0 := v.Args[0]
3273
3274
3275
3276 for {
3277 x := v_0
3278 y := v_1
3279 if v_2.Op != ssaop.OpARMMOVWconst {
3280 break
3281 }
3282 c := ssa.AuxIntToInt32(v_2.AuxInt)
3283 if !(0 <= c && c < 32) {
3284 break
3285 }
3286 v.Reset(ssaop.OpARMBICshiftRL)
3287 v.AuxInt = ssa.Int32ToAuxInt(c)
3288 v.AddArg2(x, y)
3289 return true
3290 }
3291 return false
3292 }
3293 func rewriteValue_OpARMCMN(v *ssa.Value) bool {
3294 v_1 := v.Args[1]
3295 v_0 := v.Args[0]
3296
3297
3298 for {
3299 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3300 x := v_0
3301 if v_1.Op != ssaop.OpARMMOVWconst {
3302 continue
3303 }
3304 c := ssa.AuxIntToInt32(v_1.AuxInt)
3305 v.Reset(ssaop.OpARMCMNconst)
3306 v.AuxInt = ssa.Int32ToAuxInt(c)
3307 v.AddArg(x)
3308 return true
3309 }
3310 break
3311 }
3312
3313
3314 for {
3315 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3316 x := v_0
3317 if v_1.Op != ssaop.OpARMSLLconst {
3318 continue
3319 }
3320 c := ssa.AuxIntToInt32(v_1.AuxInt)
3321 y := v_1.Args[0]
3322 v.Reset(ssaop.OpARMCMNshiftLL)
3323 v.AuxInt = ssa.Int32ToAuxInt(c)
3324 v.AddArg2(x, y)
3325 return true
3326 }
3327 break
3328 }
3329
3330
3331 for {
3332 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3333 x := v_0
3334 if v_1.Op != ssaop.OpARMSRLconst {
3335 continue
3336 }
3337 c := ssa.AuxIntToInt32(v_1.AuxInt)
3338 y := v_1.Args[0]
3339 v.Reset(ssaop.OpARMCMNshiftRL)
3340 v.AuxInt = ssa.Int32ToAuxInt(c)
3341 v.AddArg2(x, y)
3342 return true
3343 }
3344 break
3345 }
3346
3347
3348 for {
3349 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3350 x := v_0
3351 if v_1.Op != ssaop.OpARMSRAconst {
3352 continue
3353 }
3354 c := ssa.AuxIntToInt32(v_1.AuxInt)
3355 y := v_1.Args[0]
3356 v.Reset(ssaop.OpARMCMNshiftRA)
3357 v.AuxInt = ssa.Int32ToAuxInt(c)
3358 v.AddArg2(x, y)
3359 return true
3360 }
3361 break
3362 }
3363
3364
3365 for {
3366 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3367 x := v_0
3368 if v_1.Op != ssaop.OpARMSLL {
3369 continue
3370 }
3371 z := v_1.Args[1]
3372 y := v_1.Args[0]
3373 v.Reset(ssaop.OpARMCMNshiftLLreg)
3374 v.AddArg3(x, y, z)
3375 return true
3376 }
3377 break
3378 }
3379
3380
3381 for {
3382 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3383 x := v_0
3384 if v_1.Op != ssaop.OpARMSRL {
3385 continue
3386 }
3387 z := v_1.Args[1]
3388 y := v_1.Args[0]
3389 v.Reset(ssaop.OpARMCMNshiftRLreg)
3390 v.AddArg3(x, y, z)
3391 return true
3392 }
3393 break
3394 }
3395
3396
3397 for {
3398 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3399 x := v_0
3400 if v_1.Op != ssaop.OpARMSRA {
3401 continue
3402 }
3403 z := v_1.Args[1]
3404 y := v_1.Args[0]
3405 v.Reset(ssaop.OpARMCMNshiftRAreg)
3406 v.AddArg3(x, y, z)
3407 return true
3408 }
3409 break
3410 }
3411 return false
3412 }
3413 func rewriteValue_OpARMCMNconst(v *ssa.Value) bool {
3414 v_0 := v.Args[0]
3415
3416
3417 for {
3418 y := ssa.AuxIntToInt32(v.AuxInt)
3419 if v_0.Op != ssaop.OpARMMOVWconst {
3420 break
3421 }
3422 x := ssa.AuxIntToInt32(v_0.AuxInt)
3423 v.Reset(ssaop.OpARMFlagConstant)
3424 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.AddFlags32(x, y))
3425 return true
3426 }
3427 return false
3428 }
3429 func rewriteValue_OpARMCMNshiftLL(v *ssa.Value) bool {
3430 v_1 := v.Args[1]
3431 v_0 := v.Args[0]
3432 b := v.Block
3433
3434
3435 for {
3436 d := ssa.AuxIntToInt32(v.AuxInt)
3437 if v_0.Op != ssaop.OpARMMOVWconst {
3438 break
3439 }
3440 c := ssa.AuxIntToInt32(v_0.AuxInt)
3441 x := v_1
3442 v.Reset(ssaop.OpARMCMNconst)
3443 v.AuxInt = ssa.Int32ToAuxInt(c)
3444 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
3445 v0.AuxInt = ssa.Int32ToAuxInt(d)
3446 v0.AddArg(x)
3447 v.AddArg(v0)
3448 return true
3449 }
3450
3451
3452 for {
3453 d := ssa.AuxIntToInt32(v.AuxInt)
3454 x := v_0
3455 if v_1.Op != ssaop.OpARMMOVWconst {
3456 break
3457 }
3458 c := ssa.AuxIntToInt32(v_1.AuxInt)
3459 v.Reset(ssaop.OpARMCMNconst)
3460 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
3461 v.AddArg(x)
3462 return true
3463 }
3464 return false
3465 }
3466 func rewriteValue_OpARMCMNshiftLLreg(v *ssa.Value) bool {
3467 v_2 := v.Args[2]
3468 v_1 := v.Args[1]
3469 v_0 := v.Args[0]
3470 b := v.Block
3471
3472
3473 for {
3474 if v_0.Op != ssaop.OpARMMOVWconst {
3475 break
3476 }
3477 c := ssa.AuxIntToInt32(v_0.AuxInt)
3478 x := v_1
3479 y := v_2
3480 v.Reset(ssaop.OpARMCMNconst)
3481 v.AuxInt = ssa.Int32ToAuxInt(c)
3482 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
3483 v0.AddArg2(x, y)
3484 v.AddArg(v0)
3485 return true
3486 }
3487
3488
3489
3490 for {
3491 x := v_0
3492 y := v_1
3493 if v_2.Op != ssaop.OpARMMOVWconst {
3494 break
3495 }
3496 c := ssa.AuxIntToInt32(v_2.AuxInt)
3497 if !(0 <= c && c < 32) {
3498 break
3499 }
3500 v.Reset(ssaop.OpARMCMNshiftLL)
3501 v.AuxInt = ssa.Int32ToAuxInt(c)
3502 v.AddArg2(x, y)
3503 return true
3504 }
3505 return false
3506 }
3507 func rewriteValue_OpARMCMNshiftRA(v *ssa.Value) bool {
3508 v_1 := v.Args[1]
3509 v_0 := v.Args[0]
3510 b := v.Block
3511
3512
3513 for {
3514 d := ssa.AuxIntToInt32(v.AuxInt)
3515 if v_0.Op != ssaop.OpARMMOVWconst {
3516 break
3517 }
3518 c := ssa.AuxIntToInt32(v_0.AuxInt)
3519 x := v_1
3520 v.Reset(ssaop.OpARMCMNconst)
3521 v.AuxInt = ssa.Int32ToAuxInt(c)
3522 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
3523 v0.AuxInt = ssa.Int32ToAuxInt(d)
3524 v0.AddArg(x)
3525 v.AddArg(v0)
3526 return true
3527 }
3528
3529
3530 for {
3531 d := ssa.AuxIntToInt32(v.AuxInt)
3532 x := v_0
3533 if v_1.Op != ssaop.OpARMMOVWconst {
3534 break
3535 }
3536 c := ssa.AuxIntToInt32(v_1.AuxInt)
3537 v.Reset(ssaop.OpARMCMNconst)
3538 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
3539 v.AddArg(x)
3540 return true
3541 }
3542 return false
3543 }
3544 func rewriteValue_OpARMCMNshiftRAreg(v *ssa.Value) bool {
3545 v_2 := v.Args[2]
3546 v_1 := v.Args[1]
3547 v_0 := v.Args[0]
3548 b := v.Block
3549
3550
3551 for {
3552 if v_0.Op != ssaop.OpARMMOVWconst {
3553 break
3554 }
3555 c := ssa.AuxIntToInt32(v_0.AuxInt)
3556 x := v_1
3557 y := v_2
3558 v.Reset(ssaop.OpARMCMNconst)
3559 v.AuxInt = ssa.Int32ToAuxInt(c)
3560 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
3561 v0.AddArg2(x, y)
3562 v.AddArg(v0)
3563 return true
3564 }
3565
3566
3567
3568 for {
3569 x := v_0
3570 y := v_1
3571 if v_2.Op != ssaop.OpARMMOVWconst {
3572 break
3573 }
3574 c := ssa.AuxIntToInt32(v_2.AuxInt)
3575 if !(0 <= c && c < 32) {
3576 break
3577 }
3578 v.Reset(ssaop.OpARMCMNshiftRA)
3579 v.AuxInt = ssa.Int32ToAuxInt(c)
3580 v.AddArg2(x, y)
3581 return true
3582 }
3583 return false
3584 }
3585 func rewriteValue_OpARMCMNshiftRL(v *ssa.Value) bool {
3586 v_1 := v.Args[1]
3587 v_0 := v.Args[0]
3588 b := v.Block
3589
3590
3591 for {
3592 d := ssa.AuxIntToInt32(v.AuxInt)
3593 if v_0.Op != ssaop.OpARMMOVWconst {
3594 break
3595 }
3596 c := ssa.AuxIntToInt32(v_0.AuxInt)
3597 x := v_1
3598 v.Reset(ssaop.OpARMCMNconst)
3599 v.AuxInt = ssa.Int32ToAuxInt(c)
3600 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
3601 v0.AuxInt = ssa.Int32ToAuxInt(d)
3602 v0.AddArg(x)
3603 v.AddArg(v0)
3604 return true
3605 }
3606
3607
3608 for {
3609 d := ssa.AuxIntToInt32(v.AuxInt)
3610 x := v_0
3611 if v_1.Op != ssaop.OpARMMOVWconst {
3612 break
3613 }
3614 c := ssa.AuxIntToInt32(v_1.AuxInt)
3615 v.Reset(ssaop.OpARMCMNconst)
3616 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3617 v.AddArg(x)
3618 return true
3619 }
3620 return false
3621 }
3622 func rewriteValue_OpARMCMNshiftRLreg(v *ssa.Value) bool {
3623 v_2 := v.Args[2]
3624 v_1 := v.Args[1]
3625 v_0 := v.Args[0]
3626 b := v.Block
3627
3628
3629 for {
3630 if v_0.Op != ssaop.OpARMMOVWconst {
3631 break
3632 }
3633 c := ssa.AuxIntToInt32(v_0.AuxInt)
3634 x := v_1
3635 y := v_2
3636 v.Reset(ssaop.OpARMCMNconst)
3637 v.AuxInt = ssa.Int32ToAuxInt(c)
3638 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
3639 v0.AddArg2(x, y)
3640 v.AddArg(v0)
3641 return true
3642 }
3643
3644
3645
3646 for {
3647 x := v_0
3648 y := v_1
3649 if v_2.Op != ssaop.OpARMMOVWconst {
3650 break
3651 }
3652 c := ssa.AuxIntToInt32(v_2.AuxInt)
3653 if !(0 <= c && c < 32) {
3654 break
3655 }
3656 v.Reset(ssaop.OpARMCMNshiftRL)
3657 v.AuxInt = ssa.Int32ToAuxInt(c)
3658 v.AddArg2(x, y)
3659 return true
3660 }
3661 return false
3662 }
3663 func rewriteValue_OpARMCMOVWHSconst(v *ssa.Value) bool {
3664 v_1 := v.Args[1]
3665 v_0 := v.Args[0]
3666
3667
3668
3669 for {
3670 c := ssa.AuxIntToInt32(v.AuxInt)
3671 if v_1.Op != ssaop.OpARMFlagConstant {
3672 break
3673 }
3674 fc := ssa.AuxIntToFlagConstant(v_1.AuxInt)
3675 if !(fc.Uge()) {
3676 break
3677 }
3678 v.Reset(ssaop.OpARMMOVWconst)
3679 v.AuxInt = ssa.Int32ToAuxInt(c)
3680 return true
3681 }
3682
3683
3684
3685 for {
3686 x := v_0
3687 if v_1.Op != ssaop.OpARMFlagConstant {
3688 break
3689 }
3690 fc := ssa.AuxIntToFlagConstant(v_1.AuxInt)
3691 if !(fc.Ult()) {
3692 break
3693 }
3694 v.CopyOf(x)
3695 return true
3696 }
3697
3698
3699 for {
3700 c := ssa.AuxIntToInt32(v.AuxInt)
3701 x := v_0
3702 if v_1.Op != ssaop.OpARMInvertFlags {
3703 break
3704 }
3705 flags := v_1.Args[0]
3706 v.Reset(ssaop.OpARMCMOVWLSconst)
3707 v.AuxInt = ssa.Int32ToAuxInt(c)
3708 v.AddArg2(x, flags)
3709 return true
3710 }
3711 return false
3712 }
3713 func rewriteValue_OpARMCMOVWLSconst(v *ssa.Value) bool {
3714 v_1 := v.Args[1]
3715 v_0 := v.Args[0]
3716
3717
3718
3719 for {
3720 c := ssa.AuxIntToInt32(v.AuxInt)
3721 if v_1.Op != ssaop.OpARMFlagConstant {
3722 break
3723 }
3724 fc := ssa.AuxIntToFlagConstant(v_1.AuxInt)
3725 if !(fc.Ule()) {
3726 break
3727 }
3728 v.Reset(ssaop.OpARMMOVWconst)
3729 v.AuxInt = ssa.Int32ToAuxInt(c)
3730 return true
3731 }
3732
3733
3734
3735 for {
3736 x := v_0
3737 if v_1.Op != ssaop.OpARMFlagConstant {
3738 break
3739 }
3740 fc := ssa.AuxIntToFlagConstant(v_1.AuxInt)
3741 if !(fc.Ugt()) {
3742 break
3743 }
3744 v.CopyOf(x)
3745 return true
3746 }
3747
3748
3749 for {
3750 c := ssa.AuxIntToInt32(v.AuxInt)
3751 x := v_0
3752 if v_1.Op != ssaop.OpARMInvertFlags {
3753 break
3754 }
3755 flags := v_1.Args[0]
3756 v.Reset(ssaop.OpARMCMOVWHSconst)
3757 v.AuxInt = ssa.Int32ToAuxInt(c)
3758 v.AddArg2(x, flags)
3759 return true
3760 }
3761 return false
3762 }
3763 func rewriteValue_OpARMCMP(v *ssa.Value) bool {
3764 v_1 := v.Args[1]
3765 v_0 := v.Args[0]
3766 b := v.Block
3767
3768
3769 for {
3770 x := v_0
3771 if v_1.Op != ssaop.OpARMMOVWconst {
3772 break
3773 }
3774 c := ssa.AuxIntToInt32(v_1.AuxInt)
3775 v.Reset(ssaop.OpARMCMPconst)
3776 v.AuxInt = ssa.Int32ToAuxInt(c)
3777 v.AddArg(x)
3778 return true
3779 }
3780
3781
3782 for {
3783 if v_0.Op != ssaop.OpARMMOVWconst {
3784 break
3785 }
3786 c := ssa.AuxIntToInt32(v_0.AuxInt)
3787 x := v_1
3788 v.Reset(ssaop.OpARMInvertFlags)
3789 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
3790 v0.AuxInt = ssa.Int32ToAuxInt(c)
3791 v0.AddArg(x)
3792 v.AddArg(v0)
3793 return true
3794 }
3795
3796
3797
3798 for {
3799 x := v_0
3800 y := v_1
3801 if !(ssa.CanonLessThan(x, y)) {
3802 break
3803 }
3804 v.Reset(ssaop.OpARMInvertFlags)
3805 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
3806 v0.AddArg2(y, x)
3807 v.AddArg(v0)
3808 return true
3809 }
3810
3811
3812 for {
3813 x := v_0
3814 if v_1.Op != ssaop.OpARMSLLconst {
3815 break
3816 }
3817 c := ssa.AuxIntToInt32(v_1.AuxInt)
3818 y := v_1.Args[0]
3819 v.Reset(ssaop.OpARMCMPshiftLL)
3820 v.AuxInt = ssa.Int32ToAuxInt(c)
3821 v.AddArg2(x, y)
3822 return true
3823 }
3824
3825
3826 for {
3827 if v_0.Op != ssaop.OpARMSLLconst {
3828 break
3829 }
3830 c := ssa.AuxIntToInt32(v_0.AuxInt)
3831 y := v_0.Args[0]
3832 x := v_1
3833 v.Reset(ssaop.OpARMInvertFlags)
3834 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftLL, types.TypeFlags)
3835 v0.AuxInt = ssa.Int32ToAuxInt(c)
3836 v0.AddArg2(x, y)
3837 v.AddArg(v0)
3838 return true
3839 }
3840
3841
3842 for {
3843 x := v_0
3844 if v_1.Op != ssaop.OpARMSRLconst {
3845 break
3846 }
3847 c := ssa.AuxIntToInt32(v_1.AuxInt)
3848 y := v_1.Args[0]
3849 v.Reset(ssaop.OpARMCMPshiftRL)
3850 v.AuxInt = ssa.Int32ToAuxInt(c)
3851 v.AddArg2(x, y)
3852 return true
3853 }
3854
3855
3856 for {
3857 if v_0.Op != ssaop.OpARMSRLconst {
3858 break
3859 }
3860 c := ssa.AuxIntToInt32(v_0.AuxInt)
3861 y := v_0.Args[0]
3862 x := v_1
3863 v.Reset(ssaop.OpARMInvertFlags)
3864 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftRL, types.TypeFlags)
3865 v0.AuxInt = ssa.Int32ToAuxInt(c)
3866 v0.AddArg2(x, y)
3867 v.AddArg(v0)
3868 return true
3869 }
3870
3871
3872 for {
3873 x := v_0
3874 if v_1.Op != ssaop.OpARMSRAconst {
3875 break
3876 }
3877 c := ssa.AuxIntToInt32(v_1.AuxInt)
3878 y := v_1.Args[0]
3879 v.Reset(ssaop.OpARMCMPshiftRA)
3880 v.AuxInt = ssa.Int32ToAuxInt(c)
3881 v.AddArg2(x, y)
3882 return true
3883 }
3884
3885
3886 for {
3887 if v_0.Op != ssaop.OpARMSRAconst {
3888 break
3889 }
3890 c := ssa.AuxIntToInt32(v_0.AuxInt)
3891 y := v_0.Args[0]
3892 x := v_1
3893 v.Reset(ssaop.OpARMInvertFlags)
3894 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftRA, types.TypeFlags)
3895 v0.AuxInt = ssa.Int32ToAuxInt(c)
3896 v0.AddArg2(x, y)
3897 v.AddArg(v0)
3898 return true
3899 }
3900
3901
3902 for {
3903 x := v_0
3904 if v_1.Op != ssaop.OpARMSLL {
3905 break
3906 }
3907 z := v_1.Args[1]
3908 y := v_1.Args[0]
3909 v.Reset(ssaop.OpARMCMPshiftLLreg)
3910 v.AddArg3(x, y, z)
3911 return true
3912 }
3913
3914
3915 for {
3916 if v_0.Op != ssaop.OpARMSLL {
3917 break
3918 }
3919 z := v_0.Args[1]
3920 y := v_0.Args[0]
3921 x := v_1
3922 v.Reset(ssaop.OpARMInvertFlags)
3923 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftLLreg, types.TypeFlags)
3924 v0.AddArg3(x, y, z)
3925 v.AddArg(v0)
3926 return true
3927 }
3928
3929
3930 for {
3931 x := v_0
3932 if v_1.Op != ssaop.OpARMSRL {
3933 break
3934 }
3935 z := v_1.Args[1]
3936 y := v_1.Args[0]
3937 v.Reset(ssaop.OpARMCMPshiftRLreg)
3938 v.AddArg3(x, y, z)
3939 return true
3940 }
3941
3942
3943 for {
3944 if v_0.Op != ssaop.OpARMSRL {
3945 break
3946 }
3947 z := v_0.Args[1]
3948 y := v_0.Args[0]
3949 x := v_1
3950 v.Reset(ssaop.OpARMInvertFlags)
3951 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftRLreg, types.TypeFlags)
3952 v0.AddArg3(x, y, z)
3953 v.AddArg(v0)
3954 return true
3955 }
3956
3957
3958 for {
3959 x := v_0
3960 if v_1.Op != ssaop.OpARMSRA {
3961 break
3962 }
3963 z := v_1.Args[1]
3964 y := v_1.Args[0]
3965 v.Reset(ssaop.OpARMCMPshiftRAreg)
3966 v.AddArg3(x, y, z)
3967 return true
3968 }
3969
3970
3971 for {
3972 if v_0.Op != ssaop.OpARMSRA {
3973 break
3974 }
3975 z := v_0.Args[1]
3976 y := v_0.Args[0]
3977 x := v_1
3978 v.Reset(ssaop.OpARMInvertFlags)
3979 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPshiftRAreg, types.TypeFlags)
3980 v0.AddArg3(x, y, z)
3981 v.AddArg(v0)
3982 return true
3983 }
3984 return false
3985 }
3986 func rewriteValue_OpARMCMPD(v *ssa.Value) bool {
3987 v_1 := v.Args[1]
3988 v_0 := v.Args[0]
3989
3990
3991 for {
3992 x := v_0
3993 if v_1.Op != ssaop.OpARMMOVDconst || ssa.AuxIntToFloat64(v_1.AuxInt) != 0 {
3994 break
3995 }
3996 v.Reset(ssaop.OpARMCMPD0)
3997 v.AddArg(x)
3998 return true
3999 }
4000 return false
4001 }
4002 func rewriteValue_OpARMCMPF(v *ssa.Value) bool {
4003 v_1 := v.Args[1]
4004 v_0 := v.Args[0]
4005
4006
4007 for {
4008 x := v_0
4009 if v_1.Op != ssaop.OpARMMOVFconst || ssa.AuxIntToFloat64(v_1.AuxInt) != 0 {
4010 break
4011 }
4012 v.Reset(ssaop.OpARMCMPF0)
4013 v.AddArg(x)
4014 return true
4015 }
4016 return false
4017 }
4018 func rewriteValue_OpARMCMPconst(v *ssa.Value) bool {
4019 v_0 := v.Args[0]
4020
4021
4022 for {
4023 y := ssa.AuxIntToInt32(v.AuxInt)
4024 if v_0.Op != ssaop.OpARMMOVWconst {
4025 break
4026 }
4027 x := ssa.AuxIntToInt32(v_0.AuxInt)
4028 v.Reset(ssaop.OpARMFlagConstant)
4029 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.SubFlags32(x, y))
4030 return true
4031 }
4032
4033
4034
4035 for {
4036 c := ssa.AuxIntToInt32(v.AuxInt)
4037 if v_0.Op != ssaop.OpARMMOVBUreg || !(0xff < c) {
4038 break
4039 }
4040 v.Reset(ssaop.OpARMFlagConstant)
4041 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.SubFlags32(0, 1))
4042 return true
4043 }
4044
4045
4046
4047 for {
4048 c := ssa.AuxIntToInt32(v.AuxInt)
4049 if v_0.Op != ssaop.OpARMMOVHUreg || !(0xffff < c) {
4050 break
4051 }
4052 v.Reset(ssaop.OpARMFlagConstant)
4053 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.SubFlags32(0, 1))
4054 return true
4055 }
4056
4057
4058
4059 for {
4060 n := ssa.AuxIntToInt32(v.AuxInt)
4061 if v_0.Op != ssaop.OpARMANDconst {
4062 break
4063 }
4064 m := ssa.AuxIntToInt32(v_0.AuxInt)
4065 if !(0 <= m && m < n) {
4066 break
4067 }
4068 v.Reset(ssaop.OpARMFlagConstant)
4069 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.SubFlags32(0, 1))
4070 return true
4071 }
4072
4073
4074
4075 for {
4076 n := ssa.AuxIntToInt32(v.AuxInt)
4077 if v_0.Op != ssaop.OpARMSRLconst {
4078 break
4079 }
4080 c := ssa.AuxIntToInt32(v_0.AuxInt)
4081 if !(0 <= n && 0 < c && c <= 32 && (1<<uint32(32-c)) <= uint32(n)) {
4082 break
4083 }
4084 v.Reset(ssaop.OpARMFlagConstant)
4085 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.SubFlags32(0, 1))
4086 return true
4087 }
4088 return false
4089 }
4090 func rewriteValue_OpARMCMPshiftLL(v *ssa.Value) bool {
4091 v_1 := v.Args[1]
4092 v_0 := v.Args[0]
4093 b := v.Block
4094
4095
4096 for {
4097 d := ssa.AuxIntToInt32(v.AuxInt)
4098 if v_0.Op != ssaop.OpARMMOVWconst {
4099 break
4100 }
4101 c := ssa.AuxIntToInt32(v_0.AuxInt)
4102 x := v_1
4103 v.Reset(ssaop.OpARMInvertFlags)
4104 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4105 v0.AuxInt = ssa.Int32ToAuxInt(c)
4106 v1 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
4107 v1.AuxInt = ssa.Int32ToAuxInt(d)
4108 v1.AddArg(x)
4109 v0.AddArg(v1)
4110 v.AddArg(v0)
4111 return true
4112 }
4113
4114
4115 for {
4116 d := ssa.AuxIntToInt32(v.AuxInt)
4117 x := v_0
4118 if v_1.Op != ssaop.OpARMMOVWconst {
4119 break
4120 }
4121 c := ssa.AuxIntToInt32(v_1.AuxInt)
4122 v.Reset(ssaop.OpARMCMPconst)
4123 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
4124 v.AddArg(x)
4125 return true
4126 }
4127 return false
4128 }
4129 func rewriteValue_OpARMCMPshiftLLreg(v *ssa.Value) bool {
4130 v_2 := v.Args[2]
4131 v_1 := v.Args[1]
4132 v_0 := v.Args[0]
4133 b := v.Block
4134
4135
4136 for {
4137 if v_0.Op != ssaop.OpARMMOVWconst {
4138 break
4139 }
4140 c := ssa.AuxIntToInt32(v_0.AuxInt)
4141 x := v_1
4142 y := v_2
4143 v.Reset(ssaop.OpARMInvertFlags)
4144 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4145 v0.AuxInt = ssa.Int32ToAuxInt(c)
4146 v1 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
4147 v1.AddArg2(x, y)
4148 v0.AddArg(v1)
4149 v.AddArg(v0)
4150 return true
4151 }
4152
4153
4154
4155 for {
4156 x := v_0
4157 y := v_1
4158 if v_2.Op != ssaop.OpARMMOVWconst {
4159 break
4160 }
4161 c := ssa.AuxIntToInt32(v_2.AuxInt)
4162 if !(0 <= c && c < 32) {
4163 break
4164 }
4165 v.Reset(ssaop.OpARMCMPshiftLL)
4166 v.AuxInt = ssa.Int32ToAuxInt(c)
4167 v.AddArg2(x, y)
4168 return true
4169 }
4170 return false
4171 }
4172 func rewriteValue_OpARMCMPshiftRA(v *ssa.Value) bool {
4173 v_1 := v.Args[1]
4174 v_0 := v.Args[0]
4175 b := v.Block
4176
4177
4178 for {
4179 d := ssa.AuxIntToInt32(v.AuxInt)
4180 if v_0.Op != ssaop.OpARMMOVWconst {
4181 break
4182 }
4183 c := ssa.AuxIntToInt32(v_0.AuxInt)
4184 x := v_1
4185 v.Reset(ssaop.OpARMInvertFlags)
4186 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4187 v0.AuxInt = ssa.Int32ToAuxInt(c)
4188 v1 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
4189 v1.AuxInt = ssa.Int32ToAuxInt(d)
4190 v1.AddArg(x)
4191 v0.AddArg(v1)
4192 v.AddArg(v0)
4193 return true
4194 }
4195
4196
4197 for {
4198 d := ssa.AuxIntToInt32(v.AuxInt)
4199 x := v_0
4200 if v_1.Op != ssaop.OpARMMOVWconst {
4201 break
4202 }
4203 c := ssa.AuxIntToInt32(v_1.AuxInt)
4204 v.Reset(ssaop.OpARMCMPconst)
4205 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
4206 v.AddArg(x)
4207 return true
4208 }
4209 return false
4210 }
4211 func rewriteValue_OpARMCMPshiftRAreg(v *ssa.Value) bool {
4212 v_2 := v.Args[2]
4213 v_1 := v.Args[1]
4214 v_0 := v.Args[0]
4215 b := v.Block
4216
4217
4218 for {
4219 if v_0.Op != ssaop.OpARMMOVWconst {
4220 break
4221 }
4222 c := ssa.AuxIntToInt32(v_0.AuxInt)
4223 x := v_1
4224 y := v_2
4225 v.Reset(ssaop.OpARMInvertFlags)
4226 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4227 v0.AuxInt = ssa.Int32ToAuxInt(c)
4228 v1 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
4229 v1.AddArg2(x, y)
4230 v0.AddArg(v1)
4231 v.AddArg(v0)
4232 return true
4233 }
4234
4235
4236
4237 for {
4238 x := v_0
4239 y := v_1
4240 if v_2.Op != ssaop.OpARMMOVWconst {
4241 break
4242 }
4243 c := ssa.AuxIntToInt32(v_2.AuxInt)
4244 if !(0 <= c && c < 32) {
4245 break
4246 }
4247 v.Reset(ssaop.OpARMCMPshiftRA)
4248 v.AuxInt = ssa.Int32ToAuxInt(c)
4249 v.AddArg2(x, y)
4250 return true
4251 }
4252 return false
4253 }
4254 func rewriteValue_OpARMCMPshiftRL(v *ssa.Value) bool {
4255 v_1 := v.Args[1]
4256 v_0 := v.Args[0]
4257 b := v.Block
4258
4259
4260 for {
4261 d := ssa.AuxIntToInt32(v.AuxInt)
4262 if v_0.Op != ssaop.OpARMMOVWconst {
4263 break
4264 }
4265 c := ssa.AuxIntToInt32(v_0.AuxInt)
4266 x := v_1
4267 v.Reset(ssaop.OpARMInvertFlags)
4268 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4269 v0.AuxInt = ssa.Int32ToAuxInt(c)
4270 v1 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
4271 v1.AuxInt = ssa.Int32ToAuxInt(d)
4272 v1.AddArg(x)
4273 v0.AddArg(v1)
4274 v.AddArg(v0)
4275 return true
4276 }
4277
4278
4279 for {
4280 d := ssa.AuxIntToInt32(v.AuxInt)
4281 x := v_0
4282 if v_1.Op != ssaop.OpARMMOVWconst {
4283 break
4284 }
4285 c := ssa.AuxIntToInt32(v_1.AuxInt)
4286 v.Reset(ssaop.OpARMCMPconst)
4287 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
4288 v.AddArg(x)
4289 return true
4290 }
4291 return false
4292 }
4293 func rewriteValue_OpARMCMPshiftRLreg(v *ssa.Value) bool {
4294 v_2 := v.Args[2]
4295 v_1 := v.Args[1]
4296 v_0 := v.Args[0]
4297 b := v.Block
4298
4299
4300 for {
4301 if v_0.Op != ssaop.OpARMMOVWconst {
4302 break
4303 }
4304 c := ssa.AuxIntToInt32(v_0.AuxInt)
4305 x := v_1
4306 y := v_2
4307 v.Reset(ssaop.OpARMInvertFlags)
4308 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
4309 v0.AuxInt = ssa.Int32ToAuxInt(c)
4310 v1 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
4311 v1.AddArg2(x, y)
4312 v0.AddArg(v1)
4313 v.AddArg(v0)
4314 return true
4315 }
4316
4317
4318
4319 for {
4320 x := v_0
4321 y := v_1
4322 if v_2.Op != ssaop.OpARMMOVWconst {
4323 break
4324 }
4325 c := ssa.AuxIntToInt32(v_2.AuxInt)
4326 if !(0 <= c && c < 32) {
4327 break
4328 }
4329 v.Reset(ssaop.OpARMCMPshiftRL)
4330 v.AuxInt = ssa.Int32ToAuxInt(c)
4331 v.AddArg2(x, y)
4332 return true
4333 }
4334 return false
4335 }
4336 func rewriteValue_OpARMEqual(v *ssa.Value) bool {
4337 v_0 := v.Args[0]
4338
4339
4340 for {
4341 if v_0.Op != ssaop.OpARMFlagConstant {
4342 break
4343 }
4344 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4345 v.Reset(ssaop.OpARMMOVWconst)
4346 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Eq()))
4347 return true
4348 }
4349
4350
4351 for {
4352 if v_0.Op != ssaop.OpARMInvertFlags {
4353 break
4354 }
4355 x := v_0.Args[0]
4356 v.Reset(ssaop.OpARMEqual)
4357 v.AddArg(x)
4358 return true
4359 }
4360 return false
4361 }
4362 func rewriteValue_OpARMGreaterEqual(v *ssa.Value) bool {
4363 v_0 := v.Args[0]
4364
4365
4366 for {
4367 if v_0.Op != ssaop.OpARMFlagConstant {
4368 break
4369 }
4370 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4371 v.Reset(ssaop.OpARMMOVWconst)
4372 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Ge()))
4373 return true
4374 }
4375
4376
4377 for {
4378 if v_0.Op != ssaop.OpARMInvertFlags {
4379 break
4380 }
4381 x := v_0.Args[0]
4382 v.Reset(ssaop.OpARMLessEqual)
4383 v.AddArg(x)
4384 return true
4385 }
4386 return false
4387 }
4388 func rewriteValue_OpARMGreaterEqualU(v *ssa.Value) bool {
4389 v_0 := v.Args[0]
4390
4391
4392 for {
4393 if v_0.Op != ssaop.OpARMFlagConstant {
4394 break
4395 }
4396 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4397 v.Reset(ssaop.OpARMMOVWconst)
4398 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Uge()))
4399 return true
4400 }
4401
4402
4403 for {
4404 if v_0.Op != ssaop.OpARMInvertFlags {
4405 break
4406 }
4407 x := v_0.Args[0]
4408 v.Reset(ssaop.OpARMLessEqualU)
4409 v.AddArg(x)
4410 return true
4411 }
4412 return false
4413 }
4414 func rewriteValue_OpARMGreaterThan(v *ssa.Value) bool {
4415 v_0 := v.Args[0]
4416
4417
4418 for {
4419 if v_0.Op != ssaop.OpARMFlagConstant {
4420 break
4421 }
4422 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4423 v.Reset(ssaop.OpARMMOVWconst)
4424 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Gt()))
4425 return true
4426 }
4427
4428
4429 for {
4430 if v_0.Op != ssaop.OpARMInvertFlags {
4431 break
4432 }
4433 x := v_0.Args[0]
4434 v.Reset(ssaop.OpARMLessThan)
4435 v.AddArg(x)
4436 return true
4437 }
4438 return false
4439 }
4440 func rewriteValue_OpARMGreaterThanU(v *ssa.Value) bool {
4441 v_0 := v.Args[0]
4442
4443
4444 for {
4445 if v_0.Op != ssaop.OpARMFlagConstant {
4446 break
4447 }
4448 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4449 v.Reset(ssaop.OpARMMOVWconst)
4450 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Ugt()))
4451 return true
4452 }
4453
4454
4455 for {
4456 if v_0.Op != ssaop.OpARMInvertFlags {
4457 break
4458 }
4459 x := v_0.Args[0]
4460 v.Reset(ssaop.OpARMLessThanU)
4461 v.AddArg(x)
4462 return true
4463 }
4464 return false
4465 }
4466 func rewriteValue_OpARMLessEqual(v *ssa.Value) bool {
4467 v_0 := v.Args[0]
4468
4469
4470 for {
4471 if v_0.Op != ssaop.OpARMFlagConstant {
4472 break
4473 }
4474 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4475 v.Reset(ssaop.OpARMMOVWconst)
4476 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Le()))
4477 return true
4478 }
4479
4480
4481 for {
4482 if v_0.Op != ssaop.OpARMInvertFlags {
4483 break
4484 }
4485 x := v_0.Args[0]
4486 v.Reset(ssaop.OpARMGreaterEqual)
4487 v.AddArg(x)
4488 return true
4489 }
4490 return false
4491 }
4492 func rewriteValue_OpARMLessEqualU(v *ssa.Value) bool {
4493 v_0 := v.Args[0]
4494
4495
4496 for {
4497 if v_0.Op != ssaop.OpARMFlagConstant {
4498 break
4499 }
4500 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4501 v.Reset(ssaop.OpARMMOVWconst)
4502 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Ule()))
4503 return true
4504 }
4505
4506
4507 for {
4508 if v_0.Op != ssaop.OpARMInvertFlags {
4509 break
4510 }
4511 x := v_0.Args[0]
4512 v.Reset(ssaop.OpARMGreaterEqualU)
4513 v.AddArg(x)
4514 return true
4515 }
4516 return false
4517 }
4518 func rewriteValue_OpARMLessThan(v *ssa.Value) bool {
4519 v_0 := v.Args[0]
4520
4521
4522 for {
4523 if v_0.Op != ssaop.OpARMFlagConstant {
4524 break
4525 }
4526 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4527 v.Reset(ssaop.OpARMMOVWconst)
4528 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Lt()))
4529 return true
4530 }
4531
4532
4533 for {
4534 if v_0.Op != ssaop.OpARMInvertFlags {
4535 break
4536 }
4537 x := v_0.Args[0]
4538 v.Reset(ssaop.OpARMGreaterThan)
4539 v.AddArg(x)
4540 return true
4541 }
4542 return false
4543 }
4544 func rewriteValue_OpARMLessThanU(v *ssa.Value) bool {
4545 v_0 := v.Args[0]
4546
4547
4548 for {
4549 if v_0.Op != ssaop.OpARMFlagConstant {
4550 break
4551 }
4552 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
4553 v.Reset(ssaop.OpARMMOVWconst)
4554 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Ult()))
4555 return true
4556 }
4557
4558
4559 for {
4560 if v_0.Op != ssaop.OpARMInvertFlags {
4561 break
4562 }
4563 x := v_0.Args[0]
4564 v.Reset(ssaop.OpARMGreaterThanU)
4565 v.AddArg(x)
4566 return true
4567 }
4568 return false
4569 }
4570 func rewriteValue_OpARMLoweredPanicBoundsRC(v *ssa.Value) bool {
4571 v_1 := v.Args[1]
4572 v_0 := v.Args[0]
4573
4574
4575 for {
4576 kind := ssa.AuxIntToInt64(v.AuxInt)
4577 p := ssa.AuxToPanicBoundsC(v.Aux)
4578 if v_0.Op != ssaop.OpARMMOVWconst {
4579 break
4580 }
4581 c := ssa.AuxIntToInt32(v_0.AuxInt)
4582 mem := v_1
4583 v.Reset(ssaop.OpARMLoweredPanicBoundsCC)
4584 v.AuxInt = ssa.Int64ToAuxInt(kind)
4585 v.Aux = ssa.PanicBoundsCCToAux(ssa.PanicBoundsCC{Cx: int64(c), Cy: p.C})
4586 v.AddArg(mem)
4587 return true
4588 }
4589 return false
4590 }
4591 func rewriteValue_OpARMLoweredPanicBoundsRR(v *ssa.Value) bool {
4592 v_2 := v.Args[2]
4593 v_1 := v.Args[1]
4594 v_0 := v.Args[0]
4595
4596
4597 for {
4598 kind := ssa.AuxIntToInt64(v.AuxInt)
4599 x := v_0
4600 if v_1.Op != ssaop.OpARMMOVWconst {
4601 break
4602 }
4603 c := ssa.AuxIntToInt32(v_1.AuxInt)
4604 mem := v_2
4605 v.Reset(ssaop.OpARMLoweredPanicBoundsRC)
4606 v.AuxInt = ssa.Int64ToAuxInt(kind)
4607 v.Aux = ssa.PanicBoundsCToAux(ssa.PanicBoundsC{C: int64(c)})
4608 v.AddArg2(x, mem)
4609 return true
4610 }
4611
4612
4613 for {
4614 kind := ssa.AuxIntToInt64(v.AuxInt)
4615 if v_0.Op != ssaop.OpARMMOVWconst {
4616 break
4617 }
4618 c := ssa.AuxIntToInt32(v_0.AuxInt)
4619 y := v_1
4620 mem := v_2
4621 v.Reset(ssaop.OpARMLoweredPanicBoundsCR)
4622 v.AuxInt = ssa.Int64ToAuxInt(kind)
4623 v.Aux = ssa.PanicBoundsCToAux(ssa.PanicBoundsC{C: int64(c)})
4624 v.AddArg2(y, mem)
4625 return true
4626 }
4627 return false
4628 }
4629 func rewriteValue_OpARMLoweredPanicExtendRC(v *ssa.Value) bool {
4630 v_2 := v.Args[2]
4631 v_1 := v.Args[1]
4632 v_0 := v.Args[0]
4633
4634
4635 for {
4636 kind := ssa.AuxIntToInt64(v.AuxInt)
4637 p := ssa.AuxToPanicBoundsC(v.Aux)
4638 if v_0.Op != ssaop.OpARMMOVWconst {
4639 break
4640 }
4641 hi := ssa.AuxIntToInt32(v_0.AuxInt)
4642 if v_1.Op != ssaop.OpARMMOVWconst {
4643 break
4644 }
4645 lo := ssa.AuxIntToInt32(v_1.AuxInt)
4646 mem := v_2
4647 v.Reset(ssaop.OpARMLoweredPanicBoundsCC)
4648 v.AuxInt = ssa.Int64ToAuxInt(kind)
4649 v.Aux = ssa.PanicBoundsCCToAux(ssa.PanicBoundsCC{Cx: int64(hi)<<32 + int64(uint32(lo)), Cy: p.C})
4650 v.AddArg(mem)
4651 return true
4652 }
4653 return false
4654 }
4655 func rewriteValue_OpARMLoweredPanicExtendRR(v *ssa.Value) bool {
4656 v_3 := v.Args[3]
4657 v_2 := v.Args[2]
4658 v_1 := v.Args[1]
4659 v_0 := v.Args[0]
4660
4661
4662 for {
4663 kind := ssa.AuxIntToInt64(v.AuxInt)
4664 hi := v_0
4665 lo := v_1
4666 if v_2.Op != ssaop.OpARMMOVWconst {
4667 break
4668 }
4669 c := ssa.AuxIntToInt32(v_2.AuxInt)
4670 mem := v_3
4671 v.Reset(ssaop.OpARMLoweredPanicExtendRC)
4672 v.AuxInt = ssa.Int64ToAuxInt(kind)
4673 v.Aux = ssa.PanicBoundsCToAux(ssa.PanicBoundsC{C: int64(c)})
4674 v.AddArg3(hi, lo, mem)
4675 return true
4676 }
4677
4678
4679 for {
4680 kind := ssa.AuxIntToInt64(v.AuxInt)
4681 if v_0.Op != ssaop.OpARMMOVWconst {
4682 break
4683 }
4684 hi := ssa.AuxIntToInt32(v_0.AuxInt)
4685 if v_1.Op != ssaop.OpARMMOVWconst {
4686 break
4687 }
4688 lo := ssa.AuxIntToInt32(v_1.AuxInt)
4689 y := v_2
4690 mem := v_3
4691 v.Reset(ssaop.OpARMLoweredPanicBoundsCR)
4692 v.AuxInt = ssa.Int64ToAuxInt(kind)
4693 v.Aux = ssa.PanicBoundsCToAux(ssa.PanicBoundsC{C: int64(hi)<<32 + int64(uint32(lo))})
4694 v.AddArg2(y, mem)
4695 return true
4696 }
4697 return false
4698 }
4699 func rewriteValue_OpARMMOVBUload(v *ssa.Value) bool {
4700 v_1 := v.Args[1]
4701 v_0 := v.Args[0]
4702
4703
4704 for {
4705 off1 := ssa.AuxIntToInt32(v.AuxInt)
4706 sym := ssa.AuxToSym(v.Aux)
4707 if v_0.Op != ssaop.OpARMADDconst {
4708 break
4709 }
4710 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4711 ptr := v_0.Args[0]
4712 mem := v_1
4713 v.Reset(ssaop.OpARMMOVBUload)
4714 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
4715 v.Aux = ssa.SymToAux(sym)
4716 v.AddArg2(ptr, mem)
4717 return true
4718 }
4719
4720
4721 for {
4722 off1 := ssa.AuxIntToInt32(v.AuxInt)
4723 sym := ssa.AuxToSym(v.Aux)
4724 if v_0.Op != ssaop.OpARMSUBconst {
4725 break
4726 }
4727 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4728 ptr := v_0.Args[0]
4729 mem := v_1
4730 v.Reset(ssaop.OpARMMOVBUload)
4731 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
4732 v.Aux = ssa.SymToAux(sym)
4733 v.AddArg2(ptr, mem)
4734 return true
4735 }
4736
4737
4738
4739 for {
4740 off1 := ssa.AuxIntToInt32(v.AuxInt)
4741 sym1 := ssa.AuxToSym(v.Aux)
4742 if v_0.Op != ssaop.OpARMMOVWaddr {
4743 break
4744 }
4745 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4746 sym2 := ssa.AuxToSym(v_0.Aux)
4747 ptr := v_0.Args[0]
4748 mem := v_1
4749 if !(ssa.CanMergeSym(sym1, sym2)) {
4750 break
4751 }
4752 v.Reset(ssaop.OpARMMOVBUload)
4753 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
4754 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
4755 v.AddArg2(ptr, mem)
4756 return true
4757 }
4758
4759
4760
4761 for {
4762 off := ssa.AuxIntToInt32(v.AuxInt)
4763 sym := ssa.AuxToSym(v.Aux)
4764 ptr := v_0
4765 if v_1.Op != ssaop.OpARMMOVBstore {
4766 break
4767 }
4768 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
4769 sym2 := ssa.AuxToSym(v_1.Aux)
4770 x := v_1.Args[1]
4771 ptr2 := v_1.Args[0]
4772 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
4773 break
4774 }
4775 v.Reset(ssaop.OpARMMOVBUreg)
4776 v.AddArg(x)
4777 return true
4778 }
4779
4780
4781
4782 for {
4783 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
4784 break
4785 }
4786 sym := ssa.AuxToSym(v.Aux)
4787 if v_0.Op != ssaop.OpARMADD {
4788 break
4789 }
4790 idx := v_0.Args[1]
4791 ptr := v_0.Args[0]
4792 mem := v_1
4793 if !(sym == nil) {
4794 break
4795 }
4796 v.Reset(ssaop.OpARMMOVBUloadidx)
4797 v.AddArg3(ptr, idx, mem)
4798 return true
4799 }
4800
4801
4802
4803 for {
4804 off := ssa.AuxIntToInt32(v.AuxInt)
4805 sym := ssa.AuxToSym(v.Aux)
4806 if v_0.Op != ssaop.OpSB || !(ssa.SymIsRO(sym)) {
4807 break
4808 }
4809 v.Reset(ssaop.OpARMMOVWconst)
4810 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read8(sym, int64(off))))
4811 return true
4812 }
4813 return false
4814 }
4815 func rewriteValue_OpARMMOVBUloadidx(v *ssa.Value) bool {
4816 v_2 := v.Args[2]
4817 v_1 := v.Args[1]
4818 v_0 := v.Args[0]
4819
4820
4821
4822 for {
4823 ptr := v_0
4824 idx := v_1
4825 if v_2.Op != ssaop.OpARMMOVBstoreidx {
4826 break
4827 }
4828 x := v_2.Args[2]
4829 ptr2 := v_2.Args[0]
4830 if idx != v_2.Args[1] || !(ssa.IsSamePtr(ptr, ptr2)) {
4831 break
4832 }
4833 v.Reset(ssaop.OpARMMOVBUreg)
4834 v.AddArg(x)
4835 return true
4836 }
4837
4838
4839 for {
4840 ptr := v_0
4841 if v_1.Op != ssaop.OpARMMOVWconst {
4842 break
4843 }
4844 c := ssa.AuxIntToInt32(v_1.AuxInt)
4845 mem := v_2
4846 v.Reset(ssaop.OpARMMOVBUload)
4847 v.AuxInt = ssa.Int32ToAuxInt(c)
4848 v.AddArg2(ptr, mem)
4849 return true
4850 }
4851
4852
4853 for {
4854 if v_0.Op != ssaop.OpARMMOVWconst {
4855 break
4856 }
4857 c := ssa.AuxIntToInt32(v_0.AuxInt)
4858 ptr := v_1
4859 mem := v_2
4860 v.Reset(ssaop.OpARMMOVBUload)
4861 v.AuxInt = ssa.Int32ToAuxInt(c)
4862 v.AddArg2(ptr, mem)
4863 return true
4864 }
4865 return false
4866 }
4867 func rewriteValue_OpARMMOVBUreg(v *ssa.Value) bool {
4868 v_0 := v.Args[0]
4869
4870
4871 for {
4872 x := v_0
4873 if x.Op != ssaop.OpARMMOVBUload {
4874 break
4875 }
4876 v.Reset(ssaop.OpARMMOVWreg)
4877 v.AddArg(x)
4878 return true
4879 }
4880
4881
4882 for {
4883 if v_0.Op != ssaop.OpARMANDconst {
4884 break
4885 }
4886 c := ssa.AuxIntToInt32(v_0.AuxInt)
4887 x := v_0.Args[0]
4888 v.Reset(ssaop.OpARMANDconst)
4889 v.AuxInt = ssa.Int32ToAuxInt(c & 0xff)
4890 v.AddArg(x)
4891 return true
4892 }
4893
4894
4895 for {
4896 x := v_0
4897 if x.Op != ssaop.OpARMMOVBUreg {
4898 break
4899 }
4900 v.Reset(ssaop.OpARMMOVWreg)
4901 v.AddArg(x)
4902 return true
4903 }
4904
4905
4906 for {
4907 if v_0.Op != ssaop.OpARMMOVWconst {
4908 break
4909 }
4910 c := ssa.AuxIntToInt32(v_0.AuxInt)
4911 v.Reset(ssaop.OpARMMOVWconst)
4912 v.AuxInt = ssa.Int32ToAuxInt(int32(uint8(c)))
4913 return true
4914 }
4915 return false
4916 }
4917 func rewriteValue_OpARMMOVBload(v *ssa.Value) bool {
4918 v_1 := v.Args[1]
4919 v_0 := v.Args[0]
4920
4921
4922 for {
4923 off1 := ssa.AuxIntToInt32(v.AuxInt)
4924 sym := ssa.AuxToSym(v.Aux)
4925 if v_0.Op != ssaop.OpARMADDconst {
4926 break
4927 }
4928 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4929 ptr := v_0.Args[0]
4930 mem := v_1
4931 v.Reset(ssaop.OpARMMOVBload)
4932 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
4933 v.Aux = ssa.SymToAux(sym)
4934 v.AddArg2(ptr, mem)
4935 return true
4936 }
4937
4938
4939 for {
4940 off1 := ssa.AuxIntToInt32(v.AuxInt)
4941 sym := ssa.AuxToSym(v.Aux)
4942 if v_0.Op != ssaop.OpARMSUBconst {
4943 break
4944 }
4945 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4946 ptr := v_0.Args[0]
4947 mem := v_1
4948 v.Reset(ssaop.OpARMMOVBload)
4949 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
4950 v.Aux = ssa.SymToAux(sym)
4951 v.AddArg2(ptr, mem)
4952 return true
4953 }
4954
4955
4956
4957 for {
4958 off1 := ssa.AuxIntToInt32(v.AuxInt)
4959 sym1 := ssa.AuxToSym(v.Aux)
4960 if v_0.Op != ssaop.OpARMMOVWaddr {
4961 break
4962 }
4963 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
4964 sym2 := ssa.AuxToSym(v_0.Aux)
4965 ptr := v_0.Args[0]
4966 mem := v_1
4967 if !(ssa.CanMergeSym(sym1, sym2)) {
4968 break
4969 }
4970 v.Reset(ssaop.OpARMMOVBload)
4971 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
4972 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
4973 v.AddArg2(ptr, mem)
4974 return true
4975 }
4976
4977
4978
4979 for {
4980 off := ssa.AuxIntToInt32(v.AuxInt)
4981 sym := ssa.AuxToSym(v.Aux)
4982 ptr := v_0
4983 if v_1.Op != ssaop.OpARMMOVBstore {
4984 break
4985 }
4986 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
4987 sym2 := ssa.AuxToSym(v_1.Aux)
4988 x := v_1.Args[1]
4989 ptr2 := v_1.Args[0]
4990 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
4991 break
4992 }
4993 v.Reset(ssaop.OpARMMOVBreg)
4994 v.AddArg(x)
4995 return true
4996 }
4997
4998
4999
5000 for {
5001 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
5002 break
5003 }
5004 sym := ssa.AuxToSym(v.Aux)
5005 if v_0.Op != ssaop.OpARMADD {
5006 break
5007 }
5008 idx := v_0.Args[1]
5009 ptr := v_0.Args[0]
5010 mem := v_1
5011 if !(sym == nil) {
5012 break
5013 }
5014 v.Reset(ssaop.OpARMMOVBloadidx)
5015 v.AddArg3(ptr, idx, mem)
5016 return true
5017 }
5018
5019
5020
5021 for {
5022 off := ssa.AuxIntToInt32(v.AuxInt)
5023 sym := ssa.AuxToSym(v.Aux)
5024 if v_0.Op != ssaop.OpSB || !(ssa.SymIsRO(sym)) {
5025 break
5026 }
5027 v.Reset(ssaop.OpARMMOVWconst)
5028 v.AuxInt = ssa.Int32ToAuxInt(int32(int8(ssa.Read8(sym, int64(off)))))
5029 return true
5030 }
5031 return false
5032 }
5033 func rewriteValue_OpARMMOVBloadidx(v *ssa.Value) bool {
5034 v_2 := v.Args[2]
5035 v_1 := v.Args[1]
5036 v_0 := v.Args[0]
5037
5038
5039
5040 for {
5041 ptr := v_0
5042 idx := v_1
5043 if v_2.Op != ssaop.OpARMMOVBstoreidx {
5044 break
5045 }
5046 x := v_2.Args[2]
5047 ptr2 := v_2.Args[0]
5048 if idx != v_2.Args[1] || !(ssa.IsSamePtr(ptr, ptr2)) {
5049 break
5050 }
5051 v.Reset(ssaop.OpARMMOVBreg)
5052 v.AddArg(x)
5053 return true
5054 }
5055
5056
5057 for {
5058 ptr := v_0
5059 if v_1.Op != ssaop.OpARMMOVWconst {
5060 break
5061 }
5062 c := ssa.AuxIntToInt32(v_1.AuxInt)
5063 mem := v_2
5064 v.Reset(ssaop.OpARMMOVBload)
5065 v.AuxInt = ssa.Int32ToAuxInt(c)
5066 v.AddArg2(ptr, mem)
5067 return true
5068 }
5069
5070
5071 for {
5072 if v_0.Op != ssaop.OpARMMOVWconst {
5073 break
5074 }
5075 c := ssa.AuxIntToInt32(v_0.AuxInt)
5076 ptr := v_1
5077 mem := v_2
5078 v.Reset(ssaop.OpARMMOVBload)
5079 v.AuxInt = ssa.Int32ToAuxInt(c)
5080 v.AddArg2(ptr, mem)
5081 return true
5082 }
5083 return false
5084 }
5085 func rewriteValue_OpARMMOVBreg(v *ssa.Value) bool {
5086 v_0 := v.Args[0]
5087
5088
5089 for {
5090 x := v_0
5091 if x.Op != ssaop.OpARMMOVBload {
5092 break
5093 }
5094 v.Reset(ssaop.OpARMMOVWreg)
5095 v.AddArg(x)
5096 return true
5097 }
5098
5099
5100
5101 for {
5102 if v_0.Op != ssaop.OpARMANDconst {
5103 break
5104 }
5105 c := ssa.AuxIntToInt32(v_0.AuxInt)
5106 x := v_0.Args[0]
5107 if !(c&0x80 == 0) {
5108 break
5109 }
5110 v.Reset(ssaop.OpARMANDconst)
5111 v.AuxInt = ssa.Int32ToAuxInt(c & 0x7f)
5112 v.AddArg(x)
5113 return true
5114 }
5115
5116
5117 for {
5118 x := v_0
5119 if x.Op != ssaop.OpARMMOVBreg {
5120 break
5121 }
5122 v.Reset(ssaop.OpARMMOVWreg)
5123 v.AddArg(x)
5124 return true
5125 }
5126
5127
5128 for {
5129 if v_0.Op != ssaop.OpARMMOVWconst {
5130 break
5131 }
5132 c := ssa.AuxIntToInt32(v_0.AuxInt)
5133 v.Reset(ssaop.OpARMMOVWconst)
5134 v.AuxInt = ssa.Int32ToAuxInt(int32(int8(c)))
5135 return true
5136 }
5137 return false
5138 }
5139 func rewriteValue_OpARMMOVBstore(v *ssa.Value) bool {
5140 v_2 := v.Args[2]
5141 v_1 := v.Args[1]
5142 v_0 := v.Args[0]
5143
5144
5145 for {
5146 off1 := ssa.AuxIntToInt32(v.AuxInt)
5147 sym := ssa.AuxToSym(v.Aux)
5148 if v_0.Op != ssaop.OpARMADDconst {
5149 break
5150 }
5151 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5152 ptr := v_0.Args[0]
5153 val := v_1
5154 mem := v_2
5155 v.Reset(ssaop.OpARMMOVBstore)
5156 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5157 v.Aux = ssa.SymToAux(sym)
5158 v.AddArg3(ptr, val, mem)
5159 return true
5160 }
5161
5162
5163 for {
5164 off1 := ssa.AuxIntToInt32(v.AuxInt)
5165 sym := ssa.AuxToSym(v.Aux)
5166 if v_0.Op != ssaop.OpARMSUBconst {
5167 break
5168 }
5169 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5170 ptr := v_0.Args[0]
5171 val := v_1
5172 mem := v_2
5173 v.Reset(ssaop.OpARMMOVBstore)
5174 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5175 v.Aux = ssa.SymToAux(sym)
5176 v.AddArg3(ptr, val, mem)
5177 return true
5178 }
5179
5180
5181
5182 for {
5183 off1 := ssa.AuxIntToInt32(v.AuxInt)
5184 sym1 := ssa.AuxToSym(v.Aux)
5185 if v_0.Op != ssaop.OpARMMOVWaddr {
5186 break
5187 }
5188 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5189 sym2 := ssa.AuxToSym(v_0.Aux)
5190 ptr := v_0.Args[0]
5191 val := v_1
5192 mem := v_2
5193 if !(ssa.CanMergeSym(sym1, sym2)) {
5194 break
5195 }
5196 v.Reset(ssaop.OpARMMOVBstore)
5197 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5198 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5199 v.AddArg3(ptr, val, mem)
5200 return true
5201 }
5202
5203
5204 for {
5205 off := ssa.AuxIntToInt32(v.AuxInt)
5206 sym := ssa.AuxToSym(v.Aux)
5207 ptr := v_0
5208 if v_1.Op != ssaop.OpARMMOVBreg {
5209 break
5210 }
5211 x := v_1.Args[0]
5212 mem := v_2
5213 v.Reset(ssaop.OpARMMOVBstore)
5214 v.AuxInt = ssa.Int32ToAuxInt(off)
5215 v.Aux = ssa.SymToAux(sym)
5216 v.AddArg3(ptr, x, mem)
5217 return true
5218 }
5219
5220
5221 for {
5222 off := ssa.AuxIntToInt32(v.AuxInt)
5223 sym := ssa.AuxToSym(v.Aux)
5224 ptr := v_0
5225 if v_1.Op != ssaop.OpARMMOVBUreg {
5226 break
5227 }
5228 x := v_1.Args[0]
5229 mem := v_2
5230 v.Reset(ssaop.OpARMMOVBstore)
5231 v.AuxInt = ssa.Int32ToAuxInt(off)
5232 v.Aux = ssa.SymToAux(sym)
5233 v.AddArg3(ptr, x, mem)
5234 return true
5235 }
5236
5237
5238 for {
5239 off := ssa.AuxIntToInt32(v.AuxInt)
5240 sym := ssa.AuxToSym(v.Aux)
5241 ptr := v_0
5242 if v_1.Op != ssaop.OpARMMOVHreg {
5243 break
5244 }
5245 x := v_1.Args[0]
5246 mem := v_2
5247 v.Reset(ssaop.OpARMMOVBstore)
5248 v.AuxInt = ssa.Int32ToAuxInt(off)
5249 v.Aux = ssa.SymToAux(sym)
5250 v.AddArg3(ptr, x, mem)
5251 return true
5252 }
5253
5254
5255 for {
5256 off := ssa.AuxIntToInt32(v.AuxInt)
5257 sym := ssa.AuxToSym(v.Aux)
5258 ptr := v_0
5259 if v_1.Op != ssaop.OpARMMOVHUreg {
5260 break
5261 }
5262 x := v_1.Args[0]
5263 mem := v_2
5264 v.Reset(ssaop.OpARMMOVBstore)
5265 v.AuxInt = ssa.Int32ToAuxInt(off)
5266 v.Aux = ssa.SymToAux(sym)
5267 v.AddArg3(ptr, x, mem)
5268 return true
5269 }
5270
5271
5272
5273 for {
5274 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
5275 break
5276 }
5277 sym := ssa.AuxToSym(v.Aux)
5278 if v_0.Op != ssaop.OpARMADD {
5279 break
5280 }
5281 idx := v_0.Args[1]
5282 ptr := v_0.Args[0]
5283 val := v_1
5284 mem := v_2
5285 if !(sym == nil) {
5286 break
5287 }
5288 v.Reset(ssaop.OpARMMOVBstoreidx)
5289 v.AddArg4(ptr, idx, val, mem)
5290 return true
5291 }
5292 return false
5293 }
5294 func rewriteValue_OpARMMOVBstoreidx(v *ssa.Value) bool {
5295 v_3 := v.Args[3]
5296 v_2 := v.Args[2]
5297 v_1 := v.Args[1]
5298 v_0 := v.Args[0]
5299
5300
5301 for {
5302 ptr := v_0
5303 if v_1.Op != ssaop.OpARMMOVWconst {
5304 break
5305 }
5306 c := ssa.AuxIntToInt32(v_1.AuxInt)
5307 val := v_2
5308 mem := v_3
5309 v.Reset(ssaop.OpARMMOVBstore)
5310 v.AuxInt = ssa.Int32ToAuxInt(c)
5311 v.AddArg3(ptr, val, mem)
5312 return true
5313 }
5314
5315
5316 for {
5317 if v_0.Op != ssaop.OpARMMOVWconst {
5318 break
5319 }
5320 c := ssa.AuxIntToInt32(v_0.AuxInt)
5321 ptr := v_1
5322 val := v_2
5323 mem := v_3
5324 v.Reset(ssaop.OpARMMOVBstore)
5325 v.AuxInt = ssa.Int32ToAuxInt(c)
5326 v.AddArg3(ptr, val, mem)
5327 return true
5328 }
5329 return false
5330 }
5331 func rewriteValue_OpARMMOVDload(v *ssa.Value) bool {
5332 v_1 := v.Args[1]
5333 v_0 := v.Args[0]
5334
5335
5336 for {
5337 off1 := ssa.AuxIntToInt32(v.AuxInt)
5338 sym := ssa.AuxToSym(v.Aux)
5339 if v_0.Op != ssaop.OpARMADDconst {
5340 break
5341 }
5342 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5343 ptr := v_0.Args[0]
5344 mem := v_1
5345 v.Reset(ssaop.OpARMMOVDload)
5346 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5347 v.Aux = ssa.SymToAux(sym)
5348 v.AddArg2(ptr, mem)
5349 return true
5350 }
5351
5352
5353 for {
5354 off1 := ssa.AuxIntToInt32(v.AuxInt)
5355 sym := ssa.AuxToSym(v.Aux)
5356 if v_0.Op != ssaop.OpARMSUBconst {
5357 break
5358 }
5359 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5360 ptr := v_0.Args[0]
5361 mem := v_1
5362 v.Reset(ssaop.OpARMMOVDload)
5363 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5364 v.Aux = ssa.SymToAux(sym)
5365 v.AddArg2(ptr, mem)
5366 return true
5367 }
5368
5369
5370
5371 for {
5372 off1 := ssa.AuxIntToInt32(v.AuxInt)
5373 sym1 := ssa.AuxToSym(v.Aux)
5374 if v_0.Op != ssaop.OpARMMOVWaddr {
5375 break
5376 }
5377 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5378 sym2 := ssa.AuxToSym(v_0.Aux)
5379 ptr := v_0.Args[0]
5380 mem := v_1
5381 if !(ssa.CanMergeSym(sym1, sym2)) {
5382 break
5383 }
5384 v.Reset(ssaop.OpARMMOVDload)
5385 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5386 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5387 v.AddArg2(ptr, mem)
5388 return true
5389 }
5390
5391
5392
5393 for {
5394 off := ssa.AuxIntToInt32(v.AuxInt)
5395 sym := ssa.AuxToSym(v.Aux)
5396 ptr := v_0
5397 if v_1.Op != ssaop.OpARMMOVDstore {
5398 break
5399 }
5400 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
5401 sym2 := ssa.AuxToSym(v_1.Aux)
5402 x := v_1.Args[1]
5403 ptr2 := v_1.Args[0]
5404 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
5405 break
5406 }
5407 v.CopyOf(x)
5408 return true
5409 }
5410 return false
5411 }
5412 func rewriteValue_OpARMMOVDstore(v *ssa.Value) bool {
5413 v_2 := v.Args[2]
5414 v_1 := v.Args[1]
5415 v_0 := v.Args[0]
5416
5417
5418 for {
5419 off1 := ssa.AuxIntToInt32(v.AuxInt)
5420 sym := ssa.AuxToSym(v.Aux)
5421 if v_0.Op != ssaop.OpARMADDconst {
5422 break
5423 }
5424 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5425 ptr := v_0.Args[0]
5426 val := v_1
5427 mem := v_2
5428 v.Reset(ssaop.OpARMMOVDstore)
5429 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5430 v.Aux = ssa.SymToAux(sym)
5431 v.AddArg3(ptr, val, mem)
5432 return true
5433 }
5434
5435
5436 for {
5437 off1 := ssa.AuxIntToInt32(v.AuxInt)
5438 sym := ssa.AuxToSym(v.Aux)
5439 if v_0.Op != ssaop.OpARMSUBconst {
5440 break
5441 }
5442 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5443 ptr := v_0.Args[0]
5444 val := v_1
5445 mem := v_2
5446 v.Reset(ssaop.OpARMMOVDstore)
5447 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5448 v.Aux = ssa.SymToAux(sym)
5449 v.AddArg3(ptr, val, mem)
5450 return true
5451 }
5452
5453
5454
5455 for {
5456 off1 := ssa.AuxIntToInt32(v.AuxInt)
5457 sym1 := ssa.AuxToSym(v.Aux)
5458 if v_0.Op != ssaop.OpARMMOVWaddr {
5459 break
5460 }
5461 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5462 sym2 := ssa.AuxToSym(v_0.Aux)
5463 ptr := v_0.Args[0]
5464 val := v_1
5465 mem := v_2
5466 if !(ssa.CanMergeSym(sym1, sym2)) {
5467 break
5468 }
5469 v.Reset(ssaop.OpARMMOVDstore)
5470 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5471 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5472 v.AddArg3(ptr, val, mem)
5473 return true
5474 }
5475 return false
5476 }
5477 func rewriteValue_OpARMMOVFload(v *ssa.Value) bool {
5478 v_1 := v.Args[1]
5479 v_0 := v.Args[0]
5480
5481
5482 for {
5483 off1 := ssa.AuxIntToInt32(v.AuxInt)
5484 sym := ssa.AuxToSym(v.Aux)
5485 if v_0.Op != ssaop.OpARMADDconst {
5486 break
5487 }
5488 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5489 ptr := v_0.Args[0]
5490 mem := v_1
5491 v.Reset(ssaop.OpARMMOVFload)
5492 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5493 v.Aux = ssa.SymToAux(sym)
5494 v.AddArg2(ptr, mem)
5495 return true
5496 }
5497
5498
5499 for {
5500 off1 := ssa.AuxIntToInt32(v.AuxInt)
5501 sym := ssa.AuxToSym(v.Aux)
5502 if v_0.Op != ssaop.OpARMSUBconst {
5503 break
5504 }
5505 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5506 ptr := v_0.Args[0]
5507 mem := v_1
5508 v.Reset(ssaop.OpARMMOVFload)
5509 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5510 v.Aux = ssa.SymToAux(sym)
5511 v.AddArg2(ptr, mem)
5512 return true
5513 }
5514
5515
5516
5517 for {
5518 off1 := ssa.AuxIntToInt32(v.AuxInt)
5519 sym1 := ssa.AuxToSym(v.Aux)
5520 if v_0.Op != ssaop.OpARMMOVWaddr {
5521 break
5522 }
5523 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5524 sym2 := ssa.AuxToSym(v_0.Aux)
5525 ptr := v_0.Args[0]
5526 mem := v_1
5527 if !(ssa.CanMergeSym(sym1, sym2)) {
5528 break
5529 }
5530 v.Reset(ssaop.OpARMMOVFload)
5531 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5532 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5533 v.AddArg2(ptr, mem)
5534 return true
5535 }
5536
5537
5538
5539 for {
5540 off := ssa.AuxIntToInt32(v.AuxInt)
5541 sym := ssa.AuxToSym(v.Aux)
5542 ptr := v_0
5543 if v_1.Op != ssaop.OpARMMOVFstore {
5544 break
5545 }
5546 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
5547 sym2 := ssa.AuxToSym(v_1.Aux)
5548 x := v_1.Args[1]
5549 ptr2 := v_1.Args[0]
5550 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
5551 break
5552 }
5553 v.CopyOf(x)
5554 return true
5555 }
5556 return false
5557 }
5558 func rewriteValue_OpARMMOVFstore(v *ssa.Value) bool {
5559 v_2 := v.Args[2]
5560 v_1 := v.Args[1]
5561 v_0 := v.Args[0]
5562
5563
5564 for {
5565 off1 := ssa.AuxIntToInt32(v.AuxInt)
5566 sym := ssa.AuxToSym(v.Aux)
5567 if v_0.Op != ssaop.OpARMADDconst {
5568 break
5569 }
5570 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5571 ptr := v_0.Args[0]
5572 val := v_1
5573 mem := v_2
5574 v.Reset(ssaop.OpARMMOVFstore)
5575 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5576 v.Aux = ssa.SymToAux(sym)
5577 v.AddArg3(ptr, val, mem)
5578 return true
5579 }
5580
5581
5582 for {
5583 off1 := ssa.AuxIntToInt32(v.AuxInt)
5584 sym := ssa.AuxToSym(v.Aux)
5585 if v_0.Op != ssaop.OpARMSUBconst {
5586 break
5587 }
5588 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5589 ptr := v_0.Args[0]
5590 val := v_1
5591 mem := v_2
5592 v.Reset(ssaop.OpARMMOVFstore)
5593 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5594 v.Aux = ssa.SymToAux(sym)
5595 v.AddArg3(ptr, val, mem)
5596 return true
5597 }
5598
5599
5600
5601 for {
5602 off1 := ssa.AuxIntToInt32(v.AuxInt)
5603 sym1 := ssa.AuxToSym(v.Aux)
5604 if v_0.Op != ssaop.OpARMMOVWaddr {
5605 break
5606 }
5607 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5608 sym2 := ssa.AuxToSym(v_0.Aux)
5609 ptr := v_0.Args[0]
5610 val := v_1
5611 mem := v_2
5612 if !(ssa.CanMergeSym(sym1, sym2)) {
5613 break
5614 }
5615 v.Reset(ssaop.OpARMMOVFstore)
5616 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5617 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5618 v.AddArg3(ptr, val, mem)
5619 return true
5620 }
5621 return false
5622 }
5623 func rewriteValue_OpARMMOVHUload(v *ssa.Value) bool {
5624 v_1 := v.Args[1]
5625 v_0 := v.Args[0]
5626 b := v.Block
5627 config := b.Func.Config
5628
5629
5630 for {
5631 off1 := ssa.AuxIntToInt32(v.AuxInt)
5632 sym := ssa.AuxToSym(v.Aux)
5633 if v_0.Op != ssaop.OpARMADDconst {
5634 break
5635 }
5636 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5637 ptr := v_0.Args[0]
5638 mem := v_1
5639 v.Reset(ssaop.OpARMMOVHUload)
5640 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5641 v.Aux = ssa.SymToAux(sym)
5642 v.AddArg2(ptr, mem)
5643 return true
5644 }
5645
5646
5647 for {
5648 off1 := ssa.AuxIntToInt32(v.AuxInt)
5649 sym := ssa.AuxToSym(v.Aux)
5650 if v_0.Op != ssaop.OpARMSUBconst {
5651 break
5652 }
5653 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5654 ptr := v_0.Args[0]
5655 mem := v_1
5656 v.Reset(ssaop.OpARMMOVHUload)
5657 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5658 v.Aux = ssa.SymToAux(sym)
5659 v.AddArg2(ptr, mem)
5660 return true
5661 }
5662
5663
5664
5665 for {
5666 off1 := ssa.AuxIntToInt32(v.AuxInt)
5667 sym1 := ssa.AuxToSym(v.Aux)
5668 if v_0.Op != ssaop.OpARMMOVWaddr {
5669 break
5670 }
5671 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5672 sym2 := ssa.AuxToSym(v_0.Aux)
5673 ptr := v_0.Args[0]
5674 mem := v_1
5675 if !(ssa.CanMergeSym(sym1, sym2)) {
5676 break
5677 }
5678 v.Reset(ssaop.OpARMMOVHUload)
5679 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5680 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5681 v.AddArg2(ptr, mem)
5682 return true
5683 }
5684
5685
5686
5687 for {
5688 off := ssa.AuxIntToInt32(v.AuxInt)
5689 sym := ssa.AuxToSym(v.Aux)
5690 ptr := v_0
5691 if v_1.Op != ssaop.OpARMMOVHstore {
5692 break
5693 }
5694 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
5695 sym2 := ssa.AuxToSym(v_1.Aux)
5696 x := v_1.Args[1]
5697 ptr2 := v_1.Args[0]
5698 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
5699 break
5700 }
5701 v.Reset(ssaop.OpARMMOVHUreg)
5702 v.AddArg(x)
5703 return true
5704 }
5705
5706
5707
5708 for {
5709 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
5710 break
5711 }
5712 sym := ssa.AuxToSym(v.Aux)
5713 if v_0.Op != ssaop.OpARMADD {
5714 break
5715 }
5716 idx := v_0.Args[1]
5717 ptr := v_0.Args[0]
5718 mem := v_1
5719 if !(sym == nil) {
5720 break
5721 }
5722 v.Reset(ssaop.OpARMMOVHUloadidx)
5723 v.AddArg3(ptr, idx, mem)
5724 return true
5725 }
5726
5727
5728
5729 for {
5730 off := ssa.AuxIntToInt32(v.AuxInt)
5731 sym := ssa.AuxToSym(v.Aux)
5732 if v_0.Op != ssaop.OpSB || !(ssa.SymIsRO(sym)) {
5733 break
5734 }
5735 v.Reset(ssaop.OpARMMOVWconst)
5736 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read16(sym, int64(off), config.Ctxt.Arch.ByteOrder)))
5737 return true
5738 }
5739 return false
5740 }
5741 func rewriteValue_OpARMMOVHUloadidx(v *ssa.Value) bool {
5742 v_2 := v.Args[2]
5743 v_1 := v.Args[1]
5744 v_0 := v.Args[0]
5745
5746
5747
5748 for {
5749 ptr := v_0
5750 idx := v_1
5751 if v_2.Op != ssaop.OpARMMOVHstoreidx {
5752 break
5753 }
5754 x := v_2.Args[2]
5755 ptr2 := v_2.Args[0]
5756 if idx != v_2.Args[1] || !(ssa.IsSamePtr(ptr, ptr2)) {
5757 break
5758 }
5759 v.Reset(ssaop.OpARMMOVHUreg)
5760 v.AddArg(x)
5761 return true
5762 }
5763
5764
5765 for {
5766 ptr := v_0
5767 if v_1.Op != ssaop.OpARMMOVWconst {
5768 break
5769 }
5770 c := ssa.AuxIntToInt32(v_1.AuxInt)
5771 mem := v_2
5772 v.Reset(ssaop.OpARMMOVHUload)
5773 v.AuxInt = ssa.Int32ToAuxInt(c)
5774 v.AddArg2(ptr, mem)
5775 return true
5776 }
5777
5778
5779 for {
5780 if v_0.Op != ssaop.OpARMMOVWconst {
5781 break
5782 }
5783 c := ssa.AuxIntToInt32(v_0.AuxInt)
5784 ptr := v_1
5785 mem := v_2
5786 v.Reset(ssaop.OpARMMOVHUload)
5787 v.AuxInt = ssa.Int32ToAuxInt(c)
5788 v.AddArg2(ptr, mem)
5789 return true
5790 }
5791 return false
5792 }
5793 func rewriteValue_OpARMMOVHUreg(v *ssa.Value) bool {
5794 v_0 := v.Args[0]
5795
5796
5797 for {
5798 x := v_0
5799 if x.Op != ssaop.OpARMMOVBUload {
5800 break
5801 }
5802 v.Reset(ssaop.OpARMMOVWreg)
5803 v.AddArg(x)
5804 return true
5805 }
5806
5807
5808 for {
5809 x := v_0
5810 if x.Op != ssaop.OpARMMOVHUload {
5811 break
5812 }
5813 v.Reset(ssaop.OpARMMOVWreg)
5814 v.AddArg(x)
5815 return true
5816 }
5817
5818
5819 for {
5820 if v_0.Op != ssaop.OpARMANDconst {
5821 break
5822 }
5823 c := ssa.AuxIntToInt32(v_0.AuxInt)
5824 x := v_0.Args[0]
5825 v.Reset(ssaop.OpARMANDconst)
5826 v.AuxInt = ssa.Int32ToAuxInt(c & 0xffff)
5827 v.AddArg(x)
5828 return true
5829 }
5830
5831
5832 for {
5833 x := v_0
5834 if x.Op != ssaop.OpARMMOVBUreg {
5835 break
5836 }
5837 v.Reset(ssaop.OpARMMOVWreg)
5838 v.AddArg(x)
5839 return true
5840 }
5841
5842
5843 for {
5844 x := v_0
5845 if x.Op != ssaop.OpARMMOVHUreg {
5846 break
5847 }
5848 v.Reset(ssaop.OpARMMOVWreg)
5849 v.AddArg(x)
5850 return true
5851 }
5852
5853
5854 for {
5855 if v_0.Op != ssaop.OpARMMOVWconst {
5856 break
5857 }
5858 c := ssa.AuxIntToInt32(v_0.AuxInt)
5859 v.Reset(ssaop.OpARMMOVWconst)
5860 v.AuxInt = ssa.Int32ToAuxInt(int32(uint16(c)))
5861 return true
5862 }
5863 return false
5864 }
5865 func rewriteValue_OpARMMOVHload(v *ssa.Value) bool {
5866 v_1 := v.Args[1]
5867 v_0 := v.Args[0]
5868 b := v.Block
5869 config := b.Func.Config
5870
5871
5872 for {
5873 off1 := ssa.AuxIntToInt32(v.AuxInt)
5874 sym := ssa.AuxToSym(v.Aux)
5875 if v_0.Op != ssaop.OpARMADDconst {
5876 break
5877 }
5878 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5879 ptr := v_0.Args[0]
5880 mem := v_1
5881 v.Reset(ssaop.OpARMMOVHload)
5882 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5883 v.Aux = ssa.SymToAux(sym)
5884 v.AddArg2(ptr, mem)
5885 return true
5886 }
5887
5888
5889 for {
5890 off1 := ssa.AuxIntToInt32(v.AuxInt)
5891 sym := ssa.AuxToSym(v.Aux)
5892 if v_0.Op != ssaop.OpARMSUBconst {
5893 break
5894 }
5895 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5896 ptr := v_0.Args[0]
5897 mem := v_1
5898 v.Reset(ssaop.OpARMMOVHload)
5899 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
5900 v.Aux = ssa.SymToAux(sym)
5901 v.AddArg2(ptr, mem)
5902 return true
5903 }
5904
5905
5906
5907 for {
5908 off1 := ssa.AuxIntToInt32(v.AuxInt)
5909 sym1 := ssa.AuxToSym(v.Aux)
5910 if v_0.Op != ssaop.OpARMMOVWaddr {
5911 break
5912 }
5913 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
5914 sym2 := ssa.AuxToSym(v_0.Aux)
5915 ptr := v_0.Args[0]
5916 mem := v_1
5917 if !(ssa.CanMergeSym(sym1, sym2)) {
5918 break
5919 }
5920 v.Reset(ssaop.OpARMMOVHload)
5921 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
5922 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
5923 v.AddArg2(ptr, mem)
5924 return true
5925 }
5926
5927
5928
5929 for {
5930 off := ssa.AuxIntToInt32(v.AuxInt)
5931 sym := ssa.AuxToSym(v.Aux)
5932 ptr := v_0
5933 if v_1.Op != ssaop.OpARMMOVHstore {
5934 break
5935 }
5936 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
5937 sym2 := ssa.AuxToSym(v_1.Aux)
5938 x := v_1.Args[1]
5939 ptr2 := v_1.Args[0]
5940 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
5941 break
5942 }
5943 v.Reset(ssaop.OpARMMOVHreg)
5944 v.AddArg(x)
5945 return true
5946 }
5947
5948
5949
5950 for {
5951 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
5952 break
5953 }
5954 sym := ssa.AuxToSym(v.Aux)
5955 if v_0.Op != ssaop.OpARMADD {
5956 break
5957 }
5958 idx := v_0.Args[1]
5959 ptr := v_0.Args[0]
5960 mem := v_1
5961 if !(sym == nil) {
5962 break
5963 }
5964 v.Reset(ssaop.OpARMMOVHloadidx)
5965 v.AddArg3(ptr, idx, mem)
5966 return true
5967 }
5968
5969
5970
5971 for {
5972 off := ssa.AuxIntToInt32(v.AuxInt)
5973 sym := ssa.AuxToSym(v.Aux)
5974 if v_0.Op != ssaop.OpSB || !(ssa.SymIsRO(sym)) {
5975 break
5976 }
5977 v.Reset(ssaop.OpARMMOVWconst)
5978 v.AuxInt = ssa.Int32ToAuxInt(int32(int16(ssa.Read16(sym, int64(off), config.Ctxt.Arch.ByteOrder))))
5979 return true
5980 }
5981 return false
5982 }
5983 func rewriteValue_OpARMMOVHloadidx(v *ssa.Value) bool {
5984 v_2 := v.Args[2]
5985 v_1 := v.Args[1]
5986 v_0 := v.Args[0]
5987
5988
5989
5990 for {
5991 ptr := v_0
5992 idx := v_1
5993 if v_2.Op != ssaop.OpARMMOVHstoreidx {
5994 break
5995 }
5996 x := v_2.Args[2]
5997 ptr2 := v_2.Args[0]
5998 if idx != v_2.Args[1] || !(ssa.IsSamePtr(ptr, ptr2)) {
5999 break
6000 }
6001 v.Reset(ssaop.OpARMMOVHreg)
6002 v.AddArg(x)
6003 return true
6004 }
6005
6006
6007 for {
6008 ptr := v_0
6009 if v_1.Op != ssaop.OpARMMOVWconst {
6010 break
6011 }
6012 c := ssa.AuxIntToInt32(v_1.AuxInt)
6013 mem := v_2
6014 v.Reset(ssaop.OpARMMOVHload)
6015 v.AuxInt = ssa.Int32ToAuxInt(c)
6016 v.AddArg2(ptr, mem)
6017 return true
6018 }
6019
6020
6021 for {
6022 if v_0.Op != ssaop.OpARMMOVWconst {
6023 break
6024 }
6025 c := ssa.AuxIntToInt32(v_0.AuxInt)
6026 ptr := v_1
6027 mem := v_2
6028 v.Reset(ssaop.OpARMMOVHload)
6029 v.AuxInt = ssa.Int32ToAuxInt(c)
6030 v.AddArg2(ptr, mem)
6031 return true
6032 }
6033 return false
6034 }
6035 func rewriteValue_OpARMMOVHreg(v *ssa.Value) bool {
6036 v_0 := v.Args[0]
6037
6038
6039 for {
6040 x := v_0
6041 if x.Op != ssaop.OpARMMOVBload {
6042 break
6043 }
6044 v.Reset(ssaop.OpARMMOVWreg)
6045 v.AddArg(x)
6046 return true
6047 }
6048
6049
6050 for {
6051 x := v_0
6052 if x.Op != ssaop.OpARMMOVBUload {
6053 break
6054 }
6055 v.Reset(ssaop.OpARMMOVWreg)
6056 v.AddArg(x)
6057 return true
6058 }
6059
6060
6061 for {
6062 x := v_0
6063 if x.Op != ssaop.OpARMMOVHload {
6064 break
6065 }
6066 v.Reset(ssaop.OpARMMOVWreg)
6067 v.AddArg(x)
6068 return true
6069 }
6070
6071
6072
6073 for {
6074 if v_0.Op != ssaop.OpARMANDconst {
6075 break
6076 }
6077 c := ssa.AuxIntToInt32(v_0.AuxInt)
6078 x := v_0.Args[0]
6079 if !(c&0x8000 == 0) {
6080 break
6081 }
6082 v.Reset(ssaop.OpARMANDconst)
6083 v.AuxInt = ssa.Int32ToAuxInt(c & 0x7fff)
6084 v.AddArg(x)
6085 return true
6086 }
6087
6088
6089 for {
6090 x := v_0
6091 if x.Op != ssaop.OpARMMOVBreg {
6092 break
6093 }
6094 v.Reset(ssaop.OpARMMOVWreg)
6095 v.AddArg(x)
6096 return true
6097 }
6098
6099
6100 for {
6101 x := v_0
6102 if x.Op != ssaop.OpARMMOVBUreg {
6103 break
6104 }
6105 v.Reset(ssaop.OpARMMOVWreg)
6106 v.AddArg(x)
6107 return true
6108 }
6109
6110
6111 for {
6112 x := v_0
6113 if x.Op != ssaop.OpARMMOVHreg {
6114 break
6115 }
6116 v.Reset(ssaop.OpARMMOVWreg)
6117 v.AddArg(x)
6118 return true
6119 }
6120
6121
6122 for {
6123 if v_0.Op != ssaop.OpARMMOVWconst {
6124 break
6125 }
6126 c := ssa.AuxIntToInt32(v_0.AuxInt)
6127 v.Reset(ssaop.OpARMMOVWconst)
6128 v.AuxInt = ssa.Int32ToAuxInt(int32(int16(c)))
6129 return true
6130 }
6131 return false
6132 }
6133 func rewriteValue_OpARMMOVHstore(v *ssa.Value) bool {
6134 v_2 := v.Args[2]
6135 v_1 := v.Args[1]
6136 v_0 := v.Args[0]
6137
6138
6139 for {
6140 off1 := ssa.AuxIntToInt32(v.AuxInt)
6141 sym := ssa.AuxToSym(v.Aux)
6142 if v_0.Op != ssaop.OpARMADDconst {
6143 break
6144 }
6145 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6146 ptr := v_0.Args[0]
6147 val := v_1
6148 mem := v_2
6149 v.Reset(ssaop.OpARMMOVHstore)
6150 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6151 v.Aux = ssa.SymToAux(sym)
6152 v.AddArg3(ptr, val, mem)
6153 return true
6154 }
6155
6156
6157 for {
6158 off1 := ssa.AuxIntToInt32(v.AuxInt)
6159 sym := ssa.AuxToSym(v.Aux)
6160 if v_0.Op != ssaop.OpARMSUBconst {
6161 break
6162 }
6163 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6164 ptr := v_0.Args[0]
6165 val := v_1
6166 mem := v_2
6167 v.Reset(ssaop.OpARMMOVHstore)
6168 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
6169 v.Aux = ssa.SymToAux(sym)
6170 v.AddArg3(ptr, val, mem)
6171 return true
6172 }
6173
6174
6175
6176 for {
6177 off1 := ssa.AuxIntToInt32(v.AuxInt)
6178 sym1 := ssa.AuxToSym(v.Aux)
6179 if v_0.Op != ssaop.OpARMMOVWaddr {
6180 break
6181 }
6182 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6183 sym2 := ssa.AuxToSym(v_0.Aux)
6184 ptr := v_0.Args[0]
6185 val := v_1
6186 mem := v_2
6187 if !(ssa.CanMergeSym(sym1, sym2)) {
6188 break
6189 }
6190 v.Reset(ssaop.OpARMMOVHstore)
6191 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6192 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
6193 v.AddArg3(ptr, val, mem)
6194 return true
6195 }
6196
6197
6198 for {
6199 off := ssa.AuxIntToInt32(v.AuxInt)
6200 sym := ssa.AuxToSym(v.Aux)
6201 ptr := v_0
6202 if v_1.Op != ssaop.OpARMMOVHreg {
6203 break
6204 }
6205 x := v_1.Args[0]
6206 mem := v_2
6207 v.Reset(ssaop.OpARMMOVHstore)
6208 v.AuxInt = ssa.Int32ToAuxInt(off)
6209 v.Aux = ssa.SymToAux(sym)
6210 v.AddArg3(ptr, x, mem)
6211 return true
6212 }
6213
6214
6215 for {
6216 off := ssa.AuxIntToInt32(v.AuxInt)
6217 sym := ssa.AuxToSym(v.Aux)
6218 ptr := v_0
6219 if v_1.Op != ssaop.OpARMMOVHUreg {
6220 break
6221 }
6222 x := v_1.Args[0]
6223 mem := v_2
6224 v.Reset(ssaop.OpARMMOVHstore)
6225 v.AuxInt = ssa.Int32ToAuxInt(off)
6226 v.Aux = ssa.SymToAux(sym)
6227 v.AddArg3(ptr, x, mem)
6228 return true
6229 }
6230
6231
6232
6233 for {
6234 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6235 break
6236 }
6237 sym := ssa.AuxToSym(v.Aux)
6238 if v_0.Op != ssaop.OpARMADD {
6239 break
6240 }
6241 idx := v_0.Args[1]
6242 ptr := v_0.Args[0]
6243 val := v_1
6244 mem := v_2
6245 if !(sym == nil) {
6246 break
6247 }
6248 v.Reset(ssaop.OpARMMOVHstoreidx)
6249 v.AddArg4(ptr, idx, val, mem)
6250 return true
6251 }
6252 return false
6253 }
6254 func rewriteValue_OpARMMOVHstoreidx(v *ssa.Value) bool {
6255 v_3 := v.Args[3]
6256 v_2 := v.Args[2]
6257 v_1 := v.Args[1]
6258 v_0 := v.Args[0]
6259
6260
6261 for {
6262 ptr := v_0
6263 if v_1.Op != ssaop.OpARMMOVWconst {
6264 break
6265 }
6266 c := ssa.AuxIntToInt32(v_1.AuxInt)
6267 val := v_2
6268 mem := v_3
6269 v.Reset(ssaop.OpARMMOVHstore)
6270 v.AuxInt = ssa.Int32ToAuxInt(c)
6271 v.AddArg3(ptr, val, mem)
6272 return true
6273 }
6274
6275
6276 for {
6277 if v_0.Op != ssaop.OpARMMOVWconst {
6278 break
6279 }
6280 c := ssa.AuxIntToInt32(v_0.AuxInt)
6281 ptr := v_1
6282 val := v_2
6283 mem := v_3
6284 v.Reset(ssaop.OpARMMOVHstore)
6285 v.AuxInt = ssa.Int32ToAuxInt(c)
6286 v.AddArg3(ptr, val, mem)
6287 return true
6288 }
6289 return false
6290 }
6291 func rewriteValue_OpARMMOVWload(v *ssa.Value) bool {
6292 v_1 := v.Args[1]
6293 v_0 := v.Args[0]
6294 b := v.Block
6295 config := b.Func.Config
6296
6297
6298 for {
6299 off1 := ssa.AuxIntToInt32(v.AuxInt)
6300 sym := ssa.AuxToSym(v.Aux)
6301 if v_0.Op != ssaop.OpARMADDconst {
6302 break
6303 }
6304 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6305 ptr := v_0.Args[0]
6306 mem := v_1
6307 v.Reset(ssaop.OpARMMOVWload)
6308 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6309 v.Aux = ssa.SymToAux(sym)
6310 v.AddArg2(ptr, mem)
6311 return true
6312 }
6313
6314
6315 for {
6316 off1 := ssa.AuxIntToInt32(v.AuxInt)
6317 sym := ssa.AuxToSym(v.Aux)
6318 if v_0.Op != ssaop.OpARMSUBconst {
6319 break
6320 }
6321 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6322 ptr := v_0.Args[0]
6323 mem := v_1
6324 v.Reset(ssaop.OpARMMOVWload)
6325 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
6326 v.Aux = ssa.SymToAux(sym)
6327 v.AddArg2(ptr, mem)
6328 return true
6329 }
6330
6331
6332
6333 for {
6334 off1 := ssa.AuxIntToInt32(v.AuxInt)
6335 sym1 := ssa.AuxToSym(v.Aux)
6336 if v_0.Op != ssaop.OpARMMOVWaddr {
6337 break
6338 }
6339 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6340 sym2 := ssa.AuxToSym(v_0.Aux)
6341 ptr := v_0.Args[0]
6342 mem := v_1
6343 if !(ssa.CanMergeSym(sym1, sym2)) {
6344 break
6345 }
6346 v.Reset(ssaop.OpARMMOVWload)
6347 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6348 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
6349 v.AddArg2(ptr, mem)
6350 return true
6351 }
6352
6353
6354
6355 for {
6356 off := ssa.AuxIntToInt32(v.AuxInt)
6357 sym := ssa.AuxToSym(v.Aux)
6358 ptr := v_0
6359 if v_1.Op != ssaop.OpARMMOVWstore {
6360 break
6361 }
6362 off2 := ssa.AuxIntToInt32(v_1.AuxInt)
6363 sym2 := ssa.AuxToSym(v_1.Aux)
6364 x := v_1.Args[1]
6365 ptr2 := v_1.Args[0]
6366 if !(sym == sym2 && off == off2 && ssa.IsSamePtr(ptr, ptr2)) {
6367 break
6368 }
6369 v.CopyOf(x)
6370 return true
6371 }
6372
6373
6374
6375 for {
6376 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6377 break
6378 }
6379 sym := ssa.AuxToSym(v.Aux)
6380 if v_0.Op != ssaop.OpARMADD {
6381 break
6382 }
6383 idx := v_0.Args[1]
6384 ptr := v_0.Args[0]
6385 mem := v_1
6386 if !(sym == nil) {
6387 break
6388 }
6389 v.Reset(ssaop.OpARMMOVWloadidx)
6390 v.AddArg3(ptr, idx, mem)
6391 return true
6392 }
6393
6394
6395
6396 for {
6397 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6398 break
6399 }
6400 sym := ssa.AuxToSym(v.Aux)
6401 if v_0.Op != ssaop.OpARMADDshiftLL {
6402 break
6403 }
6404 c := ssa.AuxIntToInt32(v_0.AuxInt)
6405 idx := v_0.Args[1]
6406 ptr := v_0.Args[0]
6407 mem := v_1
6408 if !(sym == nil) {
6409 break
6410 }
6411 v.Reset(ssaop.OpARMMOVWloadshiftLL)
6412 v.AuxInt = ssa.Int32ToAuxInt(c)
6413 v.AddArg3(ptr, idx, mem)
6414 return true
6415 }
6416
6417
6418
6419 for {
6420 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6421 break
6422 }
6423 sym := ssa.AuxToSym(v.Aux)
6424 if v_0.Op != ssaop.OpARMADDshiftRL {
6425 break
6426 }
6427 c := ssa.AuxIntToInt32(v_0.AuxInt)
6428 idx := v_0.Args[1]
6429 ptr := v_0.Args[0]
6430 mem := v_1
6431 if !(sym == nil) {
6432 break
6433 }
6434 v.Reset(ssaop.OpARMMOVWloadshiftRL)
6435 v.AuxInt = ssa.Int32ToAuxInt(c)
6436 v.AddArg3(ptr, idx, mem)
6437 return true
6438 }
6439
6440
6441
6442 for {
6443 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6444 break
6445 }
6446 sym := ssa.AuxToSym(v.Aux)
6447 if v_0.Op != ssaop.OpARMADDshiftRA {
6448 break
6449 }
6450 c := ssa.AuxIntToInt32(v_0.AuxInt)
6451 idx := v_0.Args[1]
6452 ptr := v_0.Args[0]
6453 mem := v_1
6454 if !(sym == nil) {
6455 break
6456 }
6457 v.Reset(ssaop.OpARMMOVWloadshiftRA)
6458 v.AuxInt = ssa.Int32ToAuxInt(c)
6459 v.AddArg3(ptr, idx, mem)
6460 return true
6461 }
6462
6463
6464
6465 for {
6466 off := ssa.AuxIntToInt32(v.AuxInt)
6467 sym := ssa.AuxToSym(v.Aux)
6468 if v_0.Op != ssaop.OpSB || !(ssa.SymIsRO(sym)) {
6469 break
6470 }
6471 v.Reset(ssaop.OpARMMOVWconst)
6472 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(sym, int64(off), config.Ctxt.Arch.ByteOrder)))
6473 return true
6474 }
6475 return false
6476 }
6477 func rewriteValue_OpARMMOVWloadidx(v *ssa.Value) bool {
6478 v_2 := v.Args[2]
6479 v_1 := v.Args[1]
6480 v_0 := v.Args[0]
6481
6482
6483
6484 for {
6485 ptr := v_0
6486 idx := v_1
6487 if v_2.Op != ssaop.OpARMMOVWstoreidx {
6488 break
6489 }
6490 x := v_2.Args[2]
6491 ptr2 := v_2.Args[0]
6492 if idx != v_2.Args[1] || !(ssa.IsSamePtr(ptr, ptr2)) {
6493 break
6494 }
6495 v.CopyOf(x)
6496 return true
6497 }
6498
6499
6500 for {
6501 ptr := v_0
6502 if v_1.Op != ssaop.OpARMMOVWconst {
6503 break
6504 }
6505 c := ssa.AuxIntToInt32(v_1.AuxInt)
6506 mem := v_2
6507 v.Reset(ssaop.OpARMMOVWload)
6508 v.AuxInt = ssa.Int32ToAuxInt(c)
6509 v.AddArg2(ptr, mem)
6510 return true
6511 }
6512
6513
6514 for {
6515 if v_0.Op != ssaop.OpARMMOVWconst {
6516 break
6517 }
6518 c := ssa.AuxIntToInt32(v_0.AuxInt)
6519 ptr := v_1
6520 mem := v_2
6521 v.Reset(ssaop.OpARMMOVWload)
6522 v.AuxInt = ssa.Int32ToAuxInt(c)
6523 v.AddArg2(ptr, mem)
6524 return true
6525 }
6526
6527
6528 for {
6529 ptr := v_0
6530 if v_1.Op != ssaop.OpARMSLLconst {
6531 break
6532 }
6533 c := ssa.AuxIntToInt32(v_1.AuxInt)
6534 idx := v_1.Args[0]
6535 mem := v_2
6536 v.Reset(ssaop.OpARMMOVWloadshiftLL)
6537 v.AuxInt = ssa.Int32ToAuxInt(c)
6538 v.AddArg3(ptr, idx, mem)
6539 return true
6540 }
6541
6542
6543 for {
6544 if v_0.Op != ssaop.OpARMSLLconst {
6545 break
6546 }
6547 c := ssa.AuxIntToInt32(v_0.AuxInt)
6548 idx := v_0.Args[0]
6549 ptr := v_1
6550 mem := v_2
6551 v.Reset(ssaop.OpARMMOVWloadshiftLL)
6552 v.AuxInt = ssa.Int32ToAuxInt(c)
6553 v.AddArg3(ptr, idx, mem)
6554 return true
6555 }
6556
6557
6558 for {
6559 ptr := v_0
6560 if v_1.Op != ssaop.OpARMSRLconst {
6561 break
6562 }
6563 c := ssa.AuxIntToInt32(v_1.AuxInt)
6564 idx := v_1.Args[0]
6565 mem := v_2
6566 v.Reset(ssaop.OpARMMOVWloadshiftRL)
6567 v.AuxInt = ssa.Int32ToAuxInt(c)
6568 v.AddArg3(ptr, idx, mem)
6569 return true
6570 }
6571
6572
6573 for {
6574 if v_0.Op != ssaop.OpARMSRLconst {
6575 break
6576 }
6577 c := ssa.AuxIntToInt32(v_0.AuxInt)
6578 idx := v_0.Args[0]
6579 ptr := v_1
6580 mem := v_2
6581 v.Reset(ssaop.OpARMMOVWloadshiftRL)
6582 v.AuxInt = ssa.Int32ToAuxInt(c)
6583 v.AddArg3(ptr, idx, mem)
6584 return true
6585 }
6586
6587
6588 for {
6589 ptr := v_0
6590 if v_1.Op != ssaop.OpARMSRAconst {
6591 break
6592 }
6593 c := ssa.AuxIntToInt32(v_1.AuxInt)
6594 idx := v_1.Args[0]
6595 mem := v_2
6596 v.Reset(ssaop.OpARMMOVWloadshiftRA)
6597 v.AuxInt = ssa.Int32ToAuxInt(c)
6598 v.AddArg3(ptr, idx, mem)
6599 return true
6600 }
6601
6602
6603 for {
6604 if v_0.Op != ssaop.OpARMSRAconst {
6605 break
6606 }
6607 c := ssa.AuxIntToInt32(v_0.AuxInt)
6608 idx := v_0.Args[0]
6609 ptr := v_1
6610 mem := v_2
6611 v.Reset(ssaop.OpARMMOVWloadshiftRA)
6612 v.AuxInt = ssa.Int32ToAuxInt(c)
6613 v.AddArg3(ptr, idx, mem)
6614 return true
6615 }
6616 return false
6617 }
6618 func rewriteValue_OpARMMOVWloadshiftLL(v *ssa.Value) bool {
6619 v_2 := v.Args[2]
6620 v_1 := v.Args[1]
6621 v_0 := v.Args[0]
6622
6623
6624
6625 for {
6626 c := ssa.AuxIntToInt32(v.AuxInt)
6627 ptr := v_0
6628 idx := v_1
6629 if v_2.Op != ssaop.OpARMMOVWstoreshiftLL {
6630 break
6631 }
6632 d := ssa.AuxIntToInt32(v_2.AuxInt)
6633 x := v_2.Args[2]
6634 ptr2 := v_2.Args[0]
6635 if idx != v_2.Args[1] || !(c == d && ssa.IsSamePtr(ptr, ptr2)) {
6636 break
6637 }
6638 v.CopyOf(x)
6639 return true
6640 }
6641
6642
6643 for {
6644 d := ssa.AuxIntToInt32(v.AuxInt)
6645 ptr := v_0
6646 if v_1.Op != ssaop.OpARMMOVWconst {
6647 break
6648 }
6649 c := ssa.AuxIntToInt32(v_1.AuxInt)
6650 mem := v_2
6651 v.Reset(ssaop.OpARMMOVWload)
6652 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) << uint64(d)))
6653 v.AddArg2(ptr, mem)
6654 return true
6655 }
6656 return false
6657 }
6658 func rewriteValue_OpARMMOVWloadshiftRA(v *ssa.Value) bool {
6659 v_2 := v.Args[2]
6660 v_1 := v.Args[1]
6661 v_0 := v.Args[0]
6662
6663
6664
6665 for {
6666 c := ssa.AuxIntToInt32(v.AuxInt)
6667 ptr := v_0
6668 idx := v_1
6669 if v_2.Op != ssaop.OpARMMOVWstoreshiftRA {
6670 break
6671 }
6672 d := ssa.AuxIntToInt32(v_2.AuxInt)
6673 x := v_2.Args[2]
6674 ptr2 := v_2.Args[0]
6675 if idx != v_2.Args[1] || !(c == d && ssa.IsSamePtr(ptr, ptr2)) {
6676 break
6677 }
6678 v.CopyOf(x)
6679 return true
6680 }
6681
6682
6683 for {
6684 d := ssa.AuxIntToInt32(v.AuxInt)
6685 ptr := v_0
6686 if v_1.Op != ssaop.OpARMMOVWconst {
6687 break
6688 }
6689 c := ssa.AuxIntToInt32(v_1.AuxInt)
6690 mem := v_2
6691 v.Reset(ssaop.OpARMMOVWload)
6692 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
6693 v.AddArg2(ptr, mem)
6694 return true
6695 }
6696 return false
6697 }
6698 func rewriteValue_OpARMMOVWloadshiftRL(v *ssa.Value) bool {
6699 v_2 := v.Args[2]
6700 v_1 := v.Args[1]
6701 v_0 := v.Args[0]
6702
6703
6704
6705 for {
6706 c := ssa.AuxIntToInt32(v.AuxInt)
6707 ptr := v_0
6708 idx := v_1
6709 if v_2.Op != ssaop.OpARMMOVWstoreshiftRL {
6710 break
6711 }
6712 d := ssa.AuxIntToInt32(v_2.AuxInt)
6713 x := v_2.Args[2]
6714 ptr2 := v_2.Args[0]
6715 if idx != v_2.Args[1] || !(c == d && ssa.IsSamePtr(ptr, ptr2)) {
6716 break
6717 }
6718 v.CopyOf(x)
6719 return true
6720 }
6721
6722
6723 for {
6724 d := ssa.AuxIntToInt32(v.AuxInt)
6725 ptr := v_0
6726 if v_1.Op != ssaop.OpARMMOVWconst {
6727 break
6728 }
6729 c := ssa.AuxIntToInt32(v_1.AuxInt)
6730 mem := v_2
6731 v.Reset(ssaop.OpARMMOVWload)
6732 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
6733 v.AddArg2(ptr, mem)
6734 return true
6735 }
6736 return false
6737 }
6738 func rewriteValue_OpARMMOVWnop(v *ssa.Value) bool {
6739 v_0 := v.Args[0]
6740
6741
6742 for {
6743 if v_0.Op != ssaop.OpARMMOVWconst {
6744 break
6745 }
6746 c := ssa.AuxIntToInt32(v_0.AuxInt)
6747 v.Reset(ssaop.OpARMMOVWconst)
6748 v.AuxInt = ssa.Int32ToAuxInt(c)
6749 return true
6750 }
6751 return false
6752 }
6753 func rewriteValue_OpARMMOVWreg(v *ssa.Value) bool {
6754 v_0 := v.Args[0]
6755
6756
6757
6758 for {
6759 x := v_0
6760 if !(x.Uses == 1) {
6761 break
6762 }
6763 v.Reset(ssaop.OpARMMOVWnop)
6764 v.AddArg(x)
6765 return true
6766 }
6767
6768
6769 for {
6770 if v_0.Op != ssaop.OpARMMOVWconst {
6771 break
6772 }
6773 c := ssa.AuxIntToInt32(v_0.AuxInt)
6774 v.Reset(ssaop.OpARMMOVWconst)
6775 v.AuxInt = ssa.Int32ToAuxInt(c)
6776 return true
6777 }
6778 return false
6779 }
6780 func rewriteValue_OpARMMOVWstore(v *ssa.Value) bool {
6781 v_2 := v.Args[2]
6782 v_1 := v.Args[1]
6783 v_0 := v.Args[0]
6784
6785
6786 for {
6787 off1 := ssa.AuxIntToInt32(v.AuxInt)
6788 sym := ssa.AuxToSym(v.Aux)
6789 if v_0.Op != ssaop.OpARMADDconst {
6790 break
6791 }
6792 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6793 ptr := v_0.Args[0]
6794 val := v_1
6795 mem := v_2
6796 v.Reset(ssaop.OpARMMOVWstore)
6797 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6798 v.Aux = ssa.SymToAux(sym)
6799 v.AddArg3(ptr, val, mem)
6800 return true
6801 }
6802
6803
6804 for {
6805 off1 := ssa.AuxIntToInt32(v.AuxInt)
6806 sym := ssa.AuxToSym(v.Aux)
6807 if v_0.Op != ssaop.OpARMSUBconst {
6808 break
6809 }
6810 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6811 ptr := v_0.Args[0]
6812 val := v_1
6813 mem := v_2
6814 v.Reset(ssaop.OpARMMOVWstore)
6815 v.AuxInt = ssa.Int32ToAuxInt(off1 - off2)
6816 v.Aux = ssa.SymToAux(sym)
6817 v.AddArg3(ptr, val, mem)
6818 return true
6819 }
6820
6821
6822
6823 for {
6824 off1 := ssa.AuxIntToInt32(v.AuxInt)
6825 sym1 := ssa.AuxToSym(v.Aux)
6826 if v_0.Op != ssaop.OpARMMOVWaddr {
6827 break
6828 }
6829 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
6830 sym2 := ssa.AuxToSym(v_0.Aux)
6831 ptr := v_0.Args[0]
6832 val := v_1
6833 mem := v_2
6834 if !(ssa.CanMergeSym(sym1, sym2)) {
6835 break
6836 }
6837 v.Reset(ssaop.OpARMMOVWstore)
6838 v.AuxInt = ssa.Int32ToAuxInt(off1 + off2)
6839 v.Aux = ssa.SymToAux(ssa.MergeSym(sym1, sym2))
6840 v.AddArg3(ptr, val, mem)
6841 return true
6842 }
6843
6844
6845
6846 for {
6847 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6848 break
6849 }
6850 sym := ssa.AuxToSym(v.Aux)
6851 if v_0.Op != ssaop.OpARMADD {
6852 break
6853 }
6854 idx := v_0.Args[1]
6855 ptr := v_0.Args[0]
6856 val := v_1
6857 mem := v_2
6858 if !(sym == nil) {
6859 break
6860 }
6861 v.Reset(ssaop.OpARMMOVWstoreidx)
6862 v.AddArg4(ptr, idx, val, mem)
6863 return true
6864 }
6865
6866
6867
6868 for {
6869 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6870 break
6871 }
6872 sym := ssa.AuxToSym(v.Aux)
6873 if v_0.Op != ssaop.OpARMADDshiftLL {
6874 break
6875 }
6876 c := ssa.AuxIntToInt32(v_0.AuxInt)
6877 idx := v_0.Args[1]
6878 ptr := v_0.Args[0]
6879 val := v_1
6880 mem := v_2
6881 if !(sym == nil) {
6882 break
6883 }
6884 v.Reset(ssaop.OpARMMOVWstoreshiftLL)
6885 v.AuxInt = ssa.Int32ToAuxInt(c)
6886 v.AddArg4(ptr, idx, val, mem)
6887 return true
6888 }
6889
6890
6891
6892 for {
6893 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6894 break
6895 }
6896 sym := ssa.AuxToSym(v.Aux)
6897 if v_0.Op != ssaop.OpARMADDshiftRL {
6898 break
6899 }
6900 c := ssa.AuxIntToInt32(v_0.AuxInt)
6901 idx := v_0.Args[1]
6902 ptr := v_0.Args[0]
6903 val := v_1
6904 mem := v_2
6905 if !(sym == nil) {
6906 break
6907 }
6908 v.Reset(ssaop.OpARMMOVWstoreshiftRL)
6909 v.AuxInt = ssa.Int32ToAuxInt(c)
6910 v.AddArg4(ptr, idx, val, mem)
6911 return true
6912 }
6913
6914
6915
6916 for {
6917 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
6918 break
6919 }
6920 sym := ssa.AuxToSym(v.Aux)
6921 if v_0.Op != ssaop.OpARMADDshiftRA {
6922 break
6923 }
6924 c := ssa.AuxIntToInt32(v_0.AuxInt)
6925 idx := v_0.Args[1]
6926 ptr := v_0.Args[0]
6927 val := v_1
6928 mem := v_2
6929 if !(sym == nil) {
6930 break
6931 }
6932 v.Reset(ssaop.OpARMMOVWstoreshiftRA)
6933 v.AuxInt = ssa.Int32ToAuxInt(c)
6934 v.AddArg4(ptr, idx, val, mem)
6935 return true
6936 }
6937 return false
6938 }
6939 func rewriteValue_OpARMMOVWstoreidx(v *ssa.Value) bool {
6940 v_3 := v.Args[3]
6941 v_2 := v.Args[2]
6942 v_1 := v.Args[1]
6943 v_0 := v.Args[0]
6944
6945
6946 for {
6947 ptr := v_0
6948 if v_1.Op != ssaop.OpARMMOVWconst {
6949 break
6950 }
6951 c := ssa.AuxIntToInt32(v_1.AuxInt)
6952 val := v_2
6953 mem := v_3
6954 v.Reset(ssaop.OpARMMOVWstore)
6955 v.AuxInt = ssa.Int32ToAuxInt(c)
6956 v.AddArg3(ptr, val, mem)
6957 return true
6958 }
6959
6960
6961 for {
6962 if v_0.Op != ssaop.OpARMMOVWconst {
6963 break
6964 }
6965 c := ssa.AuxIntToInt32(v_0.AuxInt)
6966 ptr := v_1
6967 val := v_2
6968 mem := v_3
6969 v.Reset(ssaop.OpARMMOVWstore)
6970 v.AuxInt = ssa.Int32ToAuxInt(c)
6971 v.AddArg3(ptr, val, mem)
6972 return true
6973 }
6974
6975
6976 for {
6977 ptr := v_0
6978 if v_1.Op != ssaop.OpARMSLLconst {
6979 break
6980 }
6981 c := ssa.AuxIntToInt32(v_1.AuxInt)
6982 idx := v_1.Args[0]
6983 val := v_2
6984 mem := v_3
6985 v.Reset(ssaop.OpARMMOVWstoreshiftLL)
6986 v.AuxInt = ssa.Int32ToAuxInt(c)
6987 v.AddArg4(ptr, idx, val, mem)
6988 return true
6989 }
6990
6991
6992 for {
6993 if v_0.Op != ssaop.OpARMSLLconst {
6994 break
6995 }
6996 c := ssa.AuxIntToInt32(v_0.AuxInt)
6997 idx := v_0.Args[0]
6998 ptr := v_1
6999 val := v_2
7000 mem := v_3
7001 v.Reset(ssaop.OpARMMOVWstoreshiftLL)
7002 v.AuxInt = ssa.Int32ToAuxInt(c)
7003 v.AddArg4(ptr, idx, val, mem)
7004 return true
7005 }
7006
7007
7008 for {
7009 ptr := v_0
7010 if v_1.Op != ssaop.OpARMSRLconst {
7011 break
7012 }
7013 c := ssa.AuxIntToInt32(v_1.AuxInt)
7014 idx := v_1.Args[0]
7015 val := v_2
7016 mem := v_3
7017 v.Reset(ssaop.OpARMMOVWstoreshiftRL)
7018 v.AuxInt = ssa.Int32ToAuxInt(c)
7019 v.AddArg4(ptr, idx, val, mem)
7020 return true
7021 }
7022
7023
7024 for {
7025 if v_0.Op != ssaop.OpARMSRLconst {
7026 break
7027 }
7028 c := ssa.AuxIntToInt32(v_0.AuxInt)
7029 idx := v_0.Args[0]
7030 ptr := v_1
7031 val := v_2
7032 mem := v_3
7033 v.Reset(ssaop.OpARMMOVWstoreshiftRL)
7034 v.AuxInt = ssa.Int32ToAuxInt(c)
7035 v.AddArg4(ptr, idx, val, mem)
7036 return true
7037 }
7038
7039
7040 for {
7041 ptr := v_0
7042 if v_1.Op != ssaop.OpARMSRAconst {
7043 break
7044 }
7045 c := ssa.AuxIntToInt32(v_1.AuxInt)
7046 idx := v_1.Args[0]
7047 val := v_2
7048 mem := v_3
7049 v.Reset(ssaop.OpARMMOVWstoreshiftRA)
7050 v.AuxInt = ssa.Int32ToAuxInt(c)
7051 v.AddArg4(ptr, idx, val, mem)
7052 return true
7053 }
7054
7055
7056 for {
7057 if v_0.Op != ssaop.OpARMSRAconst {
7058 break
7059 }
7060 c := ssa.AuxIntToInt32(v_0.AuxInt)
7061 idx := v_0.Args[0]
7062 ptr := v_1
7063 val := v_2
7064 mem := v_3
7065 v.Reset(ssaop.OpARMMOVWstoreshiftRA)
7066 v.AuxInt = ssa.Int32ToAuxInt(c)
7067 v.AddArg4(ptr, idx, val, mem)
7068 return true
7069 }
7070 return false
7071 }
7072 func rewriteValue_OpARMMOVWstoreshiftLL(v *ssa.Value) bool {
7073 v_3 := v.Args[3]
7074 v_2 := v.Args[2]
7075 v_1 := v.Args[1]
7076 v_0 := v.Args[0]
7077
7078
7079 for {
7080 d := ssa.AuxIntToInt32(v.AuxInt)
7081 ptr := v_0
7082 if v_1.Op != ssaop.OpARMMOVWconst {
7083 break
7084 }
7085 c := ssa.AuxIntToInt32(v_1.AuxInt)
7086 val := v_2
7087 mem := v_3
7088 v.Reset(ssaop.OpARMMOVWstore)
7089 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) << uint64(d)))
7090 v.AddArg3(ptr, val, mem)
7091 return true
7092 }
7093 return false
7094 }
7095 func rewriteValue_OpARMMOVWstoreshiftRA(v *ssa.Value) bool {
7096 v_3 := v.Args[3]
7097 v_2 := v.Args[2]
7098 v_1 := v.Args[1]
7099 v_0 := v.Args[0]
7100
7101
7102 for {
7103 d := ssa.AuxIntToInt32(v.AuxInt)
7104 ptr := v_0
7105 if v_1.Op != ssaop.OpARMMOVWconst {
7106 break
7107 }
7108 c := ssa.AuxIntToInt32(v_1.AuxInt)
7109 val := v_2
7110 mem := v_3
7111 v.Reset(ssaop.OpARMMOVWstore)
7112 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
7113 v.AddArg3(ptr, val, mem)
7114 return true
7115 }
7116 return false
7117 }
7118 func rewriteValue_OpARMMOVWstoreshiftRL(v *ssa.Value) bool {
7119 v_3 := v.Args[3]
7120 v_2 := v.Args[2]
7121 v_1 := v.Args[1]
7122 v_0 := v.Args[0]
7123
7124
7125 for {
7126 d := ssa.AuxIntToInt32(v.AuxInt)
7127 ptr := v_0
7128 if v_1.Op != ssaop.OpARMMOVWconst {
7129 break
7130 }
7131 c := ssa.AuxIntToInt32(v_1.AuxInt)
7132 val := v_2
7133 mem := v_3
7134 v.Reset(ssaop.OpARMMOVWstore)
7135 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
7136 v.AddArg3(ptr, val, mem)
7137 return true
7138 }
7139 return false
7140 }
7141 func rewriteValue_OpARMMUL(v *ssa.Value) bool {
7142 v_1 := v.Args[1]
7143 v_0 := v.Args[0]
7144 b := v.Block
7145
7146
7147
7148 for {
7149 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7150 x := v_0
7151 if v_1.Op != ssaop.OpARMMOVWconst {
7152 continue
7153 }
7154 c := ssa.AuxIntToInt32(v_1.AuxInt)
7155 if !(int32(c) == -1) {
7156 continue
7157 }
7158 v.Reset(ssaop.OpARMRSBconst)
7159 v.AuxInt = ssa.Int32ToAuxInt(0)
7160 v.AddArg(x)
7161 return true
7162 }
7163 break
7164 }
7165
7166
7167 for {
7168 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7169 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
7170 continue
7171 }
7172 v.Reset(ssaop.OpARMMOVWconst)
7173 v.AuxInt = ssa.Int32ToAuxInt(0)
7174 return true
7175 }
7176 break
7177 }
7178
7179
7180 for {
7181 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7182 x := v_0
7183 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
7184 continue
7185 }
7186 v.CopyOf(x)
7187 return true
7188 }
7189 break
7190 }
7191
7192
7193
7194 for {
7195 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7196 x := v_0
7197 if v_1.Op != ssaop.OpARMMOVWconst {
7198 continue
7199 }
7200 c := ssa.AuxIntToInt32(v_1.AuxInt)
7201 if !(ssa.IsPowerOfTwo(c)) {
7202 continue
7203 }
7204 v.Reset(ssaop.OpARMSLLconst)
7205 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
7206 v.AddArg(x)
7207 return true
7208 }
7209 break
7210 }
7211
7212
7213
7214 for {
7215 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7216 x := v_0
7217 if v_1.Op != ssaop.OpARMMOVWconst {
7218 continue
7219 }
7220 c := ssa.AuxIntToInt32(v_1.AuxInt)
7221 if !(ssa.IsPowerOfTwo(c-1) && c >= 3) {
7222 continue
7223 }
7224 v.Reset(ssaop.OpARMADDshiftLL)
7225 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c - 1)))
7226 v.AddArg2(x, x)
7227 return true
7228 }
7229 break
7230 }
7231
7232
7233
7234 for {
7235 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7236 x := v_0
7237 if v_1.Op != ssaop.OpARMMOVWconst {
7238 continue
7239 }
7240 c := ssa.AuxIntToInt32(v_1.AuxInt)
7241 if !(ssa.IsPowerOfTwo(c+1) && c >= 7) {
7242 continue
7243 }
7244 v.Reset(ssaop.OpARMRSBshiftLL)
7245 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c + 1)))
7246 v.AddArg2(x, x)
7247 return true
7248 }
7249 break
7250 }
7251
7252
7253
7254 for {
7255 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7256 x := v_0
7257 if v_1.Op != ssaop.OpARMMOVWconst {
7258 continue
7259 }
7260 c := ssa.AuxIntToInt32(v_1.AuxInt)
7261 if !(c%3 == 0 && ssa.IsPowerOfTwo(c/3)) {
7262 continue
7263 }
7264 v.Reset(ssaop.OpARMSLLconst)
7265 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 3)))
7266 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7267 v0.AuxInt = ssa.Int32ToAuxInt(1)
7268 v0.AddArg2(x, x)
7269 v.AddArg(v0)
7270 return true
7271 }
7272 break
7273 }
7274
7275
7276
7277 for {
7278 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7279 x := v_0
7280 if v_1.Op != ssaop.OpARMMOVWconst {
7281 continue
7282 }
7283 c := ssa.AuxIntToInt32(v_1.AuxInt)
7284 if !(c%5 == 0 && ssa.IsPowerOfTwo(c/5)) {
7285 continue
7286 }
7287 v.Reset(ssaop.OpARMSLLconst)
7288 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 5)))
7289 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7290 v0.AuxInt = ssa.Int32ToAuxInt(2)
7291 v0.AddArg2(x, x)
7292 v.AddArg(v0)
7293 return true
7294 }
7295 break
7296 }
7297
7298
7299
7300 for {
7301 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7302 x := v_0
7303 if v_1.Op != ssaop.OpARMMOVWconst {
7304 continue
7305 }
7306 c := ssa.AuxIntToInt32(v_1.AuxInt)
7307 if !(c%7 == 0 && ssa.IsPowerOfTwo(c/7)) {
7308 continue
7309 }
7310 v.Reset(ssaop.OpARMSLLconst)
7311 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 7)))
7312 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7313 v0.AuxInt = ssa.Int32ToAuxInt(3)
7314 v0.AddArg2(x, x)
7315 v.AddArg(v0)
7316 return true
7317 }
7318 break
7319 }
7320
7321
7322
7323 for {
7324 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7325 x := v_0
7326 if v_1.Op != ssaop.OpARMMOVWconst {
7327 continue
7328 }
7329 c := ssa.AuxIntToInt32(v_1.AuxInt)
7330 if !(c%9 == 0 && ssa.IsPowerOfTwo(c/9)) {
7331 continue
7332 }
7333 v.Reset(ssaop.OpARMSLLconst)
7334 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 9)))
7335 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7336 v0.AuxInt = ssa.Int32ToAuxInt(3)
7337 v0.AddArg2(x, x)
7338 v.AddArg(v0)
7339 return true
7340 }
7341 break
7342 }
7343
7344
7345 for {
7346 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7347 if v_0.Op != ssaop.OpARMMOVWconst {
7348 continue
7349 }
7350 c := ssa.AuxIntToInt32(v_0.AuxInt)
7351 if v_1.Op != ssaop.OpARMMOVWconst {
7352 continue
7353 }
7354 d := ssa.AuxIntToInt32(v_1.AuxInt)
7355 v.Reset(ssaop.OpARMMOVWconst)
7356 v.AuxInt = ssa.Int32ToAuxInt(c * d)
7357 return true
7358 }
7359 break
7360 }
7361 return false
7362 }
7363 func rewriteValue_OpARMMULA(v *ssa.Value) bool {
7364 v_2 := v.Args[2]
7365 v_1 := v.Args[1]
7366 v_0 := v.Args[0]
7367 b := v.Block
7368
7369
7370
7371 for {
7372 x := v_0
7373 if v_1.Op != ssaop.OpARMMOVWconst {
7374 break
7375 }
7376 c := ssa.AuxIntToInt32(v_1.AuxInt)
7377 a := v_2
7378 if !(c == -1) {
7379 break
7380 }
7381 v.Reset(ssaop.OpARMSUB)
7382 v.AddArg2(a, x)
7383 return true
7384 }
7385
7386
7387 for {
7388 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
7389 break
7390 }
7391 a := v_2
7392 v.CopyOf(a)
7393 return true
7394 }
7395
7396
7397 for {
7398 x := v_0
7399 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
7400 break
7401 }
7402 a := v_2
7403 v.Reset(ssaop.OpARMADD)
7404 v.AddArg2(x, a)
7405 return true
7406 }
7407
7408
7409
7410 for {
7411 x := v_0
7412 if v_1.Op != ssaop.OpARMMOVWconst {
7413 break
7414 }
7415 c := ssa.AuxIntToInt32(v_1.AuxInt)
7416 a := v_2
7417 if !(ssa.IsPowerOfTwo(c)) {
7418 break
7419 }
7420 v.Reset(ssaop.OpARMADD)
7421 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7422 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
7423 v0.AddArg(x)
7424 v.AddArg2(v0, a)
7425 return true
7426 }
7427
7428
7429
7430 for {
7431 x := v_0
7432 if v_1.Op != ssaop.OpARMMOVWconst {
7433 break
7434 }
7435 c := ssa.AuxIntToInt32(v_1.AuxInt)
7436 a := v_2
7437 if !(ssa.IsPowerOfTwo(c-1) && c >= 3) {
7438 break
7439 }
7440 v.Reset(ssaop.OpARMADD)
7441 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7442 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c - 1)))
7443 v0.AddArg2(x, x)
7444 v.AddArg2(v0, a)
7445 return true
7446 }
7447
7448
7449
7450 for {
7451 x := v_0
7452 if v_1.Op != ssaop.OpARMMOVWconst {
7453 break
7454 }
7455 c := ssa.AuxIntToInt32(v_1.AuxInt)
7456 a := v_2
7457 if !(ssa.IsPowerOfTwo(c+1) && c >= 7) {
7458 break
7459 }
7460 v.Reset(ssaop.OpARMADD)
7461 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7462 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c + 1)))
7463 v0.AddArg2(x, x)
7464 v.AddArg2(v0, a)
7465 return true
7466 }
7467
7468
7469
7470 for {
7471 x := v_0
7472 if v_1.Op != ssaop.OpARMMOVWconst {
7473 break
7474 }
7475 c := ssa.AuxIntToInt32(v_1.AuxInt)
7476 a := v_2
7477 if !(c%3 == 0 && ssa.IsPowerOfTwo(c/3)) {
7478 break
7479 }
7480 v.Reset(ssaop.OpARMADD)
7481 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7482 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 3)))
7483 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7484 v1.AuxInt = ssa.Int32ToAuxInt(1)
7485 v1.AddArg2(x, x)
7486 v0.AddArg(v1)
7487 v.AddArg2(v0, a)
7488 return true
7489 }
7490
7491
7492
7493 for {
7494 x := v_0
7495 if v_1.Op != ssaop.OpARMMOVWconst {
7496 break
7497 }
7498 c := ssa.AuxIntToInt32(v_1.AuxInt)
7499 a := v_2
7500 if !(c%5 == 0 && ssa.IsPowerOfTwo(c/5)) {
7501 break
7502 }
7503 v.Reset(ssaop.OpARMADD)
7504 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7505 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 5)))
7506 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7507 v1.AuxInt = ssa.Int32ToAuxInt(2)
7508 v1.AddArg2(x, x)
7509 v0.AddArg(v1)
7510 v.AddArg2(v0, a)
7511 return true
7512 }
7513
7514
7515
7516 for {
7517 x := v_0
7518 if v_1.Op != ssaop.OpARMMOVWconst {
7519 break
7520 }
7521 c := ssa.AuxIntToInt32(v_1.AuxInt)
7522 a := v_2
7523 if !(c%7 == 0 && ssa.IsPowerOfTwo(c/7)) {
7524 break
7525 }
7526 v.Reset(ssaop.OpARMADD)
7527 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7528 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 7)))
7529 v1 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7530 v1.AuxInt = ssa.Int32ToAuxInt(3)
7531 v1.AddArg2(x, x)
7532 v0.AddArg(v1)
7533 v.AddArg2(v0, a)
7534 return true
7535 }
7536
7537
7538
7539 for {
7540 x := v_0
7541 if v_1.Op != ssaop.OpARMMOVWconst {
7542 break
7543 }
7544 c := ssa.AuxIntToInt32(v_1.AuxInt)
7545 a := v_2
7546 if !(c%9 == 0 && ssa.IsPowerOfTwo(c/9)) {
7547 break
7548 }
7549 v.Reset(ssaop.OpARMADD)
7550 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7551 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 9)))
7552 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7553 v1.AuxInt = ssa.Int32ToAuxInt(3)
7554 v1.AddArg2(x, x)
7555 v0.AddArg(v1)
7556 v.AddArg2(v0, a)
7557 return true
7558 }
7559
7560
7561
7562 for {
7563 if v_0.Op != ssaop.OpARMMOVWconst {
7564 break
7565 }
7566 c := ssa.AuxIntToInt32(v_0.AuxInt)
7567 x := v_1
7568 a := v_2
7569 if !(c == -1) {
7570 break
7571 }
7572 v.Reset(ssaop.OpARMSUB)
7573 v.AddArg2(a, x)
7574 return true
7575 }
7576
7577
7578 for {
7579 if v_0.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
7580 break
7581 }
7582 a := v_2
7583 v.CopyOf(a)
7584 return true
7585 }
7586
7587
7588 for {
7589 if v_0.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
7590 break
7591 }
7592 x := v_1
7593 a := v_2
7594 v.Reset(ssaop.OpARMADD)
7595 v.AddArg2(x, a)
7596 return true
7597 }
7598
7599
7600
7601 for {
7602 if v_0.Op != ssaop.OpARMMOVWconst {
7603 break
7604 }
7605 c := ssa.AuxIntToInt32(v_0.AuxInt)
7606 x := v_1
7607 a := v_2
7608 if !(ssa.IsPowerOfTwo(c)) {
7609 break
7610 }
7611 v.Reset(ssaop.OpARMADD)
7612 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7613 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
7614 v0.AddArg(x)
7615 v.AddArg2(v0, a)
7616 return true
7617 }
7618
7619
7620
7621 for {
7622 if v_0.Op != ssaop.OpARMMOVWconst {
7623 break
7624 }
7625 c := ssa.AuxIntToInt32(v_0.AuxInt)
7626 x := v_1
7627 a := v_2
7628 if !(ssa.IsPowerOfTwo(c-1) && c >= 3) {
7629 break
7630 }
7631 v.Reset(ssaop.OpARMADD)
7632 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7633 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c - 1)))
7634 v0.AddArg2(x, x)
7635 v.AddArg2(v0, a)
7636 return true
7637 }
7638
7639
7640
7641 for {
7642 if v_0.Op != ssaop.OpARMMOVWconst {
7643 break
7644 }
7645 c := ssa.AuxIntToInt32(v_0.AuxInt)
7646 x := v_1
7647 a := v_2
7648 if !(ssa.IsPowerOfTwo(c+1) && c >= 7) {
7649 break
7650 }
7651 v.Reset(ssaop.OpARMADD)
7652 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7653 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c + 1)))
7654 v0.AddArg2(x, x)
7655 v.AddArg2(v0, a)
7656 return true
7657 }
7658
7659
7660
7661 for {
7662 if v_0.Op != ssaop.OpARMMOVWconst {
7663 break
7664 }
7665 c := ssa.AuxIntToInt32(v_0.AuxInt)
7666 x := v_1
7667 a := v_2
7668 if !(c%3 == 0 && ssa.IsPowerOfTwo(c/3)) {
7669 break
7670 }
7671 v.Reset(ssaop.OpARMADD)
7672 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7673 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 3)))
7674 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7675 v1.AuxInt = ssa.Int32ToAuxInt(1)
7676 v1.AddArg2(x, x)
7677 v0.AddArg(v1)
7678 v.AddArg2(v0, a)
7679 return true
7680 }
7681
7682
7683
7684 for {
7685 if v_0.Op != ssaop.OpARMMOVWconst {
7686 break
7687 }
7688 c := ssa.AuxIntToInt32(v_0.AuxInt)
7689 x := v_1
7690 a := v_2
7691 if !(c%5 == 0 && ssa.IsPowerOfTwo(c/5)) {
7692 break
7693 }
7694 v.Reset(ssaop.OpARMADD)
7695 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7696 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 5)))
7697 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7698 v1.AuxInt = ssa.Int32ToAuxInt(2)
7699 v1.AddArg2(x, x)
7700 v0.AddArg(v1)
7701 v.AddArg2(v0, a)
7702 return true
7703 }
7704
7705
7706
7707 for {
7708 if v_0.Op != ssaop.OpARMMOVWconst {
7709 break
7710 }
7711 c := ssa.AuxIntToInt32(v_0.AuxInt)
7712 x := v_1
7713 a := v_2
7714 if !(c%7 == 0 && ssa.IsPowerOfTwo(c/7)) {
7715 break
7716 }
7717 v.Reset(ssaop.OpARMADD)
7718 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7719 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 7)))
7720 v1 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7721 v1.AuxInt = ssa.Int32ToAuxInt(3)
7722 v1.AddArg2(x, x)
7723 v0.AddArg(v1)
7724 v.AddArg2(v0, a)
7725 return true
7726 }
7727
7728
7729
7730 for {
7731 if v_0.Op != ssaop.OpARMMOVWconst {
7732 break
7733 }
7734 c := ssa.AuxIntToInt32(v_0.AuxInt)
7735 x := v_1
7736 a := v_2
7737 if !(c%9 == 0 && ssa.IsPowerOfTwo(c/9)) {
7738 break
7739 }
7740 v.Reset(ssaop.OpARMADD)
7741 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7742 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 9)))
7743 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7744 v1.AuxInt = ssa.Int32ToAuxInt(3)
7745 v1.AddArg2(x, x)
7746 v0.AddArg(v1)
7747 v.AddArg2(v0, a)
7748 return true
7749 }
7750
7751
7752 for {
7753 if v_0.Op != ssaop.OpARMMOVWconst {
7754 break
7755 }
7756 c := ssa.AuxIntToInt32(v_0.AuxInt)
7757 if v_1.Op != ssaop.OpARMMOVWconst {
7758 break
7759 }
7760 d := ssa.AuxIntToInt32(v_1.AuxInt)
7761 a := v_2
7762 v.Reset(ssaop.OpARMADDconst)
7763 v.AuxInt = ssa.Int32ToAuxInt(c * d)
7764 v.AddArg(a)
7765 return true
7766 }
7767 return false
7768 }
7769 func rewriteValue_OpARMMULD(v *ssa.Value) bool {
7770 v_1 := v.Args[1]
7771 v_0 := v.Args[0]
7772
7773
7774
7775 for {
7776 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7777 if v_0.Op != ssaop.OpARMNEGD {
7778 continue
7779 }
7780 x := v_0.Args[0]
7781 y := v_1
7782 if !(buildcfg.GOARM.Version >= 6) {
7783 continue
7784 }
7785 v.Reset(ssaop.OpARMNMULD)
7786 v.AddArg2(x, y)
7787 return true
7788 }
7789 break
7790 }
7791 return false
7792 }
7793 func rewriteValue_OpARMMULF(v *ssa.Value) bool {
7794 v_1 := v.Args[1]
7795 v_0 := v.Args[0]
7796
7797
7798
7799 for {
7800 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7801 if v_0.Op != ssaop.OpARMNEGF {
7802 continue
7803 }
7804 x := v_0.Args[0]
7805 y := v_1
7806 if !(buildcfg.GOARM.Version >= 6) {
7807 continue
7808 }
7809 v.Reset(ssaop.OpARMNMULF)
7810 v.AddArg2(x, y)
7811 return true
7812 }
7813 break
7814 }
7815 return false
7816 }
7817 func rewriteValue_OpARMMULS(v *ssa.Value) bool {
7818 v_2 := v.Args[2]
7819 v_1 := v.Args[1]
7820 v_0 := v.Args[0]
7821 b := v.Block
7822
7823
7824
7825 for {
7826 x := v_0
7827 if v_1.Op != ssaop.OpARMMOVWconst {
7828 break
7829 }
7830 c := ssa.AuxIntToInt32(v_1.AuxInt)
7831 a := v_2
7832 if !(c == -1) {
7833 break
7834 }
7835 v.Reset(ssaop.OpARMADD)
7836 v.AddArg2(a, x)
7837 return true
7838 }
7839
7840
7841 for {
7842 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
7843 break
7844 }
7845 a := v_2
7846 v.CopyOf(a)
7847 return true
7848 }
7849
7850
7851 for {
7852 x := v_0
7853 if v_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
7854 break
7855 }
7856 a := v_2
7857 v.Reset(ssaop.OpARMRSB)
7858 v.AddArg2(x, a)
7859 return true
7860 }
7861
7862
7863
7864 for {
7865 x := v_0
7866 if v_1.Op != ssaop.OpARMMOVWconst {
7867 break
7868 }
7869 c := ssa.AuxIntToInt32(v_1.AuxInt)
7870 a := v_2
7871 if !(ssa.IsPowerOfTwo(c)) {
7872 break
7873 }
7874 v.Reset(ssaop.OpARMRSB)
7875 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7876 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
7877 v0.AddArg(x)
7878 v.AddArg2(v0, a)
7879 return true
7880 }
7881
7882
7883
7884 for {
7885 x := v_0
7886 if v_1.Op != ssaop.OpARMMOVWconst {
7887 break
7888 }
7889 c := ssa.AuxIntToInt32(v_1.AuxInt)
7890 a := v_2
7891 if !(ssa.IsPowerOfTwo(c-1) && c >= 3) {
7892 break
7893 }
7894 v.Reset(ssaop.OpARMRSB)
7895 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7896 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c - 1)))
7897 v0.AddArg2(x, x)
7898 v.AddArg2(v0, a)
7899 return true
7900 }
7901
7902
7903
7904 for {
7905 x := v_0
7906 if v_1.Op != ssaop.OpARMMOVWconst {
7907 break
7908 }
7909 c := ssa.AuxIntToInt32(v_1.AuxInt)
7910 a := v_2
7911 if !(ssa.IsPowerOfTwo(c+1) && c >= 7) {
7912 break
7913 }
7914 v.Reset(ssaop.OpARMRSB)
7915 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7916 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c + 1)))
7917 v0.AddArg2(x, x)
7918 v.AddArg2(v0, a)
7919 return true
7920 }
7921
7922
7923
7924 for {
7925 x := v_0
7926 if v_1.Op != ssaop.OpARMMOVWconst {
7927 break
7928 }
7929 c := ssa.AuxIntToInt32(v_1.AuxInt)
7930 a := v_2
7931 if !(c%3 == 0 && ssa.IsPowerOfTwo(c/3)) {
7932 break
7933 }
7934 v.Reset(ssaop.OpARMRSB)
7935 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7936 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 3)))
7937 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7938 v1.AuxInt = ssa.Int32ToAuxInt(1)
7939 v1.AddArg2(x, x)
7940 v0.AddArg(v1)
7941 v.AddArg2(v0, a)
7942 return true
7943 }
7944
7945
7946
7947 for {
7948 x := v_0
7949 if v_1.Op != ssaop.OpARMMOVWconst {
7950 break
7951 }
7952 c := ssa.AuxIntToInt32(v_1.AuxInt)
7953 a := v_2
7954 if !(c%5 == 0 && ssa.IsPowerOfTwo(c/5)) {
7955 break
7956 }
7957 v.Reset(ssaop.OpARMRSB)
7958 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7959 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 5)))
7960 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
7961 v1.AuxInt = ssa.Int32ToAuxInt(2)
7962 v1.AddArg2(x, x)
7963 v0.AddArg(v1)
7964 v.AddArg2(v0, a)
7965 return true
7966 }
7967
7968
7969
7970 for {
7971 x := v_0
7972 if v_1.Op != ssaop.OpARMMOVWconst {
7973 break
7974 }
7975 c := ssa.AuxIntToInt32(v_1.AuxInt)
7976 a := v_2
7977 if !(c%7 == 0 && ssa.IsPowerOfTwo(c/7)) {
7978 break
7979 }
7980 v.Reset(ssaop.OpARMRSB)
7981 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
7982 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 7)))
7983 v1 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
7984 v1.AuxInt = ssa.Int32ToAuxInt(3)
7985 v1.AddArg2(x, x)
7986 v0.AddArg(v1)
7987 v.AddArg2(v0, a)
7988 return true
7989 }
7990
7991
7992
7993 for {
7994 x := v_0
7995 if v_1.Op != ssaop.OpARMMOVWconst {
7996 break
7997 }
7998 c := ssa.AuxIntToInt32(v_1.AuxInt)
7999 a := v_2
8000 if !(c%9 == 0 && ssa.IsPowerOfTwo(c/9)) {
8001 break
8002 }
8003 v.Reset(ssaop.OpARMRSB)
8004 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8005 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 9)))
8006 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
8007 v1.AuxInt = ssa.Int32ToAuxInt(3)
8008 v1.AddArg2(x, x)
8009 v0.AddArg(v1)
8010 v.AddArg2(v0, a)
8011 return true
8012 }
8013
8014
8015
8016 for {
8017 if v_0.Op != ssaop.OpARMMOVWconst {
8018 break
8019 }
8020 c := ssa.AuxIntToInt32(v_0.AuxInt)
8021 x := v_1
8022 a := v_2
8023 if !(c == -1) {
8024 break
8025 }
8026 v.Reset(ssaop.OpARMADD)
8027 v.AddArg2(a, x)
8028 return true
8029 }
8030
8031
8032 for {
8033 if v_0.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
8034 break
8035 }
8036 a := v_2
8037 v.CopyOf(a)
8038 return true
8039 }
8040
8041
8042 for {
8043 if v_0.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
8044 break
8045 }
8046 x := v_1
8047 a := v_2
8048 v.Reset(ssaop.OpARMRSB)
8049 v.AddArg2(x, a)
8050 return true
8051 }
8052
8053
8054
8055 for {
8056 if v_0.Op != ssaop.OpARMMOVWconst {
8057 break
8058 }
8059 c := ssa.AuxIntToInt32(v_0.AuxInt)
8060 x := v_1
8061 a := v_2
8062 if !(ssa.IsPowerOfTwo(c)) {
8063 break
8064 }
8065 v.Reset(ssaop.OpARMRSB)
8066 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8067 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
8068 v0.AddArg(x)
8069 v.AddArg2(v0, a)
8070 return true
8071 }
8072
8073
8074
8075 for {
8076 if v_0.Op != ssaop.OpARMMOVWconst {
8077 break
8078 }
8079 c := ssa.AuxIntToInt32(v_0.AuxInt)
8080 x := v_1
8081 a := v_2
8082 if !(ssa.IsPowerOfTwo(c-1) && c >= 3) {
8083 break
8084 }
8085 v.Reset(ssaop.OpARMRSB)
8086 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
8087 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c - 1)))
8088 v0.AddArg2(x, x)
8089 v.AddArg2(v0, a)
8090 return true
8091 }
8092
8093
8094
8095 for {
8096 if v_0.Op != ssaop.OpARMMOVWconst {
8097 break
8098 }
8099 c := ssa.AuxIntToInt32(v_0.AuxInt)
8100 x := v_1
8101 a := v_2
8102 if !(ssa.IsPowerOfTwo(c+1) && c >= 7) {
8103 break
8104 }
8105 v.Reset(ssaop.OpARMRSB)
8106 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
8107 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c + 1)))
8108 v0.AddArg2(x, x)
8109 v.AddArg2(v0, a)
8110 return true
8111 }
8112
8113
8114
8115 for {
8116 if v_0.Op != ssaop.OpARMMOVWconst {
8117 break
8118 }
8119 c := ssa.AuxIntToInt32(v_0.AuxInt)
8120 x := v_1
8121 a := v_2
8122 if !(c%3 == 0 && ssa.IsPowerOfTwo(c/3)) {
8123 break
8124 }
8125 v.Reset(ssaop.OpARMRSB)
8126 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8127 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 3)))
8128 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
8129 v1.AuxInt = ssa.Int32ToAuxInt(1)
8130 v1.AddArg2(x, x)
8131 v0.AddArg(v1)
8132 v.AddArg2(v0, a)
8133 return true
8134 }
8135
8136
8137
8138 for {
8139 if v_0.Op != ssaop.OpARMMOVWconst {
8140 break
8141 }
8142 c := ssa.AuxIntToInt32(v_0.AuxInt)
8143 x := v_1
8144 a := v_2
8145 if !(c%5 == 0 && ssa.IsPowerOfTwo(c/5)) {
8146 break
8147 }
8148 v.Reset(ssaop.OpARMRSB)
8149 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8150 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 5)))
8151 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
8152 v1.AuxInt = ssa.Int32ToAuxInt(2)
8153 v1.AddArg2(x, x)
8154 v0.AddArg(v1)
8155 v.AddArg2(v0, a)
8156 return true
8157 }
8158
8159
8160
8161 for {
8162 if v_0.Op != ssaop.OpARMMOVWconst {
8163 break
8164 }
8165 c := ssa.AuxIntToInt32(v_0.AuxInt)
8166 x := v_1
8167 a := v_2
8168 if !(c%7 == 0 && ssa.IsPowerOfTwo(c/7)) {
8169 break
8170 }
8171 v.Reset(ssaop.OpARMRSB)
8172 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8173 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 7)))
8174 v1 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftLL, x.Type)
8175 v1.AuxInt = ssa.Int32ToAuxInt(3)
8176 v1.AddArg2(x, x)
8177 v0.AddArg(v1)
8178 v.AddArg2(v0, a)
8179 return true
8180 }
8181
8182
8183
8184 for {
8185 if v_0.Op != ssaop.OpARMMOVWconst {
8186 break
8187 }
8188 c := ssa.AuxIntToInt32(v_0.AuxInt)
8189 x := v_1
8190 a := v_2
8191 if !(c%9 == 0 && ssa.IsPowerOfTwo(c/9)) {
8192 break
8193 }
8194 v.Reset(ssaop.OpARMRSB)
8195 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8196 v0.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c / 9)))
8197 v1 := b.NewValue0(v.Pos, ssaop.OpARMADDshiftLL, x.Type)
8198 v1.AuxInt = ssa.Int32ToAuxInt(3)
8199 v1.AddArg2(x, x)
8200 v0.AddArg(v1)
8201 v.AddArg2(v0, a)
8202 return true
8203 }
8204
8205
8206 for {
8207 if v_0.Op != ssaop.OpARMMOVWconst {
8208 break
8209 }
8210 c := ssa.AuxIntToInt32(v_0.AuxInt)
8211 if v_1.Op != ssaop.OpARMMOVWconst {
8212 break
8213 }
8214 d := ssa.AuxIntToInt32(v_1.AuxInt)
8215 a := v_2
8216 v.Reset(ssaop.OpARMSUBconst)
8217 v.AuxInt = ssa.Int32ToAuxInt(c * d)
8218 v.AddArg(a)
8219 return true
8220 }
8221 return false
8222 }
8223 func rewriteValue_OpARMMVN(v *ssa.Value) bool {
8224 v_0 := v.Args[0]
8225
8226
8227 for {
8228 if v_0.Op != ssaop.OpARMMOVWconst {
8229 break
8230 }
8231 c := ssa.AuxIntToInt32(v_0.AuxInt)
8232 v.Reset(ssaop.OpARMMOVWconst)
8233 v.AuxInt = ssa.Int32ToAuxInt(^c)
8234 return true
8235 }
8236
8237
8238 for {
8239 if v_0.Op != ssaop.OpARMSLLconst {
8240 break
8241 }
8242 c := ssa.AuxIntToInt32(v_0.AuxInt)
8243 x := v_0.Args[0]
8244 v.Reset(ssaop.OpARMMVNshiftLL)
8245 v.AuxInt = ssa.Int32ToAuxInt(c)
8246 v.AddArg(x)
8247 return true
8248 }
8249
8250
8251 for {
8252 if v_0.Op != ssaop.OpARMSRLconst {
8253 break
8254 }
8255 c := ssa.AuxIntToInt32(v_0.AuxInt)
8256 x := v_0.Args[0]
8257 v.Reset(ssaop.OpARMMVNshiftRL)
8258 v.AuxInt = ssa.Int32ToAuxInt(c)
8259 v.AddArg(x)
8260 return true
8261 }
8262
8263
8264 for {
8265 if v_0.Op != ssaop.OpARMSRAconst {
8266 break
8267 }
8268 c := ssa.AuxIntToInt32(v_0.AuxInt)
8269 x := v_0.Args[0]
8270 v.Reset(ssaop.OpARMMVNshiftRA)
8271 v.AuxInt = ssa.Int32ToAuxInt(c)
8272 v.AddArg(x)
8273 return true
8274 }
8275
8276
8277 for {
8278 if v_0.Op != ssaop.OpARMSLL {
8279 break
8280 }
8281 y := v_0.Args[1]
8282 x := v_0.Args[0]
8283 v.Reset(ssaop.OpARMMVNshiftLLreg)
8284 v.AddArg2(x, y)
8285 return true
8286 }
8287
8288
8289 for {
8290 if v_0.Op != ssaop.OpARMSRL {
8291 break
8292 }
8293 y := v_0.Args[1]
8294 x := v_0.Args[0]
8295 v.Reset(ssaop.OpARMMVNshiftRLreg)
8296 v.AddArg2(x, y)
8297 return true
8298 }
8299
8300
8301 for {
8302 if v_0.Op != ssaop.OpARMSRA {
8303 break
8304 }
8305 y := v_0.Args[1]
8306 x := v_0.Args[0]
8307 v.Reset(ssaop.OpARMMVNshiftRAreg)
8308 v.AddArg2(x, y)
8309 return true
8310 }
8311 return false
8312 }
8313 func rewriteValue_OpARMMVNshiftLL(v *ssa.Value) bool {
8314 v_0 := v.Args[0]
8315
8316
8317 for {
8318 d := ssa.AuxIntToInt32(v.AuxInt)
8319 if v_0.Op != ssaop.OpARMMOVWconst {
8320 break
8321 }
8322 c := ssa.AuxIntToInt32(v_0.AuxInt)
8323 v.Reset(ssaop.OpARMMOVWconst)
8324 v.AuxInt = ssa.Int32ToAuxInt(^(c << uint64(d)))
8325 return true
8326 }
8327 return false
8328 }
8329 func rewriteValue_OpARMMVNshiftLLreg(v *ssa.Value) bool {
8330 v_1 := v.Args[1]
8331 v_0 := v.Args[0]
8332
8333
8334
8335 for {
8336 x := v_0
8337 if v_1.Op != ssaop.OpARMMOVWconst {
8338 break
8339 }
8340 c := ssa.AuxIntToInt32(v_1.AuxInt)
8341 if !(0 <= c && c < 32) {
8342 break
8343 }
8344 v.Reset(ssaop.OpARMMVNshiftLL)
8345 v.AuxInt = ssa.Int32ToAuxInt(c)
8346 v.AddArg(x)
8347 return true
8348 }
8349 return false
8350 }
8351 func rewriteValue_OpARMMVNshiftRA(v *ssa.Value) bool {
8352 v_0 := v.Args[0]
8353
8354
8355 for {
8356 d := ssa.AuxIntToInt32(v.AuxInt)
8357 if v_0.Op != ssaop.OpARMMOVWconst {
8358 break
8359 }
8360 c := ssa.AuxIntToInt32(v_0.AuxInt)
8361 v.Reset(ssaop.OpARMMOVWconst)
8362 v.AuxInt = ssa.Int32ToAuxInt(int32(c) >> uint64(d))
8363 return true
8364 }
8365 return false
8366 }
8367 func rewriteValue_OpARMMVNshiftRAreg(v *ssa.Value) bool {
8368 v_1 := v.Args[1]
8369 v_0 := v.Args[0]
8370
8371
8372
8373 for {
8374 x := v_0
8375 if v_1.Op != ssaop.OpARMMOVWconst {
8376 break
8377 }
8378 c := ssa.AuxIntToInt32(v_1.AuxInt)
8379 if !(0 <= c && c < 32) {
8380 break
8381 }
8382 v.Reset(ssaop.OpARMMVNshiftRA)
8383 v.AuxInt = ssa.Int32ToAuxInt(c)
8384 v.AddArg(x)
8385 return true
8386 }
8387 return false
8388 }
8389 func rewriteValue_OpARMMVNshiftRL(v *ssa.Value) bool {
8390 v_0 := v.Args[0]
8391
8392
8393 for {
8394 d := ssa.AuxIntToInt32(v.AuxInt)
8395 if v_0.Op != ssaop.OpARMMOVWconst {
8396 break
8397 }
8398 c := ssa.AuxIntToInt32(v_0.AuxInt)
8399 v.Reset(ssaop.OpARMMOVWconst)
8400 v.AuxInt = ssa.Int32ToAuxInt(^int32(uint32(c) >> uint64(d)))
8401 return true
8402 }
8403 return false
8404 }
8405 func rewriteValue_OpARMMVNshiftRLreg(v *ssa.Value) bool {
8406 v_1 := v.Args[1]
8407 v_0 := v.Args[0]
8408
8409
8410
8411 for {
8412 x := v_0
8413 if v_1.Op != ssaop.OpARMMOVWconst {
8414 break
8415 }
8416 c := ssa.AuxIntToInt32(v_1.AuxInt)
8417 if !(0 <= c && c < 32) {
8418 break
8419 }
8420 v.Reset(ssaop.OpARMMVNshiftRL)
8421 v.AuxInt = ssa.Int32ToAuxInt(c)
8422 v.AddArg(x)
8423 return true
8424 }
8425 return false
8426 }
8427 func rewriteValue_OpARMNEGD(v *ssa.Value) bool {
8428 v_0 := v.Args[0]
8429
8430
8431
8432 for {
8433 if v_0.Op != ssaop.OpARMMULD {
8434 break
8435 }
8436 y := v_0.Args[1]
8437 x := v_0.Args[0]
8438 if !(buildcfg.GOARM.Version >= 6) {
8439 break
8440 }
8441 v.Reset(ssaop.OpARMNMULD)
8442 v.AddArg2(x, y)
8443 return true
8444 }
8445 return false
8446 }
8447 func rewriteValue_OpARMNEGF(v *ssa.Value) bool {
8448 v_0 := v.Args[0]
8449
8450
8451
8452 for {
8453 if v_0.Op != ssaop.OpARMMULF {
8454 break
8455 }
8456 y := v_0.Args[1]
8457 x := v_0.Args[0]
8458 if !(buildcfg.GOARM.Version >= 6) {
8459 break
8460 }
8461 v.Reset(ssaop.OpARMNMULF)
8462 v.AddArg2(x, y)
8463 return true
8464 }
8465 return false
8466 }
8467 func rewriteValue_OpARMNMULD(v *ssa.Value) bool {
8468 v_1 := v.Args[1]
8469 v_0 := v.Args[0]
8470
8471
8472 for {
8473 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8474 if v_0.Op != ssaop.OpARMNEGD {
8475 continue
8476 }
8477 x := v_0.Args[0]
8478 y := v_1
8479 v.Reset(ssaop.OpARMMULD)
8480 v.AddArg2(x, y)
8481 return true
8482 }
8483 break
8484 }
8485 return false
8486 }
8487 func rewriteValue_OpARMNMULF(v *ssa.Value) bool {
8488 v_1 := v.Args[1]
8489 v_0 := v.Args[0]
8490
8491
8492 for {
8493 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8494 if v_0.Op != ssaop.OpARMNEGF {
8495 continue
8496 }
8497 x := v_0.Args[0]
8498 y := v_1
8499 v.Reset(ssaop.OpARMMULF)
8500 v.AddArg2(x, y)
8501 return true
8502 }
8503 break
8504 }
8505 return false
8506 }
8507 func rewriteValue_OpARMNotEqual(v *ssa.Value) bool {
8508 v_0 := v.Args[0]
8509
8510
8511 for {
8512 if v_0.Op != ssaop.OpARMFlagConstant {
8513 break
8514 }
8515 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
8516 v.Reset(ssaop.OpARMMOVWconst)
8517 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(fc.Ne()))
8518 return true
8519 }
8520
8521
8522 for {
8523 if v_0.Op != ssaop.OpARMInvertFlags {
8524 break
8525 }
8526 x := v_0.Args[0]
8527 v.Reset(ssaop.OpARMNotEqual)
8528 v.AddArg(x)
8529 return true
8530 }
8531 return false
8532 }
8533 func rewriteValue_OpARMOR(v *ssa.Value) bool {
8534 v_1 := v.Args[1]
8535 v_0 := v.Args[0]
8536
8537
8538 for {
8539 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8540 x := v_0
8541 if v_1.Op != ssaop.OpARMMOVWconst {
8542 continue
8543 }
8544 c := ssa.AuxIntToInt32(v_1.AuxInt)
8545 v.Reset(ssaop.OpARMORconst)
8546 v.AuxInt = ssa.Int32ToAuxInt(c)
8547 v.AddArg(x)
8548 return true
8549 }
8550 break
8551 }
8552
8553
8554 for {
8555 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8556 x := v_0
8557 if v_1.Op != ssaop.OpARMSLLconst {
8558 continue
8559 }
8560 c := ssa.AuxIntToInt32(v_1.AuxInt)
8561 y := v_1.Args[0]
8562 v.Reset(ssaop.OpARMORshiftLL)
8563 v.AuxInt = ssa.Int32ToAuxInt(c)
8564 v.AddArg2(x, y)
8565 return true
8566 }
8567 break
8568 }
8569
8570
8571 for {
8572 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8573 x := v_0
8574 if v_1.Op != ssaop.OpARMSRLconst {
8575 continue
8576 }
8577 c := ssa.AuxIntToInt32(v_1.AuxInt)
8578 y := v_1.Args[0]
8579 v.Reset(ssaop.OpARMORshiftRL)
8580 v.AuxInt = ssa.Int32ToAuxInt(c)
8581 v.AddArg2(x, y)
8582 return true
8583 }
8584 break
8585 }
8586
8587
8588 for {
8589 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8590 x := v_0
8591 if v_1.Op != ssaop.OpARMSRAconst {
8592 continue
8593 }
8594 c := ssa.AuxIntToInt32(v_1.AuxInt)
8595 y := v_1.Args[0]
8596 v.Reset(ssaop.OpARMORshiftRA)
8597 v.AuxInt = ssa.Int32ToAuxInt(c)
8598 v.AddArg2(x, y)
8599 return true
8600 }
8601 break
8602 }
8603
8604
8605 for {
8606 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8607 x := v_0
8608 if v_1.Op != ssaop.OpARMSLL {
8609 continue
8610 }
8611 z := v_1.Args[1]
8612 y := v_1.Args[0]
8613 v.Reset(ssaop.OpARMORshiftLLreg)
8614 v.AddArg3(x, y, z)
8615 return true
8616 }
8617 break
8618 }
8619
8620
8621 for {
8622 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8623 x := v_0
8624 if v_1.Op != ssaop.OpARMSRL {
8625 continue
8626 }
8627 z := v_1.Args[1]
8628 y := v_1.Args[0]
8629 v.Reset(ssaop.OpARMORshiftRLreg)
8630 v.AddArg3(x, y, z)
8631 return true
8632 }
8633 break
8634 }
8635
8636
8637 for {
8638 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8639 x := v_0
8640 if v_1.Op != ssaop.OpARMSRA {
8641 continue
8642 }
8643 z := v_1.Args[1]
8644 y := v_1.Args[0]
8645 v.Reset(ssaop.OpARMORshiftRAreg)
8646 v.AddArg3(x, y, z)
8647 return true
8648 }
8649 break
8650 }
8651
8652
8653 for {
8654 x := v_0
8655 if x != v_1 {
8656 break
8657 }
8658 v.CopyOf(x)
8659 return true
8660 }
8661 return false
8662 }
8663 func rewriteValue_OpARMORconst(v *ssa.Value) bool {
8664 v_0 := v.Args[0]
8665
8666
8667 for {
8668 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
8669 break
8670 }
8671 x := v_0
8672 v.CopyOf(x)
8673 return true
8674 }
8675
8676
8677
8678 for {
8679 c := ssa.AuxIntToInt32(v.AuxInt)
8680 if !(int32(c) == -1) {
8681 break
8682 }
8683 v.Reset(ssaop.OpARMMOVWconst)
8684 v.AuxInt = ssa.Int32ToAuxInt(-1)
8685 return true
8686 }
8687
8688
8689 for {
8690 c := ssa.AuxIntToInt32(v.AuxInt)
8691 if v_0.Op != ssaop.OpARMMOVWconst {
8692 break
8693 }
8694 d := ssa.AuxIntToInt32(v_0.AuxInt)
8695 v.Reset(ssaop.OpARMMOVWconst)
8696 v.AuxInt = ssa.Int32ToAuxInt(c | d)
8697 return true
8698 }
8699
8700
8701 for {
8702 c := ssa.AuxIntToInt32(v.AuxInt)
8703 if v_0.Op != ssaop.OpARMORconst {
8704 break
8705 }
8706 d := ssa.AuxIntToInt32(v_0.AuxInt)
8707 x := v_0.Args[0]
8708 v.Reset(ssaop.OpARMORconst)
8709 v.AuxInt = ssa.Int32ToAuxInt(c | d)
8710 v.AddArg(x)
8711 return true
8712 }
8713 return false
8714 }
8715 func rewriteValue_OpARMORshiftLL(v *ssa.Value) bool {
8716 v_1 := v.Args[1]
8717 v_0 := v.Args[0]
8718 b := v.Block
8719 typ := &b.Func.Config.Types
8720
8721
8722 for {
8723 d := ssa.AuxIntToInt32(v.AuxInt)
8724 if v_0.Op != ssaop.OpARMMOVWconst {
8725 break
8726 }
8727 c := ssa.AuxIntToInt32(v_0.AuxInt)
8728 x := v_1
8729 v.Reset(ssaop.OpARMORconst)
8730 v.AuxInt = ssa.Int32ToAuxInt(c)
8731 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
8732 v0.AuxInt = ssa.Int32ToAuxInt(d)
8733 v0.AddArg(x)
8734 v.AddArg(v0)
8735 return true
8736 }
8737
8738
8739 for {
8740 d := ssa.AuxIntToInt32(v.AuxInt)
8741 x := v_0
8742 if v_1.Op != ssaop.OpARMMOVWconst {
8743 break
8744 }
8745 c := ssa.AuxIntToInt32(v_1.AuxInt)
8746 v.Reset(ssaop.OpARMORconst)
8747 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
8748 v.AddArg(x)
8749 return true
8750 }
8751
8752
8753 for {
8754 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMBFXU || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != int32(ssa.ArmBFAuxInt(8, 8)) {
8755 break
8756 }
8757 x := v_0.Args[0]
8758 if x != v_1 {
8759 break
8760 }
8761 v.Reset(ssaop.OpARMREV16)
8762 v.AddArg(x)
8763 return true
8764 }
8765
8766
8767
8768 for {
8769 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMSRLconst || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != 24 {
8770 break
8771 }
8772 v_0_0 := v_0.Args[0]
8773 if v_0_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0_0.AuxInt) != 16 {
8774 break
8775 }
8776 x := v_0_0.Args[0]
8777 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
8778 break
8779 }
8780 v.Reset(ssaop.OpARMREV16)
8781 v.AddArg(x)
8782 return true
8783 }
8784
8785
8786 for {
8787 c := ssa.AuxIntToInt32(v.AuxInt)
8788 y := v_0
8789 if y.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(y.AuxInt) != c {
8790 break
8791 }
8792 x := y.Args[0]
8793 if x != v_1 {
8794 break
8795 }
8796 v.CopyOf(y)
8797 return true
8798 }
8799 return false
8800 }
8801 func rewriteValue_OpARMORshiftLLreg(v *ssa.Value) bool {
8802 v_2 := v.Args[2]
8803 v_1 := v.Args[1]
8804 v_0 := v.Args[0]
8805 b := v.Block
8806
8807
8808 for {
8809 if v_0.Op != ssaop.OpARMMOVWconst {
8810 break
8811 }
8812 c := ssa.AuxIntToInt32(v_0.AuxInt)
8813 x := v_1
8814 y := v_2
8815 v.Reset(ssaop.OpARMORconst)
8816 v.AuxInt = ssa.Int32ToAuxInt(c)
8817 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
8818 v0.AddArg2(x, y)
8819 v.AddArg(v0)
8820 return true
8821 }
8822
8823
8824
8825 for {
8826 x := v_0
8827 y := v_1
8828 if v_2.Op != ssaop.OpARMMOVWconst {
8829 break
8830 }
8831 c := ssa.AuxIntToInt32(v_2.AuxInt)
8832 if !(0 <= c && c < 32) {
8833 break
8834 }
8835 v.Reset(ssaop.OpARMORshiftLL)
8836 v.AuxInt = ssa.Int32ToAuxInt(c)
8837 v.AddArg2(x, y)
8838 return true
8839 }
8840 return false
8841 }
8842 func rewriteValue_OpARMORshiftRA(v *ssa.Value) bool {
8843 v_1 := v.Args[1]
8844 v_0 := v.Args[0]
8845 b := v.Block
8846
8847
8848 for {
8849 d := ssa.AuxIntToInt32(v.AuxInt)
8850 if v_0.Op != ssaop.OpARMMOVWconst {
8851 break
8852 }
8853 c := ssa.AuxIntToInt32(v_0.AuxInt)
8854 x := v_1
8855 v.Reset(ssaop.OpARMORconst)
8856 v.AuxInt = ssa.Int32ToAuxInt(c)
8857 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
8858 v0.AuxInt = ssa.Int32ToAuxInt(d)
8859 v0.AddArg(x)
8860 v.AddArg(v0)
8861 return true
8862 }
8863
8864
8865 for {
8866 d := ssa.AuxIntToInt32(v.AuxInt)
8867 x := v_0
8868 if v_1.Op != ssaop.OpARMMOVWconst {
8869 break
8870 }
8871 c := ssa.AuxIntToInt32(v_1.AuxInt)
8872 v.Reset(ssaop.OpARMORconst)
8873 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
8874 v.AddArg(x)
8875 return true
8876 }
8877
8878
8879 for {
8880 c := ssa.AuxIntToInt32(v.AuxInt)
8881 y := v_0
8882 if y.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(y.AuxInt) != c {
8883 break
8884 }
8885 x := y.Args[0]
8886 if x != v_1 {
8887 break
8888 }
8889 v.CopyOf(y)
8890 return true
8891 }
8892 return false
8893 }
8894 func rewriteValue_OpARMORshiftRAreg(v *ssa.Value) bool {
8895 v_2 := v.Args[2]
8896 v_1 := v.Args[1]
8897 v_0 := v.Args[0]
8898 b := v.Block
8899
8900
8901 for {
8902 if v_0.Op != ssaop.OpARMMOVWconst {
8903 break
8904 }
8905 c := ssa.AuxIntToInt32(v_0.AuxInt)
8906 x := v_1
8907 y := v_2
8908 v.Reset(ssaop.OpARMORconst)
8909 v.AuxInt = ssa.Int32ToAuxInt(c)
8910 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
8911 v0.AddArg2(x, y)
8912 v.AddArg(v0)
8913 return true
8914 }
8915
8916
8917
8918 for {
8919 x := v_0
8920 y := v_1
8921 if v_2.Op != ssaop.OpARMMOVWconst {
8922 break
8923 }
8924 c := ssa.AuxIntToInt32(v_2.AuxInt)
8925 if !(0 <= c && c < 32) {
8926 break
8927 }
8928 v.Reset(ssaop.OpARMORshiftRA)
8929 v.AuxInt = ssa.Int32ToAuxInt(c)
8930 v.AddArg2(x, y)
8931 return true
8932 }
8933 return false
8934 }
8935 func rewriteValue_OpARMORshiftRL(v *ssa.Value) bool {
8936 v_1 := v.Args[1]
8937 v_0 := v.Args[0]
8938 b := v.Block
8939
8940
8941 for {
8942 d := ssa.AuxIntToInt32(v.AuxInt)
8943 if v_0.Op != ssaop.OpARMMOVWconst {
8944 break
8945 }
8946 c := ssa.AuxIntToInt32(v_0.AuxInt)
8947 x := v_1
8948 v.Reset(ssaop.OpARMORconst)
8949 v.AuxInt = ssa.Int32ToAuxInt(c)
8950 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
8951 v0.AuxInt = ssa.Int32ToAuxInt(d)
8952 v0.AddArg(x)
8953 v.AddArg(v0)
8954 return true
8955 }
8956
8957
8958 for {
8959 d := ssa.AuxIntToInt32(v.AuxInt)
8960 x := v_0
8961 if v_1.Op != ssaop.OpARMMOVWconst {
8962 break
8963 }
8964 c := ssa.AuxIntToInt32(v_1.AuxInt)
8965 v.Reset(ssaop.OpARMORconst)
8966 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
8967 v.AddArg(x)
8968 return true
8969 }
8970
8971
8972 for {
8973 c := ssa.AuxIntToInt32(v.AuxInt)
8974 y := v_0
8975 if y.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(y.AuxInt) != c {
8976 break
8977 }
8978 x := y.Args[0]
8979 if x != v_1 {
8980 break
8981 }
8982 v.CopyOf(y)
8983 return true
8984 }
8985 return false
8986 }
8987 func rewriteValue_OpARMORshiftRLreg(v *ssa.Value) bool {
8988 v_2 := v.Args[2]
8989 v_1 := v.Args[1]
8990 v_0 := v.Args[0]
8991 b := v.Block
8992
8993
8994 for {
8995 if v_0.Op != ssaop.OpARMMOVWconst {
8996 break
8997 }
8998 c := ssa.AuxIntToInt32(v_0.AuxInt)
8999 x := v_1
9000 y := v_2
9001 v.Reset(ssaop.OpARMORconst)
9002 v.AuxInt = ssa.Int32ToAuxInt(c)
9003 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
9004 v0.AddArg2(x, y)
9005 v.AddArg(v0)
9006 return true
9007 }
9008
9009
9010
9011 for {
9012 x := v_0
9013 y := v_1
9014 if v_2.Op != ssaop.OpARMMOVWconst {
9015 break
9016 }
9017 c := ssa.AuxIntToInt32(v_2.AuxInt)
9018 if !(0 <= c && c < 32) {
9019 break
9020 }
9021 v.Reset(ssaop.OpARMORshiftRL)
9022 v.AuxInt = ssa.Int32ToAuxInt(c)
9023 v.AddArg2(x, y)
9024 return true
9025 }
9026 return false
9027 }
9028 func rewriteValue_OpARMRSB(v *ssa.Value) bool {
9029 v_1 := v.Args[1]
9030 v_0 := v.Args[0]
9031
9032
9033 for {
9034 if v_0.Op != ssaop.OpARMMOVWconst {
9035 break
9036 }
9037 c := ssa.AuxIntToInt32(v_0.AuxInt)
9038 x := v_1
9039 v.Reset(ssaop.OpARMSUBconst)
9040 v.AuxInt = ssa.Int32ToAuxInt(c)
9041 v.AddArg(x)
9042 return true
9043 }
9044
9045
9046 for {
9047 x := v_0
9048 if v_1.Op != ssaop.OpARMMOVWconst {
9049 break
9050 }
9051 c := ssa.AuxIntToInt32(v_1.AuxInt)
9052 v.Reset(ssaop.OpARMRSBconst)
9053 v.AuxInt = ssa.Int32ToAuxInt(c)
9054 v.AddArg(x)
9055 return true
9056 }
9057
9058
9059 for {
9060 x := v_0
9061 if v_1.Op != ssaop.OpARMSLLconst {
9062 break
9063 }
9064 c := ssa.AuxIntToInt32(v_1.AuxInt)
9065 y := v_1.Args[0]
9066 v.Reset(ssaop.OpARMRSBshiftLL)
9067 v.AuxInt = ssa.Int32ToAuxInt(c)
9068 v.AddArg2(x, y)
9069 return true
9070 }
9071
9072
9073 for {
9074 if v_0.Op != ssaop.OpARMSLLconst {
9075 break
9076 }
9077 c := ssa.AuxIntToInt32(v_0.AuxInt)
9078 y := v_0.Args[0]
9079 x := v_1
9080 v.Reset(ssaop.OpARMSUBshiftLL)
9081 v.AuxInt = ssa.Int32ToAuxInt(c)
9082 v.AddArg2(x, y)
9083 return true
9084 }
9085
9086
9087 for {
9088 x := v_0
9089 if v_1.Op != ssaop.OpARMSRLconst {
9090 break
9091 }
9092 c := ssa.AuxIntToInt32(v_1.AuxInt)
9093 y := v_1.Args[0]
9094 v.Reset(ssaop.OpARMRSBshiftRL)
9095 v.AuxInt = ssa.Int32ToAuxInt(c)
9096 v.AddArg2(x, y)
9097 return true
9098 }
9099
9100
9101 for {
9102 if v_0.Op != ssaop.OpARMSRLconst {
9103 break
9104 }
9105 c := ssa.AuxIntToInt32(v_0.AuxInt)
9106 y := v_0.Args[0]
9107 x := v_1
9108 v.Reset(ssaop.OpARMSUBshiftRL)
9109 v.AuxInt = ssa.Int32ToAuxInt(c)
9110 v.AddArg2(x, y)
9111 return true
9112 }
9113
9114
9115 for {
9116 x := v_0
9117 if v_1.Op != ssaop.OpARMSRAconst {
9118 break
9119 }
9120 c := ssa.AuxIntToInt32(v_1.AuxInt)
9121 y := v_1.Args[0]
9122 v.Reset(ssaop.OpARMRSBshiftRA)
9123 v.AuxInt = ssa.Int32ToAuxInt(c)
9124 v.AddArg2(x, y)
9125 return true
9126 }
9127
9128
9129 for {
9130 if v_0.Op != ssaop.OpARMSRAconst {
9131 break
9132 }
9133 c := ssa.AuxIntToInt32(v_0.AuxInt)
9134 y := v_0.Args[0]
9135 x := v_1
9136 v.Reset(ssaop.OpARMSUBshiftRA)
9137 v.AuxInt = ssa.Int32ToAuxInt(c)
9138 v.AddArg2(x, y)
9139 return true
9140 }
9141
9142
9143 for {
9144 x := v_0
9145 if v_1.Op != ssaop.OpARMSLL {
9146 break
9147 }
9148 z := v_1.Args[1]
9149 y := v_1.Args[0]
9150 v.Reset(ssaop.OpARMRSBshiftLLreg)
9151 v.AddArg3(x, y, z)
9152 return true
9153 }
9154
9155
9156 for {
9157 if v_0.Op != ssaop.OpARMSLL {
9158 break
9159 }
9160 z := v_0.Args[1]
9161 y := v_0.Args[0]
9162 x := v_1
9163 v.Reset(ssaop.OpARMSUBshiftLLreg)
9164 v.AddArg3(x, y, z)
9165 return true
9166 }
9167
9168
9169 for {
9170 x := v_0
9171 if v_1.Op != ssaop.OpARMSRL {
9172 break
9173 }
9174 z := v_1.Args[1]
9175 y := v_1.Args[0]
9176 v.Reset(ssaop.OpARMRSBshiftRLreg)
9177 v.AddArg3(x, y, z)
9178 return true
9179 }
9180
9181
9182 for {
9183 if v_0.Op != ssaop.OpARMSRL {
9184 break
9185 }
9186 z := v_0.Args[1]
9187 y := v_0.Args[0]
9188 x := v_1
9189 v.Reset(ssaop.OpARMSUBshiftRLreg)
9190 v.AddArg3(x, y, z)
9191 return true
9192 }
9193
9194
9195 for {
9196 x := v_0
9197 if v_1.Op != ssaop.OpARMSRA {
9198 break
9199 }
9200 z := v_1.Args[1]
9201 y := v_1.Args[0]
9202 v.Reset(ssaop.OpARMRSBshiftRAreg)
9203 v.AddArg3(x, y, z)
9204 return true
9205 }
9206
9207
9208 for {
9209 if v_0.Op != ssaop.OpARMSRA {
9210 break
9211 }
9212 z := v_0.Args[1]
9213 y := v_0.Args[0]
9214 x := v_1
9215 v.Reset(ssaop.OpARMSUBshiftRAreg)
9216 v.AddArg3(x, y, z)
9217 return true
9218 }
9219
9220
9221 for {
9222 x := v_0
9223 if x != v_1 {
9224 break
9225 }
9226 v.Reset(ssaop.OpARMMOVWconst)
9227 v.AuxInt = ssa.Int32ToAuxInt(0)
9228 return true
9229 }
9230
9231
9232
9233 for {
9234 if v_0.Op != ssaop.OpARMMUL {
9235 break
9236 }
9237 y := v_0.Args[1]
9238 x := v_0.Args[0]
9239 a := v_1
9240 if !(buildcfg.GOARM.Version == 7) {
9241 break
9242 }
9243 v.Reset(ssaop.OpARMMULS)
9244 v.AddArg3(x, y, a)
9245 return true
9246 }
9247 return false
9248 }
9249 func rewriteValue_OpARMRSBSshiftLL(v *ssa.Value) bool {
9250 v_1 := v.Args[1]
9251 v_0 := v.Args[0]
9252 b := v.Block
9253
9254
9255 for {
9256 d := ssa.AuxIntToInt32(v.AuxInt)
9257 if v_0.Op != ssaop.OpARMMOVWconst {
9258 break
9259 }
9260 c := ssa.AuxIntToInt32(v_0.AuxInt)
9261 x := v_1
9262 v.Reset(ssaop.OpARMSUBSconst)
9263 v.AuxInt = ssa.Int32ToAuxInt(c)
9264 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
9265 v0.AuxInt = ssa.Int32ToAuxInt(d)
9266 v0.AddArg(x)
9267 v.AddArg(v0)
9268 return true
9269 }
9270
9271
9272 for {
9273 d := ssa.AuxIntToInt32(v.AuxInt)
9274 x := v_0
9275 if v_1.Op != ssaop.OpARMMOVWconst {
9276 break
9277 }
9278 c := ssa.AuxIntToInt32(v_1.AuxInt)
9279 v.Reset(ssaop.OpARMRSBSconst)
9280 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
9281 v.AddArg(x)
9282 return true
9283 }
9284 return false
9285 }
9286 func rewriteValue_OpARMRSBSshiftLLreg(v *ssa.Value) bool {
9287 v_2 := v.Args[2]
9288 v_1 := v.Args[1]
9289 v_0 := v.Args[0]
9290 b := v.Block
9291
9292
9293 for {
9294 if v_0.Op != ssaop.OpARMMOVWconst {
9295 break
9296 }
9297 c := ssa.AuxIntToInt32(v_0.AuxInt)
9298 x := v_1
9299 y := v_2
9300 v.Reset(ssaop.OpARMSUBSconst)
9301 v.AuxInt = ssa.Int32ToAuxInt(c)
9302 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
9303 v0.AddArg2(x, y)
9304 v.AddArg(v0)
9305 return true
9306 }
9307
9308
9309
9310 for {
9311 x := v_0
9312 y := v_1
9313 if v_2.Op != ssaop.OpARMMOVWconst {
9314 break
9315 }
9316 c := ssa.AuxIntToInt32(v_2.AuxInt)
9317 if !(0 <= c && c < 32) {
9318 break
9319 }
9320 v.Reset(ssaop.OpARMRSBSshiftLL)
9321 v.AuxInt = ssa.Int32ToAuxInt(c)
9322 v.AddArg2(x, y)
9323 return true
9324 }
9325 return false
9326 }
9327 func rewriteValue_OpARMRSBSshiftRA(v *ssa.Value) bool {
9328 v_1 := v.Args[1]
9329 v_0 := v.Args[0]
9330 b := v.Block
9331
9332
9333 for {
9334 d := ssa.AuxIntToInt32(v.AuxInt)
9335 if v_0.Op != ssaop.OpARMMOVWconst {
9336 break
9337 }
9338 c := ssa.AuxIntToInt32(v_0.AuxInt)
9339 x := v_1
9340 v.Reset(ssaop.OpARMSUBSconst)
9341 v.AuxInt = ssa.Int32ToAuxInt(c)
9342 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
9343 v0.AuxInt = ssa.Int32ToAuxInt(d)
9344 v0.AddArg(x)
9345 v.AddArg(v0)
9346 return true
9347 }
9348
9349
9350 for {
9351 d := ssa.AuxIntToInt32(v.AuxInt)
9352 x := v_0
9353 if v_1.Op != ssaop.OpARMMOVWconst {
9354 break
9355 }
9356 c := ssa.AuxIntToInt32(v_1.AuxInt)
9357 v.Reset(ssaop.OpARMRSBSconst)
9358 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
9359 v.AddArg(x)
9360 return true
9361 }
9362 return false
9363 }
9364 func rewriteValue_OpARMRSBSshiftRAreg(v *ssa.Value) bool {
9365 v_2 := v.Args[2]
9366 v_1 := v.Args[1]
9367 v_0 := v.Args[0]
9368 b := v.Block
9369
9370
9371 for {
9372 if v_0.Op != ssaop.OpARMMOVWconst {
9373 break
9374 }
9375 c := ssa.AuxIntToInt32(v_0.AuxInt)
9376 x := v_1
9377 y := v_2
9378 v.Reset(ssaop.OpARMSUBSconst)
9379 v.AuxInt = ssa.Int32ToAuxInt(c)
9380 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
9381 v0.AddArg2(x, y)
9382 v.AddArg(v0)
9383 return true
9384 }
9385
9386
9387
9388 for {
9389 x := v_0
9390 y := v_1
9391 if v_2.Op != ssaop.OpARMMOVWconst {
9392 break
9393 }
9394 c := ssa.AuxIntToInt32(v_2.AuxInt)
9395 if !(0 <= c && c < 32) {
9396 break
9397 }
9398 v.Reset(ssaop.OpARMRSBSshiftRA)
9399 v.AuxInt = ssa.Int32ToAuxInt(c)
9400 v.AddArg2(x, y)
9401 return true
9402 }
9403 return false
9404 }
9405 func rewriteValue_OpARMRSBSshiftRL(v *ssa.Value) bool {
9406 v_1 := v.Args[1]
9407 v_0 := v.Args[0]
9408 b := v.Block
9409
9410
9411 for {
9412 d := ssa.AuxIntToInt32(v.AuxInt)
9413 if v_0.Op != ssaop.OpARMMOVWconst {
9414 break
9415 }
9416 c := ssa.AuxIntToInt32(v_0.AuxInt)
9417 x := v_1
9418 v.Reset(ssaop.OpARMSUBSconst)
9419 v.AuxInt = ssa.Int32ToAuxInt(c)
9420 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
9421 v0.AuxInt = ssa.Int32ToAuxInt(d)
9422 v0.AddArg(x)
9423 v.AddArg(v0)
9424 return true
9425 }
9426
9427
9428 for {
9429 d := ssa.AuxIntToInt32(v.AuxInt)
9430 x := v_0
9431 if v_1.Op != ssaop.OpARMMOVWconst {
9432 break
9433 }
9434 c := ssa.AuxIntToInt32(v_1.AuxInt)
9435 v.Reset(ssaop.OpARMRSBSconst)
9436 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9437 v.AddArg(x)
9438 return true
9439 }
9440 return false
9441 }
9442 func rewriteValue_OpARMRSBSshiftRLreg(v *ssa.Value) bool {
9443 v_2 := v.Args[2]
9444 v_1 := v.Args[1]
9445 v_0 := v.Args[0]
9446 b := v.Block
9447
9448
9449 for {
9450 if v_0.Op != ssaop.OpARMMOVWconst {
9451 break
9452 }
9453 c := ssa.AuxIntToInt32(v_0.AuxInt)
9454 x := v_1
9455 y := v_2
9456 v.Reset(ssaop.OpARMSUBSconst)
9457 v.AuxInt = ssa.Int32ToAuxInt(c)
9458 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
9459 v0.AddArg2(x, y)
9460 v.AddArg(v0)
9461 return true
9462 }
9463
9464
9465
9466 for {
9467 x := v_0
9468 y := v_1
9469 if v_2.Op != ssaop.OpARMMOVWconst {
9470 break
9471 }
9472 c := ssa.AuxIntToInt32(v_2.AuxInt)
9473 if !(0 <= c && c < 32) {
9474 break
9475 }
9476 v.Reset(ssaop.OpARMRSBSshiftRL)
9477 v.AuxInt = ssa.Int32ToAuxInt(c)
9478 v.AddArg2(x, y)
9479 return true
9480 }
9481 return false
9482 }
9483 func rewriteValue_OpARMRSBconst(v *ssa.Value) bool {
9484 v_0 := v.Args[0]
9485
9486
9487 for {
9488 c := ssa.AuxIntToInt32(v.AuxInt)
9489 if v_0.Op != ssaop.OpARMMOVWconst {
9490 break
9491 }
9492 d := ssa.AuxIntToInt32(v_0.AuxInt)
9493 v.Reset(ssaop.OpARMMOVWconst)
9494 v.AuxInt = ssa.Int32ToAuxInt(c - d)
9495 return true
9496 }
9497
9498
9499 for {
9500 c := ssa.AuxIntToInt32(v.AuxInt)
9501 if v_0.Op != ssaop.OpARMRSBconst {
9502 break
9503 }
9504 d := ssa.AuxIntToInt32(v_0.AuxInt)
9505 x := v_0.Args[0]
9506 v.Reset(ssaop.OpARMADDconst)
9507 v.AuxInt = ssa.Int32ToAuxInt(c - d)
9508 v.AddArg(x)
9509 return true
9510 }
9511
9512
9513 for {
9514 c := ssa.AuxIntToInt32(v.AuxInt)
9515 if v_0.Op != ssaop.OpARMADDconst {
9516 break
9517 }
9518 d := ssa.AuxIntToInt32(v_0.AuxInt)
9519 x := v_0.Args[0]
9520 v.Reset(ssaop.OpARMRSBconst)
9521 v.AuxInt = ssa.Int32ToAuxInt(c - d)
9522 v.AddArg(x)
9523 return true
9524 }
9525
9526
9527 for {
9528 c := ssa.AuxIntToInt32(v.AuxInt)
9529 if v_0.Op != ssaop.OpARMSUBconst {
9530 break
9531 }
9532 d := ssa.AuxIntToInt32(v_0.AuxInt)
9533 x := v_0.Args[0]
9534 v.Reset(ssaop.OpARMRSBconst)
9535 v.AuxInt = ssa.Int32ToAuxInt(c + d)
9536 v.AddArg(x)
9537 return true
9538 }
9539 return false
9540 }
9541 func rewriteValue_OpARMRSBshiftLL(v *ssa.Value) bool {
9542 v_1 := v.Args[1]
9543 v_0 := v.Args[0]
9544 b := v.Block
9545
9546
9547 for {
9548 d := ssa.AuxIntToInt32(v.AuxInt)
9549 if v_0.Op != ssaop.OpARMMOVWconst {
9550 break
9551 }
9552 c := ssa.AuxIntToInt32(v_0.AuxInt)
9553 x := v_1
9554 v.Reset(ssaop.OpARMSUBconst)
9555 v.AuxInt = ssa.Int32ToAuxInt(c)
9556 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
9557 v0.AuxInt = ssa.Int32ToAuxInt(d)
9558 v0.AddArg(x)
9559 v.AddArg(v0)
9560 return true
9561 }
9562
9563
9564 for {
9565 d := ssa.AuxIntToInt32(v.AuxInt)
9566 x := v_0
9567 if v_1.Op != ssaop.OpARMMOVWconst {
9568 break
9569 }
9570 c := ssa.AuxIntToInt32(v_1.AuxInt)
9571 v.Reset(ssaop.OpARMRSBconst)
9572 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
9573 v.AddArg(x)
9574 return true
9575 }
9576
9577
9578 for {
9579 c := ssa.AuxIntToInt32(v.AuxInt)
9580 if v_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
9581 break
9582 }
9583 x := v_0.Args[0]
9584 if x != v_1 {
9585 break
9586 }
9587 v.Reset(ssaop.OpARMMOVWconst)
9588 v.AuxInt = ssa.Int32ToAuxInt(0)
9589 return true
9590 }
9591 return false
9592 }
9593 func rewriteValue_OpARMRSBshiftLLreg(v *ssa.Value) bool {
9594 v_2 := v.Args[2]
9595 v_1 := v.Args[1]
9596 v_0 := v.Args[0]
9597 b := v.Block
9598
9599
9600 for {
9601 if v_0.Op != ssaop.OpARMMOVWconst {
9602 break
9603 }
9604 c := ssa.AuxIntToInt32(v_0.AuxInt)
9605 x := v_1
9606 y := v_2
9607 v.Reset(ssaop.OpARMSUBconst)
9608 v.AuxInt = ssa.Int32ToAuxInt(c)
9609 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
9610 v0.AddArg2(x, y)
9611 v.AddArg(v0)
9612 return true
9613 }
9614
9615
9616
9617 for {
9618 x := v_0
9619 y := v_1
9620 if v_2.Op != ssaop.OpARMMOVWconst {
9621 break
9622 }
9623 c := ssa.AuxIntToInt32(v_2.AuxInt)
9624 if !(0 <= c && c < 32) {
9625 break
9626 }
9627 v.Reset(ssaop.OpARMRSBshiftLL)
9628 v.AuxInt = ssa.Int32ToAuxInt(c)
9629 v.AddArg2(x, y)
9630 return true
9631 }
9632 return false
9633 }
9634 func rewriteValue_OpARMRSBshiftRA(v *ssa.Value) bool {
9635 v_1 := v.Args[1]
9636 v_0 := v.Args[0]
9637 b := v.Block
9638
9639
9640 for {
9641 d := ssa.AuxIntToInt32(v.AuxInt)
9642 if v_0.Op != ssaop.OpARMMOVWconst {
9643 break
9644 }
9645 c := ssa.AuxIntToInt32(v_0.AuxInt)
9646 x := v_1
9647 v.Reset(ssaop.OpARMSUBconst)
9648 v.AuxInt = ssa.Int32ToAuxInt(c)
9649 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
9650 v0.AuxInt = ssa.Int32ToAuxInt(d)
9651 v0.AddArg(x)
9652 v.AddArg(v0)
9653 return true
9654 }
9655
9656
9657 for {
9658 d := ssa.AuxIntToInt32(v.AuxInt)
9659 x := v_0
9660 if v_1.Op != ssaop.OpARMMOVWconst {
9661 break
9662 }
9663 c := ssa.AuxIntToInt32(v_1.AuxInt)
9664 v.Reset(ssaop.OpARMRSBconst)
9665 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
9666 v.AddArg(x)
9667 return true
9668 }
9669
9670
9671 for {
9672 c := ssa.AuxIntToInt32(v.AuxInt)
9673 if v_0.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
9674 break
9675 }
9676 x := v_0.Args[0]
9677 if x != v_1 {
9678 break
9679 }
9680 v.Reset(ssaop.OpARMMOVWconst)
9681 v.AuxInt = ssa.Int32ToAuxInt(0)
9682 return true
9683 }
9684 return false
9685 }
9686 func rewriteValue_OpARMRSBshiftRAreg(v *ssa.Value) bool {
9687 v_2 := v.Args[2]
9688 v_1 := v.Args[1]
9689 v_0 := v.Args[0]
9690 b := v.Block
9691
9692
9693 for {
9694 if v_0.Op != ssaop.OpARMMOVWconst {
9695 break
9696 }
9697 c := ssa.AuxIntToInt32(v_0.AuxInt)
9698 x := v_1
9699 y := v_2
9700 v.Reset(ssaop.OpARMSUBconst)
9701 v.AuxInt = ssa.Int32ToAuxInt(c)
9702 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
9703 v0.AddArg2(x, y)
9704 v.AddArg(v0)
9705 return true
9706 }
9707
9708
9709
9710 for {
9711 x := v_0
9712 y := v_1
9713 if v_2.Op != ssaop.OpARMMOVWconst {
9714 break
9715 }
9716 c := ssa.AuxIntToInt32(v_2.AuxInt)
9717 if !(0 <= c && c < 32) {
9718 break
9719 }
9720 v.Reset(ssaop.OpARMRSBshiftRA)
9721 v.AuxInt = ssa.Int32ToAuxInt(c)
9722 v.AddArg2(x, y)
9723 return true
9724 }
9725 return false
9726 }
9727 func rewriteValue_OpARMRSBshiftRL(v *ssa.Value) bool {
9728 v_1 := v.Args[1]
9729 v_0 := v.Args[0]
9730 b := v.Block
9731
9732
9733 for {
9734 d := ssa.AuxIntToInt32(v.AuxInt)
9735 if v_0.Op != ssaop.OpARMMOVWconst {
9736 break
9737 }
9738 c := ssa.AuxIntToInt32(v_0.AuxInt)
9739 x := v_1
9740 v.Reset(ssaop.OpARMSUBconst)
9741 v.AuxInt = ssa.Int32ToAuxInt(c)
9742 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
9743 v0.AuxInt = ssa.Int32ToAuxInt(d)
9744 v0.AddArg(x)
9745 v.AddArg(v0)
9746 return true
9747 }
9748
9749
9750 for {
9751 d := ssa.AuxIntToInt32(v.AuxInt)
9752 x := v_0
9753 if v_1.Op != ssaop.OpARMMOVWconst {
9754 break
9755 }
9756 c := ssa.AuxIntToInt32(v_1.AuxInt)
9757 v.Reset(ssaop.OpARMRSBconst)
9758 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9759 v.AddArg(x)
9760 return true
9761 }
9762
9763
9764 for {
9765 c := ssa.AuxIntToInt32(v.AuxInt)
9766 if v_0.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
9767 break
9768 }
9769 x := v_0.Args[0]
9770 if x != v_1 {
9771 break
9772 }
9773 v.Reset(ssaop.OpARMMOVWconst)
9774 v.AuxInt = ssa.Int32ToAuxInt(0)
9775 return true
9776 }
9777 return false
9778 }
9779 func rewriteValue_OpARMRSBshiftRLreg(v *ssa.Value) bool {
9780 v_2 := v.Args[2]
9781 v_1 := v.Args[1]
9782 v_0 := v.Args[0]
9783 b := v.Block
9784
9785
9786 for {
9787 if v_0.Op != ssaop.OpARMMOVWconst {
9788 break
9789 }
9790 c := ssa.AuxIntToInt32(v_0.AuxInt)
9791 x := v_1
9792 y := v_2
9793 v.Reset(ssaop.OpARMSUBconst)
9794 v.AuxInt = ssa.Int32ToAuxInt(c)
9795 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
9796 v0.AddArg2(x, y)
9797 v.AddArg(v0)
9798 return true
9799 }
9800
9801
9802
9803 for {
9804 x := v_0
9805 y := v_1
9806 if v_2.Op != ssaop.OpARMMOVWconst {
9807 break
9808 }
9809 c := ssa.AuxIntToInt32(v_2.AuxInt)
9810 if !(0 <= c && c < 32) {
9811 break
9812 }
9813 v.Reset(ssaop.OpARMRSBshiftRL)
9814 v.AuxInt = ssa.Int32ToAuxInt(c)
9815 v.AddArg2(x, y)
9816 return true
9817 }
9818 return false
9819 }
9820 func rewriteValue_OpARMRSCconst(v *ssa.Value) bool {
9821 v_1 := v.Args[1]
9822 v_0 := v.Args[0]
9823
9824
9825 for {
9826 c := ssa.AuxIntToInt32(v.AuxInt)
9827 if v_0.Op != ssaop.OpARMADDconst {
9828 break
9829 }
9830 d := ssa.AuxIntToInt32(v_0.AuxInt)
9831 x := v_0.Args[0]
9832 flags := v_1
9833 v.Reset(ssaop.OpARMRSCconst)
9834 v.AuxInt = ssa.Int32ToAuxInt(c - d)
9835 v.AddArg2(x, flags)
9836 return true
9837 }
9838
9839
9840 for {
9841 c := ssa.AuxIntToInt32(v.AuxInt)
9842 if v_0.Op != ssaop.OpARMSUBconst {
9843 break
9844 }
9845 d := ssa.AuxIntToInt32(v_0.AuxInt)
9846 x := v_0.Args[0]
9847 flags := v_1
9848 v.Reset(ssaop.OpARMRSCconst)
9849 v.AuxInt = ssa.Int32ToAuxInt(c + d)
9850 v.AddArg2(x, flags)
9851 return true
9852 }
9853 return false
9854 }
9855 func rewriteValue_OpARMRSCshiftLL(v *ssa.Value) bool {
9856 v_2 := v.Args[2]
9857 v_1 := v.Args[1]
9858 v_0 := v.Args[0]
9859 b := v.Block
9860
9861
9862 for {
9863 d := ssa.AuxIntToInt32(v.AuxInt)
9864 if v_0.Op != ssaop.OpARMMOVWconst {
9865 break
9866 }
9867 c := ssa.AuxIntToInt32(v_0.AuxInt)
9868 x := v_1
9869 flags := v_2
9870 v.Reset(ssaop.OpARMSBCconst)
9871 v.AuxInt = ssa.Int32ToAuxInt(c)
9872 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
9873 v0.AuxInt = ssa.Int32ToAuxInt(d)
9874 v0.AddArg(x)
9875 v.AddArg2(v0, flags)
9876 return true
9877 }
9878
9879
9880 for {
9881 d := ssa.AuxIntToInt32(v.AuxInt)
9882 x := v_0
9883 if v_1.Op != ssaop.OpARMMOVWconst {
9884 break
9885 }
9886 c := ssa.AuxIntToInt32(v_1.AuxInt)
9887 flags := v_2
9888 v.Reset(ssaop.OpARMRSCconst)
9889 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
9890 v.AddArg2(x, flags)
9891 return true
9892 }
9893 return false
9894 }
9895 func rewriteValue_OpARMRSCshiftLLreg(v *ssa.Value) bool {
9896 v_3 := v.Args[3]
9897 v_2 := v.Args[2]
9898 v_1 := v.Args[1]
9899 v_0 := v.Args[0]
9900 b := v.Block
9901
9902
9903 for {
9904 if v_0.Op != ssaop.OpARMMOVWconst {
9905 break
9906 }
9907 c := ssa.AuxIntToInt32(v_0.AuxInt)
9908 x := v_1
9909 y := v_2
9910 flags := v_3
9911 v.Reset(ssaop.OpARMSBCconst)
9912 v.AuxInt = ssa.Int32ToAuxInt(c)
9913 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
9914 v0.AddArg2(x, y)
9915 v.AddArg2(v0, flags)
9916 return true
9917 }
9918
9919
9920
9921 for {
9922 x := v_0
9923 y := v_1
9924 if v_2.Op != ssaop.OpARMMOVWconst {
9925 break
9926 }
9927 c := ssa.AuxIntToInt32(v_2.AuxInt)
9928 flags := v_3
9929 if !(0 <= c && c < 32) {
9930 break
9931 }
9932 v.Reset(ssaop.OpARMRSCshiftLL)
9933 v.AuxInt = ssa.Int32ToAuxInt(c)
9934 v.AddArg3(x, y, flags)
9935 return true
9936 }
9937 return false
9938 }
9939 func rewriteValue_OpARMRSCshiftRA(v *ssa.Value) bool {
9940 v_2 := v.Args[2]
9941 v_1 := v.Args[1]
9942 v_0 := v.Args[0]
9943 b := v.Block
9944
9945
9946 for {
9947 d := ssa.AuxIntToInt32(v.AuxInt)
9948 if v_0.Op != ssaop.OpARMMOVWconst {
9949 break
9950 }
9951 c := ssa.AuxIntToInt32(v_0.AuxInt)
9952 x := v_1
9953 flags := v_2
9954 v.Reset(ssaop.OpARMSBCconst)
9955 v.AuxInt = ssa.Int32ToAuxInt(c)
9956 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
9957 v0.AuxInt = ssa.Int32ToAuxInt(d)
9958 v0.AddArg(x)
9959 v.AddArg2(v0, flags)
9960 return true
9961 }
9962
9963
9964 for {
9965 d := ssa.AuxIntToInt32(v.AuxInt)
9966 x := v_0
9967 if v_1.Op != ssaop.OpARMMOVWconst {
9968 break
9969 }
9970 c := ssa.AuxIntToInt32(v_1.AuxInt)
9971 flags := v_2
9972 v.Reset(ssaop.OpARMRSCconst)
9973 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
9974 v.AddArg2(x, flags)
9975 return true
9976 }
9977 return false
9978 }
9979 func rewriteValue_OpARMRSCshiftRAreg(v *ssa.Value) bool {
9980 v_3 := v.Args[3]
9981 v_2 := v.Args[2]
9982 v_1 := v.Args[1]
9983 v_0 := v.Args[0]
9984 b := v.Block
9985
9986
9987 for {
9988 if v_0.Op != ssaop.OpARMMOVWconst {
9989 break
9990 }
9991 c := ssa.AuxIntToInt32(v_0.AuxInt)
9992 x := v_1
9993 y := v_2
9994 flags := v_3
9995 v.Reset(ssaop.OpARMSBCconst)
9996 v.AuxInt = ssa.Int32ToAuxInt(c)
9997 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
9998 v0.AddArg2(x, y)
9999 v.AddArg2(v0, flags)
10000 return true
10001 }
10002
10003
10004
10005 for {
10006 x := v_0
10007 y := v_1
10008 if v_2.Op != ssaop.OpARMMOVWconst {
10009 break
10010 }
10011 c := ssa.AuxIntToInt32(v_2.AuxInt)
10012 flags := v_3
10013 if !(0 <= c && c < 32) {
10014 break
10015 }
10016 v.Reset(ssaop.OpARMRSCshiftRA)
10017 v.AuxInt = ssa.Int32ToAuxInt(c)
10018 v.AddArg3(x, y, flags)
10019 return true
10020 }
10021 return false
10022 }
10023 func rewriteValue_OpARMRSCshiftRL(v *ssa.Value) bool {
10024 v_2 := v.Args[2]
10025 v_1 := v.Args[1]
10026 v_0 := v.Args[0]
10027 b := v.Block
10028
10029
10030 for {
10031 d := ssa.AuxIntToInt32(v.AuxInt)
10032 if v_0.Op != ssaop.OpARMMOVWconst {
10033 break
10034 }
10035 c := ssa.AuxIntToInt32(v_0.AuxInt)
10036 x := v_1
10037 flags := v_2
10038 v.Reset(ssaop.OpARMSBCconst)
10039 v.AuxInt = ssa.Int32ToAuxInt(c)
10040 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
10041 v0.AuxInt = ssa.Int32ToAuxInt(d)
10042 v0.AddArg(x)
10043 v.AddArg2(v0, flags)
10044 return true
10045 }
10046
10047
10048 for {
10049 d := ssa.AuxIntToInt32(v.AuxInt)
10050 x := v_0
10051 if v_1.Op != ssaop.OpARMMOVWconst {
10052 break
10053 }
10054 c := ssa.AuxIntToInt32(v_1.AuxInt)
10055 flags := v_2
10056 v.Reset(ssaop.OpARMRSCconst)
10057 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
10058 v.AddArg2(x, flags)
10059 return true
10060 }
10061 return false
10062 }
10063 func rewriteValue_OpARMRSCshiftRLreg(v *ssa.Value) bool {
10064 v_3 := v.Args[3]
10065 v_2 := v.Args[2]
10066 v_1 := v.Args[1]
10067 v_0 := v.Args[0]
10068 b := v.Block
10069
10070
10071 for {
10072 if v_0.Op != ssaop.OpARMMOVWconst {
10073 break
10074 }
10075 c := ssa.AuxIntToInt32(v_0.AuxInt)
10076 x := v_1
10077 y := v_2
10078 flags := v_3
10079 v.Reset(ssaop.OpARMSBCconst)
10080 v.AuxInt = ssa.Int32ToAuxInt(c)
10081 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
10082 v0.AddArg2(x, y)
10083 v.AddArg2(v0, flags)
10084 return true
10085 }
10086
10087
10088
10089 for {
10090 x := v_0
10091 y := v_1
10092 if v_2.Op != ssaop.OpARMMOVWconst {
10093 break
10094 }
10095 c := ssa.AuxIntToInt32(v_2.AuxInt)
10096 flags := v_3
10097 if !(0 <= c && c < 32) {
10098 break
10099 }
10100 v.Reset(ssaop.OpARMRSCshiftRL)
10101 v.AuxInt = ssa.Int32ToAuxInt(c)
10102 v.AddArg3(x, y, flags)
10103 return true
10104 }
10105 return false
10106 }
10107 func rewriteValue_OpARMSBC(v *ssa.Value) bool {
10108 v_2 := v.Args[2]
10109 v_1 := v.Args[1]
10110 v_0 := v.Args[0]
10111
10112
10113 for {
10114 if v_0.Op != ssaop.OpARMMOVWconst {
10115 break
10116 }
10117 c := ssa.AuxIntToInt32(v_0.AuxInt)
10118 x := v_1
10119 flags := v_2
10120 v.Reset(ssaop.OpARMRSCconst)
10121 v.AuxInt = ssa.Int32ToAuxInt(c)
10122 v.AddArg2(x, flags)
10123 return true
10124 }
10125
10126
10127 for {
10128 x := v_0
10129 if v_1.Op != ssaop.OpARMMOVWconst {
10130 break
10131 }
10132 c := ssa.AuxIntToInt32(v_1.AuxInt)
10133 flags := v_2
10134 v.Reset(ssaop.OpARMSBCconst)
10135 v.AuxInt = ssa.Int32ToAuxInt(c)
10136 v.AddArg2(x, flags)
10137 return true
10138 }
10139
10140
10141 for {
10142 x := v_0
10143 if v_1.Op != ssaop.OpARMSLLconst {
10144 break
10145 }
10146 c := ssa.AuxIntToInt32(v_1.AuxInt)
10147 y := v_1.Args[0]
10148 flags := v_2
10149 v.Reset(ssaop.OpARMSBCshiftLL)
10150 v.AuxInt = ssa.Int32ToAuxInt(c)
10151 v.AddArg3(x, y, flags)
10152 return true
10153 }
10154
10155
10156 for {
10157 if v_0.Op != ssaop.OpARMSLLconst {
10158 break
10159 }
10160 c := ssa.AuxIntToInt32(v_0.AuxInt)
10161 y := v_0.Args[0]
10162 x := v_1
10163 flags := v_2
10164 v.Reset(ssaop.OpARMRSCshiftLL)
10165 v.AuxInt = ssa.Int32ToAuxInt(c)
10166 v.AddArg3(x, y, flags)
10167 return true
10168 }
10169
10170
10171 for {
10172 x := v_0
10173 if v_1.Op != ssaop.OpARMSRLconst {
10174 break
10175 }
10176 c := ssa.AuxIntToInt32(v_1.AuxInt)
10177 y := v_1.Args[0]
10178 flags := v_2
10179 v.Reset(ssaop.OpARMSBCshiftRL)
10180 v.AuxInt = ssa.Int32ToAuxInt(c)
10181 v.AddArg3(x, y, flags)
10182 return true
10183 }
10184
10185
10186 for {
10187 if v_0.Op != ssaop.OpARMSRLconst {
10188 break
10189 }
10190 c := ssa.AuxIntToInt32(v_0.AuxInt)
10191 y := v_0.Args[0]
10192 x := v_1
10193 flags := v_2
10194 v.Reset(ssaop.OpARMRSCshiftRL)
10195 v.AuxInt = ssa.Int32ToAuxInt(c)
10196 v.AddArg3(x, y, flags)
10197 return true
10198 }
10199
10200
10201 for {
10202 x := v_0
10203 if v_1.Op != ssaop.OpARMSRAconst {
10204 break
10205 }
10206 c := ssa.AuxIntToInt32(v_1.AuxInt)
10207 y := v_1.Args[0]
10208 flags := v_2
10209 v.Reset(ssaop.OpARMSBCshiftRA)
10210 v.AuxInt = ssa.Int32ToAuxInt(c)
10211 v.AddArg3(x, y, flags)
10212 return true
10213 }
10214
10215
10216 for {
10217 if v_0.Op != ssaop.OpARMSRAconst {
10218 break
10219 }
10220 c := ssa.AuxIntToInt32(v_0.AuxInt)
10221 y := v_0.Args[0]
10222 x := v_1
10223 flags := v_2
10224 v.Reset(ssaop.OpARMRSCshiftRA)
10225 v.AuxInt = ssa.Int32ToAuxInt(c)
10226 v.AddArg3(x, y, flags)
10227 return true
10228 }
10229
10230
10231 for {
10232 x := v_0
10233 if v_1.Op != ssaop.OpARMSLL {
10234 break
10235 }
10236 z := v_1.Args[1]
10237 y := v_1.Args[0]
10238 flags := v_2
10239 v.Reset(ssaop.OpARMSBCshiftLLreg)
10240 v.AddArg4(x, y, z, flags)
10241 return true
10242 }
10243
10244
10245 for {
10246 if v_0.Op != ssaop.OpARMSLL {
10247 break
10248 }
10249 z := v_0.Args[1]
10250 y := v_0.Args[0]
10251 x := v_1
10252 flags := v_2
10253 v.Reset(ssaop.OpARMRSCshiftLLreg)
10254 v.AddArg4(x, y, z, flags)
10255 return true
10256 }
10257
10258
10259 for {
10260 x := v_0
10261 if v_1.Op != ssaop.OpARMSRL {
10262 break
10263 }
10264 z := v_1.Args[1]
10265 y := v_1.Args[0]
10266 flags := v_2
10267 v.Reset(ssaop.OpARMSBCshiftRLreg)
10268 v.AddArg4(x, y, z, flags)
10269 return true
10270 }
10271
10272
10273 for {
10274 if v_0.Op != ssaop.OpARMSRL {
10275 break
10276 }
10277 z := v_0.Args[1]
10278 y := v_0.Args[0]
10279 x := v_1
10280 flags := v_2
10281 v.Reset(ssaop.OpARMRSCshiftRLreg)
10282 v.AddArg4(x, y, z, flags)
10283 return true
10284 }
10285
10286
10287 for {
10288 x := v_0
10289 if v_1.Op != ssaop.OpARMSRA {
10290 break
10291 }
10292 z := v_1.Args[1]
10293 y := v_1.Args[0]
10294 flags := v_2
10295 v.Reset(ssaop.OpARMSBCshiftRAreg)
10296 v.AddArg4(x, y, z, flags)
10297 return true
10298 }
10299
10300
10301 for {
10302 if v_0.Op != ssaop.OpARMSRA {
10303 break
10304 }
10305 z := v_0.Args[1]
10306 y := v_0.Args[0]
10307 x := v_1
10308 flags := v_2
10309 v.Reset(ssaop.OpARMRSCshiftRAreg)
10310 v.AddArg4(x, y, z, flags)
10311 return true
10312 }
10313 return false
10314 }
10315 func rewriteValue_OpARMSBCconst(v *ssa.Value) bool {
10316 v_1 := v.Args[1]
10317 v_0 := v.Args[0]
10318
10319
10320 for {
10321 c := ssa.AuxIntToInt32(v.AuxInt)
10322 if v_0.Op != ssaop.OpARMADDconst {
10323 break
10324 }
10325 d := ssa.AuxIntToInt32(v_0.AuxInt)
10326 x := v_0.Args[0]
10327 flags := v_1
10328 v.Reset(ssaop.OpARMSBCconst)
10329 v.AuxInt = ssa.Int32ToAuxInt(c - d)
10330 v.AddArg2(x, flags)
10331 return true
10332 }
10333
10334
10335 for {
10336 c := ssa.AuxIntToInt32(v.AuxInt)
10337 if v_0.Op != ssaop.OpARMSUBconst {
10338 break
10339 }
10340 d := ssa.AuxIntToInt32(v_0.AuxInt)
10341 x := v_0.Args[0]
10342 flags := v_1
10343 v.Reset(ssaop.OpARMSBCconst)
10344 v.AuxInt = ssa.Int32ToAuxInt(c + d)
10345 v.AddArg2(x, flags)
10346 return true
10347 }
10348 return false
10349 }
10350 func rewriteValue_OpARMSBCshiftLL(v *ssa.Value) bool {
10351 v_2 := v.Args[2]
10352 v_1 := v.Args[1]
10353 v_0 := v.Args[0]
10354 b := v.Block
10355
10356
10357 for {
10358 d := ssa.AuxIntToInt32(v.AuxInt)
10359 if v_0.Op != ssaop.OpARMMOVWconst {
10360 break
10361 }
10362 c := ssa.AuxIntToInt32(v_0.AuxInt)
10363 x := v_1
10364 flags := v_2
10365 v.Reset(ssaop.OpARMRSCconst)
10366 v.AuxInt = ssa.Int32ToAuxInt(c)
10367 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
10368 v0.AuxInt = ssa.Int32ToAuxInt(d)
10369 v0.AddArg(x)
10370 v.AddArg2(v0, flags)
10371 return true
10372 }
10373
10374
10375 for {
10376 d := ssa.AuxIntToInt32(v.AuxInt)
10377 x := v_0
10378 if v_1.Op != ssaop.OpARMMOVWconst {
10379 break
10380 }
10381 c := ssa.AuxIntToInt32(v_1.AuxInt)
10382 flags := v_2
10383 v.Reset(ssaop.OpARMSBCconst)
10384 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
10385 v.AddArg2(x, flags)
10386 return true
10387 }
10388 return false
10389 }
10390 func rewriteValue_OpARMSBCshiftLLreg(v *ssa.Value) bool {
10391 v_3 := v.Args[3]
10392 v_2 := v.Args[2]
10393 v_1 := v.Args[1]
10394 v_0 := v.Args[0]
10395 b := v.Block
10396
10397
10398 for {
10399 if v_0.Op != ssaop.OpARMMOVWconst {
10400 break
10401 }
10402 c := ssa.AuxIntToInt32(v_0.AuxInt)
10403 x := v_1
10404 y := v_2
10405 flags := v_3
10406 v.Reset(ssaop.OpARMRSCconst)
10407 v.AuxInt = ssa.Int32ToAuxInt(c)
10408 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
10409 v0.AddArg2(x, y)
10410 v.AddArg2(v0, flags)
10411 return true
10412 }
10413
10414
10415
10416 for {
10417 x := v_0
10418 y := v_1
10419 if v_2.Op != ssaop.OpARMMOVWconst {
10420 break
10421 }
10422 c := ssa.AuxIntToInt32(v_2.AuxInt)
10423 flags := v_3
10424 if !(0 <= c && c < 32) {
10425 break
10426 }
10427 v.Reset(ssaop.OpARMSBCshiftLL)
10428 v.AuxInt = ssa.Int32ToAuxInt(c)
10429 v.AddArg3(x, y, flags)
10430 return true
10431 }
10432 return false
10433 }
10434 func rewriteValue_OpARMSBCshiftRA(v *ssa.Value) bool {
10435 v_2 := v.Args[2]
10436 v_1 := v.Args[1]
10437 v_0 := v.Args[0]
10438 b := v.Block
10439
10440
10441 for {
10442 d := ssa.AuxIntToInt32(v.AuxInt)
10443 if v_0.Op != ssaop.OpARMMOVWconst {
10444 break
10445 }
10446 c := ssa.AuxIntToInt32(v_0.AuxInt)
10447 x := v_1
10448 flags := v_2
10449 v.Reset(ssaop.OpARMRSCconst)
10450 v.AuxInt = ssa.Int32ToAuxInt(c)
10451 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
10452 v0.AuxInt = ssa.Int32ToAuxInt(d)
10453 v0.AddArg(x)
10454 v.AddArg2(v0, flags)
10455 return true
10456 }
10457
10458
10459 for {
10460 d := ssa.AuxIntToInt32(v.AuxInt)
10461 x := v_0
10462 if v_1.Op != ssaop.OpARMMOVWconst {
10463 break
10464 }
10465 c := ssa.AuxIntToInt32(v_1.AuxInt)
10466 flags := v_2
10467 v.Reset(ssaop.OpARMSBCconst)
10468 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
10469 v.AddArg2(x, flags)
10470 return true
10471 }
10472 return false
10473 }
10474 func rewriteValue_OpARMSBCshiftRAreg(v *ssa.Value) bool {
10475 v_3 := v.Args[3]
10476 v_2 := v.Args[2]
10477 v_1 := v.Args[1]
10478 v_0 := v.Args[0]
10479 b := v.Block
10480
10481
10482 for {
10483 if v_0.Op != ssaop.OpARMMOVWconst {
10484 break
10485 }
10486 c := ssa.AuxIntToInt32(v_0.AuxInt)
10487 x := v_1
10488 y := v_2
10489 flags := v_3
10490 v.Reset(ssaop.OpARMRSCconst)
10491 v.AuxInt = ssa.Int32ToAuxInt(c)
10492 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
10493 v0.AddArg2(x, y)
10494 v.AddArg2(v0, flags)
10495 return true
10496 }
10497
10498
10499
10500 for {
10501 x := v_0
10502 y := v_1
10503 if v_2.Op != ssaop.OpARMMOVWconst {
10504 break
10505 }
10506 c := ssa.AuxIntToInt32(v_2.AuxInt)
10507 flags := v_3
10508 if !(0 <= c && c < 32) {
10509 break
10510 }
10511 v.Reset(ssaop.OpARMSBCshiftRA)
10512 v.AuxInt = ssa.Int32ToAuxInt(c)
10513 v.AddArg3(x, y, flags)
10514 return true
10515 }
10516 return false
10517 }
10518 func rewriteValue_OpARMSBCshiftRL(v *ssa.Value) bool {
10519 v_2 := v.Args[2]
10520 v_1 := v.Args[1]
10521 v_0 := v.Args[0]
10522 b := v.Block
10523
10524
10525 for {
10526 d := ssa.AuxIntToInt32(v.AuxInt)
10527 if v_0.Op != ssaop.OpARMMOVWconst {
10528 break
10529 }
10530 c := ssa.AuxIntToInt32(v_0.AuxInt)
10531 x := v_1
10532 flags := v_2
10533 v.Reset(ssaop.OpARMRSCconst)
10534 v.AuxInt = ssa.Int32ToAuxInt(c)
10535 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
10536 v0.AuxInt = ssa.Int32ToAuxInt(d)
10537 v0.AddArg(x)
10538 v.AddArg2(v0, flags)
10539 return true
10540 }
10541
10542
10543 for {
10544 d := ssa.AuxIntToInt32(v.AuxInt)
10545 x := v_0
10546 if v_1.Op != ssaop.OpARMMOVWconst {
10547 break
10548 }
10549 c := ssa.AuxIntToInt32(v_1.AuxInt)
10550 flags := v_2
10551 v.Reset(ssaop.OpARMSBCconst)
10552 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
10553 v.AddArg2(x, flags)
10554 return true
10555 }
10556 return false
10557 }
10558 func rewriteValue_OpARMSBCshiftRLreg(v *ssa.Value) bool {
10559 v_3 := v.Args[3]
10560 v_2 := v.Args[2]
10561 v_1 := v.Args[1]
10562 v_0 := v.Args[0]
10563 b := v.Block
10564
10565
10566 for {
10567 if v_0.Op != ssaop.OpARMMOVWconst {
10568 break
10569 }
10570 c := ssa.AuxIntToInt32(v_0.AuxInt)
10571 x := v_1
10572 y := v_2
10573 flags := v_3
10574 v.Reset(ssaop.OpARMRSCconst)
10575 v.AuxInt = ssa.Int32ToAuxInt(c)
10576 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
10577 v0.AddArg2(x, y)
10578 v.AddArg2(v0, flags)
10579 return true
10580 }
10581
10582
10583
10584 for {
10585 x := v_0
10586 y := v_1
10587 if v_2.Op != ssaop.OpARMMOVWconst {
10588 break
10589 }
10590 c := ssa.AuxIntToInt32(v_2.AuxInt)
10591 flags := v_3
10592 if !(0 <= c && c < 32) {
10593 break
10594 }
10595 v.Reset(ssaop.OpARMSBCshiftRL)
10596 v.AuxInt = ssa.Int32ToAuxInt(c)
10597 v.AddArg3(x, y, flags)
10598 return true
10599 }
10600 return false
10601 }
10602 func rewriteValue_OpARMSLL(v *ssa.Value) bool {
10603 v_1 := v.Args[1]
10604 v_0 := v.Args[0]
10605
10606
10607
10608 for {
10609 x := v_0
10610 if v_1.Op != ssaop.OpARMMOVWconst {
10611 break
10612 }
10613 c := ssa.AuxIntToInt32(v_1.AuxInt)
10614 if !(0 <= c && c < 32) {
10615 break
10616 }
10617 v.Reset(ssaop.OpARMSLLconst)
10618 v.AuxInt = ssa.Int32ToAuxInt(c)
10619 v.AddArg(x)
10620 return true
10621 }
10622 return false
10623 }
10624 func rewriteValue_OpARMSLLconst(v *ssa.Value) bool {
10625 v_0 := v.Args[0]
10626
10627
10628 for {
10629 c := ssa.AuxIntToInt32(v.AuxInt)
10630 if v_0.Op != ssaop.OpARMMOVWconst {
10631 break
10632 }
10633 d := ssa.AuxIntToInt32(v_0.AuxInt)
10634 v.Reset(ssaop.OpARMMOVWconst)
10635 v.AuxInt = ssa.Int32ToAuxInt(d << uint64(c))
10636 return true
10637 }
10638 return false
10639 }
10640 func rewriteValue_OpARMSRA(v *ssa.Value) bool {
10641 v_1 := v.Args[1]
10642 v_0 := v.Args[0]
10643
10644
10645
10646 for {
10647 x := v_0
10648 if v_1.Op != ssaop.OpARMMOVWconst {
10649 break
10650 }
10651 c := ssa.AuxIntToInt32(v_1.AuxInt)
10652 if !(0 <= c && c < 32) {
10653 break
10654 }
10655 v.Reset(ssaop.OpARMSRAconst)
10656 v.AuxInt = ssa.Int32ToAuxInt(c)
10657 v.AddArg(x)
10658 return true
10659 }
10660 return false
10661 }
10662 func rewriteValue_OpARMSRAcond(v *ssa.Value) bool {
10663 v_2 := v.Args[2]
10664 v_1 := v.Args[1]
10665 v_0 := v.Args[0]
10666
10667
10668
10669 for {
10670 x := v_0
10671 if v_2.Op != ssaop.OpARMFlagConstant {
10672 break
10673 }
10674 fc := ssa.AuxIntToFlagConstant(v_2.AuxInt)
10675 if !(fc.Uge()) {
10676 break
10677 }
10678 v.Reset(ssaop.OpARMSRAconst)
10679 v.AuxInt = ssa.Int32ToAuxInt(31)
10680 v.AddArg(x)
10681 return true
10682 }
10683
10684
10685
10686 for {
10687 x := v_0
10688 y := v_1
10689 if v_2.Op != ssaop.OpARMFlagConstant {
10690 break
10691 }
10692 fc := ssa.AuxIntToFlagConstant(v_2.AuxInt)
10693 if !(fc.Ult()) {
10694 break
10695 }
10696 v.Reset(ssaop.OpARMSRA)
10697 v.AddArg2(x, y)
10698 return true
10699 }
10700 return false
10701 }
10702 func rewriteValue_OpARMSRAconst(v *ssa.Value) bool {
10703 v_0 := v.Args[0]
10704
10705
10706 for {
10707 c := ssa.AuxIntToInt32(v.AuxInt)
10708 if v_0.Op != ssaop.OpARMMOVWconst {
10709 break
10710 }
10711 d := ssa.AuxIntToInt32(v_0.AuxInt)
10712 v.Reset(ssaop.OpARMMOVWconst)
10713 v.AuxInt = ssa.Int32ToAuxInt(d >> uint64(c))
10714 return true
10715 }
10716
10717
10718
10719 for {
10720 d := ssa.AuxIntToInt32(v.AuxInt)
10721 if v_0.Op != ssaop.OpARMSLLconst {
10722 break
10723 }
10724 c := ssa.AuxIntToInt32(v_0.AuxInt)
10725 x := v_0.Args[0]
10726 if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10727 break
10728 }
10729 v.Reset(ssaop.OpARMBFX)
10730 v.AuxInt = ssa.Int32ToAuxInt((d - c) | (32-d)<<8)
10731 v.AddArg(x)
10732 return true
10733 }
10734 return false
10735 }
10736 func rewriteValue_OpARMSRL(v *ssa.Value) bool {
10737 v_1 := v.Args[1]
10738 v_0 := v.Args[0]
10739
10740
10741
10742 for {
10743 x := v_0
10744 if v_1.Op != ssaop.OpARMMOVWconst {
10745 break
10746 }
10747 c := ssa.AuxIntToInt32(v_1.AuxInt)
10748 if !(0 <= c && c < 32) {
10749 break
10750 }
10751 v.Reset(ssaop.OpARMSRLconst)
10752 v.AuxInt = ssa.Int32ToAuxInt(c)
10753 v.AddArg(x)
10754 return true
10755 }
10756 return false
10757 }
10758 func rewriteValue_OpARMSRLconst(v *ssa.Value) bool {
10759 v_0 := v.Args[0]
10760
10761
10762 for {
10763 c := ssa.AuxIntToInt32(v.AuxInt)
10764 if v_0.Op != ssaop.OpARMMOVWconst {
10765 break
10766 }
10767 d := ssa.AuxIntToInt32(v_0.AuxInt)
10768 v.Reset(ssaop.OpARMMOVWconst)
10769 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(d) >> uint64(c)))
10770 return true
10771 }
10772
10773
10774
10775 for {
10776 d := ssa.AuxIntToInt32(v.AuxInt)
10777 if v_0.Op != ssaop.OpARMSLLconst {
10778 break
10779 }
10780 c := ssa.AuxIntToInt32(v_0.AuxInt)
10781 x := v_0.Args[0]
10782 if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10783 break
10784 }
10785 v.Reset(ssaop.OpARMBFXU)
10786 v.AuxInt = ssa.Int32ToAuxInt((d - c) | (32-d)<<8)
10787 v.AddArg(x)
10788 return true
10789 }
10790 return false
10791 }
10792 func rewriteValue_OpARMSRR(v *ssa.Value) bool {
10793 v_1 := v.Args[1]
10794 v_0 := v.Args[0]
10795
10796
10797 for {
10798 x := v_0
10799 if v_1.Op != ssaop.OpARMMOVWconst {
10800 break
10801 }
10802 c := ssa.AuxIntToInt32(v_1.AuxInt)
10803 v.Reset(ssaop.OpARMSRRconst)
10804 v.AuxInt = ssa.Int32ToAuxInt(c & 31)
10805 v.AddArg(x)
10806 return true
10807 }
10808 return false
10809 }
10810 func rewriteValue_OpARMSUB(v *ssa.Value) bool {
10811 v_1 := v.Args[1]
10812 v_0 := v.Args[0]
10813
10814
10815 for {
10816 if v_0.Op != ssaop.OpARMMOVWconst {
10817 break
10818 }
10819 c := ssa.AuxIntToInt32(v_0.AuxInt)
10820 x := v_1
10821 v.Reset(ssaop.OpARMRSBconst)
10822 v.AuxInt = ssa.Int32ToAuxInt(c)
10823 v.AddArg(x)
10824 return true
10825 }
10826
10827
10828 for {
10829 x := v_0
10830 if v_1.Op != ssaop.OpARMMOVWconst {
10831 break
10832 }
10833 c := ssa.AuxIntToInt32(v_1.AuxInt)
10834 v.Reset(ssaop.OpARMSUBconst)
10835 v.AuxInt = ssa.Int32ToAuxInt(c)
10836 v.AddArg(x)
10837 return true
10838 }
10839
10840
10841 for {
10842 x := v_0
10843 if v_1.Op != ssaop.OpARMSLLconst {
10844 break
10845 }
10846 c := ssa.AuxIntToInt32(v_1.AuxInt)
10847 y := v_1.Args[0]
10848 v.Reset(ssaop.OpARMSUBshiftLL)
10849 v.AuxInt = ssa.Int32ToAuxInt(c)
10850 v.AddArg2(x, y)
10851 return true
10852 }
10853
10854
10855 for {
10856 if v_0.Op != ssaop.OpARMSLLconst {
10857 break
10858 }
10859 c := ssa.AuxIntToInt32(v_0.AuxInt)
10860 y := v_0.Args[0]
10861 x := v_1
10862 v.Reset(ssaop.OpARMRSBshiftLL)
10863 v.AuxInt = ssa.Int32ToAuxInt(c)
10864 v.AddArg2(x, y)
10865 return true
10866 }
10867
10868
10869 for {
10870 x := v_0
10871 if v_1.Op != ssaop.OpARMSRLconst {
10872 break
10873 }
10874 c := ssa.AuxIntToInt32(v_1.AuxInt)
10875 y := v_1.Args[0]
10876 v.Reset(ssaop.OpARMSUBshiftRL)
10877 v.AuxInt = ssa.Int32ToAuxInt(c)
10878 v.AddArg2(x, y)
10879 return true
10880 }
10881
10882
10883 for {
10884 if v_0.Op != ssaop.OpARMSRLconst {
10885 break
10886 }
10887 c := ssa.AuxIntToInt32(v_0.AuxInt)
10888 y := v_0.Args[0]
10889 x := v_1
10890 v.Reset(ssaop.OpARMRSBshiftRL)
10891 v.AuxInt = ssa.Int32ToAuxInt(c)
10892 v.AddArg2(x, y)
10893 return true
10894 }
10895
10896
10897 for {
10898 x := v_0
10899 if v_1.Op != ssaop.OpARMSRAconst {
10900 break
10901 }
10902 c := ssa.AuxIntToInt32(v_1.AuxInt)
10903 y := v_1.Args[0]
10904 v.Reset(ssaop.OpARMSUBshiftRA)
10905 v.AuxInt = ssa.Int32ToAuxInt(c)
10906 v.AddArg2(x, y)
10907 return true
10908 }
10909
10910
10911 for {
10912 if v_0.Op != ssaop.OpARMSRAconst {
10913 break
10914 }
10915 c := ssa.AuxIntToInt32(v_0.AuxInt)
10916 y := v_0.Args[0]
10917 x := v_1
10918 v.Reset(ssaop.OpARMRSBshiftRA)
10919 v.AuxInt = ssa.Int32ToAuxInt(c)
10920 v.AddArg2(x, y)
10921 return true
10922 }
10923
10924
10925 for {
10926 x := v_0
10927 if v_1.Op != ssaop.OpARMSLL {
10928 break
10929 }
10930 z := v_1.Args[1]
10931 y := v_1.Args[0]
10932 v.Reset(ssaop.OpARMSUBshiftLLreg)
10933 v.AddArg3(x, y, z)
10934 return true
10935 }
10936
10937
10938 for {
10939 if v_0.Op != ssaop.OpARMSLL {
10940 break
10941 }
10942 z := v_0.Args[1]
10943 y := v_0.Args[0]
10944 x := v_1
10945 v.Reset(ssaop.OpARMRSBshiftLLreg)
10946 v.AddArg3(x, y, z)
10947 return true
10948 }
10949
10950
10951 for {
10952 x := v_0
10953 if v_1.Op != ssaop.OpARMSRL {
10954 break
10955 }
10956 z := v_1.Args[1]
10957 y := v_1.Args[0]
10958 v.Reset(ssaop.OpARMSUBshiftRLreg)
10959 v.AddArg3(x, y, z)
10960 return true
10961 }
10962
10963
10964 for {
10965 if v_0.Op != ssaop.OpARMSRL {
10966 break
10967 }
10968 z := v_0.Args[1]
10969 y := v_0.Args[0]
10970 x := v_1
10971 v.Reset(ssaop.OpARMRSBshiftRLreg)
10972 v.AddArg3(x, y, z)
10973 return true
10974 }
10975
10976
10977 for {
10978 x := v_0
10979 if v_1.Op != ssaop.OpARMSRA {
10980 break
10981 }
10982 z := v_1.Args[1]
10983 y := v_1.Args[0]
10984 v.Reset(ssaop.OpARMSUBshiftRAreg)
10985 v.AddArg3(x, y, z)
10986 return true
10987 }
10988
10989
10990 for {
10991 if v_0.Op != ssaop.OpARMSRA {
10992 break
10993 }
10994 z := v_0.Args[1]
10995 y := v_0.Args[0]
10996 x := v_1
10997 v.Reset(ssaop.OpARMRSBshiftRAreg)
10998 v.AddArg3(x, y, z)
10999 return true
11000 }
11001
11002
11003 for {
11004 x := v_0
11005 if x != v_1 {
11006 break
11007 }
11008 v.Reset(ssaop.OpARMMOVWconst)
11009 v.AuxInt = ssa.Int32ToAuxInt(0)
11010 return true
11011 }
11012
11013
11014
11015 for {
11016 a := v_0
11017 if v_1.Op != ssaop.OpARMMUL {
11018 break
11019 }
11020 y := v_1.Args[1]
11021 x := v_1.Args[0]
11022 if !(buildcfg.GOARM.Version == 7) {
11023 break
11024 }
11025 v.Reset(ssaop.OpARMMULS)
11026 v.AddArg3(x, y, a)
11027 return true
11028 }
11029 return false
11030 }
11031 func rewriteValue_OpARMSUBD(v *ssa.Value) bool {
11032 v_1 := v.Args[1]
11033 v_0 := v.Args[0]
11034
11035
11036
11037 for {
11038 a := v_0
11039 if v_1.Op != ssaop.OpARMMULD {
11040 break
11041 }
11042 y := v_1.Args[1]
11043 x := v_1.Args[0]
11044 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
11045 break
11046 }
11047 v.Reset(ssaop.OpARMMULSD)
11048 v.AddArg3(a, x, y)
11049 return true
11050 }
11051
11052
11053
11054 for {
11055 a := v_0
11056 if v_1.Op != ssaop.OpARMNMULD {
11057 break
11058 }
11059 y := v_1.Args[1]
11060 x := v_1.Args[0]
11061 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
11062 break
11063 }
11064 v.Reset(ssaop.OpARMMULAD)
11065 v.AddArg3(a, x, y)
11066 return true
11067 }
11068 return false
11069 }
11070 func rewriteValue_OpARMSUBF(v *ssa.Value) bool {
11071 v_1 := v.Args[1]
11072 v_0 := v.Args[0]
11073
11074
11075
11076 for {
11077 a := v_0
11078 if v_1.Op != ssaop.OpARMMULF {
11079 break
11080 }
11081 y := v_1.Args[1]
11082 x := v_1.Args[0]
11083 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
11084 break
11085 }
11086 v.Reset(ssaop.OpARMMULSF)
11087 v.AddArg3(a, x, y)
11088 return true
11089 }
11090
11091
11092
11093 for {
11094 a := v_0
11095 if v_1.Op != ssaop.OpARMNMULF {
11096 break
11097 }
11098 y := v_1.Args[1]
11099 x := v_1.Args[0]
11100 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
11101 break
11102 }
11103 v.Reset(ssaop.OpARMMULAF)
11104 v.AddArg3(a, x, y)
11105 return true
11106 }
11107 return false
11108 }
11109 func rewriteValue_OpARMSUBS(v *ssa.Value) bool {
11110 v_1 := v.Args[1]
11111 v_0 := v.Args[0]
11112
11113
11114 for {
11115 x := v_0
11116 if v_1.Op != ssaop.OpARMMOVWconst {
11117 break
11118 }
11119 c := ssa.AuxIntToInt32(v_1.AuxInt)
11120 v.Reset(ssaop.OpARMSUBSconst)
11121 v.AuxInt = ssa.Int32ToAuxInt(c)
11122 v.AddArg(x)
11123 return true
11124 }
11125
11126
11127 for {
11128 x := v_0
11129 if v_1.Op != ssaop.OpARMSLLconst {
11130 break
11131 }
11132 c := ssa.AuxIntToInt32(v_1.AuxInt)
11133 y := v_1.Args[0]
11134 v.Reset(ssaop.OpARMSUBSshiftLL)
11135 v.AuxInt = ssa.Int32ToAuxInt(c)
11136 v.AddArg2(x, y)
11137 return true
11138 }
11139
11140
11141 for {
11142 if v_0.Op != ssaop.OpARMSLLconst {
11143 break
11144 }
11145 c := ssa.AuxIntToInt32(v_0.AuxInt)
11146 y := v_0.Args[0]
11147 x := v_1
11148 v.Reset(ssaop.OpARMRSBSshiftLL)
11149 v.AuxInt = ssa.Int32ToAuxInt(c)
11150 v.AddArg2(x, y)
11151 return true
11152 }
11153
11154
11155 for {
11156 x := v_0
11157 if v_1.Op != ssaop.OpARMSRLconst {
11158 break
11159 }
11160 c := ssa.AuxIntToInt32(v_1.AuxInt)
11161 y := v_1.Args[0]
11162 v.Reset(ssaop.OpARMSUBSshiftRL)
11163 v.AuxInt = ssa.Int32ToAuxInt(c)
11164 v.AddArg2(x, y)
11165 return true
11166 }
11167
11168
11169 for {
11170 if v_0.Op != ssaop.OpARMSRLconst {
11171 break
11172 }
11173 c := ssa.AuxIntToInt32(v_0.AuxInt)
11174 y := v_0.Args[0]
11175 x := v_1
11176 v.Reset(ssaop.OpARMRSBSshiftRL)
11177 v.AuxInt = ssa.Int32ToAuxInt(c)
11178 v.AddArg2(x, y)
11179 return true
11180 }
11181
11182
11183 for {
11184 x := v_0
11185 if v_1.Op != ssaop.OpARMSRAconst {
11186 break
11187 }
11188 c := ssa.AuxIntToInt32(v_1.AuxInt)
11189 y := v_1.Args[0]
11190 v.Reset(ssaop.OpARMSUBSshiftRA)
11191 v.AuxInt = ssa.Int32ToAuxInt(c)
11192 v.AddArg2(x, y)
11193 return true
11194 }
11195
11196
11197 for {
11198 if v_0.Op != ssaop.OpARMSRAconst {
11199 break
11200 }
11201 c := ssa.AuxIntToInt32(v_0.AuxInt)
11202 y := v_0.Args[0]
11203 x := v_1
11204 v.Reset(ssaop.OpARMRSBSshiftRA)
11205 v.AuxInt = ssa.Int32ToAuxInt(c)
11206 v.AddArg2(x, y)
11207 return true
11208 }
11209
11210
11211 for {
11212 x := v_0
11213 if v_1.Op != ssaop.OpARMSLL {
11214 break
11215 }
11216 z := v_1.Args[1]
11217 y := v_1.Args[0]
11218 v.Reset(ssaop.OpARMSUBSshiftLLreg)
11219 v.AddArg3(x, y, z)
11220 return true
11221 }
11222
11223
11224 for {
11225 if v_0.Op != ssaop.OpARMSLL {
11226 break
11227 }
11228 z := v_0.Args[1]
11229 y := v_0.Args[0]
11230 x := v_1
11231 v.Reset(ssaop.OpARMRSBSshiftLLreg)
11232 v.AddArg3(x, y, z)
11233 return true
11234 }
11235
11236
11237 for {
11238 x := v_0
11239 if v_1.Op != ssaop.OpARMSRL {
11240 break
11241 }
11242 z := v_1.Args[1]
11243 y := v_1.Args[0]
11244 v.Reset(ssaop.OpARMSUBSshiftRLreg)
11245 v.AddArg3(x, y, z)
11246 return true
11247 }
11248
11249
11250 for {
11251 if v_0.Op != ssaop.OpARMSRL {
11252 break
11253 }
11254 z := v_0.Args[1]
11255 y := v_0.Args[0]
11256 x := v_1
11257 v.Reset(ssaop.OpARMRSBSshiftRLreg)
11258 v.AddArg3(x, y, z)
11259 return true
11260 }
11261
11262
11263 for {
11264 x := v_0
11265 if v_1.Op != ssaop.OpARMSRA {
11266 break
11267 }
11268 z := v_1.Args[1]
11269 y := v_1.Args[0]
11270 v.Reset(ssaop.OpARMSUBSshiftRAreg)
11271 v.AddArg3(x, y, z)
11272 return true
11273 }
11274
11275
11276 for {
11277 if v_0.Op != ssaop.OpARMSRA {
11278 break
11279 }
11280 z := v_0.Args[1]
11281 y := v_0.Args[0]
11282 x := v_1
11283 v.Reset(ssaop.OpARMRSBSshiftRAreg)
11284 v.AddArg3(x, y, z)
11285 return true
11286 }
11287 return false
11288 }
11289 func rewriteValue_OpARMSUBSshiftLL(v *ssa.Value) bool {
11290 v_1 := v.Args[1]
11291 v_0 := v.Args[0]
11292 b := v.Block
11293
11294
11295 for {
11296 d := ssa.AuxIntToInt32(v.AuxInt)
11297 if v_0.Op != ssaop.OpARMMOVWconst {
11298 break
11299 }
11300 c := ssa.AuxIntToInt32(v_0.AuxInt)
11301 x := v_1
11302 v.Reset(ssaop.OpARMRSBSconst)
11303 v.AuxInt = ssa.Int32ToAuxInt(c)
11304 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
11305 v0.AuxInt = ssa.Int32ToAuxInt(d)
11306 v0.AddArg(x)
11307 v.AddArg(v0)
11308 return true
11309 }
11310
11311
11312 for {
11313 d := ssa.AuxIntToInt32(v.AuxInt)
11314 x := v_0
11315 if v_1.Op != ssaop.OpARMMOVWconst {
11316 break
11317 }
11318 c := ssa.AuxIntToInt32(v_1.AuxInt)
11319 v.Reset(ssaop.OpARMSUBSconst)
11320 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
11321 v.AddArg(x)
11322 return true
11323 }
11324 return false
11325 }
11326 func rewriteValue_OpARMSUBSshiftLLreg(v *ssa.Value) bool {
11327 v_2 := v.Args[2]
11328 v_1 := v.Args[1]
11329 v_0 := v.Args[0]
11330 b := v.Block
11331
11332
11333 for {
11334 if v_0.Op != ssaop.OpARMMOVWconst {
11335 break
11336 }
11337 c := ssa.AuxIntToInt32(v_0.AuxInt)
11338 x := v_1
11339 y := v_2
11340 v.Reset(ssaop.OpARMRSBSconst)
11341 v.AuxInt = ssa.Int32ToAuxInt(c)
11342 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
11343 v0.AddArg2(x, y)
11344 v.AddArg(v0)
11345 return true
11346 }
11347
11348
11349
11350 for {
11351 x := v_0
11352 y := v_1
11353 if v_2.Op != ssaop.OpARMMOVWconst {
11354 break
11355 }
11356 c := ssa.AuxIntToInt32(v_2.AuxInt)
11357 if !(0 <= c && c < 32) {
11358 break
11359 }
11360 v.Reset(ssaop.OpARMSUBSshiftLL)
11361 v.AuxInt = ssa.Int32ToAuxInt(c)
11362 v.AddArg2(x, y)
11363 return true
11364 }
11365 return false
11366 }
11367 func rewriteValue_OpARMSUBSshiftRA(v *ssa.Value) bool {
11368 v_1 := v.Args[1]
11369 v_0 := v.Args[0]
11370 b := v.Block
11371
11372
11373 for {
11374 d := ssa.AuxIntToInt32(v.AuxInt)
11375 if v_0.Op != ssaop.OpARMMOVWconst {
11376 break
11377 }
11378 c := ssa.AuxIntToInt32(v_0.AuxInt)
11379 x := v_1
11380 v.Reset(ssaop.OpARMRSBSconst)
11381 v.AuxInt = ssa.Int32ToAuxInt(c)
11382 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
11383 v0.AuxInt = ssa.Int32ToAuxInt(d)
11384 v0.AddArg(x)
11385 v.AddArg(v0)
11386 return true
11387 }
11388
11389
11390 for {
11391 d := ssa.AuxIntToInt32(v.AuxInt)
11392 x := v_0
11393 if v_1.Op != ssaop.OpARMMOVWconst {
11394 break
11395 }
11396 c := ssa.AuxIntToInt32(v_1.AuxInt)
11397 v.Reset(ssaop.OpARMSUBSconst)
11398 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
11399 v.AddArg(x)
11400 return true
11401 }
11402 return false
11403 }
11404 func rewriteValue_OpARMSUBSshiftRAreg(v *ssa.Value) bool {
11405 v_2 := v.Args[2]
11406 v_1 := v.Args[1]
11407 v_0 := v.Args[0]
11408 b := v.Block
11409
11410
11411 for {
11412 if v_0.Op != ssaop.OpARMMOVWconst {
11413 break
11414 }
11415 c := ssa.AuxIntToInt32(v_0.AuxInt)
11416 x := v_1
11417 y := v_2
11418 v.Reset(ssaop.OpARMRSBSconst)
11419 v.AuxInt = ssa.Int32ToAuxInt(c)
11420 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
11421 v0.AddArg2(x, y)
11422 v.AddArg(v0)
11423 return true
11424 }
11425
11426
11427
11428 for {
11429 x := v_0
11430 y := v_1
11431 if v_2.Op != ssaop.OpARMMOVWconst {
11432 break
11433 }
11434 c := ssa.AuxIntToInt32(v_2.AuxInt)
11435 if !(0 <= c && c < 32) {
11436 break
11437 }
11438 v.Reset(ssaop.OpARMSUBSshiftRA)
11439 v.AuxInt = ssa.Int32ToAuxInt(c)
11440 v.AddArg2(x, y)
11441 return true
11442 }
11443 return false
11444 }
11445 func rewriteValue_OpARMSUBSshiftRL(v *ssa.Value) bool {
11446 v_1 := v.Args[1]
11447 v_0 := v.Args[0]
11448 b := v.Block
11449
11450
11451 for {
11452 d := ssa.AuxIntToInt32(v.AuxInt)
11453 if v_0.Op != ssaop.OpARMMOVWconst {
11454 break
11455 }
11456 c := ssa.AuxIntToInt32(v_0.AuxInt)
11457 x := v_1
11458 v.Reset(ssaop.OpARMRSBSconst)
11459 v.AuxInt = ssa.Int32ToAuxInt(c)
11460 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
11461 v0.AuxInt = ssa.Int32ToAuxInt(d)
11462 v0.AddArg(x)
11463 v.AddArg(v0)
11464 return true
11465 }
11466
11467
11468 for {
11469 d := ssa.AuxIntToInt32(v.AuxInt)
11470 x := v_0
11471 if v_1.Op != ssaop.OpARMMOVWconst {
11472 break
11473 }
11474 c := ssa.AuxIntToInt32(v_1.AuxInt)
11475 v.Reset(ssaop.OpARMSUBSconst)
11476 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11477 v.AddArg(x)
11478 return true
11479 }
11480 return false
11481 }
11482 func rewriteValue_OpARMSUBSshiftRLreg(v *ssa.Value) bool {
11483 v_2 := v.Args[2]
11484 v_1 := v.Args[1]
11485 v_0 := v.Args[0]
11486 b := v.Block
11487
11488
11489 for {
11490 if v_0.Op != ssaop.OpARMMOVWconst {
11491 break
11492 }
11493 c := ssa.AuxIntToInt32(v_0.AuxInt)
11494 x := v_1
11495 y := v_2
11496 v.Reset(ssaop.OpARMRSBSconst)
11497 v.AuxInt = ssa.Int32ToAuxInt(c)
11498 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
11499 v0.AddArg2(x, y)
11500 v.AddArg(v0)
11501 return true
11502 }
11503
11504
11505
11506 for {
11507 x := v_0
11508 y := v_1
11509 if v_2.Op != ssaop.OpARMMOVWconst {
11510 break
11511 }
11512 c := ssa.AuxIntToInt32(v_2.AuxInt)
11513 if !(0 <= c && c < 32) {
11514 break
11515 }
11516 v.Reset(ssaop.OpARMSUBSshiftRL)
11517 v.AuxInt = ssa.Int32ToAuxInt(c)
11518 v.AddArg2(x, y)
11519 return true
11520 }
11521 return false
11522 }
11523 func rewriteValue_OpARMSUBconst(v *ssa.Value) bool {
11524 v_0 := v.Args[0]
11525
11526
11527 for {
11528 off1 := ssa.AuxIntToInt32(v.AuxInt)
11529 if v_0.Op != ssaop.OpARMMOVWaddr {
11530 break
11531 }
11532 off2 := ssa.AuxIntToInt32(v_0.AuxInt)
11533 sym := ssa.AuxToSym(v_0.Aux)
11534 ptr := v_0.Args[0]
11535 v.Reset(ssaop.OpARMMOVWaddr)
11536 v.AuxInt = ssa.Int32ToAuxInt(off2 - off1)
11537 v.Aux = ssa.SymToAux(sym)
11538 v.AddArg(ptr)
11539 return true
11540 }
11541
11542
11543 for {
11544 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
11545 break
11546 }
11547 x := v_0
11548 v.CopyOf(x)
11549 return true
11550 }
11551
11552
11553
11554 for {
11555 c := ssa.AuxIntToInt32(v.AuxInt)
11556 x := v_0
11557 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
11558 break
11559 }
11560 v.Reset(ssaop.OpARMADDconst)
11561 v.AuxInt = ssa.Int32ToAuxInt(-c)
11562 v.AddArg(x)
11563 return true
11564 }
11565
11566
11567
11568 for {
11569 c := ssa.AuxIntToInt32(v.AuxInt)
11570 x := v_0
11571 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
11572 break
11573 }
11574 v.Reset(ssaop.OpARMADDconst)
11575 v.AuxInt = ssa.Int32ToAuxInt(-c)
11576 v.AddArg(x)
11577 return true
11578 }
11579
11580
11581 for {
11582 c := ssa.AuxIntToInt32(v.AuxInt)
11583 if v_0.Op != ssaop.OpARMMOVWconst {
11584 break
11585 }
11586 d := ssa.AuxIntToInt32(v_0.AuxInt)
11587 v.Reset(ssaop.OpARMMOVWconst)
11588 v.AuxInt = ssa.Int32ToAuxInt(d - c)
11589 return true
11590 }
11591
11592
11593 for {
11594 c := ssa.AuxIntToInt32(v.AuxInt)
11595 if v_0.Op != ssaop.OpARMSUBconst {
11596 break
11597 }
11598 d := ssa.AuxIntToInt32(v_0.AuxInt)
11599 x := v_0.Args[0]
11600 v.Reset(ssaop.OpARMADDconst)
11601 v.AuxInt = ssa.Int32ToAuxInt(-c - d)
11602 v.AddArg(x)
11603 return true
11604 }
11605
11606
11607 for {
11608 c := ssa.AuxIntToInt32(v.AuxInt)
11609 if v_0.Op != ssaop.OpARMADDconst {
11610 break
11611 }
11612 d := ssa.AuxIntToInt32(v_0.AuxInt)
11613 x := v_0.Args[0]
11614 v.Reset(ssaop.OpARMADDconst)
11615 v.AuxInt = ssa.Int32ToAuxInt(-c + d)
11616 v.AddArg(x)
11617 return true
11618 }
11619
11620
11621 for {
11622 c := ssa.AuxIntToInt32(v.AuxInt)
11623 if v_0.Op != ssaop.OpARMRSBconst {
11624 break
11625 }
11626 d := ssa.AuxIntToInt32(v_0.AuxInt)
11627 x := v_0.Args[0]
11628 v.Reset(ssaop.OpARMRSBconst)
11629 v.AuxInt = ssa.Int32ToAuxInt(-c + d)
11630 v.AddArg(x)
11631 return true
11632 }
11633 return false
11634 }
11635 func rewriteValue_OpARMSUBshiftLL(v *ssa.Value) bool {
11636 v_1 := v.Args[1]
11637 v_0 := v.Args[0]
11638 b := v.Block
11639
11640
11641 for {
11642 d := ssa.AuxIntToInt32(v.AuxInt)
11643 if v_0.Op != ssaop.OpARMMOVWconst {
11644 break
11645 }
11646 c := ssa.AuxIntToInt32(v_0.AuxInt)
11647 x := v_1
11648 v.Reset(ssaop.OpARMRSBconst)
11649 v.AuxInt = ssa.Int32ToAuxInt(c)
11650 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
11651 v0.AuxInt = ssa.Int32ToAuxInt(d)
11652 v0.AddArg(x)
11653 v.AddArg(v0)
11654 return true
11655 }
11656
11657
11658 for {
11659 d := ssa.AuxIntToInt32(v.AuxInt)
11660 x := v_0
11661 if v_1.Op != ssaop.OpARMMOVWconst {
11662 break
11663 }
11664 c := ssa.AuxIntToInt32(v_1.AuxInt)
11665 v.Reset(ssaop.OpARMSUBconst)
11666 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
11667 v.AddArg(x)
11668 return true
11669 }
11670
11671
11672 for {
11673 c := ssa.AuxIntToInt32(v.AuxInt)
11674 if v_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
11675 break
11676 }
11677 x := v_0.Args[0]
11678 if x != v_1 {
11679 break
11680 }
11681 v.Reset(ssaop.OpARMMOVWconst)
11682 v.AuxInt = ssa.Int32ToAuxInt(0)
11683 return true
11684 }
11685 return false
11686 }
11687 func rewriteValue_OpARMSUBshiftLLreg(v *ssa.Value) bool {
11688 v_2 := v.Args[2]
11689 v_1 := v.Args[1]
11690 v_0 := v.Args[0]
11691 b := v.Block
11692
11693
11694 for {
11695 if v_0.Op != ssaop.OpARMMOVWconst {
11696 break
11697 }
11698 c := ssa.AuxIntToInt32(v_0.AuxInt)
11699 x := v_1
11700 y := v_2
11701 v.Reset(ssaop.OpARMRSBconst)
11702 v.AuxInt = ssa.Int32ToAuxInt(c)
11703 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
11704 v0.AddArg2(x, y)
11705 v.AddArg(v0)
11706 return true
11707 }
11708
11709
11710
11711 for {
11712 x := v_0
11713 y := v_1
11714 if v_2.Op != ssaop.OpARMMOVWconst {
11715 break
11716 }
11717 c := ssa.AuxIntToInt32(v_2.AuxInt)
11718 if !(0 <= c && c < 32) {
11719 break
11720 }
11721 v.Reset(ssaop.OpARMSUBshiftLL)
11722 v.AuxInt = ssa.Int32ToAuxInt(c)
11723 v.AddArg2(x, y)
11724 return true
11725 }
11726 return false
11727 }
11728 func rewriteValue_OpARMSUBshiftRA(v *ssa.Value) bool {
11729 v_1 := v.Args[1]
11730 v_0 := v.Args[0]
11731 b := v.Block
11732
11733
11734 for {
11735 d := ssa.AuxIntToInt32(v.AuxInt)
11736 if v_0.Op != ssaop.OpARMMOVWconst {
11737 break
11738 }
11739 c := ssa.AuxIntToInt32(v_0.AuxInt)
11740 x := v_1
11741 v.Reset(ssaop.OpARMRSBconst)
11742 v.AuxInt = ssa.Int32ToAuxInt(c)
11743 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
11744 v0.AuxInt = ssa.Int32ToAuxInt(d)
11745 v0.AddArg(x)
11746 v.AddArg(v0)
11747 return true
11748 }
11749
11750
11751 for {
11752 d := ssa.AuxIntToInt32(v.AuxInt)
11753 x := v_0
11754 if v_1.Op != ssaop.OpARMMOVWconst {
11755 break
11756 }
11757 c := ssa.AuxIntToInt32(v_1.AuxInt)
11758 v.Reset(ssaop.OpARMSUBconst)
11759 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
11760 v.AddArg(x)
11761 return true
11762 }
11763
11764
11765 for {
11766 c := ssa.AuxIntToInt32(v.AuxInt)
11767 if v_0.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
11768 break
11769 }
11770 x := v_0.Args[0]
11771 if x != v_1 {
11772 break
11773 }
11774 v.Reset(ssaop.OpARMMOVWconst)
11775 v.AuxInt = ssa.Int32ToAuxInt(0)
11776 return true
11777 }
11778 return false
11779 }
11780 func rewriteValue_OpARMSUBshiftRAreg(v *ssa.Value) bool {
11781 v_2 := v.Args[2]
11782 v_1 := v.Args[1]
11783 v_0 := v.Args[0]
11784 b := v.Block
11785
11786
11787 for {
11788 if v_0.Op != ssaop.OpARMMOVWconst {
11789 break
11790 }
11791 c := ssa.AuxIntToInt32(v_0.AuxInt)
11792 x := v_1
11793 y := v_2
11794 v.Reset(ssaop.OpARMRSBconst)
11795 v.AuxInt = ssa.Int32ToAuxInt(c)
11796 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
11797 v0.AddArg2(x, y)
11798 v.AddArg(v0)
11799 return true
11800 }
11801
11802
11803
11804 for {
11805 x := v_0
11806 y := v_1
11807 if v_2.Op != ssaop.OpARMMOVWconst {
11808 break
11809 }
11810 c := ssa.AuxIntToInt32(v_2.AuxInt)
11811 if !(0 <= c && c < 32) {
11812 break
11813 }
11814 v.Reset(ssaop.OpARMSUBshiftRA)
11815 v.AuxInt = ssa.Int32ToAuxInt(c)
11816 v.AddArg2(x, y)
11817 return true
11818 }
11819 return false
11820 }
11821 func rewriteValue_OpARMSUBshiftRL(v *ssa.Value) bool {
11822 v_1 := v.Args[1]
11823 v_0 := v.Args[0]
11824 b := v.Block
11825
11826
11827 for {
11828 d := ssa.AuxIntToInt32(v.AuxInt)
11829 if v_0.Op != ssaop.OpARMMOVWconst {
11830 break
11831 }
11832 c := ssa.AuxIntToInt32(v_0.AuxInt)
11833 x := v_1
11834 v.Reset(ssaop.OpARMRSBconst)
11835 v.AuxInt = ssa.Int32ToAuxInt(c)
11836 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
11837 v0.AuxInt = ssa.Int32ToAuxInt(d)
11838 v0.AddArg(x)
11839 v.AddArg(v0)
11840 return true
11841 }
11842
11843
11844 for {
11845 d := ssa.AuxIntToInt32(v.AuxInt)
11846 x := v_0
11847 if v_1.Op != ssaop.OpARMMOVWconst {
11848 break
11849 }
11850 c := ssa.AuxIntToInt32(v_1.AuxInt)
11851 v.Reset(ssaop.OpARMSUBconst)
11852 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11853 v.AddArg(x)
11854 return true
11855 }
11856
11857
11858 for {
11859 c := ssa.AuxIntToInt32(v.AuxInt)
11860 if v_0.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
11861 break
11862 }
11863 x := v_0.Args[0]
11864 if x != v_1 {
11865 break
11866 }
11867 v.Reset(ssaop.OpARMMOVWconst)
11868 v.AuxInt = ssa.Int32ToAuxInt(0)
11869 return true
11870 }
11871 return false
11872 }
11873 func rewriteValue_OpARMSUBshiftRLreg(v *ssa.Value) bool {
11874 v_2 := v.Args[2]
11875 v_1 := v.Args[1]
11876 v_0 := v.Args[0]
11877 b := v.Block
11878
11879
11880 for {
11881 if v_0.Op != ssaop.OpARMMOVWconst {
11882 break
11883 }
11884 c := ssa.AuxIntToInt32(v_0.AuxInt)
11885 x := v_1
11886 y := v_2
11887 v.Reset(ssaop.OpARMRSBconst)
11888 v.AuxInt = ssa.Int32ToAuxInt(c)
11889 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
11890 v0.AddArg2(x, y)
11891 v.AddArg(v0)
11892 return true
11893 }
11894
11895
11896
11897 for {
11898 x := v_0
11899 y := v_1
11900 if v_2.Op != ssaop.OpARMMOVWconst {
11901 break
11902 }
11903 c := ssa.AuxIntToInt32(v_2.AuxInt)
11904 if !(0 <= c && c < 32) {
11905 break
11906 }
11907 v.Reset(ssaop.OpARMSUBshiftRL)
11908 v.AuxInt = ssa.Int32ToAuxInt(c)
11909 v.AddArg2(x, y)
11910 return true
11911 }
11912 return false
11913 }
11914 func rewriteValue_OpARMTEQ(v *ssa.Value) bool {
11915 v_1 := v.Args[1]
11916 v_0 := v.Args[0]
11917
11918
11919 for {
11920 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11921 x := v_0
11922 if v_1.Op != ssaop.OpARMMOVWconst {
11923 continue
11924 }
11925 c := ssa.AuxIntToInt32(v_1.AuxInt)
11926 v.Reset(ssaop.OpARMTEQconst)
11927 v.AuxInt = ssa.Int32ToAuxInt(c)
11928 v.AddArg(x)
11929 return true
11930 }
11931 break
11932 }
11933
11934
11935 for {
11936 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11937 x := v_0
11938 if v_1.Op != ssaop.OpARMSLLconst {
11939 continue
11940 }
11941 c := ssa.AuxIntToInt32(v_1.AuxInt)
11942 y := v_1.Args[0]
11943 v.Reset(ssaop.OpARMTEQshiftLL)
11944 v.AuxInt = ssa.Int32ToAuxInt(c)
11945 v.AddArg2(x, y)
11946 return true
11947 }
11948 break
11949 }
11950
11951
11952 for {
11953 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11954 x := v_0
11955 if v_1.Op != ssaop.OpARMSRLconst {
11956 continue
11957 }
11958 c := ssa.AuxIntToInt32(v_1.AuxInt)
11959 y := v_1.Args[0]
11960 v.Reset(ssaop.OpARMTEQshiftRL)
11961 v.AuxInt = ssa.Int32ToAuxInt(c)
11962 v.AddArg2(x, y)
11963 return true
11964 }
11965 break
11966 }
11967
11968
11969 for {
11970 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11971 x := v_0
11972 if v_1.Op != ssaop.OpARMSRAconst {
11973 continue
11974 }
11975 c := ssa.AuxIntToInt32(v_1.AuxInt)
11976 y := v_1.Args[0]
11977 v.Reset(ssaop.OpARMTEQshiftRA)
11978 v.AuxInt = ssa.Int32ToAuxInt(c)
11979 v.AddArg2(x, y)
11980 return true
11981 }
11982 break
11983 }
11984
11985
11986 for {
11987 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11988 x := v_0
11989 if v_1.Op != ssaop.OpARMSLL {
11990 continue
11991 }
11992 z := v_1.Args[1]
11993 y := v_1.Args[0]
11994 v.Reset(ssaop.OpARMTEQshiftLLreg)
11995 v.AddArg3(x, y, z)
11996 return true
11997 }
11998 break
11999 }
12000
12001
12002 for {
12003 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12004 x := v_0
12005 if v_1.Op != ssaop.OpARMSRL {
12006 continue
12007 }
12008 z := v_1.Args[1]
12009 y := v_1.Args[0]
12010 v.Reset(ssaop.OpARMTEQshiftRLreg)
12011 v.AddArg3(x, y, z)
12012 return true
12013 }
12014 break
12015 }
12016
12017
12018 for {
12019 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12020 x := v_0
12021 if v_1.Op != ssaop.OpARMSRA {
12022 continue
12023 }
12024 z := v_1.Args[1]
12025 y := v_1.Args[0]
12026 v.Reset(ssaop.OpARMTEQshiftRAreg)
12027 v.AddArg3(x, y, z)
12028 return true
12029 }
12030 break
12031 }
12032 return false
12033 }
12034 func rewriteValue_OpARMTEQconst(v *ssa.Value) bool {
12035 v_0 := v.Args[0]
12036
12037
12038 for {
12039 y := ssa.AuxIntToInt32(v.AuxInt)
12040 if v_0.Op != ssaop.OpARMMOVWconst {
12041 break
12042 }
12043 x := ssa.AuxIntToInt32(v_0.AuxInt)
12044 v.Reset(ssaop.OpARMFlagConstant)
12045 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.LogicFlags32(x ^ y))
12046 return true
12047 }
12048 return false
12049 }
12050 func rewriteValue_OpARMTEQshiftLL(v *ssa.Value) bool {
12051 v_1 := v.Args[1]
12052 v_0 := v.Args[0]
12053 b := v.Block
12054
12055
12056 for {
12057 d := ssa.AuxIntToInt32(v.AuxInt)
12058 if v_0.Op != ssaop.OpARMMOVWconst {
12059 break
12060 }
12061 c := ssa.AuxIntToInt32(v_0.AuxInt)
12062 x := v_1
12063 v.Reset(ssaop.OpARMTEQconst)
12064 v.AuxInt = ssa.Int32ToAuxInt(c)
12065 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
12066 v0.AuxInt = ssa.Int32ToAuxInt(d)
12067 v0.AddArg(x)
12068 v.AddArg(v0)
12069 return true
12070 }
12071
12072
12073 for {
12074 d := ssa.AuxIntToInt32(v.AuxInt)
12075 x := v_0
12076 if v_1.Op != ssaop.OpARMMOVWconst {
12077 break
12078 }
12079 c := ssa.AuxIntToInt32(v_1.AuxInt)
12080 v.Reset(ssaop.OpARMTEQconst)
12081 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
12082 v.AddArg(x)
12083 return true
12084 }
12085 return false
12086 }
12087 func rewriteValue_OpARMTEQshiftLLreg(v *ssa.Value) bool {
12088 v_2 := v.Args[2]
12089 v_1 := v.Args[1]
12090 v_0 := v.Args[0]
12091 b := v.Block
12092
12093
12094 for {
12095 if v_0.Op != ssaop.OpARMMOVWconst {
12096 break
12097 }
12098 c := ssa.AuxIntToInt32(v_0.AuxInt)
12099 x := v_1
12100 y := v_2
12101 v.Reset(ssaop.OpARMTEQconst)
12102 v.AuxInt = ssa.Int32ToAuxInt(c)
12103 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
12104 v0.AddArg2(x, y)
12105 v.AddArg(v0)
12106 return true
12107 }
12108
12109
12110
12111 for {
12112 x := v_0
12113 y := v_1
12114 if v_2.Op != ssaop.OpARMMOVWconst {
12115 break
12116 }
12117 c := ssa.AuxIntToInt32(v_2.AuxInt)
12118 if !(0 <= c && c < 32) {
12119 break
12120 }
12121 v.Reset(ssaop.OpARMTEQshiftLL)
12122 v.AuxInt = ssa.Int32ToAuxInt(c)
12123 v.AddArg2(x, y)
12124 return true
12125 }
12126 return false
12127 }
12128 func rewriteValue_OpARMTEQshiftRA(v *ssa.Value) bool {
12129 v_1 := v.Args[1]
12130 v_0 := v.Args[0]
12131 b := v.Block
12132
12133
12134 for {
12135 d := ssa.AuxIntToInt32(v.AuxInt)
12136 if v_0.Op != ssaop.OpARMMOVWconst {
12137 break
12138 }
12139 c := ssa.AuxIntToInt32(v_0.AuxInt)
12140 x := v_1
12141 v.Reset(ssaop.OpARMTEQconst)
12142 v.AuxInt = ssa.Int32ToAuxInt(c)
12143 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
12144 v0.AuxInt = ssa.Int32ToAuxInt(d)
12145 v0.AddArg(x)
12146 v.AddArg(v0)
12147 return true
12148 }
12149
12150
12151 for {
12152 d := ssa.AuxIntToInt32(v.AuxInt)
12153 x := v_0
12154 if v_1.Op != ssaop.OpARMMOVWconst {
12155 break
12156 }
12157 c := ssa.AuxIntToInt32(v_1.AuxInt)
12158 v.Reset(ssaop.OpARMTEQconst)
12159 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
12160 v.AddArg(x)
12161 return true
12162 }
12163 return false
12164 }
12165 func rewriteValue_OpARMTEQshiftRAreg(v *ssa.Value) bool {
12166 v_2 := v.Args[2]
12167 v_1 := v.Args[1]
12168 v_0 := v.Args[0]
12169 b := v.Block
12170
12171
12172 for {
12173 if v_0.Op != ssaop.OpARMMOVWconst {
12174 break
12175 }
12176 c := ssa.AuxIntToInt32(v_0.AuxInt)
12177 x := v_1
12178 y := v_2
12179 v.Reset(ssaop.OpARMTEQconst)
12180 v.AuxInt = ssa.Int32ToAuxInt(c)
12181 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
12182 v0.AddArg2(x, y)
12183 v.AddArg(v0)
12184 return true
12185 }
12186
12187
12188
12189 for {
12190 x := v_0
12191 y := v_1
12192 if v_2.Op != ssaop.OpARMMOVWconst {
12193 break
12194 }
12195 c := ssa.AuxIntToInt32(v_2.AuxInt)
12196 if !(0 <= c && c < 32) {
12197 break
12198 }
12199 v.Reset(ssaop.OpARMTEQshiftRA)
12200 v.AuxInt = ssa.Int32ToAuxInt(c)
12201 v.AddArg2(x, y)
12202 return true
12203 }
12204 return false
12205 }
12206 func rewriteValue_OpARMTEQshiftRL(v *ssa.Value) bool {
12207 v_1 := v.Args[1]
12208 v_0 := v.Args[0]
12209 b := v.Block
12210
12211
12212 for {
12213 d := ssa.AuxIntToInt32(v.AuxInt)
12214 if v_0.Op != ssaop.OpARMMOVWconst {
12215 break
12216 }
12217 c := ssa.AuxIntToInt32(v_0.AuxInt)
12218 x := v_1
12219 v.Reset(ssaop.OpARMTEQconst)
12220 v.AuxInt = ssa.Int32ToAuxInt(c)
12221 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
12222 v0.AuxInt = ssa.Int32ToAuxInt(d)
12223 v0.AddArg(x)
12224 v.AddArg(v0)
12225 return true
12226 }
12227
12228
12229 for {
12230 d := ssa.AuxIntToInt32(v.AuxInt)
12231 x := v_0
12232 if v_1.Op != ssaop.OpARMMOVWconst {
12233 break
12234 }
12235 c := ssa.AuxIntToInt32(v_1.AuxInt)
12236 v.Reset(ssaop.OpARMTEQconst)
12237 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12238 v.AddArg(x)
12239 return true
12240 }
12241 return false
12242 }
12243 func rewriteValue_OpARMTEQshiftRLreg(v *ssa.Value) bool {
12244 v_2 := v.Args[2]
12245 v_1 := v.Args[1]
12246 v_0 := v.Args[0]
12247 b := v.Block
12248
12249
12250 for {
12251 if v_0.Op != ssaop.OpARMMOVWconst {
12252 break
12253 }
12254 c := ssa.AuxIntToInt32(v_0.AuxInt)
12255 x := v_1
12256 y := v_2
12257 v.Reset(ssaop.OpARMTEQconst)
12258 v.AuxInt = ssa.Int32ToAuxInt(c)
12259 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
12260 v0.AddArg2(x, y)
12261 v.AddArg(v0)
12262 return true
12263 }
12264
12265
12266
12267 for {
12268 x := v_0
12269 y := v_1
12270 if v_2.Op != ssaop.OpARMMOVWconst {
12271 break
12272 }
12273 c := ssa.AuxIntToInt32(v_2.AuxInt)
12274 if !(0 <= c && c < 32) {
12275 break
12276 }
12277 v.Reset(ssaop.OpARMTEQshiftRL)
12278 v.AuxInt = ssa.Int32ToAuxInt(c)
12279 v.AddArg2(x, y)
12280 return true
12281 }
12282 return false
12283 }
12284 func rewriteValue_OpARMTST(v *ssa.Value) bool {
12285 v_1 := v.Args[1]
12286 v_0 := v.Args[0]
12287
12288
12289 for {
12290 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12291 x := v_0
12292 if v_1.Op != ssaop.OpARMMOVWconst {
12293 continue
12294 }
12295 c := ssa.AuxIntToInt32(v_1.AuxInt)
12296 v.Reset(ssaop.OpARMTSTconst)
12297 v.AuxInt = ssa.Int32ToAuxInt(c)
12298 v.AddArg(x)
12299 return true
12300 }
12301 break
12302 }
12303
12304
12305 for {
12306 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12307 x := v_0
12308 if v_1.Op != ssaop.OpARMSLLconst {
12309 continue
12310 }
12311 c := ssa.AuxIntToInt32(v_1.AuxInt)
12312 y := v_1.Args[0]
12313 v.Reset(ssaop.OpARMTSTshiftLL)
12314 v.AuxInt = ssa.Int32ToAuxInt(c)
12315 v.AddArg2(x, y)
12316 return true
12317 }
12318 break
12319 }
12320
12321
12322 for {
12323 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12324 x := v_0
12325 if v_1.Op != ssaop.OpARMSRLconst {
12326 continue
12327 }
12328 c := ssa.AuxIntToInt32(v_1.AuxInt)
12329 y := v_1.Args[0]
12330 v.Reset(ssaop.OpARMTSTshiftRL)
12331 v.AuxInt = ssa.Int32ToAuxInt(c)
12332 v.AddArg2(x, y)
12333 return true
12334 }
12335 break
12336 }
12337
12338
12339 for {
12340 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12341 x := v_0
12342 if v_1.Op != ssaop.OpARMSRAconst {
12343 continue
12344 }
12345 c := ssa.AuxIntToInt32(v_1.AuxInt)
12346 y := v_1.Args[0]
12347 v.Reset(ssaop.OpARMTSTshiftRA)
12348 v.AuxInt = ssa.Int32ToAuxInt(c)
12349 v.AddArg2(x, y)
12350 return true
12351 }
12352 break
12353 }
12354
12355
12356 for {
12357 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12358 x := v_0
12359 if v_1.Op != ssaop.OpARMSLL {
12360 continue
12361 }
12362 z := v_1.Args[1]
12363 y := v_1.Args[0]
12364 v.Reset(ssaop.OpARMTSTshiftLLreg)
12365 v.AddArg3(x, y, z)
12366 return true
12367 }
12368 break
12369 }
12370
12371
12372 for {
12373 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12374 x := v_0
12375 if v_1.Op != ssaop.OpARMSRL {
12376 continue
12377 }
12378 z := v_1.Args[1]
12379 y := v_1.Args[0]
12380 v.Reset(ssaop.OpARMTSTshiftRLreg)
12381 v.AddArg3(x, y, z)
12382 return true
12383 }
12384 break
12385 }
12386
12387
12388 for {
12389 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12390 x := v_0
12391 if v_1.Op != ssaop.OpARMSRA {
12392 continue
12393 }
12394 z := v_1.Args[1]
12395 y := v_1.Args[0]
12396 v.Reset(ssaop.OpARMTSTshiftRAreg)
12397 v.AddArg3(x, y, z)
12398 return true
12399 }
12400 break
12401 }
12402 return false
12403 }
12404 func rewriteValue_OpARMTSTconst(v *ssa.Value) bool {
12405 v_0 := v.Args[0]
12406
12407
12408 for {
12409 y := ssa.AuxIntToInt32(v.AuxInt)
12410 if v_0.Op != ssaop.OpARMMOVWconst {
12411 break
12412 }
12413 x := ssa.AuxIntToInt32(v_0.AuxInt)
12414 v.Reset(ssaop.OpARMFlagConstant)
12415 v.AuxInt = ssa.FlagConstantToAuxInt(ssa.LogicFlags32(x & y))
12416 return true
12417 }
12418 return false
12419 }
12420 func rewriteValue_OpARMTSTshiftLL(v *ssa.Value) bool {
12421 v_1 := v.Args[1]
12422 v_0 := v.Args[0]
12423 b := v.Block
12424
12425
12426 for {
12427 d := ssa.AuxIntToInt32(v.AuxInt)
12428 if v_0.Op != ssaop.OpARMMOVWconst {
12429 break
12430 }
12431 c := ssa.AuxIntToInt32(v_0.AuxInt)
12432 x := v_1
12433 v.Reset(ssaop.OpARMTSTconst)
12434 v.AuxInt = ssa.Int32ToAuxInt(c)
12435 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
12436 v0.AuxInt = ssa.Int32ToAuxInt(d)
12437 v0.AddArg(x)
12438 v.AddArg(v0)
12439 return true
12440 }
12441
12442
12443 for {
12444 d := ssa.AuxIntToInt32(v.AuxInt)
12445 x := v_0
12446 if v_1.Op != ssaop.OpARMMOVWconst {
12447 break
12448 }
12449 c := ssa.AuxIntToInt32(v_1.AuxInt)
12450 v.Reset(ssaop.OpARMTSTconst)
12451 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
12452 v.AddArg(x)
12453 return true
12454 }
12455 return false
12456 }
12457 func rewriteValue_OpARMTSTshiftLLreg(v *ssa.Value) bool {
12458 v_2 := v.Args[2]
12459 v_1 := v.Args[1]
12460 v_0 := v.Args[0]
12461 b := v.Block
12462
12463
12464 for {
12465 if v_0.Op != ssaop.OpARMMOVWconst {
12466 break
12467 }
12468 c := ssa.AuxIntToInt32(v_0.AuxInt)
12469 x := v_1
12470 y := v_2
12471 v.Reset(ssaop.OpARMTSTconst)
12472 v.AuxInt = ssa.Int32ToAuxInt(c)
12473 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
12474 v0.AddArg2(x, y)
12475 v.AddArg(v0)
12476 return true
12477 }
12478
12479
12480
12481 for {
12482 x := v_0
12483 y := v_1
12484 if v_2.Op != ssaop.OpARMMOVWconst {
12485 break
12486 }
12487 c := ssa.AuxIntToInt32(v_2.AuxInt)
12488 if !(0 <= c && c < 32) {
12489 break
12490 }
12491 v.Reset(ssaop.OpARMTSTshiftLL)
12492 v.AuxInt = ssa.Int32ToAuxInt(c)
12493 v.AddArg2(x, y)
12494 return true
12495 }
12496 return false
12497 }
12498 func rewriteValue_OpARMTSTshiftRA(v *ssa.Value) bool {
12499 v_1 := v.Args[1]
12500 v_0 := v.Args[0]
12501 b := v.Block
12502
12503
12504 for {
12505 d := ssa.AuxIntToInt32(v.AuxInt)
12506 if v_0.Op != ssaop.OpARMMOVWconst {
12507 break
12508 }
12509 c := ssa.AuxIntToInt32(v_0.AuxInt)
12510 x := v_1
12511 v.Reset(ssaop.OpARMTSTconst)
12512 v.AuxInt = ssa.Int32ToAuxInt(c)
12513 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
12514 v0.AuxInt = ssa.Int32ToAuxInt(d)
12515 v0.AddArg(x)
12516 v.AddArg(v0)
12517 return true
12518 }
12519
12520
12521 for {
12522 d := ssa.AuxIntToInt32(v.AuxInt)
12523 x := v_0
12524 if v_1.Op != ssaop.OpARMMOVWconst {
12525 break
12526 }
12527 c := ssa.AuxIntToInt32(v_1.AuxInt)
12528 v.Reset(ssaop.OpARMTSTconst)
12529 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
12530 v.AddArg(x)
12531 return true
12532 }
12533 return false
12534 }
12535 func rewriteValue_OpARMTSTshiftRAreg(v *ssa.Value) bool {
12536 v_2 := v.Args[2]
12537 v_1 := v.Args[1]
12538 v_0 := v.Args[0]
12539 b := v.Block
12540
12541
12542 for {
12543 if v_0.Op != ssaop.OpARMMOVWconst {
12544 break
12545 }
12546 c := ssa.AuxIntToInt32(v_0.AuxInt)
12547 x := v_1
12548 y := v_2
12549 v.Reset(ssaop.OpARMTSTconst)
12550 v.AuxInt = ssa.Int32ToAuxInt(c)
12551 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
12552 v0.AddArg2(x, y)
12553 v.AddArg(v0)
12554 return true
12555 }
12556
12557
12558
12559 for {
12560 x := v_0
12561 y := v_1
12562 if v_2.Op != ssaop.OpARMMOVWconst {
12563 break
12564 }
12565 c := ssa.AuxIntToInt32(v_2.AuxInt)
12566 if !(0 <= c && c < 32) {
12567 break
12568 }
12569 v.Reset(ssaop.OpARMTSTshiftRA)
12570 v.AuxInt = ssa.Int32ToAuxInt(c)
12571 v.AddArg2(x, y)
12572 return true
12573 }
12574 return false
12575 }
12576 func rewriteValue_OpARMTSTshiftRL(v *ssa.Value) bool {
12577 v_1 := v.Args[1]
12578 v_0 := v.Args[0]
12579 b := v.Block
12580
12581
12582 for {
12583 d := ssa.AuxIntToInt32(v.AuxInt)
12584 if v_0.Op != ssaop.OpARMMOVWconst {
12585 break
12586 }
12587 c := ssa.AuxIntToInt32(v_0.AuxInt)
12588 x := v_1
12589 v.Reset(ssaop.OpARMTSTconst)
12590 v.AuxInt = ssa.Int32ToAuxInt(c)
12591 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
12592 v0.AuxInt = ssa.Int32ToAuxInt(d)
12593 v0.AddArg(x)
12594 v.AddArg(v0)
12595 return true
12596 }
12597
12598
12599 for {
12600 d := ssa.AuxIntToInt32(v.AuxInt)
12601 x := v_0
12602 if v_1.Op != ssaop.OpARMMOVWconst {
12603 break
12604 }
12605 c := ssa.AuxIntToInt32(v_1.AuxInt)
12606 v.Reset(ssaop.OpARMTSTconst)
12607 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12608 v.AddArg(x)
12609 return true
12610 }
12611 return false
12612 }
12613 func rewriteValue_OpARMTSTshiftRLreg(v *ssa.Value) bool {
12614 v_2 := v.Args[2]
12615 v_1 := v.Args[1]
12616 v_0 := v.Args[0]
12617 b := v.Block
12618
12619
12620 for {
12621 if v_0.Op != ssaop.OpARMMOVWconst {
12622 break
12623 }
12624 c := ssa.AuxIntToInt32(v_0.AuxInt)
12625 x := v_1
12626 y := v_2
12627 v.Reset(ssaop.OpARMTSTconst)
12628 v.AuxInt = ssa.Int32ToAuxInt(c)
12629 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
12630 v0.AddArg2(x, y)
12631 v.AddArg(v0)
12632 return true
12633 }
12634
12635
12636
12637 for {
12638 x := v_0
12639 y := v_1
12640 if v_2.Op != ssaop.OpARMMOVWconst {
12641 break
12642 }
12643 c := ssa.AuxIntToInt32(v_2.AuxInt)
12644 if !(0 <= c && c < 32) {
12645 break
12646 }
12647 v.Reset(ssaop.OpARMTSTshiftRL)
12648 v.AuxInt = ssa.Int32ToAuxInt(c)
12649 v.AddArg2(x, y)
12650 return true
12651 }
12652 return false
12653 }
12654 func rewriteValue_OpARMXOR(v *ssa.Value) bool {
12655 v_1 := v.Args[1]
12656 v_0 := v.Args[0]
12657
12658
12659 for {
12660 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12661 x := v_0
12662 if v_1.Op != ssaop.OpARMMOVWconst {
12663 continue
12664 }
12665 c := ssa.AuxIntToInt32(v_1.AuxInt)
12666 v.Reset(ssaop.OpARMXORconst)
12667 v.AuxInt = ssa.Int32ToAuxInt(c)
12668 v.AddArg(x)
12669 return true
12670 }
12671 break
12672 }
12673
12674
12675 for {
12676 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12677 x := v_0
12678 if v_1.Op != ssaop.OpARMSLLconst {
12679 continue
12680 }
12681 c := ssa.AuxIntToInt32(v_1.AuxInt)
12682 y := v_1.Args[0]
12683 v.Reset(ssaop.OpARMXORshiftLL)
12684 v.AuxInt = ssa.Int32ToAuxInt(c)
12685 v.AddArg2(x, y)
12686 return true
12687 }
12688 break
12689 }
12690
12691
12692 for {
12693 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12694 x := v_0
12695 if v_1.Op != ssaop.OpARMSRLconst {
12696 continue
12697 }
12698 c := ssa.AuxIntToInt32(v_1.AuxInt)
12699 y := v_1.Args[0]
12700 v.Reset(ssaop.OpARMXORshiftRL)
12701 v.AuxInt = ssa.Int32ToAuxInt(c)
12702 v.AddArg2(x, y)
12703 return true
12704 }
12705 break
12706 }
12707
12708
12709 for {
12710 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12711 x := v_0
12712 if v_1.Op != ssaop.OpARMSRAconst {
12713 continue
12714 }
12715 c := ssa.AuxIntToInt32(v_1.AuxInt)
12716 y := v_1.Args[0]
12717 v.Reset(ssaop.OpARMXORshiftRA)
12718 v.AuxInt = ssa.Int32ToAuxInt(c)
12719 v.AddArg2(x, y)
12720 return true
12721 }
12722 break
12723 }
12724
12725
12726 for {
12727 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12728 x := v_0
12729 if v_1.Op != ssaop.OpARMSRRconst {
12730 continue
12731 }
12732 c := ssa.AuxIntToInt32(v_1.AuxInt)
12733 y := v_1.Args[0]
12734 v.Reset(ssaop.OpARMXORshiftRR)
12735 v.AuxInt = ssa.Int32ToAuxInt(c)
12736 v.AddArg2(x, y)
12737 return true
12738 }
12739 break
12740 }
12741
12742
12743 for {
12744 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12745 x := v_0
12746 if v_1.Op != ssaop.OpARMSLL {
12747 continue
12748 }
12749 z := v_1.Args[1]
12750 y := v_1.Args[0]
12751 v.Reset(ssaop.OpARMXORshiftLLreg)
12752 v.AddArg3(x, y, z)
12753 return true
12754 }
12755 break
12756 }
12757
12758
12759 for {
12760 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12761 x := v_0
12762 if v_1.Op != ssaop.OpARMSRL {
12763 continue
12764 }
12765 z := v_1.Args[1]
12766 y := v_1.Args[0]
12767 v.Reset(ssaop.OpARMXORshiftRLreg)
12768 v.AddArg3(x, y, z)
12769 return true
12770 }
12771 break
12772 }
12773
12774
12775 for {
12776 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12777 x := v_0
12778 if v_1.Op != ssaop.OpARMSRA {
12779 continue
12780 }
12781 z := v_1.Args[1]
12782 y := v_1.Args[0]
12783 v.Reset(ssaop.OpARMXORshiftRAreg)
12784 v.AddArg3(x, y, z)
12785 return true
12786 }
12787 break
12788 }
12789
12790
12791 for {
12792 x := v_0
12793 if x != v_1 {
12794 break
12795 }
12796 v.Reset(ssaop.OpARMMOVWconst)
12797 v.AuxInt = ssa.Int32ToAuxInt(0)
12798 return true
12799 }
12800 return false
12801 }
12802 func rewriteValue_OpARMXORconst(v *ssa.Value) bool {
12803 v_0 := v.Args[0]
12804
12805
12806 for {
12807 if ssa.AuxIntToInt32(v.AuxInt) != 0 {
12808 break
12809 }
12810 x := v_0
12811 v.CopyOf(x)
12812 return true
12813 }
12814
12815
12816 for {
12817 c := ssa.AuxIntToInt32(v.AuxInt)
12818 if v_0.Op != ssaop.OpARMMOVWconst {
12819 break
12820 }
12821 d := ssa.AuxIntToInt32(v_0.AuxInt)
12822 v.Reset(ssaop.OpARMMOVWconst)
12823 v.AuxInt = ssa.Int32ToAuxInt(c ^ d)
12824 return true
12825 }
12826
12827
12828 for {
12829 c := ssa.AuxIntToInt32(v.AuxInt)
12830 if v_0.Op != ssaop.OpARMXORconst {
12831 break
12832 }
12833 d := ssa.AuxIntToInt32(v_0.AuxInt)
12834 x := v_0.Args[0]
12835 v.Reset(ssaop.OpARMXORconst)
12836 v.AuxInt = ssa.Int32ToAuxInt(c ^ d)
12837 v.AddArg(x)
12838 return true
12839 }
12840 return false
12841 }
12842 func rewriteValue_OpARMXORshiftLL(v *ssa.Value) bool {
12843 v_1 := v.Args[1]
12844 v_0 := v.Args[0]
12845 b := v.Block
12846 typ := &b.Func.Config.Types
12847
12848
12849 for {
12850 d := ssa.AuxIntToInt32(v.AuxInt)
12851 if v_0.Op != ssaop.OpARMMOVWconst {
12852 break
12853 }
12854 c := ssa.AuxIntToInt32(v_0.AuxInt)
12855 x := v_1
12856 v.Reset(ssaop.OpARMXORconst)
12857 v.AuxInt = ssa.Int32ToAuxInt(c)
12858 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, x.Type)
12859 v0.AuxInt = ssa.Int32ToAuxInt(d)
12860 v0.AddArg(x)
12861 v.AddArg(v0)
12862 return true
12863 }
12864
12865
12866 for {
12867 d := ssa.AuxIntToInt32(v.AuxInt)
12868 x := v_0
12869 if v_1.Op != ssaop.OpARMMOVWconst {
12870 break
12871 }
12872 c := ssa.AuxIntToInt32(v_1.AuxInt)
12873 v.Reset(ssaop.OpARMXORconst)
12874 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
12875 v.AddArg(x)
12876 return true
12877 }
12878
12879
12880 for {
12881 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMBFXU || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != int32(ssa.ArmBFAuxInt(8, 8)) {
12882 break
12883 }
12884 x := v_0.Args[0]
12885 if x != v_1 {
12886 break
12887 }
12888 v.Reset(ssaop.OpARMREV16)
12889 v.AddArg(x)
12890 return true
12891 }
12892
12893
12894
12895 for {
12896 if v.Type != typ.UInt16 || ssa.AuxIntToInt32(v.AuxInt) != 8 || v_0.Op != ssaop.OpARMSRLconst || v_0.Type != typ.UInt16 || ssa.AuxIntToInt32(v_0.AuxInt) != 24 {
12897 break
12898 }
12899 v_0_0 := v_0.Args[0]
12900 if v_0_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0_0.AuxInt) != 16 {
12901 break
12902 }
12903 x := v_0_0.Args[0]
12904 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
12905 break
12906 }
12907 v.Reset(ssaop.OpARMREV16)
12908 v.AddArg(x)
12909 return true
12910 }
12911
12912
12913 for {
12914 c := ssa.AuxIntToInt32(v.AuxInt)
12915 if v_0.Op != ssaop.OpARMSLLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
12916 break
12917 }
12918 x := v_0.Args[0]
12919 if x != v_1 {
12920 break
12921 }
12922 v.Reset(ssaop.OpARMMOVWconst)
12923 v.AuxInt = ssa.Int32ToAuxInt(0)
12924 return true
12925 }
12926 return false
12927 }
12928 func rewriteValue_OpARMXORshiftLLreg(v *ssa.Value) bool {
12929 v_2 := v.Args[2]
12930 v_1 := v.Args[1]
12931 v_0 := v.Args[0]
12932 b := v.Block
12933
12934
12935 for {
12936 if v_0.Op != ssaop.OpARMMOVWconst {
12937 break
12938 }
12939 c := ssa.AuxIntToInt32(v_0.AuxInt)
12940 x := v_1
12941 y := v_2
12942 v.Reset(ssaop.OpARMXORconst)
12943 v.AuxInt = ssa.Int32ToAuxInt(c)
12944 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
12945 v0.AddArg2(x, y)
12946 v.AddArg(v0)
12947 return true
12948 }
12949
12950
12951
12952 for {
12953 x := v_0
12954 y := v_1
12955 if v_2.Op != ssaop.OpARMMOVWconst {
12956 break
12957 }
12958 c := ssa.AuxIntToInt32(v_2.AuxInt)
12959 if !(0 <= c && c < 32) {
12960 break
12961 }
12962 v.Reset(ssaop.OpARMXORshiftLL)
12963 v.AuxInt = ssa.Int32ToAuxInt(c)
12964 v.AddArg2(x, y)
12965 return true
12966 }
12967 return false
12968 }
12969 func rewriteValue_OpARMXORshiftRA(v *ssa.Value) bool {
12970 v_1 := v.Args[1]
12971 v_0 := v.Args[0]
12972 b := v.Block
12973
12974
12975 for {
12976 d := ssa.AuxIntToInt32(v.AuxInt)
12977 if v_0.Op != ssaop.OpARMMOVWconst {
12978 break
12979 }
12980 c := ssa.AuxIntToInt32(v_0.AuxInt)
12981 x := v_1
12982 v.Reset(ssaop.OpARMXORconst)
12983 v.AuxInt = ssa.Int32ToAuxInt(c)
12984 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRAconst, x.Type)
12985 v0.AuxInt = ssa.Int32ToAuxInt(d)
12986 v0.AddArg(x)
12987 v.AddArg(v0)
12988 return true
12989 }
12990
12991
12992 for {
12993 d := ssa.AuxIntToInt32(v.AuxInt)
12994 x := v_0
12995 if v_1.Op != ssaop.OpARMMOVWconst {
12996 break
12997 }
12998 c := ssa.AuxIntToInt32(v_1.AuxInt)
12999 v.Reset(ssaop.OpARMXORconst)
13000 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
13001 v.AddArg(x)
13002 return true
13003 }
13004
13005
13006 for {
13007 c := ssa.AuxIntToInt32(v.AuxInt)
13008 if v_0.Op != ssaop.OpARMSRAconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
13009 break
13010 }
13011 x := v_0.Args[0]
13012 if x != v_1 {
13013 break
13014 }
13015 v.Reset(ssaop.OpARMMOVWconst)
13016 v.AuxInt = ssa.Int32ToAuxInt(0)
13017 return true
13018 }
13019 return false
13020 }
13021 func rewriteValue_OpARMXORshiftRAreg(v *ssa.Value) bool {
13022 v_2 := v.Args[2]
13023 v_1 := v.Args[1]
13024 v_0 := v.Args[0]
13025 b := v.Block
13026
13027
13028 for {
13029 if v_0.Op != ssaop.OpARMMOVWconst {
13030 break
13031 }
13032 c := ssa.AuxIntToInt32(v_0.AuxInt)
13033 x := v_1
13034 y := v_2
13035 v.Reset(ssaop.OpARMXORconst)
13036 v.AuxInt = ssa.Int32ToAuxInt(c)
13037 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRA, x.Type)
13038 v0.AddArg2(x, y)
13039 v.AddArg(v0)
13040 return true
13041 }
13042
13043
13044
13045 for {
13046 x := v_0
13047 y := v_1
13048 if v_2.Op != ssaop.OpARMMOVWconst {
13049 break
13050 }
13051 c := ssa.AuxIntToInt32(v_2.AuxInt)
13052 if !(0 <= c && c < 32) {
13053 break
13054 }
13055 v.Reset(ssaop.OpARMXORshiftRA)
13056 v.AuxInt = ssa.Int32ToAuxInt(c)
13057 v.AddArg2(x, y)
13058 return true
13059 }
13060 return false
13061 }
13062 func rewriteValue_OpARMXORshiftRL(v *ssa.Value) bool {
13063 v_1 := v.Args[1]
13064 v_0 := v.Args[0]
13065 b := v.Block
13066
13067
13068 for {
13069 d := ssa.AuxIntToInt32(v.AuxInt)
13070 if v_0.Op != ssaop.OpARMMOVWconst {
13071 break
13072 }
13073 c := ssa.AuxIntToInt32(v_0.AuxInt)
13074 x := v_1
13075 v.Reset(ssaop.OpARMXORconst)
13076 v.AuxInt = ssa.Int32ToAuxInt(c)
13077 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, x.Type)
13078 v0.AuxInt = ssa.Int32ToAuxInt(d)
13079 v0.AddArg(x)
13080 v.AddArg(v0)
13081 return true
13082 }
13083
13084
13085 for {
13086 d := ssa.AuxIntToInt32(v.AuxInt)
13087 x := v_0
13088 if v_1.Op != ssaop.OpARMMOVWconst {
13089 break
13090 }
13091 c := ssa.AuxIntToInt32(v_1.AuxInt)
13092 v.Reset(ssaop.OpARMXORconst)
13093 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
13094 v.AddArg(x)
13095 return true
13096 }
13097
13098
13099 for {
13100 c := ssa.AuxIntToInt32(v.AuxInt)
13101 if v_0.Op != ssaop.OpARMSRLconst || ssa.AuxIntToInt32(v_0.AuxInt) != c {
13102 break
13103 }
13104 x := v_0.Args[0]
13105 if x != v_1 {
13106 break
13107 }
13108 v.Reset(ssaop.OpARMMOVWconst)
13109 v.AuxInt = ssa.Int32ToAuxInt(0)
13110 return true
13111 }
13112 return false
13113 }
13114 func rewriteValue_OpARMXORshiftRLreg(v *ssa.Value) bool {
13115 v_2 := v.Args[2]
13116 v_1 := v.Args[1]
13117 v_0 := v.Args[0]
13118 b := v.Block
13119
13120
13121 for {
13122 if v_0.Op != ssaop.OpARMMOVWconst {
13123 break
13124 }
13125 c := ssa.AuxIntToInt32(v_0.AuxInt)
13126 x := v_1
13127 y := v_2
13128 v.Reset(ssaop.OpARMXORconst)
13129 v.AuxInt = ssa.Int32ToAuxInt(c)
13130 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
13131 v0.AddArg2(x, y)
13132 v.AddArg(v0)
13133 return true
13134 }
13135
13136
13137
13138 for {
13139 x := v_0
13140 y := v_1
13141 if v_2.Op != ssaop.OpARMMOVWconst {
13142 break
13143 }
13144 c := ssa.AuxIntToInt32(v_2.AuxInt)
13145 if !(0 <= c && c < 32) {
13146 break
13147 }
13148 v.Reset(ssaop.OpARMXORshiftRL)
13149 v.AuxInt = ssa.Int32ToAuxInt(c)
13150 v.AddArg2(x, y)
13151 return true
13152 }
13153 return false
13154 }
13155 func rewriteValue_OpARMXORshiftRR(v *ssa.Value) bool {
13156 v_1 := v.Args[1]
13157 v_0 := v.Args[0]
13158 b := v.Block
13159
13160
13161 for {
13162 d := ssa.AuxIntToInt32(v.AuxInt)
13163 if v_0.Op != ssaop.OpARMMOVWconst {
13164 break
13165 }
13166 c := ssa.AuxIntToInt32(v_0.AuxInt)
13167 x := v_1
13168 v.Reset(ssaop.OpARMXORconst)
13169 v.AuxInt = ssa.Int32ToAuxInt(c)
13170 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRRconst, x.Type)
13171 v0.AuxInt = ssa.Int32ToAuxInt(d)
13172 v0.AddArg(x)
13173 v.AddArg(v0)
13174 return true
13175 }
13176
13177
13178 for {
13179 d := ssa.AuxIntToInt32(v.AuxInt)
13180 x := v_0
13181 if v_1.Op != ssaop.OpARMMOVWconst {
13182 break
13183 }
13184 c := ssa.AuxIntToInt32(v_1.AuxInt)
13185 v.Reset(ssaop.OpARMXORconst)
13186 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c)>>uint64(d) | uint32(c)<<uint64(32-d)))
13187 v.AddArg(x)
13188 return true
13189 }
13190 return false
13191 }
13192 func rewriteValue_OpAddr(v *ssa.Value) bool {
13193 v_0 := v.Args[0]
13194
13195
13196 for {
13197 sym := ssa.AuxToSym(v.Aux)
13198 base := v_0
13199 v.Reset(ssaop.OpARMMOVWaddr)
13200 v.Aux = ssa.SymToAux(sym)
13201 v.AddArg(base)
13202 return true
13203 }
13204 }
13205 func rewriteValue_OpAvg32u(v *ssa.Value) bool {
13206 v_1 := v.Args[1]
13207 v_0 := v.Args[0]
13208 b := v.Block
13209
13210
13211 for {
13212 t := v.Type
13213 x := v_0
13214 y := v_1
13215 v.Reset(ssaop.OpARMADD)
13216 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, t)
13217 v0.AuxInt = ssa.Int32ToAuxInt(1)
13218 v1 := b.NewValue0(v.Pos, ssaop.OpARMSUB, t)
13219 v1.AddArg2(x, y)
13220 v0.AddArg(v1)
13221 v.AddArg2(v0, y)
13222 return true
13223 }
13224 }
13225 func rewriteValue_OpBitLen16(v *ssa.Value) bool {
13226 v_0 := v.Args[0]
13227 b := v.Block
13228 typ := &b.Func.Config.Types
13229
13230
13231 for {
13232 x := v_0
13233 v.Reset(ssaop.OpBitLen32)
13234 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13235 v0.AddArg(x)
13236 v.AddArg(v0)
13237 return true
13238 }
13239 }
13240 func rewriteValue_OpBitLen32(v *ssa.Value) bool {
13241 v_0 := v.Args[0]
13242 b := v.Block
13243
13244
13245 for {
13246 t := v.Type
13247 x := v_0
13248 v.Reset(ssaop.OpARMRSBconst)
13249 v.AuxInt = ssa.Int32ToAuxInt(32)
13250 v0 := b.NewValue0(v.Pos, ssaop.OpARMCLZ, t)
13251 v0.AddArg(x)
13252 v.AddArg(v0)
13253 return true
13254 }
13255 }
13256 func rewriteValue_OpBitLen8(v *ssa.Value) bool {
13257 v_0 := v.Args[0]
13258 b := v.Block
13259 typ := &b.Func.Config.Types
13260
13261
13262 for {
13263 x := v_0
13264 v.Reset(ssaop.OpBitLen32)
13265 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13266 v0.AddArg(x)
13267 v.AddArg(v0)
13268 return true
13269 }
13270 }
13271 func rewriteValue_OpBswap32(v *ssa.Value) bool {
13272 v_0 := v.Args[0]
13273 b := v.Block
13274
13275
13276
13277 for {
13278 t := v.Type
13279 x := v_0
13280 if !(buildcfg.GOARM.Version == 5) {
13281 break
13282 }
13283 v.Reset(ssaop.OpARMXOR)
13284 v.Type = t
13285 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRLconst, t)
13286 v0.AuxInt = ssa.Int32ToAuxInt(8)
13287 v1 := b.NewValue0(v.Pos, ssaop.OpARMBICconst, t)
13288 v1.AuxInt = ssa.Int32ToAuxInt(0xff0000)
13289 v2 := b.NewValue0(v.Pos, ssaop.OpARMXOR, t)
13290 v3 := b.NewValue0(v.Pos, ssaop.OpARMSRRconst, t)
13291 v3.AuxInt = ssa.Int32ToAuxInt(16)
13292 v3.AddArg(x)
13293 v2.AddArg2(x, v3)
13294 v1.AddArg(v2)
13295 v0.AddArg(v1)
13296 v4 := b.NewValue0(v.Pos, ssaop.OpARMSRRconst, t)
13297 v4.AuxInt = ssa.Int32ToAuxInt(8)
13298 v4.AddArg(x)
13299 v.AddArg2(v0, v4)
13300 return true
13301 }
13302
13303
13304
13305 for {
13306 x := v_0
13307 if !(buildcfg.GOARM.Version >= 6) {
13308 break
13309 }
13310 v.Reset(ssaop.OpARMREV)
13311 v.AddArg(x)
13312 return true
13313 }
13314 return false
13315 }
13316 func rewriteValue_OpConst16(v *ssa.Value) bool {
13317
13318
13319 for {
13320 val := ssa.AuxIntToInt16(v.AuxInt)
13321 v.Reset(ssaop.OpARMMOVWconst)
13322 v.AuxInt = ssa.Int32ToAuxInt(int32(val))
13323 return true
13324 }
13325 }
13326 func rewriteValue_OpConst32(v *ssa.Value) bool {
13327
13328
13329 for {
13330 val := ssa.AuxIntToInt32(v.AuxInt)
13331 v.Reset(ssaop.OpARMMOVWconst)
13332 v.AuxInt = ssa.Int32ToAuxInt(int32(val))
13333 return true
13334 }
13335 }
13336 func rewriteValue_OpConst32F(v *ssa.Value) bool {
13337
13338
13339 for {
13340 val := ssa.AuxIntToFloat32(v.AuxInt)
13341 v.Reset(ssaop.OpARMMOVFconst)
13342 v.AuxInt = ssa.Float64ToAuxInt(float64(val))
13343 return true
13344 }
13345 }
13346 func rewriteValue_OpConst64F(v *ssa.Value) bool {
13347
13348
13349 for {
13350 val := ssa.AuxIntToFloat64(v.AuxInt)
13351 v.Reset(ssaop.OpARMMOVDconst)
13352 v.AuxInt = ssa.Float64ToAuxInt(float64(val))
13353 return true
13354 }
13355 }
13356 func rewriteValue_OpConst8(v *ssa.Value) bool {
13357
13358
13359 for {
13360 val := ssa.AuxIntToInt8(v.AuxInt)
13361 v.Reset(ssaop.OpARMMOVWconst)
13362 v.AuxInt = ssa.Int32ToAuxInt(int32(val))
13363 return true
13364 }
13365 }
13366 func rewriteValue_OpConstBool(v *ssa.Value) bool {
13367
13368
13369 for {
13370 t := ssa.AuxIntToBool(v.AuxInt)
13371 v.Reset(ssaop.OpARMMOVWconst)
13372 v.AuxInt = ssa.Int32ToAuxInt(ssa.B2i32(t))
13373 return true
13374 }
13375 }
13376 func rewriteValue_OpConstNil(v *ssa.Value) bool {
13377
13378
13379 for {
13380 v.Reset(ssaop.OpARMMOVWconst)
13381 v.AuxInt = ssa.Int32ToAuxInt(0)
13382 return true
13383 }
13384 }
13385 func rewriteValue_OpCtz16(v *ssa.Value) bool {
13386 v_0 := v.Args[0]
13387 b := v.Block
13388 typ := &b.Func.Config.Types
13389
13390
13391
13392 for {
13393 t := v.Type
13394 x := v_0
13395 if !(buildcfg.GOARM.Version <= 6) {
13396 break
13397 }
13398 v.Reset(ssaop.OpARMRSBconst)
13399 v.AuxInt = ssa.Int32ToAuxInt(32)
13400 v0 := b.NewValue0(v.Pos, ssaop.OpARMCLZ, t)
13401 v1 := b.NewValue0(v.Pos, ssaop.OpARMSUBconst, typ.UInt32)
13402 v1.AuxInt = ssa.Int32ToAuxInt(1)
13403 v2 := b.NewValue0(v.Pos, ssaop.OpARMAND, typ.UInt32)
13404 v3 := b.NewValue0(v.Pos, ssaop.OpARMORconst, typ.UInt32)
13405 v3.AuxInt = ssa.Int32ToAuxInt(0x10000)
13406 v3.AddArg(x)
13407 v4 := b.NewValue0(v.Pos, ssaop.OpARMRSBconst, typ.UInt32)
13408 v4.AuxInt = ssa.Int32ToAuxInt(0)
13409 v4.AddArg(v3)
13410 v2.AddArg2(v3, v4)
13411 v1.AddArg(v2)
13412 v0.AddArg(v1)
13413 v.AddArg(v0)
13414 return true
13415 }
13416
13417
13418
13419 for {
13420 t := v.Type
13421 x := v_0
13422 if !(buildcfg.GOARM.Version == 7) {
13423 break
13424 }
13425 v.Reset(ssaop.OpARMCLZ)
13426 v.Type = t
13427 v0 := b.NewValue0(v.Pos, ssaop.OpARMRBIT, typ.UInt32)
13428 v1 := b.NewValue0(v.Pos, ssaop.OpARMORconst, typ.UInt32)
13429 v1.AuxInt = ssa.Int32ToAuxInt(0x10000)
13430 v1.AddArg(x)
13431 v0.AddArg(v1)
13432 v.AddArg(v0)
13433 return true
13434 }
13435 return false
13436 }
13437 func rewriteValue_OpCtz32(v *ssa.Value) bool {
13438 v_0 := v.Args[0]
13439 b := v.Block
13440
13441
13442
13443 for {
13444 t := v.Type
13445 x := v_0
13446 if !(buildcfg.GOARM.Version <= 6) {
13447 break
13448 }
13449 v.Reset(ssaop.OpARMRSBconst)
13450 v.AuxInt = ssa.Int32ToAuxInt(32)
13451 v0 := b.NewValue0(v.Pos, ssaop.OpARMCLZ, t)
13452 v1 := b.NewValue0(v.Pos, ssaop.OpARMSUBconst, t)
13453 v1.AuxInt = ssa.Int32ToAuxInt(1)
13454 v2 := b.NewValue0(v.Pos, ssaop.OpARMAND, t)
13455 v3 := b.NewValue0(v.Pos, ssaop.OpARMRSBconst, t)
13456 v3.AuxInt = ssa.Int32ToAuxInt(0)
13457 v3.AddArg(x)
13458 v2.AddArg2(x, v3)
13459 v1.AddArg(v2)
13460 v0.AddArg(v1)
13461 v.AddArg(v0)
13462 return true
13463 }
13464
13465
13466
13467 for {
13468 t := v.Type
13469 x := v_0
13470 if !(buildcfg.GOARM.Version == 7) {
13471 break
13472 }
13473 v.Reset(ssaop.OpARMCLZ)
13474 v.Type = t
13475 v0 := b.NewValue0(v.Pos, ssaop.OpARMRBIT, t)
13476 v0.AddArg(x)
13477 v.AddArg(v0)
13478 return true
13479 }
13480 return false
13481 }
13482 func rewriteValue_OpCtz8(v *ssa.Value) bool {
13483 v_0 := v.Args[0]
13484 b := v.Block
13485 typ := &b.Func.Config.Types
13486
13487
13488
13489 for {
13490 t := v.Type
13491 x := v_0
13492 if !(buildcfg.GOARM.Version <= 6) {
13493 break
13494 }
13495 v.Reset(ssaop.OpARMRSBconst)
13496 v.AuxInt = ssa.Int32ToAuxInt(32)
13497 v0 := b.NewValue0(v.Pos, ssaop.OpARMCLZ, t)
13498 v1 := b.NewValue0(v.Pos, ssaop.OpARMSUBconst, typ.UInt32)
13499 v1.AuxInt = ssa.Int32ToAuxInt(1)
13500 v2 := b.NewValue0(v.Pos, ssaop.OpARMAND, typ.UInt32)
13501 v3 := b.NewValue0(v.Pos, ssaop.OpARMORconst, typ.UInt32)
13502 v3.AuxInt = ssa.Int32ToAuxInt(0x100)
13503 v3.AddArg(x)
13504 v4 := b.NewValue0(v.Pos, ssaop.OpARMRSBconst, typ.UInt32)
13505 v4.AuxInt = ssa.Int32ToAuxInt(0)
13506 v4.AddArg(v3)
13507 v2.AddArg2(v3, v4)
13508 v1.AddArg(v2)
13509 v0.AddArg(v1)
13510 v.AddArg(v0)
13511 return true
13512 }
13513
13514
13515
13516 for {
13517 t := v.Type
13518 x := v_0
13519 if !(buildcfg.GOARM.Version == 7) {
13520 break
13521 }
13522 v.Reset(ssaop.OpARMCLZ)
13523 v.Type = t
13524 v0 := b.NewValue0(v.Pos, ssaop.OpARMRBIT, typ.UInt32)
13525 v1 := b.NewValue0(v.Pos, ssaop.OpARMORconst, typ.UInt32)
13526 v1.AuxInt = ssa.Int32ToAuxInt(0x100)
13527 v1.AddArg(x)
13528 v0.AddArg(v1)
13529 v.AddArg(v0)
13530 return true
13531 }
13532 return false
13533 }
13534 func rewriteValue_OpDiv16(v *ssa.Value) bool {
13535 v_1 := v.Args[1]
13536 v_0 := v.Args[0]
13537 b := v.Block
13538 typ := &b.Func.Config.Types
13539
13540
13541 for {
13542 x := v_0
13543 y := v_1
13544 v.Reset(ssaop.OpDiv32)
13545 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
13546 v0.AddArg(x)
13547 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
13548 v1.AddArg(y)
13549 v.AddArg2(v0, v1)
13550 return true
13551 }
13552 }
13553 func rewriteValue_OpDiv16u(v *ssa.Value) bool {
13554 v_1 := v.Args[1]
13555 v_0 := v.Args[0]
13556 b := v.Block
13557 typ := &b.Func.Config.Types
13558
13559
13560 for {
13561 x := v_0
13562 y := v_1
13563 v.Reset(ssaop.OpDiv32u)
13564 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13565 v0.AddArg(x)
13566 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13567 v1.AddArg(y)
13568 v.AddArg2(v0, v1)
13569 return true
13570 }
13571 }
13572 func rewriteValue_OpDiv32(v *ssa.Value) bool {
13573 v_1 := v.Args[1]
13574 v_0 := v.Args[0]
13575 b := v.Block
13576 typ := &b.Func.Config.Types
13577
13578
13579 for {
13580 x := v_0
13581 y := v_1
13582 v.Reset(ssaop.OpARMSUB)
13583 v0 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
13584 v1 := b.NewValue0(v.Pos, ssaop.OpSelect0, typ.UInt32)
13585 v2 := b.NewValue0(v.Pos, ssaop.OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13586 v3 := b.NewValue0(v.Pos, ssaop.OpARMSUB, typ.UInt32)
13587 v4 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
13588 v5 := b.NewValue0(v.Pos, ssaop.OpSignmask, typ.Int32)
13589 v5.AddArg(x)
13590 v4.AddArg2(x, v5)
13591 v3.AddArg2(v4, v5)
13592 v6 := b.NewValue0(v.Pos, ssaop.OpARMSUB, typ.UInt32)
13593 v7 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
13594 v8 := b.NewValue0(v.Pos, ssaop.OpSignmask, typ.Int32)
13595 v8.AddArg(y)
13596 v7.AddArg2(y, v8)
13597 v6.AddArg2(v7, v8)
13598 v2.AddArg2(v3, v6)
13599 v1.AddArg(v2)
13600 v9 := b.NewValue0(v.Pos, ssaop.OpSignmask, typ.Int32)
13601 v10 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
13602 v10.AddArg2(x, y)
13603 v9.AddArg(v10)
13604 v0.AddArg2(v1, v9)
13605 v.AddArg2(v0, v9)
13606 return true
13607 }
13608 }
13609 func rewriteValue_OpDiv32u(v *ssa.Value) bool {
13610 v_1 := v.Args[1]
13611 v_0 := v.Args[0]
13612 b := v.Block
13613 typ := &b.Func.Config.Types
13614
13615
13616 for {
13617 x := v_0
13618 y := v_1
13619 v.Reset(ssaop.OpSelect0)
13620 v.Type = typ.UInt32
13621 v0 := b.NewValue0(v.Pos, ssaop.OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13622 v0.AddArg2(x, y)
13623 v.AddArg(v0)
13624 return true
13625 }
13626 }
13627 func rewriteValue_OpDiv8(v *ssa.Value) bool {
13628 v_1 := v.Args[1]
13629 v_0 := v.Args[0]
13630 b := v.Block
13631 typ := &b.Func.Config.Types
13632
13633
13634 for {
13635 x := v_0
13636 y := v_1
13637 v.Reset(ssaop.OpDiv32)
13638 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
13639 v0.AddArg(x)
13640 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
13641 v1.AddArg(y)
13642 v.AddArg2(v0, v1)
13643 return true
13644 }
13645 }
13646 func rewriteValue_OpDiv8u(v *ssa.Value) bool {
13647 v_1 := v.Args[1]
13648 v_0 := v.Args[0]
13649 b := v.Block
13650 typ := &b.Func.Config.Types
13651
13652
13653 for {
13654 x := v_0
13655 y := v_1
13656 v.Reset(ssaop.OpDiv32u)
13657 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13658 v0.AddArg(x)
13659 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13660 v1.AddArg(y)
13661 v.AddArg2(v0, v1)
13662 return true
13663 }
13664 }
13665 func rewriteValue_OpEq16(v *ssa.Value) bool {
13666 v_1 := v.Args[1]
13667 v_0 := v.Args[0]
13668 b := v.Block
13669 typ := &b.Func.Config.Types
13670
13671
13672 for {
13673 x := v_0
13674 y := v_1
13675 v.Reset(ssaop.OpARMEqual)
13676 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13677 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13678 v1.AddArg(x)
13679 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13680 v2.AddArg(y)
13681 v0.AddArg2(v1, v2)
13682 v.AddArg(v0)
13683 return true
13684 }
13685 }
13686 func rewriteValue_OpEq32(v *ssa.Value) bool {
13687 v_1 := v.Args[1]
13688 v_0 := v.Args[0]
13689 b := v.Block
13690
13691
13692 for {
13693 x := v_0
13694 y := v_1
13695 v.Reset(ssaop.OpARMEqual)
13696 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13697 v0.AddArg2(x, y)
13698 v.AddArg(v0)
13699 return true
13700 }
13701 }
13702 func rewriteValue_OpEq32F(v *ssa.Value) bool {
13703 v_1 := v.Args[1]
13704 v_0 := v.Args[0]
13705 b := v.Block
13706
13707
13708 for {
13709 x := v_0
13710 y := v_1
13711 v.Reset(ssaop.OpARMEqual)
13712 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPF, types.TypeFlags)
13713 v0.AddArg2(x, y)
13714 v.AddArg(v0)
13715 return true
13716 }
13717 }
13718 func rewriteValue_OpEq64F(v *ssa.Value) bool {
13719 v_1 := v.Args[1]
13720 v_0 := v.Args[0]
13721 b := v.Block
13722
13723
13724 for {
13725 x := v_0
13726 y := v_1
13727 v.Reset(ssaop.OpARMEqual)
13728 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPD, types.TypeFlags)
13729 v0.AddArg2(x, y)
13730 v.AddArg(v0)
13731 return true
13732 }
13733 }
13734 func rewriteValue_OpEq8(v *ssa.Value) bool {
13735 v_1 := v.Args[1]
13736 v_0 := v.Args[0]
13737 b := v.Block
13738 typ := &b.Func.Config.Types
13739
13740
13741 for {
13742 x := v_0
13743 y := v_1
13744 v.Reset(ssaop.OpARMEqual)
13745 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13746 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13747 v1.AddArg(x)
13748 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13749 v2.AddArg(y)
13750 v0.AddArg2(v1, v2)
13751 v.AddArg(v0)
13752 return true
13753 }
13754 }
13755 func rewriteValue_OpEqB(v *ssa.Value) bool {
13756 v_1 := v.Args[1]
13757 v_0 := v.Args[0]
13758 b := v.Block
13759 typ := &b.Func.Config.Types
13760
13761
13762 for {
13763 x := v_0
13764 y := v_1
13765 v.Reset(ssaop.OpARMXORconst)
13766 v.AuxInt = ssa.Int32ToAuxInt(1)
13767 v0 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.Bool)
13768 v0.AddArg2(x, y)
13769 v.AddArg(v0)
13770 return true
13771 }
13772 }
13773 func rewriteValue_OpEqPtr(v *ssa.Value) bool {
13774 v_1 := v.Args[1]
13775 v_0 := v.Args[0]
13776 b := v.Block
13777
13778
13779 for {
13780 x := v_0
13781 y := v_1
13782 v.Reset(ssaop.OpARMEqual)
13783 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13784 v0.AddArg2(x, y)
13785 v.AddArg(v0)
13786 return true
13787 }
13788 }
13789 func rewriteValue_OpFMA(v *ssa.Value) bool {
13790 v_2 := v.Args[2]
13791 v_1 := v.Args[1]
13792 v_0 := v.Args[0]
13793
13794
13795 for {
13796 x := v_0
13797 y := v_1
13798 z := v_2
13799 v.Reset(ssaop.OpARMFMULAD)
13800 v.AddArg3(z, x, y)
13801 return true
13802 }
13803 }
13804 func rewriteValue_OpIsInBounds(v *ssa.Value) bool {
13805 v_1 := v.Args[1]
13806 v_0 := v.Args[0]
13807 b := v.Block
13808
13809
13810 for {
13811 idx := v_0
13812 len := v_1
13813 v.Reset(ssaop.OpARMLessThanU)
13814 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13815 v0.AddArg2(idx, len)
13816 v.AddArg(v0)
13817 return true
13818 }
13819 }
13820 func rewriteValue_OpIsNonNil(v *ssa.Value) bool {
13821 v_0 := v.Args[0]
13822 b := v.Block
13823
13824
13825 for {
13826 ptr := v_0
13827 v.Reset(ssaop.OpARMNotEqual)
13828 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
13829 v0.AuxInt = ssa.Int32ToAuxInt(0)
13830 v0.AddArg(ptr)
13831 v.AddArg(v0)
13832 return true
13833 }
13834 }
13835 func rewriteValue_OpIsSliceInBounds(v *ssa.Value) bool {
13836 v_1 := v.Args[1]
13837 v_0 := v.Args[0]
13838 b := v.Block
13839
13840
13841 for {
13842 idx := v_0
13843 len := v_1
13844 v.Reset(ssaop.OpARMLessEqualU)
13845 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13846 v0.AddArg2(idx, len)
13847 v.AddArg(v0)
13848 return true
13849 }
13850 }
13851 func rewriteValue_OpLeq16(v *ssa.Value) bool {
13852 v_1 := v.Args[1]
13853 v_0 := v.Args[0]
13854 b := v.Block
13855 typ := &b.Func.Config.Types
13856
13857
13858 for {
13859 x := v_0
13860 y := v_1
13861 v.Reset(ssaop.OpARMLessEqual)
13862 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13863 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
13864 v1.AddArg(x)
13865 v2 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
13866 v2.AddArg(y)
13867 v0.AddArg2(v1, v2)
13868 v.AddArg(v0)
13869 return true
13870 }
13871 }
13872 func rewriteValue_OpLeq16U(v *ssa.Value) bool {
13873 v_1 := v.Args[1]
13874 v_0 := v.Args[0]
13875 b := v.Block
13876 typ := &b.Func.Config.Types
13877
13878
13879 for {
13880 x := v_0
13881 y := v_1
13882 v.Reset(ssaop.OpARMLessEqualU)
13883 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13884 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13885 v1.AddArg(x)
13886 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
13887 v2.AddArg(y)
13888 v0.AddArg2(v1, v2)
13889 v.AddArg(v0)
13890 return true
13891 }
13892 }
13893 func rewriteValue_OpLeq32(v *ssa.Value) bool {
13894 v_1 := v.Args[1]
13895 v_0 := v.Args[0]
13896 b := v.Block
13897
13898
13899 for {
13900 x := v_0
13901 y := v_1
13902 v.Reset(ssaop.OpARMLessEqual)
13903 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13904 v0.AddArg2(x, y)
13905 v.AddArg(v0)
13906 return true
13907 }
13908 }
13909 func rewriteValue_OpLeq32F(v *ssa.Value) bool {
13910 v_1 := v.Args[1]
13911 v_0 := v.Args[0]
13912 b := v.Block
13913
13914
13915 for {
13916 x := v_0
13917 y := v_1
13918 v.Reset(ssaop.OpARMGreaterEqual)
13919 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPF, types.TypeFlags)
13920 v0.AddArg2(y, x)
13921 v.AddArg(v0)
13922 return true
13923 }
13924 }
13925 func rewriteValue_OpLeq32U(v *ssa.Value) bool {
13926 v_1 := v.Args[1]
13927 v_0 := v.Args[0]
13928 b := v.Block
13929
13930
13931 for {
13932 x := v_0
13933 y := v_1
13934 v.Reset(ssaop.OpARMLessEqualU)
13935 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13936 v0.AddArg2(x, y)
13937 v.AddArg(v0)
13938 return true
13939 }
13940 }
13941 func rewriteValue_OpLeq64F(v *ssa.Value) bool {
13942 v_1 := v.Args[1]
13943 v_0 := v.Args[0]
13944 b := v.Block
13945
13946
13947 for {
13948 x := v_0
13949 y := v_1
13950 v.Reset(ssaop.OpARMGreaterEqual)
13951 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPD, types.TypeFlags)
13952 v0.AddArg2(y, x)
13953 v.AddArg(v0)
13954 return true
13955 }
13956 }
13957 func rewriteValue_OpLeq8(v *ssa.Value) bool {
13958 v_1 := v.Args[1]
13959 v_0 := v.Args[0]
13960 b := v.Block
13961 typ := &b.Func.Config.Types
13962
13963
13964 for {
13965 x := v_0
13966 y := v_1
13967 v.Reset(ssaop.OpARMLessEqual)
13968 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13969 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
13970 v1.AddArg(x)
13971 v2 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
13972 v2.AddArg(y)
13973 v0.AddArg2(v1, v2)
13974 v.AddArg(v0)
13975 return true
13976 }
13977 }
13978 func rewriteValue_OpLeq8U(v *ssa.Value) bool {
13979 v_1 := v.Args[1]
13980 v_0 := v.Args[0]
13981 b := v.Block
13982 typ := &b.Func.Config.Types
13983
13984
13985 for {
13986 x := v_0
13987 y := v_1
13988 v.Reset(ssaop.OpARMLessEqualU)
13989 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
13990 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13991 v1.AddArg(x)
13992 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
13993 v2.AddArg(y)
13994 v0.AddArg2(v1, v2)
13995 v.AddArg(v0)
13996 return true
13997 }
13998 }
13999 func rewriteValue_OpLess16(v *ssa.Value) bool {
14000 v_1 := v.Args[1]
14001 v_0 := v.Args[0]
14002 b := v.Block
14003 typ := &b.Func.Config.Types
14004
14005
14006 for {
14007 x := v_0
14008 y := v_1
14009 v.Reset(ssaop.OpARMLessThan)
14010 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14011 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
14012 v1.AddArg(x)
14013 v2 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
14014 v2.AddArg(y)
14015 v0.AddArg2(v1, v2)
14016 v.AddArg(v0)
14017 return true
14018 }
14019 }
14020 func rewriteValue_OpLess16U(v *ssa.Value) bool {
14021 v_1 := v.Args[1]
14022 v_0 := v.Args[0]
14023 b := v.Block
14024 typ := &b.Func.Config.Types
14025
14026
14027 for {
14028 x := v_0
14029 y := v_1
14030 v.Reset(ssaop.OpARMLessThanU)
14031 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14032 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14033 v1.AddArg(x)
14034 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14035 v2.AddArg(y)
14036 v0.AddArg2(v1, v2)
14037 v.AddArg(v0)
14038 return true
14039 }
14040 }
14041 func rewriteValue_OpLess32(v *ssa.Value) bool {
14042 v_1 := v.Args[1]
14043 v_0 := v.Args[0]
14044 b := v.Block
14045
14046
14047 for {
14048 x := v_0
14049 y := v_1
14050 v.Reset(ssaop.OpARMLessThan)
14051 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14052 v0.AddArg2(x, y)
14053 v.AddArg(v0)
14054 return true
14055 }
14056 }
14057 func rewriteValue_OpLess32F(v *ssa.Value) bool {
14058 v_1 := v.Args[1]
14059 v_0 := v.Args[0]
14060 b := v.Block
14061
14062
14063 for {
14064 x := v_0
14065 y := v_1
14066 v.Reset(ssaop.OpARMGreaterThan)
14067 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPF, types.TypeFlags)
14068 v0.AddArg2(y, x)
14069 v.AddArg(v0)
14070 return true
14071 }
14072 }
14073 func rewriteValue_OpLess32U(v *ssa.Value) bool {
14074 v_1 := v.Args[1]
14075 v_0 := v.Args[0]
14076 b := v.Block
14077
14078
14079 for {
14080 x := v_0
14081 y := v_1
14082 v.Reset(ssaop.OpARMLessThanU)
14083 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14084 v0.AddArg2(x, y)
14085 v.AddArg(v0)
14086 return true
14087 }
14088 }
14089 func rewriteValue_OpLess64F(v *ssa.Value) bool {
14090 v_1 := v.Args[1]
14091 v_0 := v.Args[0]
14092 b := v.Block
14093
14094
14095 for {
14096 x := v_0
14097 y := v_1
14098 v.Reset(ssaop.OpARMGreaterThan)
14099 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPD, types.TypeFlags)
14100 v0.AddArg2(y, x)
14101 v.AddArg(v0)
14102 return true
14103 }
14104 }
14105 func rewriteValue_OpLess8(v *ssa.Value) bool {
14106 v_1 := v.Args[1]
14107 v_0 := v.Args[0]
14108 b := v.Block
14109 typ := &b.Func.Config.Types
14110
14111
14112 for {
14113 x := v_0
14114 y := v_1
14115 v.Reset(ssaop.OpARMLessThan)
14116 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14117 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
14118 v1.AddArg(x)
14119 v2 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
14120 v2.AddArg(y)
14121 v0.AddArg2(v1, v2)
14122 v.AddArg(v0)
14123 return true
14124 }
14125 }
14126 func rewriteValue_OpLess8U(v *ssa.Value) bool {
14127 v_1 := v.Args[1]
14128 v_0 := v.Args[0]
14129 b := v.Block
14130 typ := &b.Func.Config.Types
14131
14132
14133 for {
14134 x := v_0
14135 y := v_1
14136 v.Reset(ssaop.OpARMLessThanU)
14137 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14138 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14139 v1.AddArg(x)
14140 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14141 v2.AddArg(y)
14142 v0.AddArg2(v1, v2)
14143 v.AddArg(v0)
14144 return true
14145 }
14146 }
14147 func rewriteValue_OpLoad(v *ssa.Value) bool {
14148 v_1 := v.Args[1]
14149 v_0 := v.Args[0]
14150
14151
14152
14153 for {
14154 t := v.Type
14155 ptr := v_0
14156 mem := v_1
14157 if !(t.IsBoolean()) {
14158 break
14159 }
14160 v.Reset(ssaop.OpARMMOVBUload)
14161 v.AddArg2(ptr, mem)
14162 return true
14163 }
14164
14165
14166
14167 for {
14168 t := v.Type
14169 ptr := v_0
14170 mem := v_1
14171 if !(ssa.Is8BitInt(t) && t.IsSigned()) {
14172 break
14173 }
14174 v.Reset(ssaop.OpARMMOVBload)
14175 v.AddArg2(ptr, mem)
14176 return true
14177 }
14178
14179
14180
14181 for {
14182 t := v.Type
14183 ptr := v_0
14184 mem := v_1
14185 if !(ssa.Is8BitInt(t) && !t.IsSigned()) {
14186 break
14187 }
14188 v.Reset(ssaop.OpARMMOVBUload)
14189 v.AddArg2(ptr, mem)
14190 return true
14191 }
14192
14193
14194
14195 for {
14196 t := v.Type
14197 ptr := v_0
14198 mem := v_1
14199 if !(ssa.Is16BitInt(t) && t.IsSigned()) {
14200 break
14201 }
14202 v.Reset(ssaop.OpARMMOVHload)
14203 v.AddArg2(ptr, mem)
14204 return true
14205 }
14206
14207
14208
14209 for {
14210 t := v.Type
14211 ptr := v_0
14212 mem := v_1
14213 if !(ssa.Is16BitInt(t) && !t.IsSigned()) {
14214 break
14215 }
14216 v.Reset(ssaop.OpARMMOVHUload)
14217 v.AddArg2(ptr, mem)
14218 return true
14219 }
14220
14221
14222
14223 for {
14224 t := v.Type
14225 ptr := v_0
14226 mem := v_1
14227 if !(ssa.Is32BitInt(t) || ssa.IsPtr(t)) {
14228 break
14229 }
14230 v.Reset(ssaop.OpARMMOVWload)
14231 v.AddArg2(ptr, mem)
14232 return true
14233 }
14234
14235
14236
14237 for {
14238 t := v.Type
14239 ptr := v_0
14240 mem := v_1
14241 if !(ssa.Is32BitFloat(t)) {
14242 break
14243 }
14244 v.Reset(ssaop.OpARMMOVFload)
14245 v.AddArg2(ptr, mem)
14246 return true
14247 }
14248
14249
14250
14251 for {
14252 t := v.Type
14253 ptr := v_0
14254 mem := v_1
14255 if !(ssa.Is64BitFloat(t)) {
14256 break
14257 }
14258 v.Reset(ssaop.OpARMMOVDload)
14259 v.AddArg2(ptr, mem)
14260 return true
14261 }
14262 return false
14263 }
14264 func rewriteValue_OpLocalAddr(v *ssa.Value) bool {
14265 v_1 := v.Args[1]
14266 v_0 := v.Args[0]
14267 b := v.Block
14268 typ := &b.Func.Config.Types
14269
14270
14271
14272 for {
14273 t := v.Type
14274 sym := ssa.AuxToSym(v.Aux)
14275 base := v_0
14276 mem := v_1
14277 if !(t.Elem().HasPointers()) {
14278 break
14279 }
14280 v.Reset(ssaop.OpARMMOVWaddr)
14281 v.Aux = ssa.SymToAux(sym)
14282 v0 := b.NewValue0(v.Pos, ssaop.OpSPanchored, typ.Uintptr)
14283 v0.AddArg2(base, mem)
14284 v.AddArg(v0)
14285 return true
14286 }
14287
14288
14289
14290 for {
14291 t := v.Type
14292 sym := ssa.AuxToSym(v.Aux)
14293 base := v_0
14294 if !(!t.Elem().HasPointers()) {
14295 break
14296 }
14297 v.Reset(ssaop.OpARMMOVWaddr)
14298 v.Aux = ssa.SymToAux(sym)
14299 v.AddArg(base)
14300 return true
14301 }
14302 return false
14303 }
14304 func rewriteValue_OpLsh16x16(v *ssa.Value) bool {
14305 v_1 := v.Args[1]
14306 v_0 := v.Args[0]
14307 b := v.Block
14308 typ := &b.Func.Config.Types
14309
14310
14311 for {
14312 x := v_0
14313 y := v_1
14314 v.Reset(ssaop.OpARMCMOVWHSconst)
14315 v.AuxInt = ssa.Int32ToAuxInt(0)
14316 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14317 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14318 v1.AddArg(y)
14319 v0.AddArg2(x, v1)
14320 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14321 v2.AuxInt = ssa.Int32ToAuxInt(256)
14322 v2.AddArg(v1)
14323 v.AddArg2(v0, v2)
14324 return true
14325 }
14326 }
14327 func rewriteValue_OpLsh16x32(v *ssa.Value) bool {
14328 v_1 := v.Args[1]
14329 v_0 := v.Args[0]
14330 b := v.Block
14331
14332
14333 for {
14334 x := v_0
14335 y := v_1
14336 v.Reset(ssaop.OpARMCMOVWHSconst)
14337 v.AuxInt = ssa.Int32ToAuxInt(0)
14338 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14339 v0.AddArg2(x, y)
14340 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14341 v1.AuxInt = ssa.Int32ToAuxInt(256)
14342 v1.AddArg(y)
14343 v.AddArg2(v0, v1)
14344 return true
14345 }
14346 }
14347 func rewriteValue_OpLsh16x64(v *ssa.Value) bool {
14348 v_1 := v.Args[1]
14349 v_0 := v.Args[0]
14350
14351
14352
14353 for {
14354 x := v_0
14355 if v_1.Op != ssaop.OpConst64 {
14356 break
14357 }
14358 c := ssa.AuxIntToInt64(v_1.AuxInt)
14359 if !(uint64(c) < 16) {
14360 break
14361 }
14362 v.Reset(ssaop.OpARMSLLconst)
14363 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
14364 v.AddArg(x)
14365 return true
14366 }
14367
14368
14369
14370 for {
14371 if v_1.Op != ssaop.OpConst64 {
14372 break
14373 }
14374 c := ssa.AuxIntToInt64(v_1.AuxInt)
14375 if !(uint64(c) >= 16) {
14376 break
14377 }
14378 v.Reset(ssaop.OpConst16)
14379 v.AuxInt = ssa.Int16ToAuxInt(0)
14380 return true
14381 }
14382 return false
14383 }
14384 func rewriteValue_OpLsh16x8(v *ssa.Value) bool {
14385 v_1 := v.Args[1]
14386 v_0 := v.Args[0]
14387 b := v.Block
14388 typ := &b.Func.Config.Types
14389
14390
14391 for {
14392 x := v_0
14393 y := v_1
14394 v.Reset(ssaop.OpARMSLL)
14395 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14396 v0.AddArg(y)
14397 v.AddArg2(x, v0)
14398 return true
14399 }
14400 }
14401 func rewriteValue_OpLsh32x16(v *ssa.Value) bool {
14402 v_1 := v.Args[1]
14403 v_0 := v.Args[0]
14404 b := v.Block
14405 typ := &b.Func.Config.Types
14406
14407
14408 for {
14409 x := v_0
14410 y := v_1
14411 v.Reset(ssaop.OpARMCMOVWHSconst)
14412 v.AuxInt = ssa.Int32ToAuxInt(0)
14413 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14414 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14415 v1.AddArg(y)
14416 v0.AddArg2(x, v1)
14417 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14418 v2.AuxInt = ssa.Int32ToAuxInt(256)
14419 v2.AddArg(v1)
14420 v.AddArg2(v0, v2)
14421 return true
14422 }
14423 }
14424 func rewriteValue_OpLsh32x32(v *ssa.Value) bool {
14425 v_1 := v.Args[1]
14426 v_0 := v.Args[0]
14427 b := v.Block
14428
14429
14430 for {
14431 x := v_0
14432 y := v_1
14433 v.Reset(ssaop.OpARMCMOVWHSconst)
14434 v.AuxInt = ssa.Int32ToAuxInt(0)
14435 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14436 v0.AddArg2(x, y)
14437 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14438 v1.AuxInt = ssa.Int32ToAuxInt(256)
14439 v1.AddArg(y)
14440 v.AddArg2(v0, v1)
14441 return true
14442 }
14443 }
14444 func rewriteValue_OpLsh32x64(v *ssa.Value) bool {
14445 v_1 := v.Args[1]
14446 v_0 := v.Args[0]
14447
14448
14449
14450 for {
14451 x := v_0
14452 if v_1.Op != ssaop.OpConst64 {
14453 break
14454 }
14455 c := ssa.AuxIntToInt64(v_1.AuxInt)
14456 if !(uint64(c) < 32) {
14457 break
14458 }
14459 v.Reset(ssaop.OpARMSLLconst)
14460 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
14461 v.AddArg(x)
14462 return true
14463 }
14464
14465
14466
14467 for {
14468 if v_1.Op != ssaop.OpConst64 {
14469 break
14470 }
14471 c := ssa.AuxIntToInt64(v_1.AuxInt)
14472 if !(uint64(c) >= 32) {
14473 break
14474 }
14475 v.Reset(ssaop.OpConst32)
14476 v.AuxInt = ssa.Int32ToAuxInt(0)
14477 return true
14478 }
14479 return false
14480 }
14481 func rewriteValue_OpLsh32x8(v *ssa.Value) bool {
14482 v_1 := v.Args[1]
14483 v_0 := v.Args[0]
14484 b := v.Block
14485 typ := &b.Func.Config.Types
14486
14487
14488 for {
14489 x := v_0
14490 y := v_1
14491 v.Reset(ssaop.OpARMSLL)
14492 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14493 v0.AddArg(y)
14494 v.AddArg2(x, v0)
14495 return true
14496 }
14497 }
14498 func rewriteValue_OpLsh8x16(v *ssa.Value) bool {
14499 v_1 := v.Args[1]
14500 v_0 := v.Args[0]
14501 b := v.Block
14502 typ := &b.Func.Config.Types
14503
14504
14505 for {
14506 x := v_0
14507 y := v_1
14508 v.Reset(ssaop.OpARMCMOVWHSconst)
14509 v.AuxInt = ssa.Int32ToAuxInt(0)
14510 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14511 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14512 v1.AddArg(y)
14513 v0.AddArg2(x, v1)
14514 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14515 v2.AuxInt = ssa.Int32ToAuxInt(256)
14516 v2.AddArg(v1)
14517 v.AddArg2(v0, v2)
14518 return true
14519 }
14520 }
14521 func rewriteValue_OpLsh8x32(v *ssa.Value) bool {
14522 v_1 := v.Args[1]
14523 v_0 := v.Args[0]
14524 b := v.Block
14525
14526
14527 for {
14528 x := v_0
14529 y := v_1
14530 v.Reset(ssaop.OpARMCMOVWHSconst)
14531 v.AuxInt = ssa.Int32ToAuxInt(0)
14532 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLL, x.Type)
14533 v0.AddArg2(x, y)
14534 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
14535 v1.AuxInt = ssa.Int32ToAuxInt(256)
14536 v1.AddArg(y)
14537 v.AddArg2(v0, v1)
14538 return true
14539 }
14540 }
14541 func rewriteValue_OpLsh8x64(v *ssa.Value) bool {
14542 v_1 := v.Args[1]
14543 v_0 := v.Args[0]
14544
14545
14546
14547 for {
14548 x := v_0
14549 if v_1.Op != ssaop.OpConst64 {
14550 break
14551 }
14552 c := ssa.AuxIntToInt64(v_1.AuxInt)
14553 if !(uint64(c) < 8) {
14554 break
14555 }
14556 v.Reset(ssaop.OpARMSLLconst)
14557 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
14558 v.AddArg(x)
14559 return true
14560 }
14561
14562
14563
14564 for {
14565 if v_1.Op != ssaop.OpConst64 {
14566 break
14567 }
14568 c := ssa.AuxIntToInt64(v_1.AuxInt)
14569 if !(uint64(c) >= 8) {
14570 break
14571 }
14572 v.Reset(ssaop.OpConst8)
14573 v.AuxInt = ssa.Int8ToAuxInt(0)
14574 return true
14575 }
14576 return false
14577 }
14578 func rewriteValue_OpLsh8x8(v *ssa.Value) bool {
14579 v_1 := v.Args[1]
14580 v_0 := v.Args[0]
14581 b := v.Block
14582 typ := &b.Func.Config.Types
14583
14584
14585 for {
14586 x := v_0
14587 y := v_1
14588 v.Reset(ssaop.OpARMSLL)
14589 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14590 v0.AddArg(y)
14591 v.AddArg2(x, v0)
14592 return true
14593 }
14594 }
14595 func rewriteValue_OpMod16(v *ssa.Value) bool {
14596 v_1 := v.Args[1]
14597 v_0 := v.Args[0]
14598 b := v.Block
14599 typ := &b.Func.Config.Types
14600
14601
14602 for {
14603 x := v_0
14604 y := v_1
14605 v.Reset(ssaop.OpMod32)
14606 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
14607 v0.AddArg(x)
14608 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
14609 v1.AddArg(y)
14610 v.AddArg2(v0, v1)
14611 return true
14612 }
14613 }
14614 func rewriteValue_OpMod16u(v *ssa.Value) bool {
14615 v_1 := v.Args[1]
14616 v_0 := v.Args[0]
14617 b := v.Block
14618 typ := &b.Func.Config.Types
14619
14620
14621 for {
14622 x := v_0
14623 y := v_1
14624 v.Reset(ssaop.OpMod32u)
14625 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14626 v0.AddArg(x)
14627 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14628 v1.AddArg(y)
14629 v.AddArg2(v0, v1)
14630 return true
14631 }
14632 }
14633 func rewriteValue_OpMod32(v *ssa.Value) bool {
14634 v_1 := v.Args[1]
14635 v_0 := v.Args[0]
14636 b := v.Block
14637 typ := &b.Func.Config.Types
14638
14639
14640 for {
14641 x := v_0
14642 y := v_1
14643 v.Reset(ssaop.OpARMSUB)
14644 v0 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
14645 v1 := b.NewValue0(v.Pos, ssaop.OpSelect1, typ.UInt32)
14646 v2 := b.NewValue0(v.Pos, ssaop.OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14647 v3 := b.NewValue0(v.Pos, ssaop.OpARMSUB, typ.UInt32)
14648 v4 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
14649 v5 := b.NewValue0(v.Pos, ssaop.OpSignmask, typ.Int32)
14650 v5.AddArg(x)
14651 v4.AddArg2(x, v5)
14652 v3.AddArg2(v4, v5)
14653 v6 := b.NewValue0(v.Pos, ssaop.OpARMSUB, typ.UInt32)
14654 v7 := b.NewValue0(v.Pos, ssaop.OpARMXOR, typ.UInt32)
14655 v8 := b.NewValue0(v.Pos, ssaop.OpSignmask, typ.Int32)
14656 v8.AddArg(y)
14657 v7.AddArg2(y, v8)
14658 v6.AddArg2(v7, v8)
14659 v2.AddArg2(v3, v6)
14660 v1.AddArg(v2)
14661 v0.AddArg2(v1, v5)
14662 v.AddArg2(v0, v5)
14663 return true
14664 }
14665 }
14666 func rewriteValue_OpMod32u(v *ssa.Value) bool {
14667 v_1 := v.Args[1]
14668 v_0 := v.Args[0]
14669 b := v.Block
14670 typ := &b.Func.Config.Types
14671
14672
14673 for {
14674 x := v_0
14675 y := v_1
14676 v.Reset(ssaop.OpSelect1)
14677 v.Type = typ.UInt32
14678 v0 := b.NewValue0(v.Pos, ssaop.OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14679 v0.AddArg2(x, y)
14680 v.AddArg(v0)
14681 return true
14682 }
14683 }
14684 func rewriteValue_OpMod8(v *ssa.Value) bool {
14685 v_1 := v.Args[1]
14686 v_0 := v.Args[0]
14687 b := v.Block
14688 typ := &b.Func.Config.Types
14689
14690
14691 for {
14692 x := v_0
14693 y := v_1
14694 v.Reset(ssaop.OpMod32)
14695 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
14696 v0.AddArg(x)
14697 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
14698 v1.AddArg(y)
14699 v.AddArg2(v0, v1)
14700 return true
14701 }
14702 }
14703 func rewriteValue_OpMod8u(v *ssa.Value) bool {
14704 v_1 := v.Args[1]
14705 v_0 := v.Args[0]
14706 b := v.Block
14707 typ := &b.Func.Config.Types
14708
14709
14710 for {
14711 x := v_0
14712 y := v_1
14713 v.Reset(ssaop.OpMod32u)
14714 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14715 v0.AddArg(x)
14716 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
14717 v1.AddArg(y)
14718 v.AddArg2(v0, v1)
14719 return true
14720 }
14721 }
14722 func rewriteValue_OpMove(v *ssa.Value) bool {
14723 v_2 := v.Args[2]
14724 v_1 := v.Args[1]
14725 v_0 := v.Args[0]
14726 b := v.Block
14727 config := b.Func.Config
14728 typ := &b.Func.Config.Types
14729
14730
14731 for {
14732 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
14733 break
14734 }
14735 mem := v_2
14736 v.CopyOf(mem)
14737 return true
14738 }
14739
14740
14741 for {
14742 if ssa.AuxIntToInt64(v.AuxInt) != 1 {
14743 break
14744 }
14745 dst := v_0
14746 src := v_1
14747 mem := v_2
14748 v.Reset(ssaop.OpARMMOVBstore)
14749 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14750 v0.AddArg2(src, mem)
14751 v.AddArg3(dst, v0, mem)
14752 return true
14753 }
14754
14755
14756
14757 for {
14758 if ssa.AuxIntToInt64(v.AuxInt) != 2 {
14759 break
14760 }
14761 t := ssa.AuxToType(v.Aux)
14762 dst := v_0
14763 src := v_1
14764 mem := v_2
14765 if !(t.Alignment()%2 == 0) {
14766 break
14767 }
14768 v.Reset(ssaop.OpARMMOVHstore)
14769 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVHUload, typ.UInt16)
14770 v0.AddArg2(src, mem)
14771 v.AddArg3(dst, v0, mem)
14772 return true
14773 }
14774
14775
14776 for {
14777 if ssa.AuxIntToInt64(v.AuxInt) != 2 {
14778 break
14779 }
14780 dst := v_0
14781 src := v_1
14782 mem := v_2
14783 v.Reset(ssaop.OpARMMOVBstore)
14784 v.AuxInt = ssa.Int32ToAuxInt(1)
14785 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14786 v0.AuxInt = ssa.Int32ToAuxInt(1)
14787 v0.AddArg2(src, mem)
14788 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14789 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14790 v2.AddArg2(src, mem)
14791 v1.AddArg3(dst, v2, mem)
14792 v.AddArg3(dst, v0, v1)
14793 return true
14794 }
14795
14796
14797
14798 for {
14799 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
14800 break
14801 }
14802 t := ssa.AuxToType(v.Aux)
14803 dst := v_0
14804 src := v_1
14805 mem := v_2
14806 if !(t.Alignment()%4 == 0) {
14807 break
14808 }
14809 v.Reset(ssaop.OpARMMOVWstore)
14810 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWload, typ.UInt32)
14811 v0.AddArg2(src, mem)
14812 v.AddArg3(dst, v0, mem)
14813 return true
14814 }
14815
14816
14817
14818 for {
14819 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
14820 break
14821 }
14822 t := ssa.AuxToType(v.Aux)
14823 dst := v_0
14824 src := v_1
14825 mem := v_2
14826 if !(t.Alignment()%2 == 0) {
14827 break
14828 }
14829 v.Reset(ssaop.OpARMMOVHstore)
14830 v.AuxInt = ssa.Int32ToAuxInt(2)
14831 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVHUload, typ.UInt16)
14832 v0.AuxInt = ssa.Int32ToAuxInt(2)
14833 v0.AddArg2(src, mem)
14834 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVHstore, types.TypeMem)
14835 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVHUload, typ.UInt16)
14836 v2.AddArg2(src, mem)
14837 v1.AddArg3(dst, v2, mem)
14838 v.AddArg3(dst, v0, v1)
14839 return true
14840 }
14841
14842
14843 for {
14844 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
14845 break
14846 }
14847 dst := v_0
14848 src := v_1
14849 mem := v_2
14850 v.Reset(ssaop.OpARMMOVBstore)
14851 v.AuxInt = ssa.Int32ToAuxInt(3)
14852 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14853 v0.AuxInt = ssa.Int32ToAuxInt(3)
14854 v0.AddArg2(src, mem)
14855 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14856 v1.AuxInt = ssa.Int32ToAuxInt(2)
14857 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14858 v2.AuxInt = ssa.Int32ToAuxInt(2)
14859 v2.AddArg2(src, mem)
14860 v3 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14861 v3.AuxInt = ssa.Int32ToAuxInt(1)
14862 v4 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14863 v4.AuxInt = ssa.Int32ToAuxInt(1)
14864 v4.AddArg2(src, mem)
14865 v5 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14866 v6 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14867 v6.AddArg2(src, mem)
14868 v5.AddArg3(dst, v6, mem)
14869 v3.AddArg3(dst, v4, v5)
14870 v1.AddArg3(dst, v2, v3)
14871 v.AddArg3(dst, v0, v1)
14872 return true
14873 }
14874
14875
14876 for {
14877 if ssa.AuxIntToInt64(v.AuxInt) != 3 {
14878 break
14879 }
14880 dst := v_0
14881 src := v_1
14882 mem := v_2
14883 v.Reset(ssaop.OpARMMOVBstore)
14884 v.AuxInt = ssa.Int32ToAuxInt(2)
14885 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14886 v0.AuxInt = ssa.Int32ToAuxInt(2)
14887 v0.AddArg2(src, mem)
14888 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14889 v1.AuxInt = ssa.Int32ToAuxInt(1)
14890 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14891 v2.AuxInt = ssa.Int32ToAuxInt(1)
14892 v2.AddArg2(src, mem)
14893 v3 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
14894 v4 := b.NewValue0(v.Pos, ssaop.OpARMMOVBUload, typ.UInt8)
14895 v4.AddArg2(src, mem)
14896 v3.AddArg3(dst, v4, mem)
14897 v1.AddArg3(dst, v2, v3)
14898 v.AddArg3(dst, v0, v1)
14899 return true
14900 }
14901
14902
14903
14904 for {
14905 s := ssa.AuxIntToInt64(v.AuxInt)
14906 t := ssa.AuxToType(v.Aux)
14907 dst := v_0
14908 src := v_1
14909 mem := v_2
14910 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0 && ssa.LogLargeCopyValue(v, s)) {
14911 break
14912 }
14913 v.Reset(ssaop.OpARMDUFFCOPY)
14914 v.AuxInt = ssa.Int64ToAuxInt(8 * (128 - s/4))
14915 v.AddArg3(dst, src, mem)
14916 return true
14917 }
14918
14919
14920
14921 for {
14922 s := ssa.AuxIntToInt64(v.AuxInt)
14923 t := ssa.AuxToType(v.Aux)
14924 dst := v_0
14925 src := v_1
14926 mem := v_2
14927 if !((s > 512 || t.Alignment()%4 != 0) && ssa.LogLargeCopyValue(v, s)) {
14928 break
14929 }
14930 v.Reset(ssaop.OpARMLoweredMove)
14931 v.AuxInt = ssa.Int64ToAuxInt(t.Alignment())
14932 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDconst, src.Type)
14933 v0.AuxInt = ssa.Int32ToAuxInt(int32(s - ssa.MoveSize(t.Alignment(), config)))
14934 v0.AddArg(src)
14935 v.AddArg4(dst, src, v0, mem)
14936 return true
14937 }
14938 return false
14939 }
14940 func rewriteValue_OpNeg16(v *ssa.Value) bool {
14941 v_0 := v.Args[0]
14942
14943
14944 for {
14945 x := v_0
14946 v.Reset(ssaop.OpARMRSBconst)
14947 v.AuxInt = ssa.Int32ToAuxInt(0)
14948 v.AddArg(x)
14949 return true
14950 }
14951 }
14952 func rewriteValue_OpNeg32(v *ssa.Value) bool {
14953 v_0 := v.Args[0]
14954
14955
14956 for {
14957 x := v_0
14958 v.Reset(ssaop.OpARMRSBconst)
14959 v.AuxInt = ssa.Int32ToAuxInt(0)
14960 v.AddArg(x)
14961 return true
14962 }
14963 }
14964 func rewriteValue_OpNeg8(v *ssa.Value) bool {
14965 v_0 := v.Args[0]
14966
14967
14968 for {
14969 x := v_0
14970 v.Reset(ssaop.OpARMRSBconst)
14971 v.AuxInt = ssa.Int32ToAuxInt(0)
14972 v.AddArg(x)
14973 return true
14974 }
14975 }
14976 func rewriteValue_OpNeq16(v *ssa.Value) bool {
14977 v_1 := v.Args[1]
14978 v_0 := v.Args[0]
14979 b := v.Block
14980 typ := &b.Func.Config.Types
14981
14982
14983 for {
14984 x := v_0
14985 y := v_1
14986 v.Reset(ssaop.OpARMNotEqual)
14987 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
14988 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14989 v1.AddArg(x)
14990 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
14991 v2.AddArg(y)
14992 v0.AddArg2(v1, v2)
14993 v.AddArg(v0)
14994 return true
14995 }
14996 }
14997 func rewriteValue_OpNeq32(v *ssa.Value) bool {
14998 v_1 := v.Args[1]
14999 v_0 := v.Args[0]
15000 b := v.Block
15001
15002
15003 for {
15004 x := v_0
15005 y := v_1
15006 v.Reset(ssaop.OpARMNotEqual)
15007 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
15008 v0.AddArg2(x, y)
15009 v.AddArg(v0)
15010 return true
15011 }
15012 }
15013 func rewriteValue_OpNeq32F(v *ssa.Value) bool {
15014 v_1 := v.Args[1]
15015 v_0 := v.Args[0]
15016 b := v.Block
15017
15018
15019 for {
15020 x := v_0
15021 y := v_1
15022 v.Reset(ssaop.OpARMNotEqual)
15023 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPF, types.TypeFlags)
15024 v0.AddArg2(x, y)
15025 v.AddArg(v0)
15026 return true
15027 }
15028 }
15029 func rewriteValue_OpNeq64F(v *ssa.Value) bool {
15030 v_1 := v.Args[1]
15031 v_0 := v.Args[0]
15032 b := v.Block
15033
15034
15035 for {
15036 x := v_0
15037 y := v_1
15038 v.Reset(ssaop.OpARMNotEqual)
15039 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPD, types.TypeFlags)
15040 v0.AddArg2(x, y)
15041 v.AddArg(v0)
15042 return true
15043 }
15044 }
15045 func rewriteValue_OpNeq8(v *ssa.Value) bool {
15046 v_1 := v.Args[1]
15047 v_0 := v.Args[0]
15048 b := v.Block
15049 typ := &b.Func.Config.Types
15050
15051
15052 for {
15053 x := v_0
15054 y := v_1
15055 v.Reset(ssaop.OpARMNotEqual)
15056 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
15057 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15058 v1.AddArg(x)
15059 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15060 v2.AddArg(y)
15061 v0.AddArg2(v1, v2)
15062 v.AddArg(v0)
15063 return true
15064 }
15065 }
15066 func rewriteValue_OpNeqPtr(v *ssa.Value) bool {
15067 v_1 := v.Args[1]
15068 v_0 := v.Args[0]
15069 b := v.Block
15070
15071
15072 for {
15073 x := v_0
15074 y := v_1
15075 v.Reset(ssaop.OpARMNotEqual)
15076 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMP, types.TypeFlags)
15077 v0.AddArg2(x, y)
15078 v.AddArg(v0)
15079 return true
15080 }
15081 }
15082 func rewriteValue_OpNot(v *ssa.Value) bool {
15083 v_0 := v.Args[0]
15084
15085
15086 for {
15087 x := v_0
15088 v.Reset(ssaop.OpARMXORconst)
15089 v.AuxInt = ssa.Int32ToAuxInt(1)
15090 v.AddArg(x)
15091 return true
15092 }
15093 }
15094 func rewriteValue_OpOffPtr(v *ssa.Value) bool {
15095 v_0 := v.Args[0]
15096
15097
15098 for {
15099 off := ssa.AuxIntToInt64(v.AuxInt)
15100 ptr := v_0
15101 if ptr.Op != ssaop.OpSP {
15102 break
15103 }
15104 v.Reset(ssaop.OpARMMOVWaddr)
15105 v.AuxInt = ssa.Int32ToAuxInt(int32(off))
15106 v.AddArg(ptr)
15107 return true
15108 }
15109
15110
15111 for {
15112 off := ssa.AuxIntToInt64(v.AuxInt)
15113 ptr := v_0
15114 v.Reset(ssaop.OpARMADDconst)
15115 v.AuxInt = ssa.Int32ToAuxInt(int32(off))
15116 v.AddArg(ptr)
15117 return true
15118 }
15119 }
15120 func rewriteValue_OpRotateLeft16(v *ssa.Value) bool {
15121 v_1 := v.Args[1]
15122 v_0 := v.Args[0]
15123 b := v.Block
15124 typ := &b.Func.Config.Types
15125
15126
15127 for {
15128 t := v.Type
15129 x := v_0
15130 if v_1.Op != ssaop.OpARMMOVWconst {
15131 break
15132 }
15133 c := ssa.AuxIntToInt32(v_1.AuxInt)
15134 v.Reset(ssaop.OpOr16)
15135 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x32, t)
15136 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
15137 v1.AuxInt = ssa.Int32ToAuxInt(c & 15)
15138 v0.AddArg2(x, v1)
15139 v2 := b.NewValue0(v.Pos, ssaop.OpRsh16Ux32, t)
15140 v3 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
15141 v3.AuxInt = ssa.Int32ToAuxInt(-c & 15)
15142 v2.AddArg2(x, v3)
15143 v.AddArg2(v0, v2)
15144 return true
15145 }
15146 return false
15147 }
15148 func rewriteValue_OpRotateLeft32(v *ssa.Value) bool {
15149 v_1 := v.Args[1]
15150 v_0 := v.Args[0]
15151 b := v.Block
15152
15153
15154 for {
15155 x := v_0
15156 y := v_1
15157 v.Reset(ssaop.OpARMSRR)
15158 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBconst, y.Type)
15159 v0.AuxInt = ssa.Int32ToAuxInt(0)
15160 v0.AddArg(y)
15161 v.AddArg2(x, v0)
15162 return true
15163 }
15164 }
15165 func rewriteValue_OpRotateLeft8(v *ssa.Value) bool {
15166 v_1 := v.Args[1]
15167 v_0 := v.Args[0]
15168 b := v.Block
15169 typ := &b.Func.Config.Types
15170
15171
15172 for {
15173 t := v.Type
15174 x := v_0
15175 if v_1.Op != ssaop.OpARMMOVWconst {
15176 break
15177 }
15178 c := ssa.AuxIntToInt32(v_1.AuxInt)
15179 v.Reset(ssaop.OpOr8)
15180 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x32, t)
15181 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
15182 v1.AuxInt = ssa.Int32ToAuxInt(c & 7)
15183 v0.AddArg2(x, v1)
15184 v2 := b.NewValue0(v.Pos, ssaop.OpRsh8Ux32, t)
15185 v3 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
15186 v3.AuxInt = ssa.Int32ToAuxInt(-c & 7)
15187 v2.AddArg2(x, v3)
15188 v.AddArg2(v0, v2)
15189 return true
15190 }
15191 return false
15192 }
15193 func rewriteValue_OpRsh16Ux16(v *ssa.Value) bool {
15194 v_1 := v.Args[1]
15195 v_0 := v.Args[0]
15196 b := v.Block
15197 typ := &b.Func.Config.Types
15198
15199
15200 for {
15201 x := v_0
15202 y := v_1
15203 v.Reset(ssaop.OpARMCMOVWHSconst)
15204 v.AuxInt = ssa.Int32ToAuxInt(0)
15205 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15206 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15207 v1.AddArg(x)
15208 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15209 v2.AddArg(y)
15210 v0.AddArg2(v1, v2)
15211 v3 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15212 v3.AuxInt = ssa.Int32ToAuxInt(256)
15213 v3.AddArg(v2)
15214 v.AddArg2(v0, v3)
15215 return true
15216 }
15217 }
15218 func rewriteValue_OpRsh16Ux32(v *ssa.Value) bool {
15219 v_1 := v.Args[1]
15220 v_0 := v.Args[0]
15221 b := v.Block
15222 typ := &b.Func.Config.Types
15223
15224
15225 for {
15226 x := v_0
15227 y := v_1
15228 v.Reset(ssaop.OpARMCMOVWHSconst)
15229 v.AuxInt = ssa.Int32ToAuxInt(0)
15230 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15231 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15232 v1.AddArg(x)
15233 v0.AddArg2(v1, y)
15234 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15235 v2.AuxInt = ssa.Int32ToAuxInt(256)
15236 v2.AddArg(y)
15237 v.AddArg2(v0, v2)
15238 return true
15239 }
15240 }
15241 func rewriteValue_OpRsh16Ux64(v *ssa.Value) bool {
15242 v_1 := v.Args[1]
15243 v_0 := v.Args[0]
15244 b := v.Block
15245 typ := &b.Func.Config.Types
15246
15247
15248
15249 for {
15250 x := v_0
15251 if v_1.Op != ssaop.OpConst64 {
15252 break
15253 }
15254 c := ssa.AuxIntToInt64(v_1.AuxInt)
15255 if !(uint64(c) < 16) {
15256 break
15257 }
15258 v.Reset(ssaop.OpARMSRLconst)
15259 v.AuxInt = ssa.Int32ToAuxInt(int32(c + 16))
15260 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15261 v0.AuxInt = ssa.Int32ToAuxInt(16)
15262 v0.AddArg(x)
15263 v.AddArg(v0)
15264 return true
15265 }
15266
15267
15268
15269 for {
15270 if v_1.Op != ssaop.OpConst64 {
15271 break
15272 }
15273 c := ssa.AuxIntToInt64(v_1.AuxInt)
15274 if !(uint64(c) >= 16) {
15275 break
15276 }
15277 v.Reset(ssaop.OpConst16)
15278 v.AuxInt = ssa.Int16ToAuxInt(0)
15279 return true
15280 }
15281 return false
15282 }
15283 func rewriteValue_OpRsh16Ux8(v *ssa.Value) bool {
15284 v_1 := v.Args[1]
15285 v_0 := v.Args[0]
15286 b := v.Block
15287 typ := &b.Func.Config.Types
15288
15289
15290 for {
15291 x := v_0
15292 y := v_1
15293 v.Reset(ssaop.OpARMSRL)
15294 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15295 v0.AddArg(x)
15296 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15297 v1.AddArg(y)
15298 v.AddArg2(v0, v1)
15299 return true
15300 }
15301 }
15302 func rewriteValue_OpRsh16x16(v *ssa.Value) bool {
15303 v_1 := v.Args[1]
15304 v_0 := v.Args[0]
15305 b := v.Block
15306 typ := &b.Func.Config.Types
15307
15308
15309 for {
15310 x := v_0
15311 y := v_1
15312 v.Reset(ssaop.OpARMSRAcond)
15313 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
15314 v0.AddArg(x)
15315 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15316 v1.AddArg(y)
15317 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15318 v2.AuxInt = ssa.Int32ToAuxInt(256)
15319 v2.AddArg(v1)
15320 v.AddArg3(v0, v1, v2)
15321 return true
15322 }
15323 }
15324 func rewriteValue_OpRsh16x32(v *ssa.Value) bool {
15325 v_1 := v.Args[1]
15326 v_0 := v.Args[0]
15327 b := v.Block
15328 typ := &b.Func.Config.Types
15329
15330
15331 for {
15332 x := v_0
15333 y := v_1
15334 v.Reset(ssaop.OpARMSRAcond)
15335 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
15336 v0.AddArg(x)
15337 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15338 v1.AuxInt = ssa.Int32ToAuxInt(256)
15339 v1.AddArg(y)
15340 v.AddArg3(v0, y, v1)
15341 return true
15342 }
15343 }
15344 func rewriteValue_OpRsh16x64(v *ssa.Value) bool {
15345 v_1 := v.Args[1]
15346 v_0 := v.Args[0]
15347 b := v.Block
15348 typ := &b.Func.Config.Types
15349
15350
15351
15352 for {
15353 x := v_0
15354 if v_1.Op != ssaop.OpConst64 {
15355 break
15356 }
15357 c := ssa.AuxIntToInt64(v_1.AuxInt)
15358 if !(uint64(c) < 16) {
15359 break
15360 }
15361 v.Reset(ssaop.OpARMSRAconst)
15362 v.AuxInt = ssa.Int32ToAuxInt(int32(c + 16))
15363 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15364 v0.AuxInt = ssa.Int32ToAuxInt(16)
15365 v0.AddArg(x)
15366 v.AddArg(v0)
15367 return true
15368 }
15369
15370
15371
15372 for {
15373 x := v_0
15374 if v_1.Op != ssaop.OpConst64 {
15375 break
15376 }
15377 c := ssa.AuxIntToInt64(v_1.AuxInt)
15378 if !(uint64(c) >= 16) {
15379 break
15380 }
15381 v.Reset(ssaop.OpARMSRAconst)
15382 v.AuxInt = ssa.Int32ToAuxInt(31)
15383 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15384 v0.AuxInt = ssa.Int32ToAuxInt(16)
15385 v0.AddArg(x)
15386 v.AddArg(v0)
15387 return true
15388 }
15389 return false
15390 }
15391 func rewriteValue_OpRsh16x8(v *ssa.Value) bool {
15392 v_1 := v.Args[1]
15393 v_0 := v.Args[0]
15394 b := v.Block
15395 typ := &b.Func.Config.Types
15396
15397
15398 for {
15399 x := v_0
15400 y := v_1
15401 v.Reset(ssaop.OpARMSRA)
15402 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
15403 v0.AddArg(x)
15404 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15405 v1.AddArg(y)
15406 v.AddArg2(v0, v1)
15407 return true
15408 }
15409 }
15410 func rewriteValue_OpRsh32Ux16(v *ssa.Value) bool {
15411 v_1 := v.Args[1]
15412 v_0 := v.Args[0]
15413 b := v.Block
15414 typ := &b.Func.Config.Types
15415
15416
15417 for {
15418 x := v_0
15419 y := v_1
15420 v.Reset(ssaop.OpARMCMOVWHSconst)
15421 v.AuxInt = ssa.Int32ToAuxInt(0)
15422 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15423 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15424 v1.AddArg(y)
15425 v0.AddArg2(x, v1)
15426 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15427 v2.AuxInt = ssa.Int32ToAuxInt(256)
15428 v2.AddArg(v1)
15429 v.AddArg2(v0, v2)
15430 return true
15431 }
15432 }
15433 func rewriteValue_OpRsh32Ux32(v *ssa.Value) bool {
15434 v_1 := v.Args[1]
15435 v_0 := v.Args[0]
15436 b := v.Block
15437
15438
15439 for {
15440 x := v_0
15441 y := v_1
15442 v.Reset(ssaop.OpARMCMOVWHSconst)
15443 v.AuxInt = ssa.Int32ToAuxInt(0)
15444 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15445 v0.AddArg2(x, y)
15446 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15447 v1.AuxInt = ssa.Int32ToAuxInt(256)
15448 v1.AddArg(y)
15449 v.AddArg2(v0, v1)
15450 return true
15451 }
15452 }
15453 func rewriteValue_OpRsh32Ux64(v *ssa.Value) bool {
15454 v_1 := v.Args[1]
15455 v_0 := v.Args[0]
15456
15457
15458
15459 for {
15460 x := v_0
15461 if v_1.Op != ssaop.OpConst64 {
15462 break
15463 }
15464 c := ssa.AuxIntToInt64(v_1.AuxInt)
15465 if !(uint64(c) < 32) {
15466 break
15467 }
15468 v.Reset(ssaop.OpARMSRLconst)
15469 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
15470 v.AddArg(x)
15471 return true
15472 }
15473
15474
15475
15476 for {
15477 if v_1.Op != ssaop.OpConst64 {
15478 break
15479 }
15480 c := ssa.AuxIntToInt64(v_1.AuxInt)
15481 if !(uint64(c) >= 32) {
15482 break
15483 }
15484 v.Reset(ssaop.OpConst32)
15485 v.AuxInt = ssa.Int32ToAuxInt(0)
15486 return true
15487 }
15488 return false
15489 }
15490 func rewriteValue_OpRsh32Ux8(v *ssa.Value) bool {
15491 v_1 := v.Args[1]
15492 v_0 := v.Args[0]
15493 b := v.Block
15494 typ := &b.Func.Config.Types
15495
15496
15497 for {
15498 x := v_0
15499 y := v_1
15500 v.Reset(ssaop.OpARMSRL)
15501 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15502 v0.AddArg(y)
15503 v.AddArg2(x, v0)
15504 return true
15505 }
15506 }
15507 func rewriteValue_OpRsh32x16(v *ssa.Value) bool {
15508 v_1 := v.Args[1]
15509 v_0 := v.Args[0]
15510 b := v.Block
15511 typ := &b.Func.Config.Types
15512
15513
15514 for {
15515 x := v_0
15516 y := v_1
15517 v.Reset(ssaop.OpARMSRAcond)
15518 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15519 v0.AddArg(y)
15520 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15521 v1.AuxInt = ssa.Int32ToAuxInt(256)
15522 v1.AddArg(v0)
15523 v.AddArg3(x, v0, v1)
15524 return true
15525 }
15526 }
15527 func rewriteValue_OpRsh32x32(v *ssa.Value) bool {
15528 v_1 := v.Args[1]
15529 v_0 := v.Args[0]
15530 b := v.Block
15531
15532
15533 for {
15534 x := v_0
15535 y := v_1
15536 v.Reset(ssaop.OpARMSRAcond)
15537 v0 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15538 v0.AuxInt = ssa.Int32ToAuxInt(256)
15539 v0.AddArg(y)
15540 v.AddArg3(x, y, v0)
15541 return true
15542 }
15543 }
15544 func rewriteValue_OpRsh32x64(v *ssa.Value) bool {
15545 v_1 := v.Args[1]
15546 v_0 := v.Args[0]
15547
15548
15549
15550 for {
15551 x := v_0
15552 if v_1.Op != ssaop.OpConst64 {
15553 break
15554 }
15555 c := ssa.AuxIntToInt64(v_1.AuxInt)
15556 if !(uint64(c) < 32) {
15557 break
15558 }
15559 v.Reset(ssaop.OpARMSRAconst)
15560 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
15561 v.AddArg(x)
15562 return true
15563 }
15564
15565
15566
15567 for {
15568 x := v_0
15569 if v_1.Op != ssaop.OpConst64 {
15570 break
15571 }
15572 c := ssa.AuxIntToInt64(v_1.AuxInt)
15573 if !(uint64(c) >= 32) {
15574 break
15575 }
15576 v.Reset(ssaop.OpARMSRAconst)
15577 v.AuxInt = ssa.Int32ToAuxInt(31)
15578 v.AddArg(x)
15579 return true
15580 }
15581 return false
15582 }
15583 func rewriteValue_OpRsh32x8(v *ssa.Value) bool {
15584 v_1 := v.Args[1]
15585 v_0 := v.Args[0]
15586 b := v.Block
15587 typ := &b.Func.Config.Types
15588
15589
15590 for {
15591 x := v_0
15592 y := v_1
15593 v.Reset(ssaop.OpARMSRA)
15594 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15595 v0.AddArg(y)
15596 v.AddArg2(x, v0)
15597 return true
15598 }
15599 }
15600 func rewriteValue_OpRsh8Ux16(v *ssa.Value) bool {
15601 v_1 := v.Args[1]
15602 v_0 := v.Args[0]
15603 b := v.Block
15604 typ := &b.Func.Config.Types
15605
15606
15607 for {
15608 x := v_0
15609 y := v_1
15610 v.Reset(ssaop.OpARMCMOVWHSconst)
15611 v.AuxInt = ssa.Int32ToAuxInt(0)
15612 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15613 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15614 v1.AddArg(x)
15615 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15616 v2.AddArg(y)
15617 v0.AddArg2(v1, v2)
15618 v3 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15619 v3.AuxInt = ssa.Int32ToAuxInt(256)
15620 v3.AddArg(v2)
15621 v.AddArg2(v0, v3)
15622 return true
15623 }
15624 }
15625 func rewriteValue_OpRsh8Ux32(v *ssa.Value) bool {
15626 v_1 := v.Args[1]
15627 v_0 := v.Args[0]
15628 b := v.Block
15629 typ := &b.Func.Config.Types
15630
15631
15632 for {
15633 x := v_0
15634 y := v_1
15635 v.Reset(ssaop.OpARMCMOVWHSconst)
15636 v.AuxInt = ssa.Int32ToAuxInt(0)
15637 v0 := b.NewValue0(v.Pos, ssaop.OpARMSRL, x.Type)
15638 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15639 v1.AddArg(x)
15640 v0.AddArg2(v1, y)
15641 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15642 v2.AuxInt = ssa.Int32ToAuxInt(256)
15643 v2.AddArg(y)
15644 v.AddArg2(v0, v2)
15645 return true
15646 }
15647 }
15648 func rewriteValue_OpRsh8Ux64(v *ssa.Value) bool {
15649 v_1 := v.Args[1]
15650 v_0 := v.Args[0]
15651 b := v.Block
15652 typ := &b.Func.Config.Types
15653
15654
15655
15656 for {
15657 x := v_0
15658 if v_1.Op != ssaop.OpConst64 {
15659 break
15660 }
15661 c := ssa.AuxIntToInt64(v_1.AuxInt)
15662 if !(uint64(c) < 8) {
15663 break
15664 }
15665 v.Reset(ssaop.OpARMSRLconst)
15666 v.AuxInt = ssa.Int32ToAuxInt(int32(c + 24))
15667 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15668 v0.AuxInt = ssa.Int32ToAuxInt(24)
15669 v0.AddArg(x)
15670 v.AddArg(v0)
15671 return true
15672 }
15673
15674
15675
15676 for {
15677 if v_1.Op != ssaop.OpConst64 {
15678 break
15679 }
15680 c := ssa.AuxIntToInt64(v_1.AuxInt)
15681 if !(uint64(c) >= 8) {
15682 break
15683 }
15684 v.Reset(ssaop.OpConst8)
15685 v.AuxInt = ssa.Int8ToAuxInt(0)
15686 return true
15687 }
15688 return false
15689 }
15690 func rewriteValue_OpRsh8Ux8(v *ssa.Value) bool {
15691 v_1 := v.Args[1]
15692 v_0 := v.Args[0]
15693 b := v.Block
15694 typ := &b.Func.Config.Types
15695
15696
15697 for {
15698 x := v_0
15699 y := v_1
15700 v.Reset(ssaop.OpARMSRL)
15701 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15702 v0.AddArg(x)
15703 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15704 v1.AddArg(y)
15705 v.AddArg2(v0, v1)
15706 return true
15707 }
15708 }
15709 func rewriteValue_OpRsh8x16(v *ssa.Value) bool {
15710 v_1 := v.Args[1]
15711 v_0 := v.Args[0]
15712 b := v.Block
15713 typ := &b.Func.Config.Types
15714
15715
15716 for {
15717 x := v_0
15718 y := v_1
15719 v.Reset(ssaop.OpARMSRAcond)
15720 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
15721 v0.AddArg(x)
15722 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
15723 v1.AddArg(y)
15724 v2 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15725 v2.AuxInt = ssa.Int32ToAuxInt(256)
15726 v2.AddArg(v1)
15727 v.AddArg3(v0, v1, v2)
15728 return true
15729 }
15730 }
15731 func rewriteValue_OpRsh8x32(v *ssa.Value) bool {
15732 v_1 := v.Args[1]
15733 v_0 := v.Args[0]
15734 b := v.Block
15735 typ := &b.Func.Config.Types
15736
15737
15738 for {
15739 x := v_0
15740 y := v_1
15741 v.Reset(ssaop.OpARMSRAcond)
15742 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
15743 v0.AddArg(x)
15744 v1 := b.NewValue0(v.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
15745 v1.AuxInt = ssa.Int32ToAuxInt(256)
15746 v1.AddArg(y)
15747 v.AddArg3(v0, y, v1)
15748 return true
15749 }
15750 }
15751 func rewriteValue_OpRsh8x64(v *ssa.Value) bool {
15752 v_1 := v.Args[1]
15753 v_0 := v.Args[0]
15754 b := v.Block
15755 typ := &b.Func.Config.Types
15756
15757
15758
15759 for {
15760 x := v_0
15761 if v_1.Op != ssaop.OpConst64 {
15762 break
15763 }
15764 c := ssa.AuxIntToInt64(v_1.AuxInt)
15765 if !(uint64(c) < 8) {
15766 break
15767 }
15768 v.Reset(ssaop.OpARMSRAconst)
15769 v.AuxInt = ssa.Int32ToAuxInt(int32(c + 24))
15770 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15771 v0.AuxInt = ssa.Int32ToAuxInt(24)
15772 v0.AddArg(x)
15773 v.AddArg(v0)
15774 return true
15775 }
15776
15777
15778
15779 for {
15780 x := v_0
15781 if v_1.Op != ssaop.OpConst64 {
15782 break
15783 }
15784 c := ssa.AuxIntToInt64(v_1.AuxInt)
15785 if !(uint64(c) >= 8) {
15786 break
15787 }
15788 v.Reset(ssaop.OpARMSRAconst)
15789 v.AuxInt = ssa.Int32ToAuxInt(31)
15790 v0 := b.NewValue0(v.Pos, ssaop.OpARMSLLconst, typ.UInt32)
15791 v0.AuxInt = ssa.Int32ToAuxInt(24)
15792 v0.AddArg(x)
15793 v.AddArg(v0)
15794 return true
15795 }
15796 return false
15797 }
15798 func rewriteValue_OpRsh8x8(v *ssa.Value) bool {
15799 v_1 := v.Args[1]
15800 v_0 := v.Args[0]
15801 b := v.Block
15802 typ := &b.Func.Config.Types
15803
15804
15805 for {
15806 x := v_0
15807 y := v_1
15808 v.Reset(ssaop.OpARMSRA)
15809 v0 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
15810 v0.AddArg(x)
15811 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
15812 v1.AddArg(y)
15813 v.AddArg2(v0, v1)
15814 return true
15815 }
15816 }
15817 func rewriteValue_OpSelect0(v *ssa.Value) bool {
15818 v_0 := v.Args[0]
15819
15820
15821 for {
15822 if v_0.Op != ssaop.OpARMCALLudiv {
15823 break
15824 }
15825 _ = v_0.Args[1]
15826 x := v_0.Args[0]
15827 v_0_1 := v_0.Args[1]
15828 if v_0_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 1 {
15829 break
15830 }
15831 v.CopyOf(x)
15832 return true
15833 }
15834
15835
15836
15837 for {
15838 if v_0.Op != ssaop.OpARMCALLudiv {
15839 break
15840 }
15841 _ = v_0.Args[1]
15842 x := v_0.Args[0]
15843 v_0_1 := v_0.Args[1]
15844 if v_0_1.Op != ssaop.OpARMMOVWconst {
15845 break
15846 }
15847 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
15848 if !(ssa.IsPowerOfTwo(c)) {
15849 break
15850 }
15851 v.Reset(ssaop.OpARMSRLconst)
15852 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Log32(c)))
15853 v.AddArg(x)
15854 return true
15855 }
15856
15857
15858
15859 for {
15860 if v_0.Op != ssaop.OpARMCALLudiv {
15861 break
15862 }
15863 _ = v_0.Args[1]
15864 v_0_0 := v_0.Args[0]
15865 if v_0_0.Op != ssaop.OpARMMOVWconst {
15866 break
15867 }
15868 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
15869 v_0_1 := v_0.Args[1]
15870 if v_0_1.Op != ssaop.OpARMMOVWconst {
15871 break
15872 }
15873 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
15874 if !(d != 0) {
15875 break
15876 }
15877 v.Reset(ssaop.OpARMMOVWconst)
15878 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) / uint32(d)))
15879 return true
15880 }
15881 return false
15882 }
15883 func rewriteValue_OpSelect1(v *ssa.Value) bool {
15884 v_0 := v.Args[0]
15885
15886
15887 for {
15888 if v_0.Op != ssaop.OpARMCALLudiv {
15889 break
15890 }
15891 _ = v_0.Args[1]
15892 v_0_1 := v_0.Args[1]
15893 if v_0_1.Op != ssaop.OpARMMOVWconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 1 {
15894 break
15895 }
15896 v.Reset(ssaop.OpARMMOVWconst)
15897 v.AuxInt = ssa.Int32ToAuxInt(0)
15898 return true
15899 }
15900
15901
15902
15903 for {
15904 if v_0.Op != ssaop.OpARMCALLudiv {
15905 break
15906 }
15907 _ = v_0.Args[1]
15908 x := v_0.Args[0]
15909 v_0_1 := v_0.Args[1]
15910 if v_0_1.Op != ssaop.OpARMMOVWconst {
15911 break
15912 }
15913 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
15914 if !(ssa.IsPowerOfTwo(c)) {
15915 break
15916 }
15917 v.Reset(ssaop.OpARMANDconst)
15918 v.AuxInt = ssa.Int32ToAuxInt(c - 1)
15919 v.AddArg(x)
15920 return true
15921 }
15922
15923
15924
15925 for {
15926 if v_0.Op != ssaop.OpARMCALLudiv {
15927 break
15928 }
15929 _ = v_0.Args[1]
15930 v_0_0 := v_0.Args[0]
15931 if v_0_0.Op != ssaop.OpARMMOVWconst {
15932 break
15933 }
15934 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
15935 v_0_1 := v_0.Args[1]
15936 if v_0_1.Op != ssaop.OpARMMOVWconst {
15937 break
15938 }
15939 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
15940 if !(d != 0) {
15941 break
15942 }
15943 v.Reset(ssaop.OpARMMOVWconst)
15944 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) % uint32(d)))
15945 return true
15946 }
15947 return false
15948 }
15949 func rewriteValue_OpSignmask(v *ssa.Value) bool {
15950 v_0 := v.Args[0]
15951
15952
15953 for {
15954 x := v_0
15955 v.Reset(ssaop.OpARMSRAconst)
15956 v.AuxInt = ssa.Int32ToAuxInt(31)
15957 v.AddArg(x)
15958 return true
15959 }
15960 }
15961 func rewriteValue_OpSlicemask(v *ssa.Value) bool {
15962 v_0 := v.Args[0]
15963 b := v.Block
15964
15965
15966 for {
15967 t := v.Type
15968 x := v_0
15969 v.Reset(ssaop.OpARMSRAconst)
15970 v.AuxInt = ssa.Int32ToAuxInt(31)
15971 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBconst, t)
15972 v0.AuxInt = ssa.Int32ToAuxInt(0)
15973 v0.AddArg(x)
15974 v.AddArg(v0)
15975 return true
15976 }
15977 }
15978 func rewriteValue_OpStore(v *ssa.Value) bool {
15979 v_2 := v.Args[2]
15980 v_1 := v.Args[1]
15981 v_0 := v.Args[0]
15982
15983
15984
15985 for {
15986 t := ssa.AuxToType(v.Aux)
15987 ptr := v_0
15988 val := v_1
15989 mem := v_2
15990 if !(t.Size() == 1) {
15991 break
15992 }
15993 v.Reset(ssaop.OpARMMOVBstore)
15994 v.AddArg3(ptr, val, mem)
15995 return true
15996 }
15997
15998
15999
16000 for {
16001 t := ssa.AuxToType(v.Aux)
16002 ptr := v_0
16003 val := v_1
16004 mem := v_2
16005 if !(t.Size() == 2) {
16006 break
16007 }
16008 v.Reset(ssaop.OpARMMOVHstore)
16009 v.AddArg3(ptr, val, mem)
16010 return true
16011 }
16012
16013
16014
16015 for {
16016 t := ssa.AuxToType(v.Aux)
16017 ptr := v_0
16018 val := v_1
16019 mem := v_2
16020 if !(t.Size() == 4 && !t.IsFloat()) {
16021 break
16022 }
16023 v.Reset(ssaop.OpARMMOVWstore)
16024 v.AddArg3(ptr, val, mem)
16025 return true
16026 }
16027
16028
16029
16030 for {
16031 t := ssa.AuxToType(v.Aux)
16032 ptr := v_0
16033 val := v_1
16034 mem := v_2
16035 if !(t.Size() == 4 && t.IsFloat()) {
16036 break
16037 }
16038 v.Reset(ssaop.OpARMMOVFstore)
16039 v.AddArg3(ptr, val, mem)
16040 return true
16041 }
16042
16043
16044
16045 for {
16046 t := ssa.AuxToType(v.Aux)
16047 ptr := v_0
16048 val := v_1
16049 mem := v_2
16050 if !(t.Size() == 8 && t.IsFloat()) {
16051 break
16052 }
16053 v.Reset(ssaop.OpARMMOVDstore)
16054 v.AddArg3(ptr, val, mem)
16055 return true
16056 }
16057 return false
16058 }
16059 func rewriteValue_OpZero(v *ssa.Value) bool {
16060 v_1 := v.Args[1]
16061 v_0 := v.Args[0]
16062 b := v.Block
16063 config := b.Func.Config
16064 typ := &b.Func.Config.Types
16065
16066
16067 for {
16068 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
16069 break
16070 }
16071 mem := v_1
16072 v.CopyOf(mem)
16073 return true
16074 }
16075
16076
16077 for {
16078 if ssa.AuxIntToInt64(v.AuxInt) != 1 {
16079 break
16080 }
16081 ptr := v_0
16082 mem := v_1
16083 v.Reset(ssaop.OpARMMOVBstore)
16084 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16085 v0.AuxInt = ssa.Int32ToAuxInt(0)
16086 v.AddArg3(ptr, v0, mem)
16087 return true
16088 }
16089
16090
16091
16092 for {
16093 if ssa.AuxIntToInt64(v.AuxInt) != 2 {
16094 break
16095 }
16096 t := ssa.AuxToType(v.Aux)
16097 ptr := v_0
16098 mem := v_1
16099 if !(t.Alignment()%2 == 0) {
16100 break
16101 }
16102 v.Reset(ssaop.OpARMMOVHstore)
16103 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16104 v0.AuxInt = ssa.Int32ToAuxInt(0)
16105 v.AddArg3(ptr, v0, mem)
16106 return true
16107 }
16108
16109
16110 for {
16111 if ssa.AuxIntToInt64(v.AuxInt) != 2 {
16112 break
16113 }
16114 ptr := v_0
16115 mem := v_1
16116 v.Reset(ssaop.OpARMMOVBstore)
16117 v.AuxInt = ssa.Int32ToAuxInt(1)
16118 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16119 v0.AuxInt = ssa.Int32ToAuxInt(0)
16120 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16121 v1.AuxInt = ssa.Int32ToAuxInt(0)
16122 v1.AddArg3(ptr, v0, mem)
16123 v.AddArg3(ptr, v0, v1)
16124 return true
16125 }
16126
16127
16128
16129 for {
16130 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
16131 break
16132 }
16133 t := ssa.AuxToType(v.Aux)
16134 ptr := v_0
16135 mem := v_1
16136 if !(t.Alignment()%4 == 0) {
16137 break
16138 }
16139 v.Reset(ssaop.OpARMMOVWstore)
16140 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16141 v0.AuxInt = ssa.Int32ToAuxInt(0)
16142 v.AddArg3(ptr, v0, mem)
16143 return true
16144 }
16145
16146
16147
16148 for {
16149 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
16150 break
16151 }
16152 t := ssa.AuxToType(v.Aux)
16153 ptr := v_0
16154 mem := v_1
16155 if !(t.Alignment()%2 == 0) {
16156 break
16157 }
16158 v.Reset(ssaop.OpARMMOVHstore)
16159 v.AuxInt = ssa.Int32ToAuxInt(2)
16160 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16161 v0.AuxInt = ssa.Int32ToAuxInt(0)
16162 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVHstore, types.TypeMem)
16163 v1.AuxInt = ssa.Int32ToAuxInt(0)
16164 v1.AddArg3(ptr, v0, mem)
16165 v.AddArg3(ptr, v0, v1)
16166 return true
16167 }
16168
16169
16170 for {
16171 if ssa.AuxIntToInt64(v.AuxInt) != 4 {
16172 break
16173 }
16174 ptr := v_0
16175 mem := v_1
16176 v.Reset(ssaop.OpARMMOVBstore)
16177 v.AuxInt = ssa.Int32ToAuxInt(3)
16178 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16179 v0.AuxInt = ssa.Int32ToAuxInt(0)
16180 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16181 v1.AuxInt = ssa.Int32ToAuxInt(2)
16182 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16183 v2.AuxInt = ssa.Int32ToAuxInt(1)
16184 v3 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16185 v3.AuxInt = ssa.Int32ToAuxInt(0)
16186 v3.AddArg3(ptr, v0, mem)
16187 v2.AddArg3(ptr, v0, v3)
16188 v1.AddArg3(ptr, v0, v2)
16189 v.AddArg3(ptr, v0, v1)
16190 return true
16191 }
16192
16193
16194 for {
16195 if ssa.AuxIntToInt64(v.AuxInt) != 3 {
16196 break
16197 }
16198 ptr := v_0
16199 mem := v_1
16200 v.Reset(ssaop.OpARMMOVBstore)
16201 v.AuxInt = ssa.Int32ToAuxInt(2)
16202 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16203 v0.AuxInt = ssa.Int32ToAuxInt(0)
16204 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16205 v1.AuxInt = ssa.Int32ToAuxInt(1)
16206 v2 := b.NewValue0(v.Pos, ssaop.OpARMMOVBstore, types.TypeMem)
16207 v2.AuxInt = ssa.Int32ToAuxInt(0)
16208 v2.AddArg3(ptr, v0, mem)
16209 v1.AddArg3(ptr, v0, v2)
16210 v.AddArg3(ptr, v0, v1)
16211 return true
16212 }
16213
16214
16215
16216 for {
16217 s := ssa.AuxIntToInt64(v.AuxInt)
16218 t := ssa.AuxToType(v.Aux)
16219 ptr := v_0
16220 mem := v_1
16221 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0) {
16222 break
16223 }
16224 v.Reset(ssaop.OpARMDUFFZERO)
16225 v.AuxInt = ssa.Int64ToAuxInt(4 * (128 - s/4))
16226 v0 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16227 v0.AuxInt = ssa.Int32ToAuxInt(0)
16228 v.AddArg3(ptr, v0, mem)
16229 return true
16230 }
16231
16232
16233
16234 for {
16235 s := ssa.AuxIntToInt64(v.AuxInt)
16236 t := ssa.AuxToType(v.Aux)
16237 ptr := v_0
16238 mem := v_1
16239 if !(s > 512 || t.Alignment()%4 != 0) {
16240 break
16241 }
16242 v.Reset(ssaop.OpARMLoweredZero)
16243 v.AuxInt = ssa.Int64ToAuxInt(t.Alignment())
16244 v0 := b.NewValue0(v.Pos, ssaop.OpARMADDconst, ptr.Type)
16245 v0.AuxInt = ssa.Int32ToAuxInt(int32(s - ssa.MoveSize(t.Alignment(), config)))
16246 v0.AddArg(ptr)
16247 v1 := b.NewValue0(v.Pos, ssaop.OpARMMOVWconst, typ.UInt32)
16248 v1.AuxInt = ssa.Int32ToAuxInt(0)
16249 v.AddArg4(ptr, v0, v1, mem)
16250 return true
16251 }
16252 return false
16253 }
16254 func rewriteValue_OpZeromask(v *ssa.Value) bool {
16255 v_0 := v.Args[0]
16256 b := v.Block
16257 typ := &b.Func.Config.Types
16258
16259
16260 for {
16261 x := v_0
16262 v.Reset(ssaop.OpARMSRAconst)
16263 v.AuxInt = ssa.Int32ToAuxInt(31)
16264 v0 := b.NewValue0(v.Pos, ssaop.OpARMRSBshiftRL, typ.Int32)
16265 v0.AuxInt = ssa.Int32ToAuxInt(1)
16266 v0.AddArg2(x, x)
16267 v.AddArg(v0)
16268 return true
16269 }
16270 }
16271 func RewriteBlock(b *ssa.Block) bool {
16272 switch b.Kind {
16273 case block.BlockARMEQ:
16274
16275
16276
16277 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
16278 v_0 := b.Controls[0]
16279 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
16280 if !(fc.Eq()) {
16281 break
16282 }
16283 b.Reset(block.BlockFirst)
16284 return true
16285 }
16286
16287
16288
16289 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
16290 v_0 := b.Controls[0]
16291 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
16292 if !(!fc.Eq()) {
16293 break
16294 }
16295 b.Reset(block.BlockFirst)
16296 b.SwapSuccessors()
16297 return true
16298 }
16299
16300
16301 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
16302 v_0 := b.Controls[0]
16303 cmp := v_0.Args[0]
16304 b.ResetWithControl(block.BlockARMEQ, cmp)
16305 return true
16306 }
16307
16308
16309 for b.Controls[0].Op == ssaop.OpARMCMP {
16310 v_0 := b.Controls[0]
16311 _ = v_0.Args[1]
16312 x := v_0.Args[0]
16313 v_0_1 := v_0.Args[1]
16314 if v_0_1.Op != ssaop.OpARMRSBconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 {
16315 break
16316 }
16317 y := v_0_1.Args[0]
16318 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
16319 v0.AddArg2(x, y)
16320 b.ResetWithControl(block.BlockARMEQ, v0)
16321 return true
16322 }
16323
16324
16325 for b.Controls[0].Op == ssaop.OpARMCMN {
16326 v_0 := b.Controls[0]
16327 _ = v_0.Args[1]
16328 v_0_0 := v_0.Args[0]
16329 v_0_1 := v_0.Args[1]
16330 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16331 x := v_0_0
16332 if v_0_1.Op != ssaop.OpARMRSBconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 {
16333 continue
16334 }
16335 y := v_0_1.Args[0]
16336 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
16337 v0.AddArg2(x, y)
16338 b.ResetWithControl(block.BlockARMEQ, v0)
16339 return true
16340 }
16341 break
16342 }
16343
16344
16345
16346 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16347 v_0 := b.Controls[0]
16348 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16349 break
16350 }
16351 l := v_0.Args[0]
16352 if l.Op != ssaop.OpARMSUB {
16353 break
16354 }
16355 y := l.Args[1]
16356 x := l.Args[0]
16357 if !(l.Uses == 1) {
16358 break
16359 }
16360 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
16361 v0.AddArg2(x, y)
16362 b.ResetWithControl(block.BlockARMEQ, v0)
16363 return true
16364 }
16365
16366
16367
16368 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16369 v_0 := b.Controls[0]
16370 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16371 break
16372 }
16373 l := v_0.Args[0]
16374 if l.Op != ssaop.OpARMMULS {
16375 break
16376 }
16377 a := l.Args[2]
16378 x := l.Args[0]
16379 y := l.Args[1]
16380 if !(l.Uses == 1) {
16381 break
16382 }
16383 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
16384 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
16385 v1.AddArg2(x, y)
16386 v0.AddArg2(a, v1)
16387 b.ResetWithControl(block.BlockARMEQ, v0)
16388 return true
16389 }
16390
16391
16392
16393 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16394 v_0 := b.Controls[0]
16395 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16396 break
16397 }
16398 l := v_0.Args[0]
16399 if l.Op != ssaop.OpARMSUBconst {
16400 break
16401 }
16402 c := ssa.AuxIntToInt32(l.AuxInt)
16403 x := l.Args[0]
16404 if !(l.Uses == 1) {
16405 break
16406 }
16407 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
16408 v0.AuxInt = ssa.Int32ToAuxInt(c)
16409 v0.AddArg(x)
16410 b.ResetWithControl(block.BlockARMEQ, v0)
16411 return true
16412 }
16413
16414
16415
16416 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16417 v_0 := b.Controls[0]
16418 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16419 break
16420 }
16421 l := v_0.Args[0]
16422 if l.Op != ssaop.OpARMSUBshiftLL {
16423 break
16424 }
16425 c := ssa.AuxIntToInt32(l.AuxInt)
16426 y := l.Args[1]
16427 x := l.Args[0]
16428 if !(l.Uses == 1) {
16429 break
16430 }
16431 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftLL, types.TypeFlags)
16432 v0.AuxInt = ssa.Int32ToAuxInt(c)
16433 v0.AddArg2(x, y)
16434 b.ResetWithControl(block.BlockARMEQ, v0)
16435 return true
16436 }
16437
16438
16439
16440 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16441 v_0 := b.Controls[0]
16442 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16443 break
16444 }
16445 l := v_0.Args[0]
16446 if l.Op != ssaop.OpARMSUBshiftRL {
16447 break
16448 }
16449 c := ssa.AuxIntToInt32(l.AuxInt)
16450 y := l.Args[1]
16451 x := l.Args[0]
16452 if !(l.Uses == 1) {
16453 break
16454 }
16455 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRL, types.TypeFlags)
16456 v0.AuxInt = ssa.Int32ToAuxInt(c)
16457 v0.AddArg2(x, y)
16458 b.ResetWithControl(block.BlockARMEQ, v0)
16459 return true
16460 }
16461
16462
16463
16464 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16465 v_0 := b.Controls[0]
16466 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16467 break
16468 }
16469 l := v_0.Args[0]
16470 if l.Op != ssaop.OpARMSUBshiftRA {
16471 break
16472 }
16473 c := ssa.AuxIntToInt32(l.AuxInt)
16474 y := l.Args[1]
16475 x := l.Args[0]
16476 if !(l.Uses == 1) {
16477 break
16478 }
16479 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRA, types.TypeFlags)
16480 v0.AuxInt = ssa.Int32ToAuxInt(c)
16481 v0.AddArg2(x, y)
16482 b.ResetWithControl(block.BlockARMEQ, v0)
16483 return true
16484 }
16485
16486
16487
16488 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16489 v_0 := b.Controls[0]
16490 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16491 break
16492 }
16493 l := v_0.Args[0]
16494 if l.Op != ssaop.OpARMSUBshiftLLreg {
16495 break
16496 }
16497 z := l.Args[2]
16498 x := l.Args[0]
16499 y := l.Args[1]
16500 if !(l.Uses == 1) {
16501 break
16502 }
16503 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftLLreg, types.TypeFlags)
16504 v0.AddArg3(x, y, z)
16505 b.ResetWithControl(block.BlockARMEQ, v0)
16506 return true
16507 }
16508
16509
16510
16511 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16512 v_0 := b.Controls[0]
16513 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16514 break
16515 }
16516 l := v_0.Args[0]
16517 if l.Op != ssaop.OpARMSUBshiftRLreg {
16518 break
16519 }
16520 z := l.Args[2]
16521 x := l.Args[0]
16522 y := l.Args[1]
16523 if !(l.Uses == 1) {
16524 break
16525 }
16526 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRLreg, types.TypeFlags)
16527 v0.AddArg3(x, y, z)
16528 b.ResetWithControl(block.BlockARMEQ, v0)
16529 return true
16530 }
16531
16532
16533
16534 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16535 v_0 := b.Controls[0]
16536 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16537 break
16538 }
16539 l := v_0.Args[0]
16540 if l.Op != ssaop.OpARMSUBshiftRAreg {
16541 break
16542 }
16543 z := l.Args[2]
16544 x := l.Args[0]
16545 y := l.Args[1]
16546 if !(l.Uses == 1) {
16547 break
16548 }
16549 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRAreg, types.TypeFlags)
16550 v0.AddArg3(x, y, z)
16551 b.ResetWithControl(block.BlockARMEQ, v0)
16552 return true
16553 }
16554
16555
16556
16557 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16558 v_0 := b.Controls[0]
16559 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16560 break
16561 }
16562 l := v_0.Args[0]
16563 if l.Op != ssaop.OpARMADD {
16564 break
16565 }
16566 _ = l.Args[1]
16567 l_0 := l.Args[0]
16568 l_1 := l.Args[1]
16569 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16570 x := l_0
16571 y := l_1
16572 if !(l.Uses == 1) {
16573 continue
16574 }
16575 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
16576 v0.AddArg2(x, y)
16577 b.ResetWithControl(block.BlockARMEQ, v0)
16578 return true
16579 }
16580 break
16581 }
16582
16583
16584
16585 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16586 v_0 := b.Controls[0]
16587 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16588 break
16589 }
16590 l := v_0.Args[0]
16591 if l.Op != ssaop.OpARMMULA {
16592 break
16593 }
16594 a := l.Args[2]
16595 x := l.Args[0]
16596 y := l.Args[1]
16597 if !(l.Uses == 1) {
16598 break
16599 }
16600 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
16601 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
16602 v1.AddArg2(x, y)
16603 v0.AddArg2(a, v1)
16604 b.ResetWithControl(block.BlockARMEQ, v0)
16605 return true
16606 }
16607
16608
16609
16610 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16611 v_0 := b.Controls[0]
16612 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16613 break
16614 }
16615 l := v_0.Args[0]
16616 if l.Op != ssaop.OpARMADDconst {
16617 break
16618 }
16619 c := ssa.AuxIntToInt32(l.AuxInt)
16620 x := l.Args[0]
16621 if !(l.Uses == 1) {
16622 break
16623 }
16624 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
16625 v0.AuxInt = ssa.Int32ToAuxInt(c)
16626 v0.AddArg(x)
16627 b.ResetWithControl(block.BlockARMEQ, v0)
16628 return true
16629 }
16630
16631
16632
16633 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16634 v_0 := b.Controls[0]
16635 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16636 break
16637 }
16638 l := v_0.Args[0]
16639 if l.Op != ssaop.OpARMADDshiftLL {
16640 break
16641 }
16642 c := ssa.AuxIntToInt32(l.AuxInt)
16643 y := l.Args[1]
16644 x := l.Args[0]
16645 if !(l.Uses == 1) {
16646 break
16647 }
16648 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
16649 v0.AuxInt = ssa.Int32ToAuxInt(c)
16650 v0.AddArg2(x, y)
16651 b.ResetWithControl(block.BlockARMEQ, v0)
16652 return true
16653 }
16654
16655
16656
16657 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16658 v_0 := b.Controls[0]
16659 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16660 break
16661 }
16662 l := v_0.Args[0]
16663 if l.Op != ssaop.OpARMADDshiftRL {
16664 break
16665 }
16666 c := ssa.AuxIntToInt32(l.AuxInt)
16667 y := l.Args[1]
16668 x := l.Args[0]
16669 if !(l.Uses == 1) {
16670 break
16671 }
16672 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
16673 v0.AuxInt = ssa.Int32ToAuxInt(c)
16674 v0.AddArg2(x, y)
16675 b.ResetWithControl(block.BlockARMEQ, v0)
16676 return true
16677 }
16678
16679
16680
16681 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16682 v_0 := b.Controls[0]
16683 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16684 break
16685 }
16686 l := v_0.Args[0]
16687 if l.Op != ssaop.OpARMADDshiftRA {
16688 break
16689 }
16690 c := ssa.AuxIntToInt32(l.AuxInt)
16691 y := l.Args[1]
16692 x := l.Args[0]
16693 if !(l.Uses == 1) {
16694 break
16695 }
16696 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
16697 v0.AuxInt = ssa.Int32ToAuxInt(c)
16698 v0.AddArg2(x, y)
16699 b.ResetWithControl(block.BlockARMEQ, v0)
16700 return true
16701 }
16702
16703
16704
16705 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16706 v_0 := b.Controls[0]
16707 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16708 break
16709 }
16710 l := v_0.Args[0]
16711 if l.Op != ssaop.OpARMADDshiftLLreg {
16712 break
16713 }
16714 z := l.Args[2]
16715 x := l.Args[0]
16716 y := l.Args[1]
16717 if !(l.Uses == 1) {
16718 break
16719 }
16720 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
16721 v0.AddArg3(x, y, z)
16722 b.ResetWithControl(block.BlockARMEQ, v0)
16723 return true
16724 }
16725
16726
16727
16728 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16729 v_0 := b.Controls[0]
16730 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16731 break
16732 }
16733 l := v_0.Args[0]
16734 if l.Op != ssaop.OpARMADDshiftRLreg {
16735 break
16736 }
16737 z := l.Args[2]
16738 x := l.Args[0]
16739 y := l.Args[1]
16740 if !(l.Uses == 1) {
16741 break
16742 }
16743 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
16744 v0.AddArg3(x, y, z)
16745 b.ResetWithControl(block.BlockARMEQ, v0)
16746 return true
16747 }
16748
16749
16750
16751 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16752 v_0 := b.Controls[0]
16753 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16754 break
16755 }
16756 l := v_0.Args[0]
16757 if l.Op != ssaop.OpARMADDshiftRAreg {
16758 break
16759 }
16760 z := l.Args[2]
16761 x := l.Args[0]
16762 y := l.Args[1]
16763 if !(l.Uses == 1) {
16764 break
16765 }
16766 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
16767 v0.AddArg3(x, y, z)
16768 b.ResetWithControl(block.BlockARMEQ, v0)
16769 return true
16770 }
16771
16772
16773
16774 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16775 v_0 := b.Controls[0]
16776 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16777 break
16778 }
16779 l := v_0.Args[0]
16780 if l.Op != ssaop.OpARMAND {
16781 break
16782 }
16783 _ = l.Args[1]
16784 l_0 := l.Args[0]
16785 l_1 := l.Args[1]
16786 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16787 x := l_0
16788 y := l_1
16789 if !(l.Uses == 1) {
16790 continue
16791 }
16792 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
16793 v0.AddArg2(x, y)
16794 b.ResetWithControl(block.BlockARMEQ, v0)
16795 return true
16796 }
16797 break
16798 }
16799
16800
16801
16802 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16803 v_0 := b.Controls[0]
16804 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16805 break
16806 }
16807 l := v_0.Args[0]
16808 if l.Op != ssaop.OpARMANDconst {
16809 break
16810 }
16811 c := ssa.AuxIntToInt32(l.AuxInt)
16812 x := l.Args[0]
16813 if !(l.Uses == 1) {
16814 break
16815 }
16816 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
16817 v0.AuxInt = ssa.Int32ToAuxInt(c)
16818 v0.AddArg(x)
16819 b.ResetWithControl(block.BlockARMEQ, v0)
16820 return true
16821 }
16822
16823
16824
16825 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16826 v_0 := b.Controls[0]
16827 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16828 break
16829 }
16830 l := v_0.Args[0]
16831 if l.Op != ssaop.OpARMANDshiftLL {
16832 break
16833 }
16834 c := ssa.AuxIntToInt32(l.AuxInt)
16835 y := l.Args[1]
16836 x := l.Args[0]
16837 if !(l.Uses == 1) {
16838 break
16839 }
16840 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
16841 v0.AuxInt = ssa.Int32ToAuxInt(c)
16842 v0.AddArg2(x, y)
16843 b.ResetWithControl(block.BlockARMEQ, v0)
16844 return true
16845 }
16846
16847
16848
16849 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16850 v_0 := b.Controls[0]
16851 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16852 break
16853 }
16854 l := v_0.Args[0]
16855 if l.Op != ssaop.OpARMANDshiftRL {
16856 break
16857 }
16858 c := ssa.AuxIntToInt32(l.AuxInt)
16859 y := l.Args[1]
16860 x := l.Args[0]
16861 if !(l.Uses == 1) {
16862 break
16863 }
16864 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
16865 v0.AuxInt = ssa.Int32ToAuxInt(c)
16866 v0.AddArg2(x, y)
16867 b.ResetWithControl(block.BlockARMEQ, v0)
16868 return true
16869 }
16870
16871
16872
16873 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16874 v_0 := b.Controls[0]
16875 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16876 break
16877 }
16878 l := v_0.Args[0]
16879 if l.Op != ssaop.OpARMANDshiftRA {
16880 break
16881 }
16882 c := ssa.AuxIntToInt32(l.AuxInt)
16883 y := l.Args[1]
16884 x := l.Args[0]
16885 if !(l.Uses == 1) {
16886 break
16887 }
16888 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
16889 v0.AuxInt = ssa.Int32ToAuxInt(c)
16890 v0.AddArg2(x, y)
16891 b.ResetWithControl(block.BlockARMEQ, v0)
16892 return true
16893 }
16894
16895
16896
16897 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16898 v_0 := b.Controls[0]
16899 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16900 break
16901 }
16902 l := v_0.Args[0]
16903 if l.Op != ssaop.OpARMANDshiftLLreg {
16904 break
16905 }
16906 z := l.Args[2]
16907 x := l.Args[0]
16908 y := l.Args[1]
16909 if !(l.Uses == 1) {
16910 break
16911 }
16912 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
16913 v0.AddArg3(x, y, z)
16914 b.ResetWithControl(block.BlockARMEQ, v0)
16915 return true
16916 }
16917
16918
16919
16920 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16921 v_0 := b.Controls[0]
16922 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16923 break
16924 }
16925 l := v_0.Args[0]
16926 if l.Op != ssaop.OpARMANDshiftRLreg {
16927 break
16928 }
16929 z := l.Args[2]
16930 x := l.Args[0]
16931 y := l.Args[1]
16932 if !(l.Uses == 1) {
16933 break
16934 }
16935 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
16936 v0.AddArg3(x, y, z)
16937 b.ResetWithControl(block.BlockARMEQ, v0)
16938 return true
16939 }
16940
16941
16942
16943 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16944 v_0 := b.Controls[0]
16945 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16946 break
16947 }
16948 l := v_0.Args[0]
16949 if l.Op != ssaop.OpARMANDshiftRAreg {
16950 break
16951 }
16952 z := l.Args[2]
16953 x := l.Args[0]
16954 y := l.Args[1]
16955 if !(l.Uses == 1) {
16956 break
16957 }
16958 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
16959 v0.AddArg3(x, y, z)
16960 b.ResetWithControl(block.BlockARMEQ, v0)
16961 return true
16962 }
16963
16964
16965
16966 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16967 v_0 := b.Controls[0]
16968 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16969 break
16970 }
16971 l := v_0.Args[0]
16972 if l.Op != ssaop.OpARMXOR {
16973 break
16974 }
16975 _ = l.Args[1]
16976 l_0 := l.Args[0]
16977 l_1 := l.Args[1]
16978 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16979 x := l_0
16980 y := l_1
16981 if !(l.Uses == 1) {
16982 continue
16983 }
16984 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
16985 v0.AddArg2(x, y)
16986 b.ResetWithControl(block.BlockARMEQ, v0)
16987 return true
16988 }
16989 break
16990 }
16991
16992
16993
16994 for b.Controls[0].Op == ssaop.OpARMCMPconst {
16995 v_0 := b.Controls[0]
16996 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16997 break
16998 }
16999 l := v_0.Args[0]
17000 if l.Op != ssaop.OpARMXORconst {
17001 break
17002 }
17003 c := ssa.AuxIntToInt32(l.AuxInt)
17004 x := l.Args[0]
17005 if !(l.Uses == 1) {
17006 break
17007 }
17008 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
17009 v0.AuxInt = ssa.Int32ToAuxInt(c)
17010 v0.AddArg(x)
17011 b.ResetWithControl(block.BlockARMEQ, v0)
17012 return true
17013 }
17014
17015
17016
17017 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17018 v_0 := b.Controls[0]
17019 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17020 break
17021 }
17022 l := v_0.Args[0]
17023 if l.Op != ssaop.OpARMXORshiftLL {
17024 break
17025 }
17026 c := ssa.AuxIntToInt32(l.AuxInt)
17027 y := l.Args[1]
17028 x := l.Args[0]
17029 if !(l.Uses == 1) {
17030 break
17031 }
17032 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
17033 v0.AuxInt = ssa.Int32ToAuxInt(c)
17034 v0.AddArg2(x, y)
17035 b.ResetWithControl(block.BlockARMEQ, v0)
17036 return true
17037 }
17038
17039
17040
17041 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17042 v_0 := b.Controls[0]
17043 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17044 break
17045 }
17046 l := v_0.Args[0]
17047 if l.Op != ssaop.OpARMXORshiftRL {
17048 break
17049 }
17050 c := ssa.AuxIntToInt32(l.AuxInt)
17051 y := l.Args[1]
17052 x := l.Args[0]
17053 if !(l.Uses == 1) {
17054 break
17055 }
17056 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
17057 v0.AuxInt = ssa.Int32ToAuxInt(c)
17058 v0.AddArg2(x, y)
17059 b.ResetWithControl(block.BlockARMEQ, v0)
17060 return true
17061 }
17062
17063
17064
17065 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17066 v_0 := b.Controls[0]
17067 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17068 break
17069 }
17070 l := v_0.Args[0]
17071 if l.Op != ssaop.OpARMXORshiftRA {
17072 break
17073 }
17074 c := ssa.AuxIntToInt32(l.AuxInt)
17075 y := l.Args[1]
17076 x := l.Args[0]
17077 if !(l.Uses == 1) {
17078 break
17079 }
17080 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
17081 v0.AuxInt = ssa.Int32ToAuxInt(c)
17082 v0.AddArg2(x, y)
17083 b.ResetWithControl(block.BlockARMEQ, v0)
17084 return true
17085 }
17086
17087
17088
17089 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17090 v_0 := b.Controls[0]
17091 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17092 break
17093 }
17094 l := v_0.Args[0]
17095 if l.Op != ssaop.OpARMXORshiftLLreg {
17096 break
17097 }
17098 z := l.Args[2]
17099 x := l.Args[0]
17100 y := l.Args[1]
17101 if !(l.Uses == 1) {
17102 break
17103 }
17104 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
17105 v0.AddArg3(x, y, z)
17106 b.ResetWithControl(block.BlockARMEQ, v0)
17107 return true
17108 }
17109
17110
17111
17112 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17113 v_0 := b.Controls[0]
17114 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17115 break
17116 }
17117 l := v_0.Args[0]
17118 if l.Op != ssaop.OpARMXORshiftRLreg {
17119 break
17120 }
17121 z := l.Args[2]
17122 x := l.Args[0]
17123 y := l.Args[1]
17124 if !(l.Uses == 1) {
17125 break
17126 }
17127 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
17128 v0.AddArg3(x, y, z)
17129 b.ResetWithControl(block.BlockARMEQ, v0)
17130 return true
17131 }
17132
17133
17134
17135 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17136 v_0 := b.Controls[0]
17137 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17138 break
17139 }
17140 l := v_0.Args[0]
17141 if l.Op != ssaop.OpARMXORshiftRAreg {
17142 break
17143 }
17144 z := l.Args[2]
17145 x := l.Args[0]
17146 y := l.Args[1]
17147 if !(l.Uses == 1) {
17148 break
17149 }
17150 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
17151 v0.AddArg3(x, y, z)
17152 b.ResetWithControl(block.BlockARMEQ, v0)
17153 return true
17154 }
17155 case block.BlockARMGE:
17156
17157
17158
17159 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17160 v_0 := b.Controls[0]
17161 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17162 if !(fc.Ge()) {
17163 break
17164 }
17165 b.Reset(block.BlockFirst)
17166 return true
17167 }
17168
17169
17170
17171 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17172 v_0 := b.Controls[0]
17173 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17174 if !(!fc.Ge()) {
17175 break
17176 }
17177 b.Reset(block.BlockFirst)
17178 b.SwapSuccessors()
17179 return true
17180 }
17181
17182
17183 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
17184 v_0 := b.Controls[0]
17185 cmp := v_0.Args[0]
17186 b.ResetWithControl(block.BlockARMLE, cmp)
17187 return true
17188 }
17189
17190
17191
17192 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17193 v_0 := b.Controls[0]
17194 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17195 break
17196 }
17197 l := v_0.Args[0]
17198 if l.Op != ssaop.OpARMADD {
17199 break
17200 }
17201 _ = l.Args[1]
17202 l_0 := l.Args[0]
17203 l_1 := l.Args[1]
17204 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17205 x := l_0
17206 y := l_1
17207 if !(l.Uses == 1) {
17208 continue
17209 }
17210 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
17211 v0.AddArg2(x, y)
17212 b.ResetWithControl(block.BlockARMGEnoov, v0)
17213 return true
17214 }
17215 break
17216 }
17217
17218
17219
17220 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17221 v_0 := b.Controls[0]
17222 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17223 break
17224 }
17225 l := v_0.Args[0]
17226 if l.Op != ssaop.OpARMMULA {
17227 break
17228 }
17229 a := l.Args[2]
17230 x := l.Args[0]
17231 y := l.Args[1]
17232 if !(l.Uses == 1) {
17233 break
17234 }
17235 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
17236 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
17237 v1.AddArg2(x, y)
17238 v0.AddArg2(a, v1)
17239 b.ResetWithControl(block.BlockARMGEnoov, v0)
17240 return true
17241 }
17242
17243
17244
17245 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17246 v_0 := b.Controls[0]
17247 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17248 break
17249 }
17250 l := v_0.Args[0]
17251 if l.Op != ssaop.OpARMADDconst {
17252 break
17253 }
17254 c := ssa.AuxIntToInt32(l.AuxInt)
17255 x := l.Args[0]
17256 if !(l.Uses == 1) {
17257 break
17258 }
17259 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
17260 v0.AuxInt = ssa.Int32ToAuxInt(c)
17261 v0.AddArg(x)
17262 b.ResetWithControl(block.BlockARMGEnoov, v0)
17263 return true
17264 }
17265
17266
17267
17268 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17269 v_0 := b.Controls[0]
17270 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17271 break
17272 }
17273 l := v_0.Args[0]
17274 if l.Op != ssaop.OpARMADDshiftLL {
17275 break
17276 }
17277 c := ssa.AuxIntToInt32(l.AuxInt)
17278 y := l.Args[1]
17279 x := l.Args[0]
17280 if !(l.Uses == 1) {
17281 break
17282 }
17283 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
17284 v0.AuxInt = ssa.Int32ToAuxInt(c)
17285 v0.AddArg2(x, y)
17286 b.ResetWithControl(block.BlockARMGEnoov, v0)
17287 return true
17288 }
17289
17290
17291
17292 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17293 v_0 := b.Controls[0]
17294 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17295 break
17296 }
17297 l := v_0.Args[0]
17298 if l.Op != ssaop.OpARMADDshiftRL {
17299 break
17300 }
17301 c := ssa.AuxIntToInt32(l.AuxInt)
17302 y := l.Args[1]
17303 x := l.Args[0]
17304 if !(l.Uses == 1) {
17305 break
17306 }
17307 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
17308 v0.AuxInt = ssa.Int32ToAuxInt(c)
17309 v0.AddArg2(x, y)
17310 b.ResetWithControl(block.BlockARMGEnoov, v0)
17311 return true
17312 }
17313
17314
17315
17316 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17317 v_0 := b.Controls[0]
17318 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17319 break
17320 }
17321 l := v_0.Args[0]
17322 if l.Op != ssaop.OpARMADDshiftRA {
17323 break
17324 }
17325 c := ssa.AuxIntToInt32(l.AuxInt)
17326 y := l.Args[1]
17327 x := l.Args[0]
17328 if !(l.Uses == 1) {
17329 break
17330 }
17331 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
17332 v0.AuxInt = ssa.Int32ToAuxInt(c)
17333 v0.AddArg2(x, y)
17334 b.ResetWithControl(block.BlockARMGEnoov, v0)
17335 return true
17336 }
17337
17338
17339
17340 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17341 v_0 := b.Controls[0]
17342 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17343 break
17344 }
17345 l := v_0.Args[0]
17346 if l.Op != ssaop.OpARMADDshiftLLreg {
17347 break
17348 }
17349 z := l.Args[2]
17350 x := l.Args[0]
17351 y := l.Args[1]
17352 if !(l.Uses == 1) {
17353 break
17354 }
17355 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
17356 v0.AddArg3(x, y, z)
17357 b.ResetWithControl(block.BlockARMGEnoov, v0)
17358 return true
17359 }
17360
17361
17362
17363 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17364 v_0 := b.Controls[0]
17365 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17366 break
17367 }
17368 l := v_0.Args[0]
17369 if l.Op != ssaop.OpARMADDshiftRLreg {
17370 break
17371 }
17372 z := l.Args[2]
17373 x := l.Args[0]
17374 y := l.Args[1]
17375 if !(l.Uses == 1) {
17376 break
17377 }
17378 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
17379 v0.AddArg3(x, y, z)
17380 b.ResetWithControl(block.BlockARMGEnoov, v0)
17381 return true
17382 }
17383
17384
17385
17386 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17387 v_0 := b.Controls[0]
17388 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17389 break
17390 }
17391 l := v_0.Args[0]
17392 if l.Op != ssaop.OpARMADDshiftRAreg {
17393 break
17394 }
17395 z := l.Args[2]
17396 x := l.Args[0]
17397 y := l.Args[1]
17398 if !(l.Uses == 1) {
17399 break
17400 }
17401 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
17402 v0.AddArg3(x, y, z)
17403 b.ResetWithControl(block.BlockARMGEnoov, v0)
17404 return true
17405 }
17406
17407
17408
17409 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17410 v_0 := b.Controls[0]
17411 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17412 break
17413 }
17414 l := v_0.Args[0]
17415 if l.Op != ssaop.OpARMAND {
17416 break
17417 }
17418 _ = l.Args[1]
17419 l_0 := l.Args[0]
17420 l_1 := l.Args[1]
17421 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17422 x := l_0
17423 y := l_1
17424 if !(l.Uses == 1) {
17425 continue
17426 }
17427 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
17428 v0.AddArg2(x, y)
17429 b.ResetWithControl(block.BlockARMGEnoov, v0)
17430 return true
17431 }
17432 break
17433 }
17434
17435
17436
17437 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17438 v_0 := b.Controls[0]
17439 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17440 break
17441 }
17442 l := v_0.Args[0]
17443 if l.Op != ssaop.OpARMANDconst {
17444 break
17445 }
17446 c := ssa.AuxIntToInt32(l.AuxInt)
17447 x := l.Args[0]
17448 if !(l.Uses == 1) {
17449 break
17450 }
17451 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
17452 v0.AuxInt = ssa.Int32ToAuxInt(c)
17453 v0.AddArg(x)
17454 b.ResetWithControl(block.BlockARMGEnoov, v0)
17455 return true
17456 }
17457
17458
17459
17460 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17461 v_0 := b.Controls[0]
17462 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17463 break
17464 }
17465 l := v_0.Args[0]
17466 if l.Op != ssaop.OpARMANDshiftLL {
17467 break
17468 }
17469 c := ssa.AuxIntToInt32(l.AuxInt)
17470 y := l.Args[1]
17471 x := l.Args[0]
17472 if !(l.Uses == 1) {
17473 break
17474 }
17475 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
17476 v0.AuxInt = ssa.Int32ToAuxInt(c)
17477 v0.AddArg2(x, y)
17478 b.ResetWithControl(block.BlockARMGEnoov, v0)
17479 return true
17480 }
17481
17482
17483
17484 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17485 v_0 := b.Controls[0]
17486 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17487 break
17488 }
17489 l := v_0.Args[0]
17490 if l.Op != ssaop.OpARMANDshiftRL {
17491 break
17492 }
17493 c := ssa.AuxIntToInt32(l.AuxInt)
17494 y := l.Args[1]
17495 x := l.Args[0]
17496 if !(l.Uses == 1) {
17497 break
17498 }
17499 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
17500 v0.AuxInt = ssa.Int32ToAuxInt(c)
17501 v0.AddArg2(x, y)
17502 b.ResetWithControl(block.BlockARMGEnoov, v0)
17503 return true
17504 }
17505
17506
17507
17508 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17509 v_0 := b.Controls[0]
17510 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17511 break
17512 }
17513 l := v_0.Args[0]
17514 if l.Op != ssaop.OpARMANDshiftRA {
17515 break
17516 }
17517 c := ssa.AuxIntToInt32(l.AuxInt)
17518 y := l.Args[1]
17519 x := l.Args[0]
17520 if !(l.Uses == 1) {
17521 break
17522 }
17523 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
17524 v0.AuxInt = ssa.Int32ToAuxInt(c)
17525 v0.AddArg2(x, y)
17526 b.ResetWithControl(block.BlockARMGEnoov, v0)
17527 return true
17528 }
17529
17530
17531
17532 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17533 v_0 := b.Controls[0]
17534 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17535 break
17536 }
17537 l := v_0.Args[0]
17538 if l.Op != ssaop.OpARMANDshiftLLreg {
17539 break
17540 }
17541 z := l.Args[2]
17542 x := l.Args[0]
17543 y := l.Args[1]
17544 if !(l.Uses == 1) {
17545 break
17546 }
17547 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
17548 v0.AddArg3(x, y, z)
17549 b.ResetWithControl(block.BlockARMGEnoov, v0)
17550 return true
17551 }
17552
17553
17554
17555 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17556 v_0 := b.Controls[0]
17557 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17558 break
17559 }
17560 l := v_0.Args[0]
17561 if l.Op != ssaop.OpARMANDshiftRLreg {
17562 break
17563 }
17564 z := l.Args[2]
17565 x := l.Args[0]
17566 y := l.Args[1]
17567 if !(l.Uses == 1) {
17568 break
17569 }
17570 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
17571 v0.AddArg3(x, y, z)
17572 b.ResetWithControl(block.BlockARMGEnoov, v0)
17573 return true
17574 }
17575
17576
17577
17578 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17579 v_0 := b.Controls[0]
17580 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17581 break
17582 }
17583 l := v_0.Args[0]
17584 if l.Op != ssaop.OpARMANDshiftRAreg {
17585 break
17586 }
17587 z := l.Args[2]
17588 x := l.Args[0]
17589 y := l.Args[1]
17590 if !(l.Uses == 1) {
17591 break
17592 }
17593 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
17594 v0.AddArg3(x, y, z)
17595 b.ResetWithControl(block.BlockARMGEnoov, v0)
17596 return true
17597 }
17598
17599
17600
17601 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17602 v_0 := b.Controls[0]
17603 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17604 break
17605 }
17606 l := v_0.Args[0]
17607 if l.Op != ssaop.OpARMXOR {
17608 break
17609 }
17610 _ = l.Args[1]
17611 l_0 := l.Args[0]
17612 l_1 := l.Args[1]
17613 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17614 x := l_0
17615 y := l_1
17616 if !(l.Uses == 1) {
17617 continue
17618 }
17619 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
17620 v0.AddArg2(x, y)
17621 b.ResetWithControl(block.BlockARMGEnoov, v0)
17622 return true
17623 }
17624 break
17625 }
17626
17627
17628
17629 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17630 v_0 := b.Controls[0]
17631 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17632 break
17633 }
17634 l := v_0.Args[0]
17635 if l.Op != ssaop.OpARMXORconst {
17636 break
17637 }
17638 c := ssa.AuxIntToInt32(l.AuxInt)
17639 x := l.Args[0]
17640 if !(l.Uses == 1) {
17641 break
17642 }
17643 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
17644 v0.AuxInt = ssa.Int32ToAuxInt(c)
17645 v0.AddArg(x)
17646 b.ResetWithControl(block.BlockARMGEnoov, v0)
17647 return true
17648 }
17649
17650
17651
17652 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17653 v_0 := b.Controls[0]
17654 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17655 break
17656 }
17657 l := v_0.Args[0]
17658 if l.Op != ssaop.OpARMXORshiftLL {
17659 break
17660 }
17661 c := ssa.AuxIntToInt32(l.AuxInt)
17662 y := l.Args[1]
17663 x := l.Args[0]
17664 if !(l.Uses == 1) {
17665 break
17666 }
17667 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
17668 v0.AuxInt = ssa.Int32ToAuxInt(c)
17669 v0.AddArg2(x, y)
17670 b.ResetWithControl(block.BlockARMGEnoov, v0)
17671 return true
17672 }
17673
17674
17675
17676 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17677 v_0 := b.Controls[0]
17678 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17679 break
17680 }
17681 l := v_0.Args[0]
17682 if l.Op != ssaop.OpARMXORshiftRL {
17683 break
17684 }
17685 c := ssa.AuxIntToInt32(l.AuxInt)
17686 y := l.Args[1]
17687 x := l.Args[0]
17688 if !(l.Uses == 1) {
17689 break
17690 }
17691 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
17692 v0.AuxInt = ssa.Int32ToAuxInt(c)
17693 v0.AddArg2(x, y)
17694 b.ResetWithControl(block.BlockARMGEnoov, v0)
17695 return true
17696 }
17697
17698
17699
17700 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17701 v_0 := b.Controls[0]
17702 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17703 break
17704 }
17705 l := v_0.Args[0]
17706 if l.Op != ssaop.OpARMXORshiftRA {
17707 break
17708 }
17709 c := ssa.AuxIntToInt32(l.AuxInt)
17710 y := l.Args[1]
17711 x := l.Args[0]
17712 if !(l.Uses == 1) {
17713 break
17714 }
17715 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
17716 v0.AuxInt = ssa.Int32ToAuxInt(c)
17717 v0.AddArg2(x, y)
17718 b.ResetWithControl(block.BlockARMGEnoov, v0)
17719 return true
17720 }
17721
17722
17723
17724 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17725 v_0 := b.Controls[0]
17726 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17727 break
17728 }
17729 l := v_0.Args[0]
17730 if l.Op != ssaop.OpARMXORshiftLLreg {
17731 break
17732 }
17733 z := l.Args[2]
17734 x := l.Args[0]
17735 y := l.Args[1]
17736 if !(l.Uses == 1) {
17737 break
17738 }
17739 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
17740 v0.AddArg3(x, y, z)
17741 b.ResetWithControl(block.BlockARMGEnoov, v0)
17742 return true
17743 }
17744
17745
17746
17747 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17748 v_0 := b.Controls[0]
17749 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17750 break
17751 }
17752 l := v_0.Args[0]
17753 if l.Op != ssaop.OpARMXORshiftRLreg {
17754 break
17755 }
17756 z := l.Args[2]
17757 x := l.Args[0]
17758 y := l.Args[1]
17759 if !(l.Uses == 1) {
17760 break
17761 }
17762 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
17763 v0.AddArg3(x, y, z)
17764 b.ResetWithControl(block.BlockARMGEnoov, v0)
17765 return true
17766 }
17767
17768
17769
17770 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17771 v_0 := b.Controls[0]
17772 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17773 break
17774 }
17775 l := v_0.Args[0]
17776 if l.Op != ssaop.OpARMXORshiftRAreg {
17777 break
17778 }
17779 z := l.Args[2]
17780 x := l.Args[0]
17781 y := l.Args[1]
17782 if !(l.Uses == 1) {
17783 break
17784 }
17785 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
17786 v0.AddArg3(x, y, z)
17787 b.ResetWithControl(block.BlockARMGEnoov, v0)
17788 return true
17789 }
17790 case block.BlockARMGEnoov:
17791
17792
17793
17794 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17795 v_0 := b.Controls[0]
17796 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17797 if !(fc.GeNoov()) {
17798 break
17799 }
17800 b.Reset(block.BlockFirst)
17801 return true
17802 }
17803
17804
17805
17806 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17807 v_0 := b.Controls[0]
17808 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17809 if !(!fc.GeNoov()) {
17810 break
17811 }
17812 b.Reset(block.BlockFirst)
17813 b.SwapSuccessors()
17814 return true
17815 }
17816 case block.BlockARMGT:
17817
17818
17819
17820 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17821 v_0 := b.Controls[0]
17822 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17823 if !(fc.Gt()) {
17824 break
17825 }
17826 b.Reset(block.BlockFirst)
17827 return true
17828 }
17829
17830
17831
17832 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
17833 v_0 := b.Controls[0]
17834 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
17835 if !(!fc.Gt()) {
17836 break
17837 }
17838 b.Reset(block.BlockFirst)
17839 b.SwapSuccessors()
17840 return true
17841 }
17842
17843
17844 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
17845 v_0 := b.Controls[0]
17846 cmp := v_0.Args[0]
17847 b.ResetWithControl(block.BlockARMLT, cmp)
17848 return true
17849 }
17850
17851
17852
17853 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17854 v_0 := b.Controls[0]
17855 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17856 break
17857 }
17858 l := v_0.Args[0]
17859 if l.Op != ssaop.OpARMADD {
17860 break
17861 }
17862 _ = l.Args[1]
17863 l_0 := l.Args[0]
17864 l_1 := l.Args[1]
17865 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17866 x := l_0
17867 y := l_1
17868 if !(l.Uses == 1) {
17869 continue
17870 }
17871 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
17872 v0.AddArg2(x, y)
17873 b.ResetWithControl(block.BlockARMGTnoov, v0)
17874 return true
17875 }
17876 break
17877 }
17878
17879
17880
17881 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17882 v_0 := b.Controls[0]
17883 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17884 break
17885 }
17886 l := v_0.Args[0]
17887 if l.Op != ssaop.OpARMADDconst {
17888 break
17889 }
17890 c := ssa.AuxIntToInt32(l.AuxInt)
17891 x := l.Args[0]
17892 if !(l.Uses == 1) {
17893 break
17894 }
17895 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
17896 v0.AuxInt = ssa.Int32ToAuxInt(c)
17897 v0.AddArg(x)
17898 b.ResetWithControl(block.BlockARMGTnoov, v0)
17899 return true
17900 }
17901
17902
17903
17904 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17905 v_0 := b.Controls[0]
17906 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17907 break
17908 }
17909 l := v_0.Args[0]
17910 if l.Op != ssaop.OpARMADDshiftLL {
17911 break
17912 }
17913 c := ssa.AuxIntToInt32(l.AuxInt)
17914 y := l.Args[1]
17915 x := l.Args[0]
17916 if !(l.Uses == 1) {
17917 break
17918 }
17919 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
17920 v0.AuxInt = ssa.Int32ToAuxInt(c)
17921 v0.AddArg2(x, y)
17922 b.ResetWithControl(block.BlockARMGTnoov, v0)
17923 return true
17924 }
17925
17926
17927
17928 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17929 v_0 := b.Controls[0]
17930 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17931 break
17932 }
17933 l := v_0.Args[0]
17934 if l.Op != ssaop.OpARMADDshiftRL {
17935 break
17936 }
17937 c := ssa.AuxIntToInt32(l.AuxInt)
17938 y := l.Args[1]
17939 x := l.Args[0]
17940 if !(l.Uses == 1) {
17941 break
17942 }
17943 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
17944 v0.AuxInt = ssa.Int32ToAuxInt(c)
17945 v0.AddArg2(x, y)
17946 b.ResetWithControl(block.BlockARMGTnoov, v0)
17947 return true
17948 }
17949
17950
17951
17952 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17953 v_0 := b.Controls[0]
17954 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17955 break
17956 }
17957 l := v_0.Args[0]
17958 if l.Op != ssaop.OpARMADDshiftRA {
17959 break
17960 }
17961 c := ssa.AuxIntToInt32(l.AuxInt)
17962 y := l.Args[1]
17963 x := l.Args[0]
17964 if !(l.Uses == 1) {
17965 break
17966 }
17967 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
17968 v0.AuxInt = ssa.Int32ToAuxInt(c)
17969 v0.AddArg2(x, y)
17970 b.ResetWithControl(block.BlockARMGTnoov, v0)
17971 return true
17972 }
17973
17974
17975
17976 for b.Controls[0].Op == ssaop.OpARMCMPconst {
17977 v_0 := b.Controls[0]
17978 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
17979 break
17980 }
17981 l := v_0.Args[0]
17982 if l.Op != ssaop.OpARMADDshiftLLreg {
17983 break
17984 }
17985 z := l.Args[2]
17986 x := l.Args[0]
17987 y := l.Args[1]
17988 if !(l.Uses == 1) {
17989 break
17990 }
17991 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
17992 v0.AddArg3(x, y, z)
17993 b.ResetWithControl(block.BlockARMGTnoov, v0)
17994 return true
17995 }
17996
17997
17998
17999 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18000 v_0 := b.Controls[0]
18001 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18002 break
18003 }
18004 l := v_0.Args[0]
18005 if l.Op != ssaop.OpARMADDshiftRLreg {
18006 break
18007 }
18008 z := l.Args[2]
18009 x := l.Args[0]
18010 y := l.Args[1]
18011 if !(l.Uses == 1) {
18012 break
18013 }
18014 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
18015 v0.AddArg3(x, y, z)
18016 b.ResetWithControl(block.BlockARMGTnoov, v0)
18017 return true
18018 }
18019
18020
18021
18022 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18023 v_0 := b.Controls[0]
18024 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18025 break
18026 }
18027 l := v_0.Args[0]
18028 if l.Op != ssaop.OpARMADDshiftRAreg {
18029 break
18030 }
18031 z := l.Args[2]
18032 x := l.Args[0]
18033 y := l.Args[1]
18034 if !(l.Uses == 1) {
18035 break
18036 }
18037 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
18038 v0.AddArg3(x, y, z)
18039 b.ResetWithControl(block.BlockARMGTnoov, v0)
18040 return true
18041 }
18042
18043
18044
18045 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18046 v_0 := b.Controls[0]
18047 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18048 break
18049 }
18050 l := v_0.Args[0]
18051 if l.Op != ssaop.OpARMMULA {
18052 break
18053 }
18054 a := l.Args[2]
18055 x := l.Args[0]
18056 y := l.Args[1]
18057 if !(l.Uses == 1) {
18058 break
18059 }
18060 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
18061 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
18062 v1.AddArg2(x, y)
18063 v0.AddArg2(a, v1)
18064 b.ResetWithControl(block.BlockARMGTnoov, v0)
18065 return true
18066 }
18067
18068
18069
18070 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18071 v_0 := b.Controls[0]
18072 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18073 break
18074 }
18075 l := v_0.Args[0]
18076 if l.Op != ssaop.OpARMAND {
18077 break
18078 }
18079 _ = l.Args[1]
18080 l_0 := l.Args[0]
18081 l_1 := l.Args[1]
18082 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18083 x := l_0
18084 y := l_1
18085 if !(l.Uses == 1) {
18086 continue
18087 }
18088 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
18089 v0.AddArg2(x, y)
18090 b.ResetWithControl(block.BlockARMGTnoov, v0)
18091 return true
18092 }
18093 break
18094 }
18095
18096
18097
18098 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18099 v_0 := b.Controls[0]
18100 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18101 break
18102 }
18103 l := v_0.Args[0]
18104 if l.Op != ssaop.OpARMANDconst {
18105 break
18106 }
18107 c := ssa.AuxIntToInt32(l.AuxInt)
18108 x := l.Args[0]
18109 if !(l.Uses == 1) {
18110 break
18111 }
18112 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
18113 v0.AuxInt = ssa.Int32ToAuxInt(c)
18114 v0.AddArg(x)
18115 b.ResetWithControl(block.BlockARMGTnoov, v0)
18116 return true
18117 }
18118
18119
18120
18121 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18122 v_0 := b.Controls[0]
18123 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18124 break
18125 }
18126 l := v_0.Args[0]
18127 if l.Op != ssaop.OpARMANDshiftLL {
18128 break
18129 }
18130 c := ssa.AuxIntToInt32(l.AuxInt)
18131 y := l.Args[1]
18132 x := l.Args[0]
18133 if !(l.Uses == 1) {
18134 break
18135 }
18136 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
18137 v0.AuxInt = ssa.Int32ToAuxInt(c)
18138 v0.AddArg2(x, y)
18139 b.ResetWithControl(block.BlockARMGTnoov, v0)
18140 return true
18141 }
18142
18143
18144
18145 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18146 v_0 := b.Controls[0]
18147 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18148 break
18149 }
18150 l := v_0.Args[0]
18151 if l.Op != ssaop.OpARMANDshiftRL {
18152 break
18153 }
18154 c := ssa.AuxIntToInt32(l.AuxInt)
18155 y := l.Args[1]
18156 x := l.Args[0]
18157 if !(l.Uses == 1) {
18158 break
18159 }
18160 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
18161 v0.AuxInt = ssa.Int32ToAuxInt(c)
18162 v0.AddArg2(x, y)
18163 b.ResetWithControl(block.BlockARMGTnoov, v0)
18164 return true
18165 }
18166
18167
18168
18169 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18170 v_0 := b.Controls[0]
18171 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18172 break
18173 }
18174 l := v_0.Args[0]
18175 if l.Op != ssaop.OpARMANDshiftRA {
18176 break
18177 }
18178 c := ssa.AuxIntToInt32(l.AuxInt)
18179 y := l.Args[1]
18180 x := l.Args[0]
18181 if !(l.Uses == 1) {
18182 break
18183 }
18184 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
18185 v0.AuxInt = ssa.Int32ToAuxInt(c)
18186 v0.AddArg2(x, y)
18187 b.ResetWithControl(block.BlockARMGTnoov, v0)
18188 return true
18189 }
18190
18191
18192
18193 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18194 v_0 := b.Controls[0]
18195 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18196 break
18197 }
18198 l := v_0.Args[0]
18199 if l.Op != ssaop.OpARMANDshiftLLreg {
18200 break
18201 }
18202 z := l.Args[2]
18203 x := l.Args[0]
18204 y := l.Args[1]
18205 if !(l.Uses == 1) {
18206 break
18207 }
18208 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
18209 v0.AddArg3(x, y, z)
18210 b.ResetWithControl(block.BlockARMGTnoov, v0)
18211 return true
18212 }
18213
18214
18215
18216 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18217 v_0 := b.Controls[0]
18218 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18219 break
18220 }
18221 l := v_0.Args[0]
18222 if l.Op != ssaop.OpARMANDshiftRLreg {
18223 break
18224 }
18225 z := l.Args[2]
18226 x := l.Args[0]
18227 y := l.Args[1]
18228 if !(l.Uses == 1) {
18229 break
18230 }
18231 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
18232 v0.AddArg3(x, y, z)
18233 b.ResetWithControl(block.BlockARMGTnoov, v0)
18234 return true
18235 }
18236
18237
18238
18239 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18240 v_0 := b.Controls[0]
18241 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18242 break
18243 }
18244 l := v_0.Args[0]
18245 if l.Op != ssaop.OpARMANDshiftRAreg {
18246 break
18247 }
18248 z := l.Args[2]
18249 x := l.Args[0]
18250 y := l.Args[1]
18251 if !(l.Uses == 1) {
18252 break
18253 }
18254 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
18255 v0.AddArg3(x, y, z)
18256 b.ResetWithControl(block.BlockARMGTnoov, v0)
18257 return true
18258 }
18259
18260
18261
18262 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18263 v_0 := b.Controls[0]
18264 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18265 break
18266 }
18267 l := v_0.Args[0]
18268 if l.Op != ssaop.OpARMXOR {
18269 break
18270 }
18271 _ = l.Args[1]
18272 l_0 := l.Args[0]
18273 l_1 := l.Args[1]
18274 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18275 x := l_0
18276 y := l_1
18277 if !(l.Uses == 1) {
18278 continue
18279 }
18280 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
18281 v0.AddArg2(x, y)
18282 b.ResetWithControl(block.BlockARMGTnoov, v0)
18283 return true
18284 }
18285 break
18286 }
18287
18288
18289
18290 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18291 v_0 := b.Controls[0]
18292 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18293 break
18294 }
18295 l := v_0.Args[0]
18296 if l.Op != ssaop.OpARMXORconst {
18297 break
18298 }
18299 c := ssa.AuxIntToInt32(l.AuxInt)
18300 x := l.Args[0]
18301 if !(l.Uses == 1) {
18302 break
18303 }
18304 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
18305 v0.AuxInt = ssa.Int32ToAuxInt(c)
18306 v0.AddArg(x)
18307 b.ResetWithControl(block.BlockARMGTnoov, v0)
18308 return true
18309 }
18310
18311
18312
18313 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18314 v_0 := b.Controls[0]
18315 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18316 break
18317 }
18318 l := v_0.Args[0]
18319 if l.Op != ssaop.OpARMXORshiftLL {
18320 break
18321 }
18322 c := ssa.AuxIntToInt32(l.AuxInt)
18323 y := l.Args[1]
18324 x := l.Args[0]
18325 if !(l.Uses == 1) {
18326 break
18327 }
18328 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
18329 v0.AuxInt = ssa.Int32ToAuxInt(c)
18330 v0.AddArg2(x, y)
18331 b.ResetWithControl(block.BlockARMGTnoov, v0)
18332 return true
18333 }
18334
18335
18336
18337 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18338 v_0 := b.Controls[0]
18339 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18340 break
18341 }
18342 l := v_0.Args[0]
18343 if l.Op != ssaop.OpARMXORshiftRL {
18344 break
18345 }
18346 c := ssa.AuxIntToInt32(l.AuxInt)
18347 y := l.Args[1]
18348 x := l.Args[0]
18349 if !(l.Uses == 1) {
18350 break
18351 }
18352 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
18353 v0.AuxInt = ssa.Int32ToAuxInt(c)
18354 v0.AddArg2(x, y)
18355 b.ResetWithControl(block.BlockARMGTnoov, v0)
18356 return true
18357 }
18358
18359
18360
18361 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18362 v_0 := b.Controls[0]
18363 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18364 break
18365 }
18366 l := v_0.Args[0]
18367 if l.Op != ssaop.OpARMXORshiftRA {
18368 break
18369 }
18370 c := ssa.AuxIntToInt32(l.AuxInt)
18371 y := l.Args[1]
18372 x := l.Args[0]
18373 if !(l.Uses == 1) {
18374 break
18375 }
18376 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
18377 v0.AuxInt = ssa.Int32ToAuxInt(c)
18378 v0.AddArg2(x, y)
18379 b.ResetWithControl(block.BlockARMGTnoov, v0)
18380 return true
18381 }
18382
18383
18384
18385 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18386 v_0 := b.Controls[0]
18387 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18388 break
18389 }
18390 l := v_0.Args[0]
18391 if l.Op != ssaop.OpARMXORshiftLLreg {
18392 break
18393 }
18394 z := l.Args[2]
18395 x := l.Args[0]
18396 y := l.Args[1]
18397 if !(l.Uses == 1) {
18398 break
18399 }
18400 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
18401 v0.AddArg3(x, y, z)
18402 b.ResetWithControl(block.BlockARMGTnoov, v0)
18403 return true
18404 }
18405
18406
18407
18408 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18409 v_0 := b.Controls[0]
18410 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18411 break
18412 }
18413 l := v_0.Args[0]
18414 if l.Op != ssaop.OpARMXORshiftRLreg {
18415 break
18416 }
18417 z := l.Args[2]
18418 x := l.Args[0]
18419 y := l.Args[1]
18420 if !(l.Uses == 1) {
18421 break
18422 }
18423 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
18424 v0.AddArg3(x, y, z)
18425 b.ResetWithControl(block.BlockARMGTnoov, v0)
18426 return true
18427 }
18428
18429
18430
18431 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18432 v_0 := b.Controls[0]
18433 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18434 break
18435 }
18436 l := v_0.Args[0]
18437 if l.Op != ssaop.OpARMXORshiftRAreg {
18438 break
18439 }
18440 z := l.Args[2]
18441 x := l.Args[0]
18442 y := l.Args[1]
18443 if !(l.Uses == 1) {
18444 break
18445 }
18446 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
18447 v0.AddArg3(x, y, z)
18448 b.ResetWithControl(block.BlockARMGTnoov, v0)
18449 return true
18450 }
18451 case block.BlockARMGTnoov:
18452
18453
18454
18455 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
18456 v_0 := b.Controls[0]
18457 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
18458 if !(fc.GtNoov()) {
18459 break
18460 }
18461 b.Reset(block.BlockFirst)
18462 return true
18463 }
18464
18465
18466
18467 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
18468 v_0 := b.Controls[0]
18469 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
18470 if !(!fc.GtNoov()) {
18471 break
18472 }
18473 b.Reset(block.BlockFirst)
18474 b.SwapSuccessors()
18475 return true
18476 }
18477 case block.BlockIf:
18478
18479
18480 for b.Controls[0].Op == ssaop.OpARMEqual {
18481 v_0 := b.Controls[0]
18482 cc := v_0.Args[0]
18483 b.ResetWithControl(block.BlockARMEQ, cc)
18484 return true
18485 }
18486
18487
18488 for b.Controls[0].Op == ssaop.OpARMNotEqual {
18489 v_0 := b.Controls[0]
18490 cc := v_0.Args[0]
18491 b.ResetWithControl(block.BlockARMNE, cc)
18492 return true
18493 }
18494
18495
18496 for b.Controls[0].Op == ssaop.OpARMLessThan {
18497 v_0 := b.Controls[0]
18498 cc := v_0.Args[0]
18499 b.ResetWithControl(block.BlockARMLT, cc)
18500 return true
18501 }
18502
18503
18504 for b.Controls[0].Op == ssaop.OpARMLessThanU {
18505 v_0 := b.Controls[0]
18506 cc := v_0.Args[0]
18507 b.ResetWithControl(block.BlockARMULT, cc)
18508 return true
18509 }
18510
18511
18512 for b.Controls[0].Op == ssaop.OpARMLessEqual {
18513 v_0 := b.Controls[0]
18514 cc := v_0.Args[0]
18515 b.ResetWithControl(block.BlockARMLE, cc)
18516 return true
18517 }
18518
18519
18520 for b.Controls[0].Op == ssaop.OpARMLessEqualU {
18521 v_0 := b.Controls[0]
18522 cc := v_0.Args[0]
18523 b.ResetWithControl(block.BlockARMULE, cc)
18524 return true
18525 }
18526
18527
18528 for b.Controls[0].Op == ssaop.OpARMGreaterThan {
18529 v_0 := b.Controls[0]
18530 cc := v_0.Args[0]
18531 b.ResetWithControl(block.BlockARMGT, cc)
18532 return true
18533 }
18534
18535
18536 for b.Controls[0].Op == ssaop.OpARMGreaterThanU {
18537 v_0 := b.Controls[0]
18538 cc := v_0.Args[0]
18539 b.ResetWithControl(block.BlockARMUGT, cc)
18540 return true
18541 }
18542
18543
18544 for b.Controls[0].Op == ssaop.OpARMGreaterEqual {
18545 v_0 := b.Controls[0]
18546 cc := v_0.Args[0]
18547 b.ResetWithControl(block.BlockARMGE, cc)
18548 return true
18549 }
18550
18551
18552 for b.Controls[0].Op == ssaop.OpARMGreaterEqualU {
18553 v_0 := b.Controls[0]
18554 cc := v_0.Args[0]
18555 b.ResetWithControl(block.BlockARMUGE, cc)
18556 return true
18557 }
18558
18559
18560 for {
18561 cond := b.Controls[0]
18562 v0 := b.NewValue0(cond.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
18563 v0.AuxInt = ssa.Int32ToAuxInt(0)
18564 v0.AddArg(cond)
18565 b.ResetWithControl(block.BlockARMNE, v0)
18566 return true
18567 }
18568 case block.BlockARMLE:
18569
18570
18571
18572 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
18573 v_0 := b.Controls[0]
18574 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
18575 if !(fc.Le()) {
18576 break
18577 }
18578 b.Reset(block.BlockFirst)
18579 return true
18580 }
18581
18582
18583
18584 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
18585 v_0 := b.Controls[0]
18586 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
18587 if !(!fc.Le()) {
18588 break
18589 }
18590 b.Reset(block.BlockFirst)
18591 b.SwapSuccessors()
18592 return true
18593 }
18594
18595
18596 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
18597 v_0 := b.Controls[0]
18598 cmp := v_0.Args[0]
18599 b.ResetWithControl(block.BlockARMGE, cmp)
18600 return true
18601 }
18602
18603
18604
18605 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18606 v_0 := b.Controls[0]
18607 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18608 break
18609 }
18610 l := v_0.Args[0]
18611 if l.Op != ssaop.OpARMADD {
18612 break
18613 }
18614 _ = l.Args[1]
18615 l_0 := l.Args[0]
18616 l_1 := l.Args[1]
18617 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18618 x := l_0
18619 y := l_1
18620 if !(l.Uses == 1) {
18621 continue
18622 }
18623 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
18624 v0.AddArg2(x, y)
18625 b.ResetWithControl(block.BlockARMLEnoov, v0)
18626 return true
18627 }
18628 break
18629 }
18630
18631
18632
18633 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18634 v_0 := b.Controls[0]
18635 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18636 break
18637 }
18638 l := v_0.Args[0]
18639 if l.Op != ssaop.OpARMMULA {
18640 break
18641 }
18642 a := l.Args[2]
18643 x := l.Args[0]
18644 y := l.Args[1]
18645 if !(l.Uses == 1) {
18646 break
18647 }
18648 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
18649 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
18650 v1.AddArg2(x, y)
18651 v0.AddArg2(a, v1)
18652 b.ResetWithControl(block.BlockARMLEnoov, v0)
18653 return true
18654 }
18655
18656
18657
18658 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18659 v_0 := b.Controls[0]
18660 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18661 break
18662 }
18663 l := v_0.Args[0]
18664 if l.Op != ssaop.OpARMADDconst {
18665 break
18666 }
18667 c := ssa.AuxIntToInt32(l.AuxInt)
18668 x := l.Args[0]
18669 if !(l.Uses == 1) {
18670 break
18671 }
18672 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
18673 v0.AuxInt = ssa.Int32ToAuxInt(c)
18674 v0.AddArg(x)
18675 b.ResetWithControl(block.BlockARMLEnoov, v0)
18676 return true
18677 }
18678
18679
18680
18681 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18682 v_0 := b.Controls[0]
18683 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18684 break
18685 }
18686 l := v_0.Args[0]
18687 if l.Op != ssaop.OpARMADDshiftLL {
18688 break
18689 }
18690 c := ssa.AuxIntToInt32(l.AuxInt)
18691 y := l.Args[1]
18692 x := l.Args[0]
18693 if !(l.Uses == 1) {
18694 break
18695 }
18696 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
18697 v0.AuxInt = ssa.Int32ToAuxInt(c)
18698 v0.AddArg2(x, y)
18699 b.ResetWithControl(block.BlockARMLEnoov, v0)
18700 return true
18701 }
18702
18703
18704
18705 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18706 v_0 := b.Controls[0]
18707 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18708 break
18709 }
18710 l := v_0.Args[0]
18711 if l.Op != ssaop.OpARMADDshiftRL {
18712 break
18713 }
18714 c := ssa.AuxIntToInt32(l.AuxInt)
18715 y := l.Args[1]
18716 x := l.Args[0]
18717 if !(l.Uses == 1) {
18718 break
18719 }
18720 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
18721 v0.AuxInt = ssa.Int32ToAuxInt(c)
18722 v0.AddArg2(x, y)
18723 b.ResetWithControl(block.BlockARMLEnoov, v0)
18724 return true
18725 }
18726
18727
18728
18729 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18730 v_0 := b.Controls[0]
18731 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18732 break
18733 }
18734 l := v_0.Args[0]
18735 if l.Op != ssaop.OpARMADDshiftRA {
18736 break
18737 }
18738 c := ssa.AuxIntToInt32(l.AuxInt)
18739 y := l.Args[1]
18740 x := l.Args[0]
18741 if !(l.Uses == 1) {
18742 break
18743 }
18744 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
18745 v0.AuxInt = ssa.Int32ToAuxInt(c)
18746 v0.AddArg2(x, y)
18747 b.ResetWithControl(block.BlockARMLEnoov, v0)
18748 return true
18749 }
18750
18751
18752
18753 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18754 v_0 := b.Controls[0]
18755 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18756 break
18757 }
18758 l := v_0.Args[0]
18759 if l.Op != ssaop.OpARMADDshiftLLreg {
18760 break
18761 }
18762 z := l.Args[2]
18763 x := l.Args[0]
18764 y := l.Args[1]
18765 if !(l.Uses == 1) {
18766 break
18767 }
18768 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
18769 v0.AddArg3(x, y, z)
18770 b.ResetWithControl(block.BlockARMLEnoov, v0)
18771 return true
18772 }
18773
18774
18775
18776 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18777 v_0 := b.Controls[0]
18778 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18779 break
18780 }
18781 l := v_0.Args[0]
18782 if l.Op != ssaop.OpARMADDshiftRLreg {
18783 break
18784 }
18785 z := l.Args[2]
18786 x := l.Args[0]
18787 y := l.Args[1]
18788 if !(l.Uses == 1) {
18789 break
18790 }
18791 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
18792 v0.AddArg3(x, y, z)
18793 b.ResetWithControl(block.BlockARMLEnoov, v0)
18794 return true
18795 }
18796
18797
18798
18799 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18800 v_0 := b.Controls[0]
18801 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18802 break
18803 }
18804 l := v_0.Args[0]
18805 if l.Op != ssaop.OpARMADDshiftRAreg {
18806 break
18807 }
18808 z := l.Args[2]
18809 x := l.Args[0]
18810 y := l.Args[1]
18811 if !(l.Uses == 1) {
18812 break
18813 }
18814 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
18815 v0.AddArg3(x, y, z)
18816 b.ResetWithControl(block.BlockARMLEnoov, v0)
18817 return true
18818 }
18819
18820
18821
18822 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18823 v_0 := b.Controls[0]
18824 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18825 break
18826 }
18827 l := v_0.Args[0]
18828 if l.Op != ssaop.OpARMAND {
18829 break
18830 }
18831 _ = l.Args[1]
18832 l_0 := l.Args[0]
18833 l_1 := l.Args[1]
18834 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18835 x := l_0
18836 y := l_1
18837 if !(l.Uses == 1) {
18838 continue
18839 }
18840 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
18841 v0.AddArg2(x, y)
18842 b.ResetWithControl(block.BlockARMLEnoov, v0)
18843 return true
18844 }
18845 break
18846 }
18847
18848
18849
18850 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18851 v_0 := b.Controls[0]
18852 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18853 break
18854 }
18855 l := v_0.Args[0]
18856 if l.Op != ssaop.OpARMANDconst {
18857 break
18858 }
18859 c := ssa.AuxIntToInt32(l.AuxInt)
18860 x := l.Args[0]
18861 if !(l.Uses == 1) {
18862 break
18863 }
18864 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
18865 v0.AuxInt = ssa.Int32ToAuxInt(c)
18866 v0.AddArg(x)
18867 b.ResetWithControl(block.BlockARMLEnoov, v0)
18868 return true
18869 }
18870
18871
18872
18873 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18874 v_0 := b.Controls[0]
18875 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18876 break
18877 }
18878 l := v_0.Args[0]
18879 if l.Op != ssaop.OpARMANDshiftLL {
18880 break
18881 }
18882 c := ssa.AuxIntToInt32(l.AuxInt)
18883 y := l.Args[1]
18884 x := l.Args[0]
18885 if !(l.Uses == 1) {
18886 break
18887 }
18888 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
18889 v0.AuxInt = ssa.Int32ToAuxInt(c)
18890 v0.AddArg2(x, y)
18891 b.ResetWithControl(block.BlockARMLEnoov, v0)
18892 return true
18893 }
18894
18895
18896
18897 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18898 v_0 := b.Controls[0]
18899 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18900 break
18901 }
18902 l := v_0.Args[0]
18903 if l.Op != ssaop.OpARMANDshiftRL {
18904 break
18905 }
18906 c := ssa.AuxIntToInt32(l.AuxInt)
18907 y := l.Args[1]
18908 x := l.Args[0]
18909 if !(l.Uses == 1) {
18910 break
18911 }
18912 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
18913 v0.AuxInt = ssa.Int32ToAuxInt(c)
18914 v0.AddArg2(x, y)
18915 b.ResetWithControl(block.BlockARMLEnoov, v0)
18916 return true
18917 }
18918
18919
18920
18921 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18922 v_0 := b.Controls[0]
18923 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18924 break
18925 }
18926 l := v_0.Args[0]
18927 if l.Op != ssaop.OpARMANDshiftRA {
18928 break
18929 }
18930 c := ssa.AuxIntToInt32(l.AuxInt)
18931 y := l.Args[1]
18932 x := l.Args[0]
18933 if !(l.Uses == 1) {
18934 break
18935 }
18936 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
18937 v0.AuxInt = ssa.Int32ToAuxInt(c)
18938 v0.AddArg2(x, y)
18939 b.ResetWithControl(block.BlockARMLEnoov, v0)
18940 return true
18941 }
18942
18943
18944
18945 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18946 v_0 := b.Controls[0]
18947 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18948 break
18949 }
18950 l := v_0.Args[0]
18951 if l.Op != ssaop.OpARMANDshiftLLreg {
18952 break
18953 }
18954 z := l.Args[2]
18955 x := l.Args[0]
18956 y := l.Args[1]
18957 if !(l.Uses == 1) {
18958 break
18959 }
18960 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
18961 v0.AddArg3(x, y, z)
18962 b.ResetWithControl(block.BlockARMLEnoov, v0)
18963 return true
18964 }
18965
18966
18967
18968 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18969 v_0 := b.Controls[0]
18970 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18971 break
18972 }
18973 l := v_0.Args[0]
18974 if l.Op != ssaop.OpARMANDshiftRLreg {
18975 break
18976 }
18977 z := l.Args[2]
18978 x := l.Args[0]
18979 y := l.Args[1]
18980 if !(l.Uses == 1) {
18981 break
18982 }
18983 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
18984 v0.AddArg3(x, y, z)
18985 b.ResetWithControl(block.BlockARMLEnoov, v0)
18986 return true
18987 }
18988
18989
18990
18991 for b.Controls[0].Op == ssaop.OpARMCMPconst {
18992 v_0 := b.Controls[0]
18993 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
18994 break
18995 }
18996 l := v_0.Args[0]
18997 if l.Op != ssaop.OpARMANDshiftRAreg {
18998 break
18999 }
19000 z := l.Args[2]
19001 x := l.Args[0]
19002 y := l.Args[1]
19003 if !(l.Uses == 1) {
19004 break
19005 }
19006 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
19007 v0.AddArg3(x, y, z)
19008 b.ResetWithControl(block.BlockARMLEnoov, v0)
19009 return true
19010 }
19011
19012
19013
19014 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19015 v_0 := b.Controls[0]
19016 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19017 break
19018 }
19019 l := v_0.Args[0]
19020 if l.Op != ssaop.OpARMXOR {
19021 break
19022 }
19023 _ = l.Args[1]
19024 l_0 := l.Args[0]
19025 l_1 := l.Args[1]
19026 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19027 x := l_0
19028 y := l_1
19029 if !(l.Uses == 1) {
19030 continue
19031 }
19032 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
19033 v0.AddArg2(x, y)
19034 b.ResetWithControl(block.BlockARMLEnoov, v0)
19035 return true
19036 }
19037 break
19038 }
19039
19040
19041
19042 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19043 v_0 := b.Controls[0]
19044 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19045 break
19046 }
19047 l := v_0.Args[0]
19048 if l.Op != ssaop.OpARMXORconst {
19049 break
19050 }
19051 c := ssa.AuxIntToInt32(l.AuxInt)
19052 x := l.Args[0]
19053 if !(l.Uses == 1) {
19054 break
19055 }
19056 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
19057 v0.AuxInt = ssa.Int32ToAuxInt(c)
19058 v0.AddArg(x)
19059 b.ResetWithControl(block.BlockARMLEnoov, v0)
19060 return true
19061 }
19062
19063
19064
19065 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19066 v_0 := b.Controls[0]
19067 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19068 break
19069 }
19070 l := v_0.Args[0]
19071 if l.Op != ssaop.OpARMXORshiftLL {
19072 break
19073 }
19074 c := ssa.AuxIntToInt32(l.AuxInt)
19075 y := l.Args[1]
19076 x := l.Args[0]
19077 if !(l.Uses == 1) {
19078 break
19079 }
19080 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
19081 v0.AuxInt = ssa.Int32ToAuxInt(c)
19082 v0.AddArg2(x, y)
19083 b.ResetWithControl(block.BlockARMLEnoov, v0)
19084 return true
19085 }
19086
19087
19088
19089 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19090 v_0 := b.Controls[0]
19091 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19092 break
19093 }
19094 l := v_0.Args[0]
19095 if l.Op != ssaop.OpARMXORshiftRL {
19096 break
19097 }
19098 c := ssa.AuxIntToInt32(l.AuxInt)
19099 y := l.Args[1]
19100 x := l.Args[0]
19101 if !(l.Uses == 1) {
19102 break
19103 }
19104 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
19105 v0.AuxInt = ssa.Int32ToAuxInt(c)
19106 v0.AddArg2(x, y)
19107 b.ResetWithControl(block.BlockARMLEnoov, v0)
19108 return true
19109 }
19110
19111
19112
19113 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19114 v_0 := b.Controls[0]
19115 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19116 break
19117 }
19118 l := v_0.Args[0]
19119 if l.Op != ssaop.OpARMXORshiftRA {
19120 break
19121 }
19122 c := ssa.AuxIntToInt32(l.AuxInt)
19123 y := l.Args[1]
19124 x := l.Args[0]
19125 if !(l.Uses == 1) {
19126 break
19127 }
19128 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
19129 v0.AuxInt = ssa.Int32ToAuxInt(c)
19130 v0.AddArg2(x, y)
19131 b.ResetWithControl(block.BlockARMLEnoov, v0)
19132 return true
19133 }
19134
19135
19136
19137 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19138 v_0 := b.Controls[0]
19139 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19140 break
19141 }
19142 l := v_0.Args[0]
19143 if l.Op != ssaop.OpARMXORshiftLLreg {
19144 break
19145 }
19146 z := l.Args[2]
19147 x := l.Args[0]
19148 y := l.Args[1]
19149 if !(l.Uses == 1) {
19150 break
19151 }
19152 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
19153 v0.AddArg3(x, y, z)
19154 b.ResetWithControl(block.BlockARMLEnoov, v0)
19155 return true
19156 }
19157
19158
19159
19160 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19161 v_0 := b.Controls[0]
19162 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19163 break
19164 }
19165 l := v_0.Args[0]
19166 if l.Op != ssaop.OpARMXORshiftRLreg {
19167 break
19168 }
19169 z := l.Args[2]
19170 x := l.Args[0]
19171 y := l.Args[1]
19172 if !(l.Uses == 1) {
19173 break
19174 }
19175 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
19176 v0.AddArg3(x, y, z)
19177 b.ResetWithControl(block.BlockARMLEnoov, v0)
19178 return true
19179 }
19180
19181
19182
19183 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19184 v_0 := b.Controls[0]
19185 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19186 break
19187 }
19188 l := v_0.Args[0]
19189 if l.Op != ssaop.OpARMXORshiftRAreg {
19190 break
19191 }
19192 z := l.Args[2]
19193 x := l.Args[0]
19194 y := l.Args[1]
19195 if !(l.Uses == 1) {
19196 break
19197 }
19198 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
19199 v0.AddArg3(x, y, z)
19200 b.ResetWithControl(block.BlockARMLEnoov, v0)
19201 return true
19202 }
19203 case block.BlockARMLEnoov:
19204
19205
19206
19207 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19208 v_0 := b.Controls[0]
19209 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19210 if !(fc.LeNoov()) {
19211 break
19212 }
19213 b.Reset(block.BlockFirst)
19214 return true
19215 }
19216
19217
19218
19219 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19220 v_0 := b.Controls[0]
19221 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19222 if !(!fc.LeNoov()) {
19223 break
19224 }
19225 b.Reset(block.BlockFirst)
19226 b.SwapSuccessors()
19227 return true
19228 }
19229 case block.BlockARMLT:
19230
19231
19232
19233 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19234 v_0 := b.Controls[0]
19235 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19236 if !(fc.Lt()) {
19237 break
19238 }
19239 b.Reset(block.BlockFirst)
19240 return true
19241 }
19242
19243
19244
19245 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19246 v_0 := b.Controls[0]
19247 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19248 if !(!fc.Lt()) {
19249 break
19250 }
19251 b.Reset(block.BlockFirst)
19252 b.SwapSuccessors()
19253 return true
19254 }
19255
19256
19257 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
19258 v_0 := b.Controls[0]
19259 cmp := v_0.Args[0]
19260 b.ResetWithControl(block.BlockARMGT, cmp)
19261 return true
19262 }
19263
19264
19265
19266 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19267 v_0 := b.Controls[0]
19268 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19269 break
19270 }
19271 l := v_0.Args[0]
19272 if l.Op != ssaop.OpARMADD {
19273 break
19274 }
19275 _ = l.Args[1]
19276 l_0 := l.Args[0]
19277 l_1 := l.Args[1]
19278 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19279 x := l_0
19280 y := l_1
19281 if !(l.Uses == 1) {
19282 continue
19283 }
19284 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
19285 v0.AddArg2(x, y)
19286 b.ResetWithControl(block.BlockARMLTnoov, v0)
19287 return true
19288 }
19289 break
19290 }
19291
19292
19293
19294 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19295 v_0 := b.Controls[0]
19296 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19297 break
19298 }
19299 l := v_0.Args[0]
19300 if l.Op != ssaop.OpARMMULA {
19301 break
19302 }
19303 a := l.Args[2]
19304 x := l.Args[0]
19305 y := l.Args[1]
19306 if !(l.Uses == 1) {
19307 break
19308 }
19309 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
19310 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
19311 v1.AddArg2(x, y)
19312 v0.AddArg2(a, v1)
19313 b.ResetWithControl(block.BlockARMLTnoov, v0)
19314 return true
19315 }
19316
19317
19318
19319 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19320 v_0 := b.Controls[0]
19321 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19322 break
19323 }
19324 l := v_0.Args[0]
19325 if l.Op != ssaop.OpARMADDconst {
19326 break
19327 }
19328 c := ssa.AuxIntToInt32(l.AuxInt)
19329 x := l.Args[0]
19330 if !(l.Uses == 1) {
19331 break
19332 }
19333 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
19334 v0.AuxInt = ssa.Int32ToAuxInt(c)
19335 v0.AddArg(x)
19336 b.ResetWithControl(block.BlockARMLTnoov, v0)
19337 return true
19338 }
19339
19340
19341
19342 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19343 v_0 := b.Controls[0]
19344 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19345 break
19346 }
19347 l := v_0.Args[0]
19348 if l.Op != ssaop.OpARMADDshiftLL {
19349 break
19350 }
19351 c := ssa.AuxIntToInt32(l.AuxInt)
19352 y := l.Args[1]
19353 x := l.Args[0]
19354 if !(l.Uses == 1) {
19355 break
19356 }
19357 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
19358 v0.AuxInt = ssa.Int32ToAuxInt(c)
19359 v0.AddArg2(x, y)
19360 b.ResetWithControl(block.BlockARMLTnoov, v0)
19361 return true
19362 }
19363
19364
19365
19366 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19367 v_0 := b.Controls[0]
19368 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19369 break
19370 }
19371 l := v_0.Args[0]
19372 if l.Op != ssaop.OpARMADDshiftRL {
19373 break
19374 }
19375 c := ssa.AuxIntToInt32(l.AuxInt)
19376 y := l.Args[1]
19377 x := l.Args[0]
19378 if !(l.Uses == 1) {
19379 break
19380 }
19381 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
19382 v0.AuxInt = ssa.Int32ToAuxInt(c)
19383 v0.AddArg2(x, y)
19384 b.ResetWithControl(block.BlockARMLTnoov, v0)
19385 return true
19386 }
19387
19388
19389
19390 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19391 v_0 := b.Controls[0]
19392 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19393 break
19394 }
19395 l := v_0.Args[0]
19396 if l.Op != ssaop.OpARMADDshiftRA {
19397 break
19398 }
19399 c := ssa.AuxIntToInt32(l.AuxInt)
19400 y := l.Args[1]
19401 x := l.Args[0]
19402 if !(l.Uses == 1) {
19403 break
19404 }
19405 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
19406 v0.AuxInt = ssa.Int32ToAuxInt(c)
19407 v0.AddArg2(x, y)
19408 b.ResetWithControl(block.BlockARMLTnoov, v0)
19409 return true
19410 }
19411
19412
19413
19414 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19415 v_0 := b.Controls[0]
19416 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19417 break
19418 }
19419 l := v_0.Args[0]
19420 if l.Op != ssaop.OpARMADDshiftLLreg {
19421 break
19422 }
19423 z := l.Args[2]
19424 x := l.Args[0]
19425 y := l.Args[1]
19426 if !(l.Uses == 1) {
19427 break
19428 }
19429 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
19430 v0.AddArg3(x, y, z)
19431 b.ResetWithControl(block.BlockARMLTnoov, v0)
19432 return true
19433 }
19434
19435
19436
19437 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19438 v_0 := b.Controls[0]
19439 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19440 break
19441 }
19442 l := v_0.Args[0]
19443 if l.Op != ssaop.OpARMADDshiftRLreg {
19444 break
19445 }
19446 z := l.Args[2]
19447 x := l.Args[0]
19448 y := l.Args[1]
19449 if !(l.Uses == 1) {
19450 break
19451 }
19452 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
19453 v0.AddArg3(x, y, z)
19454 b.ResetWithControl(block.BlockARMLTnoov, v0)
19455 return true
19456 }
19457
19458
19459
19460 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19461 v_0 := b.Controls[0]
19462 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19463 break
19464 }
19465 l := v_0.Args[0]
19466 if l.Op != ssaop.OpARMADDshiftRAreg {
19467 break
19468 }
19469 z := l.Args[2]
19470 x := l.Args[0]
19471 y := l.Args[1]
19472 if !(l.Uses == 1) {
19473 break
19474 }
19475 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
19476 v0.AddArg3(x, y, z)
19477 b.ResetWithControl(block.BlockARMLTnoov, v0)
19478 return true
19479 }
19480
19481
19482
19483 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19484 v_0 := b.Controls[0]
19485 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19486 break
19487 }
19488 l := v_0.Args[0]
19489 if l.Op != ssaop.OpARMAND {
19490 break
19491 }
19492 _ = l.Args[1]
19493 l_0 := l.Args[0]
19494 l_1 := l.Args[1]
19495 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19496 x := l_0
19497 y := l_1
19498 if !(l.Uses == 1) {
19499 continue
19500 }
19501 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
19502 v0.AddArg2(x, y)
19503 b.ResetWithControl(block.BlockARMLTnoov, v0)
19504 return true
19505 }
19506 break
19507 }
19508
19509
19510
19511 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19512 v_0 := b.Controls[0]
19513 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19514 break
19515 }
19516 l := v_0.Args[0]
19517 if l.Op != ssaop.OpARMANDconst {
19518 break
19519 }
19520 c := ssa.AuxIntToInt32(l.AuxInt)
19521 x := l.Args[0]
19522 if !(l.Uses == 1) {
19523 break
19524 }
19525 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
19526 v0.AuxInt = ssa.Int32ToAuxInt(c)
19527 v0.AddArg(x)
19528 b.ResetWithControl(block.BlockARMLTnoov, v0)
19529 return true
19530 }
19531
19532
19533
19534 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19535 v_0 := b.Controls[0]
19536 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19537 break
19538 }
19539 l := v_0.Args[0]
19540 if l.Op != ssaop.OpARMANDshiftLL {
19541 break
19542 }
19543 c := ssa.AuxIntToInt32(l.AuxInt)
19544 y := l.Args[1]
19545 x := l.Args[0]
19546 if !(l.Uses == 1) {
19547 break
19548 }
19549 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
19550 v0.AuxInt = ssa.Int32ToAuxInt(c)
19551 v0.AddArg2(x, y)
19552 b.ResetWithControl(block.BlockARMLTnoov, v0)
19553 return true
19554 }
19555
19556
19557
19558 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19559 v_0 := b.Controls[0]
19560 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19561 break
19562 }
19563 l := v_0.Args[0]
19564 if l.Op != ssaop.OpARMANDshiftRL {
19565 break
19566 }
19567 c := ssa.AuxIntToInt32(l.AuxInt)
19568 y := l.Args[1]
19569 x := l.Args[0]
19570 if !(l.Uses == 1) {
19571 break
19572 }
19573 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
19574 v0.AuxInt = ssa.Int32ToAuxInt(c)
19575 v0.AddArg2(x, y)
19576 b.ResetWithControl(block.BlockARMLTnoov, v0)
19577 return true
19578 }
19579
19580
19581
19582 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19583 v_0 := b.Controls[0]
19584 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19585 break
19586 }
19587 l := v_0.Args[0]
19588 if l.Op != ssaop.OpARMANDshiftRA {
19589 break
19590 }
19591 c := ssa.AuxIntToInt32(l.AuxInt)
19592 y := l.Args[1]
19593 x := l.Args[0]
19594 if !(l.Uses == 1) {
19595 break
19596 }
19597 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
19598 v0.AuxInt = ssa.Int32ToAuxInt(c)
19599 v0.AddArg2(x, y)
19600 b.ResetWithControl(block.BlockARMLTnoov, v0)
19601 return true
19602 }
19603
19604
19605
19606 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19607 v_0 := b.Controls[0]
19608 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19609 break
19610 }
19611 l := v_0.Args[0]
19612 if l.Op != ssaop.OpARMANDshiftLLreg {
19613 break
19614 }
19615 z := l.Args[2]
19616 x := l.Args[0]
19617 y := l.Args[1]
19618 if !(l.Uses == 1) {
19619 break
19620 }
19621 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
19622 v0.AddArg3(x, y, z)
19623 b.ResetWithControl(block.BlockARMLTnoov, v0)
19624 return true
19625 }
19626
19627
19628
19629 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19630 v_0 := b.Controls[0]
19631 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19632 break
19633 }
19634 l := v_0.Args[0]
19635 if l.Op != ssaop.OpARMANDshiftRLreg {
19636 break
19637 }
19638 z := l.Args[2]
19639 x := l.Args[0]
19640 y := l.Args[1]
19641 if !(l.Uses == 1) {
19642 break
19643 }
19644 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
19645 v0.AddArg3(x, y, z)
19646 b.ResetWithControl(block.BlockARMLTnoov, v0)
19647 return true
19648 }
19649
19650
19651
19652 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19653 v_0 := b.Controls[0]
19654 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19655 break
19656 }
19657 l := v_0.Args[0]
19658 if l.Op != ssaop.OpARMANDshiftRAreg {
19659 break
19660 }
19661 z := l.Args[2]
19662 x := l.Args[0]
19663 y := l.Args[1]
19664 if !(l.Uses == 1) {
19665 break
19666 }
19667 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
19668 v0.AddArg3(x, y, z)
19669 b.ResetWithControl(block.BlockARMLTnoov, v0)
19670 return true
19671 }
19672
19673
19674
19675 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19676 v_0 := b.Controls[0]
19677 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19678 break
19679 }
19680 l := v_0.Args[0]
19681 if l.Op != ssaop.OpARMXOR {
19682 break
19683 }
19684 _ = l.Args[1]
19685 l_0 := l.Args[0]
19686 l_1 := l.Args[1]
19687 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19688 x := l_0
19689 y := l_1
19690 if !(l.Uses == 1) {
19691 continue
19692 }
19693 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
19694 v0.AddArg2(x, y)
19695 b.ResetWithControl(block.BlockARMLTnoov, v0)
19696 return true
19697 }
19698 break
19699 }
19700
19701
19702
19703 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19704 v_0 := b.Controls[0]
19705 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19706 break
19707 }
19708 l := v_0.Args[0]
19709 if l.Op != ssaop.OpARMXORconst {
19710 break
19711 }
19712 c := ssa.AuxIntToInt32(l.AuxInt)
19713 x := l.Args[0]
19714 if !(l.Uses == 1) {
19715 break
19716 }
19717 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
19718 v0.AuxInt = ssa.Int32ToAuxInt(c)
19719 v0.AddArg(x)
19720 b.ResetWithControl(block.BlockARMLTnoov, v0)
19721 return true
19722 }
19723
19724
19725
19726 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19727 v_0 := b.Controls[0]
19728 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19729 break
19730 }
19731 l := v_0.Args[0]
19732 if l.Op != ssaop.OpARMXORshiftLL {
19733 break
19734 }
19735 c := ssa.AuxIntToInt32(l.AuxInt)
19736 y := l.Args[1]
19737 x := l.Args[0]
19738 if !(l.Uses == 1) {
19739 break
19740 }
19741 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
19742 v0.AuxInt = ssa.Int32ToAuxInt(c)
19743 v0.AddArg2(x, y)
19744 b.ResetWithControl(block.BlockARMLTnoov, v0)
19745 return true
19746 }
19747
19748
19749
19750 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19751 v_0 := b.Controls[0]
19752 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19753 break
19754 }
19755 l := v_0.Args[0]
19756 if l.Op != ssaop.OpARMXORshiftRL {
19757 break
19758 }
19759 c := ssa.AuxIntToInt32(l.AuxInt)
19760 y := l.Args[1]
19761 x := l.Args[0]
19762 if !(l.Uses == 1) {
19763 break
19764 }
19765 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
19766 v0.AuxInt = ssa.Int32ToAuxInt(c)
19767 v0.AddArg2(x, y)
19768 b.ResetWithControl(block.BlockARMLTnoov, v0)
19769 return true
19770 }
19771
19772
19773
19774 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19775 v_0 := b.Controls[0]
19776 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19777 break
19778 }
19779 l := v_0.Args[0]
19780 if l.Op != ssaop.OpARMXORshiftRA {
19781 break
19782 }
19783 c := ssa.AuxIntToInt32(l.AuxInt)
19784 y := l.Args[1]
19785 x := l.Args[0]
19786 if !(l.Uses == 1) {
19787 break
19788 }
19789 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
19790 v0.AuxInt = ssa.Int32ToAuxInt(c)
19791 v0.AddArg2(x, y)
19792 b.ResetWithControl(block.BlockARMLTnoov, v0)
19793 return true
19794 }
19795
19796
19797
19798 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19799 v_0 := b.Controls[0]
19800 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19801 break
19802 }
19803 l := v_0.Args[0]
19804 if l.Op != ssaop.OpARMXORshiftLLreg {
19805 break
19806 }
19807 z := l.Args[2]
19808 x := l.Args[0]
19809 y := l.Args[1]
19810 if !(l.Uses == 1) {
19811 break
19812 }
19813 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
19814 v0.AddArg3(x, y, z)
19815 b.ResetWithControl(block.BlockARMLTnoov, v0)
19816 return true
19817 }
19818
19819
19820
19821 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19822 v_0 := b.Controls[0]
19823 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19824 break
19825 }
19826 l := v_0.Args[0]
19827 if l.Op != ssaop.OpARMXORshiftRLreg {
19828 break
19829 }
19830 z := l.Args[2]
19831 x := l.Args[0]
19832 y := l.Args[1]
19833 if !(l.Uses == 1) {
19834 break
19835 }
19836 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
19837 v0.AddArg3(x, y, z)
19838 b.ResetWithControl(block.BlockARMLTnoov, v0)
19839 return true
19840 }
19841
19842
19843
19844 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19845 v_0 := b.Controls[0]
19846 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19847 break
19848 }
19849 l := v_0.Args[0]
19850 if l.Op != ssaop.OpARMXORshiftRAreg {
19851 break
19852 }
19853 z := l.Args[2]
19854 x := l.Args[0]
19855 y := l.Args[1]
19856 if !(l.Uses == 1) {
19857 break
19858 }
19859 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
19860 v0.AddArg3(x, y, z)
19861 b.ResetWithControl(block.BlockARMLTnoov, v0)
19862 return true
19863 }
19864 case block.BlockARMLTnoov:
19865
19866
19867
19868 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19869 v_0 := b.Controls[0]
19870 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19871 if !(fc.LtNoov()) {
19872 break
19873 }
19874 b.Reset(block.BlockFirst)
19875 return true
19876 }
19877
19878
19879
19880 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
19881 v_0 := b.Controls[0]
19882 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
19883 if !(!fc.LtNoov()) {
19884 break
19885 }
19886 b.Reset(block.BlockFirst)
19887 b.SwapSuccessors()
19888 return true
19889 }
19890 case block.BlockARMNE:
19891
19892
19893 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19894 v_0 := b.Controls[0]
19895 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19896 break
19897 }
19898 v_0_0 := v_0.Args[0]
19899 if v_0_0.Op != ssaop.OpARMEqual {
19900 break
19901 }
19902 cc := v_0_0.Args[0]
19903 b.ResetWithControl(block.BlockARMEQ, cc)
19904 return true
19905 }
19906
19907
19908 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19909 v_0 := b.Controls[0]
19910 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19911 break
19912 }
19913 v_0_0 := v_0.Args[0]
19914 if v_0_0.Op != ssaop.OpARMNotEqual {
19915 break
19916 }
19917 cc := v_0_0.Args[0]
19918 b.ResetWithControl(block.BlockARMNE, cc)
19919 return true
19920 }
19921
19922
19923 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19924 v_0 := b.Controls[0]
19925 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19926 break
19927 }
19928 v_0_0 := v_0.Args[0]
19929 if v_0_0.Op != ssaop.OpARMLessThan {
19930 break
19931 }
19932 cc := v_0_0.Args[0]
19933 b.ResetWithControl(block.BlockARMLT, cc)
19934 return true
19935 }
19936
19937
19938 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19939 v_0 := b.Controls[0]
19940 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19941 break
19942 }
19943 v_0_0 := v_0.Args[0]
19944 if v_0_0.Op != ssaop.OpARMLessThanU {
19945 break
19946 }
19947 cc := v_0_0.Args[0]
19948 b.ResetWithControl(block.BlockARMULT, cc)
19949 return true
19950 }
19951
19952
19953 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19954 v_0 := b.Controls[0]
19955 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19956 break
19957 }
19958 v_0_0 := v_0.Args[0]
19959 if v_0_0.Op != ssaop.OpARMLessEqual {
19960 break
19961 }
19962 cc := v_0_0.Args[0]
19963 b.ResetWithControl(block.BlockARMLE, cc)
19964 return true
19965 }
19966
19967
19968 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19969 v_0 := b.Controls[0]
19970 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19971 break
19972 }
19973 v_0_0 := v_0.Args[0]
19974 if v_0_0.Op != ssaop.OpARMLessEqualU {
19975 break
19976 }
19977 cc := v_0_0.Args[0]
19978 b.ResetWithControl(block.BlockARMULE, cc)
19979 return true
19980 }
19981
19982
19983 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19984 v_0 := b.Controls[0]
19985 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
19986 break
19987 }
19988 v_0_0 := v_0.Args[0]
19989 if v_0_0.Op != ssaop.OpARMGreaterThan {
19990 break
19991 }
19992 cc := v_0_0.Args[0]
19993 b.ResetWithControl(block.BlockARMGT, cc)
19994 return true
19995 }
19996
19997
19998 for b.Controls[0].Op == ssaop.OpARMCMPconst {
19999 v_0 := b.Controls[0]
20000 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20001 break
20002 }
20003 v_0_0 := v_0.Args[0]
20004 if v_0_0.Op != ssaop.OpARMGreaterThanU {
20005 break
20006 }
20007 cc := v_0_0.Args[0]
20008 b.ResetWithControl(block.BlockARMUGT, cc)
20009 return true
20010 }
20011
20012
20013 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20014 v_0 := b.Controls[0]
20015 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20016 break
20017 }
20018 v_0_0 := v_0.Args[0]
20019 if v_0_0.Op != ssaop.OpARMGreaterEqual {
20020 break
20021 }
20022 cc := v_0_0.Args[0]
20023 b.ResetWithControl(block.BlockARMGE, cc)
20024 return true
20025 }
20026
20027
20028 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20029 v_0 := b.Controls[0]
20030 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20031 break
20032 }
20033 v_0_0 := v_0.Args[0]
20034 if v_0_0.Op != ssaop.OpARMGreaterEqualU {
20035 break
20036 }
20037 cc := v_0_0.Args[0]
20038 b.ResetWithControl(block.BlockARMUGE, cc)
20039 return true
20040 }
20041
20042
20043
20044 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20045 v_0 := b.Controls[0]
20046 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20047 if !(fc.Ne()) {
20048 break
20049 }
20050 b.Reset(block.BlockFirst)
20051 return true
20052 }
20053
20054
20055
20056 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20057 v_0 := b.Controls[0]
20058 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20059 if !(!fc.Ne()) {
20060 break
20061 }
20062 b.Reset(block.BlockFirst)
20063 b.SwapSuccessors()
20064 return true
20065 }
20066
20067
20068 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
20069 v_0 := b.Controls[0]
20070 cmp := v_0.Args[0]
20071 b.ResetWithControl(block.BlockARMNE, cmp)
20072 return true
20073 }
20074
20075
20076 for b.Controls[0].Op == ssaop.OpARMCMP {
20077 v_0 := b.Controls[0]
20078 _ = v_0.Args[1]
20079 x := v_0.Args[0]
20080 v_0_1 := v_0.Args[1]
20081 if v_0_1.Op != ssaop.OpARMRSBconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 {
20082 break
20083 }
20084 y := v_0_1.Args[0]
20085 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
20086 v0.AddArg2(x, y)
20087 b.ResetWithControl(block.BlockARMNE, v0)
20088 return true
20089 }
20090
20091
20092 for b.Controls[0].Op == ssaop.OpARMCMN {
20093 v_0 := b.Controls[0]
20094 _ = v_0.Args[1]
20095 v_0_0 := v_0.Args[0]
20096 v_0_1 := v_0.Args[1]
20097 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
20098 x := v_0_0
20099 if v_0_1.Op != ssaop.OpARMRSBconst || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 {
20100 continue
20101 }
20102 y := v_0_1.Args[0]
20103 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
20104 v0.AddArg2(x, y)
20105 b.ResetWithControl(block.BlockARMNE, v0)
20106 return true
20107 }
20108 break
20109 }
20110
20111
20112
20113 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20114 v_0 := b.Controls[0]
20115 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20116 break
20117 }
20118 l := v_0.Args[0]
20119 if l.Op != ssaop.OpARMSUB {
20120 break
20121 }
20122 y := l.Args[1]
20123 x := l.Args[0]
20124 if !(l.Uses == 1) {
20125 break
20126 }
20127 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
20128 v0.AddArg2(x, y)
20129 b.ResetWithControl(block.BlockARMNE, v0)
20130 return true
20131 }
20132
20133
20134
20135 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20136 v_0 := b.Controls[0]
20137 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20138 break
20139 }
20140 l := v_0.Args[0]
20141 if l.Op != ssaop.OpARMMULS {
20142 break
20143 }
20144 a := l.Args[2]
20145 x := l.Args[0]
20146 y := l.Args[1]
20147 if !(l.Uses == 1) {
20148 break
20149 }
20150 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMP, types.TypeFlags)
20151 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
20152 v1.AddArg2(x, y)
20153 v0.AddArg2(a, v1)
20154 b.ResetWithControl(block.BlockARMNE, v0)
20155 return true
20156 }
20157
20158
20159
20160 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20161 v_0 := b.Controls[0]
20162 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20163 break
20164 }
20165 l := v_0.Args[0]
20166 if l.Op != ssaop.OpARMSUBconst {
20167 break
20168 }
20169 c := ssa.AuxIntToInt32(l.AuxInt)
20170 x := l.Args[0]
20171 if !(l.Uses == 1) {
20172 break
20173 }
20174 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPconst, types.TypeFlags)
20175 v0.AuxInt = ssa.Int32ToAuxInt(c)
20176 v0.AddArg(x)
20177 b.ResetWithControl(block.BlockARMNE, v0)
20178 return true
20179 }
20180
20181
20182
20183 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20184 v_0 := b.Controls[0]
20185 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20186 break
20187 }
20188 l := v_0.Args[0]
20189 if l.Op != ssaop.OpARMSUBshiftLL {
20190 break
20191 }
20192 c := ssa.AuxIntToInt32(l.AuxInt)
20193 y := l.Args[1]
20194 x := l.Args[0]
20195 if !(l.Uses == 1) {
20196 break
20197 }
20198 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftLL, types.TypeFlags)
20199 v0.AuxInt = ssa.Int32ToAuxInt(c)
20200 v0.AddArg2(x, y)
20201 b.ResetWithControl(block.BlockARMNE, v0)
20202 return true
20203 }
20204
20205
20206
20207 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20208 v_0 := b.Controls[0]
20209 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20210 break
20211 }
20212 l := v_0.Args[0]
20213 if l.Op != ssaop.OpARMSUBshiftRL {
20214 break
20215 }
20216 c := ssa.AuxIntToInt32(l.AuxInt)
20217 y := l.Args[1]
20218 x := l.Args[0]
20219 if !(l.Uses == 1) {
20220 break
20221 }
20222 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRL, types.TypeFlags)
20223 v0.AuxInt = ssa.Int32ToAuxInt(c)
20224 v0.AddArg2(x, y)
20225 b.ResetWithControl(block.BlockARMNE, v0)
20226 return true
20227 }
20228
20229
20230
20231 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20232 v_0 := b.Controls[0]
20233 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20234 break
20235 }
20236 l := v_0.Args[0]
20237 if l.Op != ssaop.OpARMSUBshiftRA {
20238 break
20239 }
20240 c := ssa.AuxIntToInt32(l.AuxInt)
20241 y := l.Args[1]
20242 x := l.Args[0]
20243 if !(l.Uses == 1) {
20244 break
20245 }
20246 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRA, types.TypeFlags)
20247 v0.AuxInt = ssa.Int32ToAuxInt(c)
20248 v0.AddArg2(x, y)
20249 b.ResetWithControl(block.BlockARMNE, v0)
20250 return true
20251 }
20252
20253
20254
20255 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20256 v_0 := b.Controls[0]
20257 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20258 break
20259 }
20260 l := v_0.Args[0]
20261 if l.Op != ssaop.OpARMSUBshiftLLreg {
20262 break
20263 }
20264 z := l.Args[2]
20265 x := l.Args[0]
20266 y := l.Args[1]
20267 if !(l.Uses == 1) {
20268 break
20269 }
20270 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftLLreg, types.TypeFlags)
20271 v0.AddArg3(x, y, z)
20272 b.ResetWithControl(block.BlockARMNE, v0)
20273 return true
20274 }
20275
20276
20277
20278 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20279 v_0 := b.Controls[0]
20280 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20281 break
20282 }
20283 l := v_0.Args[0]
20284 if l.Op != ssaop.OpARMSUBshiftRLreg {
20285 break
20286 }
20287 z := l.Args[2]
20288 x := l.Args[0]
20289 y := l.Args[1]
20290 if !(l.Uses == 1) {
20291 break
20292 }
20293 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRLreg, types.TypeFlags)
20294 v0.AddArg3(x, y, z)
20295 b.ResetWithControl(block.BlockARMNE, v0)
20296 return true
20297 }
20298
20299
20300
20301 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20302 v_0 := b.Controls[0]
20303 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20304 break
20305 }
20306 l := v_0.Args[0]
20307 if l.Op != ssaop.OpARMSUBshiftRAreg {
20308 break
20309 }
20310 z := l.Args[2]
20311 x := l.Args[0]
20312 y := l.Args[1]
20313 if !(l.Uses == 1) {
20314 break
20315 }
20316 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMPshiftRAreg, types.TypeFlags)
20317 v0.AddArg3(x, y, z)
20318 b.ResetWithControl(block.BlockARMNE, v0)
20319 return true
20320 }
20321
20322
20323
20324 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20325 v_0 := b.Controls[0]
20326 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20327 break
20328 }
20329 l := v_0.Args[0]
20330 if l.Op != ssaop.OpARMADD {
20331 break
20332 }
20333 _ = l.Args[1]
20334 l_0 := l.Args[0]
20335 l_1 := l.Args[1]
20336 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20337 x := l_0
20338 y := l_1
20339 if !(l.Uses == 1) {
20340 continue
20341 }
20342 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
20343 v0.AddArg2(x, y)
20344 b.ResetWithControl(block.BlockARMNE, v0)
20345 return true
20346 }
20347 break
20348 }
20349
20350
20351
20352 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20353 v_0 := b.Controls[0]
20354 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20355 break
20356 }
20357 l := v_0.Args[0]
20358 if l.Op != ssaop.OpARMMULA {
20359 break
20360 }
20361 a := l.Args[2]
20362 x := l.Args[0]
20363 y := l.Args[1]
20364 if !(l.Uses == 1) {
20365 break
20366 }
20367 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMN, types.TypeFlags)
20368 v1 := b.NewValue0(v_0.Pos, ssaop.OpARMMUL, x.Type)
20369 v1.AddArg2(x, y)
20370 v0.AddArg2(a, v1)
20371 b.ResetWithControl(block.BlockARMNE, v0)
20372 return true
20373 }
20374
20375
20376
20377 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20378 v_0 := b.Controls[0]
20379 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20380 break
20381 }
20382 l := v_0.Args[0]
20383 if l.Op != ssaop.OpARMADDconst {
20384 break
20385 }
20386 c := ssa.AuxIntToInt32(l.AuxInt)
20387 x := l.Args[0]
20388 if !(l.Uses == 1) {
20389 break
20390 }
20391 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNconst, types.TypeFlags)
20392 v0.AuxInt = ssa.Int32ToAuxInt(c)
20393 v0.AddArg(x)
20394 b.ResetWithControl(block.BlockARMNE, v0)
20395 return true
20396 }
20397
20398
20399
20400 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20401 v_0 := b.Controls[0]
20402 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20403 break
20404 }
20405 l := v_0.Args[0]
20406 if l.Op != ssaop.OpARMADDshiftLL {
20407 break
20408 }
20409 c := ssa.AuxIntToInt32(l.AuxInt)
20410 y := l.Args[1]
20411 x := l.Args[0]
20412 if !(l.Uses == 1) {
20413 break
20414 }
20415 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLL, types.TypeFlags)
20416 v0.AuxInt = ssa.Int32ToAuxInt(c)
20417 v0.AddArg2(x, y)
20418 b.ResetWithControl(block.BlockARMNE, v0)
20419 return true
20420 }
20421
20422
20423
20424 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20425 v_0 := b.Controls[0]
20426 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20427 break
20428 }
20429 l := v_0.Args[0]
20430 if l.Op != ssaop.OpARMADDshiftRL {
20431 break
20432 }
20433 c := ssa.AuxIntToInt32(l.AuxInt)
20434 y := l.Args[1]
20435 x := l.Args[0]
20436 if !(l.Uses == 1) {
20437 break
20438 }
20439 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRL, types.TypeFlags)
20440 v0.AuxInt = ssa.Int32ToAuxInt(c)
20441 v0.AddArg2(x, y)
20442 b.ResetWithControl(block.BlockARMNE, v0)
20443 return true
20444 }
20445
20446
20447
20448 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20449 v_0 := b.Controls[0]
20450 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20451 break
20452 }
20453 l := v_0.Args[0]
20454 if l.Op != ssaop.OpARMADDshiftRA {
20455 break
20456 }
20457 c := ssa.AuxIntToInt32(l.AuxInt)
20458 y := l.Args[1]
20459 x := l.Args[0]
20460 if !(l.Uses == 1) {
20461 break
20462 }
20463 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRA, types.TypeFlags)
20464 v0.AuxInt = ssa.Int32ToAuxInt(c)
20465 v0.AddArg2(x, y)
20466 b.ResetWithControl(block.BlockARMNE, v0)
20467 return true
20468 }
20469
20470
20471
20472 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20473 v_0 := b.Controls[0]
20474 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20475 break
20476 }
20477 l := v_0.Args[0]
20478 if l.Op != ssaop.OpARMADDshiftLLreg {
20479 break
20480 }
20481 z := l.Args[2]
20482 x := l.Args[0]
20483 y := l.Args[1]
20484 if !(l.Uses == 1) {
20485 break
20486 }
20487 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftLLreg, types.TypeFlags)
20488 v0.AddArg3(x, y, z)
20489 b.ResetWithControl(block.BlockARMNE, v0)
20490 return true
20491 }
20492
20493
20494
20495 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20496 v_0 := b.Controls[0]
20497 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20498 break
20499 }
20500 l := v_0.Args[0]
20501 if l.Op != ssaop.OpARMADDshiftRLreg {
20502 break
20503 }
20504 z := l.Args[2]
20505 x := l.Args[0]
20506 y := l.Args[1]
20507 if !(l.Uses == 1) {
20508 break
20509 }
20510 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRLreg, types.TypeFlags)
20511 v0.AddArg3(x, y, z)
20512 b.ResetWithControl(block.BlockARMNE, v0)
20513 return true
20514 }
20515
20516
20517
20518 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20519 v_0 := b.Controls[0]
20520 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20521 break
20522 }
20523 l := v_0.Args[0]
20524 if l.Op != ssaop.OpARMADDshiftRAreg {
20525 break
20526 }
20527 z := l.Args[2]
20528 x := l.Args[0]
20529 y := l.Args[1]
20530 if !(l.Uses == 1) {
20531 break
20532 }
20533 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMCMNshiftRAreg, types.TypeFlags)
20534 v0.AddArg3(x, y, z)
20535 b.ResetWithControl(block.BlockARMNE, v0)
20536 return true
20537 }
20538
20539
20540
20541 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20542 v_0 := b.Controls[0]
20543 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20544 break
20545 }
20546 l := v_0.Args[0]
20547 if l.Op != ssaop.OpARMAND {
20548 break
20549 }
20550 _ = l.Args[1]
20551 l_0 := l.Args[0]
20552 l_1 := l.Args[1]
20553 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20554 x := l_0
20555 y := l_1
20556 if !(l.Uses == 1) {
20557 continue
20558 }
20559 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTST, types.TypeFlags)
20560 v0.AddArg2(x, y)
20561 b.ResetWithControl(block.BlockARMNE, v0)
20562 return true
20563 }
20564 break
20565 }
20566
20567
20568
20569 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20570 v_0 := b.Controls[0]
20571 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20572 break
20573 }
20574 l := v_0.Args[0]
20575 if l.Op != ssaop.OpARMANDconst {
20576 break
20577 }
20578 c := ssa.AuxIntToInt32(l.AuxInt)
20579 x := l.Args[0]
20580 if !(l.Uses == 1) {
20581 break
20582 }
20583 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTconst, types.TypeFlags)
20584 v0.AuxInt = ssa.Int32ToAuxInt(c)
20585 v0.AddArg(x)
20586 b.ResetWithControl(block.BlockARMNE, v0)
20587 return true
20588 }
20589
20590
20591
20592 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20593 v_0 := b.Controls[0]
20594 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20595 break
20596 }
20597 l := v_0.Args[0]
20598 if l.Op != ssaop.OpARMANDshiftLL {
20599 break
20600 }
20601 c := ssa.AuxIntToInt32(l.AuxInt)
20602 y := l.Args[1]
20603 x := l.Args[0]
20604 if !(l.Uses == 1) {
20605 break
20606 }
20607 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLL, types.TypeFlags)
20608 v0.AuxInt = ssa.Int32ToAuxInt(c)
20609 v0.AddArg2(x, y)
20610 b.ResetWithControl(block.BlockARMNE, v0)
20611 return true
20612 }
20613
20614
20615
20616 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20617 v_0 := b.Controls[0]
20618 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20619 break
20620 }
20621 l := v_0.Args[0]
20622 if l.Op != ssaop.OpARMANDshiftRL {
20623 break
20624 }
20625 c := ssa.AuxIntToInt32(l.AuxInt)
20626 y := l.Args[1]
20627 x := l.Args[0]
20628 if !(l.Uses == 1) {
20629 break
20630 }
20631 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRL, types.TypeFlags)
20632 v0.AuxInt = ssa.Int32ToAuxInt(c)
20633 v0.AddArg2(x, y)
20634 b.ResetWithControl(block.BlockARMNE, v0)
20635 return true
20636 }
20637
20638
20639
20640 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20641 v_0 := b.Controls[0]
20642 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20643 break
20644 }
20645 l := v_0.Args[0]
20646 if l.Op != ssaop.OpARMANDshiftRA {
20647 break
20648 }
20649 c := ssa.AuxIntToInt32(l.AuxInt)
20650 y := l.Args[1]
20651 x := l.Args[0]
20652 if !(l.Uses == 1) {
20653 break
20654 }
20655 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRA, types.TypeFlags)
20656 v0.AuxInt = ssa.Int32ToAuxInt(c)
20657 v0.AddArg2(x, y)
20658 b.ResetWithControl(block.BlockARMNE, v0)
20659 return true
20660 }
20661
20662
20663
20664 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20665 v_0 := b.Controls[0]
20666 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20667 break
20668 }
20669 l := v_0.Args[0]
20670 if l.Op != ssaop.OpARMANDshiftLLreg {
20671 break
20672 }
20673 z := l.Args[2]
20674 x := l.Args[0]
20675 y := l.Args[1]
20676 if !(l.Uses == 1) {
20677 break
20678 }
20679 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftLLreg, types.TypeFlags)
20680 v0.AddArg3(x, y, z)
20681 b.ResetWithControl(block.BlockARMNE, v0)
20682 return true
20683 }
20684
20685
20686
20687 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20688 v_0 := b.Controls[0]
20689 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20690 break
20691 }
20692 l := v_0.Args[0]
20693 if l.Op != ssaop.OpARMANDshiftRLreg {
20694 break
20695 }
20696 z := l.Args[2]
20697 x := l.Args[0]
20698 y := l.Args[1]
20699 if !(l.Uses == 1) {
20700 break
20701 }
20702 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRLreg, types.TypeFlags)
20703 v0.AddArg3(x, y, z)
20704 b.ResetWithControl(block.BlockARMNE, v0)
20705 return true
20706 }
20707
20708
20709
20710 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20711 v_0 := b.Controls[0]
20712 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20713 break
20714 }
20715 l := v_0.Args[0]
20716 if l.Op != ssaop.OpARMANDshiftRAreg {
20717 break
20718 }
20719 z := l.Args[2]
20720 x := l.Args[0]
20721 y := l.Args[1]
20722 if !(l.Uses == 1) {
20723 break
20724 }
20725 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTSTshiftRAreg, types.TypeFlags)
20726 v0.AddArg3(x, y, z)
20727 b.ResetWithControl(block.BlockARMNE, v0)
20728 return true
20729 }
20730
20731
20732
20733 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20734 v_0 := b.Controls[0]
20735 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20736 break
20737 }
20738 l := v_0.Args[0]
20739 if l.Op != ssaop.OpARMXOR {
20740 break
20741 }
20742 _ = l.Args[1]
20743 l_0 := l.Args[0]
20744 l_1 := l.Args[1]
20745 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20746 x := l_0
20747 y := l_1
20748 if !(l.Uses == 1) {
20749 continue
20750 }
20751 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQ, types.TypeFlags)
20752 v0.AddArg2(x, y)
20753 b.ResetWithControl(block.BlockARMNE, v0)
20754 return true
20755 }
20756 break
20757 }
20758
20759
20760
20761 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20762 v_0 := b.Controls[0]
20763 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20764 break
20765 }
20766 l := v_0.Args[0]
20767 if l.Op != ssaop.OpARMXORconst {
20768 break
20769 }
20770 c := ssa.AuxIntToInt32(l.AuxInt)
20771 x := l.Args[0]
20772 if !(l.Uses == 1) {
20773 break
20774 }
20775 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQconst, types.TypeFlags)
20776 v0.AuxInt = ssa.Int32ToAuxInt(c)
20777 v0.AddArg(x)
20778 b.ResetWithControl(block.BlockARMNE, v0)
20779 return true
20780 }
20781
20782
20783
20784 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20785 v_0 := b.Controls[0]
20786 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20787 break
20788 }
20789 l := v_0.Args[0]
20790 if l.Op != ssaop.OpARMXORshiftLL {
20791 break
20792 }
20793 c := ssa.AuxIntToInt32(l.AuxInt)
20794 y := l.Args[1]
20795 x := l.Args[0]
20796 if !(l.Uses == 1) {
20797 break
20798 }
20799 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLL, types.TypeFlags)
20800 v0.AuxInt = ssa.Int32ToAuxInt(c)
20801 v0.AddArg2(x, y)
20802 b.ResetWithControl(block.BlockARMNE, v0)
20803 return true
20804 }
20805
20806
20807
20808 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20809 v_0 := b.Controls[0]
20810 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20811 break
20812 }
20813 l := v_0.Args[0]
20814 if l.Op != ssaop.OpARMXORshiftRL {
20815 break
20816 }
20817 c := ssa.AuxIntToInt32(l.AuxInt)
20818 y := l.Args[1]
20819 x := l.Args[0]
20820 if !(l.Uses == 1) {
20821 break
20822 }
20823 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRL, types.TypeFlags)
20824 v0.AuxInt = ssa.Int32ToAuxInt(c)
20825 v0.AddArg2(x, y)
20826 b.ResetWithControl(block.BlockARMNE, v0)
20827 return true
20828 }
20829
20830
20831
20832 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20833 v_0 := b.Controls[0]
20834 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20835 break
20836 }
20837 l := v_0.Args[0]
20838 if l.Op != ssaop.OpARMXORshiftRA {
20839 break
20840 }
20841 c := ssa.AuxIntToInt32(l.AuxInt)
20842 y := l.Args[1]
20843 x := l.Args[0]
20844 if !(l.Uses == 1) {
20845 break
20846 }
20847 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRA, types.TypeFlags)
20848 v0.AuxInt = ssa.Int32ToAuxInt(c)
20849 v0.AddArg2(x, y)
20850 b.ResetWithControl(block.BlockARMNE, v0)
20851 return true
20852 }
20853
20854
20855
20856 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20857 v_0 := b.Controls[0]
20858 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20859 break
20860 }
20861 l := v_0.Args[0]
20862 if l.Op != ssaop.OpARMXORshiftLLreg {
20863 break
20864 }
20865 z := l.Args[2]
20866 x := l.Args[0]
20867 y := l.Args[1]
20868 if !(l.Uses == 1) {
20869 break
20870 }
20871 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftLLreg, types.TypeFlags)
20872 v0.AddArg3(x, y, z)
20873 b.ResetWithControl(block.BlockARMNE, v0)
20874 return true
20875 }
20876
20877
20878
20879 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20880 v_0 := b.Controls[0]
20881 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20882 break
20883 }
20884 l := v_0.Args[0]
20885 if l.Op != ssaop.OpARMXORshiftRLreg {
20886 break
20887 }
20888 z := l.Args[2]
20889 x := l.Args[0]
20890 y := l.Args[1]
20891 if !(l.Uses == 1) {
20892 break
20893 }
20894 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRLreg, types.TypeFlags)
20895 v0.AddArg3(x, y, z)
20896 b.ResetWithControl(block.BlockARMNE, v0)
20897 return true
20898 }
20899
20900
20901
20902 for b.Controls[0].Op == ssaop.OpARMCMPconst {
20903 v_0 := b.Controls[0]
20904 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20905 break
20906 }
20907 l := v_0.Args[0]
20908 if l.Op != ssaop.OpARMXORshiftRAreg {
20909 break
20910 }
20911 z := l.Args[2]
20912 x := l.Args[0]
20913 y := l.Args[1]
20914 if !(l.Uses == 1) {
20915 break
20916 }
20917 v0 := b.NewValue0(v_0.Pos, ssaop.OpARMTEQshiftRAreg, types.TypeFlags)
20918 v0.AddArg3(x, y, z)
20919 b.ResetWithControl(block.BlockARMNE, v0)
20920 return true
20921 }
20922 case block.BlockARMUGE:
20923
20924
20925
20926 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20927 v_0 := b.Controls[0]
20928 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20929 if !(fc.Uge()) {
20930 break
20931 }
20932 b.Reset(block.BlockFirst)
20933 return true
20934 }
20935
20936
20937
20938 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20939 v_0 := b.Controls[0]
20940 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20941 if !(!fc.Uge()) {
20942 break
20943 }
20944 b.Reset(block.BlockFirst)
20945 b.SwapSuccessors()
20946 return true
20947 }
20948
20949
20950 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
20951 v_0 := b.Controls[0]
20952 cmp := v_0.Args[0]
20953 b.ResetWithControl(block.BlockARMULE, cmp)
20954 return true
20955 }
20956 case block.BlockARMUGT:
20957
20958
20959
20960 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20961 v_0 := b.Controls[0]
20962 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20963 if !(fc.Ugt()) {
20964 break
20965 }
20966 b.Reset(block.BlockFirst)
20967 return true
20968 }
20969
20970
20971
20972 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20973 v_0 := b.Controls[0]
20974 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20975 if !(!fc.Ugt()) {
20976 break
20977 }
20978 b.Reset(block.BlockFirst)
20979 b.SwapSuccessors()
20980 return true
20981 }
20982
20983
20984 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
20985 v_0 := b.Controls[0]
20986 cmp := v_0.Args[0]
20987 b.ResetWithControl(block.BlockARMULT, cmp)
20988 return true
20989 }
20990 case block.BlockARMULE:
20991
20992
20993
20994 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
20995 v_0 := b.Controls[0]
20996 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
20997 if !(fc.Ule()) {
20998 break
20999 }
21000 b.Reset(block.BlockFirst)
21001 return true
21002 }
21003
21004
21005
21006 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
21007 v_0 := b.Controls[0]
21008 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
21009 if !(!fc.Ule()) {
21010 break
21011 }
21012 b.Reset(block.BlockFirst)
21013 b.SwapSuccessors()
21014 return true
21015 }
21016
21017
21018 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
21019 v_0 := b.Controls[0]
21020 cmp := v_0.Args[0]
21021 b.ResetWithControl(block.BlockARMUGE, cmp)
21022 return true
21023 }
21024 case block.BlockARMULT:
21025
21026
21027
21028 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
21029 v_0 := b.Controls[0]
21030 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
21031 if !(fc.Ult()) {
21032 break
21033 }
21034 b.Reset(block.BlockFirst)
21035 return true
21036 }
21037
21038
21039
21040 for b.Controls[0].Op == ssaop.OpARMFlagConstant {
21041 v_0 := b.Controls[0]
21042 fc := ssa.AuxIntToFlagConstant(v_0.AuxInt)
21043 if !(!fc.Ult()) {
21044 break
21045 }
21046 b.Reset(block.BlockFirst)
21047 b.SwapSuccessors()
21048 return true
21049 }
21050
21051
21052 for b.Controls[0].Op == ssaop.OpARMInvertFlags {
21053 v_0 := b.Controls[0]
21054 cmp := v_0.Args[0]
21055 b.ResetWithControl(block.BlockARMUGT, cmp)
21056 return true
21057 }
21058 }
21059 return false
21060 }
21061
View as plain text