1
2
3
4 package ssa
5
6 import "internal/buildcfg"
7 import "cmd/compile/internal/types"
8
9 func rewriteValueARM(v *Value) bool {
10 switch v.Op {
11 case OpARMADC:
12 return rewriteValueARM_OpARMADC(v)
13 case OpARMADCconst:
14 return rewriteValueARM_OpARMADCconst(v)
15 case OpARMADCshiftLL:
16 return rewriteValueARM_OpARMADCshiftLL(v)
17 case OpARMADCshiftLLreg:
18 return rewriteValueARM_OpARMADCshiftLLreg(v)
19 case OpARMADCshiftRA:
20 return rewriteValueARM_OpARMADCshiftRA(v)
21 case OpARMADCshiftRAreg:
22 return rewriteValueARM_OpARMADCshiftRAreg(v)
23 case OpARMADCshiftRL:
24 return rewriteValueARM_OpARMADCshiftRL(v)
25 case OpARMADCshiftRLreg:
26 return rewriteValueARM_OpARMADCshiftRLreg(v)
27 case OpARMADD:
28 return rewriteValueARM_OpARMADD(v)
29 case OpARMADDD:
30 return rewriteValueARM_OpARMADDD(v)
31 case OpARMADDF:
32 return rewriteValueARM_OpARMADDF(v)
33 case OpARMADDS:
34 return rewriteValueARM_OpARMADDS(v)
35 case OpARMADDSshiftLL:
36 return rewriteValueARM_OpARMADDSshiftLL(v)
37 case OpARMADDSshiftLLreg:
38 return rewriteValueARM_OpARMADDSshiftLLreg(v)
39 case OpARMADDSshiftRA:
40 return rewriteValueARM_OpARMADDSshiftRA(v)
41 case OpARMADDSshiftRAreg:
42 return rewriteValueARM_OpARMADDSshiftRAreg(v)
43 case OpARMADDSshiftRL:
44 return rewriteValueARM_OpARMADDSshiftRL(v)
45 case OpARMADDSshiftRLreg:
46 return rewriteValueARM_OpARMADDSshiftRLreg(v)
47 case OpARMADDconst:
48 return rewriteValueARM_OpARMADDconst(v)
49 case OpARMADDshiftLL:
50 return rewriteValueARM_OpARMADDshiftLL(v)
51 case OpARMADDshiftLLreg:
52 return rewriteValueARM_OpARMADDshiftLLreg(v)
53 case OpARMADDshiftRA:
54 return rewriteValueARM_OpARMADDshiftRA(v)
55 case OpARMADDshiftRAreg:
56 return rewriteValueARM_OpARMADDshiftRAreg(v)
57 case OpARMADDshiftRL:
58 return rewriteValueARM_OpARMADDshiftRL(v)
59 case OpARMADDshiftRLreg:
60 return rewriteValueARM_OpARMADDshiftRLreg(v)
61 case OpARMAND:
62 return rewriteValueARM_OpARMAND(v)
63 case OpARMANDconst:
64 return rewriteValueARM_OpARMANDconst(v)
65 case OpARMANDshiftLL:
66 return rewriteValueARM_OpARMANDshiftLL(v)
67 case OpARMANDshiftLLreg:
68 return rewriteValueARM_OpARMANDshiftLLreg(v)
69 case OpARMANDshiftRA:
70 return rewriteValueARM_OpARMANDshiftRA(v)
71 case OpARMANDshiftRAreg:
72 return rewriteValueARM_OpARMANDshiftRAreg(v)
73 case OpARMANDshiftRL:
74 return rewriteValueARM_OpARMANDshiftRL(v)
75 case OpARMANDshiftRLreg:
76 return rewriteValueARM_OpARMANDshiftRLreg(v)
77 case OpARMBFX:
78 return rewriteValueARM_OpARMBFX(v)
79 case OpARMBFXU:
80 return rewriteValueARM_OpARMBFXU(v)
81 case OpARMBIC:
82 return rewriteValueARM_OpARMBIC(v)
83 case OpARMBICconst:
84 return rewriteValueARM_OpARMBICconst(v)
85 case OpARMBICshiftLL:
86 return rewriteValueARM_OpARMBICshiftLL(v)
87 case OpARMBICshiftLLreg:
88 return rewriteValueARM_OpARMBICshiftLLreg(v)
89 case OpARMBICshiftRA:
90 return rewriteValueARM_OpARMBICshiftRA(v)
91 case OpARMBICshiftRAreg:
92 return rewriteValueARM_OpARMBICshiftRAreg(v)
93 case OpARMBICshiftRL:
94 return rewriteValueARM_OpARMBICshiftRL(v)
95 case OpARMBICshiftRLreg:
96 return rewriteValueARM_OpARMBICshiftRLreg(v)
97 case OpARMCMN:
98 return rewriteValueARM_OpARMCMN(v)
99 case OpARMCMNconst:
100 return rewriteValueARM_OpARMCMNconst(v)
101 case OpARMCMNshiftLL:
102 return rewriteValueARM_OpARMCMNshiftLL(v)
103 case OpARMCMNshiftLLreg:
104 return rewriteValueARM_OpARMCMNshiftLLreg(v)
105 case OpARMCMNshiftRA:
106 return rewriteValueARM_OpARMCMNshiftRA(v)
107 case OpARMCMNshiftRAreg:
108 return rewriteValueARM_OpARMCMNshiftRAreg(v)
109 case OpARMCMNshiftRL:
110 return rewriteValueARM_OpARMCMNshiftRL(v)
111 case OpARMCMNshiftRLreg:
112 return rewriteValueARM_OpARMCMNshiftRLreg(v)
113 case OpARMCMOVWHSconst:
114 return rewriteValueARM_OpARMCMOVWHSconst(v)
115 case OpARMCMOVWLSconst:
116 return rewriteValueARM_OpARMCMOVWLSconst(v)
117 case OpARMCMP:
118 return rewriteValueARM_OpARMCMP(v)
119 case OpARMCMPD:
120 return rewriteValueARM_OpARMCMPD(v)
121 case OpARMCMPF:
122 return rewriteValueARM_OpARMCMPF(v)
123 case OpARMCMPconst:
124 return rewriteValueARM_OpARMCMPconst(v)
125 case OpARMCMPshiftLL:
126 return rewriteValueARM_OpARMCMPshiftLL(v)
127 case OpARMCMPshiftLLreg:
128 return rewriteValueARM_OpARMCMPshiftLLreg(v)
129 case OpARMCMPshiftRA:
130 return rewriteValueARM_OpARMCMPshiftRA(v)
131 case OpARMCMPshiftRAreg:
132 return rewriteValueARM_OpARMCMPshiftRAreg(v)
133 case OpARMCMPshiftRL:
134 return rewriteValueARM_OpARMCMPshiftRL(v)
135 case OpARMCMPshiftRLreg:
136 return rewriteValueARM_OpARMCMPshiftRLreg(v)
137 case OpARMEqual:
138 return rewriteValueARM_OpARMEqual(v)
139 case OpARMGreaterEqual:
140 return rewriteValueARM_OpARMGreaterEqual(v)
141 case OpARMGreaterEqualU:
142 return rewriteValueARM_OpARMGreaterEqualU(v)
143 case OpARMGreaterThan:
144 return rewriteValueARM_OpARMGreaterThan(v)
145 case OpARMGreaterThanU:
146 return rewriteValueARM_OpARMGreaterThanU(v)
147 case OpARMLessEqual:
148 return rewriteValueARM_OpARMLessEqual(v)
149 case OpARMLessEqualU:
150 return rewriteValueARM_OpARMLessEqualU(v)
151 case OpARMLessThan:
152 return rewriteValueARM_OpARMLessThan(v)
153 case OpARMLessThanU:
154 return rewriteValueARM_OpARMLessThanU(v)
155 case OpARMMOVBUload:
156 return rewriteValueARM_OpARMMOVBUload(v)
157 case OpARMMOVBUloadidx:
158 return rewriteValueARM_OpARMMOVBUloadidx(v)
159 case OpARMMOVBUreg:
160 return rewriteValueARM_OpARMMOVBUreg(v)
161 case OpARMMOVBload:
162 return rewriteValueARM_OpARMMOVBload(v)
163 case OpARMMOVBloadidx:
164 return rewriteValueARM_OpARMMOVBloadidx(v)
165 case OpARMMOVBreg:
166 return rewriteValueARM_OpARMMOVBreg(v)
167 case OpARMMOVBstore:
168 return rewriteValueARM_OpARMMOVBstore(v)
169 case OpARMMOVBstoreidx:
170 return rewriteValueARM_OpARMMOVBstoreidx(v)
171 case OpARMMOVDload:
172 return rewriteValueARM_OpARMMOVDload(v)
173 case OpARMMOVDstore:
174 return rewriteValueARM_OpARMMOVDstore(v)
175 case OpARMMOVFload:
176 return rewriteValueARM_OpARMMOVFload(v)
177 case OpARMMOVFstore:
178 return rewriteValueARM_OpARMMOVFstore(v)
179 case OpARMMOVHUload:
180 return rewriteValueARM_OpARMMOVHUload(v)
181 case OpARMMOVHUloadidx:
182 return rewriteValueARM_OpARMMOVHUloadidx(v)
183 case OpARMMOVHUreg:
184 return rewriteValueARM_OpARMMOVHUreg(v)
185 case OpARMMOVHload:
186 return rewriteValueARM_OpARMMOVHload(v)
187 case OpARMMOVHloadidx:
188 return rewriteValueARM_OpARMMOVHloadidx(v)
189 case OpARMMOVHreg:
190 return rewriteValueARM_OpARMMOVHreg(v)
191 case OpARMMOVHstore:
192 return rewriteValueARM_OpARMMOVHstore(v)
193 case OpARMMOVHstoreidx:
194 return rewriteValueARM_OpARMMOVHstoreidx(v)
195 case OpARMMOVWload:
196 return rewriteValueARM_OpARMMOVWload(v)
197 case OpARMMOVWloadidx:
198 return rewriteValueARM_OpARMMOVWloadidx(v)
199 case OpARMMOVWloadshiftLL:
200 return rewriteValueARM_OpARMMOVWloadshiftLL(v)
201 case OpARMMOVWloadshiftRA:
202 return rewriteValueARM_OpARMMOVWloadshiftRA(v)
203 case OpARMMOVWloadshiftRL:
204 return rewriteValueARM_OpARMMOVWloadshiftRL(v)
205 case OpARMMOVWnop:
206 return rewriteValueARM_OpARMMOVWnop(v)
207 case OpARMMOVWreg:
208 return rewriteValueARM_OpARMMOVWreg(v)
209 case OpARMMOVWstore:
210 return rewriteValueARM_OpARMMOVWstore(v)
211 case OpARMMOVWstoreidx:
212 return rewriteValueARM_OpARMMOVWstoreidx(v)
213 case OpARMMOVWstoreshiftLL:
214 return rewriteValueARM_OpARMMOVWstoreshiftLL(v)
215 case OpARMMOVWstoreshiftRA:
216 return rewriteValueARM_OpARMMOVWstoreshiftRA(v)
217 case OpARMMOVWstoreshiftRL:
218 return rewriteValueARM_OpARMMOVWstoreshiftRL(v)
219 case OpARMMUL:
220 return rewriteValueARM_OpARMMUL(v)
221 case OpARMMULA:
222 return rewriteValueARM_OpARMMULA(v)
223 case OpARMMULD:
224 return rewriteValueARM_OpARMMULD(v)
225 case OpARMMULF:
226 return rewriteValueARM_OpARMMULF(v)
227 case OpARMMULS:
228 return rewriteValueARM_OpARMMULS(v)
229 case OpARMMVN:
230 return rewriteValueARM_OpARMMVN(v)
231 case OpARMMVNshiftLL:
232 return rewriteValueARM_OpARMMVNshiftLL(v)
233 case OpARMMVNshiftLLreg:
234 return rewriteValueARM_OpARMMVNshiftLLreg(v)
235 case OpARMMVNshiftRA:
236 return rewriteValueARM_OpARMMVNshiftRA(v)
237 case OpARMMVNshiftRAreg:
238 return rewriteValueARM_OpARMMVNshiftRAreg(v)
239 case OpARMMVNshiftRL:
240 return rewriteValueARM_OpARMMVNshiftRL(v)
241 case OpARMMVNshiftRLreg:
242 return rewriteValueARM_OpARMMVNshiftRLreg(v)
243 case OpARMNEGD:
244 return rewriteValueARM_OpARMNEGD(v)
245 case OpARMNEGF:
246 return rewriteValueARM_OpARMNEGF(v)
247 case OpARMNMULD:
248 return rewriteValueARM_OpARMNMULD(v)
249 case OpARMNMULF:
250 return rewriteValueARM_OpARMNMULF(v)
251 case OpARMNotEqual:
252 return rewriteValueARM_OpARMNotEqual(v)
253 case OpARMOR:
254 return rewriteValueARM_OpARMOR(v)
255 case OpARMORconst:
256 return rewriteValueARM_OpARMORconst(v)
257 case OpARMORshiftLL:
258 return rewriteValueARM_OpARMORshiftLL(v)
259 case OpARMORshiftLLreg:
260 return rewriteValueARM_OpARMORshiftLLreg(v)
261 case OpARMORshiftRA:
262 return rewriteValueARM_OpARMORshiftRA(v)
263 case OpARMORshiftRAreg:
264 return rewriteValueARM_OpARMORshiftRAreg(v)
265 case OpARMORshiftRL:
266 return rewriteValueARM_OpARMORshiftRL(v)
267 case OpARMORshiftRLreg:
268 return rewriteValueARM_OpARMORshiftRLreg(v)
269 case OpARMRSB:
270 return rewriteValueARM_OpARMRSB(v)
271 case OpARMRSBSshiftLL:
272 return rewriteValueARM_OpARMRSBSshiftLL(v)
273 case OpARMRSBSshiftLLreg:
274 return rewriteValueARM_OpARMRSBSshiftLLreg(v)
275 case OpARMRSBSshiftRA:
276 return rewriteValueARM_OpARMRSBSshiftRA(v)
277 case OpARMRSBSshiftRAreg:
278 return rewriteValueARM_OpARMRSBSshiftRAreg(v)
279 case OpARMRSBSshiftRL:
280 return rewriteValueARM_OpARMRSBSshiftRL(v)
281 case OpARMRSBSshiftRLreg:
282 return rewriteValueARM_OpARMRSBSshiftRLreg(v)
283 case OpARMRSBconst:
284 return rewriteValueARM_OpARMRSBconst(v)
285 case OpARMRSBshiftLL:
286 return rewriteValueARM_OpARMRSBshiftLL(v)
287 case OpARMRSBshiftLLreg:
288 return rewriteValueARM_OpARMRSBshiftLLreg(v)
289 case OpARMRSBshiftRA:
290 return rewriteValueARM_OpARMRSBshiftRA(v)
291 case OpARMRSBshiftRAreg:
292 return rewriteValueARM_OpARMRSBshiftRAreg(v)
293 case OpARMRSBshiftRL:
294 return rewriteValueARM_OpARMRSBshiftRL(v)
295 case OpARMRSBshiftRLreg:
296 return rewriteValueARM_OpARMRSBshiftRLreg(v)
297 case OpARMRSCconst:
298 return rewriteValueARM_OpARMRSCconst(v)
299 case OpARMRSCshiftLL:
300 return rewriteValueARM_OpARMRSCshiftLL(v)
301 case OpARMRSCshiftLLreg:
302 return rewriteValueARM_OpARMRSCshiftLLreg(v)
303 case OpARMRSCshiftRA:
304 return rewriteValueARM_OpARMRSCshiftRA(v)
305 case OpARMRSCshiftRAreg:
306 return rewriteValueARM_OpARMRSCshiftRAreg(v)
307 case OpARMRSCshiftRL:
308 return rewriteValueARM_OpARMRSCshiftRL(v)
309 case OpARMRSCshiftRLreg:
310 return rewriteValueARM_OpARMRSCshiftRLreg(v)
311 case OpARMSBC:
312 return rewriteValueARM_OpARMSBC(v)
313 case OpARMSBCconst:
314 return rewriteValueARM_OpARMSBCconst(v)
315 case OpARMSBCshiftLL:
316 return rewriteValueARM_OpARMSBCshiftLL(v)
317 case OpARMSBCshiftLLreg:
318 return rewriteValueARM_OpARMSBCshiftLLreg(v)
319 case OpARMSBCshiftRA:
320 return rewriteValueARM_OpARMSBCshiftRA(v)
321 case OpARMSBCshiftRAreg:
322 return rewriteValueARM_OpARMSBCshiftRAreg(v)
323 case OpARMSBCshiftRL:
324 return rewriteValueARM_OpARMSBCshiftRL(v)
325 case OpARMSBCshiftRLreg:
326 return rewriteValueARM_OpARMSBCshiftRLreg(v)
327 case OpARMSLL:
328 return rewriteValueARM_OpARMSLL(v)
329 case OpARMSLLconst:
330 return rewriteValueARM_OpARMSLLconst(v)
331 case OpARMSRA:
332 return rewriteValueARM_OpARMSRA(v)
333 case OpARMSRAcond:
334 return rewriteValueARM_OpARMSRAcond(v)
335 case OpARMSRAconst:
336 return rewriteValueARM_OpARMSRAconst(v)
337 case OpARMSRL:
338 return rewriteValueARM_OpARMSRL(v)
339 case OpARMSRLconst:
340 return rewriteValueARM_OpARMSRLconst(v)
341 case OpARMSRR:
342 return rewriteValueARM_OpARMSRR(v)
343 case OpARMSUB:
344 return rewriteValueARM_OpARMSUB(v)
345 case OpARMSUBD:
346 return rewriteValueARM_OpARMSUBD(v)
347 case OpARMSUBF:
348 return rewriteValueARM_OpARMSUBF(v)
349 case OpARMSUBS:
350 return rewriteValueARM_OpARMSUBS(v)
351 case OpARMSUBSshiftLL:
352 return rewriteValueARM_OpARMSUBSshiftLL(v)
353 case OpARMSUBSshiftLLreg:
354 return rewriteValueARM_OpARMSUBSshiftLLreg(v)
355 case OpARMSUBSshiftRA:
356 return rewriteValueARM_OpARMSUBSshiftRA(v)
357 case OpARMSUBSshiftRAreg:
358 return rewriteValueARM_OpARMSUBSshiftRAreg(v)
359 case OpARMSUBSshiftRL:
360 return rewriteValueARM_OpARMSUBSshiftRL(v)
361 case OpARMSUBSshiftRLreg:
362 return rewriteValueARM_OpARMSUBSshiftRLreg(v)
363 case OpARMSUBconst:
364 return rewriteValueARM_OpARMSUBconst(v)
365 case OpARMSUBshiftLL:
366 return rewriteValueARM_OpARMSUBshiftLL(v)
367 case OpARMSUBshiftLLreg:
368 return rewriteValueARM_OpARMSUBshiftLLreg(v)
369 case OpARMSUBshiftRA:
370 return rewriteValueARM_OpARMSUBshiftRA(v)
371 case OpARMSUBshiftRAreg:
372 return rewriteValueARM_OpARMSUBshiftRAreg(v)
373 case OpARMSUBshiftRL:
374 return rewriteValueARM_OpARMSUBshiftRL(v)
375 case OpARMSUBshiftRLreg:
376 return rewriteValueARM_OpARMSUBshiftRLreg(v)
377 case OpARMTEQ:
378 return rewriteValueARM_OpARMTEQ(v)
379 case OpARMTEQconst:
380 return rewriteValueARM_OpARMTEQconst(v)
381 case OpARMTEQshiftLL:
382 return rewriteValueARM_OpARMTEQshiftLL(v)
383 case OpARMTEQshiftLLreg:
384 return rewriteValueARM_OpARMTEQshiftLLreg(v)
385 case OpARMTEQshiftRA:
386 return rewriteValueARM_OpARMTEQshiftRA(v)
387 case OpARMTEQshiftRAreg:
388 return rewriteValueARM_OpARMTEQshiftRAreg(v)
389 case OpARMTEQshiftRL:
390 return rewriteValueARM_OpARMTEQshiftRL(v)
391 case OpARMTEQshiftRLreg:
392 return rewriteValueARM_OpARMTEQshiftRLreg(v)
393 case OpARMTST:
394 return rewriteValueARM_OpARMTST(v)
395 case OpARMTSTconst:
396 return rewriteValueARM_OpARMTSTconst(v)
397 case OpARMTSTshiftLL:
398 return rewriteValueARM_OpARMTSTshiftLL(v)
399 case OpARMTSTshiftLLreg:
400 return rewriteValueARM_OpARMTSTshiftLLreg(v)
401 case OpARMTSTshiftRA:
402 return rewriteValueARM_OpARMTSTshiftRA(v)
403 case OpARMTSTshiftRAreg:
404 return rewriteValueARM_OpARMTSTshiftRAreg(v)
405 case OpARMTSTshiftRL:
406 return rewriteValueARM_OpARMTSTshiftRL(v)
407 case OpARMTSTshiftRLreg:
408 return rewriteValueARM_OpARMTSTshiftRLreg(v)
409 case OpARMXOR:
410 return rewriteValueARM_OpARMXOR(v)
411 case OpARMXORconst:
412 return rewriteValueARM_OpARMXORconst(v)
413 case OpARMXORshiftLL:
414 return rewriteValueARM_OpARMXORshiftLL(v)
415 case OpARMXORshiftLLreg:
416 return rewriteValueARM_OpARMXORshiftLLreg(v)
417 case OpARMXORshiftRA:
418 return rewriteValueARM_OpARMXORshiftRA(v)
419 case OpARMXORshiftRAreg:
420 return rewriteValueARM_OpARMXORshiftRAreg(v)
421 case OpARMXORshiftRL:
422 return rewriteValueARM_OpARMXORshiftRL(v)
423 case OpARMXORshiftRLreg:
424 return rewriteValueARM_OpARMXORshiftRLreg(v)
425 case OpARMXORshiftRR:
426 return rewriteValueARM_OpARMXORshiftRR(v)
427 case OpAbs:
428 v.Op = OpARMABSD
429 return true
430 case OpAdd16:
431 v.Op = OpARMADD
432 return true
433 case OpAdd32:
434 v.Op = OpARMADD
435 return true
436 case OpAdd32F:
437 v.Op = OpARMADDF
438 return true
439 case OpAdd32carry:
440 v.Op = OpARMADDS
441 return true
442 case OpAdd32withcarry:
443 v.Op = OpARMADC
444 return true
445 case OpAdd64F:
446 v.Op = OpARMADDD
447 return true
448 case OpAdd8:
449 v.Op = OpARMADD
450 return true
451 case OpAddPtr:
452 v.Op = OpARMADD
453 return true
454 case OpAddr:
455 return rewriteValueARM_OpAddr(v)
456 case OpAnd16:
457 v.Op = OpARMAND
458 return true
459 case OpAnd32:
460 v.Op = OpARMAND
461 return true
462 case OpAnd8:
463 v.Op = OpARMAND
464 return true
465 case OpAndB:
466 v.Op = OpARMAND
467 return true
468 case OpAvg32u:
469 return rewriteValueARM_OpAvg32u(v)
470 case OpBitLen32:
471 return rewriteValueARM_OpBitLen32(v)
472 case OpBswap32:
473 return rewriteValueARM_OpBswap32(v)
474 case OpClosureCall:
475 v.Op = OpARMCALLclosure
476 return true
477 case OpCom16:
478 v.Op = OpARMMVN
479 return true
480 case OpCom32:
481 v.Op = OpARMMVN
482 return true
483 case OpCom8:
484 v.Op = OpARMMVN
485 return true
486 case OpConst16:
487 return rewriteValueARM_OpConst16(v)
488 case OpConst32:
489 return rewriteValueARM_OpConst32(v)
490 case OpConst32F:
491 return rewriteValueARM_OpConst32F(v)
492 case OpConst64F:
493 return rewriteValueARM_OpConst64F(v)
494 case OpConst8:
495 return rewriteValueARM_OpConst8(v)
496 case OpConstBool:
497 return rewriteValueARM_OpConstBool(v)
498 case OpConstNil:
499 return rewriteValueARM_OpConstNil(v)
500 case OpCtz16:
501 return rewriteValueARM_OpCtz16(v)
502 case OpCtz16NonZero:
503 v.Op = OpCtz32
504 return true
505 case OpCtz32:
506 return rewriteValueARM_OpCtz32(v)
507 case OpCtz32NonZero:
508 v.Op = OpCtz32
509 return true
510 case OpCtz8:
511 return rewriteValueARM_OpCtz8(v)
512 case OpCtz8NonZero:
513 v.Op = OpCtz32
514 return true
515 case OpCvt32Fto32:
516 v.Op = OpARMMOVFW
517 return true
518 case OpCvt32Fto32U:
519 v.Op = OpARMMOVFWU
520 return true
521 case OpCvt32Fto64F:
522 v.Op = OpARMMOVFD
523 return true
524 case OpCvt32Uto32F:
525 v.Op = OpARMMOVWUF
526 return true
527 case OpCvt32Uto64F:
528 v.Op = OpARMMOVWUD
529 return true
530 case OpCvt32to32F:
531 v.Op = OpARMMOVWF
532 return true
533 case OpCvt32to64F:
534 v.Op = OpARMMOVWD
535 return true
536 case OpCvt64Fto32:
537 v.Op = OpARMMOVDW
538 return true
539 case OpCvt64Fto32F:
540 v.Op = OpARMMOVDF
541 return true
542 case OpCvt64Fto32U:
543 v.Op = OpARMMOVDWU
544 return true
545 case OpCvtBoolToUint8:
546 v.Op = OpCopy
547 return true
548 case OpDiv16:
549 return rewriteValueARM_OpDiv16(v)
550 case OpDiv16u:
551 return rewriteValueARM_OpDiv16u(v)
552 case OpDiv32:
553 return rewriteValueARM_OpDiv32(v)
554 case OpDiv32F:
555 v.Op = OpARMDIVF
556 return true
557 case OpDiv32u:
558 return rewriteValueARM_OpDiv32u(v)
559 case OpDiv64F:
560 v.Op = OpARMDIVD
561 return true
562 case OpDiv8:
563 return rewriteValueARM_OpDiv8(v)
564 case OpDiv8u:
565 return rewriteValueARM_OpDiv8u(v)
566 case OpEq16:
567 return rewriteValueARM_OpEq16(v)
568 case OpEq32:
569 return rewriteValueARM_OpEq32(v)
570 case OpEq32F:
571 return rewriteValueARM_OpEq32F(v)
572 case OpEq64F:
573 return rewriteValueARM_OpEq64F(v)
574 case OpEq8:
575 return rewriteValueARM_OpEq8(v)
576 case OpEqB:
577 return rewriteValueARM_OpEqB(v)
578 case OpEqPtr:
579 return rewriteValueARM_OpEqPtr(v)
580 case OpFMA:
581 return rewriteValueARM_OpFMA(v)
582 case OpGetCallerPC:
583 v.Op = OpARMLoweredGetCallerPC
584 return true
585 case OpGetCallerSP:
586 v.Op = OpARMLoweredGetCallerSP
587 return true
588 case OpGetClosurePtr:
589 v.Op = OpARMLoweredGetClosurePtr
590 return true
591 case OpHmul32:
592 v.Op = OpARMHMUL
593 return true
594 case OpHmul32u:
595 v.Op = OpARMHMULU
596 return true
597 case OpInterCall:
598 v.Op = OpARMCALLinter
599 return true
600 case OpIsInBounds:
601 return rewriteValueARM_OpIsInBounds(v)
602 case OpIsNonNil:
603 return rewriteValueARM_OpIsNonNil(v)
604 case OpIsSliceInBounds:
605 return rewriteValueARM_OpIsSliceInBounds(v)
606 case OpLeq16:
607 return rewriteValueARM_OpLeq16(v)
608 case OpLeq16U:
609 return rewriteValueARM_OpLeq16U(v)
610 case OpLeq32:
611 return rewriteValueARM_OpLeq32(v)
612 case OpLeq32F:
613 return rewriteValueARM_OpLeq32F(v)
614 case OpLeq32U:
615 return rewriteValueARM_OpLeq32U(v)
616 case OpLeq64F:
617 return rewriteValueARM_OpLeq64F(v)
618 case OpLeq8:
619 return rewriteValueARM_OpLeq8(v)
620 case OpLeq8U:
621 return rewriteValueARM_OpLeq8U(v)
622 case OpLess16:
623 return rewriteValueARM_OpLess16(v)
624 case OpLess16U:
625 return rewriteValueARM_OpLess16U(v)
626 case OpLess32:
627 return rewriteValueARM_OpLess32(v)
628 case OpLess32F:
629 return rewriteValueARM_OpLess32F(v)
630 case OpLess32U:
631 return rewriteValueARM_OpLess32U(v)
632 case OpLess64F:
633 return rewriteValueARM_OpLess64F(v)
634 case OpLess8:
635 return rewriteValueARM_OpLess8(v)
636 case OpLess8U:
637 return rewriteValueARM_OpLess8U(v)
638 case OpLoad:
639 return rewriteValueARM_OpLoad(v)
640 case OpLocalAddr:
641 return rewriteValueARM_OpLocalAddr(v)
642 case OpLsh16x16:
643 return rewriteValueARM_OpLsh16x16(v)
644 case OpLsh16x32:
645 return rewriteValueARM_OpLsh16x32(v)
646 case OpLsh16x64:
647 return rewriteValueARM_OpLsh16x64(v)
648 case OpLsh16x8:
649 return rewriteValueARM_OpLsh16x8(v)
650 case OpLsh32x16:
651 return rewriteValueARM_OpLsh32x16(v)
652 case OpLsh32x32:
653 return rewriteValueARM_OpLsh32x32(v)
654 case OpLsh32x64:
655 return rewriteValueARM_OpLsh32x64(v)
656 case OpLsh32x8:
657 return rewriteValueARM_OpLsh32x8(v)
658 case OpLsh8x16:
659 return rewriteValueARM_OpLsh8x16(v)
660 case OpLsh8x32:
661 return rewriteValueARM_OpLsh8x32(v)
662 case OpLsh8x64:
663 return rewriteValueARM_OpLsh8x64(v)
664 case OpLsh8x8:
665 return rewriteValueARM_OpLsh8x8(v)
666 case OpMod16:
667 return rewriteValueARM_OpMod16(v)
668 case OpMod16u:
669 return rewriteValueARM_OpMod16u(v)
670 case OpMod32:
671 return rewriteValueARM_OpMod32(v)
672 case OpMod32u:
673 return rewriteValueARM_OpMod32u(v)
674 case OpMod8:
675 return rewriteValueARM_OpMod8(v)
676 case OpMod8u:
677 return rewriteValueARM_OpMod8u(v)
678 case OpMove:
679 return rewriteValueARM_OpMove(v)
680 case OpMul16:
681 v.Op = OpARMMUL
682 return true
683 case OpMul32:
684 v.Op = OpARMMUL
685 return true
686 case OpMul32F:
687 v.Op = OpARMMULF
688 return true
689 case OpMul32uhilo:
690 v.Op = OpARMMULLU
691 return true
692 case OpMul64F:
693 v.Op = OpARMMULD
694 return true
695 case OpMul8:
696 v.Op = OpARMMUL
697 return true
698 case OpNeg16:
699 return rewriteValueARM_OpNeg16(v)
700 case OpNeg32:
701 return rewriteValueARM_OpNeg32(v)
702 case OpNeg32F:
703 v.Op = OpARMNEGF
704 return true
705 case OpNeg64F:
706 v.Op = OpARMNEGD
707 return true
708 case OpNeg8:
709 return rewriteValueARM_OpNeg8(v)
710 case OpNeq16:
711 return rewriteValueARM_OpNeq16(v)
712 case OpNeq32:
713 return rewriteValueARM_OpNeq32(v)
714 case OpNeq32F:
715 return rewriteValueARM_OpNeq32F(v)
716 case OpNeq64F:
717 return rewriteValueARM_OpNeq64F(v)
718 case OpNeq8:
719 return rewriteValueARM_OpNeq8(v)
720 case OpNeqB:
721 v.Op = OpARMXOR
722 return true
723 case OpNeqPtr:
724 return rewriteValueARM_OpNeqPtr(v)
725 case OpNilCheck:
726 v.Op = OpARMLoweredNilCheck
727 return true
728 case OpNot:
729 return rewriteValueARM_OpNot(v)
730 case OpOffPtr:
731 return rewriteValueARM_OpOffPtr(v)
732 case OpOr16:
733 v.Op = OpARMOR
734 return true
735 case OpOr32:
736 v.Op = OpARMOR
737 return true
738 case OpOr8:
739 v.Op = OpARMOR
740 return true
741 case OpOrB:
742 v.Op = OpARMOR
743 return true
744 case OpPanicBounds:
745 return rewriteValueARM_OpPanicBounds(v)
746 case OpPanicExtend:
747 return rewriteValueARM_OpPanicExtend(v)
748 case OpRotateLeft16:
749 return rewriteValueARM_OpRotateLeft16(v)
750 case OpRotateLeft32:
751 return rewriteValueARM_OpRotateLeft32(v)
752 case OpRotateLeft8:
753 return rewriteValueARM_OpRotateLeft8(v)
754 case OpRound32F:
755 v.Op = OpCopy
756 return true
757 case OpRound64F:
758 v.Op = OpCopy
759 return true
760 case OpRsh16Ux16:
761 return rewriteValueARM_OpRsh16Ux16(v)
762 case OpRsh16Ux32:
763 return rewriteValueARM_OpRsh16Ux32(v)
764 case OpRsh16Ux64:
765 return rewriteValueARM_OpRsh16Ux64(v)
766 case OpRsh16Ux8:
767 return rewriteValueARM_OpRsh16Ux8(v)
768 case OpRsh16x16:
769 return rewriteValueARM_OpRsh16x16(v)
770 case OpRsh16x32:
771 return rewriteValueARM_OpRsh16x32(v)
772 case OpRsh16x64:
773 return rewriteValueARM_OpRsh16x64(v)
774 case OpRsh16x8:
775 return rewriteValueARM_OpRsh16x8(v)
776 case OpRsh32Ux16:
777 return rewriteValueARM_OpRsh32Ux16(v)
778 case OpRsh32Ux32:
779 return rewriteValueARM_OpRsh32Ux32(v)
780 case OpRsh32Ux64:
781 return rewriteValueARM_OpRsh32Ux64(v)
782 case OpRsh32Ux8:
783 return rewriteValueARM_OpRsh32Ux8(v)
784 case OpRsh32x16:
785 return rewriteValueARM_OpRsh32x16(v)
786 case OpRsh32x32:
787 return rewriteValueARM_OpRsh32x32(v)
788 case OpRsh32x64:
789 return rewriteValueARM_OpRsh32x64(v)
790 case OpRsh32x8:
791 return rewriteValueARM_OpRsh32x8(v)
792 case OpRsh8Ux16:
793 return rewriteValueARM_OpRsh8Ux16(v)
794 case OpRsh8Ux32:
795 return rewriteValueARM_OpRsh8Ux32(v)
796 case OpRsh8Ux64:
797 return rewriteValueARM_OpRsh8Ux64(v)
798 case OpRsh8Ux8:
799 return rewriteValueARM_OpRsh8Ux8(v)
800 case OpRsh8x16:
801 return rewriteValueARM_OpRsh8x16(v)
802 case OpRsh8x32:
803 return rewriteValueARM_OpRsh8x32(v)
804 case OpRsh8x64:
805 return rewriteValueARM_OpRsh8x64(v)
806 case OpRsh8x8:
807 return rewriteValueARM_OpRsh8x8(v)
808 case OpSelect0:
809 return rewriteValueARM_OpSelect0(v)
810 case OpSelect1:
811 return rewriteValueARM_OpSelect1(v)
812 case OpSignExt16to32:
813 v.Op = OpARMMOVHreg
814 return true
815 case OpSignExt8to16:
816 v.Op = OpARMMOVBreg
817 return true
818 case OpSignExt8to32:
819 v.Op = OpARMMOVBreg
820 return true
821 case OpSignmask:
822 return rewriteValueARM_OpSignmask(v)
823 case OpSlicemask:
824 return rewriteValueARM_OpSlicemask(v)
825 case OpSqrt:
826 v.Op = OpARMSQRTD
827 return true
828 case OpSqrt32:
829 v.Op = OpARMSQRTF
830 return true
831 case OpStaticCall:
832 v.Op = OpARMCALLstatic
833 return true
834 case OpStore:
835 return rewriteValueARM_OpStore(v)
836 case OpSub16:
837 v.Op = OpARMSUB
838 return true
839 case OpSub32:
840 v.Op = OpARMSUB
841 return true
842 case OpSub32F:
843 v.Op = OpARMSUBF
844 return true
845 case OpSub32carry:
846 v.Op = OpARMSUBS
847 return true
848 case OpSub32withcarry:
849 v.Op = OpARMSBC
850 return true
851 case OpSub64F:
852 v.Op = OpARMSUBD
853 return true
854 case OpSub8:
855 v.Op = OpARMSUB
856 return true
857 case OpSubPtr:
858 v.Op = OpARMSUB
859 return true
860 case OpTailCall:
861 v.Op = OpARMCALLtail
862 return true
863 case OpTrunc16to8:
864 v.Op = OpCopy
865 return true
866 case OpTrunc32to16:
867 v.Op = OpCopy
868 return true
869 case OpTrunc32to8:
870 v.Op = OpCopy
871 return true
872 case OpWB:
873 v.Op = OpARMLoweredWB
874 return true
875 case OpXor16:
876 v.Op = OpARMXOR
877 return true
878 case OpXor32:
879 v.Op = OpARMXOR
880 return true
881 case OpXor8:
882 v.Op = OpARMXOR
883 return true
884 case OpZero:
885 return rewriteValueARM_OpZero(v)
886 case OpZeroExt16to32:
887 v.Op = OpARMMOVHUreg
888 return true
889 case OpZeroExt8to16:
890 v.Op = OpARMMOVBUreg
891 return true
892 case OpZeroExt8to32:
893 v.Op = OpARMMOVBUreg
894 return true
895 case OpZeromask:
896 return rewriteValueARM_OpZeromask(v)
897 }
898 return false
899 }
900 func rewriteValueARM_OpARMADC(v *Value) bool {
901 v_2 := v.Args[2]
902 v_1 := v.Args[1]
903 v_0 := v.Args[0]
904
905
906 for {
907 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
908 if v_0.Op != OpARMMOVWconst {
909 continue
910 }
911 c := auxIntToInt32(v_0.AuxInt)
912 x := v_1
913 flags := v_2
914 v.reset(OpARMADCconst)
915 v.AuxInt = int32ToAuxInt(c)
916 v.AddArg2(x, flags)
917 return true
918 }
919 break
920 }
921
922
923 for {
924 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
925 x := v_0
926 if v_1.Op != OpARMSLLconst {
927 continue
928 }
929 c := auxIntToInt32(v_1.AuxInt)
930 y := v_1.Args[0]
931 flags := v_2
932 v.reset(OpARMADCshiftLL)
933 v.AuxInt = int32ToAuxInt(c)
934 v.AddArg3(x, y, flags)
935 return true
936 }
937 break
938 }
939
940
941 for {
942 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
943 x := v_0
944 if v_1.Op != OpARMSRLconst {
945 continue
946 }
947 c := auxIntToInt32(v_1.AuxInt)
948 y := v_1.Args[0]
949 flags := v_2
950 v.reset(OpARMADCshiftRL)
951 v.AuxInt = int32ToAuxInt(c)
952 v.AddArg3(x, y, flags)
953 return true
954 }
955 break
956 }
957
958
959 for {
960 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
961 x := v_0
962 if v_1.Op != OpARMSRAconst {
963 continue
964 }
965 c := auxIntToInt32(v_1.AuxInt)
966 y := v_1.Args[0]
967 flags := v_2
968 v.reset(OpARMADCshiftRA)
969 v.AuxInt = int32ToAuxInt(c)
970 v.AddArg3(x, y, flags)
971 return true
972 }
973 break
974 }
975
976
977 for {
978 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
979 x := v_0
980 if v_1.Op != OpARMSLL {
981 continue
982 }
983 z := v_1.Args[1]
984 y := v_1.Args[0]
985 flags := v_2
986 v.reset(OpARMADCshiftLLreg)
987 v.AddArg4(x, y, z, flags)
988 return true
989 }
990 break
991 }
992
993
994 for {
995 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
996 x := v_0
997 if v_1.Op != OpARMSRL {
998 continue
999 }
1000 z := v_1.Args[1]
1001 y := v_1.Args[0]
1002 flags := v_2
1003 v.reset(OpARMADCshiftRLreg)
1004 v.AddArg4(x, y, z, flags)
1005 return true
1006 }
1007 break
1008 }
1009
1010
1011 for {
1012 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1013 x := v_0
1014 if v_1.Op != OpARMSRA {
1015 continue
1016 }
1017 z := v_1.Args[1]
1018 y := v_1.Args[0]
1019 flags := v_2
1020 v.reset(OpARMADCshiftRAreg)
1021 v.AddArg4(x, y, z, flags)
1022 return true
1023 }
1024 break
1025 }
1026 return false
1027 }
1028 func rewriteValueARM_OpARMADCconst(v *Value) bool {
1029 v_1 := v.Args[1]
1030 v_0 := v.Args[0]
1031
1032
1033 for {
1034 c := auxIntToInt32(v.AuxInt)
1035 if v_0.Op != OpARMADDconst {
1036 break
1037 }
1038 d := auxIntToInt32(v_0.AuxInt)
1039 x := v_0.Args[0]
1040 flags := v_1
1041 v.reset(OpARMADCconst)
1042 v.AuxInt = int32ToAuxInt(c + d)
1043 v.AddArg2(x, flags)
1044 return true
1045 }
1046
1047
1048 for {
1049 c := auxIntToInt32(v.AuxInt)
1050 if v_0.Op != OpARMSUBconst {
1051 break
1052 }
1053 d := auxIntToInt32(v_0.AuxInt)
1054 x := v_0.Args[0]
1055 flags := v_1
1056 v.reset(OpARMADCconst)
1057 v.AuxInt = int32ToAuxInt(c - d)
1058 v.AddArg2(x, flags)
1059 return true
1060 }
1061 return false
1062 }
1063 func rewriteValueARM_OpARMADCshiftLL(v *Value) bool {
1064 v_2 := v.Args[2]
1065 v_1 := v.Args[1]
1066 v_0 := v.Args[0]
1067 b := v.Block
1068
1069
1070 for {
1071 d := auxIntToInt32(v.AuxInt)
1072 if v_0.Op != OpARMMOVWconst {
1073 break
1074 }
1075 c := auxIntToInt32(v_0.AuxInt)
1076 x := v_1
1077 flags := v_2
1078 v.reset(OpARMADCconst)
1079 v.AuxInt = int32ToAuxInt(c)
1080 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
1081 v0.AuxInt = int32ToAuxInt(d)
1082 v0.AddArg(x)
1083 v.AddArg2(v0, flags)
1084 return true
1085 }
1086
1087
1088 for {
1089 d := auxIntToInt32(v.AuxInt)
1090 x := v_0
1091 if v_1.Op != OpARMMOVWconst {
1092 break
1093 }
1094 c := auxIntToInt32(v_1.AuxInt)
1095 flags := v_2
1096 v.reset(OpARMADCconst)
1097 v.AuxInt = int32ToAuxInt(c << uint64(d))
1098 v.AddArg2(x, flags)
1099 return true
1100 }
1101 return false
1102 }
1103 func rewriteValueARM_OpARMADCshiftLLreg(v *Value) bool {
1104 v_3 := v.Args[3]
1105 v_2 := v.Args[2]
1106 v_1 := v.Args[1]
1107 v_0 := v.Args[0]
1108 b := v.Block
1109
1110
1111 for {
1112 if v_0.Op != OpARMMOVWconst {
1113 break
1114 }
1115 c := auxIntToInt32(v_0.AuxInt)
1116 x := v_1
1117 y := v_2
1118 flags := v_3
1119 v.reset(OpARMADCconst)
1120 v.AuxInt = int32ToAuxInt(c)
1121 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
1122 v0.AddArg2(x, y)
1123 v.AddArg2(v0, flags)
1124 return true
1125 }
1126
1127
1128
1129 for {
1130 x := v_0
1131 y := v_1
1132 if v_2.Op != OpARMMOVWconst {
1133 break
1134 }
1135 c := auxIntToInt32(v_2.AuxInt)
1136 flags := v_3
1137 if !(0 <= c && c < 32) {
1138 break
1139 }
1140 v.reset(OpARMADCshiftLL)
1141 v.AuxInt = int32ToAuxInt(c)
1142 v.AddArg3(x, y, flags)
1143 return true
1144 }
1145 return false
1146 }
1147 func rewriteValueARM_OpARMADCshiftRA(v *Value) bool {
1148 v_2 := v.Args[2]
1149 v_1 := v.Args[1]
1150 v_0 := v.Args[0]
1151 b := v.Block
1152
1153
1154 for {
1155 d := auxIntToInt32(v.AuxInt)
1156 if v_0.Op != OpARMMOVWconst {
1157 break
1158 }
1159 c := auxIntToInt32(v_0.AuxInt)
1160 x := v_1
1161 flags := v_2
1162 v.reset(OpARMADCconst)
1163 v.AuxInt = int32ToAuxInt(c)
1164 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
1165 v0.AuxInt = int32ToAuxInt(d)
1166 v0.AddArg(x)
1167 v.AddArg2(v0, flags)
1168 return true
1169 }
1170
1171
1172 for {
1173 d := auxIntToInt32(v.AuxInt)
1174 x := v_0
1175 if v_1.Op != OpARMMOVWconst {
1176 break
1177 }
1178 c := auxIntToInt32(v_1.AuxInt)
1179 flags := v_2
1180 v.reset(OpARMADCconst)
1181 v.AuxInt = int32ToAuxInt(c >> uint64(d))
1182 v.AddArg2(x, flags)
1183 return true
1184 }
1185 return false
1186 }
1187 func rewriteValueARM_OpARMADCshiftRAreg(v *Value) bool {
1188 v_3 := v.Args[3]
1189 v_2 := v.Args[2]
1190 v_1 := v.Args[1]
1191 v_0 := v.Args[0]
1192 b := v.Block
1193
1194
1195 for {
1196 if v_0.Op != OpARMMOVWconst {
1197 break
1198 }
1199 c := auxIntToInt32(v_0.AuxInt)
1200 x := v_1
1201 y := v_2
1202 flags := v_3
1203 v.reset(OpARMADCconst)
1204 v.AuxInt = int32ToAuxInt(c)
1205 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
1206 v0.AddArg2(x, y)
1207 v.AddArg2(v0, flags)
1208 return true
1209 }
1210
1211
1212
1213 for {
1214 x := v_0
1215 y := v_1
1216 if v_2.Op != OpARMMOVWconst {
1217 break
1218 }
1219 c := auxIntToInt32(v_2.AuxInt)
1220 flags := v_3
1221 if !(0 <= c && c < 32) {
1222 break
1223 }
1224 v.reset(OpARMADCshiftRA)
1225 v.AuxInt = int32ToAuxInt(c)
1226 v.AddArg3(x, y, flags)
1227 return true
1228 }
1229 return false
1230 }
1231 func rewriteValueARM_OpARMADCshiftRL(v *Value) bool {
1232 v_2 := v.Args[2]
1233 v_1 := v.Args[1]
1234 v_0 := v.Args[0]
1235 b := v.Block
1236
1237
1238 for {
1239 d := auxIntToInt32(v.AuxInt)
1240 if v_0.Op != OpARMMOVWconst {
1241 break
1242 }
1243 c := auxIntToInt32(v_0.AuxInt)
1244 x := v_1
1245 flags := v_2
1246 v.reset(OpARMADCconst)
1247 v.AuxInt = int32ToAuxInt(c)
1248 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
1249 v0.AuxInt = int32ToAuxInt(d)
1250 v0.AddArg(x)
1251 v.AddArg2(v0, flags)
1252 return true
1253 }
1254
1255
1256 for {
1257 d := auxIntToInt32(v.AuxInt)
1258 x := v_0
1259 if v_1.Op != OpARMMOVWconst {
1260 break
1261 }
1262 c := auxIntToInt32(v_1.AuxInt)
1263 flags := v_2
1264 v.reset(OpARMADCconst)
1265 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1266 v.AddArg2(x, flags)
1267 return true
1268 }
1269 return false
1270 }
1271 func rewriteValueARM_OpARMADCshiftRLreg(v *Value) bool {
1272 v_3 := v.Args[3]
1273 v_2 := v.Args[2]
1274 v_1 := v.Args[1]
1275 v_0 := v.Args[0]
1276 b := v.Block
1277
1278
1279 for {
1280 if v_0.Op != OpARMMOVWconst {
1281 break
1282 }
1283 c := auxIntToInt32(v_0.AuxInt)
1284 x := v_1
1285 y := v_2
1286 flags := v_3
1287 v.reset(OpARMADCconst)
1288 v.AuxInt = int32ToAuxInt(c)
1289 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
1290 v0.AddArg2(x, y)
1291 v.AddArg2(v0, flags)
1292 return true
1293 }
1294
1295
1296
1297 for {
1298 x := v_0
1299 y := v_1
1300 if v_2.Op != OpARMMOVWconst {
1301 break
1302 }
1303 c := auxIntToInt32(v_2.AuxInt)
1304 flags := v_3
1305 if !(0 <= c && c < 32) {
1306 break
1307 }
1308 v.reset(OpARMADCshiftRL)
1309 v.AuxInt = int32ToAuxInt(c)
1310 v.AddArg3(x, y, flags)
1311 return true
1312 }
1313 return false
1314 }
1315 func rewriteValueARM_OpARMADD(v *Value) bool {
1316 v_1 := v.Args[1]
1317 v_0 := v.Args[0]
1318 b := v.Block
1319
1320
1321 for {
1322 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1323 x := v_0
1324 if v_1.Op != OpARMMOVWconst {
1325 continue
1326 }
1327 c := auxIntToInt32(v_1.AuxInt)
1328 v.reset(OpARMADDconst)
1329 v.AuxInt = int32ToAuxInt(c)
1330 v.AddArg(x)
1331 return true
1332 }
1333 break
1334 }
1335
1336
1337 for {
1338 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1339 x := v_0
1340 if v_1.Op != OpARMSLLconst {
1341 continue
1342 }
1343 c := auxIntToInt32(v_1.AuxInt)
1344 y := v_1.Args[0]
1345 v.reset(OpARMADDshiftLL)
1346 v.AuxInt = int32ToAuxInt(c)
1347 v.AddArg2(x, y)
1348 return true
1349 }
1350 break
1351 }
1352
1353
1354 for {
1355 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1356 x := v_0
1357 if v_1.Op != OpARMSRLconst {
1358 continue
1359 }
1360 c := auxIntToInt32(v_1.AuxInt)
1361 y := v_1.Args[0]
1362 v.reset(OpARMADDshiftRL)
1363 v.AuxInt = int32ToAuxInt(c)
1364 v.AddArg2(x, y)
1365 return true
1366 }
1367 break
1368 }
1369
1370
1371 for {
1372 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1373 x := v_0
1374 if v_1.Op != OpARMSRAconst {
1375 continue
1376 }
1377 c := auxIntToInt32(v_1.AuxInt)
1378 y := v_1.Args[0]
1379 v.reset(OpARMADDshiftRA)
1380 v.AuxInt = int32ToAuxInt(c)
1381 v.AddArg2(x, y)
1382 return true
1383 }
1384 break
1385 }
1386
1387
1388 for {
1389 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1390 x := v_0
1391 if v_1.Op != OpARMSLL {
1392 continue
1393 }
1394 z := v_1.Args[1]
1395 y := v_1.Args[0]
1396 v.reset(OpARMADDshiftLLreg)
1397 v.AddArg3(x, y, z)
1398 return true
1399 }
1400 break
1401 }
1402
1403
1404 for {
1405 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1406 x := v_0
1407 if v_1.Op != OpARMSRL {
1408 continue
1409 }
1410 z := v_1.Args[1]
1411 y := v_1.Args[0]
1412 v.reset(OpARMADDshiftRLreg)
1413 v.AddArg3(x, y, z)
1414 return true
1415 }
1416 break
1417 }
1418
1419
1420 for {
1421 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1422 x := v_0
1423 if v_1.Op != OpARMSRA {
1424 continue
1425 }
1426 z := v_1.Args[1]
1427 y := v_1.Args[0]
1428 v.reset(OpARMADDshiftRAreg)
1429 v.AddArg3(x, y, z)
1430 return true
1431 }
1432 break
1433 }
1434
1435
1436 for {
1437 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1438 x := v_0
1439 if v_1.Op != OpARMRSBconst || auxIntToInt32(v_1.AuxInt) != 0 {
1440 continue
1441 }
1442 y := v_1.Args[0]
1443 v.reset(OpARMSUB)
1444 v.AddArg2(x, y)
1445 return true
1446 }
1447 break
1448 }
1449
1450
1451 for {
1452 t := v.Type
1453 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1454 if v_0.Op != OpARMRSBconst {
1455 continue
1456 }
1457 c := auxIntToInt32(v_0.AuxInt)
1458 x := v_0.Args[0]
1459 if v_1.Op != OpARMRSBconst {
1460 continue
1461 }
1462 d := auxIntToInt32(v_1.AuxInt)
1463 y := v_1.Args[0]
1464 v.reset(OpARMRSBconst)
1465 v.AuxInt = int32ToAuxInt(c + d)
1466 v0 := b.NewValue0(v.Pos, OpARMADD, t)
1467 v0.AddArg2(x, y)
1468 v.AddArg(v0)
1469 return true
1470 }
1471 break
1472 }
1473
1474
1475 for {
1476 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1477 if v_0.Op != OpARMMUL {
1478 continue
1479 }
1480 y := v_0.Args[1]
1481 x := v_0.Args[0]
1482 a := v_1
1483 v.reset(OpARMMULA)
1484 v.AddArg3(x, y, a)
1485 return true
1486 }
1487 break
1488 }
1489 return false
1490 }
1491 func rewriteValueARM_OpARMADDD(v *Value) bool {
1492 v_1 := v.Args[1]
1493 v_0 := v.Args[0]
1494
1495
1496
1497 for {
1498 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1499 a := v_0
1500 if v_1.Op != OpARMMULD {
1501 continue
1502 }
1503 y := v_1.Args[1]
1504 x := v_1.Args[0]
1505 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
1506 continue
1507 }
1508 v.reset(OpARMMULAD)
1509 v.AddArg3(a, x, y)
1510 return true
1511 }
1512 break
1513 }
1514
1515
1516
1517 for {
1518 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1519 a := v_0
1520 if v_1.Op != OpARMNMULD {
1521 continue
1522 }
1523 y := v_1.Args[1]
1524 x := v_1.Args[0]
1525 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
1526 continue
1527 }
1528 v.reset(OpARMMULSD)
1529 v.AddArg3(a, x, y)
1530 return true
1531 }
1532 break
1533 }
1534 return false
1535 }
1536 func rewriteValueARM_OpARMADDF(v *Value) bool {
1537 v_1 := v.Args[1]
1538 v_0 := v.Args[0]
1539
1540
1541
1542 for {
1543 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1544 a := v_0
1545 if v_1.Op != OpARMMULF {
1546 continue
1547 }
1548 y := v_1.Args[1]
1549 x := v_1.Args[0]
1550 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
1551 continue
1552 }
1553 v.reset(OpARMMULAF)
1554 v.AddArg3(a, x, y)
1555 return true
1556 }
1557 break
1558 }
1559
1560
1561
1562 for {
1563 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1564 a := v_0
1565 if v_1.Op != OpARMNMULF {
1566 continue
1567 }
1568 y := v_1.Args[1]
1569 x := v_1.Args[0]
1570 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
1571 continue
1572 }
1573 v.reset(OpARMMULSF)
1574 v.AddArg3(a, x, y)
1575 return true
1576 }
1577 break
1578 }
1579 return false
1580 }
1581 func rewriteValueARM_OpARMADDS(v *Value) bool {
1582 v_1 := v.Args[1]
1583 v_0 := v.Args[0]
1584
1585
1586 for {
1587 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1588 x := v_0
1589 if v_1.Op != OpARMMOVWconst {
1590 continue
1591 }
1592 c := auxIntToInt32(v_1.AuxInt)
1593 v.reset(OpARMADDSconst)
1594 v.AuxInt = int32ToAuxInt(c)
1595 v.AddArg(x)
1596 return true
1597 }
1598 break
1599 }
1600
1601
1602 for {
1603 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1604 x := v_0
1605 if v_1.Op != OpARMSLLconst {
1606 continue
1607 }
1608 c := auxIntToInt32(v_1.AuxInt)
1609 y := v_1.Args[0]
1610 v.reset(OpARMADDSshiftLL)
1611 v.AuxInt = int32ToAuxInt(c)
1612 v.AddArg2(x, y)
1613 return true
1614 }
1615 break
1616 }
1617
1618
1619 for {
1620 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1621 x := v_0
1622 if v_1.Op != OpARMSRLconst {
1623 continue
1624 }
1625 c := auxIntToInt32(v_1.AuxInt)
1626 y := v_1.Args[0]
1627 v.reset(OpARMADDSshiftRL)
1628 v.AuxInt = int32ToAuxInt(c)
1629 v.AddArg2(x, y)
1630 return true
1631 }
1632 break
1633 }
1634
1635
1636 for {
1637 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1638 x := v_0
1639 if v_1.Op != OpARMSRAconst {
1640 continue
1641 }
1642 c := auxIntToInt32(v_1.AuxInt)
1643 y := v_1.Args[0]
1644 v.reset(OpARMADDSshiftRA)
1645 v.AuxInt = int32ToAuxInt(c)
1646 v.AddArg2(x, y)
1647 return true
1648 }
1649 break
1650 }
1651
1652
1653 for {
1654 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1655 x := v_0
1656 if v_1.Op != OpARMSLL {
1657 continue
1658 }
1659 z := v_1.Args[1]
1660 y := v_1.Args[0]
1661 v.reset(OpARMADDSshiftLLreg)
1662 v.AddArg3(x, y, z)
1663 return true
1664 }
1665 break
1666 }
1667
1668
1669 for {
1670 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1671 x := v_0
1672 if v_1.Op != OpARMSRL {
1673 continue
1674 }
1675 z := v_1.Args[1]
1676 y := v_1.Args[0]
1677 v.reset(OpARMADDSshiftRLreg)
1678 v.AddArg3(x, y, z)
1679 return true
1680 }
1681 break
1682 }
1683
1684
1685 for {
1686 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1687 x := v_0
1688 if v_1.Op != OpARMSRA {
1689 continue
1690 }
1691 z := v_1.Args[1]
1692 y := v_1.Args[0]
1693 v.reset(OpARMADDSshiftRAreg)
1694 v.AddArg3(x, y, z)
1695 return true
1696 }
1697 break
1698 }
1699 return false
1700 }
1701 func rewriteValueARM_OpARMADDSshiftLL(v *Value) bool {
1702 v_1 := v.Args[1]
1703 v_0 := v.Args[0]
1704 b := v.Block
1705
1706
1707 for {
1708 d := auxIntToInt32(v.AuxInt)
1709 if v_0.Op != OpARMMOVWconst {
1710 break
1711 }
1712 c := auxIntToInt32(v_0.AuxInt)
1713 x := v_1
1714 v.reset(OpARMADDSconst)
1715 v.AuxInt = int32ToAuxInt(c)
1716 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
1717 v0.AuxInt = int32ToAuxInt(d)
1718 v0.AddArg(x)
1719 v.AddArg(v0)
1720 return true
1721 }
1722
1723
1724 for {
1725 d := auxIntToInt32(v.AuxInt)
1726 x := v_0
1727 if v_1.Op != OpARMMOVWconst {
1728 break
1729 }
1730 c := auxIntToInt32(v_1.AuxInt)
1731 v.reset(OpARMADDSconst)
1732 v.AuxInt = int32ToAuxInt(c << uint64(d))
1733 v.AddArg(x)
1734 return true
1735 }
1736 return false
1737 }
1738 func rewriteValueARM_OpARMADDSshiftLLreg(v *Value) bool {
1739 v_2 := v.Args[2]
1740 v_1 := v.Args[1]
1741 v_0 := v.Args[0]
1742 b := v.Block
1743
1744
1745 for {
1746 if v_0.Op != OpARMMOVWconst {
1747 break
1748 }
1749 c := auxIntToInt32(v_0.AuxInt)
1750 x := v_1
1751 y := v_2
1752 v.reset(OpARMADDSconst)
1753 v.AuxInt = int32ToAuxInt(c)
1754 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
1755 v0.AddArg2(x, y)
1756 v.AddArg(v0)
1757 return true
1758 }
1759
1760
1761
1762 for {
1763 x := v_0
1764 y := v_1
1765 if v_2.Op != OpARMMOVWconst {
1766 break
1767 }
1768 c := auxIntToInt32(v_2.AuxInt)
1769 if !(0 <= c && c < 32) {
1770 break
1771 }
1772 v.reset(OpARMADDSshiftLL)
1773 v.AuxInt = int32ToAuxInt(c)
1774 v.AddArg2(x, y)
1775 return true
1776 }
1777 return false
1778 }
1779 func rewriteValueARM_OpARMADDSshiftRA(v *Value) bool {
1780 v_1 := v.Args[1]
1781 v_0 := v.Args[0]
1782 b := v.Block
1783
1784
1785 for {
1786 d := auxIntToInt32(v.AuxInt)
1787 if v_0.Op != OpARMMOVWconst {
1788 break
1789 }
1790 c := auxIntToInt32(v_0.AuxInt)
1791 x := v_1
1792 v.reset(OpARMADDSconst)
1793 v.AuxInt = int32ToAuxInt(c)
1794 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
1795 v0.AuxInt = int32ToAuxInt(d)
1796 v0.AddArg(x)
1797 v.AddArg(v0)
1798 return true
1799 }
1800
1801
1802 for {
1803 d := auxIntToInt32(v.AuxInt)
1804 x := v_0
1805 if v_1.Op != OpARMMOVWconst {
1806 break
1807 }
1808 c := auxIntToInt32(v_1.AuxInt)
1809 v.reset(OpARMADDSconst)
1810 v.AuxInt = int32ToAuxInt(c >> uint64(d))
1811 v.AddArg(x)
1812 return true
1813 }
1814 return false
1815 }
1816 func rewriteValueARM_OpARMADDSshiftRAreg(v *Value) bool {
1817 v_2 := v.Args[2]
1818 v_1 := v.Args[1]
1819 v_0 := v.Args[0]
1820 b := v.Block
1821
1822
1823 for {
1824 if v_0.Op != OpARMMOVWconst {
1825 break
1826 }
1827 c := auxIntToInt32(v_0.AuxInt)
1828 x := v_1
1829 y := v_2
1830 v.reset(OpARMADDSconst)
1831 v.AuxInt = int32ToAuxInt(c)
1832 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
1833 v0.AddArg2(x, y)
1834 v.AddArg(v0)
1835 return true
1836 }
1837
1838
1839
1840 for {
1841 x := v_0
1842 y := v_1
1843 if v_2.Op != OpARMMOVWconst {
1844 break
1845 }
1846 c := auxIntToInt32(v_2.AuxInt)
1847 if !(0 <= c && c < 32) {
1848 break
1849 }
1850 v.reset(OpARMADDSshiftRA)
1851 v.AuxInt = int32ToAuxInt(c)
1852 v.AddArg2(x, y)
1853 return true
1854 }
1855 return false
1856 }
1857 func rewriteValueARM_OpARMADDSshiftRL(v *Value) bool {
1858 v_1 := v.Args[1]
1859 v_0 := v.Args[0]
1860 b := v.Block
1861
1862
1863 for {
1864 d := auxIntToInt32(v.AuxInt)
1865 if v_0.Op != OpARMMOVWconst {
1866 break
1867 }
1868 c := auxIntToInt32(v_0.AuxInt)
1869 x := v_1
1870 v.reset(OpARMADDSconst)
1871 v.AuxInt = int32ToAuxInt(c)
1872 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
1873 v0.AuxInt = int32ToAuxInt(d)
1874 v0.AddArg(x)
1875 v.AddArg(v0)
1876 return true
1877 }
1878
1879
1880 for {
1881 d := auxIntToInt32(v.AuxInt)
1882 x := v_0
1883 if v_1.Op != OpARMMOVWconst {
1884 break
1885 }
1886 c := auxIntToInt32(v_1.AuxInt)
1887 v.reset(OpARMADDSconst)
1888 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1889 v.AddArg(x)
1890 return true
1891 }
1892 return false
1893 }
1894 func rewriteValueARM_OpARMADDSshiftRLreg(v *Value) bool {
1895 v_2 := v.Args[2]
1896 v_1 := v.Args[1]
1897 v_0 := v.Args[0]
1898 b := v.Block
1899
1900
1901 for {
1902 if v_0.Op != OpARMMOVWconst {
1903 break
1904 }
1905 c := auxIntToInt32(v_0.AuxInt)
1906 x := v_1
1907 y := v_2
1908 v.reset(OpARMADDSconst)
1909 v.AuxInt = int32ToAuxInt(c)
1910 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
1911 v0.AddArg2(x, y)
1912 v.AddArg(v0)
1913 return true
1914 }
1915
1916
1917
1918 for {
1919 x := v_0
1920 y := v_1
1921 if v_2.Op != OpARMMOVWconst {
1922 break
1923 }
1924 c := auxIntToInt32(v_2.AuxInt)
1925 if !(0 <= c && c < 32) {
1926 break
1927 }
1928 v.reset(OpARMADDSshiftRL)
1929 v.AuxInt = int32ToAuxInt(c)
1930 v.AddArg2(x, y)
1931 return true
1932 }
1933 return false
1934 }
1935 func rewriteValueARM_OpARMADDconst(v *Value) bool {
1936 v_0 := v.Args[0]
1937
1938
1939 for {
1940 off1 := auxIntToInt32(v.AuxInt)
1941 if v_0.Op != OpARMMOVWaddr {
1942 break
1943 }
1944 off2 := auxIntToInt32(v_0.AuxInt)
1945 sym := auxToSym(v_0.Aux)
1946 ptr := v_0.Args[0]
1947 v.reset(OpARMMOVWaddr)
1948 v.AuxInt = int32ToAuxInt(off1 + off2)
1949 v.Aux = symToAux(sym)
1950 v.AddArg(ptr)
1951 return true
1952 }
1953
1954
1955 for {
1956 if auxIntToInt32(v.AuxInt) != 0 {
1957 break
1958 }
1959 x := v_0
1960 v.copyOf(x)
1961 return true
1962 }
1963
1964
1965
1966 for {
1967 c := auxIntToInt32(v.AuxInt)
1968 x := v_0
1969 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
1970 break
1971 }
1972 v.reset(OpARMSUBconst)
1973 v.AuxInt = int32ToAuxInt(-c)
1974 v.AddArg(x)
1975 return true
1976 }
1977
1978
1979
1980 for {
1981 c := auxIntToInt32(v.AuxInt)
1982 x := v_0
1983 if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
1984 break
1985 }
1986 v.reset(OpARMSUBconst)
1987 v.AuxInt = int32ToAuxInt(-c)
1988 v.AddArg(x)
1989 return true
1990 }
1991
1992
1993 for {
1994 c := auxIntToInt32(v.AuxInt)
1995 if v_0.Op != OpARMMOVWconst {
1996 break
1997 }
1998 d := auxIntToInt32(v_0.AuxInt)
1999 v.reset(OpARMMOVWconst)
2000 v.AuxInt = int32ToAuxInt(c + d)
2001 return true
2002 }
2003
2004
2005 for {
2006 c := auxIntToInt32(v.AuxInt)
2007 if v_0.Op != OpARMADDconst {
2008 break
2009 }
2010 d := auxIntToInt32(v_0.AuxInt)
2011 x := v_0.Args[0]
2012 v.reset(OpARMADDconst)
2013 v.AuxInt = int32ToAuxInt(c + d)
2014 v.AddArg(x)
2015 return true
2016 }
2017
2018
2019 for {
2020 c := auxIntToInt32(v.AuxInt)
2021 if v_0.Op != OpARMSUBconst {
2022 break
2023 }
2024 d := auxIntToInt32(v_0.AuxInt)
2025 x := v_0.Args[0]
2026 v.reset(OpARMADDconst)
2027 v.AuxInt = int32ToAuxInt(c - d)
2028 v.AddArg(x)
2029 return true
2030 }
2031
2032
2033 for {
2034 c := auxIntToInt32(v.AuxInt)
2035 if v_0.Op != OpARMRSBconst {
2036 break
2037 }
2038 d := auxIntToInt32(v_0.AuxInt)
2039 x := v_0.Args[0]
2040 v.reset(OpARMRSBconst)
2041 v.AuxInt = int32ToAuxInt(c + d)
2042 v.AddArg(x)
2043 return true
2044 }
2045 return false
2046 }
2047 func rewriteValueARM_OpARMADDshiftLL(v *Value) bool {
2048 v_1 := v.Args[1]
2049 v_0 := v.Args[0]
2050 b := v.Block
2051 typ := &b.Func.Config.Types
2052
2053
2054 for {
2055 d := auxIntToInt32(v.AuxInt)
2056 if v_0.Op != OpARMMOVWconst {
2057 break
2058 }
2059 c := auxIntToInt32(v_0.AuxInt)
2060 x := v_1
2061 v.reset(OpARMADDconst)
2062 v.AuxInt = int32ToAuxInt(c)
2063 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
2064 v0.AuxInt = int32ToAuxInt(d)
2065 v0.AddArg(x)
2066 v.AddArg(v0)
2067 return true
2068 }
2069
2070
2071 for {
2072 d := auxIntToInt32(v.AuxInt)
2073 x := v_0
2074 if v_1.Op != OpARMMOVWconst {
2075 break
2076 }
2077 c := auxIntToInt32(v_1.AuxInt)
2078 v.reset(OpARMADDconst)
2079 v.AuxInt = int32ToAuxInt(c << uint64(d))
2080 v.AddArg(x)
2081 return true
2082 }
2083
2084
2085 for {
2086 c := auxIntToInt32(v.AuxInt)
2087 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
2088 break
2089 }
2090 x := v_0.Args[0]
2091 if x != v_1 {
2092 break
2093 }
2094 v.reset(OpARMSRRconst)
2095 v.AuxInt = int32ToAuxInt(32 - c)
2096 v.AddArg(x)
2097 return true
2098 }
2099
2100
2101 for {
2102 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMBFXU || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != int32(armBFAuxInt(8, 8)) {
2103 break
2104 }
2105 x := v_0.Args[0]
2106 if x != v_1 {
2107 break
2108 }
2109 v.reset(OpARMREV16)
2110 v.AddArg(x)
2111 return true
2112 }
2113
2114
2115
2116 for {
2117 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
2118 break
2119 }
2120 v_0_0 := v_0.Args[0]
2121 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
2122 break
2123 }
2124 x := v_0_0.Args[0]
2125 if x != v_1 || !(buildcfg.GOARM >= 6) {
2126 break
2127 }
2128 v.reset(OpARMREV16)
2129 v.AddArg(x)
2130 return true
2131 }
2132 return false
2133 }
2134 func rewriteValueARM_OpARMADDshiftLLreg(v *Value) bool {
2135 v_2 := v.Args[2]
2136 v_1 := v.Args[1]
2137 v_0 := v.Args[0]
2138 b := v.Block
2139
2140
2141 for {
2142 if v_0.Op != OpARMMOVWconst {
2143 break
2144 }
2145 c := auxIntToInt32(v_0.AuxInt)
2146 x := v_1
2147 y := v_2
2148 v.reset(OpARMADDconst)
2149 v.AuxInt = int32ToAuxInt(c)
2150 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
2151 v0.AddArg2(x, y)
2152 v.AddArg(v0)
2153 return true
2154 }
2155
2156
2157
2158 for {
2159 x := v_0
2160 y := v_1
2161 if v_2.Op != OpARMMOVWconst {
2162 break
2163 }
2164 c := auxIntToInt32(v_2.AuxInt)
2165 if !(0 <= c && c < 32) {
2166 break
2167 }
2168 v.reset(OpARMADDshiftLL)
2169 v.AuxInt = int32ToAuxInt(c)
2170 v.AddArg2(x, y)
2171 return true
2172 }
2173 return false
2174 }
2175 func rewriteValueARM_OpARMADDshiftRA(v *Value) bool {
2176 v_1 := v.Args[1]
2177 v_0 := v.Args[0]
2178 b := v.Block
2179
2180
2181 for {
2182 d := auxIntToInt32(v.AuxInt)
2183 if v_0.Op != OpARMMOVWconst {
2184 break
2185 }
2186 c := auxIntToInt32(v_0.AuxInt)
2187 x := v_1
2188 v.reset(OpARMADDconst)
2189 v.AuxInt = int32ToAuxInt(c)
2190 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
2191 v0.AuxInt = int32ToAuxInt(d)
2192 v0.AddArg(x)
2193 v.AddArg(v0)
2194 return true
2195 }
2196
2197
2198 for {
2199 d := auxIntToInt32(v.AuxInt)
2200 x := v_0
2201 if v_1.Op != OpARMMOVWconst {
2202 break
2203 }
2204 c := auxIntToInt32(v_1.AuxInt)
2205 v.reset(OpARMADDconst)
2206 v.AuxInt = int32ToAuxInt(c >> uint64(d))
2207 v.AddArg(x)
2208 return true
2209 }
2210 return false
2211 }
2212 func rewriteValueARM_OpARMADDshiftRAreg(v *Value) bool {
2213 v_2 := v.Args[2]
2214 v_1 := v.Args[1]
2215 v_0 := v.Args[0]
2216 b := v.Block
2217
2218
2219 for {
2220 if v_0.Op != OpARMMOVWconst {
2221 break
2222 }
2223 c := auxIntToInt32(v_0.AuxInt)
2224 x := v_1
2225 y := v_2
2226 v.reset(OpARMADDconst)
2227 v.AuxInt = int32ToAuxInt(c)
2228 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
2229 v0.AddArg2(x, y)
2230 v.AddArg(v0)
2231 return true
2232 }
2233
2234
2235
2236 for {
2237 x := v_0
2238 y := v_1
2239 if v_2.Op != OpARMMOVWconst {
2240 break
2241 }
2242 c := auxIntToInt32(v_2.AuxInt)
2243 if !(0 <= c && c < 32) {
2244 break
2245 }
2246 v.reset(OpARMADDshiftRA)
2247 v.AuxInt = int32ToAuxInt(c)
2248 v.AddArg2(x, y)
2249 return true
2250 }
2251 return false
2252 }
2253 func rewriteValueARM_OpARMADDshiftRL(v *Value) bool {
2254 v_1 := v.Args[1]
2255 v_0 := v.Args[0]
2256 b := v.Block
2257
2258
2259 for {
2260 d := auxIntToInt32(v.AuxInt)
2261 if v_0.Op != OpARMMOVWconst {
2262 break
2263 }
2264 c := auxIntToInt32(v_0.AuxInt)
2265 x := v_1
2266 v.reset(OpARMADDconst)
2267 v.AuxInt = int32ToAuxInt(c)
2268 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
2269 v0.AuxInt = int32ToAuxInt(d)
2270 v0.AddArg(x)
2271 v.AddArg(v0)
2272 return true
2273 }
2274
2275
2276 for {
2277 d := auxIntToInt32(v.AuxInt)
2278 x := v_0
2279 if v_1.Op != OpARMMOVWconst {
2280 break
2281 }
2282 c := auxIntToInt32(v_1.AuxInt)
2283 v.reset(OpARMADDconst)
2284 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2285 v.AddArg(x)
2286 return true
2287 }
2288
2289
2290 for {
2291 c := auxIntToInt32(v.AuxInt)
2292 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
2293 break
2294 }
2295 x := v_0.Args[0]
2296 if x != v_1 {
2297 break
2298 }
2299 v.reset(OpARMSRRconst)
2300 v.AuxInt = int32ToAuxInt(c)
2301 v.AddArg(x)
2302 return true
2303 }
2304 return false
2305 }
2306 func rewriteValueARM_OpARMADDshiftRLreg(v *Value) bool {
2307 v_2 := v.Args[2]
2308 v_1 := v.Args[1]
2309 v_0 := v.Args[0]
2310 b := v.Block
2311
2312
2313 for {
2314 if v_0.Op != OpARMMOVWconst {
2315 break
2316 }
2317 c := auxIntToInt32(v_0.AuxInt)
2318 x := v_1
2319 y := v_2
2320 v.reset(OpARMADDconst)
2321 v.AuxInt = int32ToAuxInt(c)
2322 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
2323 v0.AddArg2(x, y)
2324 v.AddArg(v0)
2325 return true
2326 }
2327
2328
2329
2330 for {
2331 x := v_0
2332 y := v_1
2333 if v_2.Op != OpARMMOVWconst {
2334 break
2335 }
2336 c := auxIntToInt32(v_2.AuxInt)
2337 if !(0 <= c && c < 32) {
2338 break
2339 }
2340 v.reset(OpARMADDshiftRL)
2341 v.AuxInt = int32ToAuxInt(c)
2342 v.AddArg2(x, y)
2343 return true
2344 }
2345 return false
2346 }
2347 func rewriteValueARM_OpARMAND(v *Value) bool {
2348 v_1 := v.Args[1]
2349 v_0 := v.Args[0]
2350
2351
2352 for {
2353 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2354 x := v_0
2355 if v_1.Op != OpARMMOVWconst {
2356 continue
2357 }
2358 c := auxIntToInt32(v_1.AuxInt)
2359 v.reset(OpARMANDconst)
2360 v.AuxInt = int32ToAuxInt(c)
2361 v.AddArg(x)
2362 return true
2363 }
2364 break
2365 }
2366
2367
2368 for {
2369 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2370 x := v_0
2371 if v_1.Op != OpARMSLLconst {
2372 continue
2373 }
2374 c := auxIntToInt32(v_1.AuxInt)
2375 y := v_1.Args[0]
2376 v.reset(OpARMANDshiftLL)
2377 v.AuxInt = int32ToAuxInt(c)
2378 v.AddArg2(x, y)
2379 return true
2380 }
2381 break
2382 }
2383
2384
2385 for {
2386 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2387 x := v_0
2388 if v_1.Op != OpARMSRLconst {
2389 continue
2390 }
2391 c := auxIntToInt32(v_1.AuxInt)
2392 y := v_1.Args[0]
2393 v.reset(OpARMANDshiftRL)
2394 v.AuxInt = int32ToAuxInt(c)
2395 v.AddArg2(x, y)
2396 return true
2397 }
2398 break
2399 }
2400
2401
2402 for {
2403 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2404 x := v_0
2405 if v_1.Op != OpARMSRAconst {
2406 continue
2407 }
2408 c := auxIntToInt32(v_1.AuxInt)
2409 y := v_1.Args[0]
2410 v.reset(OpARMANDshiftRA)
2411 v.AuxInt = int32ToAuxInt(c)
2412 v.AddArg2(x, y)
2413 return true
2414 }
2415 break
2416 }
2417
2418
2419 for {
2420 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2421 x := v_0
2422 if v_1.Op != OpARMSLL {
2423 continue
2424 }
2425 z := v_1.Args[1]
2426 y := v_1.Args[0]
2427 v.reset(OpARMANDshiftLLreg)
2428 v.AddArg3(x, y, z)
2429 return true
2430 }
2431 break
2432 }
2433
2434
2435 for {
2436 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2437 x := v_0
2438 if v_1.Op != OpARMSRL {
2439 continue
2440 }
2441 z := v_1.Args[1]
2442 y := v_1.Args[0]
2443 v.reset(OpARMANDshiftRLreg)
2444 v.AddArg3(x, y, z)
2445 return true
2446 }
2447 break
2448 }
2449
2450
2451 for {
2452 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2453 x := v_0
2454 if v_1.Op != OpARMSRA {
2455 continue
2456 }
2457 z := v_1.Args[1]
2458 y := v_1.Args[0]
2459 v.reset(OpARMANDshiftRAreg)
2460 v.AddArg3(x, y, z)
2461 return true
2462 }
2463 break
2464 }
2465
2466
2467 for {
2468 x := v_0
2469 if x != v_1 {
2470 break
2471 }
2472 v.copyOf(x)
2473 return true
2474 }
2475
2476
2477 for {
2478 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2479 x := v_0
2480 if v_1.Op != OpARMMVN {
2481 continue
2482 }
2483 y := v_1.Args[0]
2484 v.reset(OpARMBIC)
2485 v.AddArg2(x, y)
2486 return true
2487 }
2488 break
2489 }
2490
2491
2492 for {
2493 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2494 x := v_0
2495 if v_1.Op != OpARMMVNshiftLL {
2496 continue
2497 }
2498 c := auxIntToInt32(v_1.AuxInt)
2499 y := v_1.Args[0]
2500 v.reset(OpARMBICshiftLL)
2501 v.AuxInt = int32ToAuxInt(c)
2502 v.AddArg2(x, y)
2503 return true
2504 }
2505 break
2506 }
2507
2508
2509 for {
2510 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2511 x := v_0
2512 if v_1.Op != OpARMMVNshiftRL {
2513 continue
2514 }
2515 c := auxIntToInt32(v_1.AuxInt)
2516 y := v_1.Args[0]
2517 v.reset(OpARMBICshiftRL)
2518 v.AuxInt = int32ToAuxInt(c)
2519 v.AddArg2(x, y)
2520 return true
2521 }
2522 break
2523 }
2524
2525
2526 for {
2527 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2528 x := v_0
2529 if v_1.Op != OpARMMVNshiftRA {
2530 continue
2531 }
2532 c := auxIntToInt32(v_1.AuxInt)
2533 y := v_1.Args[0]
2534 v.reset(OpARMBICshiftRA)
2535 v.AuxInt = int32ToAuxInt(c)
2536 v.AddArg2(x, y)
2537 return true
2538 }
2539 break
2540 }
2541 return false
2542 }
2543 func rewriteValueARM_OpARMANDconst(v *Value) bool {
2544 v_0 := v.Args[0]
2545
2546
2547 for {
2548 if auxIntToInt32(v.AuxInt) != 0 {
2549 break
2550 }
2551 v.reset(OpARMMOVWconst)
2552 v.AuxInt = int32ToAuxInt(0)
2553 return true
2554 }
2555
2556
2557
2558 for {
2559 c := auxIntToInt32(v.AuxInt)
2560 x := v_0
2561 if !(int32(c) == -1) {
2562 break
2563 }
2564 v.copyOf(x)
2565 return true
2566 }
2567
2568
2569
2570 for {
2571 c := auxIntToInt32(v.AuxInt)
2572 x := v_0
2573 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
2574 break
2575 }
2576 v.reset(OpARMBICconst)
2577 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
2578 v.AddArg(x)
2579 return true
2580 }
2581
2582
2583
2584 for {
2585 c := auxIntToInt32(v.AuxInt)
2586 x := v_0
2587 if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
2588 break
2589 }
2590 v.reset(OpARMBICconst)
2591 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
2592 v.AddArg(x)
2593 return true
2594 }
2595
2596
2597 for {
2598 c := auxIntToInt32(v.AuxInt)
2599 if v_0.Op != OpARMMOVWconst {
2600 break
2601 }
2602 d := auxIntToInt32(v_0.AuxInt)
2603 v.reset(OpARMMOVWconst)
2604 v.AuxInt = int32ToAuxInt(c & d)
2605 return true
2606 }
2607
2608
2609 for {
2610 c := auxIntToInt32(v.AuxInt)
2611 if v_0.Op != OpARMANDconst {
2612 break
2613 }
2614 d := auxIntToInt32(v_0.AuxInt)
2615 x := v_0.Args[0]
2616 v.reset(OpARMANDconst)
2617 v.AuxInt = int32ToAuxInt(c & d)
2618 v.AddArg(x)
2619 return true
2620 }
2621 return false
2622 }
2623 func rewriteValueARM_OpARMANDshiftLL(v *Value) bool {
2624 v_1 := v.Args[1]
2625 v_0 := v.Args[0]
2626 b := v.Block
2627
2628
2629 for {
2630 d := auxIntToInt32(v.AuxInt)
2631 if v_0.Op != OpARMMOVWconst {
2632 break
2633 }
2634 c := auxIntToInt32(v_0.AuxInt)
2635 x := v_1
2636 v.reset(OpARMANDconst)
2637 v.AuxInt = int32ToAuxInt(c)
2638 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
2639 v0.AuxInt = int32ToAuxInt(d)
2640 v0.AddArg(x)
2641 v.AddArg(v0)
2642 return true
2643 }
2644
2645
2646 for {
2647 d := auxIntToInt32(v.AuxInt)
2648 x := v_0
2649 if v_1.Op != OpARMMOVWconst {
2650 break
2651 }
2652 c := auxIntToInt32(v_1.AuxInt)
2653 v.reset(OpARMANDconst)
2654 v.AuxInt = int32ToAuxInt(c << uint64(d))
2655 v.AddArg(x)
2656 return true
2657 }
2658
2659
2660 for {
2661 c := auxIntToInt32(v.AuxInt)
2662 y := v_0
2663 if y.Op != OpARMSLLconst || auxIntToInt32(y.AuxInt) != c {
2664 break
2665 }
2666 x := y.Args[0]
2667 if x != v_1 {
2668 break
2669 }
2670 v.copyOf(y)
2671 return true
2672 }
2673 return false
2674 }
2675 func rewriteValueARM_OpARMANDshiftLLreg(v *Value) bool {
2676 v_2 := v.Args[2]
2677 v_1 := v.Args[1]
2678 v_0 := v.Args[0]
2679 b := v.Block
2680
2681
2682 for {
2683 if v_0.Op != OpARMMOVWconst {
2684 break
2685 }
2686 c := auxIntToInt32(v_0.AuxInt)
2687 x := v_1
2688 y := v_2
2689 v.reset(OpARMANDconst)
2690 v.AuxInt = int32ToAuxInt(c)
2691 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
2692 v0.AddArg2(x, y)
2693 v.AddArg(v0)
2694 return true
2695 }
2696
2697
2698
2699 for {
2700 x := v_0
2701 y := v_1
2702 if v_2.Op != OpARMMOVWconst {
2703 break
2704 }
2705 c := auxIntToInt32(v_2.AuxInt)
2706 if !(0 <= c && c < 32) {
2707 break
2708 }
2709 v.reset(OpARMANDshiftLL)
2710 v.AuxInt = int32ToAuxInt(c)
2711 v.AddArg2(x, y)
2712 return true
2713 }
2714 return false
2715 }
2716 func rewriteValueARM_OpARMANDshiftRA(v *Value) bool {
2717 v_1 := v.Args[1]
2718 v_0 := v.Args[0]
2719 b := v.Block
2720
2721
2722 for {
2723 d := auxIntToInt32(v.AuxInt)
2724 if v_0.Op != OpARMMOVWconst {
2725 break
2726 }
2727 c := auxIntToInt32(v_0.AuxInt)
2728 x := v_1
2729 v.reset(OpARMANDconst)
2730 v.AuxInt = int32ToAuxInt(c)
2731 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
2732 v0.AuxInt = int32ToAuxInt(d)
2733 v0.AddArg(x)
2734 v.AddArg(v0)
2735 return true
2736 }
2737
2738
2739 for {
2740 d := auxIntToInt32(v.AuxInt)
2741 x := v_0
2742 if v_1.Op != OpARMMOVWconst {
2743 break
2744 }
2745 c := auxIntToInt32(v_1.AuxInt)
2746 v.reset(OpARMANDconst)
2747 v.AuxInt = int32ToAuxInt(c >> uint64(d))
2748 v.AddArg(x)
2749 return true
2750 }
2751
2752
2753 for {
2754 c := auxIntToInt32(v.AuxInt)
2755 y := v_0
2756 if y.Op != OpARMSRAconst || auxIntToInt32(y.AuxInt) != c {
2757 break
2758 }
2759 x := y.Args[0]
2760 if x != v_1 {
2761 break
2762 }
2763 v.copyOf(y)
2764 return true
2765 }
2766 return false
2767 }
2768 func rewriteValueARM_OpARMANDshiftRAreg(v *Value) bool {
2769 v_2 := v.Args[2]
2770 v_1 := v.Args[1]
2771 v_0 := v.Args[0]
2772 b := v.Block
2773
2774
2775 for {
2776 if v_0.Op != OpARMMOVWconst {
2777 break
2778 }
2779 c := auxIntToInt32(v_0.AuxInt)
2780 x := v_1
2781 y := v_2
2782 v.reset(OpARMANDconst)
2783 v.AuxInt = int32ToAuxInt(c)
2784 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
2785 v0.AddArg2(x, y)
2786 v.AddArg(v0)
2787 return true
2788 }
2789
2790
2791
2792 for {
2793 x := v_0
2794 y := v_1
2795 if v_2.Op != OpARMMOVWconst {
2796 break
2797 }
2798 c := auxIntToInt32(v_2.AuxInt)
2799 if !(0 <= c && c < 32) {
2800 break
2801 }
2802 v.reset(OpARMANDshiftRA)
2803 v.AuxInt = int32ToAuxInt(c)
2804 v.AddArg2(x, y)
2805 return true
2806 }
2807 return false
2808 }
2809 func rewriteValueARM_OpARMANDshiftRL(v *Value) bool {
2810 v_1 := v.Args[1]
2811 v_0 := v.Args[0]
2812 b := v.Block
2813
2814
2815 for {
2816 d := auxIntToInt32(v.AuxInt)
2817 if v_0.Op != OpARMMOVWconst {
2818 break
2819 }
2820 c := auxIntToInt32(v_0.AuxInt)
2821 x := v_1
2822 v.reset(OpARMANDconst)
2823 v.AuxInt = int32ToAuxInt(c)
2824 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
2825 v0.AuxInt = int32ToAuxInt(d)
2826 v0.AddArg(x)
2827 v.AddArg(v0)
2828 return true
2829 }
2830
2831
2832 for {
2833 d := auxIntToInt32(v.AuxInt)
2834 x := v_0
2835 if v_1.Op != OpARMMOVWconst {
2836 break
2837 }
2838 c := auxIntToInt32(v_1.AuxInt)
2839 v.reset(OpARMANDconst)
2840 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2841 v.AddArg(x)
2842 return true
2843 }
2844
2845
2846 for {
2847 c := auxIntToInt32(v.AuxInt)
2848 y := v_0
2849 if y.Op != OpARMSRLconst || auxIntToInt32(y.AuxInt) != c {
2850 break
2851 }
2852 x := y.Args[0]
2853 if x != v_1 {
2854 break
2855 }
2856 v.copyOf(y)
2857 return true
2858 }
2859 return false
2860 }
2861 func rewriteValueARM_OpARMANDshiftRLreg(v *Value) bool {
2862 v_2 := v.Args[2]
2863 v_1 := v.Args[1]
2864 v_0 := v.Args[0]
2865 b := v.Block
2866
2867
2868 for {
2869 if v_0.Op != OpARMMOVWconst {
2870 break
2871 }
2872 c := auxIntToInt32(v_0.AuxInt)
2873 x := v_1
2874 y := v_2
2875 v.reset(OpARMANDconst)
2876 v.AuxInt = int32ToAuxInt(c)
2877 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
2878 v0.AddArg2(x, y)
2879 v.AddArg(v0)
2880 return true
2881 }
2882
2883
2884
2885 for {
2886 x := v_0
2887 y := v_1
2888 if v_2.Op != OpARMMOVWconst {
2889 break
2890 }
2891 c := auxIntToInt32(v_2.AuxInt)
2892 if !(0 <= c && c < 32) {
2893 break
2894 }
2895 v.reset(OpARMANDshiftRL)
2896 v.AuxInt = int32ToAuxInt(c)
2897 v.AddArg2(x, y)
2898 return true
2899 }
2900 return false
2901 }
2902 func rewriteValueARM_OpARMBFX(v *Value) bool {
2903 v_0 := v.Args[0]
2904
2905
2906 for {
2907 c := auxIntToInt32(v.AuxInt)
2908 if v_0.Op != OpARMMOVWconst {
2909 break
2910 }
2911 d := auxIntToInt32(v_0.AuxInt)
2912 v.reset(OpARMMOVWconst)
2913 v.AuxInt = int32ToAuxInt(d << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8)))
2914 return true
2915 }
2916 return false
2917 }
2918 func rewriteValueARM_OpARMBFXU(v *Value) bool {
2919 v_0 := v.Args[0]
2920
2921
2922 for {
2923 c := auxIntToInt32(v.AuxInt)
2924 if v_0.Op != OpARMMOVWconst {
2925 break
2926 }
2927 d := auxIntToInt32(v_0.AuxInt)
2928 v.reset(OpARMMOVWconst)
2929 v.AuxInt = int32ToAuxInt(int32(uint32(d) << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8))))
2930 return true
2931 }
2932 return false
2933 }
2934 func rewriteValueARM_OpARMBIC(v *Value) bool {
2935 v_1 := v.Args[1]
2936 v_0 := v.Args[0]
2937
2938
2939 for {
2940 x := v_0
2941 if v_1.Op != OpARMMOVWconst {
2942 break
2943 }
2944 c := auxIntToInt32(v_1.AuxInt)
2945 v.reset(OpARMBICconst)
2946 v.AuxInt = int32ToAuxInt(c)
2947 v.AddArg(x)
2948 return true
2949 }
2950
2951
2952 for {
2953 x := v_0
2954 if v_1.Op != OpARMSLLconst {
2955 break
2956 }
2957 c := auxIntToInt32(v_1.AuxInt)
2958 y := v_1.Args[0]
2959 v.reset(OpARMBICshiftLL)
2960 v.AuxInt = int32ToAuxInt(c)
2961 v.AddArg2(x, y)
2962 return true
2963 }
2964
2965
2966 for {
2967 x := v_0
2968 if v_1.Op != OpARMSRLconst {
2969 break
2970 }
2971 c := auxIntToInt32(v_1.AuxInt)
2972 y := v_1.Args[0]
2973 v.reset(OpARMBICshiftRL)
2974 v.AuxInt = int32ToAuxInt(c)
2975 v.AddArg2(x, y)
2976 return true
2977 }
2978
2979
2980 for {
2981 x := v_0
2982 if v_1.Op != OpARMSRAconst {
2983 break
2984 }
2985 c := auxIntToInt32(v_1.AuxInt)
2986 y := v_1.Args[0]
2987 v.reset(OpARMBICshiftRA)
2988 v.AuxInt = int32ToAuxInt(c)
2989 v.AddArg2(x, y)
2990 return true
2991 }
2992
2993
2994 for {
2995 x := v_0
2996 if v_1.Op != OpARMSLL {
2997 break
2998 }
2999 z := v_1.Args[1]
3000 y := v_1.Args[0]
3001 v.reset(OpARMBICshiftLLreg)
3002 v.AddArg3(x, y, z)
3003 return true
3004 }
3005
3006
3007 for {
3008 x := v_0
3009 if v_1.Op != OpARMSRL {
3010 break
3011 }
3012 z := v_1.Args[1]
3013 y := v_1.Args[0]
3014 v.reset(OpARMBICshiftRLreg)
3015 v.AddArg3(x, y, z)
3016 return true
3017 }
3018
3019
3020 for {
3021 x := v_0
3022 if v_1.Op != OpARMSRA {
3023 break
3024 }
3025 z := v_1.Args[1]
3026 y := v_1.Args[0]
3027 v.reset(OpARMBICshiftRAreg)
3028 v.AddArg3(x, y, z)
3029 return true
3030 }
3031
3032
3033 for {
3034 x := v_0
3035 if x != v_1 {
3036 break
3037 }
3038 v.reset(OpARMMOVWconst)
3039 v.AuxInt = int32ToAuxInt(0)
3040 return true
3041 }
3042 return false
3043 }
3044 func rewriteValueARM_OpARMBICconst(v *Value) bool {
3045 v_0 := v.Args[0]
3046
3047
3048 for {
3049 if auxIntToInt32(v.AuxInt) != 0 {
3050 break
3051 }
3052 x := v_0
3053 v.copyOf(x)
3054 return true
3055 }
3056
3057
3058
3059 for {
3060 c := auxIntToInt32(v.AuxInt)
3061 if !(int32(c) == -1) {
3062 break
3063 }
3064 v.reset(OpARMMOVWconst)
3065 v.AuxInt = int32ToAuxInt(0)
3066 return true
3067 }
3068
3069
3070
3071 for {
3072 c := auxIntToInt32(v.AuxInt)
3073 x := v_0
3074 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
3075 break
3076 }
3077 v.reset(OpARMANDconst)
3078 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
3079 v.AddArg(x)
3080 return true
3081 }
3082
3083
3084
3085 for {
3086 c := auxIntToInt32(v.AuxInt)
3087 x := v_0
3088 if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
3089 break
3090 }
3091 v.reset(OpARMANDconst)
3092 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
3093 v.AddArg(x)
3094 return true
3095 }
3096
3097
3098 for {
3099 c := auxIntToInt32(v.AuxInt)
3100 if v_0.Op != OpARMMOVWconst {
3101 break
3102 }
3103 d := auxIntToInt32(v_0.AuxInt)
3104 v.reset(OpARMMOVWconst)
3105 v.AuxInt = int32ToAuxInt(d &^ c)
3106 return true
3107 }
3108
3109
3110 for {
3111 c := auxIntToInt32(v.AuxInt)
3112 if v_0.Op != OpARMBICconst {
3113 break
3114 }
3115 d := auxIntToInt32(v_0.AuxInt)
3116 x := v_0.Args[0]
3117 v.reset(OpARMBICconst)
3118 v.AuxInt = int32ToAuxInt(c | d)
3119 v.AddArg(x)
3120 return true
3121 }
3122 return false
3123 }
3124 func rewriteValueARM_OpARMBICshiftLL(v *Value) bool {
3125 v_1 := v.Args[1]
3126 v_0 := v.Args[0]
3127
3128
3129 for {
3130 d := auxIntToInt32(v.AuxInt)
3131 x := v_0
3132 if v_1.Op != OpARMMOVWconst {
3133 break
3134 }
3135 c := auxIntToInt32(v_1.AuxInt)
3136 v.reset(OpARMBICconst)
3137 v.AuxInt = int32ToAuxInt(c << uint64(d))
3138 v.AddArg(x)
3139 return true
3140 }
3141
3142
3143 for {
3144 c := auxIntToInt32(v.AuxInt)
3145 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
3146 break
3147 }
3148 x := v_0.Args[0]
3149 if x != v_1 {
3150 break
3151 }
3152 v.reset(OpARMMOVWconst)
3153 v.AuxInt = int32ToAuxInt(0)
3154 return true
3155 }
3156 return false
3157 }
3158 func rewriteValueARM_OpARMBICshiftLLreg(v *Value) bool {
3159 v_2 := v.Args[2]
3160 v_1 := v.Args[1]
3161 v_0 := v.Args[0]
3162
3163
3164
3165 for {
3166 x := v_0
3167 y := v_1
3168 if v_2.Op != OpARMMOVWconst {
3169 break
3170 }
3171 c := auxIntToInt32(v_2.AuxInt)
3172 if !(0 <= c && c < 32) {
3173 break
3174 }
3175 v.reset(OpARMBICshiftLL)
3176 v.AuxInt = int32ToAuxInt(c)
3177 v.AddArg2(x, y)
3178 return true
3179 }
3180 return false
3181 }
3182 func rewriteValueARM_OpARMBICshiftRA(v *Value) bool {
3183 v_1 := v.Args[1]
3184 v_0 := v.Args[0]
3185
3186
3187 for {
3188 d := auxIntToInt32(v.AuxInt)
3189 x := v_0
3190 if v_1.Op != OpARMMOVWconst {
3191 break
3192 }
3193 c := auxIntToInt32(v_1.AuxInt)
3194 v.reset(OpARMBICconst)
3195 v.AuxInt = int32ToAuxInt(c >> uint64(d))
3196 v.AddArg(x)
3197 return true
3198 }
3199
3200
3201 for {
3202 c := auxIntToInt32(v.AuxInt)
3203 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
3204 break
3205 }
3206 x := v_0.Args[0]
3207 if x != v_1 {
3208 break
3209 }
3210 v.reset(OpARMMOVWconst)
3211 v.AuxInt = int32ToAuxInt(0)
3212 return true
3213 }
3214 return false
3215 }
3216 func rewriteValueARM_OpARMBICshiftRAreg(v *Value) bool {
3217 v_2 := v.Args[2]
3218 v_1 := v.Args[1]
3219 v_0 := v.Args[0]
3220
3221
3222
3223 for {
3224 x := v_0
3225 y := v_1
3226 if v_2.Op != OpARMMOVWconst {
3227 break
3228 }
3229 c := auxIntToInt32(v_2.AuxInt)
3230 if !(0 <= c && c < 32) {
3231 break
3232 }
3233 v.reset(OpARMBICshiftRA)
3234 v.AuxInt = int32ToAuxInt(c)
3235 v.AddArg2(x, y)
3236 return true
3237 }
3238 return false
3239 }
3240 func rewriteValueARM_OpARMBICshiftRL(v *Value) bool {
3241 v_1 := v.Args[1]
3242 v_0 := v.Args[0]
3243
3244
3245 for {
3246 d := auxIntToInt32(v.AuxInt)
3247 x := v_0
3248 if v_1.Op != OpARMMOVWconst {
3249 break
3250 }
3251 c := auxIntToInt32(v_1.AuxInt)
3252 v.reset(OpARMBICconst)
3253 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3254 v.AddArg(x)
3255 return true
3256 }
3257
3258
3259 for {
3260 c := auxIntToInt32(v.AuxInt)
3261 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
3262 break
3263 }
3264 x := v_0.Args[0]
3265 if x != v_1 {
3266 break
3267 }
3268 v.reset(OpARMMOVWconst)
3269 v.AuxInt = int32ToAuxInt(0)
3270 return true
3271 }
3272 return false
3273 }
3274 func rewriteValueARM_OpARMBICshiftRLreg(v *Value) bool {
3275 v_2 := v.Args[2]
3276 v_1 := v.Args[1]
3277 v_0 := v.Args[0]
3278
3279
3280
3281 for {
3282 x := v_0
3283 y := v_1
3284 if v_2.Op != OpARMMOVWconst {
3285 break
3286 }
3287 c := auxIntToInt32(v_2.AuxInt)
3288 if !(0 <= c && c < 32) {
3289 break
3290 }
3291 v.reset(OpARMBICshiftRL)
3292 v.AuxInt = int32ToAuxInt(c)
3293 v.AddArg2(x, y)
3294 return true
3295 }
3296 return false
3297 }
3298 func rewriteValueARM_OpARMCMN(v *Value) bool {
3299 v_1 := v.Args[1]
3300 v_0 := v.Args[0]
3301
3302
3303 for {
3304 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3305 x := v_0
3306 if v_1.Op != OpARMMOVWconst {
3307 continue
3308 }
3309 c := auxIntToInt32(v_1.AuxInt)
3310 v.reset(OpARMCMNconst)
3311 v.AuxInt = int32ToAuxInt(c)
3312 v.AddArg(x)
3313 return true
3314 }
3315 break
3316 }
3317
3318
3319 for {
3320 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3321 x := v_0
3322 if v_1.Op != OpARMSLLconst {
3323 continue
3324 }
3325 c := auxIntToInt32(v_1.AuxInt)
3326 y := v_1.Args[0]
3327 v.reset(OpARMCMNshiftLL)
3328 v.AuxInt = int32ToAuxInt(c)
3329 v.AddArg2(x, y)
3330 return true
3331 }
3332 break
3333 }
3334
3335
3336 for {
3337 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3338 x := v_0
3339 if v_1.Op != OpARMSRLconst {
3340 continue
3341 }
3342 c := auxIntToInt32(v_1.AuxInt)
3343 y := v_1.Args[0]
3344 v.reset(OpARMCMNshiftRL)
3345 v.AuxInt = int32ToAuxInt(c)
3346 v.AddArg2(x, y)
3347 return true
3348 }
3349 break
3350 }
3351
3352
3353 for {
3354 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3355 x := v_0
3356 if v_1.Op != OpARMSRAconst {
3357 continue
3358 }
3359 c := auxIntToInt32(v_1.AuxInt)
3360 y := v_1.Args[0]
3361 v.reset(OpARMCMNshiftRA)
3362 v.AuxInt = int32ToAuxInt(c)
3363 v.AddArg2(x, y)
3364 return true
3365 }
3366 break
3367 }
3368
3369
3370 for {
3371 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3372 x := v_0
3373 if v_1.Op != OpARMSLL {
3374 continue
3375 }
3376 z := v_1.Args[1]
3377 y := v_1.Args[0]
3378 v.reset(OpARMCMNshiftLLreg)
3379 v.AddArg3(x, y, z)
3380 return true
3381 }
3382 break
3383 }
3384
3385
3386 for {
3387 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3388 x := v_0
3389 if v_1.Op != OpARMSRL {
3390 continue
3391 }
3392 z := v_1.Args[1]
3393 y := v_1.Args[0]
3394 v.reset(OpARMCMNshiftRLreg)
3395 v.AddArg3(x, y, z)
3396 return true
3397 }
3398 break
3399 }
3400
3401
3402 for {
3403 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3404 x := v_0
3405 if v_1.Op != OpARMSRA {
3406 continue
3407 }
3408 z := v_1.Args[1]
3409 y := v_1.Args[0]
3410 v.reset(OpARMCMNshiftRAreg)
3411 v.AddArg3(x, y, z)
3412 return true
3413 }
3414 break
3415 }
3416 return false
3417 }
3418 func rewriteValueARM_OpARMCMNconst(v *Value) bool {
3419 v_0 := v.Args[0]
3420
3421
3422 for {
3423 y := auxIntToInt32(v.AuxInt)
3424 if v_0.Op != OpARMMOVWconst {
3425 break
3426 }
3427 x := auxIntToInt32(v_0.AuxInt)
3428 v.reset(OpARMFlagConstant)
3429 v.AuxInt = flagConstantToAuxInt(addFlags32(x, y))
3430 return true
3431 }
3432 return false
3433 }
3434 func rewriteValueARM_OpARMCMNshiftLL(v *Value) bool {
3435 v_1 := v.Args[1]
3436 v_0 := v.Args[0]
3437 b := v.Block
3438
3439
3440 for {
3441 d := auxIntToInt32(v.AuxInt)
3442 if v_0.Op != OpARMMOVWconst {
3443 break
3444 }
3445 c := auxIntToInt32(v_0.AuxInt)
3446 x := v_1
3447 v.reset(OpARMCMNconst)
3448 v.AuxInt = int32ToAuxInt(c)
3449 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
3450 v0.AuxInt = int32ToAuxInt(d)
3451 v0.AddArg(x)
3452 v.AddArg(v0)
3453 return true
3454 }
3455
3456
3457 for {
3458 d := auxIntToInt32(v.AuxInt)
3459 x := v_0
3460 if v_1.Op != OpARMMOVWconst {
3461 break
3462 }
3463 c := auxIntToInt32(v_1.AuxInt)
3464 v.reset(OpARMCMNconst)
3465 v.AuxInt = int32ToAuxInt(c << uint64(d))
3466 v.AddArg(x)
3467 return true
3468 }
3469 return false
3470 }
3471 func rewriteValueARM_OpARMCMNshiftLLreg(v *Value) bool {
3472 v_2 := v.Args[2]
3473 v_1 := v.Args[1]
3474 v_0 := v.Args[0]
3475 b := v.Block
3476
3477
3478 for {
3479 if v_0.Op != OpARMMOVWconst {
3480 break
3481 }
3482 c := auxIntToInt32(v_0.AuxInt)
3483 x := v_1
3484 y := v_2
3485 v.reset(OpARMCMNconst)
3486 v.AuxInt = int32ToAuxInt(c)
3487 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
3488 v0.AddArg2(x, y)
3489 v.AddArg(v0)
3490 return true
3491 }
3492
3493
3494
3495 for {
3496 x := v_0
3497 y := v_1
3498 if v_2.Op != OpARMMOVWconst {
3499 break
3500 }
3501 c := auxIntToInt32(v_2.AuxInt)
3502 if !(0 <= c && c < 32) {
3503 break
3504 }
3505 v.reset(OpARMCMNshiftLL)
3506 v.AuxInt = int32ToAuxInt(c)
3507 v.AddArg2(x, y)
3508 return true
3509 }
3510 return false
3511 }
3512 func rewriteValueARM_OpARMCMNshiftRA(v *Value) bool {
3513 v_1 := v.Args[1]
3514 v_0 := v.Args[0]
3515 b := v.Block
3516
3517
3518 for {
3519 d := auxIntToInt32(v.AuxInt)
3520 if v_0.Op != OpARMMOVWconst {
3521 break
3522 }
3523 c := auxIntToInt32(v_0.AuxInt)
3524 x := v_1
3525 v.reset(OpARMCMNconst)
3526 v.AuxInt = int32ToAuxInt(c)
3527 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
3528 v0.AuxInt = int32ToAuxInt(d)
3529 v0.AddArg(x)
3530 v.AddArg(v0)
3531 return true
3532 }
3533
3534
3535 for {
3536 d := auxIntToInt32(v.AuxInt)
3537 x := v_0
3538 if v_1.Op != OpARMMOVWconst {
3539 break
3540 }
3541 c := auxIntToInt32(v_1.AuxInt)
3542 v.reset(OpARMCMNconst)
3543 v.AuxInt = int32ToAuxInt(c >> uint64(d))
3544 v.AddArg(x)
3545 return true
3546 }
3547 return false
3548 }
3549 func rewriteValueARM_OpARMCMNshiftRAreg(v *Value) bool {
3550 v_2 := v.Args[2]
3551 v_1 := v.Args[1]
3552 v_0 := v.Args[0]
3553 b := v.Block
3554
3555
3556 for {
3557 if v_0.Op != OpARMMOVWconst {
3558 break
3559 }
3560 c := auxIntToInt32(v_0.AuxInt)
3561 x := v_1
3562 y := v_2
3563 v.reset(OpARMCMNconst)
3564 v.AuxInt = int32ToAuxInt(c)
3565 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
3566 v0.AddArg2(x, y)
3567 v.AddArg(v0)
3568 return true
3569 }
3570
3571
3572
3573 for {
3574 x := v_0
3575 y := v_1
3576 if v_2.Op != OpARMMOVWconst {
3577 break
3578 }
3579 c := auxIntToInt32(v_2.AuxInt)
3580 if !(0 <= c && c < 32) {
3581 break
3582 }
3583 v.reset(OpARMCMNshiftRA)
3584 v.AuxInt = int32ToAuxInt(c)
3585 v.AddArg2(x, y)
3586 return true
3587 }
3588 return false
3589 }
3590 func rewriteValueARM_OpARMCMNshiftRL(v *Value) bool {
3591 v_1 := v.Args[1]
3592 v_0 := v.Args[0]
3593 b := v.Block
3594
3595
3596 for {
3597 d := auxIntToInt32(v.AuxInt)
3598 if v_0.Op != OpARMMOVWconst {
3599 break
3600 }
3601 c := auxIntToInt32(v_0.AuxInt)
3602 x := v_1
3603 v.reset(OpARMCMNconst)
3604 v.AuxInt = int32ToAuxInt(c)
3605 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
3606 v0.AuxInt = int32ToAuxInt(d)
3607 v0.AddArg(x)
3608 v.AddArg(v0)
3609 return true
3610 }
3611
3612
3613 for {
3614 d := auxIntToInt32(v.AuxInt)
3615 x := v_0
3616 if v_1.Op != OpARMMOVWconst {
3617 break
3618 }
3619 c := auxIntToInt32(v_1.AuxInt)
3620 v.reset(OpARMCMNconst)
3621 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3622 v.AddArg(x)
3623 return true
3624 }
3625 return false
3626 }
3627 func rewriteValueARM_OpARMCMNshiftRLreg(v *Value) bool {
3628 v_2 := v.Args[2]
3629 v_1 := v.Args[1]
3630 v_0 := v.Args[0]
3631 b := v.Block
3632
3633
3634 for {
3635 if v_0.Op != OpARMMOVWconst {
3636 break
3637 }
3638 c := auxIntToInt32(v_0.AuxInt)
3639 x := v_1
3640 y := v_2
3641 v.reset(OpARMCMNconst)
3642 v.AuxInt = int32ToAuxInt(c)
3643 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
3644 v0.AddArg2(x, y)
3645 v.AddArg(v0)
3646 return true
3647 }
3648
3649
3650
3651 for {
3652 x := v_0
3653 y := v_1
3654 if v_2.Op != OpARMMOVWconst {
3655 break
3656 }
3657 c := auxIntToInt32(v_2.AuxInt)
3658 if !(0 <= c && c < 32) {
3659 break
3660 }
3661 v.reset(OpARMCMNshiftRL)
3662 v.AuxInt = int32ToAuxInt(c)
3663 v.AddArg2(x, y)
3664 return true
3665 }
3666 return false
3667 }
3668 func rewriteValueARM_OpARMCMOVWHSconst(v *Value) bool {
3669 v_1 := v.Args[1]
3670 v_0 := v.Args[0]
3671
3672
3673
3674 for {
3675 c := auxIntToInt32(v.AuxInt)
3676 if v_1.Op != OpARMFlagConstant {
3677 break
3678 }
3679 fc := auxIntToFlagConstant(v_1.AuxInt)
3680 if !(fc.uge()) {
3681 break
3682 }
3683 v.reset(OpARMMOVWconst)
3684 v.AuxInt = int32ToAuxInt(c)
3685 return true
3686 }
3687
3688
3689
3690 for {
3691 x := v_0
3692 if v_1.Op != OpARMFlagConstant {
3693 break
3694 }
3695 fc := auxIntToFlagConstant(v_1.AuxInt)
3696 if !(fc.ult()) {
3697 break
3698 }
3699 v.copyOf(x)
3700 return true
3701 }
3702
3703
3704 for {
3705 c := auxIntToInt32(v.AuxInt)
3706 x := v_0
3707 if v_1.Op != OpARMInvertFlags {
3708 break
3709 }
3710 flags := v_1.Args[0]
3711 v.reset(OpARMCMOVWLSconst)
3712 v.AuxInt = int32ToAuxInt(c)
3713 v.AddArg2(x, flags)
3714 return true
3715 }
3716 return false
3717 }
3718 func rewriteValueARM_OpARMCMOVWLSconst(v *Value) bool {
3719 v_1 := v.Args[1]
3720 v_0 := v.Args[0]
3721
3722
3723
3724 for {
3725 c := auxIntToInt32(v.AuxInt)
3726 if v_1.Op != OpARMFlagConstant {
3727 break
3728 }
3729 fc := auxIntToFlagConstant(v_1.AuxInt)
3730 if !(fc.ule()) {
3731 break
3732 }
3733 v.reset(OpARMMOVWconst)
3734 v.AuxInt = int32ToAuxInt(c)
3735 return true
3736 }
3737
3738
3739
3740 for {
3741 x := v_0
3742 if v_1.Op != OpARMFlagConstant {
3743 break
3744 }
3745 fc := auxIntToFlagConstant(v_1.AuxInt)
3746 if !(fc.ugt()) {
3747 break
3748 }
3749 v.copyOf(x)
3750 return true
3751 }
3752
3753
3754 for {
3755 c := auxIntToInt32(v.AuxInt)
3756 x := v_0
3757 if v_1.Op != OpARMInvertFlags {
3758 break
3759 }
3760 flags := v_1.Args[0]
3761 v.reset(OpARMCMOVWHSconst)
3762 v.AuxInt = int32ToAuxInt(c)
3763 v.AddArg2(x, flags)
3764 return true
3765 }
3766 return false
3767 }
3768 func rewriteValueARM_OpARMCMP(v *Value) bool {
3769 v_1 := v.Args[1]
3770 v_0 := v.Args[0]
3771 b := v.Block
3772
3773
3774 for {
3775 x := v_0
3776 if v_1.Op != OpARMMOVWconst {
3777 break
3778 }
3779 c := auxIntToInt32(v_1.AuxInt)
3780 v.reset(OpARMCMPconst)
3781 v.AuxInt = int32ToAuxInt(c)
3782 v.AddArg(x)
3783 return true
3784 }
3785
3786
3787 for {
3788 if v_0.Op != OpARMMOVWconst {
3789 break
3790 }
3791 c := auxIntToInt32(v_0.AuxInt)
3792 x := v_1
3793 v.reset(OpARMInvertFlags)
3794 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
3795 v0.AuxInt = int32ToAuxInt(c)
3796 v0.AddArg(x)
3797 v.AddArg(v0)
3798 return true
3799 }
3800
3801
3802
3803 for {
3804 x := v_0
3805 y := v_1
3806 if !(canonLessThan(x, y)) {
3807 break
3808 }
3809 v.reset(OpARMInvertFlags)
3810 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
3811 v0.AddArg2(y, x)
3812 v.AddArg(v0)
3813 return true
3814 }
3815
3816
3817 for {
3818 x := v_0
3819 if v_1.Op != OpARMSLLconst {
3820 break
3821 }
3822 c := auxIntToInt32(v_1.AuxInt)
3823 y := v_1.Args[0]
3824 v.reset(OpARMCMPshiftLL)
3825 v.AuxInt = int32ToAuxInt(c)
3826 v.AddArg2(x, y)
3827 return true
3828 }
3829
3830
3831 for {
3832 if v_0.Op != OpARMSLLconst {
3833 break
3834 }
3835 c := auxIntToInt32(v_0.AuxInt)
3836 y := v_0.Args[0]
3837 x := v_1
3838 v.reset(OpARMInvertFlags)
3839 v0 := b.NewValue0(v.Pos, OpARMCMPshiftLL, types.TypeFlags)
3840 v0.AuxInt = int32ToAuxInt(c)
3841 v0.AddArg2(x, y)
3842 v.AddArg(v0)
3843 return true
3844 }
3845
3846
3847 for {
3848 x := v_0
3849 if v_1.Op != OpARMSRLconst {
3850 break
3851 }
3852 c := auxIntToInt32(v_1.AuxInt)
3853 y := v_1.Args[0]
3854 v.reset(OpARMCMPshiftRL)
3855 v.AuxInt = int32ToAuxInt(c)
3856 v.AddArg2(x, y)
3857 return true
3858 }
3859
3860
3861 for {
3862 if v_0.Op != OpARMSRLconst {
3863 break
3864 }
3865 c := auxIntToInt32(v_0.AuxInt)
3866 y := v_0.Args[0]
3867 x := v_1
3868 v.reset(OpARMInvertFlags)
3869 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRL, types.TypeFlags)
3870 v0.AuxInt = int32ToAuxInt(c)
3871 v0.AddArg2(x, y)
3872 v.AddArg(v0)
3873 return true
3874 }
3875
3876
3877 for {
3878 x := v_0
3879 if v_1.Op != OpARMSRAconst {
3880 break
3881 }
3882 c := auxIntToInt32(v_1.AuxInt)
3883 y := v_1.Args[0]
3884 v.reset(OpARMCMPshiftRA)
3885 v.AuxInt = int32ToAuxInt(c)
3886 v.AddArg2(x, y)
3887 return true
3888 }
3889
3890
3891 for {
3892 if v_0.Op != OpARMSRAconst {
3893 break
3894 }
3895 c := auxIntToInt32(v_0.AuxInt)
3896 y := v_0.Args[0]
3897 x := v_1
3898 v.reset(OpARMInvertFlags)
3899 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRA, types.TypeFlags)
3900 v0.AuxInt = int32ToAuxInt(c)
3901 v0.AddArg2(x, y)
3902 v.AddArg(v0)
3903 return true
3904 }
3905
3906
3907 for {
3908 x := v_0
3909 if v_1.Op != OpARMSLL {
3910 break
3911 }
3912 z := v_1.Args[1]
3913 y := v_1.Args[0]
3914 v.reset(OpARMCMPshiftLLreg)
3915 v.AddArg3(x, y, z)
3916 return true
3917 }
3918
3919
3920 for {
3921 if v_0.Op != OpARMSLL {
3922 break
3923 }
3924 z := v_0.Args[1]
3925 y := v_0.Args[0]
3926 x := v_1
3927 v.reset(OpARMInvertFlags)
3928 v0 := b.NewValue0(v.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
3929 v0.AddArg3(x, y, z)
3930 v.AddArg(v0)
3931 return true
3932 }
3933
3934
3935 for {
3936 x := v_0
3937 if v_1.Op != OpARMSRL {
3938 break
3939 }
3940 z := v_1.Args[1]
3941 y := v_1.Args[0]
3942 v.reset(OpARMCMPshiftRLreg)
3943 v.AddArg3(x, y, z)
3944 return true
3945 }
3946
3947
3948 for {
3949 if v_0.Op != OpARMSRL {
3950 break
3951 }
3952 z := v_0.Args[1]
3953 y := v_0.Args[0]
3954 x := v_1
3955 v.reset(OpARMInvertFlags)
3956 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
3957 v0.AddArg3(x, y, z)
3958 v.AddArg(v0)
3959 return true
3960 }
3961
3962
3963 for {
3964 x := v_0
3965 if v_1.Op != OpARMSRA {
3966 break
3967 }
3968 z := v_1.Args[1]
3969 y := v_1.Args[0]
3970 v.reset(OpARMCMPshiftRAreg)
3971 v.AddArg3(x, y, z)
3972 return true
3973 }
3974
3975
3976 for {
3977 if v_0.Op != OpARMSRA {
3978 break
3979 }
3980 z := v_0.Args[1]
3981 y := v_0.Args[0]
3982 x := v_1
3983 v.reset(OpARMInvertFlags)
3984 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
3985 v0.AddArg3(x, y, z)
3986 v.AddArg(v0)
3987 return true
3988 }
3989 return false
3990 }
3991 func rewriteValueARM_OpARMCMPD(v *Value) bool {
3992 v_1 := v.Args[1]
3993 v_0 := v.Args[0]
3994
3995
3996 for {
3997 x := v_0
3998 if v_1.Op != OpARMMOVDconst || auxIntToFloat64(v_1.AuxInt) != 0 {
3999 break
4000 }
4001 v.reset(OpARMCMPD0)
4002 v.AddArg(x)
4003 return true
4004 }
4005 return false
4006 }
4007 func rewriteValueARM_OpARMCMPF(v *Value) bool {
4008 v_1 := v.Args[1]
4009 v_0 := v.Args[0]
4010
4011
4012 for {
4013 x := v_0
4014 if v_1.Op != OpARMMOVFconst || auxIntToFloat64(v_1.AuxInt) != 0 {
4015 break
4016 }
4017 v.reset(OpARMCMPF0)
4018 v.AddArg(x)
4019 return true
4020 }
4021 return false
4022 }
4023 func rewriteValueARM_OpARMCMPconst(v *Value) bool {
4024 v_0 := v.Args[0]
4025
4026
4027 for {
4028 y := auxIntToInt32(v.AuxInt)
4029 if v_0.Op != OpARMMOVWconst {
4030 break
4031 }
4032 x := auxIntToInt32(v_0.AuxInt)
4033 v.reset(OpARMFlagConstant)
4034 v.AuxInt = flagConstantToAuxInt(subFlags32(x, y))
4035 return true
4036 }
4037
4038
4039
4040 for {
4041 c := auxIntToInt32(v.AuxInt)
4042 if v_0.Op != OpARMMOVBUreg || !(0xff < c) {
4043 break
4044 }
4045 v.reset(OpARMFlagConstant)
4046 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4047 return true
4048 }
4049
4050
4051
4052 for {
4053 c := auxIntToInt32(v.AuxInt)
4054 if v_0.Op != OpARMMOVHUreg || !(0xffff < c) {
4055 break
4056 }
4057 v.reset(OpARMFlagConstant)
4058 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4059 return true
4060 }
4061
4062
4063
4064 for {
4065 n := auxIntToInt32(v.AuxInt)
4066 if v_0.Op != OpARMANDconst {
4067 break
4068 }
4069 m := auxIntToInt32(v_0.AuxInt)
4070 if !(0 <= m && m < n) {
4071 break
4072 }
4073 v.reset(OpARMFlagConstant)
4074 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4075 return true
4076 }
4077
4078
4079
4080 for {
4081 n := auxIntToInt32(v.AuxInt)
4082 if v_0.Op != OpARMSRLconst {
4083 break
4084 }
4085 c := auxIntToInt32(v_0.AuxInt)
4086 if !(0 <= n && 0 < c && c <= 32 && (1<<uint32(32-c)) <= uint32(n)) {
4087 break
4088 }
4089 v.reset(OpARMFlagConstant)
4090 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4091 return true
4092 }
4093 return false
4094 }
4095 func rewriteValueARM_OpARMCMPshiftLL(v *Value) bool {
4096 v_1 := v.Args[1]
4097 v_0 := v.Args[0]
4098 b := v.Block
4099
4100
4101 for {
4102 d := auxIntToInt32(v.AuxInt)
4103 if v_0.Op != OpARMMOVWconst {
4104 break
4105 }
4106 c := auxIntToInt32(v_0.AuxInt)
4107 x := v_1
4108 v.reset(OpARMInvertFlags)
4109 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4110 v0.AuxInt = int32ToAuxInt(c)
4111 v1 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
4112 v1.AuxInt = int32ToAuxInt(d)
4113 v1.AddArg(x)
4114 v0.AddArg(v1)
4115 v.AddArg(v0)
4116 return true
4117 }
4118
4119
4120 for {
4121 d := auxIntToInt32(v.AuxInt)
4122 x := v_0
4123 if v_1.Op != OpARMMOVWconst {
4124 break
4125 }
4126 c := auxIntToInt32(v_1.AuxInt)
4127 v.reset(OpARMCMPconst)
4128 v.AuxInt = int32ToAuxInt(c << uint64(d))
4129 v.AddArg(x)
4130 return true
4131 }
4132 return false
4133 }
4134 func rewriteValueARM_OpARMCMPshiftLLreg(v *Value) bool {
4135 v_2 := v.Args[2]
4136 v_1 := v.Args[1]
4137 v_0 := v.Args[0]
4138 b := v.Block
4139
4140
4141 for {
4142 if v_0.Op != OpARMMOVWconst {
4143 break
4144 }
4145 c := auxIntToInt32(v_0.AuxInt)
4146 x := v_1
4147 y := v_2
4148 v.reset(OpARMInvertFlags)
4149 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4150 v0.AuxInt = int32ToAuxInt(c)
4151 v1 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
4152 v1.AddArg2(x, y)
4153 v0.AddArg(v1)
4154 v.AddArg(v0)
4155 return true
4156 }
4157
4158
4159
4160 for {
4161 x := v_0
4162 y := v_1
4163 if v_2.Op != OpARMMOVWconst {
4164 break
4165 }
4166 c := auxIntToInt32(v_2.AuxInt)
4167 if !(0 <= c && c < 32) {
4168 break
4169 }
4170 v.reset(OpARMCMPshiftLL)
4171 v.AuxInt = int32ToAuxInt(c)
4172 v.AddArg2(x, y)
4173 return true
4174 }
4175 return false
4176 }
4177 func rewriteValueARM_OpARMCMPshiftRA(v *Value) bool {
4178 v_1 := v.Args[1]
4179 v_0 := v.Args[0]
4180 b := v.Block
4181
4182
4183 for {
4184 d := auxIntToInt32(v.AuxInt)
4185 if v_0.Op != OpARMMOVWconst {
4186 break
4187 }
4188 c := auxIntToInt32(v_0.AuxInt)
4189 x := v_1
4190 v.reset(OpARMInvertFlags)
4191 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4192 v0.AuxInt = int32ToAuxInt(c)
4193 v1 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
4194 v1.AuxInt = int32ToAuxInt(d)
4195 v1.AddArg(x)
4196 v0.AddArg(v1)
4197 v.AddArg(v0)
4198 return true
4199 }
4200
4201
4202 for {
4203 d := auxIntToInt32(v.AuxInt)
4204 x := v_0
4205 if v_1.Op != OpARMMOVWconst {
4206 break
4207 }
4208 c := auxIntToInt32(v_1.AuxInt)
4209 v.reset(OpARMCMPconst)
4210 v.AuxInt = int32ToAuxInt(c >> uint64(d))
4211 v.AddArg(x)
4212 return true
4213 }
4214 return false
4215 }
4216 func rewriteValueARM_OpARMCMPshiftRAreg(v *Value) bool {
4217 v_2 := v.Args[2]
4218 v_1 := v.Args[1]
4219 v_0 := v.Args[0]
4220 b := v.Block
4221
4222
4223 for {
4224 if v_0.Op != OpARMMOVWconst {
4225 break
4226 }
4227 c := auxIntToInt32(v_0.AuxInt)
4228 x := v_1
4229 y := v_2
4230 v.reset(OpARMInvertFlags)
4231 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4232 v0.AuxInt = int32ToAuxInt(c)
4233 v1 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
4234 v1.AddArg2(x, y)
4235 v0.AddArg(v1)
4236 v.AddArg(v0)
4237 return true
4238 }
4239
4240
4241
4242 for {
4243 x := v_0
4244 y := v_1
4245 if v_2.Op != OpARMMOVWconst {
4246 break
4247 }
4248 c := auxIntToInt32(v_2.AuxInt)
4249 if !(0 <= c && c < 32) {
4250 break
4251 }
4252 v.reset(OpARMCMPshiftRA)
4253 v.AuxInt = int32ToAuxInt(c)
4254 v.AddArg2(x, y)
4255 return true
4256 }
4257 return false
4258 }
4259 func rewriteValueARM_OpARMCMPshiftRL(v *Value) bool {
4260 v_1 := v.Args[1]
4261 v_0 := v.Args[0]
4262 b := v.Block
4263
4264
4265 for {
4266 d := auxIntToInt32(v.AuxInt)
4267 if v_0.Op != OpARMMOVWconst {
4268 break
4269 }
4270 c := auxIntToInt32(v_0.AuxInt)
4271 x := v_1
4272 v.reset(OpARMInvertFlags)
4273 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4274 v0.AuxInt = int32ToAuxInt(c)
4275 v1 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
4276 v1.AuxInt = int32ToAuxInt(d)
4277 v1.AddArg(x)
4278 v0.AddArg(v1)
4279 v.AddArg(v0)
4280 return true
4281 }
4282
4283
4284 for {
4285 d := auxIntToInt32(v.AuxInt)
4286 x := v_0
4287 if v_1.Op != OpARMMOVWconst {
4288 break
4289 }
4290 c := auxIntToInt32(v_1.AuxInt)
4291 v.reset(OpARMCMPconst)
4292 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
4293 v.AddArg(x)
4294 return true
4295 }
4296 return false
4297 }
4298 func rewriteValueARM_OpARMCMPshiftRLreg(v *Value) bool {
4299 v_2 := v.Args[2]
4300 v_1 := v.Args[1]
4301 v_0 := v.Args[0]
4302 b := v.Block
4303
4304
4305 for {
4306 if v_0.Op != OpARMMOVWconst {
4307 break
4308 }
4309 c := auxIntToInt32(v_0.AuxInt)
4310 x := v_1
4311 y := v_2
4312 v.reset(OpARMInvertFlags)
4313 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4314 v0.AuxInt = int32ToAuxInt(c)
4315 v1 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
4316 v1.AddArg2(x, y)
4317 v0.AddArg(v1)
4318 v.AddArg(v0)
4319 return true
4320 }
4321
4322
4323
4324 for {
4325 x := v_0
4326 y := v_1
4327 if v_2.Op != OpARMMOVWconst {
4328 break
4329 }
4330 c := auxIntToInt32(v_2.AuxInt)
4331 if !(0 <= c && c < 32) {
4332 break
4333 }
4334 v.reset(OpARMCMPshiftRL)
4335 v.AuxInt = int32ToAuxInt(c)
4336 v.AddArg2(x, y)
4337 return true
4338 }
4339 return false
4340 }
4341 func rewriteValueARM_OpARMEqual(v *Value) bool {
4342 v_0 := v.Args[0]
4343
4344
4345 for {
4346 if v_0.Op != OpARMFlagConstant {
4347 break
4348 }
4349 fc := auxIntToFlagConstant(v_0.AuxInt)
4350 v.reset(OpARMMOVWconst)
4351 v.AuxInt = int32ToAuxInt(b2i32(fc.eq()))
4352 return true
4353 }
4354
4355
4356 for {
4357 if v_0.Op != OpARMInvertFlags {
4358 break
4359 }
4360 x := v_0.Args[0]
4361 v.reset(OpARMEqual)
4362 v.AddArg(x)
4363 return true
4364 }
4365 return false
4366 }
4367 func rewriteValueARM_OpARMGreaterEqual(v *Value) bool {
4368 v_0 := v.Args[0]
4369
4370
4371 for {
4372 if v_0.Op != OpARMFlagConstant {
4373 break
4374 }
4375 fc := auxIntToFlagConstant(v_0.AuxInt)
4376 v.reset(OpARMMOVWconst)
4377 v.AuxInt = int32ToAuxInt(b2i32(fc.ge()))
4378 return true
4379 }
4380
4381
4382 for {
4383 if v_0.Op != OpARMInvertFlags {
4384 break
4385 }
4386 x := v_0.Args[0]
4387 v.reset(OpARMLessEqual)
4388 v.AddArg(x)
4389 return true
4390 }
4391 return false
4392 }
4393 func rewriteValueARM_OpARMGreaterEqualU(v *Value) bool {
4394 v_0 := v.Args[0]
4395
4396
4397 for {
4398 if v_0.Op != OpARMFlagConstant {
4399 break
4400 }
4401 fc := auxIntToFlagConstant(v_0.AuxInt)
4402 v.reset(OpARMMOVWconst)
4403 v.AuxInt = int32ToAuxInt(b2i32(fc.uge()))
4404 return true
4405 }
4406
4407
4408 for {
4409 if v_0.Op != OpARMInvertFlags {
4410 break
4411 }
4412 x := v_0.Args[0]
4413 v.reset(OpARMLessEqualU)
4414 v.AddArg(x)
4415 return true
4416 }
4417 return false
4418 }
4419 func rewriteValueARM_OpARMGreaterThan(v *Value) bool {
4420 v_0 := v.Args[0]
4421
4422
4423 for {
4424 if v_0.Op != OpARMFlagConstant {
4425 break
4426 }
4427 fc := auxIntToFlagConstant(v_0.AuxInt)
4428 v.reset(OpARMMOVWconst)
4429 v.AuxInt = int32ToAuxInt(b2i32(fc.gt()))
4430 return true
4431 }
4432
4433
4434 for {
4435 if v_0.Op != OpARMInvertFlags {
4436 break
4437 }
4438 x := v_0.Args[0]
4439 v.reset(OpARMLessThan)
4440 v.AddArg(x)
4441 return true
4442 }
4443 return false
4444 }
4445 func rewriteValueARM_OpARMGreaterThanU(v *Value) bool {
4446 v_0 := v.Args[0]
4447
4448
4449 for {
4450 if v_0.Op != OpARMFlagConstant {
4451 break
4452 }
4453 fc := auxIntToFlagConstant(v_0.AuxInt)
4454 v.reset(OpARMMOVWconst)
4455 v.AuxInt = int32ToAuxInt(b2i32(fc.ugt()))
4456 return true
4457 }
4458
4459
4460 for {
4461 if v_0.Op != OpARMInvertFlags {
4462 break
4463 }
4464 x := v_0.Args[0]
4465 v.reset(OpARMLessThanU)
4466 v.AddArg(x)
4467 return true
4468 }
4469 return false
4470 }
4471 func rewriteValueARM_OpARMLessEqual(v *Value) bool {
4472 v_0 := v.Args[0]
4473
4474
4475 for {
4476 if v_0.Op != OpARMFlagConstant {
4477 break
4478 }
4479 fc := auxIntToFlagConstant(v_0.AuxInt)
4480 v.reset(OpARMMOVWconst)
4481 v.AuxInt = int32ToAuxInt(b2i32(fc.le()))
4482 return true
4483 }
4484
4485
4486 for {
4487 if v_0.Op != OpARMInvertFlags {
4488 break
4489 }
4490 x := v_0.Args[0]
4491 v.reset(OpARMGreaterEqual)
4492 v.AddArg(x)
4493 return true
4494 }
4495 return false
4496 }
4497 func rewriteValueARM_OpARMLessEqualU(v *Value) bool {
4498 v_0 := v.Args[0]
4499
4500
4501 for {
4502 if v_0.Op != OpARMFlagConstant {
4503 break
4504 }
4505 fc := auxIntToFlagConstant(v_0.AuxInt)
4506 v.reset(OpARMMOVWconst)
4507 v.AuxInt = int32ToAuxInt(b2i32(fc.ule()))
4508 return true
4509 }
4510
4511
4512 for {
4513 if v_0.Op != OpARMInvertFlags {
4514 break
4515 }
4516 x := v_0.Args[0]
4517 v.reset(OpARMGreaterEqualU)
4518 v.AddArg(x)
4519 return true
4520 }
4521 return false
4522 }
4523 func rewriteValueARM_OpARMLessThan(v *Value) bool {
4524 v_0 := v.Args[0]
4525
4526
4527 for {
4528 if v_0.Op != OpARMFlagConstant {
4529 break
4530 }
4531 fc := auxIntToFlagConstant(v_0.AuxInt)
4532 v.reset(OpARMMOVWconst)
4533 v.AuxInt = int32ToAuxInt(b2i32(fc.lt()))
4534 return true
4535 }
4536
4537
4538 for {
4539 if v_0.Op != OpARMInvertFlags {
4540 break
4541 }
4542 x := v_0.Args[0]
4543 v.reset(OpARMGreaterThan)
4544 v.AddArg(x)
4545 return true
4546 }
4547 return false
4548 }
4549 func rewriteValueARM_OpARMLessThanU(v *Value) bool {
4550 v_0 := v.Args[0]
4551
4552
4553 for {
4554 if v_0.Op != OpARMFlagConstant {
4555 break
4556 }
4557 fc := auxIntToFlagConstant(v_0.AuxInt)
4558 v.reset(OpARMMOVWconst)
4559 v.AuxInt = int32ToAuxInt(b2i32(fc.ult()))
4560 return true
4561 }
4562
4563
4564 for {
4565 if v_0.Op != OpARMInvertFlags {
4566 break
4567 }
4568 x := v_0.Args[0]
4569 v.reset(OpARMGreaterThanU)
4570 v.AddArg(x)
4571 return true
4572 }
4573 return false
4574 }
4575 func rewriteValueARM_OpARMMOVBUload(v *Value) bool {
4576 v_1 := v.Args[1]
4577 v_0 := v.Args[0]
4578
4579
4580 for {
4581 off1 := auxIntToInt32(v.AuxInt)
4582 sym := auxToSym(v.Aux)
4583 if v_0.Op != OpARMADDconst {
4584 break
4585 }
4586 off2 := auxIntToInt32(v_0.AuxInt)
4587 ptr := v_0.Args[0]
4588 mem := v_1
4589 v.reset(OpARMMOVBUload)
4590 v.AuxInt = int32ToAuxInt(off1 + off2)
4591 v.Aux = symToAux(sym)
4592 v.AddArg2(ptr, mem)
4593 return true
4594 }
4595
4596
4597 for {
4598 off1 := auxIntToInt32(v.AuxInt)
4599 sym := auxToSym(v.Aux)
4600 if v_0.Op != OpARMSUBconst {
4601 break
4602 }
4603 off2 := auxIntToInt32(v_0.AuxInt)
4604 ptr := v_0.Args[0]
4605 mem := v_1
4606 v.reset(OpARMMOVBUload)
4607 v.AuxInt = int32ToAuxInt(off1 - off2)
4608 v.Aux = symToAux(sym)
4609 v.AddArg2(ptr, mem)
4610 return true
4611 }
4612
4613
4614
4615 for {
4616 off1 := auxIntToInt32(v.AuxInt)
4617 sym1 := auxToSym(v.Aux)
4618 if v_0.Op != OpARMMOVWaddr {
4619 break
4620 }
4621 off2 := auxIntToInt32(v_0.AuxInt)
4622 sym2 := auxToSym(v_0.Aux)
4623 ptr := v_0.Args[0]
4624 mem := v_1
4625 if !(canMergeSym(sym1, sym2)) {
4626 break
4627 }
4628 v.reset(OpARMMOVBUload)
4629 v.AuxInt = int32ToAuxInt(off1 + off2)
4630 v.Aux = symToAux(mergeSym(sym1, sym2))
4631 v.AddArg2(ptr, mem)
4632 return true
4633 }
4634
4635
4636
4637 for {
4638 off := auxIntToInt32(v.AuxInt)
4639 sym := auxToSym(v.Aux)
4640 ptr := v_0
4641 if v_1.Op != OpARMMOVBstore {
4642 break
4643 }
4644 off2 := auxIntToInt32(v_1.AuxInt)
4645 sym2 := auxToSym(v_1.Aux)
4646 x := v_1.Args[1]
4647 ptr2 := v_1.Args[0]
4648 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
4649 break
4650 }
4651 v.reset(OpARMMOVBUreg)
4652 v.AddArg(x)
4653 return true
4654 }
4655
4656
4657
4658 for {
4659 if auxIntToInt32(v.AuxInt) != 0 {
4660 break
4661 }
4662 sym := auxToSym(v.Aux)
4663 if v_0.Op != OpARMADD {
4664 break
4665 }
4666 idx := v_0.Args[1]
4667 ptr := v_0.Args[0]
4668 mem := v_1
4669 if !(sym == nil) {
4670 break
4671 }
4672 v.reset(OpARMMOVBUloadidx)
4673 v.AddArg3(ptr, idx, mem)
4674 return true
4675 }
4676
4677
4678
4679 for {
4680 off := auxIntToInt32(v.AuxInt)
4681 sym := auxToSym(v.Aux)
4682 if v_0.Op != OpSB || !(symIsRO(sym)) {
4683 break
4684 }
4685 v.reset(OpARMMOVWconst)
4686 v.AuxInt = int32ToAuxInt(int32(read8(sym, int64(off))))
4687 return true
4688 }
4689 return false
4690 }
4691 func rewriteValueARM_OpARMMOVBUloadidx(v *Value) bool {
4692 v_2 := v.Args[2]
4693 v_1 := v.Args[1]
4694 v_0 := v.Args[0]
4695
4696
4697
4698 for {
4699 ptr := v_0
4700 idx := v_1
4701 if v_2.Op != OpARMMOVBstoreidx {
4702 break
4703 }
4704 x := v_2.Args[2]
4705 ptr2 := v_2.Args[0]
4706 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
4707 break
4708 }
4709 v.reset(OpARMMOVBUreg)
4710 v.AddArg(x)
4711 return true
4712 }
4713
4714
4715 for {
4716 ptr := v_0
4717 if v_1.Op != OpARMMOVWconst {
4718 break
4719 }
4720 c := auxIntToInt32(v_1.AuxInt)
4721 mem := v_2
4722 v.reset(OpARMMOVBUload)
4723 v.AuxInt = int32ToAuxInt(c)
4724 v.AddArg2(ptr, mem)
4725 return true
4726 }
4727
4728
4729 for {
4730 if v_0.Op != OpARMMOVWconst {
4731 break
4732 }
4733 c := auxIntToInt32(v_0.AuxInt)
4734 ptr := v_1
4735 mem := v_2
4736 v.reset(OpARMMOVBUload)
4737 v.AuxInt = int32ToAuxInt(c)
4738 v.AddArg2(ptr, mem)
4739 return true
4740 }
4741 return false
4742 }
4743 func rewriteValueARM_OpARMMOVBUreg(v *Value) bool {
4744 v_0 := v.Args[0]
4745
4746
4747 for {
4748 x := v_0
4749 if x.Op != OpARMMOVBUload {
4750 break
4751 }
4752 v.reset(OpARMMOVWreg)
4753 v.AddArg(x)
4754 return true
4755 }
4756
4757
4758 for {
4759 if v_0.Op != OpARMANDconst {
4760 break
4761 }
4762 c := auxIntToInt32(v_0.AuxInt)
4763 x := v_0.Args[0]
4764 v.reset(OpARMANDconst)
4765 v.AuxInt = int32ToAuxInt(c & 0xff)
4766 v.AddArg(x)
4767 return true
4768 }
4769
4770
4771 for {
4772 x := v_0
4773 if x.Op != OpARMMOVBUreg {
4774 break
4775 }
4776 v.reset(OpARMMOVWreg)
4777 v.AddArg(x)
4778 return true
4779 }
4780
4781
4782 for {
4783 if v_0.Op != OpARMMOVWconst {
4784 break
4785 }
4786 c := auxIntToInt32(v_0.AuxInt)
4787 v.reset(OpARMMOVWconst)
4788 v.AuxInt = int32ToAuxInt(int32(uint8(c)))
4789 return true
4790 }
4791 return false
4792 }
4793 func rewriteValueARM_OpARMMOVBload(v *Value) bool {
4794 v_1 := v.Args[1]
4795 v_0 := v.Args[0]
4796
4797
4798 for {
4799 off1 := auxIntToInt32(v.AuxInt)
4800 sym := auxToSym(v.Aux)
4801 if v_0.Op != OpARMADDconst {
4802 break
4803 }
4804 off2 := auxIntToInt32(v_0.AuxInt)
4805 ptr := v_0.Args[0]
4806 mem := v_1
4807 v.reset(OpARMMOVBload)
4808 v.AuxInt = int32ToAuxInt(off1 + off2)
4809 v.Aux = symToAux(sym)
4810 v.AddArg2(ptr, mem)
4811 return true
4812 }
4813
4814
4815 for {
4816 off1 := auxIntToInt32(v.AuxInt)
4817 sym := auxToSym(v.Aux)
4818 if v_0.Op != OpARMSUBconst {
4819 break
4820 }
4821 off2 := auxIntToInt32(v_0.AuxInt)
4822 ptr := v_0.Args[0]
4823 mem := v_1
4824 v.reset(OpARMMOVBload)
4825 v.AuxInt = int32ToAuxInt(off1 - off2)
4826 v.Aux = symToAux(sym)
4827 v.AddArg2(ptr, mem)
4828 return true
4829 }
4830
4831
4832
4833 for {
4834 off1 := auxIntToInt32(v.AuxInt)
4835 sym1 := auxToSym(v.Aux)
4836 if v_0.Op != OpARMMOVWaddr {
4837 break
4838 }
4839 off2 := auxIntToInt32(v_0.AuxInt)
4840 sym2 := auxToSym(v_0.Aux)
4841 ptr := v_0.Args[0]
4842 mem := v_1
4843 if !(canMergeSym(sym1, sym2)) {
4844 break
4845 }
4846 v.reset(OpARMMOVBload)
4847 v.AuxInt = int32ToAuxInt(off1 + off2)
4848 v.Aux = symToAux(mergeSym(sym1, sym2))
4849 v.AddArg2(ptr, mem)
4850 return true
4851 }
4852
4853
4854
4855 for {
4856 off := auxIntToInt32(v.AuxInt)
4857 sym := auxToSym(v.Aux)
4858 ptr := v_0
4859 if v_1.Op != OpARMMOVBstore {
4860 break
4861 }
4862 off2 := auxIntToInt32(v_1.AuxInt)
4863 sym2 := auxToSym(v_1.Aux)
4864 x := v_1.Args[1]
4865 ptr2 := v_1.Args[0]
4866 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
4867 break
4868 }
4869 v.reset(OpARMMOVBreg)
4870 v.AddArg(x)
4871 return true
4872 }
4873
4874
4875
4876 for {
4877 if auxIntToInt32(v.AuxInt) != 0 {
4878 break
4879 }
4880 sym := auxToSym(v.Aux)
4881 if v_0.Op != OpARMADD {
4882 break
4883 }
4884 idx := v_0.Args[1]
4885 ptr := v_0.Args[0]
4886 mem := v_1
4887 if !(sym == nil) {
4888 break
4889 }
4890 v.reset(OpARMMOVBloadidx)
4891 v.AddArg3(ptr, idx, mem)
4892 return true
4893 }
4894 return false
4895 }
4896 func rewriteValueARM_OpARMMOVBloadidx(v *Value) bool {
4897 v_2 := v.Args[2]
4898 v_1 := v.Args[1]
4899 v_0 := v.Args[0]
4900
4901
4902
4903 for {
4904 ptr := v_0
4905 idx := v_1
4906 if v_2.Op != OpARMMOVBstoreidx {
4907 break
4908 }
4909 x := v_2.Args[2]
4910 ptr2 := v_2.Args[0]
4911 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
4912 break
4913 }
4914 v.reset(OpARMMOVBreg)
4915 v.AddArg(x)
4916 return true
4917 }
4918
4919
4920 for {
4921 ptr := v_0
4922 if v_1.Op != OpARMMOVWconst {
4923 break
4924 }
4925 c := auxIntToInt32(v_1.AuxInt)
4926 mem := v_2
4927 v.reset(OpARMMOVBload)
4928 v.AuxInt = int32ToAuxInt(c)
4929 v.AddArg2(ptr, mem)
4930 return true
4931 }
4932
4933
4934 for {
4935 if v_0.Op != OpARMMOVWconst {
4936 break
4937 }
4938 c := auxIntToInt32(v_0.AuxInt)
4939 ptr := v_1
4940 mem := v_2
4941 v.reset(OpARMMOVBload)
4942 v.AuxInt = int32ToAuxInt(c)
4943 v.AddArg2(ptr, mem)
4944 return true
4945 }
4946 return false
4947 }
4948 func rewriteValueARM_OpARMMOVBreg(v *Value) bool {
4949 v_0 := v.Args[0]
4950
4951
4952 for {
4953 x := v_0
4954 if x.Op != OpARMMOVBload {
4955 break
4956 }
4957 v.reset(OpARMMOVWreg)
4958 v.AddArg(x)
4959 return true
4960 }
4961
4962
4963
4964 for {
4965 if v_0.Op != OpARMANDconst {
4966 break
4967 }
4968 c := auxIntToInt32(v_0.AuxInt)
4969 x := v_0.Args[0]
4970 if !(c&0x80 == 0) {
4971 break
4972 }
4973 v.reset(OpARMANDconst)
4974 v.AuxInt = int32ToAuxInt(c & 0x7f)
4975 v.AddArg(x)
4976 return true
4977 }
4978
4979
4980 for {
4981 x := v_0
4982 if x.Op != OpARMMOVBreg {
4983 break
4984 }
4985 v.reset(OpARMMOVWreg)
4986 v.AddArg(x)
4987 return true
4988 }
4989
4990
4991 for {
4992 if v_0.Op != OpARMMOVWconst {
4993 break
4994 }
4995 c := auxIntToInt32(v_0.AuxInt)
4996 v.reset(OpARMMOVWconst)
4997 v.AuxInt = int32ToAuxInt(int32(int8(c)))
4998 return true
4999 }
5000 return false
5001 }
5002 func rewriteValueARM_OpARMMOVBstore(v *Value) bool {
5003 v_2 := v.Args[2]
5004 v_1 := v.Args[1]
5005 v_0 := v.Args[0]
5006
5007
5008 for {
5009 off1 := auxIntToInt32(v.AuxInt)
5010 sym := auxToSym(v.Aux)
5011 if v_0.Op != OpARMADDconst {
5012 break
5013 }
5014 off2 := auxIntToInt32(v_0.AuxInt)
5015 ptr := v_0.Args[0]
5016 val := v_1
5017 mem := v_2
5018 v.reset(OpARMMOVBstore)
5019 v.AuxInt = int32ToAuxInt(off1 + off2)
5020 v.Aux = symToAux(sym)
5021 v.AddArg3(ptr, val, mem)
5022 return true
5023 }
5024
5025
5026 for {
5027 off1 := auxIntToInt32(v.AuxInt)
5028 sym := auxToSym(v.Aux)
5029 if v_0.Op != OpARMSUBconst {
5030 break
5031 }
5032 off2 := auxIntToInt32(v_0.AuxInt)
5033 ptr := v_0.Args[0]
5034 val := v_1
5035 mem := v_2
5036 v.reset(OpARMMOVBstore)
5037 v.AuxInt = int32ToAuxInt(off1 - off2)
5038 v.Aux = symToAux(sym)
5039 v.AddArg3(ptr, val, mem)
5040 return true
5041 }
5042
5043
5044
5045 for {
5046 off1 := auxIntToInt32(v.AuxInt)
5047 sym1 := auxToSym(v.Aux)
5048 if v_0.Op != OpARMMOVWaddr {
5049 break
5050 }
5051 off2 := auxIntToInt32(v_0.AuxInt)
5052 sym2 := auxToSym(v_0.Aux)
5053 ptr := v_0.Args[0]
5054 val := v_1
5055 mem := v_2
5056 if !(canMergeSym(sym1, sym2)) {
5057 break
5058 }
5059 v.reset(OpARMMOVBstore)
5060 v.AuxInt = int32ToAuxInt(off1 + off2)
5061 v.Aux = symToAux(mergeSym(sym1, sym2))
5062 v.AddArg3(ptr, val, mem)
5063 return true
5064 }
5065
5066
5067 for {
5068 off := auxIntToInt32(v.AuxInt)
5069 sym := auxToSym(v.Aux)
5070 ptr := v_0
5071 if v_1.Op != OpARMMOVBreg {
5072 break
5073 }
5074 x := v_1.Args[0]
5075 mem := v_2
5076 v.reset(OpARMMOVBstore)
5077 v.AuxInt = int32ToAuxInt(off)
5078 v.Aux = symToAux(sym)
5079 v.AddArg3(ptr, x, mem)
5080 return true
5081 }
5082
5083
5084 for {
5085 off := auxIntToInt32(v.AuxInt)
5086 sym := auxToSym(v.Aux)
5087 ptr := v_0
5088 if v_1.Op != OpARMMOVBUreg {
5089 break
5090 }
5091 x := v_1.Args[0]
5092 mem := v_2
5093 v.reset(OpARMMOVBstore)
5094 v.AuxInt = int32ToAuxInt(off)
5095 v.Aux = symToAux(sym)
5096 v.AddArg3(ptr, x, mem)
5097 return true
5098 }
5099
5100
5101 for {
5102 off := auxIntToInt32(v.AuxInt)
5103 sym := auxToSym(v.Aux)
5104 ptr := v_0
5105 if v_1.Op != OpARMMOVHreg {
5106 break
5107 }
5108 x := v_1.Args[0]
5109 mem := v_2
5110 v.reset(OpARMMOVBstore)
5111 v.AuxInt = int32ToAuxInt(off)
5112 v.Aux = symToAux(sym)
5113 v.AddArg3(ptr, x, mem)
5114 return true
5115 }
5116
5117
5118 for {
5119 off := auxIntToInt32(v.AuxInt)
5120 sym := auxToSym(v.Aux)
5121 ptr := v_0
5122 if v_1.Op != OpARMMOVHUreg {
5123 break
5124 }
5125 x := v_1.Args[0]
5126 mem := v_2
5127 v.reset(OpARMMOVBstore)
5128 v.AuxInt = int32ToAuxInt(off)
5129 v.Aux = symToAux(sym)
5130 v.AddArg3(ptr, x, mem)
5131 return true
5132 }
5133
5134
5135
5136 for {
5137 if auxIntToInt32(v.AuxInt) != 0 {
5138 break
5139 }
5140 sym := auxToSym(v.Aux)
5141 if v_0.Op != OpARMADD {
5142 break
5143 }
5144 idx := v_0.Args[1]
5145 ptr := v_0.Args[0]
5146 val := v_1
5147 mem := v_2
5148 if !(sym == nil) {
5149 break
5150 }
5151 v.reset(OpARMMOVBstoreidx)
5152 v.AddArg4(ptr, idx, val, mem)
5153 return true
5154 }
5155 return false
5156 }
5157 func rewriteValueARM_OpARMMOVBstoreidx(v *Value) bool {
5158 v_3 := v.Args[3]
5159 v_2 := v.Args[2]
5160 v_1 := v.Args[1]
5161 v_0 := v.Args[0]
5162
5163
5164 for {
5165 ptr := v_0
5166 if v_1.Op != OpARMMOVWconst {
5167 break
5168 }
5169 c := auxIntToInt32(v_1.AuxInt)
5170 val := v_2
5171 mem := v_3
5172 v.reset(OpARMMOVBstore)
5173 v.AuxInt = int32ToAuxInt(c)
5174 v.AddArg3(ptr, val, mem)
5175 return true
5176 }
5177
5178
5179 for {
5180 if v_0.Op != OpARMMOVWconst {
5181 break
5182 }
5183 c := auxIntToInt32(v_0.AuxInt)
5184 ptr := v_1
5185 val := v_2
5186 mem := v_3
5187 v.reset(OpARMMOVBstore)
5188 v.AuxInt = int32ToAuxInt(c)
5189 v.AddArg3(ptr, val, mem)
5190 return true
5191 }
5192 return false
5193 }
5194 func rewriteValueARM_OpARMMOVDload(v *Value) bool {
5195 v_1 := v.Args[1]
5196 v_0 := v.Args[0]
5197
5198
5199 for {
5200 off1 := auxIntToInt32(v.AuxInt)
5201 sym := auxToSym(v.Aux)
5202 if v_0.Op != OpARMADDconst {
5203 break
5204 }
5205 off2 := auxIntToInt32(v_0.AuxInt)
5206 ptr := v_0.Args[0]
5207 mem := v_1
5208 v.reset(OpARMMOVDload)
5209 v.AuxInt = int32ToAuxInt(off1 + off2)
5210 v.Aux = symToAux(sym)
5211 v.AddArg2(ptr, mem)
5212 return true
5213 }
5214
5215
5216 for {
5217 off1 := auxIntToInt32(v.AuxInt)
5218 sym := auxToSym(v.Aux)
5219 if v_0.Op != OpARMSUBconst {
5220 break
5221 }
5222 off2 := auxIntToInt32(v_0.AuxInt)
5223 ptr := v_0.Args[0]
5224 mem := v_1
5225 v.reset(OpARMMOVDload)
5226 v.AuxInt = int32ToAuxInt(off1 - off2)
5227 v.Aux = symToAux(sym)
5228 v.AddArg2(ptr, mem)
5229 return true
5230 }
5231
5232
5233
5234 for {
5235 off1 := auxIntToInt32(v.AuxInt)
5236 sym1 := auxToSym(v.Aux)
5237 if v_0.Op != OpARMMOVWaddr {
5238 break
5239 }
5240 off2 := auxIntToInt32(v_0.AuxInt)
5241 sym2 := auxToSym(v_0.Aux)
5242 ptr := v_0.Args[0]
5243 mem := v_1
5244 if !(canMergeSym(sym1, sym2)) {
5245 break
5246 }
5247 v.reset(OpARMMOVDload)
5248 v.AuxInt = int32ToAuxInt(off1 + off2)
5249 v.Aux = symToAux(mergeSym(sym1, sym2))
5250 v.AddArg2(ptr, mem)
5251 return true
5252 }
5253
5254
5255
5256 for {
5257 off := auxIntToInt32(v.AuxInt)
5258 sym := auxToSym(v.Aux)
5259 ptr := v_0
5260 if v_1.Op != OpARMMOVDstore {
5261 break
5262 }
5263 off2 := auxIntToInt32(v_1.AuxInt)
5264 sym2 := auxToSym(v_1.Aux)
5265 x := v_1.Args[1]
5266 ptr2 := v_1.Args[0]
5267 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5268 break
5269 }
5270 v.copyOf(x)
5271 return true
5272 }
5273 return false
5274 }
5275 func rewriteValueARM_OpARMMOVDstore(v *Value) bool {
5276 v_2 := v.Args[2]
5277 v_1 := v.Args[1]
5278 v_0 := v.Args[0]
5279
5280
5281 for {
5282 off1 := auxIntToInt32(v.AuxInt)
5283 sym := auxToSym(v.Aux)
5284 if v_0.Op != OpARMADDconst {
5285 break
5286 }
5287 off2 := auxIntToInt32(v_0.AuxInt)
5288 ptr := v_0.Args[0]
5289 val := v_1
5290 mem := v_2
5291 v.reset(OpARMMOVDstore)
5292 v.AuxInt = int32ToAuxInt(off1 + off2)
5293 v.Aux = symToAux(sym)
5294 v.AddArg3(ptr, val, mem)
5295 return true
5296 }
5297
5298
5299 for {
5300 off1 := auxIntToInt32(v.AuxInt)
5301 sym := auxToSym(v.Aux)
5302 if v_0.Op != OpARMSUBconst {
5303 break
5304 }
5305 off2 := auxIntToInt32(v_0.AuxInt)
5306 ptr := v_0.Args[0]
5307 val := v_1
5308 mem := v_2
5309 v.reset(OpARMMOVDstore)
5310 v.AuxInt = int32ToAuxInt(off1 - off2)
5311 v.Aux = symToAux(sym)
5312 v.AddArg3(ptr, val, mem)
5313 return true
5314 }
5315
5316
5317
5318 for {
5319 off1 := auxIntToInt32(v.AuxInt)
5320 sym1 := auxToSym(v.Aux)
5321 if v_0.Op != OpARMMOVWaddr {
5322 break
5323 }
5324 off2 := auxIntToInt32(v_0.AuxInt)
5325 sym2 := auxToSym(v_0.Aux)
5326 ptr := v_0.Args[0]
5327 val := v_1
5328 mem := v_2
5329 if !(canMergeSym(sym1, sym2)) {
5330 break
5331 }
5332 v.reset(OpARMMOVDstore)
5333 v.AuxInt = int32ToAuxInt(off1 + off2)
5334 v.Aux = symToAux(mergeSym(sym1, sym2))
5335 v.AddArg3(ptr, val, mem)
5336 return true
5337 }
5338 return false
5339 }
5340 func rewriteValueARM_OpARMMOVFload(v *Value) bool {
5341 v_1 := v.Args[1]
5342 v_0 := v.Args[0]
5343
5344
5345 for {
5346 off1 := auxIntToInt32(v.AuxInt)
5347 sym := auxToSym(v.Aux)
5348 if v_0.Op != OpARMADDconst {
5349 break
5350 }
5351 off2 := auxIntToInt32(v_0.AuxInt)
5352 ptr := v_0.Args[0]
5353 mem := v_1
5354 v.reset(OpARMMOVFload)
5355 v.AuxInt = int32ToAuxInt(off1 + off2)
5356 v.Aux = symToAux(sym)
5357 v.AddArg2(ptr, mem)
5358 return true
5359 }
5360
5361
5362 for {
5363 off1 := auxIntToInt32(v.AuxInt)
5364 sym := auxToSym(v.Aux)
5365 if v_0.Op != OpARMSUBconst {
5366 break
5367 }
5368 off2 := auxIntToInt32(v_0.AuxInt)
5369 ptr := v_0.Args[0]
5370 mem := v_1
5371 v.reset(OpARMMOVFload)
5372 v.AuxInt = int32ToAuxInt(off1 - off2)
5373 v.Aux = symToAux(sym)
5374 v.AddArg2(ptr, mem)
5375 return true
5376 }
5377
5378
5379
5380 for {
5381 off1 := auxIntToInt32(v.AuxInt)
5382 sym1 := auxToSym(v.Aux)
5383 if v_0.Op != OpARMMOVWaddr {
5384 break
5385 }
5386 off2 := auxIntToInt32(v_0.AuxInt)
5387 sym2 := auxToSym(v_0.Aux)
5388 ptr := v_0.Args[0]
5389 mem := v_1
5390 if !(canMergeSym(sym1, sym2)) {
5391 break
5392 }
5393 v.reset(OpARMMOVFload)
5394 v.AuxInt = int32ToAuxInt(off1 + off2)
5395 v.Aux = symToAux(mergeSym(sym1, sym2))
5396 v.AddArg2(ptr, mem)
5397 return true
5398 }
5399
5400
5401
5402 for {
5403 off := auxIntToInt32(v.AuxInt)
5404 sym := auxToSym(v.Aux)
5405 ptr := v_0
5406 if v_1.Op != OpARMMOVFstore {
5407 break
5408 }
5409 off2 := auxIntToInt32(v_1.AuxInt)
5410 sym2 := auxToSym(v_1.Aux)
5411 x := v_1.Args[1]
5412 ptr2 := v_1.Args[0]
5413 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5414 break
5415 }
5416 v.copyOf(x)
5417 return true
5418 }
5419 return false
5420 }
5421 func rewriteValueARM_OpARMMOVFstore(v *Value) bool {
5422 v_2 := v.Args[2]
5423 v_1 := v.Args[1]
5424 v_0 := v.Args[0]
5425
5426
5427 for {
5428 off1 := auxIntToInt32(v.AuxInt)
5429 sym := auxToSym(v.Aux)
5430 if v_0.Op != OpARMADDconst {
5431 break
5432 }
5433 off2 := auxIntToInt32(v_0.AuxInt)
5434 ptr := v_0.Args[0]
5435 val := v_1
5436 mem := v_2
5437 v.reset(OpARMMOVFstore)
5438 v.AuxInt = int32ToAuxInt(off1 + off2)
5439 v.Aux = symToAux(sym)
5440 v.AddArg3(ptr, val, mem)
5441 return true
5442 }
5443
5444
5445 for {
5446 off1 := auxIntToInt32(v.AuxInt)
5447 sym := auxToSym(v.Aux)
5448 if v_0.Op != OpARMSUBconst {
5449 break
5450 }
5451 off2 := auxIntToInt32(v_0.AuxInt)
5452 ptr := v_0.Args[0]
5453 val := v_1
5454 mem := v_2
5455 v.reset(OpARMMOVFstore)
5456 v.AuxInt = int32ToAuxInt(off1 - off2)
5457 v.Aux = symToAux(sym)
5458 v.AddArg3(ptr, val, mem)
5459 return true
5460 }
5461
5462
5463
5464 for {
5465 off1 := auxIntToInt32(v.AuxInt)
5466 sym1 := auxToSym(v.Aux)
5467 if v_0.Op != OpARMMOVWaddr {
5468 break
5469 }
5470 off2 := auxIntToInt32(v_0.AuxInt)
5471 sym2 := auxToSym(v_0.Aux)
5472 ptr := v_0.Args[0]
5473 val := v_1
5474 mem := v_2
5475 if !(canMergeSym(sym1, sym2)) {
5476 break
5477 }
5478 v.reset(OpARMMOVFstore)
5479 v.AuxInt = int32ToAuxInt(off1 + off2)
5480 v.Aux = symToAux(mergeSym(sym1, sym2))
5481 v.AddArg3(ptr, val, mem)
5482 return true
5483 }
5484 return false
5485 }
5486 func rewriteValueARM_OpARMMOVHUload(v *Value) bool {
5487 v_1 := v.Args[1]
5488 v_0 := v.Args[0]
5489 b := v.Block
5490 config := b.Func.Config
5491
5492
5493 for {
5494 off1 := auxIntToInt32(v.AuxInt)
5495 sym := auxToSym(v.Aux)
5496 if v_0.Op != OpARMADDconst {
5497 break
5498 }
5499 off2 := auxIntToInt32(v_0.AuxInt)
5500 ptr := v_0.Args[0]
5501 mem := v_1
5502 v.reset(OpARMMOVHUload)
5503 v.AuxInt = int32ToAuxInt(off1 + off2)
5504 v.Aux = symToAux(sym)
5505 v.AddArg2(ptr, mem)
5506 return true
5507 }
5508
5509
5510 for {
5511 off1 := auxIntToInt32(v.AuxInt)
5512 sym := auxToSym(v.Aux)
5513 if v_0.Op != OpARMSUBconst {
5514 break
5515 }
5516 off2 := auxIntToInt32(v_0.AuxInt)
5517 ptr := v_0.Args[0]
5518 mem := v_1
5519 v.reset(OpARMMOVHUload)
5520 v.AuxInt = int32ToAuxInt(off1 - off2)
5521 v.Aux = symToAux(sym)
5522 v.AddArg2(ptr, mem)
5523 return true
5524 }
5525
5526
5527
5528 for {
5529 off1 := auxIntToInt32(v.AuxInt)
5530 sym1 := auxToSym(v.Aux)
5531 if v_0.Op != OpARMMOVWaddr {
5532 break
5533 }
5534 off2 := auxIntToInt32(v_0.AuxInt)
5535 sym2 := auxToSym(v_0.Aux)
5536 ptr := v_0.Args[0]
5537 mem := v_1
5538 if !(canMergeSym(sym1, sym2)) {
5539 break
5540 }
5541 v.reset(OpARMMOVHUload)
5542 v.AuxInt = int32ToAuxInt(off1 + off2)
5543 v.Aux = symToAux(mergeSym(sym1, sym2))
5544 v.AddArg2(ptr, mem)
5545 return true
5546 }
5547
5548
5549
5550 for {
5551 off := auxIntToInt32(v.AuxInt)
5552 sym := auxToSym(v.Aux)
5553 ptr := v_0
5554 if v_1.Op != OpARMMOVHstore {
5555 break
5556 }
5557 off2 := auxIntToInt32(v_1.AuxInt)
5558 sym2 := auxToSym(v_1.Aux)
5559 x := v_1.Args[1]
5560 ptr2 := v_1.Args[0]
5561 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5562 break
5563 }
5564 v.reset(OpARMMOVHUreg)
5565 v.AddArg(x)
5566 return true
5567 }
5568
5569
5570
5571 for {
5572 if auxIntToInt32(v.AuxInt) != 0 {
5573 break
5574 }
5575 sym := auxToSym(v.Aux)
5576 if v_0.Op != OpARMADD {
5577 break
5578 }
5579 idx := v_0.Args[1]
5580 ptr := v_0.Args[0]
5581 mem := v_1
5582 if !(sym == nil) {
5583 break
5584 }
5585 v.reset(OpARMMOVHUloadidx)
5586 v.AddArg3(ptr, idx, mem)
5587 return true
5588 }
5589
5590
5591
5592 for {
5593 off := auxIntToInt32(v.AuxInt)
5594 sym := auxToSym(v.Aux)
5595 if v_0.Op != OpSB || !(symIsRO(sym)) {
5596 break
5597 }
5598 v.reset(OpARMMOVWconst)
5599 v.AuxInt = int32ToAuxInt(int32(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))
5600 return true
5601 }
5602 return false
5603 }
5604 func rewriteValueARM_OpARMMOVHUloadidx(v *Value) bool {
5605 v_2 := v.Args[2]
5606 v_1 := v.Args[1]
5607 v_0 := v.Args[0]
5608
5609
5610
5611 for {
5612 ptr := v_0
5613 idx := v_1
5614 if v_2.Op != OpARMMOVHstoreidx {
5615 break
5616 }
5617 x := v_2.Args[2]
5618 ptr2 := v_2.Args[0]
5619 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
5620 break
5621 }
5622 v.reset(OpARMMOVHUreg)
5623 v.AddArg(x)
5624 return true
5625 }
5626
5627
5628 for {
5629 ptr := v_0
5630 if v_1.Op != OpARMMOVWconst {
5631 break
5632 }
5633 c := auxIntToInt32(v_1.AuxInt)
5634 mem := v_2
5635 v.reset(OpARMMOVHUload)
5636 v.AuxInt = int32ToAuxInt(c)
5637 v.AddArg2(ptr, mem)
5638 return true
5639 }
5640
5641
5642 for {
5643 if v_0.Op != OpARMMOVWconst {
5644 break
5645 }
5646 c := auxIntToInt32(v_0.AuxInt)
5647 ptr := v_1
5648 mem := v_2
5649 v.reset(OpARMMOVHUload)
5650 v.AuxInt = int32ToAuxInt(c)
5651 v.AddArg2(ptr, mem)
5652 return true
5653 }
5654 return false
5655 }
5656 func rewriteValueARM_OpARMMOVHUreg(v *Value) bool {
5657 v_0 := v.Args[0]
5658
5659
5660 for {
5661 x := v_0
5662 if x.Op != OpARMMOVBUload {
5663 break
5664 }
5665 v.reset(OpARMMOVWreg)
5666 v.AddArg(x)
5667 return true
5668 }
5669
5670
5671 for {
5672 x := v_0
5673 if x.Op != OpARMMOVHUload {
5674 break
5675 }
5676 v.reset(OpARMMOVWreg)
5677 v.AddArg(x)
5678 return true
5679 }
5680
5681
5682 for {
5683 if v_0.Op != OpARMANDconst {
5684 break
5685 }
5686 c := auxIntToInt32(v_0.AuxInt)
5687 x := v_0.Args[0]
5688 v.reset(OpARMANDconst)
5689 v.AuxInt = int32ToAuxInt(c & 0xffff)
5690 v.AddArg(x)
5691 return true
5692 }
5693
5694
5695 for {
5696 x := v_0
5697 if x.Op != OpARMMOVBUreg {
5698 break
5699 }
5700 v.reset(OpARMMOVWreg)
5701 v.AddArg(x)
5702 return true
5703 }
5704
5705
5706 for {
5707 x := v_0
5708 if x.Op != OpARMMOVHUreg {
5709 break
5710 }
5711 v.reset(OpARMMOVWreg)
5712 v.AddArg(x)
5713 return true
5714 }
5715
5716
5717 for {
5718 if v_0.Op != OpARMMOVWconst {
5719 break
5720 }
5721 c := auxIntToInt32(v_0.AuxInt)
5722 v.reset(OpARMMOVWconst)
5723 v.AuxInt = int32ToAuxInt(int32(uint16(c)))
5724 return true
5725 }
5726 return false
5727 }
5728 func rewriteValueARM_OpARMMOVHload(v *Value) bool {
5729 v_1 := v.Args[1]
5730 v_0 := v.Args[0]
5731
5732
5733 for {
5734 off1 := auxIntToInt32(v.AuxInt)
5735 sym := auxToSym(v.Aux)
5736 if v_0.Op != OpARMADDconst {
5737 break
5738 }
5739 off2 := auxIntToInt32(v_0.AuxInt)
5740 ptr := v_0.Args[0]
5741 mem := v_1
5742 v.reset(OpARMMOVHload)
5743 v.AuxInt = int32ToAuxInt(off1 + off2)
5744 v.Aux = symToAux(sym)
5745 v.AddArg2(ptr, mem)
5746 return true
5747 }
5748
5749
5750 for {
5751 off1 := auxIntToInt32(v.AuxInt)
5752 sym := auxToSym(v.Aux)
5753 if v_0.Op != OpARMSUBconst {
5754 break
5755 }
5756 off2 := auxIntToInt32(v_0.AuxInt)
5757 ptr := v_0.Args[0]
5758 mem := v_1
5759 v.reset(OpARMMOVHload)
5760 v.AuxInt = int32ToAuxInt(off1 - off2)
5761 v.Aux = symToAux(sym)
5762 v.AddArg2(ptr, mem)
5763 return true
5764 }
5765
5766
5767
5768 for {
5769 off1 := auxIntToInt32(v.AuxInt)
5770 sym1 := auxToSym(v.Aux)
5771 if v_0.Op != OpARMMOVWaddr {
5772 break
5773 }
5774 off2 := auxIntToInt32(v_0.AuxInt)
5775 sym2 := auxToSym(v_0.Aux)
5776 ptr := v_0.Args[0]
5777 mem := v_1
5778 if !(canMergeSym(sym1, sym2)) {
5779 break
5780 }
5781 v.reset(OpARMMOVHload)
5782 v.AuxInt = int32ToAuxInt(off1 + off2)
5783 v.Aux = symToAux(mergeSym(sym1, sym2))
5784 v.AddArg2(ptr, mem)
5785 return true
5786 }
5787
5788
5789
5790 for {
5791 off := auxIntToInt32(v.AuxInt)
5792 sym := auxToSym(v.Aux)
5793 ptr := v_0
5794 if v_1.Op != OpARMMOVHstore {
5795 break
5796 }
5797 off2 := auxIntToInt32(v_1.AuxInt)
5798 sym2 := auxToSym(v_1.Aux)
5799 x := v_1.Args[1]
5800 ptr2 := v_1.Args[0]
5801 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5802 break
5803 }
5804 v.reset(OpARMMOVHreg)
5805 v.AddArg(x)
5806 return true
5807 }
5808
5809
5810
5811 for {
5812 if auxIntToInt32(v.AuxInt) != 0 {
5813 break
5814 }
5815 sym := auxToSym(v.Aux)
5816 if v_0.Op != OpARMADD {
5817 break
5818 }
5819 idx := v_0.Args[1]
5820 ptr := v_0.Args[0]
5821 mem := v_1
5822 if !(sym == nil) {
5823 break
5824 }
5825 v.reset(OpARMMOVHloadidx)
5826 v.AddArg3(ptr, idx, mem)
5827 return true
5828 }
5829 return false
5830 }
5831 func rewriteValueARM_OpARMMOVHloadidx(v *Value) bool {
5832 v_2 := v.Args[2]
5833 v_1 := v.Args[1]
5834 v_0 := v.Args[0]
5835
5836
5837
5838 for {
5839 ptr := v_0
5840 idx := v_1
5841 if v_2.Op != OpARMMOVHstoreidx {
5842 break
5843 }
5844 x := v_2.Args[2]
5845 ptr2 := v_2.Args[0]
5846 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
5847 break
5848 }
5849 v.reset(OpARMMOVHreg)
5850 v.AddArg(x)
5851 return true
5852 }
5853
5854
5855 for {
5856 ptr := v_0
5857 if v_1.Op != OpARMMOVWconst {
5858 break
5859 }
5860 c := auxIntToInt32(v_1.AuxInt)
5861 mem := v_2
5862 v.reset(OpARMMOVHload)
5863 v.AuxInt = int32ToAuxInt(c)
5864 v.AddArg2(ptr, mem)
5865 return true
5866 }
5867
5868
5869 for {
5870 if v_0.Op != OpARMMOVWconst {
5871 break
5872 }
5873 c := auxIntToInt32(v_0.AuxInt)
5874 ptr := v_1
5875 mem := v_2
5876 v.reset(OpARMMOVHload)
5877 v.AuxInt = int32ToAuxInt(c)
5878 v.AddArg2(ptr, mem)
5879 return true
5880 }
5881 return false
5882 }
5883 func rewriteValueARM_OpARMMOVHreg(v *Value) bool {
5884 v_0 := v.Args[0]
5885
5886
5887 for {
5888 x := v_0
5889 if x.Op != OpARMMOVBload {
5890 break
5891 }
5892 v.reset(OpARMMOVWreg)
5893 v.AddArg(x)
5894 return true
5895 }
5896
5897
5898 for {
5899 x := v_0
5900 if x.Op != OpARMMOVBUload {
5901 break
5902 }
5903 v.reset(OpARMMOVWreg)
5904 v.AddArg(x)
5905 return true
5906 }
5907
5908
5909 for {
5910 x := v_0
5911 if x.Op != OpARMMOVHload {
5912 break
5913 }
5914 v.reset(OpARMMOVWreg)
5915 v.AddArg(x)
5916 return true
5917 }
5918
5919
5920
5921 for {
5922 if v_0.Op != OpARMANDconst {
5923 break
5924 }
5925 c := auxIntToInt32(v_0.AuxInt)
5926 x := v_0.Args[0]
5927 if !(c&0x8000 == 0) {
5928 break
5929 }
5930 v.reset(OpARMANDconst)
5931 v.AuxInt = int32ToAuxInt(c & 0x7fff)
5932 v.AddArg(x)
5933 return true
5934 }
5935
5936
5937 for {
5938 x := v_0
5939 if x.Op != OpARMMOVBreg {
5940 break
5941 }
5942 v.reset(OpARMMOVWreg)
5943 v.AddArg(x)
5944 return true
5945 }
5946
5947
5948 for {
5949 x := v_0
5950 if x.Op != OpARMMOVBUreg {
5951 break
5952 }
5953 v.reset(OpARMMOVWreg)
5954 v.AddArg(x)
5955 return true
5956 }
5957
5958
5959 for {
5960 x := v_0
5961 if x.Op != OpARMMOVHreg {
5962 break
5963 }
5964 v.reset(OpARMMOVWreg)
5965 v.AddArg(x)
5966 return true
5967 }
5968
5969
5970 for {
5971 if v_0.Op != OpARMMOVWconst {
5972 break
5973 }
5974 c := auxIntToInt32(v_0.AuxInt)
5975 v.reset(OpARMMOVWconst)
5976 v.AuxInt = int32ToAuxInt(int32(int16(c)))
5977 return true
5978 }
5979 return false
5980 }
5981 func rewriteValueARM_OpARMMOVHstore(v *Value) bool {
5982 v_2 := v.Args[2]
5983 v_1 := v.Args[1]
5984 v_0 := v.Args[0]
5985
5986
5987 for {
5988 off1 := auxIntToInt32(v.AuxInt)
5989 sym := auxToSym(v.Aux)
5990 if v_0.Op != OpARMADDconst {
5991 break
5992 }
5993 off2 := auxIntToInt32(v_0.AuxInt)
5994 ptr := v_0.Args[0]
5995 val := v_1
5996 mem := v_2
5997 v.reset(OpARMMOVHstore)
5998 v.AuxInt = int32ToAuxInt(off1 + off2)
5999 v.Aux = symToAux(sym)
6000 v.AddArg3(ptr, val, mem)
6001 return true
6002 }
6003
6004
6005 for {
6006 off1 := auxIntToInt32(v.AuxInt)
6007 sym := auxToSym(v.Aux)
6008 if v_0.Op != OpARMSUBconst {
6009 break
6010 }
6011 off2 := auxIntToInt32(v_0.AuxInt)
6012 ptr := v_0.Args[0]
6013 val := v_1
6014 mem := v_2
6015 v.reset(OpARMMOVHstore)
6016 v.AuxInt = int32ToAuxInt(off1 - off2)
6017 v.Aux = symToAux(sym)
6018 v.AddArg3(ptr, val, mem)
6019 return true
6020 }
6021
6022
6023
6024 for {
6025 off1 := auxIntToInt32(v.AuxInt)
6026 sym1 := auxToSym(v.Aux)
6027 if v_0.Op != OpARMMOVWaddr {
6028 break
6029 }
6030 off2 := auxIntToInt32(v_0.AuxInt)
6031 sym2 := auxToSym(v_0.Aux)
6032 ptr := v_0.Args[0]
6033 val := v_1
6034 mem := v_2
6035 if !(canMergeSym(sym1, sym2)) {
6036 break
6037 }
6038 v.reset(OpARMMOVHstore)
6039 v.AuxInt = int32ToAuxInt(off1 + off2)
6040 v.Aux = symToAux(mergeSym(sym1, sym2))
6041 v.AddArg3(ptr, val, mem)
6042 return true
6043 }
6044
6045
6046 for {
6047 off := auxIntToInt32(v.AuxInt)
6048 sym := auxToSym(v.Aux)
6049 ptr := v_0
6050 if v_1.Op != OpARMMOVHreg {
6051 break
6052 }
6053 x := v_1.Args[0]
6054 mem := v_2
6055 v.reset(OpARMMOVHstore)
6056 v.AuxInt = int32ToAuxInt(off)
6057 v.Aux = symToAux(sym)
6058 v.AddArg3(ptr, x, mem)
6059 return true
6060 }
6061
6062
6063 for {
6064 off := auxIntToInt32(v.AuxInt)
6065 sym := auxToSym(v.Aux)
6066 ptr := v_0
6067 if v_1.Op != OpARMMOVHUreg {
6068 break
6069 }
6070 x := v_1.Args[0]
6071 mem := v_2
6072 v.reset(OpARMMOVHstore)
6073 v.AuxInt = int32ToAuxInt(off)
6074 v.Aux = symToAux(sym)
6075 v.AddArg3(ptr, x, mem)
6076 return true
6077 }
6078
6079
6080
6081 for {
6082 if auxIntToInt32(v.AuxInt) != 0 {
6083 break
6084 }
6085 sym := auxToSym(v.Aux)
6086 if v_0.Op != OpARMADD {
6087 break
6088 }
6089 idx := v_0.Args[1]
6090 ptr := v_0.Args[0]
6091 val := v_1
6092 mem := v_2
6093 if !(sym == nil) {
6094 break
6095 }
6096 v.reset(OpARMMOVHstoreidx)
6097 v.AddArg4(ptr, idx, val, mem)
6098 return true
6099 }
6100 return false
6101 }
6102 func rewriteValueARM_OpARMMOVHstoreidx(v *Value) bool {
6103 v_3 := v.Args[3]
6104 v_2 := v.Args[2]
6105 v_1 := v.Args[1]
6106 v_0 := v.Args[0]
6107
6108
6109 for {
6110 ptr := v_0
6111 if v_1.Op != OpARMMOVWconst {
6112 break
6113 }
6114 c := auxIntToInt32(v_1.AuxInt)
6115 val := v_2
6116 mem := v_3
6117 v.reset(OpARMMOVHstore)
6118 v.AuxInt = int32ToAuxInt(c)
6119 v.AddArg3(ptr, val, mem)
6120 return true
6121 }
6122
6123
6124 for {
6125 if v_0.Op != OpARMMOVWconst {
6126 break
6127 }
6128 c := auxIntToInt32(v_0.AuxInt)
6129 ptr := v_1
6130 val := v_2
6131 mem := v_3
6132 v.reset(OpARMMOVHstore)
6133 v.AuxInt = int32ToAuxInt(c)
6134 v.AddArg3(ptr, val, mem)
6135 return true
6136 }
6137 return false
6138 }
6139 func rewriteValueARM_OpARMMOVWload(v *Value) bool {
6140 v_1 := v.Args[1]
6141 v_0 := v.Args[0]
6142 b := v.Block
6143 config := b.Func.Config
6144
6145
6146 for {
6147 off1 := auxIntToInt32(v.AuxInt)
6148 sym := auxToSym(v.Aux)
6149 if v_0.Op != OpARMADDconst {
6150 break
6151 }
6152 off2 := auxIntToInt32(v_0.AuxInt)
6153 ptr := v_0.Args[0]
6154 mem := v_1
6155 v.reset(OpARMMOVWload)
6156 v.AuxInt = int32ToAuxInt(off1 + off2)
6157 v.Aux = symToAux(sym)
6158 v.AddArg2(ptr, mem)
6159 return true
6160 }
6161
6162
6163 for {
6164 off1 := auxIntToInt32(v.AuxInt)
6165 sym := auxToSym(v.Aux)
6166 if v_0.Op != OpARMSUBconst {
6167 break
6168 }
6169 off2 := auxIntToInt32(v_0.AuxInt)
6170 ptr := v_0.Args[0]
6171 mem := v_1
6172 v.reset(OpARMMOVWload)
6173 v.AuxInt = int32ToAuxInt(off1 - off2)
6174 v.Aux = symToAux(sym)
6175 v.AddArg2(ptr, mem)
6176 return true
6177 }
6178
6179
6180
6181 for {
6182 off1 := auxIntToInt32(v.AuxInt)
6183 sym1 := auxToSym(v.Aux)
6184 if v_0.Op != OpARMMOVWaddr {
6185 break
6186 }
6187 off2 := auxIntToInt32(v_0.AuxInt)
6188 sym2 := auxToSym(v_0.Aux)
6189 ptr := v_0.Args[0]
6190 mem := v_1
6191 if !(canMergeSym(sym1, sym2)) {
6192 break
6193 }
6194 v.reset(OpARMMOVWload)
6195 v.AuxInt = int32ToAuxInt(off1 + off2)
6196 v.Aux = symToAux(mergeSym(sym1, sym2))
6197 v.AddArg2(ptr, mem)
6198 return true
6199 }
6200
6201
6202
6203 for {
6204 off := auxIntToInt32(v.AuxInt)
6205 sym := auxToSym(v.Aux)
6206 ptr := v_0
6207 if v_1.Op != OpARMMOVWstore {
6208 break
6209 }
6210 off2 := auxIntToInt32(v_1.AuxInt)
6211 sym2 := auxToSym(v_1.Aux)
6212 x := v_1.Args[1]
6213 ptr2 := v_1.Args[0]
6214 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
6215 break
6216 }
6217 v.copyOf(x)
6218 return true
6219 }
6220
6221
6222
6223 for {
6224 if auxIntToInt32(v.AuxInt) != 0 {
6225 break
6226 }
6227 sym := auxToSym(v.Aux)
6228 if v_0.Op != OpARMADD {
6229 break
6230 }
6231 idx := v_0.Args[1]
6232 ptr := v_0.Args[0]
6233 mem := v_1
6234 if !(sym == nil) {
6235 break
6236 }
6237 v.reset(OpARMMOVWloadidx)
6238 v.AddArg3(ptr, idx, mem)
6239 return true
6240 }
6241
6242
6243
6244 for {
6245 if auxIntToInt32(v.AuxInt) != 0 {
6246 break
6247 }
6248 sym := auxToSym(v.Aux)
6249 if v_0.Op != OpARMADDshiftLL {
6250 break
6251 }
6252 c := auxIntToInt32(v_0.AuxInt)
6253 idx := v_0.Args[1]
6254 ptr := v_0.Args[0]
6255 mem := v_1
6256 if !(sym == nil) {
6257 break
6258 }
6259 v.reset(OpARMMOVWloadshiftLL)
6260 v.AuxInt = int32ToAuxInt(c)
6261 v.AddArg3(ptr, idx, mem)
6262 return true
6263 }
6264
6265
6266
6267 for {
6268 if auxIntToInt32(v.AuxInt) != 0 {
6269 break
6270 }
6271 sym := auxToSym(v.Aux)
6272 if v_0.Op != OpARMADDshiftRL {
6273 break
6274 }
6275 c := auxIntToInt32(v_0.AuxInt)
6276 idx := v_0.Args[1]
6277 ptr := v_0.Args[0]
6278 mem := v_1
6279 if !(sym == nil) {
6280 break
6281 }
6282 v.reset(OpARMMOVWloadshiftRL)
6283 v.AuxInt = int32ToAuxInt(c)
6284 v.AddArg3(ptr, idx, mem)
6285 return true
6286 }
6287
6288
6289
6290 for {
6291 if auxIntToInt32(v.AuxInt) != 0 {
6292 break
6293 }
6294 sym := auxToSym(v.Aux)
6295 if v_0.Op != OpARMADDshiftRA {
6296 break
6297 }
6298 c := auxIntToInt32(v_0.AuxInt)
6299 idx := v_0.Args[1]
6300 ptr := v_0.Args[0]
6301 mem := v_1
6302 if !(sym == nil) {
6303 break
6304 }
6305 v.reset(OpARMMOVWloadshiftRA)
6306 v.AuxInt = int32ToAuxInt(c)
6307 v.AddArg3(ptr, idx, mem)
6308 return true
6309 }
6310
6311
6312
6313 for {
6314 off := auxIntToInt32(v.AuxInt)
6315 sym := auxToSym(v.Aux)
6316 if v_0.Op != OpSB || !(symIsRO(sym)) {
6317 break
6318 }
6319 v.reset(OpARMMOVWconst)
6320 v.AuxInt = int32ToAuxInt(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))
6321 return true
6322 }
6323 return false
6324 }
6325 func rewriteValueARM_OpARMMOVWloadidx(v *Value) bool {
6326 v_2 := v.Args[2]
6327 v_1 := v.Args[1]
6328 v_0 := v.Args[0]
6329
6330
6331
6332 for {
6333 ptr := v_0
6334 idx := v_1
6335 if v_2.Op != OpARMMOVWstoreidx {
6336 break
6337 }
6338 x := v_2.Args[2]
6339 ptr2 := v_2.Args[0]
6340 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
6341 break
6342 }
6343 v.copyOf(x)
6344 return true
6345 }
6346
6347
6348 for {
6349 ptr := v_0
6350 if v_1.Op != OpARMMOVWconst {
6351 break
6352 }
6353 c := auxIntToInt32(v_1.AuxInt)
6354 mem := v_2
6355 v.reset(OpARMMOVWload)
6356 v.AuxInt = int32ToAuxInt(c)
6357 v.AddArg2(ptr, mem)
6358 return true
6359 }
6360
6361
6362 for {
6363 if v_0.Op != OpARMMOVWconst {
6364 break
6365 }
6366 c := auxIntToInt32(v_0.AuxInt)
6367 ptr := v_1
6368 mem := v_2
6369 v.reset(OpARMMOVWload)
6370 v.AuxInt = int32ToAuxInt(c)
6371 v.AddArg2(ptr, mem)
6372 return true
6373 }
6374
6375
6376 for {
6377 ptr := v_0
6378 if v_1.Op != OpARMSLLconst {
6379 break
6380 }
6381 c := auxIntToInt32(v_1.AuxInt)
6382 idx := v_1.Args[0]
6383 mem := v_2
6384 v.reset(OpARMMOVWloadshiftLL)
6385 v.AuxInt = int32ToAuxInt(c)
6386 v.AddArg3(ptr, idx, mem)
6387 return true
6388 }
6389
6390
6391 for {
6392 if v_0.Op != OpARMSLLconst {
6393 break
6394 }
6395 c := auxIntToInt32(v_0.AuxInt)
6396 idx := v_0.Args[0]
6397 ptr := v_1
6398 mem := v_2
6399 v.reset(OpARMMOVWloadshiftLL)
6400 v.AuxInt = int32ToAuxInt(c)
6401 v.AddArg3(ptr, idx, mem)
6402 return true
6403 }
6404
6405
6406 for {
6407 ptr := v_0
6408 if v_1.Op != OpARMSRLconst {
6409 break
6410 }
6411 c := auxIntToInt32(v_1.AuxInt)
6412 idx := v_1.Args[0]
6413 mem := v_2
6414 v.reset(OpARMMOVWloadshiftRL)
6415 v.AuxInt = int32ToAuxInt(c)
6416 v.AddArg3(ptr, idx, mem)
6417 return true
6418 }
6419
6420
6421 for {
6422 if v_0.Op != OpARMSRLconst {
6423 break
6424 }
6425 c := auxIntToInt32(v_0.AuxInt)
6426 idx := v_0.Args[0]
6427 ptr := v_1
6428 mem := v_2
6429 v.reset(OpARMMOVWloadshiftRL)
6430 v.AuxInt = int32ToAuxInt(c)
6431 v.AddArg3(ptr, idx, mem)
6432 return true
6433 }
6434
6435
6436 for {
6437 ptr := v_0
6438 if v_1.Op != OpARMSRAconst {
6439 break
6440 }
6441 c := auxIntToInt32(v_1.AuxInt)
6442 idx := v_1.Args[0]
6443 mem := v_2
6444 v.reset(OpARMMOVWloadshiftRA)
6445 v.AuxInt = int32ToAuxInt(c)
6446 v.AddArg3(ptr, idx, mem)
6447 return true
6448 }
6449
6450
6451 for {
6452 if v_0.Op != OpARMSRAconst {
6453 break
6454 }
6455 c := auxIntToInt32(v_0.AuxInt)
6456 idx := v_0.Args[0]
6457 ptr := v_1
6458 mem := v_2
6459 v.reset(OpARMMOVWloadshiftRA)
6460 v.AuxInt = int32ToAuxInt(c)
6461 v.AddArg3(ptr, idx, mem)
6462 return true
6463 }
6464 return false
6465 }
6466 func rewriteValueARM_OpARMMOVWloadshiftLL(v *Value) bool {
6467 v_2 := v.Args[2]
6468 v_1 := v.Args[1]
6469 v_0 := v.Args[0]
6470
6471
6472
6473 for {
6474 c := auxIntToInt32(v.AuxInt)
6475 ptr := v_0
6476 idx := v_1
6477 if v_2.Op != OpARMMOVWstoreshiftLL {
6478 break
6479 }
6480 d := auxIntToInt32(v_2.AuxInt)
6481 x := v_2.Args[2]
6482 ptr2 := v_2.Args[0]
6483 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6484 break
6485 }
6486 v.copyOf(x)
6487 return true
6488 }
6489
6490
6491 for {
6492 d := auxIntToInt32(v.AuxInt)
6493 ptr := v_0
6494 if v_1.Op != OpARMMOVWconst {
6495 break
6496 }
6497 c := auxIntToInt32(v_1.AuxInt)
6498 mem := v_2
6499 v.reset(OpARMMOVWload)
6500 v.AuxInt = int32ToAuxInt(int32(uint32(c) << uint64(d)))
6501 v.AddArg2(ptr, mem)
6502 return true
6503 }
6504 return false
6505 }
6506 func rewriteValueARM_OpARMMOVWloadshiftRA(v *Value) bool {
6507 v_2 := v.Args[2]
6508 v_1 := v.Args[1]
6509 v_0 := v.Args[0]
6510
6511
6512
6513 for {
6514 c := auxIntToInt32(v.AuxInt)
6515 ptr := v_0
6516 idx := v_1
6517 if v_2.Op != OpARMMOVWstoreshiftRA {
6518 break
6519 }
6520 d := auxIntToInt32(v_2.AuxInt)
6521 x := v_2.Args[2]
6522 ptr2 := v_2.Args[0]
6523 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6524 break
6525 }
6526 v.copyOf(x)
6527 return true
6528 }
6529
6530
6531 for {
6532 d := auxIntToInt32(v.AuxInt)
6533 ptr := v_0
6534 if v_1.Op != OpARMMOVWconst {
6535 break
6536 }
6537 c := auxIntToInt32(v_1.AuxInt)
6538 mem := v_2
6539 v.reset(OpARMMOVWload)
6540 v.AuxInt = int32ToAuxInt(c >> uint64(d))
6541 v.AddArg2(ptr, mem)
6542 return true
6543 }
6544 return false
6545 }
6546 func rewriteValueARM_OpARMMOVWloadshiftRL(v *Value) bool {
6547 v_2 := v.Args[2]
6548 v_1 := v.Args[1]
6549 v_0 := v.Args[0]
6550
6551
6552
6553 for {
6554 c := auxIntToInt32(v.AuxInt)
6555 ptr := v_0
6556 idx := v_1
6557 if v_2.Op != OpARMMOVWstoreshiftRL {
6558 break
6559 }
6560 d := auxIntToInt32(v_2.AuxInt)
6561 x := v_2.Args[2]
6562 ptr2 := v_2.Args[0]
6563 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6564 break
6565 }
6566 v.copyOf(x)
6567 return true
6568 }
6569
6570
6571 for {
6572 d := auxIntToInt32(v.AuxInt)
6573 ptr := v_0
6574 if v_1.Op != OpARMMOVWconst {
6575 break
6576 }
6577 c := auxIntToInt32(v_1.AuxInt)
6578 mem := v_2
6579 v.reset(OpARMMOVWload)
6580 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
6581 v.AddArg2(ptr, mem)
6582 return true
6583 }
6584 return false
6585 }
6586 func rewriteValueARM_OpARMMOVWnop(v *Value) bool {
6587 v_0 := v.Args[0]
6588
6589
6590 for {
6591 if v_0.Op != OpARMMOVWconst {
6592 break
6593 }
6594 c := auxIntToInt32(v_0.AuxInt)
6595 v.reset(OpARMMOVWconst)
6596 v.AuxInt = int32ToAuxInt(c)
6597 return true
6598 }
6599 return false
6600 }
6601 func rewriteValueARM_OpARMMOVWreg(v *Value) bool {
6602 v_0 := v.Args[0]
6603
6604
6605
6606 for {
6607 x := v_0
6608 if !(x.Uses == 1) {
6609 break
6610 }
6611 v.reset(OpARMMOVWnop)
6612 v.AddArg(x)
6613 return true
6614 }
6615
6616
6617 for {
6618 if v_0.Op != OpARMMOVWconst {
6619 break
6620 }
6621 c := auxIntToInt32(v_0.AuxInt)
6622 v.reset(OpARMMOVWconst)
6623 v.AuxInt = int32ToAuxInt(c)
6624 return true
6625 }
6626 return false
6627 }
6628 func rewriteValueARM_OpARMMOVWstore(v *Value) bool {
6629 v_2 := v.Args[2]
6630 v_1 := v.Args[1]
6631 v_0 := v.Args[0]
6632
6633
6634 for {
6635 off1 := auxIntToInt32(v.AuxInt)
6636 sym := auxToSym(v.Aux)
6637 if v_0.Op != OpARMADDconst {
6638 break
6639 }
6640 off2 := auxIntToInt32(v_0.AuxInt)
6641 ptr := v_0.Args[0]
6642 val := v_1
6643 mem := v_2
6644 v.reset(OpARMMOVWstore)
6645 v.AuxInt = int32ToAuxInt(off1 + off2)
6646 v.Aux = symToAux(sym)
6647 v.AddArg3(ptr, val, mem)
6648 return true
6649 }
6650
6651
6652 for {
6653 off1 := auxIntToInt32(v.AuxInt)
6654 sym := auxToSym(v.Aux)
6655 if v_0.Op != OpARMSUBconst {
6656 break
6657 }
6658 off2 := auxIntToInt32(v_0.AuxInt)
6659 ptr := v_0.Args[0]
6660 val := v_1
6661 mem := v_2
6662 v.reset(OpARMMOVWstore)
6663 v.AuxInt = int32ToAuxInt(off1 - off2)
6664 v.Aux = symToAux(sym)
6665 v.AddArg3(ptr, val, mem)
6666 return true
6667 }
6668
6669
6670
6671 for {
6672 off1 := auxIntToInt32(v.AuxInt)
6673 sym1 := auxToSym(v.Aux)
6674 if v_0.Op != OpARMMOVWaddr {
6675 break
6676 }
6677 off2 := auxIntToInt32(v_0.AuxInt)
6678 sym2 := auxToSym(v_0.Aux)
6679 ptr := v_0.Args[0]
6680 val := v_1
6681 mem := v_2
6682 if !(canMergeSym(sym1, sym2)) {
6683 break
6684 }
6685 v.reset(OpARMMOVWstore)
6686 v.AuxInt = int32ToAuxInt(off1 + off2)
6687 v.Aux = symToAux(mergeSym(sym1, sym2))
6688 v.AddArg3(ptr, val, mem)
6689 return true
6690 }
6691
6692
6693
6694 for {
6695 if auxIntToInt32(v.AuxInt) != 0 {
6696 break
6697 }
6698 sym := auxToSym(v.Aux)
6699 if v_0.Op != OpARMADD {
6700 break
6701 }
6702 idx := v_0.Args[1]
6703 ptr := v_0.Args[0]
6704 val := v_1
6705 mem := v_2
6706 if !(sym == nil) {
6707 break
6708 }
6709 v.reset(OpARMMOVWstoreidx)
6710 v.AddArg4(ptr, idx, val, mem)
6711 return true
6712 }
6713
6714
6715
6716 for {
6717 if auxIntToInt32(v.AuxInt) != 0 {
6718 break
6719 }
6720 sym := auxToSym(v.Aux)
6721 if v_0.Op != OpARMADDshiftLL {
6722 break
6723 }
6724 c := auxIntToInt32(v_0.AuxInt)
6725 idx := v_0.Args[1]
6726 ptr := v_0.Args[0]
6727 val := v_1
6728 mem := v_2
6729 if !(sym == nil) {
6730 break
6731 }
6732 v.reset(OpARMMOVWstoreshiftLL)
6733 v.AuxInt = int32ToAuxInt(c)
6734 v.AddArg4(ptr, idx, val, mem)
6735 return true
6736 }
6737
6738
6739
6740 for {
6741 if auxIntToInt32(v.AuxInt) != 0 {
6742 break
6743 }
6744 sym := auxToSym(v.Aux)
6745 if v_0.Op != OpARMADDshiftRL {
6746 break
6747 }
6748 c := auxIntToInt32(v_0.AuxInt)
6749 idx := v_0.Args[1]
6750 ptr := v_0.Args[0]
6751 val := v_1
6752 mem := v_2
6753 if !(sym == nil) {
6754 break
6755 }
6756 v.reset(OpARMMOVWstoreshiftRL)
6757 v.AuxInt = int32ToAuxInt(c)
6758 v.AddArg4(ptr, idx, val, mem)
6759 return true
6760 }
6761
6762
6763
6764 for {
6765 if auxIntToInt32(v.AuxInt) != 0 {
6766 break
6767 }
6768 sym := auxToSym(v.Aux)
6769 if v_0.Op != OpARMADDshiftRA {
6770 break
6771 }
6772 c := auxIntToInt32(v_0.AuxInt)
6773 idx := v_0.Args[1]
6774 ptr := v_0.Args[0]
6775 val := v_1
6776 mem := v_2
6777 if !(sym == nil) {
6778 break
6779 }
6780 v.reset(OpARMMOVWstoreshiftRA)
6781 v.AuxInt = int32ToAuxInt(c)
6782 v.AddArg4(ptr, idx, val, mem)
6783 return true
6784 }
6785 return false
6786 }
6787 func rewriteValueARM_OpARMMOVWstoreidx(v *Value) bool {
6788 v_3 := v.Args[3]
6789 v_2 := v.Args[2]
6790 v_1 := v.Args[1]
6791 v_0 := v.Args[0]
6792
6793
6794 for {
6795 ptr := v_0
6796 if v_1.Op != OpARMMOVWconst {
6797 break
6798 }
6799 c := auxIntToInt32(v_1.AuxInt)
6800 val := v_2
6801 mem := v_3
6802 v.reset(OpARMMOVWstore)
6803 v.AuxInt = int32ToAuxInt(c)
6804 v.AddArg3(ptr, val, mem)
6805 return true
6806 }
6807
6808
6809 for {
6810 if v_0.Op != OpARMMOVWconst {
6811 break
6812 }
6813 c := auxIntToInt32(v_0.AuxInt)
6814 ptr := v_1
6815 val := v_2
6816 mem := v_3
6817 v.reset(OpARMMOVWstore)
6818 v.AuxInt = int32ToAuxInt(c)
6819 v.AddArg3(ptr, val, mem)
6820 return true
6821 }
6822
6823
6824 for {
6825 ptr := v_0
6826 if v_1.Op != OpARMSLLconst {
6827 break
6828 }
6829 c := auxIntToInt32(v_1.AuxInt)
6830 idx := v_1.Args[0]
6831 val := v_2
6832 mem := v_3
6833 v.reset(OpARMMOVWstoreshiftLL)
6834 v.AuxInt = int32ToAuxInt(c)
6835 v.AddArg4(ptr, idx, val, mem)
6836 return true
6837 }
6838
6839
6840 for {
6841 if v_0.Op != OpARMSLLconst {
6842 break
6843 }
6844 c := auxIntToInt32(v_0.AuxInt)
6845 idx := v_0.Args[0]
6846 ptr := v_1
6847 val := v_2
6848 mem := v_3
6849 v.reset(OpARMMOVWstoreshiftLL)
6850 v.AuxInt = int32ToAuxInt(c)
6851 v.AddArg4(ptr, idx, val, mem)
6852 return true
6853 }
6854
6855
6856 for {
6857 ptr := v_0
6858 if v_1.Op != OpARMSRLconst {
6859 break
6860 }
6861 c := auxIntToInt32(v_1.AuxInt)
6862 idx := v_1.Args[0]
6863 val := v_2
6864 mem := v_3
6865 v.reset(OpARMMOVWstoreshiftRL)
6866 v.AuxInt = int32ToAuxInt(c)
6867 v.AddArg4(ptr, idx, val, mem)
6868 return true
6869 }
6870
6871
6872 for {
6873 if v_0.Op != OpARMSRLconst {
6874 break
6875 }
6876 c := auxIntToInt32(v_0.AuxInt)
6877 idx := v_0.Args[0]
6878 ptr := v_1
6879 val := v_2
6880 mem := v_3
6881 v.reset(OpARMMOVWstoreshiftRL)
6882 v.AuxInt = int32ToAuxInt(c)
6883 v.AddArg4(ptr, idx, val, mem)
6884 return true
6885 }
6886
6887
6888 for {
6889 ptr := v_0
6890 if v_1.Op != OpARMSRAconst {
6891 break
6892 }
6893 c := auxIntToInt32(v_1.AuxInt)
6894 idx := v_1.Args[0]
6895 val := v_2
6896 mem := v_3
6897 v.reset(OpARMMOVWstoreshiftRA)
6898 v.AuxInt = int32ToAuxInt(c)
6899 v.AddArg4(ptr, idx, val, mem)
6900 return true
6901 }
6902
6903
6904 for {
6905 if v_0.Op != OpARMSRAconst {
6906 break
6907 }
6908 c := auxIntToInt32(v_0.AuxInt)
6909 idx := v_0.Args[0]
6910 ptr := v_1
6911 val := v_2
6912 mem := v_3
6913 v.reset(OpARMMOVWstoreshiftRA)
6914 v.AuxInt = int32ToAuxInt(c)
6915 v.AddArg4(ptr, idx, val, mem)
6916 return true
6917 }
6918 return false
6919 }
6920 func rewriteValueARM_OpARMMOVWstoreshiftLL(v *Value) bool {
6921 v_3 := v.Args[3]
6922 v_2 := v.Args[2]
6923 v_1 := v.Args[1]
6924 v_0 := v.Args[0]
6925
6926
6927 for {
6928 d := auxIntToInt32(v.AuxInt)
6929 ptr := v_0
6930 if v_1.Op != OpARMMOVWconst {
6931 break
6932 }
6933 c := auxIntToInt32(v_1.AuxInt)
6934 val := v_2
6935 mem := v_3
6936 v.reset(OpARMMOVWstore)
6937 v.AuxInt = int32ToAuxInt(int32(uint32(c) << uint64(d)))
6938 v.AddArg3(ptr, val, mem)
6939 return true
6940 }
6941 return false
6942 }
6943 func rewriteValueARM_OpARMMOVWstoreshiftRA(v *Value) bool {
6944 v_3 := v.Args[3]
6945 v_2 := v.Args[2]
6946 v_1 := v.Args[1]
6947 v_0 := v.Args[0]
6948
6949
6950 for {
6951 d := auxIntToInt32(v.AuxInt)
6952 ptr := v_0
6953 if v_1.Op != OpARMMOVWconst {
6954 break
6955 }
6956 c := auxIntToInt32(v_1.AuxInt)
6957 val := v_2
6958 mem := v_3
6959 v.reset(OpARMMOVWstore)
6960 v.AuxInt = int32ToAuxInt(c >> uint64(d))
6961 v.AddArg3(ptr, val, mem)
6962 return true
6963 }
6964 return false
6965 }
6966 func rewriteValueARM_OpARMMOVWstoreshiftRL(v *Value) bool {
6967 v_3 := v.Args[3]
6968 v_2 := v.Args[2]
6969 v_1 := v.Args[1]
6970 v_0 := v.Args[0]
6971
6972
6973 for {
6974 d := auxIntToInt32(v.AuxInt)
6975 ptr := v_0
6976 if v_1.Op != OpARMMOVWconst {
6977 break
6978 }
6979 c := auxIntToInt32(v_1.AuxInt)
6980 val := v_2
6981 mem := v_3
6982 v.reset(OpARMMOVWstore)
6983 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
6984 v.AddArg3(ptr, val, mem)
6985 return true
6986 }
6987 return false
6988 }
6989 func rewriteValueARM_OpARMMUL(v *Value) bool {
6990 v_1 := v.Args[1]
6991 v_0 := v.Args[0]
6992 b := v.Block
6993
6994
6995
6996 for {
6997 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6998 x := v_0
6999 if v_1.Op != OpARMMOVWconst {
7000 continue
7001 }
7002 c := auxIntToInt32(v_1.AuxInt)
7003 if !(int32(c) == -1) {
7004 continue
7005 }
7006 v.reset(OpARMRSBconst)
7007 v.AuxInt = int32ToAuxInt(0)
7008 v.AddArg(x)
7009 return true
7010 }
7011 break
7012 }
7013
7014
7015 for {
7016 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7017 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
7018 continue
7019 }
7020 v.reset(OpARMMOVWconst)
7021 v.AuxInt = int32ToAuxInt(0)
7022 return true
7023 }
7024 break
7025 }
7026
7027
7028 for {
7029 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7030 x := v_0
7031 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7032 continue
7033 }
7034 v.copyOf(x)
7035 return true
7036 }
7037 break
7038 }
7039
7040
7041
7042 for {
7043 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7044 x := v_0
7045 if v_1.Op != OpARMMOVWconst {
7046 continue
7047 }
7048 c := auxIntToInt32(v_1.AuxInt)
7049 if !(isPowerOfTwo32(c)) {
7050 continue
7051 }
7052 v.reset(OpARMSLLconst)
7053 v.AuxInt = int32ToAuxInt(int32(log32(c)))
7054 v.AddArg(x)
7055 return true
7056 }
7057 break
7058 }
7059
7060
7061
7062 for {
7063 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7064 x := v_0
7065 if v_1.Op != OpARMMOVWconst {
7066 continue
7067 }
7068 c := auxIntToInt32(v_1.AuxInt)
7069 if !(isPowerOfTwo32(c-1) && c >= 3) {
7070 continue
7071 }
7072 v.reset(OpARMADDshiftLL)
7073 v.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7074 v.AddArg2(x, x)
7075 return true
7076 }
7077 break
7078 }
7079
7080
7081
7082 for {
7083 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7084 x := v_0
7085 if v_1.Op != OpARMMOVWconst {
7086 continue
7087 }
7088 c := auxIntToInt32(v_1.AuxInt)
7089 if !(isPowerOfTwo32(c+1) && c >= 7) {
7090 continue
7091 }
7092 v.reset(OpARMRSBshiftLL)
7093 v.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7094 v.AddArg2(x, x)
7095 return true
7096 }
7097 break
7098 }
7099
7100
7101
7102 for {
7103 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7104 x := v_0
7105 if v_1.Op != OpARMMOVWconst {
7106 continue
7107 }
7108 c := auxIntToInt32(v_1.AuxInt)
7109 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7110 continue
7111 }
7112 v.reset(OpARMSLLconst)
7113 v.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7114 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7115 v0.AuxInt = int32ToAuxInt(1)
7116 v0.AddArg2(x, x)
7117 v.AddArg(v0)
7118 return true
7119 }
7120 break
7121 }
7122
7123
7124
7125 for {
7126 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7127 x := v_0
7128 if v_1.Op != OpARMMOVWconst {
7129 continue
7130 }
7131 c := auxIntToInt32(v_1.AuxInt)
7132 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7133 continue
7134 }
7135 v.reset(OpARMSLLconst)
7136 v.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7137 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7138 v0.AuxInt = int32ToAuxInt(2)
7139 v0.AddArg2(x, x)
7140 v.AddArg(v0)
7141 return true
7142 }
7143 break
7144 }
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 != OpARMMOVWconst {
7152 continue
7153 }
7154 c := auxIntToInt32(v_1.AuxInt)
7155 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7156 continue
7157 }
7158 v.reset(OpARMSLLconst)
7159 v.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7160 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7161 v0.AuxInt = int32ToAuxInt(3)
7162 v0.AddArg2(x, x)
7163 v.AddArg(v0)
7164 return true
7165 }
7166 break
7167 }
7168
7169
7170
7171 for {
7172 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7173 x := v_0
7174 if v_1.Op != OpARMMOVWconst {
7175 continue
7176 }
7177 c := auxIntToInt32(v_1.AuxInt)
7178 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7179 continue
7180 }
7181 v.reset(OpARMSLLconst)
7182 v.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7183 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7184 v0.AuxInt = int32ToAuxInt(3)
7185 v0.AddArg2(x, x)
7186 v.AddArg(v0)
7187 return true
7188 }
7189 break
7190 }
7191
7192
7193 for {
7194 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7195 if v_0.Op != OpARMMOVWconst {
7196 continue
7197 }
7198 c := auxIntToInt32(v_0.AuxInt)
7199 if v_1.Op != OpARMMOVWconst {
7200 continue
7201 }
7202 d := auxIntToInt32(v_1.AuxInt)
7203 v.reset(OpARMMOVWconst)
7204 v.AuxInt = int32ToAuxInt(c * d)
7205 return true
7206 }
7207 break
7208 }
7209 return false
7210 }
7211 func rewriteValueARM_OpARMMULA(v *Value) bool {
7212 v_2 := v.Args[2]
7213 v_1 := v.Args[1]
7214 v_0 := v.Args[0]
7215 b := v.Block
7216
7217
7218
7219 for {
7220 x := v_0
7221 if v_1.Op != OpARMMOVWconst {
7222 break
7223 }
7224 c := auxIntToInt32(v_1.AuxInt)
7225 a := v_2
7226 if !(c == -1) {
7227 break
7228 }
7229 v.reset(OpARMSUB)
7230 v.AddArg2(a, x)
7231 return true
7232 }
7233
7234
7235 for {
7236 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
7237 break
7238 }
7239 a := v_2
7240 v.copyOf(a)
7241 return true
7242 }
7243
7244
7245 for {
7246 x := v_0
7247 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7248 break
7249 }
7250 a := v_2
7251 v.reset(OpARMADD)
7252 v.AddArg2(x, a)
7253 return true
7254 }
7255
7256
7257
7258 for {
7259 x := v_0
7260 if v_1.Op != OpARMMOVWconst {
7261 break
7262 }
7263 c := auxIntToInt32(v_1.AuxInt)
7264 a := v_2
7265 if !(isPowerOfTwo32(c)) {
7266 break
7267 }
7268 v.reset(OpARMADD)
7269 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7270 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7271 v0.AddArg(x)
7272 v.AddArg2(v0, a)
7273 return true
7274 }
7275
7276
7277
7278 for {
7279 x := v_0
7280 if v_1.Op != OpARMMOVWconst {
7281 break
7282 }
7283 c := auxIntToInt32(v_1.AuxInt)
7284 a := v_2
7285 if !(isPowerOfTwo32(c-1) && c >= 3) {
7286 break
7287 }
7288 v.reset(OpARMADD)
7289 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7290 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7291 v0.AddArg2(x, x)
7292 v.AddArg2(v0, a)
7293 return true
7294 }
7295
7296
7297
7298 for {
7299 x := v_0
7300 if v_1.Op != OpARMMOVWconst {
7301 break
7302 }
7303 c := auxIntToInt32(v_1.AuxInt)
7304 a := v_2
7305 if !(isPowerOfTwo32(c+1) && c >= 7) {
7306 break
7307 }
7308 v.reset(OpARMADD)
7309 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7310 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7311 v0.AddArg2(x, x)
7312 v.AddArg2(v0, a)
7313 return true
7314 }
7315
7316
7317
7318 for {
7319 x := v_0
7320 if v_1.Op != OpARMMOVWconst {
7321 break
7322 }
7323 c := auxIntToInt32(v_1.AuxInt)
7324 a := v_2
7325 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7326 break
7327 }
7328 v.reset(OpARMADD)
7329 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7330 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7331 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7332 v1.AuxInt = int32ToAuxInt(1)
7333 v1.AddArg2(x, x)
7334 v0.AddArg(v1)
7335 v.AddArg2(v0, a)
7336 return true
7337 }
7338
7339
7340
7341 for {
7342 x := v_0
7343 if v_1.Op != OpARMMOVWconst {
7344 break
7345 }
7346 c := auxIntToInt32(v_1.AuxInt)
7347 a := v_2
7348 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7349 break
7350 }
7351 v.reset(OpARMADD)
7352 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7353 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7354 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7355 v1.AuxInt = int32ToAuxInt(2)
7356 v1.AddArg2(x, x)
7357 v0.AddArg(v1)
7358 v.AddArg2(v0, a)
7359 return true
7360 }
7361
7362
7363
7364 for {
7365 x := v_0
7366 if v_1.Op != OpARMMOVWconst {
7367 break
7368 }
7369 c := auxIntToInt32(v_1.AuxInt)
7370 a := v_2
7371 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7372 break
7373 }
7374 v.reset(OpARMADD)
7375 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7376 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7377 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7378 v1.AuxInt = int32ToAuxInt(3)
7379 v1.AddArg2(x, x)
7380 v0.AddArg(v1)
7381 v.AddArg2(v0, a)
7382 return true
7383 }
7384
7385
7386
7387 for {
7388 x := v_0
7389 if v_1.Op != OpARMMOVWconst {
7390 break
7391 }
7392 c := auxIntToInt32(v_1.AuxInt)
7393 a := v_2
7394 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7395 break
7396 }
7397 v.reset(OpARMADD)
7398 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7399 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7400 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7401 v1.AuxInt = int32ToAuxInt(3)
7402 v1.AddArg2(x, x)
7403 v0.AddArg(v1)
7404 v.AddArg2(v0, a)
7405 return true
7406 }
7407
7408
7409
7410 for {
7411 if v_0.Op != OpARMMOVWconst {
7412 break
7413 }
7414 c := auxIntToInt32(v_0.AuxInt)
7415 x := v_1
7416 a := v_2
7417 if !(c == -1) {
7418 break
7419 }
7420 v.reset(OpARMSUB)
7421 v.AddArg2(a, x)
7422 return true
7423 }
7424
7425
7426 for {
7427 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 0 {
7428 break
7429 }
7430 a := v_2
7431 v.copyOf(a)
7432 return true
7433 }
7434
7435
7436 for {
7437 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 1 {
7438 break
7439 }
7440 x := v_1
7441 a := v_2
7442 v.reset(OpARMADD)
7443 v.AddArg2(x, a)
7444 return true
7445 }
7446
7447
7448
7449 for {
7450 if v_0.Op != OpARMMOVWconst {
7451 break
7452 }
7453 c := auxIntToInt32(v_0.AuxInt)
7454 x := v_1
7455 a := v_2
7456 if !(isPowerOfTwo32(c)) {
7457 break
7458 }
7459 v.reset(OpARMADD)
7460 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7461 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7462 v0.AddArg(x)
7463 v.AddArg2(v0, a)
7464 return true
7465 }
7466
7467
7468
7469 for {
7470 if v_0.Op != OpARMMOVWconst {
7471 break
7472 }
7473 c := auxIntToInt32(v_0.AuxInt)
7474 x := v_1
7475 a := v_2
7476 if !(isPowerOfTwo32(c-1) && c >= 3) {
7477 break
7478 }
7479 v.reset(OpARMADD)
7480 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7481 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7482 v0.AddArg2(x, x)
7483 v.AddArg2(v0, a)
7484 return true
7485 }
7486
7487
7488
7489 for {
7490 if v_0.Op != OpARMMOVWconst {
7491 break
7492 }
7493 c := auxIntToInt32(v_0.AuxInt)
7494 x := v_1
7495 a := v_2
7496 if !(isPowerOfTwo32(c+1) && c >= 7) {
7497 break
7498 }
7499 v.reset(OpARMADD)
7500 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7501 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7502 v0.AddArg2(x, x)
7503 v.AddArg2(v0, a)
7504 return true
7505 }
7506
7507
7508
7509 for {
7510 if v_0.Op != OpARMMOVWconst {
7511 break
7512 }
7513 c := auxIntToInt32(v_0.AuxInt)
7514 x := v_1
7515 a := v_2
7516 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7517 break
7518 }
7519 v.reset(OpARMADD)
7520 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7521 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7522 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7523 v1.AuxInt = int32ToAuxInt(1)
7524 v1.AddArg2(x, x)
7525 v0.AddArg(v1)
7526 v.AddArg2(v0, a)
7527 return true
7528 }
7529
7530
7531
7532 for {
7533 if v_0.Op != OpARMMOVWconst {
7534 break
7535 }
7536 c := auxIntToInt32(v_0.AuxInt)
7537 x := v_1
7538 a := v_2
7539 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7540 break
7541 }
7542 v.reset(OpARMADD)
7543 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7544 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7545 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7546 v1.AuxInt = int32ToAuxInt(2)
7547 v1.AddArg2(x, x)
7548 v0.AddArg(v1)
7549 v.AddArg2(v0, a)
7550 return true
7551 }
7552
7553
7554
7555 for {
7556 if v_0.Op != OpARMMOVWconst {
7557 break
7558 }
7559 c := auxIntToInt32(v_0.AuxInt)
7560 x := v_1
7561 a := v_2
7562 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7563 break
7564 }
7565 v.reset(OpARMADD)
7566 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7567 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7568 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7569 v1.AuxInt = int32ToAuxInt(3)
7570 v1.AddArg2(x, x)
7571 v0.AddArg(v1)
7572 v.AddArg2(v0, a)
7573 return true
7574 }
7575
7576
7577
7578 for {
7579 if v_0.Op != OpARMMOVWconst {
7580 break
7581 }
7582 c := auxIntToInt32(v_0.AuxInt)
7583 x := v_1
7584 a := v_2
7585 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7586 break
7587 }
7588 v.reset(OpARMADD)
7589 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7590 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7591 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7592 v1.AuxInt = int32ToAuxInt(3)
7593 v1.AddArg2(x, x)
7594 v0.AddArg(v1)
7595 v.AddArg2(v0, a)
7596 return true
7597 }
7598
7599
7600 for {
7601 if v_0.Op != OpARMMOVWconst {
7602 break
7603 }
7604 c := auxIntToInt32(v_0.AuxInt)
7605 if v_1.Op != OpARMMOVWconst {
7606 break
7607 }
7608 d := auxIntToInt32(v_1.AuxInt)
7609 a := v_2
7610 v.reset(OpARMADDconst)
7611 v.AuxInt = int32ToAuxInt(c * d)
7612 v.AddArg(a)
7613 return true
7614 }
7615 return false
7616 }
7617 func rewriteValueARM_OpARMMULD(v *Value) bool {
7618 v_1 := v.Args[1]
7619 v_0 := v.Args[0]
7620
7621
7622
7623 for {
7624 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7625 if v_0.Op != OpARMNEGD {
7626 continue
7627 }
7628 x := v_0.Args[0]
7629 y := v_1
7630 if !(buildcfg.GOARM >= 6) {
7631 continue
7632 }
7633 v.reset(OpARMNMULD)
7634 v.AddArg2(x, y)
7635 return true
7636 }
7637 break
7638 }
7639 return false
7640 }
7641 func rewriteValueARM_OpARMMULF(v *Value) bool {
7642 v_1 := v.Args[1]
7643 v_0 := v.Args[0]
7644
7645
7646
7647 for {
7648 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7649 if v_0.Op != OpARMNEGF {
7650 continue
7651 }
7652 x := v_0.Args[0]
7653 y := v_1
7654 if !(buildcfg.GOARM >= 6) {
7655 continue
7656 }
7657 v.reset(OpARMNMULF)
7658 v.AddArg2(x, y)
7659 return true
7660 }
7661 break
7662 }
7663 return false
7664 }
7665 func rewriteValueARM_OpARMMULS(v *Value) bool {
7666 v_2 := v.Args[2]
7667 v_1 := v.Args[1]
7668 v_0 := v.Args[0]
7669 b := v.Block
7670
7671
7672
7673 for {
7674 x := v_0
7675 if v_1.Op != OpARMMOVWconst {
7676 break
7677 }
7678 c := auxIntToInt32(v_1.AuxInt)
7679 a := v_2
7680 if !(c == -1) {
7681 break
7682 }
7683 v.reset(OpARMADD)
7684 v.AddArg2(a, x)
7685 return true
7686 }
7687
7688
7689 for {
7690 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
7691 break
7692 }
7693 a := v_2
7694 v.copyOf(a)
7695 return true
7696 }
7697
7698
7699 for {
7700 x := v_0
7701 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7702 break
7703 }
7704 a := v_2
7705 v.reset(OpARMRSB)
7706 v.AddArg2(x, a)
7707 return true
7708 }
7709
7710
7711
7712 for {
7713 x := v_0
7714 if v_1.Op != OpARMMOVWconst {
7715 break
7716 }
7717 c := auxIntToInt32(v_1.AuxInt)
7718 a := v_2
7719 if !(isPowerOfTwo32(c)) {
7720 break
7721 }
7722 v.reset(OpARMRSB)
7723 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7724 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7725 v0.AddArg(x)
7726 v.AddArg2(v0, a)
7727 return true
7728 }
7729
7730
7731
7732 for {
7733 x := v_0
7734 if v_1.Op != OpARMMOVWconst {
7735 break
7736 }
7737 c := auxIntToInt32(v_1.AuxInt)
7738 a := v_2
7739 if !(isPowerOfTwo32(c-1) && c >= 3) {
7740 break
7741 }
7742 v.reset(OpARMRSB)
7743 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7744 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7745 v0.AddArg2(x, x)
7746 v.AddArg2(v0, a)
7747 return true
7748 }
7749
7750
7751
7752 for {
7753 x := v_0
7754 if v_1.Op != OpARMMOVWconst {
7755 break
7756 }
7757 c := auxIntToInt32(v_1.AuxInt)
7758 a := v_2
7759 if !(isPowerOfTwo32(c+1) && c >= 7) {
7760 break
7761 }
7762 v.reset(OpARMRSB)
7763 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7764 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7765 v0.AddArg2(x, x)
7766 v.AddArg2(v0, a)
7767 return true
7768 }
7769
7770
7771
7772 for {
7773 x := v_0
7774 if v_1.Op != OpARMMOVWconst {
7775 break
7776 }
7777 c := auxIntToInt32(v_1.AuxInt)
7778 a := v_2
7779 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7780 break
7781 }
7782 v.reset(OpARMRSB)
7783 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7784 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7785 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7786 v1.AuxInt = int32ToAuxInt(1)
7787 v1.AddArg2(x, x)
7788 v0.AddArg(v1)
7789 v.AddArg2(v0, a)
7790 return true
7791 }
7792
7793
7794
7795 for {
7796 x := v_0
7797 if v_1.Op != OpARMMOVWconst {
7798 break
7799 }
7800 c := auxIntToInt32(v_1.AuxInt)
7801 a := v_2
7802 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7803 break
7804 }
7805 v.reset(OpARMRSB)
7806 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7807 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7808 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7809 v1.AuxInt = int32ToAuxInt(2)
7810 v1.AddArg2(x, x)
7811 v0.AddArg(v1)
7812 v.AddArg2(v0, a)
7813 return true
7814 }
7815
7816
7817
7818 for {
7819 x := v_0
7820 if v_1.Op != OpARMMOVWconst {
7821 break
7822 }
7823 c := auxIntToInt32(v_1.AuxInt)
7824 a := v_2
7825 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7826 break
7827 }
7828 v.reset(OpARMRSB)
7829 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7830 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7831 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7832 v1.AuxInt = int32ToAuxInt(3)
7833 v1.AddArg2(x, x)
7834 v0.AddArg(v1)
7835 v.AddArg2(v0, a)
7836 return true
7837 }
7838
7839
7840
7841 for {
7842 x := v_0
7843 if v_1.Op != OpARMMOVWconst {
7844 break
7845 }
7846 c := auxIntToInt32(v_1.AuxInt)
7847 a := v_2
7848 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7849 break
7850 }
7851 v.reset(OpARMRSB)
7852 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7853 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7854 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7855 v1.AuxInt = int32ToAuxInt(3)
7856 v1.AddArg2(x, x)
7857 v0.AddArg(v1)
7858 v.AddArg2(v0, a)
7859 return true
7860 }
7861
7862
7863
7864 for {
7865 if v_0.Op != OpARMMOVWconst {
7866 break
7867 }
7868 c := auxIntToInt32(v_0.AuxInt)
7869 x := v_1
7870 a := v_2
7871 if !(c == -1) {
7872 break
7873 }
7874 v.reset(OpARMADD)
7875 v.AddArg2(a, x)
7876 return true
7877 }
7878
7879
7880 for {
7881 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 0 {
7882 break
7883 }
7884 a := v_2
7885 v.copyOf(a)
7886 return true
7887 }
7888
7889
7890 for {
7891 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 1 {
7892 break
7893 }
7894 x := v_1
7895 a := v_2
7896 v.reset(OpARMRSB)
7897 v.AddArg2(x, a)
7898 return true
7899 }
7900
7901
7902
7903 for {
7904 if v_0.Op != OpARMMOVWconst {
7905 break
7906 }
7907 c := auxIntToInt32(v_0.AuxInt)
7908 x := v_1
7909 a := v_2
7910 if !(isPowerOfTwo32(c)) {
7911 break
7912 }
7913 v.reset(OpARMRSB)
7914 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7915 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7916 v0.AddArg(x)
7917 v.AddArg2(v0, a)
7918 return true
7919 }
7920
7921
7922
7923 for {
7924 if v_0.Op != OpARMMOVWconst {
7925 break
7926 }
7927 c := auxIntToInt32(v_0.AuxInt)
7928 x := v_1
7929 a := v_2
7930 if !(isPowerOfTwo32(c-1) && c >= 3) {
7931 break
7932 }
7933 v.reset(OpARMRSB)
7934 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7935 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7936 v0.AddArg2(x, x)
7937 v.AddArg2(v0, a)
7938 return true
7939 }
7940
7941
7942
7943 for {
7944 if v_0.Op != OpARMMOVWconst {
7945 break
7946 }
7947 c := auxIntToInt32(v_0.AuxInt)
7948 x := v_1
7949 a := v_2
7950 if !(isPowerOfTwo32(c+1) && c >= 7) {
7951 break
7952 }
7953 v.reset(OpARMRSB)
7954 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7955 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7956 v0.AddArg2(x, x)
7957 v.AddArg2(v0, a)
7958 return true
7959 }
7960
7961
7962
7963 for {
7964 if v_0.Op != OpARMMOVWconst {
7965 break
7966 }
7967 c := auxIntToInt32(v_0.AuxInt)
7968 x := v_1
7969 a := v_2
7970 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7971 break
7972 }
7973 v.reset(OpARMRSB)
7974 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7975 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7976 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7977 v1.AuxInt = int32ToAuxInt(1)
7978 v1.AddArg2(x, x)
7979 v0.AddArg(v1)
7980 v.AddArg2(v0, a)
7981 return true
7982 }
7983
7984
7985
7986 for {
7987 if v_0.Op != OpARMMOVWconst {
7988 break
7989 }
7990 c := auxIntToInt32(v_0.AuxInt)
7991 x := v_1
7992 a := v_2
7993 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7994 break
7995 }
7996 v.reset(OpARMRSB)
7997 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7998 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7999 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
8000 v1.AuxInt = int32ToAuxInt(2)
8001 v1.AddArg2(x, x)
8002 v0.AddArg(v1)
8003 v.AddArg2(v0, a)
8004 return true
8005 }
8006
8007
8008
8009 for {
8010 if v_0.Op != OpARMMOVWconst {
8011 break
8012 }
8013 c := auxIntToInt32(v_0.AuxInt)
8014 x := v_1
8015 a := v_2
8016 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
8017 break
8018 }
8019 v.reset(OpARMRSB)
8020 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
8021 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
8022 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
8023 v1.AuxInt = int32ToAuxInt(3)
8024 v1.AddArg2(x, x)
8025 v0.AddArg(v1)
8026 v.AddArg2(v0, a)
8027 return true
8028 }
8029
8030
8031
8032 for {
8033 if v_0.Op != OpARMMOVWconst {
8034 break
8035 }
8036 c := auxIntToInt32(v_0.AuxInt)
8037 x := v_1
8038 a := v_2
8039 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
8040 break
8041 }
8042 v.reset(OpARMRSB)
8043 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
8044 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
8045 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
8046 v1.AuxInt = int32ToAuxInt(3)
8047 v1.AddArg2(x, x)
8048 v0.AddArg(v1)
8049 v.AddArg2(v0, a)
8050 return true
8051 }
8052
8053
8054 for {
8055 if v_0.Op != OpARMMOVWconst {
8056 break
8057 }
8058 c := auxIntToInt32(v_0.AuxInt)
8059 if v_1.Op != OpARMMOVWconst {
8060 break
8061 }
8062 d := auxIntToInt32(v_1.AuxInt)
8063 a := v_2
8064 v.reset(OpARMSUBconst)
8065 v.AuxInt = int32ToAuxInt(c * d)
8066 v.AddArg(a)
8067 return true
8068 }
8069 return false
8070 }
8071 func rewriteValueARM_OpARMMVN(v *Value) bool {
8072 v_0 := v.Args[0]
8073
8074
8075 for {
8076 if v_0.Op != OpARMMOVWconst {
8077 break
8078 }
8079 c := auxIntToInt32(v_0.AuxInt)
8080 v.reset(OpARMMOVWconst)
8081 v.AuxInt = int32ToAuxInt(^c)
8082 return true
8083 }
8084
8085
8086 for {
8087 if v_0.Op != OpARMSLLconst {
8088 break
8089 }
8090 c := auxIntToInt32(v_0.AuxInt)
8091 x := v_0.Args[0]
8092 v.reset(OpARMMVNshiftLL)
8093 v.AuxInt = int32ToAuxInt(c)
8094 v.AddArg(x)
8095 return true
8096 }
8097
8098
8099 for {
8100 if v_0.Op != OpARMSRLconst {
8101 break
8102 }
8103 c := auxIntToInt32(v_0.AuxInt)
8104 x := v_0.Args[0]
8105 v.reset(OpARMMVNshiftRL)
8106 v.AuxInt = int32ToAuxInt(c)
8107 v.AddArg(x)
8108 return true
8109 }
8110
8111
8112 for {
8113 if v_0.Op != OpARMSRAconst {
8114 break
8115 }
8116 c := auxIntToInt32(v_0.AuxInt)
8117 x := v_0.Args[0]
8118 v.reset(OpARMMVNshiftRA)
8119 v.AuxInt = int32ToAuxInt(c)
8120 v.AddArg(x)
8121 return true
8122 }
8123
8124
8125 for {
8126 if v_0.Op != OpARMSLL {
8127 break
8128 }
8129 y := v_0.Args[1]
8130 x := v_0.Args[0]
8131 v.reset(OpARMMVNshiftLLreg)
8132 v.AddArg2(x, y)
8133 return true
8134 }
8135
8136
8137 for {
8138 if v_0.Op != OpARMSRL {
8139 break
8140 }
8141 y := v_0.Args[1]
8142 x := v_0.Args[0]
8143 v.reset(OpARMMVNshiftRLreg)
8144 v.AddArg2(x, y)
8145 return true
8146 }
8147
8148
8149 for {
8150 if v_0.Op != OpARMSRA {
8151 break
8152 }
8153 y := v_0.Args[1]
8154 x := v_0.Args[0]
8155 v.reset(OpARMMVNshiftRAreg)
8156 v.AddArg2(x, y)
8157 return true
8158 }
8159 return false
8160 }
8161 func rewriteValueARM_OpARMMVNshiftLL(v *Value) bool {
8162 v_0 := v.Args[0]
8163
8164
8165 for {
8166 d := auxIntToInt32(v.AuxInt)
8167 if v_0.Op != OpARMMOVWconst {
8168 break
8169 }
8170 c := auxIntToInt32(v_0.AuxInt)
8171 v.reset(OpARMMOVWconst)
8172 v.AuxInt = int32ToAuxInt(^(c << uint64(d)))
8173 return true
8174 }
8175 return false
8176 }
8177 func rewriteValueARM_OpARMMVNshiftLLreg(v *Value) bool {
8178 v_1 := v.Args[1]
8179 v_0 := v.Args[0]
8180
8181
8182
8183 for {
8184 x := v_0
8185 if v_1.Op != OpARMMOVWconst {
8186 break
8187 }
8188 c := auxIntToInt32(v_1.AuxInt)
8189 if !(0 <= c && c < 32) {
8190 break
8191 }
8192 v.reset(OpARMMVNshiftLL)
8193 v.AuxInt = int32ToAuxInt(c)
8194 v.AddArg(x)
8195 return true
8196 }
8197 return false
8198 }
8199 func rewriteValueARM_OpARMMVNshiftRA(v *Value) bool {
8200 v_0 := v.Args[0]
8201
8202
8203 for {
8204 d := auxIntToInt32(v.AuxInt)
8205 if v_0.Op != OpARMMOVWconst {
8206 break
8207 }
8208 c := auxIntToInt32(v_0.AuxInt)
8209 v.reset(OpARMMOVWconst)
8210 v.AuxInt = int32ToAuxInt(int32(c) >> uint64(d))
8211 return true
8212 }
8213 return false
8214 }
8215 func rewriteValueARM_OpARMMVNshiftRAreg(v *Value) bool {
8216 v_1 := v.Args[1]
8217 v_0 := v.Args[0]
8218
8219
8220
8221 for {
8222 x := v_0
8223 if v_1.Op != OpARMMOVWconst {
8224 break
8225 }
8226 c := auxIntToInt32(v_1.AuxInt)
8227 if !(0 <= c && c < 32) {
8228 break
8229 }
8230 v.reset(OpARMMVNshiftRA)
8231 v.AuxInt = int32ToAuxInt(c)
8232 v.AddArg(x)
8233 return true
8234 }
8235 return false
8236 }
8237 func rewriteValueARM_OpARMMVNshiftRL(v *Value) bool {
8238 v_0 := v.Args[0]
8239
8240
8241 for {
8242 d := auxIntToInt32(v.AuxInt)
8243 if v_0.Op != OpARMMOVWconst {
8244 break
8245 }
8246 c := auxIntToInt32(v_0.AuxInt)
8247 v.reset(OpARMMOVWconst)
8248 v.AuxInt = int32ToAuxInt(^int32(uint32(c) >> uint64(d)))
8249 return true
8250 }
8251 return false
8252 }
8253 func rewriteValueARM_OpARMMVNshiftRLreg(v *Value) bool {
8254 v_1 := v.Args[1]
8255 v_0 := v.Args[0]
8256
8257
8258
8259 for {
8260 x := v_0
8261 if v_1.Op != OpARMMOVWconst {
8262 break
8263 }
8264 c := auxIntToInt32(v_1.AuxInt)
8265 if !(0 <= c && c < 32) {
8266 break
8267 }
8268 v.reset(OpARMMVNshiftRL)
8269 v.AuxInt = int32ToAuxInt(c)
8270 v.AddArg(x)
8271 return true
8272 }
8273 return false
8274 }
8275 func rewriteValueARM_OpARMNEGD(v *Value) bool {
8276 v_0 := v.Args[0]
8277
8278
8279
8280 for {
8281 if v_0.Op != OpARMMULD {
8282 break
8283 }
8284 y := v_0.Args[1]
8285 x := v_0.Args[0]
8286 if !(buildcfg.GOARM >= 6) {
8287 break
8288 }
8289 v.reset(OpARMNMULD)
8290 v.AddArg2(x, y)
8291 return true
8292 }
8293 return false
8294 }
8295 func rewriteValueARM_OpARMNEGF(v *Value) bool {
8296 v_0 := v.Args[0]
8297
8298
8299
8300 for {
8301 if v_0.Op != OpARMMULF {
8302 break
8303 }
8304 y := v_0.Args[1]
8305 x := v_0.Args[0]
8306 if !(buildcfg.GOARM >= 6) {
8307 break
8308 }
8309 v.reset(OpARMNMULF)
8310 v.AddArg2(x, y)
8311 return true
8312 }
8313 return false
8314 }
8315 func rewriteValueARM_OpARMNMULD(v *Value) bool {
8316 v_1 := v.Args[1]
8317 v_0 := v.Args[0]
8318
8319
8320 for {
8321 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8322 if v_0.Op != OpARMNEGD {
8323 continue
8324 }
8325 x := v_0.Args[0]
8326 y := v_1
8327 v.reset(OpARMMULD)
8328 v.AddArg2(x, y)
8329 return true
8330 }
8331 break
8332 }
8333 return false
8334 }
8335 func rewriteValueARM_OpARMNMULF(v *Value) bool {
8336 v_1 := v.Args[1]
8337 v_0 := v.Args[0]
8338
8339
8340 for {
8341 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8342 if v_0.Op != OpARMNEGF {
8343 continue
8344 }
8345 x := v_0.Args[0]
8346 y := v_1
8347 v.reset(OpARMMULF)
8348 v.AddArg2(x, y)
8349 return true
8350 }
8351 break
8352 }
8353 return false
8354 }
8355 func rewriteValueARM_OpARMNotEqual(v *Value) bool {
8356 v_0 := v.Args[0]
8357
8358
8359 for {
8360 if v_0.Op != OpARMFlagConstant {
8361 break
8362 }
8363 fc := auxIntToFlagConstant(v_0.AuxInt)
8364 v.reset(OpARMMOVWconst)
8365 v.AuxInt = int32ToAuxInt(b2i32(fc.ne()))
8366 return true
8367 }
8368
8369
8370 for {
8371 if v_0.Op != OpARMInvertFlags {
8372 break
8373 }
8374 x := v_0.Args[0]
8375 v.reset(OpARMNotEqual)
8376 v.AddArg(x)
8377 return true
8378 }
8379 return false
8380 }
8381 func rewriteValueARM_OpARMOR(v *Value) bool {
8382 v_1 := v.Args[1]
8383 v_0 := v.Args[0]
8384
8385
8386 for {
8387 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8388 x := v_0
8389 if v_1.Op != OpARMMOVWconst {
8390 continue
8391 }
8392 c := auxIntToInt32(v_1.AuxInt)
8393 v.reset(OpARMORconst)
8394 v.AuxInt = int32ToAuxInt(c)
8395 v.AddArg(x)
8396 return true
8397 }
8398 break
8399 }
8400
8401
8402 for {
8403 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8404 x := v_0
8405 if v_1.Op != OpARMSLLconst {
8406 continue
8407 }
8408 c := auxIntToInt32(v_1.AuxInt)
8409 y := v_1.Args[0]
8410 v.reset(OpARMORshiftLL)
8411 v.AuxInt = int32ToAuxInt(c)
8412 v.AddArg2(x, y)
8413 return true
8414 }
8415 break
8416 }
8417
8418
8419 for {
8420 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8421 x := v_0
8422 if v_1.Op != OpARMSRLconst {
8423 continue
8424 }
8425 c := auxIntToInt32(v_1.AuxInt)
8426 y := v_1.Args[0]
8427 v.reset(OpARMORshiftRL)
8428 v.AuxInt = int32ToAuxInt(c)
8429 v.AddArg2(x, y)
8430 return true
8431 }
8432 break
8433 }
8434
8435
8436 for {
8437 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8438 x := v_0
8439 if v_1.Op != OpARMSRAconst {
8440 continue
8441 }
8442 c := auxIntToInt32(v_1.AuxInt)
8443 y := v_1.Args[0]
8444 v.reset(OpARMORshiftRA)
8445 v.AuxInt = int32ToAuxInt(c)
8446 v.AddArg2(x, y)
8447 return true
8448 }
8449 break
8450 }
8451
8452
8453 for {
8454 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8455 x := v_0
8456 if v_1.Op != OpARMSLL {
8457 continue
8458 }
8459 z := v_1.Args[1]
8460 y := v_1.Args[0]
8461 v.reset(OpARMORshiftLLreg)
8462 v.AddArg3(x, y, z)
8463 return true
8464 }
8465 break
8466 }
8467
8468
8469 for {
8470 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8471 x := v_0
8472 if v_1.Op != OpARMSRL {
8473 continue
8474 }
8475 z := v_1.Args[1]
8476 y := v_1.Args[0]
8477 v.reset(OpARMORshiftRLreg)
8478 v.AddArg3(x, y, z)
8479 return true
8480 }
8481 break
8482 }
8483
8484
8485 for {
8486 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8487 x := v_0
8488 if v_1.Op != OpARMSRA {
8489 continue
8490 }
8491 z := v_1.Args[1]
8492 y := v_1.Args[0]
8493 v.reset(OpARMORshiftRAreg)
8494 v.AddArg3(x, y, z)
8495 return true
8496 }
8497 break
8498 }
8499
8500
8501 for {
8502 x := v_0
8503 if x != v_1 {
8504 break
8505 }
8506 v.copyOf(x)
8507 return true
8508 }
8509 return false
8510 }
8511 func rewriteValueARM_OpARMORconst(v *Value) bool {
8512 v_0 := v.Args[0]
8513
8514
8515 for {
8516 if auxIntToInt32(v.AuxInt) != 0 {
8517 break
8518 }
8519 x := v_0
8520 v.copyOf(x)
8521 return true
8522 }
8523
8524
8525
8526 for {
8527 c := auxIntToInt32(v.AuxInt)
8528 if !(int32(c) == -1) {
8529 break
8530 }
8531 v.reset(OpARMMOVWconst)
8532 v.AuxInt = int32ToAuxInt(-1)
8533 return true
8534 }
8535
8536
8537 for {
8538 c := auxIntToInt32(v.AuxInt)
8539 if v_0.Op != OpARMMOVWconst {
8540 break
8541 }
8542 d := auxIntToInt32(v_0.AuxInt)
8543 v.reset(OpARMMOVWconst)
8544 v.AuxInt = int32ToAuxInt(c | d)
8545 return true
8546 }
8547
8548
8549 for {
8550 c := auxIntToInt32(v.AuxInt)
8551 if v_0.Op != OpARMORconst {
8552 break
8553 }
8554 d := auxIntToInt32(v_0.AuxInt)
8555 x := v_0.Args[0]
8556 v.reset(OpARMORconst)
8557 v.AuxInt = int32ToAuxInt(c | d)
8558 v.AddArg(x)
8559 return true
8560 }
8561 return false
8562 }
8563 func rewriteValueARM_OpARMORshiftLL(v *Value) bool {
8564 v_1 := v.Args[1]
8565 v_0 := v.Args[0]
8566 b := v.Block
8567 typ := &b.Func.Config.Types
8568
8569
8570 for {
8571 d := auxIntToInt32(v.AuxInt)
8572 if v_0.Op != OpARMMOVWconst {
8573 break
8574 }
8575 c := auxIntToInt32(v_0.AuxInt)
8576 x := v_1
8577 v.reset(OpARMORconst)
8578 v.AuxInt = int32ToAuxInt(c)
8579 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
8580 v0.AuxInt = int32ToAuxInt(d)
8581 v0.AddArg(x)
8582 v.AddArg(v0)
8583 return true
8584 }
8585
8586
8587 for {
8588 d := auxIntToInt32(v.AuxInt)
8589 x := v_0
8590 if v_1.Op != OpARMMOVWconst {
8591 break
8592 }
8593 c := auxIntToInt32(v_1.AuxInt)
8594 v.reset(OpARMORconst)
8595 v.AuxInt = int32ToAuxInt(c << uint64(d))
8596 v.AddArg(x)
8597 return true
8598 }
8599
8600
8601 for {
8602 c := auxIntToInt32(v.AuxInt)
8603 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
8604 break
8605 }
8606 x := v_0.Args[0]
8607 if x != v_1 {
8608 break
8609 }
8610 v.reset(OpARMSRRconst)
8611 v.AuxInt = int32ToAuxInt(32 - c)
8612 v.AddArg(x)
8613 return true
8614 }
8615
8616
8617 for {
8618 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMBFXU || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != int32(armBFAuxInt(8, 8)) {
8619 break
8620 }
8621 x := v_0.Args[0]
8622 if x != v_1 {
8623 break
8624 }
8625 v.reset(OpARMREV16)
8626 v.AddArg(x)
8627 return true
8628 }
8629
8630
8631
8632 for {
8633 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
8634 break
8635 }
8636 v_0_0 := v_0.Args[0]
8637 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
8638 break
8639 }
8640 x := v_0_0.Args[0]
8641 if x != v_1 || !(buildcfg.GOARM >= 6) {
8642 break
8643 }
8644 v.reset(OpARMREV16)
8645 v.AddArg(x)
8646 return true
8647 }
8648
8649
8650 for {
8651 c := auxIntToInt32(v.AuxInt)
8652 y := v_0
8653 if y.Op != OpARMSLLconst || auxIntToInt32(y.AuxInt) != c {
8654 break
8655 }
8656 x := y.Args[0]
8657 if x != v_1 {
8658 break
8659 }
8660 v.copyOf(y)
8661 return true
8662 }
8663 return false
8664 }
8665 func rewriteValueARM_OpARMORshiftLLreg(v *Value) bool {
8666 v_2 := v.Args[2]
8667 v_1 := v.Args[1]
8668 v_0 := v.Args[0]
8669 b := v.Block
8670
8671
8672 for {
8673 if v_0.Op != OpARMMOVWconst {
8674 break
8675 }
8676 c := auxIntToInt32(v_0.AuxInt)
8677 x := v_1
8678 y := v_2
8679 v.reset(OpARMORconst)
8680 v.AuxInt = int32ToAuxInt(c)
8681 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
8682 v0.AddArg2(x, y)
8683 v.AddArg(v0)
8684 return true
8685 }
8686
8687
8688
8689 for {
8690 x := v_0
8691 y := v_1
8692 if v_2.Op != OpARMMOVWconst {
8693 break
8694 }
8695 c := auxIntToInt32(v_2.AuxInt)
8696 if !(0 <= c && c < 32) {
8697 break
8698 }
8699 v.reset(OpARMORshiftLL)
8700 v.AuxInt = int32ToAuxInt(c)
8701 v.AddArg2(x, y)
8702 return true
8703 }
8704 return false
8705 }
8706 func rewriteValueARM_OpARMORshiftRA(v *Value) bool {
8707 v_1 := v.Args[1]
8708 v_0 := v.Args[0]
8709 b := v.Block
8710
8711
8712 for {
8713 d := auxIntToInt32(v.AuxInt)
8714 if v_0.Op != OpARMMOVWconst {
8715 break
8716 }
8717 c := auxIntToInt32(v_0.AuxInt)
8718 x := v_1
8719 v.reset(OpARMORconst)
8720 v.AuxInt = int32ToAuxInt(c)
8721 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
8722 v0.AuxInt = int32ToAuxInt(d)
8723 v0.AddArg(x)
8724 v.AddArg(v0)
8725 return true
8726 }
8727
8728
8729 for {
8730 d := auxIntToInt32(v.AuxInt)
8731 x := v_0
8732 if v_1.Op != OpARMMOVWconst {
8733 break
8734 }
8735 c := auxIntToInt32(v_1.AuxInt)
8736 v.reset(OpARMORconst)
8737 v.AuxInt = int32ToAuxInt(c >> uint64(d))
8738 v.AddArg(x)
8739 return true
8740 }
8741
8742
8743 for {
8744 c := auxIntToInt32(v.AuxInt)
8745 y := v_0
8746 if y.Op != OpARMSRAconst || auxIntToInt32(y.AuxInt) != c {
8747 break
8748 }
8749 x := y.Args[0]
8750 if x != v_1 {
8751 break
8752 }
8753 v.copyOf(y)
8754 return true
8755 }
8756 return false
8757 }
8758 func rewriteValueARM_OpARMORshiftRAreg(v *Value) bool {
8759 v_2 := v.Args[2]
8760 v_1 := v.Args[1]
8761 v_0 := v.Args[0]
8762 b := v.Block
8763
8764
8765 for {
8766 if v_0.Op != OpARMMOVWconst {
8767 break
8768 }
8769 c := auxIntToInt32(v_0.AuxInt)
8770 x := v_1
8771 y := v_2
8772 v.reset(OpARMORconst)
8773 v.AuxInt = int32ToAuxInt(c)
8774 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
8775 v0.AddArg2(x, y)
8776 v.AddArg(v0)
8777 return true
8778 }
8779
8780
8781
8782 for {
8783 x := v_0
8784 y := v_1
8785 if v_2.Op != OpARMMOVWconst {
8786 break
8787 }
8788 c := auxIntToInt32(v_2.AuxInt)
8789 if !(0 <= c && c < 32) {
8790 break
8791 }
8792 v.reset(OpARMORshiftRA)
8793 v.AuxInt = int32ToAuxInt(c)
8794 v.AddArg2(x, y)
8795 return true
8796 }
8797 return false
8798 }
8799 func rewriteValueARM_OpARMORshiftRL(v *Value) bool {
8800 v_1 := v.Args[1]
8801 v_0 := v.Args[0]
8802 b := v.Block
8803
8804
8805 for {
8806 d := auxIntToInt32(v.AuxInt)
8807 if v_0.Op != OpARMMOVWconst {
8808 break
8809 }
8810 c := auxIntToInt32(v_0.AuxInt)
8811 x := v_1
8812 v.reset(OpARMORconst)
8813 v.AuxInt = int32ToAuxInt(c)
8814 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
8815 v0.AuxInt = int32ToAuxInt(d)
8816 v0.AddArg(x)
8817 v.AddArg(v0)
8818 return true
8819 }
8820
8821
8822 for {
8823 d := auxIntToInt32(v.AuxInt)
8824 x := v_0
8825 if v_1.Op != OpARMMOVWconst {
8826 break
8827 }
8828 c := auxIntToInt32(v_1.AuxInt)
8829 v.reset(OpARMORconst)
8830 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
8831 v.AddArg(x)
8832 return true
8833 }
8834
8835
8836 for {
8837 c := auxIntToInt32(v.AuxInt)
8838 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
8839 break
8840 }
8841 x := v_0.Args[0]
8842 if x != v_1 {
8843 break
8844 }
8845 v.reset(OpARMSRRconst)
8846 v.AuxInt = int32ToAuxInt(c)
8847 v.AddArg(x)
8848 return true
8849 }
8850
8851
8852 for {
8853 c := auxIntToInt32(v.AuxInt)
8854 y := v_0
8855 if y.Op != OpARMSRLconst || auxIntToInt32(y.AuxInt) != c {
8856 break
8857 }
8858 x := y.Args[0]
8859 if x != v_1 {
8860 break
8861 }
8862 v.copyOf(y)
8863 return true
8864 }
8865 return false
8866 }
8867 func rewriteValueARM_OpARMORshiftRLreg(v *Value) bool {
8868 v_2 := v.Args[2]
8869 v_1 := v.Args[1]
8870 v_0 := v.Args[0]
8871 b := v.Block
8872
8873
8874 for {
8875 if v_0.Op != OpARMMOVWconst {
8876 break
8877 }
8878 c := auxIntToInt32(v_0.AuxInt)
8879 x := v_1
8880 y := v_2
8881 v.reset(OpARMORconst)
8882 v.AuxInt = int32ToAuxInt(c)
8883 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
8884 v0.AddArg2(x, y)
8885 v.AddArg(v0)
8886 return true
8887 }
8888
8889
8890
8891 for {
8892 x := v_0
8893 y := v_1
8894 if v_2.Op != OpARMMOVWconst {
8895 break
8896 }
8897 c := auxIntToInt32(v_2.AuxInt)
8898 if !(0 <= c && c < 32) {
8899 break
8900 }
8901 v.reset(OpARMORshiftRL)
8902 v.AuxInt = int32ToAuxInt(c)
8903 v.AddArg2(x, y)
8904 return true
8905 }
8906 return false
8907 }
8908 func rewriteValueARM_OpARMRSB(v *Value) bool {
8909 v_1 := v.Args[1]
8910 v_0 := v.Args[0]
8911
8912
8913 for {
8914 if v_0.Op != OpARMMOVWconst {
8915 break
8916 }
8917 c := auxIntToInt32(v_0.AuxInt)
8918 x := v_1
8919 v.reset(OpARMSUBconst)
8920 v.AuxInt = int32ToAuxInt(c)
8921 v.AddArg(x)
8922 return true
8923 }
8924
8925
8926 for {
8927 x := v_0
8928 if v_1.Op != OpARMMOVWconst {
8929 break
8930 }
8931 c := auxIntToInt32(v_1.AuxInt)
8932 v.reset(OpARMRSBconst)
8933 v.AuxInt = int32ToAuxInt(c)
8934 v.AddArg(x)
8935 return true
8936 }
8937
8938
8939 for {
8940 x := v_0
8941 if v_1.Op != OpARMSLLconst {
8942 break
8943 }
8944 c := auxIntToInt32(v_1.AuxInt)
8945 y := v_1.Args[0]
8946 v.reset(OpARMRSBshiftLL)
8947 v.AuxInt = int32ToAuxInt(c)
8948 v.AddArg2(x, y)
8949 return true
8950 }
8951
8952
8953 for {
8954 if v_0.Op != OpARMSLLconst {
8955 break
8956 }
8957 c := auxIntToInt32(v_0.AuxInt)
8958 y := v_0.Args[0]
8959 x := v_1
8960 v.reset(OpARMSUBshiftLL)
8961 v.AuxInt = int32ToAuxInt(c)
8962 v.AddArg2(x, y)
8963 return true
8964 }
8965
8966
8967 for {
8968 x := v_0
8969 if v_1.Op != OpARMSRLconst {
8970 break
8971 }
8972 c := auxIntToInt32(v_1.AuxInt)
8973 y := v_1.Args[0]
8974 v.reset(OpARMRSBshiftRL)
8975 v.AuxInt = int32ToAuxInt(c)
8976 v.AddArg2(x, y)
8977 return true
8978 }
8979
8980
8981 for {
8982 if v_0.Op != OpARMSRLconst {
8983 break
8984 }
8985 c := auxIntToInt32(v_0.AuxInt)
8986 y := v_0.Args[0]
8987 x := v_1
8988 v.reset(OpARMSUBshiftRL)
8989 v.AuxInt = int32ToAuxInt(c)
8990 v.AddArg2(x, y)
8991 return true
8992 }
8993
8994
8995 for {
8996 x := v_0
8997 if v_1.Op != OpARMSRAconst {
8998 break
8999 }
9000 c := auxIntToInt32(v_1.AuxInt)
9001 y := v_1.Args[0]
9002 v.reset(OpARMRSBshiftRA)
9003 v.AuxInt = int32ToAuxInt(c)
9004 v.AddArg2(x, y)
9005 return true
9006 }
9007
9008
9009 for {
9010 if v_0.Op != OpARMSRAconst {
9011 break
9012 }
9013 c := auxIntToInt32(v_0.AuxInt)
9014 y := v_0.Args[0]
9015 x := v_1
9016 v.reset(OpARMSUBshiftRA)
9017 v.AuxInt = int32ToAuxInt(c)
9018 v.AddArg2(x, y)
9019 return true
9020 }
9021
9022
9023 for {
9024 x := v_0
9025 if v_1.Op != OpARMSLL {
9026 break
9027 }
9028 z := v_1.Args[1]
9029 y := v_1.Args[0]
9030 v.reset(OpARMRSBshiftLLreg)
9031 v.AddArg3(x, y, z)
9032 return true
9033 }
9034
9035
9036 for {
9037 if v_0.Op != OpARMSLL {
9038 break
9039 }
9040 z := v_0.Args[1]
9041 y := v_0.Args[0]
9042 x := v_1
9043 v.reset(OpARMSUBshiftLLreg)
9044 v.AddArg3(x, y, z)
9045 return true
9046 }
9047
9048
9049 for {
9050 x := v_0
9051 if v_1.Op != OpARMSRL {
9052 break
9053 }
9054 z := v_1.Args[1]
9055 y := v_1.Args[0]
9056 v.reset(OpARMRSBshiftRLreg)
9057 v.AddArg3(x, y, z)
9058 return true
9059 }
9060
9061
9062 for {
9063 if v_0.Op != OpARMSRL {
9064 break
9065 }
9066 z := v_0.Args[1]
9067 y := v_0.Args[0]
9068 x := v_1
9069 v.reset(OpARMSUBshiftRLreg)
9070 v.AddArg3(x, y, z)
9071 return true
9072 }
9073
9074
9075 for {
9076 x := v_0
9077 if v_1.Op != OpARMSRA {
9078 break
9079 }
9080 z := v_1.Args[1]
9081 y := v_1.Args[0]
9082 v.reset(OpARMRSBshiftRAreg)
9083 v.AddArg3(x, y, z)
9084 return true
9085 }
9086
9087
9088 for {
9089 if v_0.Op != OpARMSRA {
9090 break
9091 }
9092 z := v_0.Args[1]
9093 y := v_0.Args[0]
9094 x := v_1
9095 v.reset(OpARMSUBshiftRAreg)
9096 v.AddArg3(x, y, z)
9097 return true
9098 }
9099
9100
9101 for {
9102 x := v_0
9103 if x != v_1 {
9104 break
9105 }
9106 v.reset(OpARMMOVWconst)
9107 v.AuxInt = int32ToAuxInt(0)
9108 return true
9109 }
9110
9111
9112
9113 for {
9114 if v_0.Op != OpARMMUL {
9115 break
9116 }
9117 y := v_0.Args[1]
9118 x := v_0.Args[0]
9119 a := v_1
9120 if !(buildcfg.GOARM == 7) {
9121 break
9122 }
9123 v.reset(OpARMMULS)
9124 v.AddArg3(x, y, a)
9125 return true
9126 }
9127 return false
9128 }
9129 func rewriteValueARM_OpARMRSBSshiftLL(v *Value) bool {
9130 v_1 := v.Args[1]
9131 v_0 := v.Args[0]
9132 b := v.Block
9133
9134
9135 for {
9136 d := auxIntToInt32(v.AuxInt)
9137 if v_0.Op != OpARMMOVWconst {
9138 break
9139 }
9140 c := auxIntToInt32(v_0.AuxInt)
9141 x := v_1
9142 v.reset(OpARMSUBSconst)
9143 v.AuxInt = int32ToAuxInt(c)
9144 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9145 v0.AuxInt = int32ToAuxInt(d)
9146 v0.AddArg(x)
9147 v.AddArg(v0)
9148 return true
9149 }
9150
9151
9152 for {
9153 d := auxIntToInt32(v.AuxInt)
9154 x := v_0
9155 if v_1.Op != OpARMMOVWconst {
9156 break
9157 }
9158 c := auxIntToInt32(v_1.AuxInt)
9159 v.reset(OpARMRSBSconst)
9160 v.AuxInt = int32ToAuxInt(c << uint64(d))
9161 v.AddArg(x)
9162 return true
9163 }
9164 return false
9165 }
9166 func rewriteValueARM_OpARMRSBSshiftLLreg(v *Value) bool {
9167 v_2 := v.Args[2]
9168 v_1 := v.Args[1]
9169 v_0 := v.Args[0]
9170 b := v.Block
9171
9172
9173 for {
9174 if v_0.Op != OpARMMOVWconst {
9175 break
9176 }
9177 c := auxIntToInt32(v_0.AuxInt)
9178 x := v_1
9179 y := v_2
9180 v.reset(OpARMSUBSconst)
9181 v.AuxInt = int32ToAuxInt(c)
9182 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9183 v0.AddArg2(x, y)
9184 v.AddArg(v0)
9185 return true
9186 }
9187
9188
9189
9190 for {
9191 x := v_0
9192 y := v_1
9193 if v_2.Op != OpARMMOVWconst {
9194 break
9195 }
9196 c := auxIntToInt32(v_2.AuxInt)
9197 if !(0 <= c && c < 32) {
9198 break
9199 }
9200 v.reset(OpARMRSBSshiftLL)
9201 v.AuxInt = int32ToAuxInt(c)
9202 v.AddArg2(x, y)
9203 return true
9204 }
9205 return false
9206 }
9207 func rewriteValueARM_OpARMRSBSshiftRA(v *Value) bool {
9208 v_1 := v.Args[1]
9209 v_0 := v.Args[0]
9210 b := v.Block
9211
9212
9213 for {
9214 d := auxIntToInt32(v.AuxInt)
9215 if v_0.Op != OpARMMOVWconst {
9216 break
9217 }
9218 c := auxIntToInt32(v_0.AuxInt)
9219 x := v_1
9220 v.reset(OpARMSUBSconst)
9221 v.AuxInt = int32ToAuxInt(c)
9222 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9223 v0.AuxInt = int32ToAuxInt(d)
9224 v0.AddArg(x)
9225 v.AddArg(v0)
9226 return true
9227 }
9228
9229
9230 for {
9231 d := auxIntToInt32(v.AuxInt)
9232 x := v_0
9233 if v_1.Op != OpARMMOVWconst {
9234 break
9235 }
9236 c := auxIntToInt32(v_1.AuxInt)
9237 v.reset(OpARMRSBSconst)
9238 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9239 v.AddArg(x)
9240 return true
9241 }
9242 return false
9243 }
9244 func rewriteValueARM_OpARMRSBSshiftRAreg(v *Value) bool {
9245 v_2 := v.Args[2]
9246 v_1 := v.Args[1]
9247 v_0 := v.Args[0]
9248 b := v.Block
9249
9250
9251 for {
9252 if v_0.Op != OpARMMOVWconst {
9253 break
9254 }
9255 c := auxIntToInt32(v_0.AuxInt)
9256 x := v_1
9257 y := v_2
9258 v.reset(OpARMSUBSconst)
9259 v.AuxInt = int32ToAuxInt(c)
9260 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9261 v0.AddArg2(x, y)
9262 v.AddArg(v0)
9263 return true
9264 }
9265
9266
9267
9268 for {
9269 x := v_0
9270 y := v_1
9271 if v_2.Op != OpARMMOVWconst {
9272 break
9273 }
9274 c := auxIntToInt32(v_2.AuxInt)
9275 if !(0 <= c && c < 32) {
9276 break
9277 }
9278 v.reset(OpARMRSBSshiftRA)
9279 v.AuxInt = int32ToAuxInt(c)
9280 v.AddArg2(x, y)
9281 return true
9282 }
9283 return false
9284 }
9285 func rewriteValueARM_OpARMRSBSshiftRL(v *Value) bool {
9286 v_1 := v.Args[1]
9287 v_0 := v.Args[0]
9288 b := v.Block
9289
9290
9291 for {
9292 d := auxIntToInt32(v.AuxInt)
9293 if v_0.Op != OpARMMOVWconst {
9294 break
9295 }
9296 c := auxIntToInt32(v_0.AuxInt)
9297 x := v_1
9298 v.reset(OpARMSUBSconst)
9299 v.AuxInt = int32ToAuxInt(c)
9300 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9301 v0.AuxInt = int32ToAuxInt(d)
9302 v0.AddArg(x)
9303 v.AddArg(v0)
9304 return true
9305 }
9306
9307
9308 for {
9309 d := auxIntToInt32(v.AuxInt)
9310 x := v_0
9311 if v_1.Op != OpARMMOVWconst {
9312 break
9313 }
9314 c := auxIntToInt32(v_1.AuxInt)
9315 v.reset(OpARMRSBSconst)
9316 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9317 v.AddArg(x)
9318 return true
9319 }
9320 return false
9321 }
9322 func rewriteValueARM_OpARMRSBSshiftRLreg(v *Value) bool {
9323 v_2 := v.Args[2]
9324 v_1 := v.Args[1]
9325 v_0 := v.Args[0]
9326 b := v.Block
9327
9328
9329 for {
9330 if v_0.Op != OpARMMOVWconst {
9331 break
9332 }
9333 c := auxIntToInt32(v_0.AuxInt)
9334 x := v_1
9335 y := v_2
9336 v.reset(OpARMSUBSconst)
9337 v.AuxInt = int32ToAuxInt(c)
9338 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9339 v0.AddArg2(x, y)
9340 v.AddArg(v0)
9341 return true
9342 }
9343
9344
9345
9346 for {
9347 x := v_0
9348 y := v_1
9349 if v_2.Op != OpARMMOVWconst {
9350 break
9351 }
9352 c := auxIntToInt32(v_2.AuxInt)
9353 if !(0 <= c && c < 32) {
9354 break
9355 }
9356 v.reset(OpARMRSBSshiftRL)
9357 v.AuxInt = int32ToAuxInt(c)
9358 v.AddArg2(x, y)
9359 return true
9360 }
9361 return false
9362 }
9363 func rewriteValueARM_OpARMRSBconst(v *Value) bool {
9364 v_0 := v.Args[0]
9365
9366
9367 for {
9368 c := auxIntToInt32(v.AuxInt)
9369 if v_0.Op != OpARMMOVWconst {
9370 break
9371 }
9372 d := auxIntToInt32(v_0.AuxInt)
9373 v.reset(OpARMMOVWconst)
9374 v.AuxInt = int32ToAuxInt(c - d)
9375 return true
9376 }
9377
9378
9379 for {
9380 c := auxIntToInt32(v.AuxInt)
9381 if v_0.Op != OpARMRSBconst {
9382 break
9383 }
9384 d := auxIntToInt32(v_0.AuxInt)
9385 x := v_0.Args[0]
9386 v.reset(OpARMADDconst)
9387 v.AuxInt = int32ToAuxInt(c - d)
9388 v.AddArg(x)
9389 return true
9390 }
9391
9392
9393 for {
9394 c := auxIntToInt32(v.AuxInt)
9395 if v_0.Op != OpARMADDconst {
9396 break
9397 }
9398 d := auxIntToInt32(v_0.AuxInt)
9399 x := v_0.Args[0]
9400 v.reset(OpARMRSBconst)
9401 v.AuxInt = int32ToAuxInt(c - d)
9402 v.AddArg(x)
9403 return true
9404 }
9405
9406
9407 for {
9408 c := auxIntToInt32(v.AuxInt)
9409 if v_0.Op != OpARMSUBconst {
9410 break
9411 }
9412 d := auxIntToInt32(v_0.AuxInt)
9413 x := v_0.Args[0]
9414 v.reset(OpARMRSBconst)
9415 v.AuxInt = int32ToAuxInt(c + d)
9416 v.AddArg(x)
9417 return true
9418 }
9419 return false
9420 }
9421 func rewriteValueARM_OpARMRSBshiftLL(v *Value) bool {
9422 v_1 := v.Args[1]
9423 v_0 := v.Args[0]
9424 b := v.Block
9425
9426
9427 for {
9428 d := auxIntToInt32(v.AuxInt)
9429 if v_0.Op != OpARMMOVWconst {
9430 break
9431 }
9432 c := auxIntToInt32(v_0.AuxInt)
9433 x := v_1
9434 v.reset(OpARMSUBconst)
9435 v.AuxInt = int32ToAuxInt(c)
9436 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9437 v0.AuxInt = int32ToAuxInt(d)
9438 v0.AddArg(x)
9439 v.AddArg(v0)
9440 return true
9441 }
9442
9443
9444 for {
9445 d := auxIntToInt32(v.AuxInt)
9446 x := v_0
9447 if v_1.Op != OpARMMOVWconst {
9448 break
9449 }
9450 c := auxIntToInt32(v_1.AuxInt)
9451 v.reset(OpARMRSBconst)
9452 v.AuxInt = int32ToAuxInt(c << uint64(d))
9453 v.AddArg(x)
9454 return true
9455 }
9456
9457
9458 for {
9459 c := auxIntToInt32(v.AuxInt)
9460 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
9461 break
9462 }
9463 x := v_0.Args[0]
9464 if x != v_1 {
9465 break
9466 }
9467 v.reset(OpARMMOVWconst)
9468 v.AuxInt = int32ToAuxInt(0)
9469 return true
9470 }
9471 return false
9472 }
9473 func rewriteValueARM_OpARMRSBshiftLLreg(v *Value) bool {
9474 v_2 := v.Args[2]
9475 v_1 := v.Args[1]
9476 v_0 := v.Args[0]
9477 b := v.Block
9478
9479
9480 for {
9481 if v_0.Op != OpARMMOVWconst {
9482 break
9483 }
9484 c := auxIntToInt32(v_0.AuxInt)
9485 x := v_1
9486 y := v_2
9487 v.reset(OpARMSUBconst)
9488 v.AuxInt = int32ToAuxInt(c)
9489 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9490 v0.AddArg2(x, y)
9491 v.AddArg(v0)
9492 return true
9493 }
9494
9495
9496
9497 for {
9498 x := v_0
9499 y := v_1
9500 if v_2.Op != OpARMMOVWconst {
9501 break
9502 }
9503 c := auxIntToInt32(v_2.AuxInt)
9504 if !(0 <= c && c < 32) {
9505 break
9506 }
9507 v.reset(OpARMRSBshiftLL)
9508 v.AuxInt = int32ToAuxInt(c)
9509 v.AddArg2(x, y)
9510 return true
9511 }
9512 return false
9513 }
9514 func rewriteValueARM_OpARMRSBshiftRA(v *Value) bool {
9515 v_1 := v.Args[1]
9516 v_0 := v.Args[0]
9517 b := v.Block
9518
9519
9520 for {
9521 d := auxIntToInt32(v.AuxInt)
9522 if v_0.Op != OpARMMOVWconst {
9523 break
9524 }
9525 c := auxIntToInt32(v_0.AuxInt)
9526 x := v_1
9527 v.reset(OpARMSUBconst)
9528 v.AuxInt = int32ToAuxInt(c)
9529 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9530 v0.AuxInt = int32ToAuxInt(d)
9531 v0.AddArg(x)
9532 v.AddArg(v0)
9533 return true
9534 }
9535
9536
9537 for {
9538 d := auxIntToInt32(v.AuxInt)
9539 x := v_0
9540 if v_1.Op != OpARMMOVWconst {
9541 break
9542 }
9543 c := auxIntToInt32(v_1.AuxInt)
9544 v.reset(OpARMRSBconst)
9545 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9546 v.AddArg(x)
9547 return true
9548 }
9549
9550
9551 for {
9552 c := auxIntToInt32(v.AuxInt)
9553 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
9554 break
9555 }
9556 x := v_0.Args[0]
9557 if x != v_1 {
9558 break
9559 }
9560 v.reset(OpARMMOVWconst)
9561 v.AuxInt = int32ToAuxInt(0)
9562 return true
9563 }
9564 return false
9565 }
9566 func rewriteValueARM_OpARMRSBshiftRAreg(v *Value) bool {
9567 v_2 := v.Args[2]
9568 v_1 := v.Args[1]
9569 v_0 := v.Args[0]
9570 b := v.Block
9571
9572
9573 for {
9574 if v_0.Op != OpARMMOVWconst {
9575 break
9576 }
9577 c := auxIntToInt32(v_0.AuxInt)
9578 x := v_1
9579 y := v_2
9580 v.reset(OpARMSUBconst)
9581 v.AuxInt = int32ToAuxInt(c)
9582 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9583 v0.AddArg2(x, y)
9584 v.AddArg(v0)
9585 return true
9586 }
9587
9588
9589
9590 for {
9591 x := v_0
9592 y := v_1
9593 if v_2.Op != OpARMMOVWconst {
9594 break
9595 }
9596 c := auxIntToInt32(v_2.AuxInt)
9597 if !(0 <= c && c < 32) {
9598 break
9599 }
9600 v.reset(OpARMRSBshiftRA)
9601 v.AuxInt = int32ToAuxInt(c)
9602 v.AddArg2(x, y)
9603 return true
9604 }
9605 return false
9606 }
9607 func rewriteValueARM_OpARMRSBshiftRL(v *Value) bool {
9608 v_1 := v.Args[1]
9609 v_0 := v.Args[0]
9610 b := v.Block
9611
9612
9613 for {
9614 d := auxIntToInt32(v.AuxInt)
9615 if v_0.Op != OpARMMOVWconst {
9616 break
9617 }
9618 c := auxIntToInt32(v_0.AuxInt)
9619 x := v_1
9620 v.reset(OpARMSUBconst)
9621 v.AuxInt = int32ToAuxInt(c)
9622 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9623 v0.AuxInt = int32ToAuxInt(d)
9624 v0.AddArg(x)
9625 v.AddArg(v0)
9626 return true
9627 }
9628
9629
9630 for {
9631 d := auxIntToInt32(v.AuxInt)
9632 x := v_0
9633 if v_1.Op != OpARMMOVWconst {
9634 break
9635 }
9636 c := auxIntToInt32(v_1.AuxInt)
9637 v.reset(OpARMRSBconst)
9638 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9639 v.AddArg(x)
9640 return true
9641 }
9642
9643
9644 for {
9645 c := auxIntToInt32(v.AuxInt)
9646 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
9647 break
9648 }
9649 x := v_0.Args[0]
9650 if x != v_1 {
9651 break
9652 }
9653 v.reset(OpARMMOVWconst)
9654 v.AuxInt = int32ToAuxInt(0)
9655 return true
9656 }
9657 return false
9658 }
9659 func rewriteValueARM_OpARMRSBshiftRLreg(v *Value) bool {
9660 v_2 := v.Args[2]
9661 v_1 := v.Args[1]
9662 v_0 := v.Args[0]
9663 b := v.Block
9664
9665
9666 for {
9667 if v_0.Op != OpARMMOVWconst {
9668 break
9669 }
9670 c := auxIntToInt32(v_0.AuxInt)
9671 x := v_1
9672 y := v_2
9673 v.reset(OpARMSUBconst)
9674 v.AuxInt = int32ToAuxInt(c)
9675 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9676 v0.AddArg2(x, y)
9677 v.AddArg(v0)
9678 return true
9679 }
9680
9681
9682
9683 for {
9684 x := v_0
9685 y := v_1
9686 if v_2.Op != OpARMMOVWconst {
9687 break
9688 }
9689 c := auxIntToInt32(v_2.AuxInt)
9690 if !(0 <= c && c < 32) {
9691 break
9692 }
9693 v.reset(OpARMRSBshiftRL)
9694 v.AuxInt = int32ToAuxInt(c)
9695 v.AddArg2(x, y)
9696 return true
9697 }
9698 return false
9699 }
9700 func rewriteValueARM_OpARMRSCconst(v *Value) bool {
9701 v_1 := v.Args[1]
9702 v_0 := v.Args[0]
9703
9704
9705 for {
9706 c := auxIntToInt32(v.AuxInt)
9707 if v_0.Op != OpARMADDconst {
9708 break
9709 }
9710 d := auxIntToInt32(v_0.AuxInt)
9711 x := v_0.Args[0]
9712 flags := v_1
9713 v.reset(OpARMRSCconst)
9714 v.AuxInt = int32ToAuxInt(c - d)
9715 v.AddArg2(x, flags)
9716 return true
9717 }
9718
9719
9720 for {
9721 c := auxIntToInt32(v.AuxInt)
9722 if v_0.Op != OpARMSUBconst {
9723 break
9724 }
9725 d := auxIntToInt32(v_0.AuxInt)
9726 x := v_0.Args[0]
9727 flags := v_1
9728 v.reset(OpARMRSCconst)
9729 v.AuxInt = int32ToAuxInt(c + d)
9730 v.AddArg2(x, flags)
9731 return true
9732 }
9733 return false
9734 }
9735 func rewriteValueARM_OpARMRSCshiftLL(v *Value) bool {
9736 v_2 := v.Args[2]
9737 v_1 := v.Args[1]
9738 v_0 := v.Args[0]
9739 b := v.Block
9740
9741
9742 for {
9743 d := auxIntToInt32(v.AuxInt)
9744 if v_0.Op != OpARMMOVWconst {
9745 break
9746 }
9747 c := auxIntToInt32(v_0.AuxInt)
9748 x := v_1
9749 flags := v_2
9750 v.reset(OpARMSBCconst)
9751 v.AuxInt = int32ToAuxInt(c)
9752 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9753 v0.AuxInt = int32ToAuxInt(d)
9754 v0.AddArg(x)
9755 v.AddArg2(v0, flags)
9756 return true
9757 }
9758
9759
9760 for {
9761 d := auxIntToInt32(v.AuxInt)
9762 x := v_0
9763 if v_1.Op != OpARMMOVWconst {
9764 break
9765 }
9766 c := auxIntToInt32(v_1.AuxInt)
9767 flags := v_2
9768 v.reset(OpARMRSCconst)
9769 v.AuxInt = int32ToAuxInt(c << uint64(d))
9770 v.AddArg2(x, flags)
9771 return true
9772 }
9773 return false
9774 }
9775 func rewriteValueARM_OpARMRSCshiftLLreg(v *Value) bool {
9776 v_3 := v.Args[3]
9777 v_2 := v.Args[2]
9778 v_1 := v.Args[1]
9779 v_0 := v.Args[0]
9780 b := v.Block
9781
9782
9783 for {
9784 if v_0.Op != OpARMMOVWconst {
9785 break
9786 }
9787 c := auxIntToInt32(v_0.AuxInt)
9788 x := v_1
9789 y := v_2
9790 flags := v_3
9791 v.reset(OpARMSBCconst)
9792 v.AuxInt = int32ToAuxInt(c)
9793 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9794 v0.AddArg2(x, y)
9795 v.AddArg2(v0, flags)
9796 return true
9797 }
9798
9799
9800
9801 for {
9802 x := v_0
9803 y := v_1
9804 if v_2.Op != OpARMMOVWconst {
9805 break
9806 }
9807 c := auxIntToInt32(v_2.AuxInt)
9808 flags := v_3
9809 if !(0 <= c && c < 32) {
9810 break
9811 }
9812 v.reset(OpARMRSCshiftLL)
9813 v.AuxInt = int32ToAuxInt(c)
9814 v.AddArg3(x, y, flags)
9815 return true
9816 }
9817 return false
9818 }
9819 func rewriteValueARM_OpARMRSCshiftRA(v *Value) bool {
9820 v_2 := v.Args[2]
9821 v_1 := v.Args[1]
9822 v_0 := v.Args[0]
9823 b := v.Block
9824
9825
9826 for {
9827 d := auxIntToInt32(v.AuxInt)
9828 if v_0.Op != OpARMMOVWconst {
9829 break
9830 }
9831 c := auxIntToInt32(v_0.AuxInt)
9832 x := v_1
9833 flags := v_2
9834 v.reset(OpARMSBCconst)
9835 v.AuxInt = int32ToAuxInt(c)
9836 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9837 v0.AuxInt = int32ToAuxInt(d)
9838 v0.AddArg(x)
9839 v.AddArg2(v0, flags)
9840 return true
9841 }
9842
9843
9844 for {
9845 d := auxIntToInt32(v.AuxInt)
9846 x := v_0
9847 if v_1.Op != OpARMMOVWconst {
9848 break
9849 }
9850 c := auxIntToInt32(v_1.AuxInt)
9851 flags := v_2
9852 v.reset(OpARMRSCconst)
9853 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9854 v.AddArg2(x, flags)
9855 return true
9856 }
9857 return false
9858 }
9859 func rewriteValueARM_OpARMRSCshiftRAreg(v *Value) bool {
9860 v_3 := v.Args[3]
9861 v_2 := v.Args[2]
9862 v_1 := v.Args[1]
9863 v_0 := v.Args[0]
9864 b := v.Block
9865
9866
9867 for {
9868 if v_0.Op != OpARMMOVWconst {
9869 break
9870 }
9871 c := auxIntToInt32(v_0.AuxInt)
9872 x := v_1
9873 y := v_2
9874 flags := v_3
9875 v.reset(OpARMSBCconst)
9876 v.AuxInt = int32ToAuxInt(c)
9877 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9878 v0.AddArg2(x, y)
9879 v.AddArg2(v0, flags)
9880 return true
9881 }
9882
9883
9884
9885 for {
9886 x := v_0
9887 y := v_1
9888 if v_2.Op != OpARMMOVWconst {
9889 break
9890 }
9891 c := auxIntToInt32(v_2.AuxInt)
9892 flags := v_3
9893 if !(0 <= c && c < 32) {
9894 break
9895 }
9896 v.reset(OpARMRSCshiftRA)
9897 v.AuxInt = int32ToAuxInt(c)
9898 v.AddArg3(x, y, flags)
9899 return true
9900 }
9901 return false
9902 }
9903 func rewriteValueARM_OpARMRSCshiftRL(v *Value) bool {
9904 v_2 := v.Args[2]
9905 v_1 := v.Args[1]
9906 v_0 := v.Args[0]
9907 b := v.Block
9908
9909
9910 for {
9911 d := auxIntToInt32(v.AuxInt)
9912 if v_0.Op != OpARMMOVWconst {
9913 break
9914 }
9915 c := auxIntToInt32(v_0.AuxInt)
9916 x := v_1
9917 flags := v_2
9918 v.reset(OpARMSBCconst)
9919 v.AuxInt = int32ToAuxInt(c)
9920 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9921 v0.AuxInt = int32ToAuxInt(d)
9922 v0.AddArg(x)
9923 v.AddArg2(v0, flags)
9924 return true
9925 }
9926
9927
9928 for {
9929 d := auxIntToInt32(v.AuxInt)
9930 x := v_0
9931 if v_1.Op != OpARMMOVWconst {
9932 break
9933 }
9934 c := auxIntToInt32(v_1.AuxInt)
9935 flags := v_2
9936 v.reset(OpARMRSCconst)
9937 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9938 v.AddArg2(x, flags)
9939 return true
9940 }
9941 return false
9942 }
9943 func rewriteValueARM_OpARMRSCshiftRLreg(v *Value) bool {
9944 v_3 := v.Args[3]
9945 v_2 := v.Args[2]
9946 v_1 := v.Args[1]
9947 v_0 := v.Args[0]
9948 b := v.Block
9949
9950
9951 for {
9952 if v_0.Op != OpARMMOVWconst {
9953 break
9954 }
9955 c := auxIntToInt32(v_0.AuxInt)
9956 x := v_1
9957 y := v_2
9958 flags := v_3
9959 v.reset(OpARMSBCconst)
9960 v.AuxInt = int32ToAuxInt(c)
9961 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9962 v0.AddArg2(x, y)
9963 v.AddArg2(v0, flags)
9964 return true
9965 }
9966
9967
9968
9969 for {
9970 x := v_0
9971 y := v_1
9972 if v_2.Op != OpARMMOVWconst {
9973 break
9974 }
9975 c := auxIntToInt32(v_2.AuxInt)
9976 flags := v_3
9977 if !(0 <= c && c < 32) {
9978 break
9979 }
9980 v.reset(OpARMRSCshiftRL)
9981 v.AuxInt = int32ToAuxInt(c)
9982 v.AddArg3(x, y, flags)
9983 return true
9984 }
9985 return false
9986 }
9987 func rewriteValueARM_OpARMSBC(v *Value) bool {
9988 v_2 := v.Args[2]
9989 v_1 := v.Args[1]
9990 v_0 := v.Args[0]
9991
9992
9993 for {
9994 if v_0.Op != OpARMMOVWconst {
9995 break
9996 }
9997 c := auxIntToInt32(v_0.AuxInt)
9998 x := v_1
9999 flags := v_2
10000 v.reset(OpARMRSCconst)
10001 v.AuxInt = int32ToAuxInt(c)
10002 v.AddArg2(x, flags)
10003 return true
10004 }
10005
10006
10007 for {
10008 x := v_0
10009 if v_1.Op != OpARMMOVWconst {
10010 break
10011 }
10012 c := auxIntToInt32(v_1.AuxInt)
10013 flags := v_2
10014 v.reset(OpARMSBCconst)
10015 v.AuxInt = int32ToAuxInt(c)
10016 v.AddArg2(x, flags)
10017 return true
10018 }
10019
10020
10021 for {
10022 x := v_0
10023 if v_1.Op != OpARMSLLconst {
10024 break
10025 }
10026 c := auxIntToInt32(v_1.AuxInt)
10027 y := v_1.Args[0]
10028 flags := v_2
10029 v.reset(OpARMSBCshiftLL)
10030 v.AuxInt = int32ToAuxInt(c)
10031 v.AddArg3(x, y, flags)
10032 return true
10033 }
10034
10035
10036 for {
10037 if v_0.Op != OpARMSLLconst {
10038 break
10039 }
10040 c := auxIntToInt32(v_0.AuxInt)
10041 y := v_0.Args[0]
10042 x := v_1
10043 flags := v_2
10044 v.reset(OpARMRSCshiftLL)
10045 v.AuxInt = int32ToAuxInt(c)
10046 v.AddArg3(x, y, flags)
10047 return true
10048 }
10049
10050
10051 for {
10052 x := v_0
10053 if v_1.Op != OpARMSRLconst {
10054 break
10055 }
10056 c := auxIntToInt32(v_1.AuxInt)
10057 y := v_1.Args[0]
10058 flags := v_2
10059 v.reset(OpARMSBCshiftRL)
10060 v.AuxInt = int32ToAuxInt(c)
10061 v.AddArg3(x, y, flags)
10062 return true
10063 }
10064
10065
10066 for {
10067 if v_0.Op != OpARMSRLconst {
10068 break
10069 }
10070 c := auxIntToInt32(v_0.AuxInt)
10071 y := v_0.Args[0]
10072 x := v_1
10073 flags := v_2
10074 v.reset(OpARMRSCshiftRL)
10075 v.AuxInt = int32ToAuxInt(c)
10076 v.AddArg3(x, y, flags)
10077 return true
10078 }
10079
10080
10081 for {
10082 x := v_0
10083 if v_1.Op != OpARMSRAconst {
10084 break
10085 }
10086 c := auxIntToInt32(v_1.AuxInt)
10087 y := v_1.Args[0]
10088 flags := v_2
10089 v.reset(OpARMSBCshiftRA)
10090 v.AuxInt = int32ToAuxInt(c)
10091 v.AddArg3(x, y, flags)
10092 return true
10093 }
10094
10095
10096 for {
10097 if v_0.Op != OpARMSRAconst {
10098 break
10099 }
10100 c := auxIntToInt32(v_0.AuxInt)
10101 y := v_0.Args[0]
10102 x := v_1
10103 flags := v_2
10104 v.reset(OpARMRSCshiftRA)
10105 v.AuxInt = int32ToAuxInt(c)
10106 v.AddArg3(x, y, flags)
10107 return true
10108 }
10109
10110
10111 for {
10112 x := v_0
10113 if v_1.Op != OpARMSLL {
10114 break
10115 }
10116 z := v_1.Args[1]
10117 y := v_1.Args[0]
10118 flags := v_2
10119 v.reset(OpARMSBCshiftLLreg)
10120 v.AddArg4(x, y, z, flags)
10121 return true
10122 }
10123
10124
10125 for {
10126 if v_0.Op != OpARMSLL {
10127 break
10128 }
10129 z := v_0.Args[1]
10130 y := v_0.Args[0]
10131 x := v_1
10132 flags := v_2
10133 v.reset(OpARMRSCshiftLLreg)
10134 v.AddArg4(x, y, z, flags)
10135 return true
10136 }
10137
10138
10139 for {
10140 x := v_0
10141 if v_1.Op != OpARMSRL {
10142 break
10143 }
10144 z := v_1.Args[1]
10145 y := v_1.Args[0]
10146 flags := v_2
10147 v.reset(OpARMSBCshiftRLreg)
10148 v.AddArg4(x, y, z, flags)
10149 return true
10150 }
10151
10152
10153 for {
10154 if v_0.Op != OpARMSRL {
10155 break
10156 }
10157 z := v_0.Args[1]
10158 y := v_0.Args[0]
10159 x := v_1
10160 flags := v_2
10161 v.reset(OpARMRSCshiftRLreg)
10162 v.AddArg4(x, y, z, flags)
10163 return true
10164 }
10165
10166
10167 for {
10168 x := v_0
10169 if v_1.Op != OpARMSRA {
10170 break
10171 }
10172 z := v_1.Args[1]
10173 y := v_1.Args[0]
10174 flags := v_2
10175 v.reset(OpARMSBCshiftRAreg)
10176 v.AddArg4(x, y, z, flags)
10177 return true
10178 }
10179
10180
10181 for {
10182 if v_0.Op != OpARMSRA {
10183 break
10184 }
10185 z := v_0.Args[1]
10186 y := v_0.Args[0]
10187 x := v_1
10188 flags := v_2
10189 v.reset(OpARMRSCshiftRAreg)
10190 v.AddArg4(x, y, z, flags)
10191 return true
10192 }
10193 return false
10194 }
10195 func rewriteValueARM_OpARMSBCconst(v *Value) bool {
10196 v_1 := v.Args[1]
10197 v_0 := v.Args[0]
10198
10199
10200 for {
10201 c := auxIntToInt32(v.AuxInt)
10202 if v_0.Op != OpARMADDconst {
10203 break
10204 }
10205 d := auxIntToInt32(v_0.AuxInt)
10206 x := v_0.Args[0]
10207 flags := v_1
10208 v.reset(OpARMSBCconst)
10209 v.AuxInt = int32ToAuxInt(c - d)
10210 v.AddArg2(x, flags)
10211 return true
10212 }
10213
10214
10215 for {
10216 c := auxIntToInt32(v.AuxInt)
10217 if v_0.Op != OpARMSUBconst {
10218 break
10219 }
10220 d := auxIntToInt32(v_0.AuxInt)
10221 x := v_0.Args[0]
10222 flags := v_1
10223 v.reset(OpARMSBCconst)
10224 v.AuxInt = int32ToAuxInt(c + d)
10225 v.AddArg2(x, flags)
10226 return true
10227 }
10228 return false
10229 }
10230 func rewriteValueARM_OpARMSBCshiftLL(v *Value) bool {
10231 v_2 := v.Args[2]
10232 v_1 := v.Args[1]
10233 v_0 := v.Args[0]
10234 b := v.Block
10235
10236
10237 for {
10238 d := auxIntToInt32(v.AuxInt)
10239 if v_0.Op != OpARMMOVWconst {
10240 break
10241 }
10242 c := auxIntToInt32(v_0.AuxInt)
10243 x := v_1
10244 flags := v_2
10245 v.reset(OpARMRSCconst)
10246 v.AuxInt = int32ToAuxInt(c)
10247 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
10248 v0.AuxInt = int32ToAuxInt(d)
10249 v0.AddArg(x)
10250 v.AddArg2(v0, flags)
10251 return true
10252 }
10253
10254
10255 for {
10256 d := auxIntToInt32(v.AuxInt)
10257 x := v_0
10258 if v_1.Op != OpARMMOVWconst {
10259 break
10260 }
10261 c := auxIntToInt32(v_1.AuxInt)
10262 flags := v_2
10263 v.reset(OpARMSBCconst)
10264 v.AuxInt = int32ToAuxInt(c << uint64(d))
10265 v.AddArg2(x, flags)
10266 return true
10267 }
10268 return false
10269 }
10270 func rewriteValueARM_OpARMSBCshiftLLreg(v *Value) bool {
10271 v_3 := v.Args[3]
10272 v_2 := v.Args[2]
10273 v_1 := v.Args[1]
10274 v_0 := v.Args[0]
10275 b := v.Block
10276
10277
10278 for {
10279 if v_0.Op != OpARMMOVWconst {
10280 break
10281 }
10282 c := auxIntToInt32(v_0.AuxInt)
10283 x := v_1
10284 y := v_2
10285 flags := v_3
10286 v.reset(OpARMRSCconst)
10287 v.AuxInt = int32ToAuxInt(c)
10288 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
10289 v0.AddArg2(x, y)
10290 v.AddArg2(v0, flags)
10291 return true
10292 }
10293
10294
10295
10296 for {
10297 x := v_0
10298 y := v_1
10299 if v_2.Op != OpARMMOVWconst {
10300 break
10301 }
10302 c := auxIntToInt32(v_2.AuxInt)
10303 flags := v_3
10304 if !(0 <= c && c < 32) {
10305 break
10306 }
10307 v.reset(OpARMSBCshiftLL)
10308 v.AuxInt = int32ToAuxInt(c)
10309 v.AddArg3(x, y, flags)
10310 return true
10311 }
10312 return false
10313 }
10314 func rewriteValueARM_OpARMSBCshiftRA(v *Value) bool {
10315 v_2 := v.Args[2]
10316 v_1 := v.Args[1]
10317 v_0 := v.Args[0]
10318 b := v.Block
10319
10320
10321 for {
10322 d := auxIntToInt32(v.AuxInt)
10323 if v_0.Op != OpARMMOVWconst {
10324 break
10325 }
10326 c := auxIntToInt32(v_0.AuxInt)
10327 x := v_1
10328 flags := v_2
10329 v.reset(OpARMRSCconst)
10330 v.AuxInt = int32ToAuxInt(c)
10331 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
10332 v0.AuxInt = int32ToAuxInt(d)
10333 v0.AddArg(x)
10334 v.AddArg2(v0, flags)
10335 return true
10336 }
10337
10338
10339 for {
10340 d := auxIntToInt32(v.AuxInt)
10341 x := v_0
10342 if v_1.Op != OpARMMOVWconst {
10343 break
10344 }
10345 c := auxIntToInt32(v_1.AuxInt)
10346 flags := v_2
10347 v.reset(OpARMSBCconst)
10348 v.AuxInt = int32ToAuxInt(c >> uint64(d))
10349 v.AddArg2(x, flags)
10350 return true
10351 }
10352 return false
10353 }
10354 func rewriteValueARM_OpARMSBCshiftRAreg(v *Value) bool {
10355 v_3 := v.Args[3]
10356 v_2 := v.Args[2]
10357 v_1 := v.Args[1]
10358 v_0 := v.Args[0]
10359 b := v.Block
10360
10361
10362 for {
10363 if v_0.Op != OpARMMOVWconst {
10364 break
10365 }
10366 c := auxIntToInt32(v_0.AuxInt)
10367 x := v_1
10368 y := v_2
10369 flags := v_3
10370 v.reset(OpARMRSCconst)
10371 v.AuxInt = int32ToAuxInt(c)
10372 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
10373 v0.AddArg2(x, y)
10374 v.AddArg2(v0, flags)
10375 return true
10376 }
10377
10378
10379
10380 for {
10381 x := v_0
10382 y := v_1
10383 if v_2.Op != OpARMMOVWconst {
10384 break
10385 }
10386 c := auxIntToInt32(v_2.AuxInt)
10387 flags := v_3
10388 if !(0 <= c && c < 32) {
10389 break
10390 }
10391 v.reset(OpARMSBCshiftRA)
10392 v.AuxInt = int32ToAuxInt(c)
10393 v.AddArg3(x, y, flags)
10394 return true
10395 }
10396 return false
10397 }
10398 func rewriteValueARM_OpARMSBCshiftRL(v *Value) bool {
10399 v_2 := v.Args[2]
10400 v_1 := v.Args[1]
10401 v_0 := v.Args[0]
10402 b := v.Block
10403
10404
10405 for {
10406 d := auxIntToInt32(v.AuxInt)
10407 if v_0.Op != OpARMMOVWconst {
10408 break
10409 }
10410 c := auxIntToInt32(v_0.AuxInt)
10411 x := v_1
10412 flags := v_2
10413 v.reset(OpARMRSCconst)
10414 v.AuxInt = int32ToAuxInt(c)
10415 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
10416 v0.AuxInt = int32ToAuxInt(d)
10417 v0.AddArg(x)
10418 v.AddArg2(v0, flags)
10419 return true
10420 }
10421
10422
10423 for {
10424 d := auxIntToInt32(v.AuxInt)
10425 x := v_0
10426 if v_1.Op != OpARMMOVWconst {
10427 break
10428 }
10429 c := auxIntToInt32(v_1.AuxInt)
10430 flags := v_2
10431 v.reset(OpARMSBCconst)
10432 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
10433 v.AddArg2(x, flags)
10434 return true
10435 }
10436 return false
10437 }
10438 func rewriteValueARM_OpARMSBCshiftRLreg(v *Value) bool {
10439 v_3 := v.Args[3]
10440 v_2 := v.Args[2]
10441 v_1 := v.Args[1]
10442 v_0 := v.Args[0]
10443 b := v.Block
10444
10445
10446 for {
10447 if v_0.Op != OpARMMOVWconst {
10448 break
10449 }
10450 c := auxIntToInt32(v_0.AuxInt)
10451 x := v_1
10452 y := v_2
10453 flags := v_3
10454 v.reset(OpARMRSCconst)
10455 v.AuxInt = int32ToAuxInt(c)
10456 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
10457 v0.AddArg2(x, y)
10458 v.AddArg2(v0, flags)
10459 return true
10460 }
10461
10462
10463
10464 for {
10465 x := v_0
10466 y := v_1
10467 if v_2.Op != OpARMMOVWconst {
10468 break
10469 }
10470 c := auxIntToInt32(v_2.AuxInt)
10471 flags := v_3
10472 if !(0 <= c && c < 32) {
10473 break
10474 }
10475 v.reset(OpARMSBCshiftRL)
10476 v.AuxInt = int32ToAuxInt(c)
10477 v.AddArg3(x, y, flags)
10478 return true
10479 }
10480 return false
10481 }
10482 func rewriteValueARM_OpARMSLL(v *Value) bool {
10483 v_1 := v.Args[1]
10484 v_0 := v.Args[0]
10485
10486
10487
10488 for {
10489 x := v_0
10490 if v_1.Op != OpARMMOVWconst {
10491 break
10492 }
10493 c := auxIntToInt32(v_1.AuxInt)
10494 if !(0 <= c && c < 32) {
10495 break
10496 }
10497 v.reset(OpARMSLLconst)
10498 v.AuxInt = int32ToAuxInt(c)
10499 v.AddArg(x)
10500 return true
10501 }
10502 return false
10503 }
10504 func rewriteValueARM_OpARMSLLconst(v *Value) bool {
10505 v_0 := v.Args[0]
10506
10507
10508 for {
10509 c := auxIntToInt32(v.AuxInt)
10510 if v_0.Op != OpARMMOVWconst {
10511 break
10512 }
10513 d := auxIntToInt32(v_0.AuxInt)
10514 v.reset(OpARMMOVWconst)
10515 v.AuxInt = int32ToAuxInt(d << uint64(c))
10516 return true
10517 }
10518 return false
10519 }
10520 func rewriteValueARM_OpARMSRA(v *Value) bool {
10521 v_1 := v.Args[1]
10522 v_0 := v.Args[0]
10523
10524
10525
10526 for {
10527 x := v_0
10528 if v_1.Op != OpARMMOVWconst {
10529 break
10530 }
10531 c := auxIntToInt32(v_1.AuxInt)
10532 if !(0 <= c && c < 32) {
10533 break
10534 }
10535 v.reset(OpARMSRAconst)
10536 v.AuxInt = int32ToAuxInt(c)
10537 v.AddArg(x)
10538 return true
10539 }
10540 return false
10541 }
10542 func rewriteValueARM_OpARMSRAcond(v *Value) bool {
10543 v_2 := v.Args[2]
10544 v_1 := v.Args[1]
10545 v_0 := v.Args[0]
10546
10547
10548
10549 for {
10550 x := v_0
10551 if v_2.Op != OpARMFlagConstant {
10552 break
10553 }
10554 fc := auxIntToFlagConstant(v_2.AuxInt)
10555 if !(fc.uge()) {
10556 break
10557 }
10558 v.reset(OpARMSRAconst)
10559 v.AuxInt = int32ToAuxInt(31)
10560 v.AddArg(x)
10561 return true
10562 }
10563
10564
10565
10566 for {
10567 x := v_0
10568 y := v_1
10569 if v_2.Op != OpARMFlagConstant {
10570 break
10571 }
10572 fc := auxIntToFlagConstant(v_2.AuxInt)
10573 if !(fc.ult()) {
10574 break
10575 }
10576 v.reset(OpARMSRA)
10577 v.AddArg2(x, y)
10578 return true
10579 }
10580 return false
10581 }
10582 func rewriteValueARM_OpARMSRAconst(v *Value) bool {
10583 v_0 := v.Args[0]
10584
10585
10586 for {
10587 c := auxIntToInt32(v.AuxInt)
10588 if v_0.Op != OpARMMOVWconst {
10589 break
10590 }
10591 d := auxIntToInt32(v_0.AuxInt)
10592 v.reset(OpARMMOVWconst)
10593 v.AuxInt = int32ToAuxInt(d >> uint64(c))
10594 return true
10595 }
10596
10597
10598
10599 for {
10600 d := auxIntToInt32(v.AuxInt)
10601 if v_0.Op != OpARMSLLconst {
10602 break
10603 }
10604 c := auxIntToInt32(v_0.AuxInt)
10605 x := v_0.Args[0]
10606 if !(buildcfg.GOARM == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10607 break
10608 }
10609 v.reset(OpARMBFX)
10610 v.AuxInt = int32ToAuxInt((d - c) | (32-d)<<8)
10611 v.AddArg(x)
10612 return true
10613 }
10614 return false
10615 }
10616 func rewriteValueARM_OpARMSRL(v *Value) bool {
10617 v_1 := v.Args[1]
10618 v_0 := v.Args[0]
10619
10620
10621
10622 for {
10623 x := v_0
10624 if v_1.Op != OpARMMOVWconst {
10625 break
10626 }
10627 c := auxIntToInt32(v_1.AuxInt)
10628 if !(0 <= c && c < 32) {
10629 break
10630 }
10631 v.reset(OpARMSRLconst)
10632 v.AuxInt = int32ToAuxInt(c)
10633 v.AddArg(x)
10634 return true
10635 }
10636 return false
10637 }
10638 func rewriteValueARM_OpARMSRLconst(v *Value) bool {
10639 v_0 := v.Args[0]
10640
10641
10642 for {
10643 c := auxIntToInt32(v.AuxInt)
10644 if v_0.Op != OpARMMOVWconst {
10645 break
10646 }
10647 d := auxIntToInt32(v_0.AuxInt)
10648 v.reset(OpARMMOVWconst)
10649 v.AuxInt = int32ToAuxInt(int32(uint32(d) >> uint64(c)))
10650 return true
10651 }
10652
10653
10654
10655 for {
10656 d := auxIntToInt32(v.AuxInt)
10657 if v_0.Op != OpARMSLLconst {
10658 break
10659 }
10660 c := auxIntToInt32(v_0.AuxInt)
10661 x := v_0.Args[0]
10662 if !(buildcfg.GOARM == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10663 break
10664 }
10665 v.reset(OpARMBFXU)
10666 v.AuxInt = int32ToAuxInt((d - c) | (32-d)<<8)
10667 v.AddArg(x)
10668 return true
10669 }
10670 return false
10671 }
10672 func rewriteValueARM_OpARMSRR(v *Value) bool {
10673 v_1 := v.Args[1]
10674 v_0 := v.Args[0]
10675
10676
10677 for {
10678 x := v_0
10679 if v_1.Op != OpARMMOVWconst {
10680 break
10681 }
10682 c := auxIntToInt32(v_1.AuxInt)
10683 v.reset(OpARMSRRconst)
10684 v.AuxInt = int32ToAuxInt(c & 31)
10685 v.AddArg(x)
10686 return true
10687 }
10688 return false
10689 }
10690 func rewriteValueARM_OpARMSUB(v *Value) bool {
10691 v_1 := v.Args[1]
10692 v_0 := v.Args[0]
10693
10694
10695 for {
10696 if v_0.Op != OpARMMOVWconst {
10697 break
10698 }
10699 c := auxIntToInt32(v_0.AuxInt)
10700 x := v_1
10701 v.reset(OpARMRSBconst)
10702 v.AuxInt = int32ToAuxInt(c)
10703 v.AddArg(x)
10704 return true
10705 }
10706
10707
10708 for {
10709 x := v_0
10710 if v_1.Op != OpARMMOVWconst {
10711 break
10712 }
10713 c := auxIntToInt32(v_1.AuxInt)
10714 v.reset(OpARMSUBconst)
10715 v.AuxInt = int32ToAuxInt(c)
10716 v.AddArg(x)
10717 return true
10718 }
10719
10720
10721 for {
10722 x := v_0
10723 if v_1.Op != OpARMSLLconst {
10724 break
10725 }
10726 c := auxIntToInt32(v_1.AuxInt)
10727 y := v_1.Args[0]
10728 v.reset(OpARMSUBshiftLL)
10729 v.AuxInt = int32ToAuxInt(c)
10730 v.AddArg2(x, y)
10731 return true
10732 }
10733
10734
10735 for {
10736 if v_0.Op != OpARMSLLconst {
10737 break
10738 }
10739 c := auxIntToInt32(v_0.AuxInt)
10740 y := v_0.Args[0]
10741 x := v_1
10742 v.reset(OpARMRSBshiftLL)
10743 v.AuxInt = int32ToAuxInt(c)
10744 v.AddArg2(x, y)
10745 return true
10746 }
10747
10748
10749 for {
10750 x := v_0
10751 if v_1.Op != OpARMSRLconst {
10752 break
10753 }
10754 c := auxIntToInt32(v_1.AuxInt)
10755 y := v_1.Args[0]
10756 v.reset(OpARMSUBshiftRL)
10757 v.AuxInt = int32ToAuxInt(c)
10758 v.AddArg2(x, y)
10759 return true
10760 }
10761
10762
10763 for {
10764 if v_0.Op != OpARMSRLconst {
10765 break
10766 }
10767 c := auxIntToInt32(v_0.AuxInt)
10768 y := v_0.Args[0]
10769 x := v_1
10770 v.reset(OpARMRSBshiftRL)
10771 v.AuxInt = int32ToAuxInt(c)
10772 v.AddArg2(x, y)
10773 return true
10774 }
10775
10776
10777 for {
10778 x := v_0
10779 if v_1.Op != OpARMSRAconst {
10780 break
10781 }
10782 c := auxIntToInt32(v_1.AuxInt)
10783 y := v_1.Args[0]
10784 v.reset(OpARMSUBshiftRA)
10785 v.AuxInt = int32ToAuxInt(c)
10786 v.AddArg2(x, y)
10787 return true
10788 }
10789
10790
10791 for {
10792 if v_0.Op != OpARMSRAconst {
10793 break
10794 }
10795 c := auxIntToInt32(v_0.AuxInt)
10796 y := v_0.Args[0]
10797 x := v_1
10798 v.reset(OpARMRSBshiftRA)
10799 v.AuxInt = int32ToAuxInt(c)
10800 v.AddArg2(x, y)
10801 return true
10802 }
10803
10804
10805 for {
10806 x := v_0
10807 if v_1.Op != OpARMSLL {
10808 break
10809 }
10810 z := v_1.Args[1]
10811 y := v_1.Args[0]
10812 v.reset(OpARMSUBshiftLLreg)
10813 v.AddArg3(x, y, z)
10814 return true
10815 }
10816
10817
10818 for {
10819 if v_0.Op != OpARMSLL {
10820 break
10821 }
10822 z := v_0.Args[1]
10823 y := v_0.Args[0]
10824 x := v_1
10825 v.reset(OpARMRSBshiftLLreg)
10826 v.AddArg3(x, y, z)
10827 return true
10828 }
10829
10830
10831 for {
10832 x := v_0
10833 if v_1.Op != OpARMSRL {
10834 break
10835 }
10836 z := v_1.Args[1]
10837 y := v_1.Args[0]
10838 v.reset(OpARMSUBshiftRLreg)
10839 v.AddArg3(x, y, z)
10840 return true
10841 }
10842
10843
10844 for {
10845 if v_0.Op != OpARMSRL {
10846 break
10847 }
10848 z := v_0.Args[1]
10849 y := v_0.Args[0]
10850 x := v_1
10851 v.reset(OpARMRSBshiftRLreg)
10852 v.AddArg3(x, y, z)
10853 return true
10854 }
10855
10856
10857 for {
10858 x := v_0
10859 if v_1.Op != OpARMSRA {
10860 break
10861 }
10862 z := v_1.Args[1]
10863 y := v_1.Args[0]
10864 v.reset(OpARMSUBshiftRAreg)
10865 v.AddArg3(x, y, z)
10866 return true
10867 }
10868
10869
10870 for {
10871 if v_0.Op != OpARMSRA {
10872 break
10873 }
10874 z := v_0.Args[1]
10875 y := v_0.Args[0]
10876 x := v_1
10877 v.reset(OpARMRSBshiftRAreg)
10878 v.AddArg3(x, y, z)
10879 return true
10880 }
10881
10882
10883 for {
10884 x := v_0
10885 if x != v_1 {
10886 break
10887 }
10888 v.reset(OpARMMOVWconst)
10889 v.AuxInt = int32ToAuxInt(0)
10890 return true
10891 }
10892
10893
10894
10895 for {
10896 a := v_0
10897 if v_1.Op != OpARMMUL {
10898 break
10899 }
10900 y := v_1.Args[1]
10901 x := v_1.Args[0]
10902 if !(buildcfg.GOARM == 7) {
10903 break
10904 }
10905 v.reset(OpARMMULS)
10906 v.AddArg3(x, y, a)
10907 return true
10908 }
10909 return false
10910 }
10911 func rewriteValueARM_OpARMSUBD(v *Value) bool {
10912 v_1 := v.Args[1]
10913 v_0 := v.Args[0]
10914
10915
10916
10917 for {
10918 a := v_0
10919 if v_1.Op != OpARMMULD {
10920 break
10921 }
10922 y := v_1.Args[1]
10923 x := v_1.Args[0]
10924 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
10925 break
10926 }
10927 v.reset(OpARMMULSD)
10928 v.AddArg3(a, x, y)
10929 return true
10930 }
10931
10932
10933
10934 for {
10935 a := v_0
10936 if v_1.Op != OpARMNMULD {
10937 break
10938 }
10939 y := v_1.Args[1]
10940 x := v_1.Args[0]
10941 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
10942 break
10943 }
10944 v.reset(OpARMMULAD)
10945 v.AddArg3(a, x, y)
10946 return true
10947 }
10948 return false
10949 }
10950 func rewriteValueARM_OpARMSUBF(v *Value) bool {
10951 v_1 := v.Args[1]
10952 v_0 := v.Args[0]
10953
10954
10955
10956 for {
10957 a := v_0
10958 if v_1.Op != OpARMMULF {
10959 break
10960 }
10961 y := v_1.Args[1]
10962 x := v_1.Args[0]
10963 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
10964 break
10965 }
10966 v.reset(OpARMMULSF)
10967 v.AddArg3(a, x, y)
10968 return true
10969 }
10970
10971
10972
10973 for {
10974 a := v_0
10975 if v_1.Op != OpARMNMULF {
10976 break
10977 }
10978 y := v_1.Args[1]
10979 x := v_1.Args[0]
10980 if !(a.Uses == 1 && buildcfg.GOARM >= 6) {
10981 break
10982 }
10983 v.reset(OpARMMULAF)
10984 v.AddArg3(a, x, y)
10985 return true
10986 }
10987 return false
10988 }
10989 func rewriteValueARM_OpARMSUBS(v *Value) bool {
10990 v_1 := v.Args[1]
10991 v_0 := v.Args[0]
10992
10993
10994 for {
10995 x := v_0
10996 if v_1.Op != OpARMMOVWconst {
10997 break
10998 }
10999 c := auxIntToInt32(v_1.AuxInt)
11000 v.reset(OpARMSUBSconst)
11001 v.AuxInt = int32ToAuxInt(c)
11002 v.AddArg(x)
11003 return true
11004 }
11005
11006
11007 for {
11008 x := v_0
11009 if v_1.Op != OpARMSLLconst {
11010 break
11011 }
11012 c := auxIntToInt32(v_1.AuxInt)
11013 y := v_1.Args[0]
11014 v.reset(OpARMSUBSshiftLL)
11015 v.AuxInt = int32ToAuxInt(c)
11016 v.AddArg2(x, y)
11017 return true
11018 }
11019
11020
11021 for {
11022 if v_0.Op != OpARMSLLconst {
11023 break
11024 }
11025 c := auxIntToInt32(v_0.AuxInt)
11026 y := v_0.Args[0]
11027 x := v_1
11028 v.reset(OpARMRSBSshiftLL)
11029 v.AuxInt = int32ToAuxInt(c)
11030 v.AddArg2(x, y)
11031 return true
11032 }
11033
11034
11035 for {
11036 x := v_0
11037 if v_1.Op != OpARMSRLconst {
11038 break
11039 }
11040 c := auxIntToInt32(v_1.AuxInt)
11041 y := v_1.Args[0]
11042 v.reset(OpARMSUBSshiftRL)
11043 v.AuxInt = int32ToAuxInt(c)
11044 v.AddArg2(x, y)
11045 return true
11046 }
11047
11048
11049 for {
11050 if v_0.Op != OpARMSRLconst {
11051 break
11052 }
11053 c := auxIntToInt32(v_0.AuxInt)
11054 y := v_0.Args[0]
11055 x := v_1
11056 v.reset(OpARMRSBSshiftRL)
11057 v.AuxInt = int32ToAuxInt(c)
11058 v.AddArg2(x, y)
11059 return true
11060 }
11061
11062
11063 for {
11064 x := v_0
11065 if v_1.Op != OpARMSRAconst {
11066 break
11067 }
11068 c := auxIntToInt32(v_1.AuxInt)
11069 y := v_1.Args[0]
11070 v.reset(OpARMSUBSshiftRA)
11071 v.AuxInt = int32ToAuxInt(c)
11072 v.AddArg2(x, y)
11073 return true
11074 }
11075
11076
11077 for {
11078 if v_0.Op != OpARMSRAconst {
11079 break
11080 }
11081 c := auxIntToInt32(v_0.AuxInt)
11082 y := v_0.Args[0]
11083 x := v_1
11084 v.reset(OpARMRSBSshiftRA)
11085 v.AuxInt = int32ToAuxInt(c)
11086 v.AddArg2(x, y)
11087 return true
11088 }
11089
11090
11091 for {
11092 x := v_0
11093 if v_1.Op != OpARMSLL {
11094 break
11095 }
11096 z := v_1.Args[1]
11097 y := v_1.Args[0]
11098 v.reset(OpARMSUBSshiftLLreg)
11099 v.AddArg3(x, y, z)
11100 return true
11101 }
11102
11103
11104 for {
11105 if v_0.Op != OpARMSLL {
11106 break
11107 }
11108 z := v_0.Args[1]
11109 y := v_0.Args[0]
11110 x := v_1
11111 v.reset(OpARMRSBSshiftLLreg)
11112 v.AddArg3(x, y, z)
11113 return true
11114 }
11115
11116
11117 for {
11118 x := v_0
11119 if v_1.Op != OpARMSRL {
11120 break
11121 }
11122 z := v_1.Args[1]
11123 y := v_1.Args[0]
11124 v.reset(OpARMSUBSshiftRLreg)
11125 v.AddArg3(x, y, z)
11126 return true
11127 }
11128
11129
11130 for {
11131 if v_0.Op != OpARMSRL {
11132 break
11133 }
11134 z := v_0.Args[1]
11135 y := v_0.Args[0]
11136 x := v_1
11137 v.reset(OpARMRSBSshiftRLreg)
11138 v.AddArg3(x, y, z)
11139 return true
11140 }
11141
11142
11143 for {
11144 x := v_0
11145 if v_1.Op != OpARMSRA {
11146 break
11147 }
11148 z := v_1.Args[1]
11149 y := v_1.Args[0]
11150 v.reset(OpARMSUBSshiftRAreg)
11151 v.AddArg3(x, y, z)
11152 return true
11153 }
11154
11155
11156 for {
11157 if v_0.Op != OpARMSRA {
11158 break
11159 }
11160 z := v_0.Args[1]
11161 y := v_0.Args[0]
11162 x := v_1
11163 v.reset(OpARMRSBSshiftRAreg)
11164 v.AddArg3(x, y, z)
11165 return true
11166 }
11167 return false
11168 }
11169 func rewriteValueARM_OpARMSUBSshiftLL(v *Value) bool {
11170 v_1 := v.Args[1]
11171 v_0 := v.Args[0]
11172 b := v.Block
11173
11174
11175 for {
11176 d := auxIntToInt32(v.AuxInt)
11177 if v_0.Op != OpARMMOVWconst {
11178 break
11179 }
11180 c := auxIntToInt32(v_0.AuxInt)
11181 x := v_1
11182 v.reset(OpARMRSBSconst)
11183 v.AuxInt = int32ToAuxInt(c)
11184 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11185 v0.AuxInt = int32ToAuxInt(d)
11186 v0.AddArg(x)
11187 v.AddArg(v0)
11188 return true
11189 }
11190
11191
11192 for {
11193 d := auxIntToInt32(v.AuxInt)
11194 x := v_0
11195 if v_1.Op != OpARMMOVWconst {
11196 break
11197 }
11198 c := auxIntToInt32(v_1.AuxInt)
11199 v.reset(OpARMSUBSconst)
11200 v.AuxInt = int32ToAuxInt(c << uint64(d))
11201 v.AddArg(x)
11202 return true
11203 }
11204 return false
11205 }
11206 func rewriteValueARM_OpARMSUBSshiftLLreg(v *Value) bool {
11207 v_2 := v.Args[2]
11208 v_1 := v.Args[1]
11209 v_0 := v.Args[0]
11210 b := v.Block
11211
11212
11213 for {
11214 if v_0.Op != OpARMMOVWconst {
11215 break
11216 }
11217 c := auxIntToInt32(v_0.AuxInt)
11218 x := v_1
11219 y := v_2
11220 v.reset(OpARMRSBSconst)
11221 v.AuxInt = int32ToAuxInt(c)
11222 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11223 v0.AddArg2(x, y)
11224 v.AddArg(v0)
11225 return true
11226 }
11227
11228
11229
11230 for {
11231 x := v_0
11232 y := v_1
11233 if v_2.Op != OpARMMOVWconst {
11234 break
11235 }
11236 c := auxIntToInt32(v_2.AuxInt)
11237 if !(0 <= c && c < 32) {
11238 break
11239 }
11240 v.reset(OpARMSUBSshiftLL)
11241 v.AuxInt = int32ToAuxInt(c)
11242 v.AddArg2(x, y)
11243 return true
11244 }
11245 return false
11246 }
11247 func rewriteValueARM_OpARMSUBSshiftRA(v *Value) bool {
11248 v_1 := v.Args[1]
11249 v_0 := v.Args[0]
11250 b := v.Block
11251
11252
11253 for {
11254 d := auxIntToInt32(v.AuxInt)
11255 if v_0.Op != OpARMMOVWconst {
11256 break
11257 }
11258 c := auxIntToInt32(v_0.AuxInt)
11259 x := v_1
11260 v.reset(OpARMRSBSconst)
11261 v.AuxInt = int32ToAuxInt(c)
11262 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
11263 v0.AuxInt = int32ToAuxInt(d)
11264 v0.AddArg(x)
11265 v.AddArg(v0)
11266 return true
11267 }
11268
11269
11270 for {
11271 d := auxIntToInt32(v.AuxInt)
11272 x := v_0
11273 if v_1.Op != OpARMMOVWconst {
11274 break
11275 }
11276 c := auxIntToInt32(v_1.AuxInt)
11277 v.reset(OpARMSUBSconst)
11278 v.AuxInt = int32ToAuxInt(c >> uint64(d))
11279 v.AddArg(x)
11280 return true
11281 }
11282 return false
11283 }
11284 func rewriteValueARM_OpARMSUBSshiftRAreg(v *Value) bool {
11285 v_2 := v.Args[2]
11286 v_1 := v.Args[1]
11287 v_0 := v.Args[0]
11288 b := v.Block
11289
11290
11291 for {
11292 if v_0.Op != OpARMMOVWconst {
11293 break
11294 }
11295 c := auxIntToInt32(v_0.AuxInt)
11296 x := v_1
11297 y := v_2
11298 v.reset(OpARMRSBSconst)
11299 v.AuxInt = int32ToAuxInt(c)
11300 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
11301 v0.AddArg2(x, y)
11302 v.AddArg(v0)
11303 return true
11304 }
11305
11306
11307
11308 for {
11309 x := v_0
11310 y := v_1
11311 if v_2.Op != OpARMMOVWconst {
11312 break
11313 }
11314 c := auxIntToInt32(v_2.AuxInt)
11315 if !(0 <= c && c < 32) {
11316 break
11317 }
11318 v.reset(OpARMSUBSshiftRA)
11319 v.AuxInt = int32ToAuxInt(c)
11320 v.AddArg2(x, y)
11321 return true
11322 }
11323 return false
11324 }
11325 func rewriteValueARM_OpARMSUBSshiftRL(v *Value) bool {
11326 v_1 := v.Args[1]
11327 v_0 := v.Args[0]
11328 b := v.Block
11329
11330
11331 for {
11332 d := auxIntToInt32(v.AuxInt)
11333 if v_0.Op != OpARMMOVWconst {
11334 break
11335 }
11336 c := auxIntToInt32(v_0.AuxInt)
11337 x := v_1
11338 v.reset(OpARMRSBSconst)
11339 v.AuxInt = int32ToAuxInt(c)
11340 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
11341 v0.AuxInt = int32ToAuxInt(d)
11342 v0.AddArg(x)
11343 v.AddArg(v0)
11344 return true
11345 }
11346
11347
11348 for {
11349 d := auxIntToInt32(v.AuxInt)
11350 x := v_0
11351 if v_1.Op != OpARMMOVWconst {
11352 break
11353 }
11354 c := auxIntToInt32(v_1.AuxInt)
11355 v.reset(OpARMSUBSconst)
11356 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11357 v.AddArg(x)
11358 return true
11359 }
11360 return false
11361 }
11362 func rewriteValueARM_OpARMSUBSshiftRLreg(v *Value) bool {
11363 v_2 := v.Args[2]
11364 v_1 := v.Args[1]
11365 v_0 := v.Args[0]
11366 b := v.Block
11367
11368
11369 for {
11370 if v_0.Op != OpARMMOVWconst {
11371 break
11372 }
11373 c := auxIntToInt32(v_0.AuxInt)
11374 x := v_1
11375 y := v_2
11376 v.reset(OpARMRSBSconst)
11377 v.AuxInt = int32ToAuxInt(c)
11378 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
11379 v0.AddArg2(x, y)
11380 v.AddArg(v0)
11381 return true
11382 }
11383
11384
11385
11386 for {
11387 x := v_0
11388 y := v_1
11389 if v_2.Op != OpARMMOVWconst {
11390 break
11391 }
11392 c := auxIntToInt32(v_2.AuxInt)
11393 if !(0 <= c && c < 32) {
11394 break
11395 }
11396 v.reset(OpARMSUBSshiftRL)
11397 v.AuxInt = int32ToAuxInt(c)
11398 v.AddArg2(x, y)
11399 return true
11400 }
11401 return false
11402 }
11403 func rewriteValueARM_OpARMSUBconst(v *Value) bool {
11404 v_0 := v.Args[0]
11405
11406
11407 for {
11408 off1 := auxIntToInt32(v.AuxInt)
11409 if v_0.Op != OpARMMOVWaddr {
11410 break
11411 }
11412 off2 := auxIntToInt32(v_0.AuxInt)
11413 sym := auxToSym(v_0.Aux)
11414 ptr := v_0.Args[0]
11415 v.reset(OpARMMOVWaddr)
11416 v.AuxInt = int32ToAuxInt(off2 - off1)
11417 v.Aux = symToAux(sym)
11418 v.AddArg(ptr)
11419 return true
11420 }
11421
11422
11423 for {
11424 if auxIntToInt32(v.AuxInt) != 0 {
11425 break
11426 }
11427 x := v_0
11428 v.copyOf(x)
11429 return true
11430 }
11431
11432
11433
11434 for {
11435 c := auxIntToInt32(v.AuxInt)
11436 x := v_0
11437 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
11438 break
11439 }
11440 v.reset(OpARMADDconst)
11441 v.AuxInt = int32ToAuxInt(-c)
11442 v.AddArg(x)
11443 return true
11444 }
11445
11446
11447
11448 for {
11449 c := auxIntToInt32(v.AuxInt)
11450 x := v_0
11451 if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
11452 break
11453 }
11454 v.reset(OpARMADDconst)
11455 v.AuxInt = int32ToAuxInt(-c)
11456 v.AddArg(x)
11457 return true
11458 }
11459
11460
11461 for {
11462 c := auxIntToInt32(v.AuxInt)
11463 if v_0.Op != OpARMMOVWconst {
11464 break
11465 }
11466 d := auxIntToInt32(v_0.AuxInt)
11467 v.reset(OpARMMOVWconst)
11468 v.AuxInt = int32ToAuxInt(d - c)
11469 return true
11470 }
11471
11472
11473 for {
11474 c := auxIntToInt32(v.AuxInt)
11475 if v_0.Op != OpARMSUBconst {
11476 break
11477 }
11478 d := auxIntToInt32(v_0.AuxInt)
11479 x := v_0.Args[0]
11480 v.reset(OpARMADDconst)
11481 v.AuxInt = int32ToAuxInt(-c - d)
11482 v.AddArg(x)
11483 return true
11484 }
11485
11486
11487 for {
11488 c := auxIntToInt32(v.AuxInt)
11489 if v_0.Op != OpARMADDconst {
11490 break
11491 }
11492 d := auxIntToInt32(v_0.AuxInt)
11493 x := v_0.Args[0]
11494 v.reset(OpARMADDconst)
11495 v.AuxInt = int32ToAuxInt(-c + d)
11496 v.AddArg(x)
11497 return true
11498 }
11499
11500
11501 for {
11502 c := auxIntToInt32(v.AuxInt)
11503 if v_0.Op != OpARMRSBconst {
11504 break
11505 }
11506 d := auxIntToInt32(v_0.AuxInt)
11507 x := v_0.Args[0]
11508 v.reset(OpARMRSBconst)
11509 v.AuxInt = int32ToAuxInt(-c + d)
11510 v.AddArg(x)
11511 return true
11512 }
11513 return false
11514 }
11515 func rewriteValueARM_OpARMSUBshiftLL(v *Value) bool {
11516 v_1 := v.Args[1]
11517 v_0 := v.Args[0]
11518 b := v.Block
11519
11520
11521 for {
11522 d := auxIntToInt32(v.AuxInt)
11523 if v_0.Op != OpARMMOVWconst {
11524 break
11525 }
11526 c := auxIntToInt32(v_0.AuxInt)
11527 x := v_1
11528 v.reset(OpARMRSBconst)
11529 v.AuxInt = int32ToAuxInt(c)
11530 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11531 v0.AuxInt = int32ToAuxInt(d)
11532 v0.AddArg(x)
11533 v.AddArg(v0)
11534 return true
11535 }
11536
11537
11538 for {
11539 d := auxIntToInt32(v.AuxInt)
11540 x := v_0
11541 if v_1.Op != OpARMMOVWconst {
11542 break
11543 }
11544 c := auxIntToInt32(v_1.AuxInt)
11545 v.reset(OpARMSUBconst)
11546 v.AuxInt = int32ToAuxInt(c << uint64(d))
11547 v.AddArg(x)
11548 return true
11549 }
11550
11551
11552 for {
11553 c := auxIntToInt32(v.AuxInt)
11554 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
11555 break
11556 }
11557 x := v_0.Args[0]
11558 if x != v_1 {
11559 break
11560 }
11561 v.reset(OpARMMOVWconst)
11562 v.AuxInt = int32ToAuxInt(0)
11563 return true
11564 }
11565 return false
11566 }
11567 func rewriteValueARM_OpARMSUBshiftLLreg(v *Value) bool {
11568 v_2 := v.Args[2]
11569 v_1 := v.Args[1]
11570 v_0 := v.Args[0]
11571 b := v.Block
11572
11573
11574 for {
11575 if v_0.Op != OpARMMOVWconst {
11576 break
11577 }
11578 c := auxIntToInt32(v_0.AuxInt)
11579 x := v_1
11580 y := v_2
11581 v.reset(OpARMRSBconst)
11582 v.AuxInt = int32ToAuxInt(c)
11583 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11584 v0.AddArg2(x, y)
11585 v.AddArg(v0)
11586 return true
11587 }
11588
11589
11590
11591 for {
11592 x := v_0
11593 y := v_1
11594 if v_2.Op != OpARMMOVWconst {
11595 break
11596 }
11597 c := auxIntToInt32(v_2.AuxInt)
11598 if !(0 <= c && c < 32) {
11599 break
11600 }
11601 v.reset(OpARMSUBshiftLL)
11602 v.AuxInt = int32ToAuxInt(c)
11603 v.AddArg2(x, y)
11604 return true
11605 }
11606 return false
11607 }
11608 func rewriteValueARM_OpARMSUBshiftRA(v *Value) bool {
11609 v_1 := v.Args[1]
11610 v_0 := v.Args[0]
11611 b := v.Block
11612
11613
11614 for {
11615 d := auxIntToInt32(v.AuxInt)
11616 if v_0.Op != OpARMMOVWconst {
11617 break
11618 }
11619 c := auxIntToInt32(v_0.AuxInt)
11620 x := v_1
11621 v.reset(OpARMRSBconst)
11622 v.AuxInt = int32ToAuxInt(c)
11623 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
11624 v0.AuxInt = int32ToAuxInt(d)
11625 v0.AddArg(x)
11626 v.AddArg(v0)
11627 return true
11628 }
11629
11630
11631 for {
11632 d := auxIntToInt32(v.AuxInt)
11633 x := v_0
11634 if v_1.Op != OpARMMOVWconst {
11635 break
11636 }
11637 c := auxIntToInt32(v_1.AuxInt)
11638 v.reset(OpARMSUBconst)
11639 v.AuxInt = int32ToAuxInt(c >> uint64(d))
11640 v.AddArg(x)
11641 return true
11642 }
11643
11644
11645 for {
11646 c := auxIntToInt32(v.AuxInt)
11647 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
11648 break
11649 }
11650 x := v_0.Args[0]
11651 if x != v_1 {
11652 break
11653 }
11654 v.reset(OpARMMOVWconst)
11655 v.AuxInt = int32ToAuxInt(0)
11656 return true
11657 }
11658 return false
11659 }
11660 func rewriteValueARM_OpARMSUBshiftRAreg(v *Value) bool {
11661 v_2 := v.Args[2]
11662 v_1 := v.Args[1]
11663 v_0 := v.Args[0]
11664 b := v.Block
11665
11666
11667 for {
11668 if v_0.Op != OpARMMOVWconst {
11669 break
11670 }
11671 c := auxIntToInt32(v_0.AuxInt)
11672 x := v_1
11673 y := v_2
11674 v.reset(OpARMRSBconst)
11675 v.AuxInt = int32ToAuxInt(c)
11676 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
11677 v0.AddArg2(x, y)
11678 v.AddArg(v0)
11679 return true
11680 }
11681
11682
11683
11684 for {
11685 x := v_0
11686 y := v_1
11687 if v_2.Op != OpARMMOVWconst {
11688 break
11689 }
11690 c := auxIntToInt32(v_2.AuxInt)
11691 if !(0 <= c && c < 32) {
11692 break
11693 }
11694 v.reset(OpARMSUBshiftRA)
11695 v.AuxInt = int32ToAuxInt(c)
11696 v.AddArg2(x, y)
11697 return true
11698 }
11699 return false
11700 }
11701 func rewriteValueARM_OpARMSUBshiftRL(v *Value) bool {
11702 v_1 := v.Args[1]
11703 v_0 := v.Args[0]
11704 b := v.Block
11705
11706
11707 for {
11708 d := auxIntToInt32(v.AuxInt)
11709 if v_0.Op != OpARMMOVWconst {
11710 break
11711 }
11712 c := auxIntToInt32(v_0.AuxInt)
11713 x := v_1
11714 v.reset(OpARMRSBconst)
11715 v.AuxInt = int32ToAuxInt(c)
11716 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
11717 v0.AuxInt = int32ToAuxInt(d)
11718 v0.AddArg(x)
11719 v.AddArg(v0)
11720 return true
11721 }
11722
11723
11724 for {
11725 d := auxIntToInt32(v.AuxInt)
11726 x := v_0
11727 if v_1.Op != OpARMMOVWconst {
11728 break
11729 }
11730 c := auxIntToInt32(v_1.AuxInt)
11731 v.reset(OpARMSUBconst)
11732 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11733 v.AddArg(x)
11734 return true
11735 }
11736
11737
11738 for {
11739 c := auxIntToInt32(v.AuxInt)
11740 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
11741 break
11742 }
11743 x := v_0.Args[0]
11744 if x != v_1 {
11745 break
11746 }
11747 v.reset(OpARMMOVWconst)
11748 v.AuxInt = int32ToAuxInt(0)
11749 return true
11750 }
11751 return false
11752 }
11753 func rewriteValueARM_OpARMSUBshiftRLreg(v *Value) bool {
11754 v_2 := v.Args[2]
11755 v_1 := v.Args[1]
11756 v_0 := v.Args[0]
11757 b := v.Block
11758
11759
11760 for {
11761 if v_0.Op != OpARMMOVWconst {
11762 break
11763 }
11764 c := auxIntToInt32(v_0.AuxInt)
11765 x := v_1
11766 y := v_2
11767 v.reset(OpARMRSBconst)
11768 v.AuxInt = int32ToAuxInt(c)
11769 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
11770 v0.AddArg2(x, y)
11771 v.AddArg(v0)
11772 return true
11773 }
11774
11775
11776
11777 for {
11778 x := v_0
11779 y := v_1
11780 if v_2.Op != OpARMMOVWconst {
11781 break
11782 }
11783 c := auxIntToInt32(v_2.AuxInt)
11784 if !(0 <= c && c < 32) {
11785 break
11786 }
11787 v.reset(OpARMSUBshiftRL)
11788 v.AuxInt = int32ToAuxInt(c)
11789 v.AddArg2(x, y)
11790 return true
11791 }
11792 return false
11793 }
11794 func rewriteValueARM_OpARMTEQ(v *Value) bool {
11795 v_1 := v.Args[1]
11796 v_0 := v.Args[0]
11797
11798
11799 for {
11800 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11801 x := v_0
11802 if v_1.Op != OpARMMOVWconst {
11803 continue
11804 }
11805 c := auxIntToInt32(v_1.AuxInt)
11806 v.reset(OpARMTEQconst)
11807 v.AuxInt = int32ToAuxInt(c)
11808 v.AddArg(x)
11809 return true
11810 }
11811 break
11812 }
11813
11814
11815 for {
11816 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11817 x := v_0
11818 if v_1.Op != OpARMSLLconst {
11819 continue
11820 }
11821 c := auxIntToInt32(v_1.AuxInt)
11822 y := v_1.Args[0]
11823 v.reset(OpARMTEQshiftLL)
11824 v.AuxInt = int32ToAuxInt(c)
11825 v.AddArg2(x, y)
11826 return true
11827 }
11828 break
11829 }
11830
11831
11832 for {
11833 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11834 x := v_0
11835 if v_1.Op != OpARMSRLconst {
11836 continue
11837 }
11838 c := auxIntToInt32(v_1.AuxInt)
11839 y := v_1.Args[0]
11840 v.reset(OpARMTEQshiftRL)
11841 v.AuxInt = int32ToAuxInt(c)
11842 v.AddArg2(x, y)
11843 return true
11844 }
11845 break
11846 }
11847
11848
11849 for {
11850 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11851 x := v_0
11852 if v_1.Op != OpARMSRAconst {
11853 continue
11854 }
11855 c := auxIntToInt32(v_1.AuxInt)
11856 y := v_1.Args[0]
11857 v.reset(OpARMTEQshiftRA)
11858 v.AuxInt = int32ToAuxInt(c)
11859 v.AddArg2(x, y)
11860 return true
11861 }
11862 break
11863 }
11864
11865
11866 for {
11867 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11868 x := v_0
11869 if v_1.Op != OpARMSLL {
11870 continue
11871 }
11872 z := v_1.Args[1]
11873 y := v_1.Args[0]
11874 v.reset(OpARMTEQshiftLLreg)
11875 v.AddArg3(x, y, z)
11876 return true
11877 }
11878 break
11879 }
11880
11881
11882 for {
11883 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11884 x := v_0
11885 if v_1.Op != OpARMSRL {
11886 continue
11887 }
11888 z := v_1.Args[1]
11889 y := v_1.Args[0]
11890 v.reset(OpARMTEQshiftRLreg)
11891 v.AddArg3(x, y, z)
11892 return true
11893 }
11894 break
11895 }
11896
11897
11898 for {
11899 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11900 x := v_0
11901 if v_1.Op != OpARMSRA {
11902 continue
11903 }
11904 z := v_1.Args[1]
11905 y := v_1.Args[0]
11906 v.reset(OpARMTEQshiftRAreg)
11907 v.AddArg3(x, y, z)
11908 return true
11909 }
11910 break
11911 }
11912 return false
11913 }
11914 func rewriteValueARM_OpARMTEQconst(v *Value) bool {
11915 v_0 := v.Args[0]
11916
11917
11918 for {
11919 y := auxIntToInt32(v.AuxInt)
11920 if v_0.Op != OpARMMOVWconst {
11921 break
11922 }
11923 x := auxIntToInt32(v_0.AuxInt)
11924 v.reset(OpARMFlagConstant)
11925 v.AuxInt = flagConstantToAuxInt(logicFlags32(x ^ y))
11926 return true
11927 }
11928 return false
11929 }
11930 func rewriteValueARM_OpARMTEQshiftLL(v *Value) bool {
11931 v_1 := v.Args[1]
11932 v_0 := v.Args[0]
11933 b := v.Block
11934
11935
11936 for {
11937 d := auxIntToInt32(v.AuxInt)
11938 if v_0.Op != OpARMMOVWconst {
11939 break
11940 }
11941 c := auxIntToInt32(v_0.AuxInt)
11942 x := v_1
11943 v.reset(OpARMTEQconst)
11944 v.AuxInt = int32ToAuxInt(c)
11945 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11946 v0.AuxInt = int32ToAuxInt(d)
11947 v0.AddArg(x)
11948 v.AddArg(v0)
11949 return true
11950 }
11951
11952
11953 for {
11954 d := auxIntToInt32(v.AuxInt)
11955 x := v_0
11956 if v_1.Op != OpARMMOVWconst {
11957 break
11958 }
11959 c := auxIntToInt32(v_1.AuxInt)
11960 v.reset(OpARMTEQconst)
11961 v.AuxInt = int32ToAuxInt(c << uint64(d))
11962 v.AddArg(x)
11963 return true
11964 }
11965 return false
11966 }
11967 func rewriteValueARM_OpARMTEQshiftLLreg(v *Value) bool {
11968 v_2 := v.Args[2]
11969 v_1 := v.Args[1]
11970 v_0 := v.Args[0]
11971 b := v.Block
11972
11973
11974 for {
11975 if v_0.Op != OpARMMOVWconst {
11976 break
11977 }
11978 c := auxIntToInt32(v_0.AuxInt)
11979 x := v_1
11980 y := v_2
11981 v.reset(OpARMTEQconst)
11982 v.AuxInt = int32ToAuxInt(c)
11983 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11984 v0.AddArg2(x, y)
11985 v.AddArg(v0)
11986 return true
11987 }
11988
11989
11990
11991 for {
11992 x := v_0
11993 y := v_1
11994 if v_2.Op != OpARMMOVWconst {
11995 break
11996 }
11997 c := auxIntToInt32(v_2.AuxInt)
11998 if !(0 <= c && c < 32) {
11999 break
12000 }
12001 v.reset(OpARMTEQshiftLL)
12002 v.AuxInt = int32ToAuxInt(c)
12003 v.AddArg2(x, y)
12004 return true
12005 }
12006 return false
12007 }
12008 func rewriteValueARM_OpARMTEQshiftRA(v *Value) bool {
12009 v_1 := v.Args[1]
12010 v_0 := v.Args[0]
12011 b := v.Block
12012
12013
12014 for {
12015 d := auxIntToInt32(v.AuxInt)
12016 if v_0.Op != OpARMMOVWconst {
12017 break
12018 }
12019 c := auxIntToInt32(v_0.AuxInt)
12020 x := v_1
12021 v.reset(OpARMTEQconst)
12022 v.AuxInt = int32ToAuxInt(c)
12023 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
12024 v0.AuxInt = int32ToAuxInt(d)
12025 v0.AddArg(x)
12026 v.AddArg(v0)
12027 return true
12028 }
12029
12030
12031 for {
12032 d := auxIntToInt32(v.AuxInt)
12033 x := v_0
12034 if v_1.Op != OpARMMOVWconst {
12035 break
12036 }
12037 c := auxIntToInt32(v_1.AuxInt)
12038 v.reset(OpARMTEQconst)
12039 v.AuxInt = int32ToAuxInt(c >> uint64(d))
12040 v.AddArg(x)
12041 return true
12042 }
12043 return false
12044 }
12045 func rewriteValueARM_OpARMTEQshiftRAreg(v *Value) bool {
12046 v_2 := v.Args[2]
12047 v_1 := v.Args[1]
12048 v_0 := v.Args[0]
12049 b := v.Block
12050
12051
12052 for {
12053 if v_0.Op != OpARMMOVWconst {
12054 break
12055 }
12056 c := auxIntToInt32(v_0.AuxInt)
12057 x := v_1
12058 y := v_2
12059 v.reset(OpARMTEQconst)
12060 v.AuxInt = int32ToAuxInt(c)
12061 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12062 v0.AddArg2(x, y)
12063 v.AddArg(v0)
12064 return true
12065 }
12066
12067
12068
12069 for {
12070 x := v_0
12071 y := v_1
12072 if v_2.Op != OpARMMOVWconst {
12073 break
12074 }
12075 c := auxIntToInt32(v_2.AuxInt)
12076 if !(0 <= c && c < 32) {
12077 break
12078 }
12079 v.reset(OpARMTEQshiftRA)
12080 v.AuxInt = int32ToAuxInt(c)
12081 v.AddArg2(x, y)
12082 return true
12083 }
12084 return false
12085 }
12086 func rewriteValueARM_OpARMTEQshiftRL(v *Value) bool {
12087 v_1 := v.Args[1]
12088 v_0 := v.Args[0]
12089 b := v.Block
12090
12091
12092 for {
12093 d := auxIntToInt32(v.AuxInt)
12094 if v_0.Op != OpARMMOVWconst {
12095 break
12096 }
12097 c := auxIntToInt32(v_0.AuxInt)
12098 x := v_1
12099 v.reset(OpARMTEQconst)
12100 v.AuxInt = int32ToAuxInt(c)
12101 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12102 v0.AuxInt = int32ToAuxInt(d)
12103 v0.AddArg(x)
12104 v.AddArg(v0)
12105 return true
12106 }
12107
12108
12109 for {
12110 d := auxIntToInt32(v.AuxInt)
12111 x := v_0
12112 if v_1.Op != OpARMMOVWconst {
12113 break
12114 }
12115 c := auxIntToInt32(v_1.AuxInt)
12116 v.reset(OpARMTEQconst)
12117 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12118 v.AddArg(x)
12119 return true
12120 }
12121 return false
12122 }
12123 func rewriteValueARM_OpARMTEQshiftRLreg(v *Value) bool {
12124 v_2 := v.Args[2]
12125 v_1 := v.Args[1]
12126 v_0 := v.Args[0]
12127 b := v.Block
12128
12129
12130 for {
12131 if v_0.Op != OpARMMOVWconst {
12132 break
12133 }
12134 c := auxIntToInt32(v_0.AuxInt)
12135 x := v_1
12136 y := v_2
12137 v.reset(OpARMTEQconst)
12138 v.AuxInt = int32ToAuxInt(c)
12139 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
12140 v0.AddArg2(x, y)
12141 v.AddArg(v0)
12142 return true
12143 }
12144
12145
12146
12147 for {
12148 x := v_0
12149 y := v_1
12150 if v_2.Op != OpARMMOVWconst {
12151 break
12152 }
12153 c := auxIntToInt32(v_2.AuxInt)
12154 if !(0 <= c && c < 32) {
12155 break
12156 }
12157 v.reset(OpARMTEQshiftRL)
12158 v.AuxInt = int32ToAuxInt(c)
12159 v.AddArg2(x, y)
12160 return true
12161 }
12162 return false
12163 }
12164 func rewriteValueARM_OpARMTST(v *Value) bool {
12165 v_1 := v.Args[1]
12166 v_0 := v.Args[0]
12167
12168
12169 for {
12170 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12171 x := v_0
12172 if v_1.Op != OpARMMOVWconst {
12173 continue
12174 }
12175 c := auxIntToInt32(v_1.AuxInt)
12176 v.reset(OpARMTSTconst)
12177 v.AuxInt = int32ToAuxInt(c)
12178 v.AddArg(x)
12179 return true
12180 }
12181 break
12182 }
12183
12184
12185 for {
12186 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12187 x := v_0
12188 if v_1.Op != OpARMSLLconst {
12189 continue
12190 }
12191 c := auxIntToInt32(v_1.AuxInt)
12192 y := v_1.Args[0]
12193 v.reset(OpARMTSTshiftLL)
12194 v.AuxInt = int32ToAuxInt(c)
12195 v.AddArg2(x, y)
12196 return true
12197 }
12198 break
12199 }
12200
12201
12202 for {
12203 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12204 x := v_0
12205 if v_1.Op != OpARMSRLconst {
12206 continue
12207 }
12208 c := auxIntToInt32(v_1.AuxInt)
12209 y := v_1.Args[0]
12210 v.reset(OpARMTSTshiftRL)
12211 v.AuxInt = int32ToAuxInt(c)
12212 v.AddArg2(x, y)
12213 return true
12214 }
12215 break
12216 }
12217
12218
12219 for {
12220 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12221 x := v_0
12222 if v_1.Op != OpARMSRAconst {
12223 continue
12224 }
12225 c := auxIntToInt32(v_1.AuxInt)
12226 y := v_1.Args[0]
12227 v.reset(OpARMTSTshiftRA)
12228 v.AuxInt = int32ToAuxInt(c)
12229 v.AddArg2(x, y)
12230 return true
12231 }
12232 break
12233 }
12234
12235
12236 for {
12237 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12238 x := v_0
12239 if v_1.Op != OpARMSLL {
12240 continue
12241 }
12242 z := v_1.Args[1]
12243 y := v_1.Args[0]
12244 v.reset(OpARMTSTshiftLLreg)
12245 v.AddArg3(x, y, z)
12246 return true
12247 }
12248 break
12249 }
12250
12251
12252 for {
12253 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12254 x := v_0
12255 if v_1.Op != OpARMSRL {
12256 continue
12257 }
12258 z := v_1.Args[1]
12259 y := v_1.Args[0]
12260 v.reset(OpARMTSTshiftRLreg)
12261 v.AddArg3(x, y, z)
12262 return true
12263 }
12264 break
12265 }
12266
12267
12268 for {
12269 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12270 x := v_0
12271 if v_1.Op != OpARMSRA {
12272 continue
12273 }
12274 z := v_1.Args[1]
12275 y := v_1.Args[0]
12276 v.reset(OpARMTSTshiftRAreg)
12277 v.AddArg3(x, y, z)
12278 return true
12279 }
12280 break
12281 }
12282 return false
12283 }
12284 func rewriteValueARM_OpARMTSTconst(v *Value) bool {
12285 v_0 := v.Args[0]
12286
12287
12288 for {
12289 y := auxIntToInt32(v.AuxInt)
12290 if v_0.Op != OpARMMOVWconst {
12291 break
12292 }
12293 x := auxIntToInt32(v_0.AuxInt)
12294 v.reset(OpARMFlagConstant)
12295 v.AuxInt = flagConstantToAuxInt(logicFlags32(x & y))
12296 return true
12297 }
12298 return false
12299 }
12300 func rewriteValueARM_OpARMTSTshiftLL(v *Value) bool {
12301 v_1 := v.Args[1]
12302 v_0 := v.Args[0]
12303 b := v.Block
12304
12305
12306 for {
12307 d := auxIntToInt32(v.AuxInt)
12308 if v_0.Op != OpARMMOVWconst {
12309 break
12310 }
12311 c := auxIntToInt32(v_0.AuxInt)
12312 x := v_1
12313 v.reset(OpARMTSTconst)
12314 v.AuxInt = int32ToAuxInt(c)
12315 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
12316 v0.AuxInt = int32ToAuxInt(d)
12317 v0.AddArg(x)
12318 v.AddArg(v0)
12319 return true
12320 }
12321
12322
12323 for {
12324 d := auxIntToInt32(v.AuxInt)
12325 x := v_0
12326 if v_1.Op != OpARMMOVWconst {
12327 break
12328 }
12329 c := auxIntToInt32(v_1.AuxInt)
12330 v.reset(OpARMTSTconst)
12331 v.AuxInt = int32ToAuxInt(c << uint64(d))
12332 v.AddArg(x)
12333 return true
12334 }
12335 return false
12336 }
12337 func rewriteValueARM_OpARMTSTshiftLLreg(v *Value) bool {
12338 v_2 := v.Args[2]
12339 v_1 := v.Args[1]
12340 v_0 := v.Args[0]
12341 b := v.Block
12342
12343
12344 for {
12345 if v_0.Op != OpARMMOVWconst {
12346 break
12347 }
12348 c := auxIntToInt32(v_0.AuxInt)
12349 x := v_1
12350 y := v_2
12351 v.reset(OpARMTSTconst)
12352 v.AuxInt = int32ToAuxInt(c)
12353 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
12354 v0.AddArg2(x, y)
12355 v.AddArg(v0)
12356 return true
12357 }
12358
12359
12360
12361 for {
12362 x := v_0
12363 y := v_1
12364 if v_2.Op != OpARMMOVWconst {
12365 break
12366 }
12367 c := auxIntToInt32(v_2.AuxInt)
12368 if !(0 <= c && c < 32) {
12369 break
12370 }
12371 v.reset(OpARMTSTshiftLL)
12372 v.AuxInt = int32ToAuxInt(c)
12373 v.AddArg2(x, y)
12374 return true
12375 }
12376 return false
12377 }
12378 func rewriteValueARM_OpARMTSTshiftRA(v *Value) bool {
12379 v_1 := v.Args[1]
12380 v_0 := v.Args[0]
12381 b := v.Block
12382
12383
12384 for {
12385 d := auxIntToInt32(v.AuxInt)
12386 if v_0.Op != OpARMMOVWconst {
12387 break
12388 }
12389 c := auxIntToInt32(v_0.AuxInt)
12390 x := v_1
12391 v.reset(OpARMTSTconst)
12392 v.AuxInt = int32ToAuxInt(c)
12393 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
12394 v0.AuxInt = int32ToAuxInt(d)
12395 v0.AddArg(x)
12396 v.AddArg(v0)
12397 return true
12398 }
12399
12400
12401 for {
12402 d := auxIntToInt32(v.AuxInt)
12403 x := v_0
12404 if v_1.Op != OpARMMOVWconst {
12405 break
12406 }
12407 c := auxIntToInt32(v_1.AuxInt)
12408 v.reset(OpARMTSTconst)
12409 v.AuxInt = int32ToAuxInt(c >> uint64(d))
12410 v.AddArg(x)
12411 return true
12412 }
12413 return false
12414 }
12415 func rewriteValueARM_OpARMTSTshiftRAreg(v *Value) bool {
12416 v_2 := v.Args[2]
12417 v_1 := v.Args[1]
12418 v_0 := v.Args[0]
12419 b := v.Block
12420
12421
12422 for {
12423 if v_0.Op != OpARMMOVWconst {
12424 break
12425 }
12426 c := auxIntToInt32(v_0.AuxInt)
12427 x := v_1
12428 y := v_2
12429 v.reset(OpARMTSTconst)
12430 v.AuxInt = int32ToAuxInt(c)
12431 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12432 v0.AddArg2(x, y)
12433 v.AddArg(v0)
12434 return true
12435 }
12436
12437
12438
12439 for {
12440 x := v_0
12441 y := v_1
12442 if v_2.Op != OpARMMOVWconst {
12443 break
12444 }
12445 c := auxIntToInt32(v_2.AuxInt)
12446 if !(0 <= c && c < 32) {
12447 break
12448 }
12449 v.reset(OpARMTSTshiftRA)
12450 v.AuxInt = int32ToAuxInt(c)
12451 v.AddArg2(x, y)
12452 return true
12453 }
12454 return false
12455 }
12456 func rewriteValueARM_OpARMTSTshiftRL(v *Value) bool {
12457 v_1 := v.Args[1]
12458 v_0 := v.Args[0]
12459 b := v.Block
12460
12461
12462 for {
12463 d := auxIntToInt32(v.AuxInt)
12464 if v_0.Op != OpARMMOVWconst {
12465 break
12466 }
12467 c := auxIntToInt32(v_0.AuxInt)
12468 x := v_1
12469 v.reset(OpARMTSTconst)
12470 v.AuxInt = int32ToAuxInt(c)
12471 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12472 v0.AuxInt = int32ToAuxInt(d)
12473 v0.AddArg(x)
12474 v.AddArg(v0)
12475 return true
12476 }
12477
12478
12479 for {
12480 d := auxIntToInt32(v.AuxInt)
12481 x := v_0
12482 if v_1.Op != OpARMMOVWconst {
12483 break
12484 }
12485 c := auxIntToInt32(v_1.AuxInt)
12486 v.reset(OpARMTSTconst)
12487 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12488 v.AddArg(x)
12489 return true
12490 }
12491 return false
12492 }
12493 func rewriteValueARM_OpARMTSTshiftRLreg(v *Value) bool {
12494 v_2 := v.Args[2]
12495 v_1 := v.Args[1]
12496 v_0 := v.Args[0]
12497 b := v.Block
12498
12499
12500 for {
12501 if v_0.Op != OpARMMOVWconst {
12502 break
12503 }
12504 c := auxIntToInt32(v_0.AuxInt)
12505 x := v_1
12506 y := v_2
12507 v.reset(OpARMTSTconst)
12508 v.AuxInt = int32ToAuxInt(c)
12509 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
12510 v0.AddArg2(x, y)
12511 v.AddArg(v0)
12512 return true
12513 }
12514
12515
12516
12517 for {
12518 x := v_0
12519 y := v_1
12520 if v_2.Op != OpARMMOVWconst {
12521 break
12522 }
12523 c := auxIntToInt32(v_2.AuxInt)
12524 if !(0 <= c && c < 32) {
12525 break
12526 }
12527 v.reset(OpARMTSTshiftRL)
12528 v.AuxInt = int32ToAuxInt(c)
12529 v.AddArg2(x, y)
12530 return true
12531 }
12532 return false
12533 }
12534 func rewriteValueARM_OpARMXOR(v *Value) bool {
12535 v_1 := v.Args[1]
12536 v_0 := v.Args[0]
12537
12538
12539 for {
12540 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12541 x := v_0
12542 if v_1.Op != OpARMMOVWconst {
12543 continue
12544 }
12545 c := auxIntToInt32(v_1.AuxInt)
12546 v.reset(OpARMXORconst)
12547 v.AuxInt = int32ToAuxInt(c)
12548 v.AddArg(x)
12549 return true
12550 }
12551 break
12552 }
12553
12554
12555 for {
12556 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12557 x := v_0
12558 if v_1.Op != OpARMSLLconst {
12559 continue
12560 }
12561 c := auxIntToInt32(v_1.AuxInt)
12562 y := v_1.Args[0]
12563 v.reset(OpARMXORshiftLL)
12564 v.AuxInt = int32ToAuxInt(c)
12565 v.AddArg2(x, y)
12566 return true
12567 }
12568 break
12569 }
12570
12571
12572 for {
12573 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12574 x := v_0
12575 if v_1.Op != OpARMSRLconst {
12576 continue
12577 }
12578 c := auxIntToInt32(v_1.AuxInt)
12579 y := v_1.Args[0]
12580 v.reset(OpARMXORshiftRL)
12581 v.AuxInt = int32ToAuxInt(c)
12582 v.AddArg2(x, y)
12583 return true
12584 }
12585 break
12586 }
12587
12588
12589 for {
12590 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12591 x := v_0
12592 if v_1.Op != OpARMSRAconst {
12593 continue
12594 }
12595 c := auxIntToInt32(v_1.AuxInt)
12596 y := v_1.Args[0]
12597 v.reset(OpARMXORshiftRA)
12598 v.AuxInt = int32ToAuxInt(c)
12599 v.AddArg2(x, y)
12600 return true
12601 }
12602 break
12603 }
12604
12605
12606 for {
12607 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12608 x := v_0
12609 if v_1.Op != OpARMSRRconst {
12610 continue
12611 }
12612 c := auxIntToInt32(v_1.AuxInt)
12613 y := v_1.Args[0]
12614 v.reset(OpARMXORshiftRR)
12615 v.AuxInt = int32ToAuxInt(c)
12616 v.AddArg2(x, y)
12617 return true
12618 }
12619 break
12620 }
12621
12622
12623 for {
12624 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12625 x := v_0
12626 if v_1.Op != OpARMSLL {
12627 continue
12628 }
12629 z := v_1.Args[1]
12630 y := v_1.Args[0]
12631 v.reset(OpARMXORshiftLLreg)
12632 v.AddArg3(x, y, z)
12633 return true
12634 }
12635 break
12636 }
12637
12638
12639 for {
12640 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12641 x := v_0
12642 if v_1.Op != OpARMSRL {
12643 continue
12644 }
12645 z := v_1.Args[1]
12646 y := v_1.Args[0]
12647 v.reset(OpARMXORshiftRLreg)
12648 v.AddArg3(x, y, z)
12649 return true
12650 }
12651 break
12652 }
12653
12654
12655 for {
12656 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12657 x := v_0
12658 if v_1.Op != OpARMSRA {
12659 continue
12660 }
12661 z := v_1.Args[1]
12662 y := v_1.Args[0]
12663 v.reset(OpARMXORshiftRAreg)
12664 v.AddArg3(x, y, z)
12665 return true
12666 }
12667 break
12668 }
12669
12670
12671 for {
12672 x := v_0
12673 if x != v_1 {
12674 break
12675 }
12676 v.reset(OpARMMOVWconst)
12677 v.AuxInt = int32ToAuxInt(0)
12678 return true
12679 }
12680 return false
12681 }
12682 func rewriteValueARM_OpARMXORconst(v *Value) bool {
12683 v_0 := v.Args[0]
12684
12685
12686 for {
12687 if auxIntToInt32(v.AuxInt) != 0 {
12688 break
12689 }
12690 x := v_0
12691 v.copyOf(x)
12692 return true
12693 }
12694
12695
12696 for {
12697 c := auxIntToInt32(v.AuxInt)
12698 if v_0.Op != OpARMMOVWconst {
12699 break
12700 }
12701 d := auxIntToInt32(v_0.AuxInt)
12702 v.reset(OpARMMOVWconst)
12703 v.AuxInt = int32ToAuxInt(c ^ d)
12704 return true
12705 }
12706
12707
12708 for {
12709 c := auxIntToInt32(v.AuxInt)
12710 if v_0.Op != OpARMXORconst {
12711 break
12712 }
12713 d := auxIntToInt32(v_0.AuxInt)
12714 x := v_0.Args[0]
12715 v.reset(OpARMXORconst)
12716 v.AuxInt = int32ToAuxInt(c ^ d)
12717 v.AddArg(x)
12718 return true
12719 }
12720 return false
12721 }
12722 func rewriteValueARM_OpARMXORshiftLL(v *Value) bool {
12723 v_1 := v.Args[1]
12724 v_0 := v.Args[0]
12725 b := v.Block
12726 typ := &b.Func.Config.Types
12727
12728
12729 for {
12730 d := auxIntToInt32(v.AuxInt)
12731 if v_0.Op != OpARMMOVWconst {
12732 break
12733 }
12734 c := auxIntToInt32(v_0.AuxInt)
12735 x := v_1
12736 v.reset(OpARMXORconst)
12737 v.AuxInt = int32ToAuxInt(c)
12738 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
12739 v0.AuxInt = int32ToAuxInt(d)
12740 v0.AddArg(x)
12741 v.AddArg(v0)
12742 return true
12743 }
12744
12745
12746 for {
12747 d := auxIntToInt32(v.AuxInt)
12748 x := v_0
12749 if v_1.Op != OpARMMOVWconst {
12750 break
12751 }
12752 c := auxIntToInt32(v_1.AuxInt)
12753 v.reset(OpARMXORconst)
12754 v.AuxInt = int32ToAuxInt(c << uint64(d))
12755 v.AddArg(x)
12756 return true
12757 }
12758
12759
12760 for {
12761 c := auxIntToInt32(v.AuxInt)
12762 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
12763 break
12764 }
12765 x := v_0.Args[0]
12766 if x != v_1 {
12767 break
12768 }
12769 v.reset(OpARMSRRconst)
12770 v.AuxInt = int32ToAuxInt(32 - c)
12771 v.AddArg(x)
12772 return true
12773 }
12774
12775
12776 for {
12777 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMBFXU || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != int32(armBFAuxInt(8, 8)) {
12778 break
12779 }
12780 x := v_0.Args[0]
12781 if x != v_1 {
12782 break
12783 }
12784 v.reset(OpARMREV16)
12785 v.AddArg(x)
12786 return true
12787 }
12788
12789
12790
12791 for {
12792 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
12793 break
12794 }
12795 v_0_0 := v_0.Args[0]
12796 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
12797 break
12798 }
12799 x := v_0_0.Args[0]
12800 if x != v_1 || !(buildcfg.GOARM >= 6) {
12801 break
12802 }
12803 v.reset(OpARMREV16)
12804 v.AddArg(x)
12805 return true
12806 }
12807
12808
12809 for {
12810 c := auxIntToInt32(v.AuxInt)
12811 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
12812 break
12813 }
12814 x := v_0.Args[0]
12815 if x != v_1 {
12816 break
12817 }
12818 v.reset(OpARMMOVWconst)
12819 v.AuxInt = int32ToAuxInt(0)
12820 return true
12821 }
12822 return false
12823 }
12824 func rewriteValueARM_OpARMXORshiftLLreg(v *Value) bool {
12825 v_2 := v.Args[2]
12826 v_1 := v.Args[1]
12827 v_0 := v.Args[0]
12828 b := v.Block
12829
12830
12831 for {
12832 if v_0.Op != OpARMMOVWconst {
12833 break
12834 }
12835 c := auxIntToInt32(v_0.AuxInt)
12836 x := v_1
12837 y := v_2
12838 v.reset(OpARMXORconst)
12839 v.AuxInt = int32ToAuxInt(c)
12840 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
12841 v0.AddArg2(x, y)
12842 v.AddArg(v0)
12843 return true
12844 }
12845
12846
12847
12848 for {
12849 x := v_0
12850 y := v_1
12851 if v_2.Op != OpARMMOVWconst {
12852 break
12853 }
12854 c := auxIntToInt32(v_2.AuxInt)
12855 if !(0 <= c && c < 32) {
12856 break
12857 }
12858 v.reset(OpARMXORshiftLL)
12859 v.AuxInt = int32ToAuxInt(c)
12860 v.AddArg2(x, y)
12861 return true
12862 }
12863 return false
12864 }
12865 func rewriteValueARM_OpARMXORshiftRA(v *Value) bool {
12866 v_1 := v.Args[1]
12867 v_0 := v.Args[0]
12868 b := v.Block
12869
12870
12871 for {
12872 d := auxIntToInt32(v.AuxInt)
12873 if v_0.Op != OpARMMOVWconst {
12874 break
12875 }
12876 c := auxIntToInt32(v_0.AuxInt)
12877 x := v_1
12878 v.reset(OpARMXORconst)
12879 v.AuxInt = int32ToAuxInt(c)
12880 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
12881 v0.AuxInt = int32ToAuxInt(d)
12882 v0.AddArg(x)
12883 v.AddArg(v0)
12884 return true
12885 }
12886
12887
12888 for {
12889 d := auxIntToInt32(v.AuxInt)
12890 x := v_0
12891 if v_1.Op != OpARMMOVWconst {
12892 break
12893 }
12894 c := auxIntToInt32(v_1.AuxInt)
12895 v.reset(OpARMXORconst)
12896 v.AuxInt = int32ToAuxInt(c >> uint64(d))
12897 v.AddArg(x)
12898 return true
12899 }
12900
12901
12902 for {
12903 c := auxIntToInt32(v.AuxInt)
12904 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
12905 break
12906 }
12907 x := v_0.Args[0]
12908 if x != v_1 {
12909 break
12910 }
12911 v.reset(OpARMMOVWconst)
12912 v.AuxInt = int32ToAuxInt(0)
12913 return true
12914 }
12915 return false
12916 }
12917 func rewriteValueARM_OpARMXORshiftRAreg(v *Value) bool {
12918 v_2 := v.Args[2]
12919 v_1 := v.Args[1]
12920 v_0 := v.Args[0]
12921 b := v.Block
12922
12923
12924 for {
12925 if v_0.Op != OpARMMOVWconst {
12926 break
12927 }
12928 c := auxIntToInt32(v_0.AuxInt)
12929 x := v_1
12930 y := v_2
12931 v.reset(OpARMXORconst)
12932 v.AuxInt = int32ToAuxInt(c)
12933 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12934 v0.AddArg2(x, y)
12935 v.AddArg(v0)
12936 return true
12937 }
12938
12939
12940
12941 for {
12942 x := v_0
12943 y := v_1
12944 if v_2.Op != OpARMMOVWconst {
12945 break
12946 }
12947 c := auxIntToInt32(v_2.AuxInt)
12948 if !(0 <= c && c < 32) {
12949 break
12950 }
12951 v.reset(OpARMXORshiftRA)
12952 v.AuxInt = int32ToAuxInt(c)
12953 v.AddArg2(x, y)
12954 return true
12955 }
12956 return false
12957 }
12958 func rewriteValueARM_OpARMXORshiftRL(v *Value) bool {
12959 v_1 := v.Args[1]
12960 v_0 := v.Args[0]
12961 b := v.Block
12962
12963
12964 for {
12965 d := auxIntToInt32(v.AuxInt)
12966 if v_0.Op != OpARMMOVWconst {
12967 break
12968 }
12969 c := auxIntToInt32(v_0.AuxInt)
12970 x := v_1
12971 v.reset(OpARMXORconst)
12972 v.AuxInt = int32ToAuxInt(c)
12973 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12974 v0.AuxInt = int32ToAuxInt(d)
12975 v0.AddArg(x)
12976 v.AddArg(v0)
12977 return true
12978 }
12979
12980
12981 for {
12982 d := auxIntToInt32(v.AuxInt)
12983 x := v_0
12984 if v_1.Op != OpARMMOVWconst {
12985 break
12986 }
12987 c := auxIntToInt32(v_1.AuxInt)
12988 v.reset(OpARMXORconst)
12989 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12990 v.AddArg(x)
12991 return true
12992 }
12993
12994
12995 for {
12996 c := auxIntToInt32(v.AuxInt)
12997 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != 32-c {
12998 break
12999 }
13000 x := v_0.Args[0]
13001 if x != v_1 {
13002 break
13003 }
13004 v.reset(OpARMSRRconst)
13005 v.AuxInt = int32ToAuxInt(c)
13006 v.AddArg(x)
13007 return true
13008 }
13009
13010
13011 for {
13012 c := auxIntToInt32(v.AuxInt)
13013 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
13014 break
13015 }
13016 x := v_0.Args[0]
13017 if x != v_1 {
13018 break
13019 }
13020 v.reset(OpARMMOVWconst)
13021 v.AuxInt = int32ToAuxInt(0)
13022 return true
13023 }
13024 return false
13025 }
13026 func rewriteValueARM_OpARMXORshiftRLreg(v *Value) bool {
13027 v_2 := v.Args[2]
13028 v_1 := v.Args[1]
13029 v_0 := v.Args[0]
13030 b := v.Block
13031
13032
13033 for {
13034 if v_0.Op != OpARMMOVWconst {
13035 break
13036 }
13037 c := auxIntToInt32(v_0.AuxInt)
13038 x := v_1
13039 y := v_2
13040 v.reset(OpARMXORconst)
13041 v.AuxInt = int32ToAuxInt(c)
13042 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
13043 v0.AddArg2(x, y)
13044 v.AddArg(v0)
13045 return true
13046 }
13047
13048
13049
13050 for {
13051 x := v_0
13052 y := v_1
13053 if v_2.Op != OpARMMOVWconst {
13054 break
13055 }
13056 c := auxIntToInt32(v_2.AuxInt)
13057 if !(0 <= c && c < 32) {
13058 break
13059 }
13060 v.reset(OpARMXORshiftRL)
13061 v.AuxInt = int32ToAuxInt(c)
13062 v.AddArg2(x, y)
13063 return true
13064 }
13065 return false
13066 }
13067 func rewriteValueARM_OpARMXORshiftRR(v *Value) bool {
13068 v_1 := v.Args[1]
13069 v_0 := v.Args[0]
13070 b := v.Block
13071
13072
13073 for {
13074 d := auxIntToInt32(v.AuxInt)
13075 if v_0.Op != OpARMMOVWconst {
13076 break
13077 }
13078 c := auxIntToInt32(v_0.AuxInt)
13079 x := v_1
13080 v.reset(OpARMXORconst)
13081 v.AuxInt = int32ToAuxInt(c)
13082 v0 := b.NewValue0(v.Pos, OpARMSRRconst, x.Type)
13083 v0.AuxInt = int32ToAuxInt(d)
13084 v0.AddArg(x)
13085 v.AddArg(v0)
13086 return true
13087 }
13088
13089
13090 for {
13091 d := auxIntToInt32(v.AuxInt)
13092 x := v_0
13093 if v_1.Op != OpARMMOVWconst {
13094 break
13095 }
13096 c := auxIntToInt32(v_1.AuxInt)
13097 v.reset(OpARMXORconst)
13098 v.AuxInt = int32ToAuxInt(int32(uint32(c)>>uint64(d) | uint32(c)<<uint64(32-d)))
13099 v.AddArg(x)
13100 return true
13101 }
13102 return false
13103 }
13104 func rewriteValueARM_OpAddr(v *Value) bool {
13105 v_0 := v.Args[0]
13106
13107
13108 for {
13109 sym := auxToSym(v.Aux)
13110 base := v_0
13111 v.reset(OpARMMOVWaddr)
13112 v.Aux = symToAux(sym)
13113 v.AddArg(base)
13114 return true
13115 }
13116 }
13117 func rewriteValueARM_OpAvg32u(v *Value) bool {
13118 v_1 := v.Args[1]
13119 v_0 := v.Args[0]
13120 b := v.Block
13121
13122
13123 for {
13124 t := v.Type
13125 x := v_0
13126 y := v_1
13127 v.reset(OpARMADD)
13128 v0 := b.NewValue0(v.Pos, OpARMSRLconst, t)
13129 v0.AuxInt = int32ToAuxInt(1)
13130 v1 := b.NewValue0(v.Pos, OpARMSUB, t)
13131 v1.AddArg2(x, y)
13132 v0.AddArg(v1)
13133 v.AddArg2(v0, y)
13134 return true
13135 }
13136 }
13137 func rewriteValueARM_OpBitLen32(v *Value) bool {
13138 v_0 := v.Args[0]
13139 b := v.Block
13140
13141
13142 for {
13143 t := v.Type
13144 x := v_0
13145 v.reset(OpARMRSBconst)
13146 v.AuxInt = int32ToAuxInt(32)
13147 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13148 v0.AddArg(x)
13149 v.AddArg(v0)
13150 return true
13151 }
13152 }
13153 func rewriteValueARM_OpBswap32(v *Value) bool {
13154 v_0 := v.Args[0]
13155 b := v.Block
13156
13157
13158
13159 for {
13160 t := v.Type
13161 x := v_0
13162 if !(buildcfg.GOARM == 5) {
13163 break
13164 }
13165 v.reset(OpARMXOR)
13166 v.Type = t
13167 v0 := b.NewValue0(v.Pos, OpARMSRLconst, t)
13168 v0.AuxInt = int32ToAuxInt(8)
13169 v1 := b.NewValue0(v.Pos, OpARMBICconst, t)
13170 v1.AuxInt = int32ToAuxInt(0xff0000)
13171 v2 := b.NewValue0(v.Pos, OpARMXOR, t)
13172 v3 := b.NewValue0(v.Pos, OpARMSRRconst, t)
13173 v3.AuxInt = int32ToAuxInt(16)
13174 v3.AddArg(x)
13175 v2.AddArg2(x, v3)
13176 v1.AddArg(v2)
13177 v0.AddArg(v1)
13178 v4 := b.NewValue0(v.Pos, OpARMSRRconst, t)
13179 v4.AuxInt = int32ToAuxInt(8)
13180 v4.AddArg(x)
13181 v.AddArg2(v0, v4)
13182 return true
13183 }
13184
13185
13186
13187 for {
13188 x := v_0
13189 if !(buildcfg.GOARM >= 6) {
13190 break
13191 }
13192 v.reset(OpARMREV)
13193 v.AddArg(x)
13194 return true
13195 }
13196 return false
13197 }
13198 func rewriteValueARM_OpConst16(v *Value) bool {
13199
13200
13201 for {
13202 val := auxIntToInt16(v.AuxInt)
13203 v.reset(OpARMMOVWconst)
13204 v.AuxInt = int32ToAuxInt(int32(val))
13205 return true
13206 }
13207 }
13208 func rewriteValueARM_OpConst32(v *Value) bool {
13209
13210
13211 for {
13212 val := auxIntToInt32(v.AuxInt)
13213 v.reset(OpARMMOVWconst)
13214 v.AuxInt = int32ToAuxInt(int32(val))
13215 return true
13216 }
13217 }
13218 func rewriteValueARM_OpConst32F(v *Value) bool {
13219
13220
13221 for {
13222 val := auxIntToFloat32(v.AuxInt)
13223 v.reset(OpARMMOVFconst)
13224 v.AuxInt = float64ToAuxInt(float64(val))
13225 return true
13226 }
13227 }
13228 func rewriteValueARM_OpConst64F(v *Value) bool {
13229
13230
13231 for {
13232 val := auxIntToFloat64(v.AuxInt)
13233 v.reset(OpARMMOVDconst)
13234 v.AuxInt = float64ToAuxInt(float64(val))
13235 return true
13236 }
13237 }
13238 func rewriteValueARM_OpConst8(v *Value) bool {
13239
13240
13241 for {
13242 val := auxIntToInt8(v.AuxInt)
13243 v.reset(OpARMMOVWconst)
13244 v.AuxInt = int32ToAuxInt(int32(val))
13245 return true
13246 }
13247 }
13248 func rewriteValueARM_OpConstBool(v *Value) bool {
13249
13250
13251 for {
13252 t := auxIntToBool(v.AuxInt)
13253 v.reset(OpARMMOVWconst)
13254 v.AuxInt = int32ToAuxInt(b2i32(t))
13255 return true
13256 }
13257 }
13258 func rewriteValueARM_OpConstNil(v *Value) bool {
13259
13260
13261 for {
13262 v.reset(OpARMMOVWconst)
13263 v.AuxInt = int32ToAuxInt(0)
13264 return true
13265 }
13266 }
13267 func rewriteValueARM_OpCtz16(v *Value) bool {
13268 v_0 := v.Args[0]
13269 b := v.Block
13270 typ := &b.Func.Config.Types
13271
13272
13273
13274 for {
13275 t := v.Type
13276 x := v_0
13277 if !(buildcfg.GOARM <= 6) {
13278 break
13279 }
13280 v.reset(OpARMRSBconst)
13281 v.AuxInt = int32ToAuxInt(32)
13282 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13283 v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32)
13284 v1.AuxInt = int32ToAuxInt(1)
13285 v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32)
13286 v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13287 v3.AuxInt = int32ToAuxInt(0x10000)
13288 v3.AddArg(x)
13289 v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
13290 v4.AuxInt = int32ToAuxInt(0)
13291 v4.AddArg(v3)
13292 v2.AddArg2(v3, v4)
13293 v1.AddArg(v2)
13294 v0.AddArg(v1)
13295 v.AddArg(v0)
13296 return true
13297 }
13298
13299
13300
13301 for {
13302 t := v.Type
13303 x := v_0
13304 if !(buildcfg.GOARM == 7) {
13305 break
13306 }
13307 v.reset(OpARMCLZ)
13308 v.Type = t
13309 v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32)
13310 v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13311 v1.AuxInt = int32ToAuxInt(0x10000)
13312 v1.AddArg(x)
13313 v0.AddArg(v1)
13314 v.AddArg(v0)
13315 return true
13316 }
13317 return false
13318 }
13319 func rewriteValueARM_OpCtz32(v *Value) bool {
13320 v_0 := v.Args[0]
13321 b := v.Block
13322
13323
13324
13325 for {
13326 t := v.Type
13327 x := v_0
13328 if !(buildcfg.GOARM <= 6) {
13329 break
13330 }
13331 v.reset(OpARMRSBconst)
13332 v.AuxInt = int32ToAuxInt(32)
13333 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13334 v1 := b.NewValue0(v.Pos, OpARMSUBconst, t)
13335 v1.AuxInt = int32ToAuxInt(1)
13336 v2 := b.NewValue0(v.Pos, OpARMAND, t)
13337 v3 := b.NewValue0(v.Pos, OpARMRSBconst, t)
13338 v3.AuxInt = int32ToAuxInt(0)
13339 v3.AddArg(x)
13340 v2.AddArg2(x, v3)
13341 v1.AddArg(v2)
13342 v0.AddArg(v1)
13343 v.AddArg(v0)
13344 return true
13345 }
13346
13347
13348
13349 for {
13350 t := v.Type
13351 x := v_0
13352 if !(buildcfg.GOARM == 7) {
13353 break
13354 }
13355 v.reset(OpARMCLZ)
13356 v.Type = t
13357 v0 := b.NewValue0(v.Pos, OpARMRBIT, t)
13358 v0.AddArg(x)
13359 v.AddArg(v0)
13360 return true
13361 }
13362 return false
13363 }
13364 func rewriteValueARM_OpCtz8(v *Value) bool {
13365 v_0 := v.Args[0]
13366 b := v.Block
13367 typ := &b.Func.Config.Types
13368
13369
13370
13371 for {
13372 t := v.Type
13373 x := v_0
13374 if !(buildcfg.GOARM <= 6) {
13375 break
13376 }
13377 v.reset(OpARMRSBconst)
13378 v.AuxInt = int32ToAuxInt(32)
13379 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13380 v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32)
13381 v1.AuxInt = int32ToAuxInt(1)
13382 v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32)
13383 v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13384 v3.AuxInt = int32ToAuxInt(0x100)
13385 v3.AddArg(x)
13386 v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
13387 v4.AuxInt = int32ToAuxInt(0)
13388 v4.AddArg(v3)
13389 v2.AddArg2(v3, v4)
13390 v1.AddArg(v2)
13391 v0.AddArg(v1)
13392 v.AddArg(v0)
13393 return true
13394 }
13395
13396
13397
13398 for {
13399 t := v.Type
13400 x := v_0
13401 if !(buildcfg.GOARM == 7) {
13402 break
13403 }
13404 v.reset(OpARMCLZ)
13405 v.Type = t
13406 v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32)
13407 v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13408 v1.AuxInt = int32ToAuxInt(0x100)
13409 v1.AddArg(x)
13410 v0.AddArg(v1)
13411 v.AddArg(v0)
13412 return true
13413 }
13414 return false
13415 }
13416 func rewriteValueARM_OpDiv16(v *Value) bool {
13417 v_1 := v.Args[1]
13418 v_0 := v.Args[0]
13419 b := v.Block
13420 typ := &b.Func.Config.Types
13421
13422
13423 for {
13424 x := v_0
13425 y := v_1
13426 v.reset(OpDiv32)
13427 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13428 v0.AddArg(x)
13429 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13430 v1.AddArg(y)
13431 v.AddArg2(v0, v1)
13432 return true
13433 }
13434 }
13435 func rewriteValueARM_OpDiv16u(v *Value) bool {
13436 v_1 := v.Args[1]
13437 v_0 := v.Args[0]
13438 b := v.Block
13439 typ := &b.Func.Config.Types
13440
13441
13442 for {
13443 x := v_0
13444 y := v_1
13445 v.reset(OpDiv32u)
13446 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13447 v0.AddArg(x)
13448 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13449 v1.AddArg(y)
13450 v.AddArg2(v0, v1)
13451 return true
13452 }
13453 }
13454 func rewriteValueARM_OpDiv32(v *Value) bool {
13455 v_1 := v.Args[1]
13456 v_0 := v.Args[0]
13457 b := v.Block
13458 typ := &b.Func.Config.Types
13459
13460
13461 for {
13462 x := v_0
13463 y := v_1
13464 v.reset(OpARMSUB)
13465 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13466 v1 := b.NewValue0(v.Pos, OpSelect0, typ.UInt32)
13467 v2 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13468 v3 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
13469 v4 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13470 v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13471 v5.AddArg(x)
13472 v4.AddArg2(x, v5)
13473 v3.AddArg2(v4, v5)
13474 v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
13475 v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13476 v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13477 v8.AddArg(y)
13478 v7.AddArg2(y, v8)
13479 v6.AddArg2(v7, v8)
13480 v2.AddArg2(v3, v6)
13481 v1.AddArg(v2)
13482 v9 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13483 v10 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13484 v10.AddArg2(x, y)
13485 v9.AddArg(v10)
13486 v0.AddArg2(v1, v9)
13487 v.AddArg2(v0, v9)
13488 return true
13489 }
13490 }
13491 func rewriteValueARM_OpDiv32u(v *Value) bool {
13492 v_1 := v.Args[1]
13493 v_0 := v.Args[0]
13494 b := v.Block
13495 typ := &b.Func.Config.Types
13496
13497
13498 for {
13499 x := v_0
13500 y := v_1
13501 v.reset(OpSelect0)
13502 v.Type = typ.UInt32
13503 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13504 v0.AddArg2(x, y)
13505 v.AddArg(v0)
13506 return true
13507 }
13508 }
13509 func rewriteValueARM_OpDiv8(v *Value) bool {
13510 v_1 := v.Args[1]
13511 v_0 := v.Args[0]
13512 b := v.Block
13513 typ := &b.Func.Config.Types
13514
13515
13516 for {
13517 x := v_0
13518 y := v_1
13519 v.reset(OpDiv32)
13520 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13521 v0.AddArg(x)
13522 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13523 v1.AddArg(y)
13524 v.AddArg2(v0, v1)
13525 return true
13526 }
13527 }
13528 func rewriteValueARM_OpDiv8u(v *Value) bool {
13529 v_1 := v.Args[1]
13530 v_0 := v.Args[0]
13531 b := v.Block
13532 typ := &b.Func.Config.Types
13533
13534
13535 for {
13536 x := v_0
13537 y := v_1
13538 v.reset(OpDiv32u)
13539 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13540 v0.AddArg(x)
13541 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13542 v1.AddArg(y)
13543 v.AddArg2(v0, v1)
13544 return true
13545 }
13546 }
13547 func rewriteValueARM_OpEq16(v *Value) bool {
13548 v_1 := v.Args[1]
13549 v_0 := v.Args[0]
13550 b := v.Block
13551 typ := &b.Func.Config.Types
13552
13553
13554 for {
13555 x := v_0
13556 y := v_1
13557 v.reset(OpARMEqual)
13558 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13559 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13560 v1.AddArg(x)
13561 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13562 v2.AddArg(y)
13563 v0.AddArg2(v1, v2)
13564 v.AddArg(v0)
13565 return true
13566 }
13567 }
13568 func rewriteValueARM_OpEq32(v *Value) bool {
13569 v_1 := v.Args[1]
13570 v_0 := v.Args[0]
13571 b := v.Block
13572
13573
13574 for {
13575 x := v_0
13576 y := v_1
13577 v.reset(OpARMEqual)
13578 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13579 v0.AddArg2(x, y)
13580 v.AddArg(v0)
13581 return true
13582 }
13583 }
13584 func rewriteValueARM_OpEq32F(v *Value) bool {
13585 v_1 := v.Args[1]
13586 v_0 := v.Args[0]
13587 b := v.Block
13588
13589
13590 for {
13591 x := v_0
13592 y := v_1
13593 v.reset(OpARMEqual)
13594 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13595 v0.AddArg2(x, y)
13596 v.AddArg(v0)
13597 return true
13598 }
13599 }
13600 func rewriteValueARM_OpEq64F(v *Value) bool {
13601 v_1 := v.Args[1]
13602 v_0 := v.Args[0]
13603 b := v.Block
13604
13605
13606 for {
13607 x := v_0
13608 y := v_1
13609 v.reset(OpARMEqual)
13610 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13611 v0.AddArg2(x, y)
13612 v.AddArg(v0)
13613 return true
13614 }
13615 }
13616 func rewriteValueARM_OpEq8(v *Value) bool {
13617 v_1 := v.Args[1]
13618 v_0 := v.Args[0]
13619 b := v.Block
13620 typ := &b.Func.Config.Types
13621
13622
13623 for {
13624 x := v_0
13625 y := v_1
13626 v.reset(OpARMEqual)
13627 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13628 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13629 v1.AddArg(x)
13630 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13631 v2.AddArg(y)
13632 v0.AddArg2(v1, v2)
13633 v.AddArg(v0)
13634 return true
13635 }
13636 }
13637 func rewriteValueARM_OpEqB(v *Value) bool {
13638 v_1 := v.Args[1]
13639 v_0 := v.Args[0]
13640 b := v.Block
13641 typ := &b.Func.Config.Types
13642
13643
13644 for {
13645 x := v_0
13646 y := v_1
13647 v.reset(OpARMXORconst)
13648 v.AuxInt = int32ToAuxInt(1)
13649 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.Bool)
13650 v0.AddArg2(x, y)
13651 v.AddArg(v0)
13652 return true
13653 }
13654 }
13655 func rewriteValueARM_OpEqPtr(v *Value) bool {
13656 v_1 := v.Args[1]
13657 v_0 := v.Args[0]
13658 b := v.Block
13659
13660
13661 for {
13662 x := v_0
13663 y := v_1
13664 v.reset(OpARMEqual)
13665 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13666 v0.AddArg2(x, y)
13667 v.AddArg(v0)
13668 return true
13669 }
13670 }
13671 func rewriteValueARM_OpFMA(v *Value) bool {
13672 v_2 := v.Args[2]
13673 v_1 := v.Args[1]
13674 v_0 := v.Args[0]
13675
13676
13677 for {
13678 x := v_0
13679 y := v_1
13680 z := v_2
13681 v.reset(OpARMFMULAD)
13682 v.AddArg3(z, x, y)
13683 return true
13684 }
13685 }
13686 func rewriteValueARM_OpIsInBounds(v *Value) bool {
13687 v_1 := v.Args[1]
13688 v_0 := v.Args[0]
13689 b := v.Block
13690
13691
13692 for {
13693 idx := v_0
13694 len := v_1
13695 v.reset(OpARMLessThanU)
13696 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13697 v0.AddArg2(idx, len)
13698 v.AddArg(v0)
13699 return true
13700 }
13701 }
13702 func rewriteValueARM_OpIsNonNil(v *Value) bool {
13703 v_0 := v.Args[0]
13704 b := v.Block
13705
13706
13707 for {
13708 ptr := v_0
13709 v.reset(OpARMNotEqual)
13710 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
13711 v0.AuxInt = int32ToAuxInt(0)
13712 v0.AddArg(ptr)
13713 v.AddArg(v0)
13714 return true
13715 }
13716 }
13717 func rewriteValueARM_OpIsSliceInBounds(v *Value) bool {
13718 v_1 := v.Args[1]
13719 v_0 := v.Args[0]
13720 b := v.Block
13721
13722
13723 for {
13724 idx := v_0
13725 len := v_1
13726 v.reset(OpARMLessEqualU)
13727 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13728 v0.AddArg2(idx, len)
13729 v.AddArg(v0)
13730 return true
13731 }
13732 }
13733 func rewriteValueARM_OpLeq16(v *Value) bool {
13734 v_1 := v.Args[1]
13735 v_0 := v.Args[0]
13736 b := v.Block
13737 typ := &b.Func.Config.Types
13738
13739
13740 for {
13741 x := v_0
13742 y := v_1
13743 v.reset(OpARMLessEqual)
13744 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13745 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13746 v1.AddArg(x)
13747 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13748 v2.AddArg(y)
13749 v0.AddArg2(v1, v2)
13750 v.AddArg(v0)
13751 return true
13752 }
13753 }
13754 func rewriteValueARM_OpLeq16U(v *Value) bool {
13755 v_1 := v.Args[1]
13756 v_0 := v.Args[0]
13757 b := v.Block
13758 typ := &b.Func.Config.Types
13759
13760
13761 for {
13762 x := v_0
13763 y := v_1
13764 v.reset(OpARMLessEqualU)
13765 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13766 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13767 v1.AddArg(x)
13768 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13769 v2.AddArg(y)
13770 v0.AddArg2(v1, v2)
13771 v.AddArg(v0)
13772 return true
13773 }
13774 }
13775 func rewriteValueARM_OpLeq32(v *Value) bool {
13776 v_1 := v.Args[1]
13777 v_0 := v.Args[0]
13778 b := v.Block
13779
13780
13781 for {
13782 x := v_0
13783 y := v_1
13784 v.reset(OpARMLessEqual)
13785 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13786 v0.AddArg2(x, y)
13787 v.AddArg(v0)
13788 return true
13789 }
13790 }
13791 func rewriteValueARM_OpLeq32F(v *Value) bool {
13792 v_1 := v.Args[1]
13793 v_0 := v.Args[0]
13794 b := v.Block
13795
13796
13797 for {
13798 x := v_0
13799 y := v_1
13800 v.reset(OpARMGreaterEqual)
13801 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13802 v0.AddArg2(y, x)
13803 v.AddArg(v0)
13804 return true
13805 }
13806 }
13807 func rewriteValueARM_OpLeq32U(v *Value) bool {
13808 v_1 := v.Args[1]
13809 v_0 := v.Args[0]
13810 b := v.Block
13811
13812
13813 for {
13814 x := v_0
13815 y := v_1
13816 v.reset(OpARMLessEqualU)
13817 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13818 v0.AddArg2(x, y)
13819 v.AddArg(v0)
13820 return true
13821 }
13822 }
13823 func rewriteValueARM_OpLeq64F(v *Value) bool {
13824 v_1 := v.Args[1]
13825 v_0 := v.Args[0]
13826 b := v.Block
13827
13828
13829 for {
13830 x := v_0
13831 y := v_1
13832 v.reset(OpARMGreaterEqual)
13833 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13834 v0.AddArg2(y, x)
13835 v.AddArg(v0)
13836 return true
13837 }
13838 }
13839 func rewriteValueARM_OpLeq8(v *Value) bool {
13840 v_1 := v.Args[1]
13841 v_0 := v.Args[0]
13842 b := v.Block
13843 typ := &b.Func.Config.Types
13844
13845
13846 for {
13847 x := v_0
13848 y := v_1
13849 v.reset(OpARMLessEqual)
13850 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13851 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13852 v1.AddArg(x)
13853 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13854 v2.AddArg(y)
13855 v0.AddArg2(v1, v2)
13856 v.AddArg(v0)
13857 return true
13858 }
13859 }
13860 func rewriteValueARM_OpLeq8U(v *Value) bool {
13861 v_1 := v.Args[1]
13862 v_0 := v.Args[0]
13863 b := v.Block
13864 typ := &b.Func.Config.Types
13865
13866
13867 for {
13868 x := v_0
13869 y := v_1
13870 v.reset(OpARMLessEqualU)
13871 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13872 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13873 v1.AddArg(x)
13874 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13875 v2.AddArg(y)
13876 v0.AddArg2(v1, v2)
13877 v.AddArg(v0)
13878 return true
13879 }
13880 }
13881 func rewriteValueARM_OpLess16(v *Value) bool {
13882 v_1 := v.Args[1]
13883 v_0 := v.Args[0]
13884 b := v.Block
13885 typ := &b.Func.Config.Types
13886
13887
13888 for {
13889 x := v_0
13890 y := v_1
13891 v.reset(OpARMLessThan)
13892 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13893 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13894 v1.AddArg(x)
13895 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13896 v2.AddArg(y)
13897 v0.AddArg2(v1, v2)
13898 v.AddArg(v0)
13899 return true
13900 }
13901 }
13902 func rewriteValueARM_OpLess16U(v *Value) bool {
13903 v_1 := v.Args[1]
13904 v_0 := v.Args[0]
13905 b := v.Block
13906 typ := &b.Func.Config.Types
13907
13908
13909 for {
13910 x := v_0
13911 y := v_1
13912 v.reset(OpARMLessThanU)
13913 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13914 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13915 v1.AddArg(x)
13916 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13917 v2.AddArg(y)
13918 v0.AddArg2(v1, v2)
13919 v.AddArg(v0)
13920 return true
13921 }
13922 }
13923 func rewriteValueARM_OpLess32(v *Value) bool {
13924 v_1 := v.Args[1]
13925 v_0 := v.Args[0]
13926 b := v.Block
13927
13928
13929 for {
13930 x := v_0
13931 y := v_1
13932 v.reset(OpARMLessThan)
13933 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13934 v0.AddArg2(x, y)
13935 v.AddArg(v0)
13936 return true
13937 }
13938 }
13939 func rewriteValueARM_OpLess32F(v *Value) bool {
13940 v_1 := v.Args[1]
13941 v_0 := v.Args[0]
13942 b := v.Block
13943
13944
13945 for {
13946 x := v_0
13947 y := v_1
13948 v.reset(OpARMGreaterThan)
13949 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13950 v0.AddArg2(y, x)
13951 v.AddArg(v0)
13952 return true
13953 }
13954 }
13955 func rewriteValueARM_OpLess32U(v *Value) bool {
13956 v_1 := v.Args[1]
13957 v_0 := v.Args[0]
13958 b := v.Block
13959
13960
13961 for {
13962 x := v_0
13963 y := v_1
13964 v.reset(OpARMLessThanU)
13965 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13966 v0.AddArg2(x, y)
13967 v.AddArg(v0)
13968 return true
13969 }
13970 }
13971 func rewriteValueARM_OpLess64F(v *Value) bool {
13972 v_1 := v.Args[1]
13973 v_0 := v.Args[0]
13974 b := v.Block
13975
13976
13977 for {
13978 x := v_0
13979 y := v_1
13980 v.reset(OpARMGreaterThan)
13981 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13982 v0.AddArg2(y, x)
13983 v.AddArg(v0)
13984 return true
13985 }
13986 }
13987 func rewriteValueARM_OpLess8(v *Value) bool {
13988 v_1 := v.Args[1]
13989 v_0 := v.Args[0]
13990 b := v.Block
13991 typ := &b.Func.Config.Types
13992
13993
13994 for {
13995 x := v_0
13996 y := v_1
13997 v.reset(OpARMLessThan)
13998 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13999 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14000 v1.AddArg(x)
14001 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14002 v2.AddArg(y)
14003 v0.AddArg2(v1, v2)
14004 v.AddArg(v0)
14005 return true
14006 }
14007 }
14008 func rewriteValueARM_OpLess8U(v *Value) bool {
14009 v_1 := v.Args[1]
14010 v_0 := v.Args[0]
14011 b := v.Block
14012 typ := &b.Func.Config.Types
14013
14014
14015 for {
14016 x := v_0
14017 y := v_1
14018 v.reset(OpARMLessThanU)
14019 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14020 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14021 v1.AddArg(x)
14022 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14023 v2.AddArg(y)
14024 v0.AddArg2(v1, v2)
14025 v.AddArg(v0)
14026 return true
14027 }
14028 }
14029 func rewriteValueARM_OpLoad(v *Value) bool {
14030 v_1 := v.Args[1]
14031 v_0 := v.Args[0]
14032
14033
14034
14035 for {
14036 t := v.Type
14037 ptr := v_0
14038 mem := v_1
14039 if !(t.IsBoolean()) {
14040 break
14041 }
14042 v.reset(OpARMMOVBUload)
14043 v.AddArg2(ptr, mem)
14044 return true
14045 }
14046
14047
14048
14049 for {
14050 t := v.Type
14051 ptr := v_0
14052 mem := v_1
14053 if !(is8BitInt(t) && isSigned(t)) {
14054 break
14055 }
14056 v.reset(OpARMMOVBload)
14057 v.AddArg2(ptr, mem)
14058 return true
14059 }
14060
14061
14062
14063 for {
14064 t := v.Type
14065 ptr := v_0
14066 mem := v_1
14067 if !(is8BitInt(t) && !isSigned(t)) {
14068 break
14069 }
14070 v.reset(OpARMMOVBUload)
14071 v.AddArg2(ptr, mem)
14072 return true
14073 }
14074
14075
14076
14077 for {
14078 t := v.Type
14079 ptr := v_0
14080 mem := v_1
14081 if !(is16BitInt(t) && isSigned(t)) {
14082 break
14083 }
14084 v.reset(OpARMMOVHload)
14085 v.AddArg2(ptr, mem)
14086 return true
14087 }
14088
14089
14090
14091 for {
14092 t := v.Type
14093 ptr := v_0
14094 mem := v_1
14095 if !(is16BitInt(t) && !isSigned(t)) {
14096 break
14097 }
14098 v.reset(OpARMMOVHUload)
14099 v.AddArg2(ptr, mem)
14100 return true
14101 }
14102
14103
14104
14105 for {
14106 t := v.Type
14107 ptr := v_0
14108 mem := v_1
14109 if !(is32BitInt(t) || isPtr(t)) {
14110 break
14111 }
14112 v.reset(OpARMMOVWload)
14113 v.AddArg2(ptr, mem)
14114 return true
14115 }
14116
14117
14118
14119 for {
14120 t := v.Type
14121 ptr := v_0
14122 mem := v_1
14123 if !(is32BitFloat(t)) {
14124 break
14125 }
14126 v.reset(OpARMMOVFload)
14127 v.AddArg2(ptr, mem)
14128 return true
14129 }
14130
14131
14132
14133 for {
14134 t := v.Type
14135 ptr := v_0
14136 mem := v_1
14137 if !(is64BitFloat(t)) {
14138 break
14139 }
14140 v.reset(OpARMMOVDload)
14141 v.AddArg2(ptr, mem)
14142 return true
14143 }
14144 return false
14145 }
14146 func rewriteValueARM_OpLocalAddr(v *Value) bool {
14147 v_0 := v.Args[0]
14148
14149
14150 for {
14151 sym := auxToSym(v.Aux)
14152 base := v_0
14153 v.reset(OpARMMOVWaddr)
14154 v.Aux = symToAux(sym)
14155 v.AddArg(base)
14156 return true
14157 }
14158 }
14159 func rewriteValueARM_OpLsh16x16(v *Value) bool {
14160 v_1 := v.Args[1]
14161 v_0 := v.Args[0]
14162 b := v.Block
14163 typ := &b.Func.Config.Types
14164
14165
14166 for {
14167 x := v_0
14168 y := v_1
14169 v.reset(OpARMCMOVWHSconst)
14170 v.AuxInt = int32ToAuxInt(0)
14171 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14172 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14173 v1.AddArg(y)
14174 v0.AddArg2(x, v1)
14175 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14176 v2.AuxInt = int32ToAuxInt(256)
14177 v2.AddArg(v1)
14178 v.AddArg2(v0, v2)
14179 return true
14180 }
14181 }
14182 func rewriteValueARM_OpLsh16x32(v *Value) bool {
14183 v_1 := v.Args[1]
14184 v_0 := v.Args[0]
14185 b := v.Block
14186
14187
14188 for {
14189 x := v_0
14190 y := v_1
14191 v.reset(OpARMCMOVWHSconst)
14192 v.AuxInt = int32ToAuxInt(0)
14193 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14194 v0.AddArg2(x, y)
14195 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14196 v1.AuxInt = int32ToAuxInt(256)
14197 v1.AddArg(y)
14198 v.AddArg2(v0, v1)
14199 return true
14200 }
14201 }
14202 func rewriteValueARM_OpLsh16x64(v *Value) bool {
14203 v_1 := v.Args[1]
14204 v_0 := v.Args[0]
14205
14206
14207
14208 for {
14209 x := v_0
14210 if v_1.Op != OpConst64 {
14211 break
14212 }
14213 c := auxIntToInt64(v_1.AuxInt)
14214 if !(uint64(c) < 16) {
14215 break
14216 }
14217 v.reset(OpARMSLLconst)
14218 v.AuxInt = int32ToAuxInt(int32(c))
14219 v.AddArg(x)
14220 return true
14221 }
14222
14223
14224
14225 for {
14226 if v_1.Op != OpConst64 {
14227 break
14228 }
14229 c := auxIntToInt64(v_1.AuxInt)
14230 if !(uint64(c) >= 16) {
14231 break
14232 }
14233 v.reset(OpConst16)
14234 v.AuxInt = int16ToAuxInt(0)
14235 return true
14236 }
14237 return false
14238 }
14239 func rewriteValueARM_OpLsh16x8(v *Value) bool {
14240 v_1 := v.Args[1]
14241 v_0 := v.Args[0]
14242 b := v.Block
14243 typ := &b.Func.Config.Types
14244
14245
14246 for {
14247 x := v_0
14248 y := v_1
14249 v.reset(OpARMSLL)
14250 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14251 v0.AddArg(y)
14252 v.AddArg2(x, v0)
14253 return true
14254 }
14255 }
14256 func rewriteValueARM_OpLsh32x16(v *Value) bool {
14257 v_1 := v.Args[1]
14258 v_0 := v.Args[0]
14259 b := v.Block
14260 typ := &b.Func.Config.Types
14261
14262
14263 for {
14264 x := v_0
14265 y := v_1
14266 v.reset(OpARMCMOVWHSconst)
14267 v.AuxInt = int32ToAuxInt(0)
14268 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14269 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14270 v1.AddArg(y)
14271 v0.AddArg2(x, v1)
14272 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14273 v2.AuxInt = int32ToAuxInt(256)
14274 v2.AddArg(v1)
14275 v.AddArg2(v0, v2)
14276 return true
14277 }
14278 }
14279 func rewriteValueARM_OpLsh32x32(v *Value) bool {
14280 v_1 := v.Args[1]
14281 v_0 := v.Args[0]
14282 b := v.Block
14283
14284
14285 for {
14286 x := v_0
14287 y := v_1
14288 v.reset(OpARMCMOVWHSconst)
14289 v.AuxInt = int32ToAuxInt(0)
14290 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14291 v0.AddArg2(x, y)
14292 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14293 v1.AuxInt = int32ToAuxInt(256)
14294 v1.AddArg(y)
14295 v.AddArg2(v0, v1)
14296 return true
14297 }
14298 }
14299 func rewriteValueARM_OpLsh32x64(v *Value) bool {
14300 v_1 := v.Args[1]
14301 v_0 := v.Args[0]
14302
14303
14304
14305 for {
14306 x := v_0
14307 if v_1.Op != OpConst64 {
14308 break
14309 }
14310 c := auxIntToInt64(v_1.AuxInt)
14311 if !(uint64(c) < 32) {
14312 break
14313 }
14314 v.reset(OpARMSLLconst)
14315 v.AuxInt = int32ToAuxInt(int32(c))
14316 v.AddArg(x)
14317 return true
14318 }
14319
14320
14321
14322 for {
14323 if v_1.Op != OpConst64 {
14324 break
14325 }
14326 c := auxIntToInt64(v_1.AuxInt)
14327 if !(uint64(c) >= 32) {
14328 break
14329 }
14330 v.reset(OpConst32)
14331 v.AuxInt = int32ToAuxInt(0)
14332 return true
14333 }
14334 return false
14335 }
14336 func rewriteValueARM_OpLsh32x8(v *Value) bool {
14337 v_1 := v.Args[1]
14338 v_0 := v.Args[0]
14339 b := v.Block
14340 typ := &b.Func.Config.Types
14341
14342
14343 for {
14344 x := v_0
14345 y := v_1
14346 v.reset(OpARMSLL)
14347 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14348 v0.AddArg(y)
14349 v.AddArg2(x, v0)
14350 return true
14351 }
14352 }
14353 func rewriteValueARM_OpLsh8x16(v *Value) bool {
14354 v_1 := v.Args[1]
14355 v_0 := v.Args[0]
14356 b := v.Block
14357 typ := &b.Func.Config.Types
14358
14359
14360 for {
14361 x := v_0
14362 y := v_1
14363 v.reset(OpARMCMOVWHSconst)
14364 v.AuxInt = int32ToAuxInt(0)
14365 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14366 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14367 v1.AddArg(y)
14368 v0.AddArg2(x, v1)
14369 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14370 v2.AuxInt = int32ToAuxInt(256)
14371 v2.AddArg(v1)
14372 v.AddArg2(v0, v2)
14373 return true
14374 }
14375 }
14376 func rewriteValueARM_OpLsh8x32(v *Value) bool {
14377 v_1 := v.Args[1]
14378 v_0 := v.Args[0]
14379 b := v.Block
14380
14381
14382 for {
14383 x := v_0
14384 y := v_1
14385 v.reset(OpARMCMOVWHSconst)
14386 v.AuxInt = int32ToAuxInt(0)
14387 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14388 v0.AddArg2(x, y)
14389 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14390 v1.AuxInt = int32ToAuxInt(256)
14391 v1.AddArg(y)
14392 v.AddArg2(v0, v1)
14393 return true
14394 }
14395 }
14396 func rewriteValueARM_OpLsh8x64(v *Value) bool {
14397 v_1 := v.Args[1]
14398 v_0 := v.Args[0]
14399
14400
14401
14402 for {
14403 x := v_0
14404 if v_1.Op != OpConst64 {
14405 break
14406 }
14407 c := auxIntToInt64(v_1.AuxInt)
14408 if !(uint64(c) < 8) {
14409 break
14410 }
14411 v.reset(OpARMSLLconst)
14412 v.AuxInt = int32ToAuxInt(int32(c))
14413 v.AddArg(x)
14414 return true
14415 }
14416
14417
14418
14419 for {
14420 if v_1.Op != OpConst64 {
14421 break
14422 }
14423 c := auxIntToInt64(v_1.AuxInt)
14424 if !(uint64(c) >= 8) {
14425 break
14426 }
14427 v.reset(OpConst8)
14428 v.AuxInt = int8ToAuxInt(0)
14429 return true
14430 }
14431 return false
14432 }
14433 func rewriteValueARM_OpLsh8x8(v *Value) bool {
14434 v_1 := v.Args[1]
14435 v_0 := v.Args[0]
14436 b := v.Block
14437 typ := &b.Func.Config.Types
14438
14439
14440 for {
14441 x := v_0
14442 y := v_1
14443 v.reset(OpARMSLL)
14444 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14445 v0.AddArg(y)
14446 v.AddArg2(x, v0)
14447 return true
14448 }
14449 }
14450 func rewriteValueARM_OpMod16(v *Value) bool {
14451 v_1 := v.Args[1]
14452 v_0 := v.Args[0]
14453 b := v.Block
14454 typ := &b.Func.Config.Types
14455
14456
14457 for {
14458 x := v_0
14459 y := v_1
14460 v.reset(OpMod32)
14461 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
14462 v0.AddArg(x)
14463 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
14464 v1.AddArg(y)
14465 v.AddArg2(v0, v1)
14466 return true
14467 }
14468 }
14469 func rewriteValueARM_OpMod16u(v *Value) bool {
14470 v_1 := v.Args[1]
14471 v_0 := v.Args[0]
14472 b := v.Block
14473 typ := &b.Func.Config.Types
14474
14475
14476 for {
14477 x := v_0
14478 y := v_1
14479 v.reset(OpMod32u)
14480 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14481 v0.AddArg(x)
14482 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14483 v1.AddArg(y)
14484 v.AddArg2(v0, v1)
14485 return true
14486 }
14487 }
14488 func rewriteValueARM_OpMod32(v *Value) bool {
14489 v_1 := v.Args[1]
14490 v_0 := v.Args[0]
14491 b := v.Block
14492 typ := &b.Func.Config.Types
14493
14494
14495 for {
14496 x := v_0
14497 y := v_1
14498 v.reset(OpARMSUB)
14499 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14500 v1 := b.NewValue0(v.Pos, OpSelect1, typ.UInt32)
14501 v2 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14502 v3 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
14503 v4 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14504 v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
14505 v5.AddArg(x)
14506 v4.AddArg2(x, v5)
14507 v3.AddArg2(v4, v5)
14508 v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
14509 v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14510 v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
14511 v8.AddArg(y)
14512 v7.AddArg2(y, v8)
14513 v6.AddArg2(v7, v8)
14514 v2.AddArg2(v3, v6)
14515 v1.AddArg(v2)
14516 v0.AddArg2(v1, v5)
14517 v.AddArg2(v0, v5)
14518 return true
14519 }
14520 }
14521 func rewriteValueARM_OpMod32u(v *Value) bool {
14522 v_1 := v.Args[1]
14523 v_0 := v.Args[0]
14524 b := v.Block
14525 typ := &b.Func.Config.Types
14526
14527
14528 for {
14529 x := v_0
14530 y := v_1
14531 v.reset(OpSelect1)
14532 v.Type = typ.UInt32
14533 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14534 v0.AddArg2(x, y)
14535 v.AddArg(v0)
14536 return true
14537 }
14538 }
14539 func rewriteValueARM_OpMod8(v *Value) bool {
14540 v_1 := v.Args[1]
14541 v_0 := v.Args[0]
14542 b := v.Block
14543 typ := &b.Func.Config.Types
14544
14545
14546 for {
14547 x := v_0
14548 y := v_1
14549 v.reset(OpMod32)
14550 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14551 v0.AddArg(x)
14552 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14553 v1.AddArg(y)
14554 v.AddArg2(v0, v1)
14555 return true
14556 }
14557 }
14558 func rewriteValueARM_OpMod8u(v *Value) bool {
14559 v_1 := v.Args[1]
14560 v_0 := v.Args[0]
14561 b := v.Block
14562 typ := &b.Func.Config.Types
14563
14564
14565 for {
14566 x := v_0
14567 y := v_1
14568 v.reset(OpMod32u)
14569 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14570 v0.AddArg(x)
14571 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14572 v1.AddArg(y)
14573 v.AddArg2(v0, v1)
14574 return true
14575 }
14576 }
14577 func rewriteValueARM_OpMove(v *Value) bool {
14578 v_2 := v.Args[2]
14579 v_1 := v.Args[1]
14580 v_0 := v.Args[0]
14581 b := v.Block
14582 config := b.Func.Config
14583 typ := &b.Func.Config.Types
14584
14585
14586 for {
14587 if auxIntToInt64(v.AuxInt) != 0 {
14588 break
14589 }
14590 mem := v_2
14591 v.copyOf(mem)
14592 return true
14593 }
14594
14595
14596 for {
14597 if auxIntToInt64(v.AuxInt) != 1 {
14598 break
14599 }
14600 dst := v_0
14601 src := v_1
14602 mem := v_2
14603 v.reset(OpARMMOVBstore)
14604 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14605 v0.AddArg2(src, mem)
14606 v.AddArg3(dst, v0, mem)
14607 return true
14608 }
14609
14610
14611
14612 for {
14613 if auxIntToInt64(v.AuxInt) != 2 {
14614 break
14615 }
14616 t := auxToType(v.Aux)
14617 dst := v_0
14618 src := v_1
14619 mem := v_2
14620 if !(t.Alignment()%2 == 0) {
14621 break
14622 }
14623 v.reset(OpARMMOVHstore)
14624 v0 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14625 v0.AddArg2(src, mem)
14626 v.AddArg3(dst, v0, mem)
14627 return true
14628 }
14629
14630
14631 for {
14632 if auxIntToInt64(v.AuxInt) != 2 {
14633 break
14634 }
14635 dst := v_0
14636 src := v_1
14637 mem := v_2
14638 v.reset(OpARMMOVBstore)
14639 v.AuxInt = int32ToAuxInt(1)
14640 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14641 v0.AuxInt = int32ToAuxInt(1)
14642 v0.AddArg2(src, mem)
14643 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14644 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14645 v2.AddArg2(src, mem)
14646 v1.AddArg3(dst, v2, mem)
14647 v.AddArg3(dst, v0, v1)
14648 return true
14649 }
14650
14651
14652
14653 for {
14654 if auxIntToInt64(v.AuxInt) != 4 {
14655 break
14656 }
14657 t := auxToType(v.Aux)
14658 dst := v_0
14659 src := v_1
14660 mem := v_2
14661 if !(t.Alignment()%4 == 0) {
14662 break
14663 }
14664 v.reset(OpARMMOVWstore)
14665 v0 := b.NewValue0(v.Pos, OpARMMOVWload, typ.UInt32)
14666 v0.AddArg2(src, mem)
14667 v.AddArg3(dst, v0, mem)
14668 return true
14669 }
14670
14671
14672
14673 for {
14674 if auxIntToInt64(v.AuxInt) != 4 {
14675 break
14676 }
14677 t := auxToType(v.Aux)
14678 dst := v_0
14679 src := v_1
14680 mem := v_2
14681 if !(t.Alignment()%2 == 0) {
14682 break
14683 }
14684 v.reset(OpARMMOVHstore)
14685 v.AuxInt = int32ToAuxInt(2)
14686 v0 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14687 v0.AuxInt = int32ToAuxInt(2)
14688 v0.AddArg2(src, mem)
14689 v1 := b.NewValue0(v.Pos, OpARMMOVHstore, types.TypeMem)
14690 v2 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14691 v2.AddArg2(src, mem)
14692 v1.AddArg3(dst, v2, mem)
14693 v.AddArg3(dst, v0, v1)
14694 return true
14695 }
14696
14697
14698 for {
14699 if auxIntToInt64(v.AuxInt) != 4 {
14700 break
14701 }
14702 dst := v_0
14703 src := v_1
14704 mem := v_2
14705 v.reset(OpARMMOVBstore)
14706 v.AuxInt = int32ToAuxInt(3)
14707 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14708 v0.AuxInt = int32ToAuxInt(3)
14709 v0.AddArg2(src, mem)
14710 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14711 v1.AuxInt = int32ToAuxInt(2)
14712 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14713 v2.AuxInt = int32ToAuxInt(2)
14714 v2.AddArg2(src, mem)
14715 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14716 v3.AuxInt = int32ToAuxInt(1)
14717 v4 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14718 v4.AuxInt = int32ToAuxInt(1)
14719 v4.AddArg2(src, mem)
14720 v5 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14721 v6 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14722 v6.AddArg2(src, mem)
14723 v5.AddArg3(dst, v6, mem)
14724 v3.AddArg3(dst, v4, v5)
14725 v1.AddArg3(dst, v2, v3)
14726 v.AddArg3(dst, v0, v1)
14727 return true
14728 }
14729
14730
14731 for {
14732 if auxIntToInt64(v.AuxInt) != 3 {
14733 break
14734 }
14735 dst := v_0
14736 src := v_1
14737 mem := v_2
14738 v.reset(OpARMMOVBstore)
14739 v.AuxInt = int32ToAuxInt(2)
14740 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14741 v0.AuxInt = int32ToAuxInt(2)
14742 v0.AddArg2(src, mem)
14743 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14744 v1.AuxInt = int32ToAuxInt(1)
14745 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14746 v2.AuxInt = int32ToAuxInt(1)
14747 v2.AddArg2(src, mem)
14748 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14749 v4 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14750 v4.AddArg2(src, mem)
14751 v3.AddArg3(dst, v4, mem)
14752 v1.AddArg3(dst, v2, v3)
14753 v.AddArg3(dst, v0, v1)
14754 return true
14755 }
14756
14757
14758
14759 for {
14760 s := auxIntToInt64(v.AuxInt)
14761 t := auxToType(v.Aux)
14762 dst := v_0
14763 src := v_1
14764 mem := v_2
14765 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0 && !config.noDuffDevice && logLargeCopy(v, s)) {
14766 break
14767 }
14768 v.reset(OpARMDUFFCOPY)
14769 v.AuxInt = int64ToAuxInt(8 * (128 - s/4))
14770 v.AddArg3(dst, src, mem)
14771 return true
14772 }
14773
14774
14775
14776 for {
14777 s := auxIntToInt64(v.AuxInt)
14778 t := auxToType(v.Aux)
14779 dst := v_0
14780 src := v_1
14781 mem := v_2
14782 if !(((s > 512 || config.noDuffDevice) || t.Alignment()%4 != 0) && logLargeCopy(v, s)) {
14783 break
14784 }
14785 v.reset(OpARMLoweredMove)
14786 v.AuxInt = int64ToAuxInt(t.Alignment())
14787 v0 := b.NewValue0(v.Pos, OpARMADDconst, src.Type)
14788 v0.AuxInt = int32ToAuxInt(int32(s - moveSize(t.Alignment(), config)))
14789 v0.AddArg(src)
14790 v.AddArg4(dst, src, v0, mem)
14791 return true
14792 }
14793 return false
14794 }
14795 func rewriteValueARM_OpNeg16(v *Value) bool {
14796 v_0 := v.Args[0]
14797
14798
14799 for {
14800 x := v_0
14801 v.reset(OpARMRSBconst)
14802 v.AuxInt = int32ToAuxInt(0)
14803 v.AddArg(x)
14804 return true
14805 }
14806 }
14807 func rewriteValueARM_OpNeg32(v *Value) bool {
14808 v_0 := v.Args[0]
14809
14810
14811 for {
14812 x := v_0
14813 v.reset(OpARMRSBconst)
14814 v.AuxInt = int32ToAuxInt(0)
14815 v.AddArg(x)
14816 return true
14817 }
14818 }
14819 func rewriteValueARM_OpNeg8(v *Value) bool {
14820 v_0 := v.Args[0]
14821
14822
14823 for {
14824 x := v_0
14825 v.reset(OpARMRSBconst)
14826 v.AuxInt = int32ToAuxInt(0)
14827 v.AddArg(x)
14828 return true
14829 }
14830 }
14831 func rewriteValueARM_OpNeq16(v *Value) bool {
14832 v_1 := v.Args[1]
14833 v_0 := v.Args[0]
14834 b := v.Block
14835 typ := &b.Func.Config.Types
14836
14837
14838 for {
14839 x := v_0
14840 y := v_1
14841 v.reset(OpARMNotEqual)
14842 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14843 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14844 v1.AddArg(x)
14845 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14846 v2.AddArg(y)
14847 v0.AddArg2(v1, v2)
14848 v.AddArg(v0)
14849 return true
14850 }
14851 }
14852 func rewriteValueARM_OpNeq32(v *Value) bool {
14853 v_1 := v.Args[1]
14854 v_0 := v.Args[0]
14855 b := v.Block
14856
14857
14858 for {
14859 x := v_0
14860 y := v_1
14861 v.reset(OpARMNotEqual)
14862 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14863 v0.AddArg2(x, y)
14864 v.AddArg(v0)
14865 return true
14866 }
14867 }
14868 func rewriteValueARM_OpNeq32F(v *Value) bool {
14869 v_1 := v.Args[1]
14870 v_0 := v.Args[0]
14871 b := v.Block
14872
14873
14874 for {
14875 x := v_0
14876 y := v_1
14877 v.reset(OpARMNotEqual)
14878 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
14879 v0.AddArg2(x, y)
14880 v.AddArg(v0)
14881 return true
14882 }
14883 }
14884 func rewriteValueARM_OpNeq64F(v *Value) bool {
14885 v_1 := v.Args[1]
14886 v_0 := v.Args[0]
14887 b := v.Block
14888
14889
14890 for {
14891 x := v_0
14892 y := v_1
14893 v.reset(OpARMNotEqual)
14894 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
14895 v0.AddArg2(x, y)
14896 v.AddArg(v0)
14897 return true
14898 }
14899 }
14900 func rewriteValueARM_OpNeq8(v *Value) bool {
14901 v_1 := v.Args[1]
14902 v_0 := v.Args[0]
14903 b := v.Block
14904 typ := &b.Func.Config.Types
14905
14906
14907 for {
14908 x := v_0
14909 y := v_1
14910 v.reset(OpARMNotEqual)
14911 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14912 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14913 v1.AddArg(x)
14914 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14915 v2.AddArg(y)
14916 v0.AddArg2(v1, v2)
14917 v.AddArg(v0)
14918 return true
14919 }
14920 }
14921 func rewriteValueARM_OpNeqPtr(v *Value) bool {
14922 v_1 := v.Args[1]
14923 v_0 := v.Args[0]
14924 b := v.Block
14925
14926
14927 for {
14928 x := v_0
14929 y := v_1
14930 v.reset(OpARMNotEqual)
14931 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14932 v0.AddArg2(x, y)
14933 v.AddArg(v0)
14934 return true
14935 }
14936 }
14937 func rewriteValueARM_OpNot(v *Value) bool {
14938 v_0 := v.Args[0]
14939
14940
14941 for {
14942 x := v_0
14943 v.reset(OpARMXORconst)
14944 v.AuxInt = int32ToAuxInt(1)
14945 v.AddArg(x)
14946 return true
14947 }
14948 }
14949 func rewriteValueARM_OpOffPtr(v *Value) bool {
14950 v_0 := v.Args[0]
14951
14952
14953 for {
14954 off := auxIntToInt64(v.AuxInt)
14955 ptr := v_0
14956 if ptr.Op != OpSP {
14957 break
14958 }
14959 v.reset(OpARMMOVWaddr)
14960 v.AuxInt = int32ToAuxInt(int32(off))
14961 v.AddArg(ptr)
14962 return true
14963 }
14964
14965
14966 for {
14967 off := auxIntToInt64(v.AuxInt)
14968 ptr := v_0
14969 v.reset(OpARMADDconst)
14970 v.AuxInt = int32ToAuxInt(int32(off))
14971 v.AddArg(ptr)
14972 return true
14973 }
14974 }
14975 func rewriteValueARM_OpPanicBounds(v *Value) bool {
14976 v_2 := v.Args[2]
14977 v_1 := v.Args[1]
14978 v_0 := v.Args[0]
14979
14980
14981
14982 for {
14983 kind := auxIntToInt64(v.AuxInt)
14984 x := v_0
14985 y := v_1
14986 mem := v_2
14987 if !(boundsABI(kind) == 0) {
14988 break
14989 }
14990 v.reset(OpARMLoweredPanicBoundsA)
14991 v.AuxInt = int64ToAuxInt(kind)
14992 v.AddArg3(x, y, mem)
14993 return true
14994 }
14995
14996
14997
14998 for {
14999 kind := auxIntToInt64(v.AuxInt)
15000 x := v_0
15001 y := v_1
15002 mem := v_2
15003 if !(boundsABI(kind) == 1) {
15004 break
15005 }
15006 v.reset(OpARMLoweredPanicBoundsB)
15007 v.AuxInt = int64ToAuxInt(kind)
15008 v.AddArg3(x, y, mem)
15009 return true
15010 }
15011
15012
15013
15014 for {
15015 kind := auxIntToInt64(v.AuxInt)
15016 x := v_0
15017 y := v_1
15018 mem := v_2
15019 if !(boundsABI(kind) == 2) {
15020 break
15021 }
15022 v.reset(OpARMLoweredPanicBoundsC)
15023 v.AuxInt = int64ToAuxInt(kind)
15024 v.AddArg3(x, y, mem)
15025 return true
15026 }
15027 return false
15028 }
15029 func rewriteValueARM_OpPanicExtend(v *Value) bool {
15030 v_3 := v.Args[3]
15031 v_2 := v.Args[2]
15032 v_1 := v.Args[1]
15033 v_0 := v.Args[0]
15034
15035
15036
15037 for {
15038 kind := auxIntToInt64(v.AuxInt)
15039 hi := v_0
15040 lo := v_1
15041 y := v_2
15042 mem := v_3
15043 if !(boundsABI(kind) == 0) {
15044 break
15045 }
15046 v.reset(OpARMLoweredPanicExtendA)
15047 v.AuxInt = int64ToAuxInt(kind)
15048 v.AddArg4(hi, lo, y, mem)
15049 return true
15050 }
15051
15052
15053
15054 for {
15055 kind := auxIntToInt64(v.AuxInt)
15056 hi := v_0
15057 lo := v_1
15058 y := v_2
15059 mem := v_3
15060 if !(boundsABI(kind) == 1) {
15061 break
15062 }
15063 v.reset(OpARMLoweredPanicExtendB)
15064 v.AuxInt = int64ToAuxInt(kind)
15065 v.AddArg4(hi, lo, y, mem)
15066 return true
15067 }
15068
15069
15070
15071 for {
15072 kind := auxIntToInt64(v.AuxInt)
15073 hi := v_0
15074 lo := v_1
15075 y := v_2
15076 mem := v_3
15077 if !(boundsABI(kind) == 2) {
15078 break
15079 }
15080 v.reset(OpARMLoweredPanicExtendC)
15081 v.AuxInt = int64ToAuxInt(kind)
15082 v.AddArg4(hi, lo, y, mem)
15083 return true
15084 }
15085 return false
15086 }
15087 func rewriteValueARM_OpRotateLeft16(v *Value) bool {
15088 v_1 := v.Args[1]
15089 v_0 := v.Args[0]
15090 b := v.Block
15091 typ := &b.Func.Config.Types
15092
15093
15094 for {
15095 t := v.Type
15096 x := v_0
15097 if v_1.Op != OpARMMOVWconst {
15098 break
15099 }
15100 c := auxIntToInt32(v_1.AuxInt)
15101 v.reset(OpOr16)
15102 v0 := b.NewValue0(v.Pos, OpLsh16x32, t)
15103 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15104 v1.AuxInt = int32ToAuxInt(c & 15)
15105 v0.AddArg2(x, v1)
15106 v2 := b.NewValue0(v.Pos, OpRsh16Ux32, t)
15107 v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15108 v3.AuxInt = int32ToAuxInt(-c & 15)
15109 v2.AddArg2(x, v3)
15110 v.AddArg2(v0, v2)
15111 return true
15112 }
15113 return false
15114 }
15115 func rewriteValueARM_OpRotateLeft32(v *Value) bool {
15116 v_1 := v.Args[1]
15117 v_0 := v.Args[0]
15118 b := v.Block
15119
15120
15121 for {
15122 x := v_0
15123 y := v_1
15124 v.reset(OpARMSRR)
15125 v0 := b.NewValue0(v.Pos, OpARMRSBconst, y.Type)
15126 v0.AuxInt = int32ToAuxInt(0)
15127 v0.AddArg(y)
15128 v.AddArg2(x, v0)
15129 return true
15130 }
15131 }
15132 func rewriteValueARM_OpRotateLeft8(v *Value) bool {
15133 v_1 := v.Args[1]
15134 v_0 := v.Args[0]
15135 b := v.Block
15136 typ := &b.Func.Config.Types
15137
15138
15139 for {
15140 t := v.Type
15141 x := v_0
15142 if v_1.Op != OpARMMOVWconst {
15143 break
15144 }
15145 c := auxIntToInt32(v_1.AuxInt)
15146 v.reset(OpOr8)
15147 v0 := b.NewValue0(v.Pos, OpLsh8x32, t)
15148 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15149 v1.AuxInt = int32ToAuxInt(c & 7)
15150 v0.AddArg2(x, v1)
15151 v2 := b.NewValue0(v.Pos, OpRsh8Ux32, t)
15152 v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15153 v3.AuxInt = int32ToAuxInt(-c & 7)
15154 v2.AddArg2(x, v3)
15155 v.AddArg2(v0, v2)
15156 return true
15157 }
15158 return false
15159 }
15160 func rewriteValueARM_OpRsh16Ux16(v *Value) bool {
15161 v_1 := v.Args[1]
15162 v_0 := v.Args[0]
15163 b := v.Block
15164 typ := &b.Func.Config.Types
15165
15166
15167 for {
15168 x := v_0
15169 y := v_1
15170 v.reset(OpARMCMOVWHSconst)
15171 v.AuxInt = int32ToAuxInt(0)
15172 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15173 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15174 v1.AddArg(x)
15175 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15176 v2.AddArg(y)
15177 v0.AddArg2(v1, v2)
15178 v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15179 v3.AuxInt = int32ToAuxInt(256)
15180 v3.AddArg(v2)
15181 v.AddArg2(v0, v3)
15182 return true
15183 }
15184 }
15185 func rewriteValueARM_OpRsh16Ux32(v *Value) bool {
15186 v_1 := v.Args[1]
15187 v_0 := v.Args[0]
15188 b := v.Block
15189 typ := &b.Func.Config.Types
15190
15191
15192 for {
15193 x := v_0
15194 y := v_1
15195 v.reset(OpARMCMOVWHSconst)
15196 v.AuxInt = int32ToAuxInt(0)
15197 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15198 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15199 v1.AddArg(x)
15200 v0.AddArg2(v1, y)
15201 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15202 v2.AuxInt = int32ToAuxInt(256)
15203 v2.AddArg(y)
15204 v.AddArg2(v0, v2)
15205 return true
15206 }
15207 }
15208 func rewriteValueARM_OpRsh16Ux64(v *Value) bool {
15209 v_1 := v.Args[1]
15210 v_0 := v.Args[0]
15211 b := v.Block
15212 typ := &b.Func.Config.Types
15213
15214
15215
15216 for {
15217 x := v_0
15218 if v_1.Op != OpConst64 {
15219 break
15220 }
15221 c := auxIntToInt64(v_1.AuxInt)
15222 if !(uint64(c) < 16) {
15223 break
15224 }
15225 v.reset(OpARMSRLconst)
15226 v.AuxInt = int32ToAuxInt(int32(c + 16))
15227 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15228 v0.AuxInt = int32ToAuxInt(16)
15229 v0.AddArg(x)
15230 v.AddArg(v0)
15231 return true
15232 }
15233
15234
15235
15236 for {
15237 if v_1.Op != OpConst64 {
15238 break
15239 }
15240 c := auxIntToInt64(v_1.AuxInt)
15241 if !(uint64(c) >= 16) {
15242 break
15243 }
15244 v.reset(OpConst16)
15245 v.AuxInt = int16ToAuxInt(0)
15246 return true
15247 }
15248 return false
15249 }
15250 func rewriteValueARM_OpRsh16Ux8(v *Value) bool {
15251 v_1 := v.Args[1]
15252 v_0 := v.Args[0]
15253 b := v.Block
15254 typ := &b.Func.Config.Types
15255
15256
15257 for {
15258 x := v_0
15259 y := v_1
15260 v.reset(OpARMSRL)
15261 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15262 v0.AddArg(x)
15263 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15264 v1.AddArg(y)
15265 v.AddArg2(v0, v1)
15266 return true
15267 }
15268 }
15269 func rewriteValueARM_OpRsh16x16(v *Value) bool {
15270 v_1 := v.Args[1]
15271 v_0 := v.Args[0]
15272 b := v.Block
15273 typ := &b.Func.Config.Types
15274
15275
15276 for {
15277 x := v_0
15278 y := v_1
15279 v.reset(OpARMSRAcond)
15280 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15281 v0.AddArg(x)
15282 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15283 v1.AddArg(y)
15284 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15285 v2.AuxInt = int32ToAuxInt(256)
15286 v2.AddArg(v1)
15287 v.AddArg3(v0, v1, v2)
15288 return true
15289 }
15290 }
15291 func rewriteValueARM_OpRsh16x32(v *Value) bool {
15292 v_1 := v.Args[1]
15293 v_0 := v.Args[0]
15294 b := v.Block
15295 typ := &b.Func.Config.Types
15296
15297
15298 for {
15299 x := v_0
15300 y := v_1
15301 v.reset(OpARMSRAcond)
15302 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15303 v0.AddArg(x)
15304 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15305 v1.AuxInt = int32ToAuxInt(256)
15306 v1.AddArg(y)
15307 v.AddArg3(v0, y, v1)
15308 return true
15309 }
15310 }
15311 func rewriteValueARM_OpRsh16x64(v *Value) bool {
15312 v_1 := v.Args[1]
15313 v_0 := v.Args[0]
15314 b := v.Block
15315 typ := &b.Func.Config.Types
15316
15317
15318
15319 for {
15320 x := v_0
15321 if v_1.Op != OpConst64 {
15322 break
15323 }
15324 c := auxIntToInt64(v_1.AuxInt)
15325 if !(uint64(c) < 16) {
15326 break
15327 }
15328 v.reset(OpARMSRAconst)
15329 v.AuxInt = int32ToAuxInt(int32(c + 16))
15330 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15331 v0.AuxInt = int32ToAuxInt(16)
15332 v0.AddArg(x)
15333 v.AddArg(v0)
15334 return true
15335 }
15336
15337
15338
15339 for {
15340 x := v_0
15341 if v_1.Op != OpConst64 {
15342 break
15343 }
15344 c := auxIntToInt64(v_1.AuxInt)
15345 if !(uint64(c) >= 16) {
15346 break
15347 }
15348 v.reset(OpARMSRAconst)
15349 v.AuxInt = int32ToAuxInt(31)
15350 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15351 v0.AuxInt = int32ToAuxInt(16)
15352 v0.AddArg(x)
15353 v.AddArg(v0)
15354 return true
15355 }
15356 return false
15357 }
15358 func rewriteValueARM_OpRsh16x8(v *Value) bool {
15359 v_1 := v.Args[1]
15360 v_0 := v.Args[0]
15361 b := v.Block
15362 typ := &b.Func.Config.Types
15363
15364
15365 for {
15366 x := v_0
15367 y := v_1
15368 v.reset(OpARMSRA)
15369 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15370 v0.AddArg(x)
15371 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15372 v1.AddArg(y)
15373 v.AddArg2(v0, v1)
15374 return true
15375 }
15376 }
15377 func rewriteValueARM_OpRsh32Ux16(v *Value) bool {
15378 v_1 := v.Args[1]
15379 v_0 := v.Args[0]
15380 b := v.Block
15381 typ := &b.Func.Config.Types
15382
15383
15384 for {
15385 x := v_0
15386 y := v_1
15387 v.reset(OpARMCMOVWHSconst)
15388 v.AuxInt = int32ToAuxInt(0)
15389 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15390 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15391 v1.AddArg(y)
15392 v0.AddArg2(x, v1)
15393 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15394 v2.AuxInt = int32ToAuxInt(256)
15395 v2.AddArg(v1)
15396 v.AddArg2(v0, v2)
15397 return true
15398 }
15399 }
15400 func rewriteValueARM_OpRsh32Ux32(v *Value) bool {
15401 v_1 := v.Args[1]
15402 v_0 := v.Args[0]
15403 b := v.Block
15404
15405
15406 for {
15407 x := v_0
15408 y := v_1
15409 v.reset(OpARMCMOVWHSconst)
15410 v.AuxInt = int32ToAuxInt(0)
15411 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15412 v0.AddArg2(x, y)
15413 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15414 v1.AuxInt = int32ToAuxInt(256)
15415 v1.AddArg(y)
15416 v.AddArg2(v0, v1)
15417 return true
15418 }
15419 }
15420 func rewriteValueARM_OpRsh32Ux64(v *Value) bool {
15421 v_1 := v.Args[1]
15422 v_0 := v.Args[0]
15423
15424
15425
15426 for {
15427 x := v_0
15428 if v_1.Op != OpConst64 {
15429 break
15430 }
15431 c := auxIntToInt64(v_1.AuxInt)
15432 if !(uint64(c) < 32) {
15433 break
15434 }
15435 v.reset(OpARMSRLconst)
15436 v.AuxInt = int32ToAuxInt(int32(c))
15437 v.AddArg(x)
15438 return true
15439 }
15440
15441
15442
15443 for {
15444 if v_1.Op != OpConst64 {
15445 break
15446 }
15447 c := auxIntToInt64(v_1.AuxInt)
15448 if !(uint64(c) >= 32) {
15449 break
15450 }
15451 v.reset(OpConst32)
15452 v.AuxInt = int32ToAuxInt(0)
15453 return true
15454 }
15455 return false
15456 }
15457 func rewriteValueARM_OpRsh32Ux8(v *Value) bool {
15458 v_1 := v.Args[1]
15459 v_0 := v.Args[0]
15460 b := v.Block
15461 typ := &b.Func.Config.Types
15462
15463
15464 for {
15465 x := v_0
15466 y := v_1
15467 v.reset(OpARMSRL)
15468 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15469 v0.AddArg(y)
15470 v.AddArg2(x, v0)
15471 return true
15472 }
15473 }
15474 func rewriteValueARM_OpRsh32x16(v *Value) bool {
15475 v_1 := v.Args[1]
15476 v_0 := v.Args[0]
15477 b := v.Block
15478 typ := &b.Func.Config.Types
15479
15480
15481 for {
15482 x := v_0
15483 y := v_1
15484 v.reset(OpARMSRAcond)
15485 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15486 v0.AddArg(y)
15487 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15488 v1.AuxInt = int32ToAuxInt(256)
15489 v1.AddArg(v0)
15490 v.AddArg3(x, v0, v1)
15491 return true
15492 }
15493 }
15494 func rewriteValueARM_OpRsh32x32(v *Value) bool {
15495 v_1 := v.Args[1]
15496 v_0 := v.Args[0]
15497 b := v.Block
15498
15499
15500 for {
15501 x := v_0
15502 y := v_1
15503 v.reset(OpARMSRAcond)
15504 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15505 v0.AuxInt = int32ToAuxInt(256)
15506 v0.AddArg(y)
15507 v.AddArg3(x, y, v0)
15508 return true
15509 }
15510 }
15511 func rewriteValueARM_OpRsh32x64(v *Value) bool {
15512 v_1 := v.Args[1]
15513 v_0 := v.Args[0]
15514
15515
15516
15517 for {
15518 x := v_0
15519 if v_1.Op != OpConst64 {
15520 break
15521 }
15522 c := auxIntToInt64(v_1.AuxInt)
15523 if !(uint64(c) < 32) {
15524 break
15525 }
15526 v.reset(OpARMSRAconst)
15527 v.AuxInt = int32ToAuxInt(int32(c))
15528 v.AddArg(x)
15529 return true
15530 }
15531
15532
15533
15534 for {
15535 x := v_0
15536 if v_1.Op != OpConst64 {
15537 break
15538 }
15539 c := auxIntToInt64(v_1.AuxInt)
15540 if !(uint64(c) >= 32) {
15541 break
15542 }
15543 v.reset(OpARMSRAconst)
15544 v.AuxInt = int32ToAuxInt(31)
15545 v.AddArg(x)
15546 return true
15547 }
15548 return false
15549 }
15550 func rewriteValueARM_OpRsh32x8(v *Value) bool {
15551 v_1 := v.Args[1]
15552 v_0 := v.Args[0]
15553 b := v.Block
15554 typ := &b.Func.Config.Types
15555
15556
15557 for {
15558 x := v_0
15559 y := v_1
15560 v.reset(OpARMSRA)
15561 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15562 v0.AddArg(y)
15563 v.AddArg2(x, v0)
15564 return true
15565 }
15566 }
15567 func rewriteValueARM_OpRsh8Ux16(v *Value) bool {
15568 v_1 := v.Args[1]
15569 v_0 := v.Args[0]
15570 b := v.Block
15571 typ := &b.Func.Config.Types
15572
15573
15574 for {
15575 x := v_0
15576 y := v_1
15577 v.reset(OpARMCMOVWHSconst)
15578 v.AuxInt = int32ToAuxInt(0)
15579 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15580 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15581 v1.AddArg(x)
15582 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15583 v2.AddArg(y)
15584 v0.AddArg2(v1, v2)
15585 v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15586 v3.AuxInt = int32ToAuxInt(256)
15587 v3.AddArg(v2)
15588 v.AddArg2(v0, v3)
15589 return true
15590 }
15591 }
15592 func rewriteValueARM_OpRsh8Ux32(v *Value) bool {
15593 v_1 := v.Args[1]
15594 v_0 := v.Args[0]
15595 b := v.Block
15596 typ := &b.Func.Config.Types
15597
15598
15599 for {
15600 x := v_0
15601 y := v_1
15602 v.reset(OpARMCMOVWHSconst)
15603 v.AuxInt = int32ToAuxInt(0)
15604 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15605 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15606 v1.AddArg(x)
15607 v0.AddArg2(v1, y)
15608 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15609 v2.AuxInt = int32ToAuxInt(256)
15610 v2.AddArg(y)
15611 v.AddArg2(v0, v2)
15612 return true
15613 }
15614 }
15615 func rewriteValueARM_OpRsh8Ux64(v *Value) bool {
15616 v_1 := v.Args[1]
15617 v_0 := v.Args[0]
15618 b := v.Block
15619 typ := &b.Func.Config.Types
15620
15621
15622
15623 for {
15624 x := v_0
15625 if v_1.Op != OpConst64 {
15626 break
15627 }
15628 c := auxIntToInt64(v_1.AuxInt)
15629 if !(uint64(c) < 8) {
15630 break
15631 }
15632 v.reset(OpARMSRLconst)
15633 v.AuxInt = int32ToAuxInt(int32(c + 24))
15634 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15635 v0.AuxInt = int32ToAuxInt(24)
15636 v0.AddArg(x)
15637 v.AddArg(v0)
15638 return true
15639 }
15640
15641
15642
15643 for {
15644 if v_1.Op != OpConst64 {
15645 break
15646 }
15647 c := auxIntToInt64(v_1.AuxInt)
15648 if !(uint64(c) >= 8) {
15649 break
15650 }
15651 v.reset(OpConst8)
15652 v.AuxInt = int8ToAuxInt(0)
15653 return true
15654 }
15655 return false
15656 }
15657 func rewriteValueARM_OpRsh8Ux8(v *Value) bool {
15658 v_1 := v.Args[1]
15659 v_0 := v.Args[0]
15660 b := v.Block
15661 typ := &b.Func.Config.Types
15662
15663
15664 for {
15665 x := v_0
15666 y := v_1
15667 v.reset(OpARMSRL)
15668 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15669 v0.AddArg(x)
15670 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15671 v1.AddArg(y)
15672 v.AddArg2(v0, v1)
15673 return true
15674 }
15675 }
15676 func rewriteValueARM_OpRsh8x16(v *Value) bool {
15677 v_1 := v.Args[1]
15678 v_0 := v.Args[0]
15679 b := v.Block
15680 typ := &b.Func.Config.Types
15681
15682
15683 for {
15684 x := v_0
15685 y := v_1
15686 v.reset(OpARMSRAcond)
15687 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15688 v0.AddArg(x)
15689 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15690 v1.AddArg(y)
15691 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15692 v2.AuxInt = int32ToAuxInt(256)
15693 v2.AddArg(v1)
15694 v.AddArg3(v0, v1, v2)
15695 return true
15696 }
15697 }
15698 func rewriteValueARM_OpRsh8x32(v *Value) bool {
15699 v_1 := v.Args[1]
15700 v_0 := v.Args[0]
15701 b := v.Block
15702 typ := &b.Func.Config.Types
15703
15704
15705 for {
15706 x := v_0
15707 y := v_1
15708 v.reset(OpARMSRAcond)
15709 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15710 v0.AddArg(x)
15711 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15712 v1.AuxInt = int32ToAuxInt(256)
15713 v1.AddArg(y)
15714 v.AddArg3(v0, y, v1)
15715 return true
15716 }
15717 }
15718 func rewriteValueARM_OpRsh8x64(v *Value) bool {
15719 v_1 := v.Args[1]
15720 v_0 := v.Args[0]
15721 b := v.Block
15722 typ := &b.Func.Config.Types
15723
15724
15725
15726 for {
15727 x := v_0
15728 if v_1.Op != OpConst64 {
15729 break
15730 }
15731 c := auxIntToInt64(v_1.AuxInt)
15732 if !(uint64(c) < 8) {
15733 break
15734 }
15735 v.reset(OpARMSRAconst)
15736 v.AuxInt = int32ToAuxInt(int32(c + 24))
15737 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15738 v0.AuxInt = int32ToAuxInt(24)
15739 v0.AddArg(x)
15740 v.AddArg(v0)
15741 return true
15742 }
15743
15744
15745
15746 for {
15747 x := v_0
15748 if v_1.Op != OpConst64 {
15749 break
15750 }
15751 c := auxIntToInt64(v_1.AuxInt)
15752 if !(uint64(c) >= 8) {
15753 break
15754 }
15755 v.reset(OpARMSRAconst)
15756 v.AuxInt = int32ToAuxInt(31)
15757 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15758 v0.AuxInt = int32ToAuxInt(24)
15759 v0.AddArg(x)
15760 v.AddArg(v0)
15761 return true
15762 }
15763 return false
15764 }
15765 func rewriteValueARM_OpRsh8x8(v *Value) bool {
15766 v_1 := v.Args[1]
15767 v_0 := v.Args[0]
15768 b := v.Block
15769 typ := &b.Func.Config.Types
15770
15771
15772 for {
15773 x := v_0
15774 y := v_1
15775 v.reset(OpARMSRA)
15776 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15777 v0.AddArg(x)
15778 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15779 v1.AddArg(y)
15780 v.AddArg2(v0, v1)
15781 return true
15782 }
15783 }
15784 func rewriteValueARM_OpSelect0(v *Value) bool {
15785 v_0 := v.Args[0]
15786
15787
15788 for {
15789 if v_0.Op != OpARMCALLudiv {
15790 break
15791 }
15792 _ = v_0.Args[1]
15793 x := v_0.Args[0]
15794 v_0_1 := v_0.Args[1]
15795 if v_0_1.Op != OpARMMOVWconst || auxIntToInt32(v_0_1.AuxInt) != 1 {
15796 break
15797 }
15798 v.copyOf(x)
15799 return true
15800 }
15801
15802
15803
15804 for {
15805 if v_0.Op != OpARMCALLudiv {
15806 break
15807 }
15808 _ = v_0.Args[1]
15809 x := v_0.Args[0]
15810 v_0_1 := v_0.Args[1]
15811 if v_0_1.Op != OpARMMOVWconst {
15812 break
15813 }
15814 c := auxIntToInt32(v_0_1.AuxInt)
15815 if !(isPowerOfTwo32(c)) {
15816 break
15817 }
15818 v.reset(OpARMSRLconst)
15819 v.AuxInt = int32ToAuxInt(int32(log32(c)))
15820 v.AddArg(x)
15821 return true
15822 }
15823
15824
15825
15826 for {
15827 if v_0.Op != OpARMCALLudiv {
15828 break
15829 }
15830 _ = v_0.Args[1]
15831 v_0_0 := v_0.Args[0]
15832 if v_0_0.Op != OpARMMOVWconst {
15833 break
15834 }
15835 c := auxIntToInt32(v_0_0.AuxInt)
15836 v_0_1 := v_0.Args[1]
15837 if v_0_1.Op != OpARMMOVWconst {
15838 break
15839 }
15840 d := auxIntToInt32(v_0_1.AuxInt)
15841 if !(d != 0) {
15842 break
15843 }
15844 v.reset(OpARMMOVWconst)
15845 v.AuxInt = int32ToAuxInt(int32(uint32(c) / uint32(d)))
15846 return true
15847 }
15848 return false
15849 }
15850 func rewriteValueARM_OpSelect1(v *Value) bool {
15851 v_0 := v.Args[0]
15852
15853
15854 for {
15855 if v_0.Op != OpARMCALLudiv {
15856 break
15857 }
15858 _ = v_0.Args[1]
15859 v_0_1 := v_0.Args[1]
15860 if v_0_1.Op != OpARMMOVWconst || auxIntToInt32(v_0_1.AuxInt) != 1 {
15861 break
15862 }
15863 v.reset(OpARMMOVWconst)
15864 v.AuxInt = int32ToAuxInt(0)
15865 return true
15866 }
15867
15868
15869
15870 for {
15871 if v_0.Op != OpARMCALLudiv {
15872 break
15873 }
15874 _ = v_0.Args[1]
15875 x := v_0.Args[0]
15876 v_0_1 := v_0.Args[1]
15877 if v_0_1.Op != OpARMMOVWconst {
15878 break
15879 }
15880 c := auxIntToInt32(v_0_1.AuxInt)
15881 if !(isPowerOfTwo32(c)) {
15882 break
15883 }
15884 v.reset(OpARMANDconst)
15885 v.AuxInt = int32ToAuxInt(c - 1)
15886 v.AddArg(x)
15887 return true
15888 }
15889
15890
15891
15892 for {
15893 if v_0.Op != OpARMCALLudiv {
15894 break
15895 }
15896 _ = v_0.Args[1]
15897 v_0_0 := v_0.Args[0]
15898 if v_0_0.Op != OpARMMOVWconst {
15899 break
15900 }
15901 c := auxIntToInt32(v_0_0.AuxInt)
15902 v_0_1 := v_0.Args[1]
15903 if v_0_1.Op != OpARMMOVWconst {
15904 break
15905 }
15906 d := auxIntToInt32(v_0_1.AuxInt)
15907 if !(d != 0) {
15908 break
15909 }
15910 v.reset(OpARMMOVWconst)
15911 v.AuxInt = int32ToAuxInt(int32(uint32(c) % uint32(d)))
15912 return true
15913 }
15914 return false
15915 }
15916 func rewriteValueARM_OpSignmask(v *Value) bool {
15917 v_0 := v.Args[0]
15918
15919
15920 for {
15921 x := v_0
15922 v.reset(OpARMSRAconst)
15923 v.AuxInt = int32ToAuxInt(31)
15924 v.AddArg(x)
15925 return true
15926 }
15927 }
15928 func rewriteValueARM_OpSlicemask(v *Value) bool {
15929 v_0 := v.Args[0]
15930 b := v.Block
15931
15932
15933 for {
15934 t := v.Type
15935 x := v_0
15936 v.reset(OpARMSRAconst)
15937 v.AuxInt = int32ToAuxInt(31)
15938 v0 := b.NewValue0(v.Pos, OpARMRSBconst, t)
15939 v0.AuxInt = int32ToAuxInt(0)
15940 v0.AddArg(x)
15941 v.AddArg(v0)
15942 return true
15943 }
15944 }
15945 func rewriteValueARM_OpStore(v *Value) bool {
15946 v_2 := v.Args[2]
15947 v_1 := v.Args[1]
15948 v_0 := v.Args[0]
15949
15950
15951
15952 for {
15953 t := auxToType(v.Aux)
15954 ptr := v_0
15955 val := v_1
15956 mem := v_2
15957 if !(t.Size() == 1) {
15958 break
15959 }
15960 v.reset(OpARMMOVBstore)
15961 v.AddArg3(ptr, val, mem)
15962 return true
15963 }
15964
15965
15966
15967 for {
15968 t := auxToType(v.Aux)
15969 ptr := v_0
15970 val := v_1
15971 mem := v_2
15972 if !(t.Size() == 2) {
15973 break
15974 }
15975 v.reset(OpARMMOVHstore)
15976 v.AddArg3(ptr, val, mem)
15977 return true
15978 }
15979
15980
15981
15982 for {
15983 t := auxToType(v.Aux)
15984 ptr := v_0
15985 val := v_1
15986 mem := v_2
15987 if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
15988 break
15989 }
15990 v.reset(OpARMMOVWstore)
15991 v.AddArg3(ptr, val, mem)
15992 return true
15993 }
15994
15995
15996
15997 for {
15998 t := auxToType(v.Aux)
15999 ptr := v_0
16000 val := v_1
16001 mem := v_2
16002 if !(t.Size() == 4 && is32BitFloat(val.Type)) {
16003 break
16004 }
16005 v.reset(OpARMMOVFstore)
16006 v.AddArg3(ptr, val, mem)
16007 return true
16008 }
16009
16010
16011
16012 for {
16013 t := auxToType(v.Aux)
16014 ptr := v_0
16015 val := v_1
16016 mem := v_2
16017 if !(t.Size() == 8 && is64BitFloat(val.Type)) {
16018 break
16019 }
16020 v.reset(OpARMMOVDstore)
16021 v.AddArg3(ptr, val, mem)
16022 return true
16023 }
16024 return false
16025 }
16026 func rewriteValueARM_OpZero(v *Value) bool {
16027 v_1 := v.Args[1]
16028 v_0 := v.Args[0]
16029 b := v.Block
16030 config := b.Func.Config
16031 typ := &b.Func.Config.Types
16032
16033
16034 for {
16035 if auxIntToInt64(v.AuxInt) != 0 {
16036 break
16037 }
16038 mem := v_1
16039 v.copyOf(mem)
16040 return true
16041 }
16042
16043
16044 for {
16045 if auxIntToInt64(v.AuxInt) != 1 {
16046 break
16047 }
16048 ptr := v_0
16049 mem := v_1
16050 v.reset(OpARMMOVBstore)
16051 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16052 v0.AuxInt = int32ToAuxInt(0)
16053 v.AddArg3(ptr, v0, mem)
16054 return true
16055 }
16056
16057
16058
16059 for {
16060 if auxIntToInt64(v.AuxInt) != 2 {
16061 break
16062 }
16063 t := auxToType(v.Aux)
16064 ptr := v_0
16065 mem := v_1
16066 if !(t.Alignment()%2 == 0) {
16067 break
16068 }
16069 v.reset(OpARMMOVHstore)
16070 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16071 v0.AuxInt = int32ToAuxInt(0)
16072 v.AddArg3(ptr, v0, mem)
16073 return true
16074 }
16075
16076
16077 for {
16078 if auxIntToInt64(v.AuxInt) != 2 {
16079 break
16080 }
16081 ptr := v_0
16082 mem := v_1
16083 v.reset(OpARMMOVBstore)
16084 v.AuxInt = int32ToAuxInt(1)
16085 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16086 v0.AuxInt = int32ToAuxInt(0)
16087 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16088 v1.AuxInt = int32ToAuxInt(0)
16089 v1.AddArg3(ptr, v0, mem)
16090 v.AddArg3(ptr, v0, v1)
16091 return true
16092 }
16093
16094
16095
16096 for {
16097 if auxIntToInt64(v.AuxInt) != 4 {
16098 break
16099 }
16100 t := auxToType(v.Aux)
16101 ptr := v_0
16102 mem := v_1
16103 if !(t.Alignment()%4 == 0) {
16104 break
16105 }
16106 v.reset(OpARMMOVWstore)
16107 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16108 v0.AuxInt = int32ToAuxInt(0)
16109 v.AddArg3(ptr, v0, mem)
16110 return true
16111 }
16112
16113
16114
16115 for {
16116 if auxIntToInt64(v.AuxInt) != 4 {
16117 break
16118 }
16119 t := auxToType(v.Aux)
16120 ptr := v_0
16121 mem := v_1
16122 if !(t.Alignment()%2 == 0) {
16123 break
16124 }
16125 v.reset(OpARMMOVHstore)
16126 v.AuxInt = int32ToAuxInt(2)
16127 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16128 v0.AuxInt = int32ToAuxInt(0)
16129 v1 := b.NewValue0(v.Pos, OpARMMOVHstore, types.TypeMem)
16130 v1.AuxInt = int32ToAuxInt(0)
16131 v1.AddArg3(ptr, v0, mem)
16132 v.AddArg3(ptr, v0, v1)
16133 return true
16134 }
16135
16136
16137 for {
16138 if auxIntToInt64(v.AuxInt) != 4 {
16139 break
16140 }
16141 ptr := v_0
16142 mem := v_1
16143 v.reset(OpARMMOVBstore)
16144 v.AuxInt = int32ToAuxInt(3)
16145 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16146 v0.AuxInt = int32ToAuxInt(0)
16147 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16148 v1.AuxInt = int32ToAuxInt(2)
16149 v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16150 v2.AuxInt = int32ToAuxInt(1)
16151 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16152 v3.AuxInt = int32ToAuxInt(0)
16153 v3.AddArg3(ptr, v0, mem)
16154 v2.AddArg3(ptr, v0, v3)
16155 v1.AddArg3(ptr, v0, v2)
16156 v.AddArg3(ptr, v0, v1)
16157 return true
16158 }
16159
16160
16161 for {
16162 if auxIntToInt64(v.AuxInt) != 3 {
16163 break
16164 }
16165 ptr := v_0
16166 mem := v_1
16167 v.reset(OpARMMOVBstore)
16168 v.AuxInt = int32ToAuxInt(2)
16169 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16170 v0.AuxInt = int32ToAuxInt(0)
16171 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16172 v1.AuxInt = int32ToAuxInt(1)
16173 v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16174 v2.AuxInt = int32ToAuxInt(0)
16175 v2.AddArg3(ptr, v0, mem)
16176 v1.AddArg3(ptr, v0, v2)
16177 v.AddArg3(ptr, v0, v1)
16178 return true
16179 }
16180
16181
16182
16183 for {
16184 s := auxIntToInt64(v.AuxInt)
16185 t := auxToType(v.Aux)
16186 ptr := v_0
16187 mem := v_1
16188 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0 && !config.noDuffDevice) {
16189 break
16190 }
16191 v.reset(OpARMDUFFZERO)
16192 v.AuxInt = int64ToAuxInt(4 * (128 - s/4))
16193 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16194 v0.AuxInt = int32ToAuxInt(0)
16195 v.AddArg3(ptr, v0, mem)
16196 return true
16197 }
16198
16199
16200
16201 for {
16202 s := auxIntToInt64(v.AuxInt)
16203 t := auxToType(v.Aux)
16204 ptr := v_0
16205 mem := v_1
16206 if !((s > 512 || config.noDuffDevice) || t.Alignment()%4 != 0) {
16207 break
16208 }
16209 v.reset(OpARMLoweredZero)
16210 v.AuxInt = int64ToAuxInt(t.Alignment())
16211 v0 := b.NewValue0(v.Pos, OpARMADDconst, ptr.Type)
16212 v0.AuxInt = int32ToAuxInt(int32(s - moveSize(t.Alignment(), config)))
16213 v0.AddArg(ptr)
16214 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16215 v1.AuxInt = int32ToAuxInt(0)
16216 v.AddArg4(ptr, v0, v1, mem)
16217 return true
16218 }
16219 return false
16220 }
16221 func rewriteValueARM_OpZeromask(v *Value) bool {
16222 v_0 := v.Args[0]
16223 b := v.Block
16224 typ := &b.Func.Config.Types
16225
16226
16227 for {
16228 x := v_0
16229 v.reset(OpARMSRAconst)
16230 v.AuxInt = int32ToAuxInt(31)
16231 v0 := b.NewValue0(v.Pos, OpARMRSBshiftRL, typ.Int32)
16232 v0.AuxInt = int32ToAuxInt(1)
16233 v0.AddArg2(x, x)
16234 v.AddArg(v0)
16235 return true
16236 }
16237 }
16238 func rewriteBlockARM(b *Block) bool {
16239 switch b.Kind {
16240 case BlockARMEQ:
16241
16242
16243
16244 for b.Controls[0].Op == OpARMFlagConstant {
16245 v_0 := b.Controls[0]
16246 fc := auxIntToFlagConstant(v_0.AuxInt)
16247 if !(fc.eq()) {
16248 break
16249 }
16250 b.Reset(BlockFirst)
16251 return true
16252 }
16253
16254
16255
16256 for b.Controls[0].Op == OpARMFlagConstant {
16257 v_0 := b.Controls[0]
16258 fc := auxIntToFlagConstant(v_0.AuxInt)
16259 if !(!fc.eq()) {
16260 break
16261 }
16262 b.Reset(BlockFirst)
16263 b.swapSuccessors()
16264 return true
16265 }
16266
16267
16268 for b.Controls[0].Op == OpARMInvertFlags {
16269 v_0 := b.Controls[0]
16270 cmp := v_0.Args[0]
16271 b.resetWithControl(BlockARMEQ, cmp)
16272 return true
16273 }
16274
16275
16276 for b.Controls[0].Op == OpARMCMP {
16277 v_0 := b.Controls[0]
16278 _ = v_0.Args[1]
16279 x := v_0.Args[0]
16280 v_0_1 := v_0.Args[1]
16281 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
16282 break
16283 }
16284 y := v_0_1.Args[0]
16285 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16286 v0.AddArg2(x, y)
16287 b.resetWithControl(BlockARMEQ, v0)
16288 return true
16289 }
16290
16291
16292 for b.Controls[0].Op == OpARMCMN {
16293 v_0 := b.Controls[0]
16294 _ = v_0.Args[1]
16295 v_0_0 := v_0.Args[0]
16296 v_0_1 := v_0.Args[1]
16297 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16298 x := v_0_0
16299 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
16300 continue
16301 }
16302 y := v_0_1.Args[0]
16303 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16304 v0.AddArg2(x, y)
16305 b.resetWithControl(BlockARMEQ, v0)
16306 return true
16307 }
16308 break
16309 }
16310
16311
16312
16313 for b.Controls[0].Op == OpARMCMPconst {
16314 v_0 := b.Controls[0]
16315 if auxIntToInt32(v_0.AuxInt) != 0 {
16316 break
16317 }
16318 l := v_0.Args[0]
16319 if l.Op != OpARMSUB {
16320 break
16321 }
16322 y := l.Args[1]
16323 x := l.Args[0]
16324 if !(l.Uses == 1) {
16325 break
16326 }
16327 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16328 v0.AddArg2(x, y)
16329 b.resetWithControl(BlockARMEQ, v0)
16330 return true
16331 }
16332
16333
16334
16335 for b.Controls[0].Op == OpARMCMPconst {
16336 v_0 := b.Controls[0]
16337 if auxIntToInt32(v_0.AuxInt) != 0 {
16338 break
16339 }
16340 l := v_0.Args[0]
16341 if l.Op != OpARMMULS {
16342 break
16343 }
16344 a := l.Args[2]
16345 x := l.Args[0]
16346 y := l.Args[1]
16347 if !(l.Uses == 1) {
16348 break
16349 }
16350 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16351 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
16352 v1.AddArg2(x, y)
16353 v0.AddArg2(a, v1)
16354 b.resetWithControl(BlockARMEQ, v0)
16355 return true
16356 }
16357
16358
16359
16360 for b.Controls[0].Op == OpARMCMPconst {
16361 v_0 := b.Controls[0]
16362 if auxIntToInt32(v_0.AuxInt) != 0 {
16363 break
16364 }
16365 l := v_0.Args[0]
16366 if l.Op != OpARMSUBconst {
16367 break
16368 }
16369 c := auxIntToInt32(l.AuxInt)
16370 x := l.Args[0]
16371 if !(l.Uses == 1) {
16372 break
16373 }
16374 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
16375 v0.AuxInt = int32ToAuxInt(c)
16376 v0.AddArg(x)
16377 b.resetWithControl(BlockARMEQ, v0)
16378 return true
16379 }
16380
16381
16382
16383 for b.Controls[0].Op == OpARMCMPconst {
16384 v_0 := b.Controls[0]
16385 if auxIntToInt32(v_0.AuxInt) != 0 {
16386 break
16387 }
16388 l := v_0.Args[0]
16389 if l.Op != OpARMSUBshiftLL {
16390 break
16391 }
16392 c := auxIntToInt32(l.AuxInt)
16393 y := l.Args[1]
16394 x := l.Args[0]
16395 if !(l.Uses == 1) {
16396 break
16397 }
16398 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
16399 v0.AuxInt = int32ToAuxInt(c)
16400 v0.AddArg2(x, y)
16401 b.resetWithControl(BlockARMEQ, v0)
16402 return true
16403 }
16404
16405
16406
16407 for b.Controls[0].Op == OpARMCMPconst {
16408 v_0 := b.Controls[0]
16409 if auxIntToInt32(v_0.AuxInt) != 0 {
16410 break
16411 }
16412 l := v_0.Args[0]
16413 if l.Op != OpARMSUBshiftRL {
16414 break
16415 }
16416 c := auxIntToInt32(l.AuxInt)
16417 y := l.Args[1]
16418 x := l.Args[0]
16419 if !(l.Uses == 1) {
16420 break
16421 }
16422 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
16423 v0.AuxInt = int32ToAuxInt(c)
16424 v0.AddArg2(x, y)
16425 b.resetWithControl(BlockARMEQ, v0)
16426 return true
16427 }
16428
16429
16430
16431 for b.Controls[0].Op == OpARMCMPconst {
16432 v_0 := b.Controls[0]
16433 if auxIntToInt32(v_0.AuxInt) != 0 {
16434 break
16435 }
16436 l := v_0.Args[0]
16437 if l.Op != OpARMSUBshiftRA {
16438 break
16439 }
16440 c := auxIntToInt32(l.AuxInt)
16441 y := l.Args[1]
16442 x := l.Args[0]
16443 if !(l.Uses == 1) {
16444 break
16445 }
16446 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
16447 v0.AuxInt = int32ToAuxInt(c)
16448 v0.AddArg2(x, y)
16449 b.resetWithControl(BlockARMEQ, v0)
16450 return true
16451 }
16452
16453
16454
16455 for b.Controls[0].Op == OpARMCMPconst {
16456 v_0 := b.Controls[0]
16457 if auxIntToInt32(v_0.AuxInt) != 0 {
16458 break
16459 }
16460 l := v_0.Args[0]
16461 if l.Op != OpARMSUBshiftLLreg {
16462 break
16463 }
16464 z := l.Args[2]
16465 x := l.Args[0]
16466 y := l.Args[1]
16467 if !(l.Uses == 1) {
16468 break
16469 }
16470 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
16471 v0.AddArg3(x, y, z)
16472 b.resetWithControl(BlockARMEQ, v0)
16473 return true
16474 }
16475
16476
16477
16478 for b.Controls[0].Op == OpARMCMPconst {
16479 v_0 := b.Controls[0]
16480 if auxIntToInt32(v_0.AuxInt) != 0 {
16481 break
16482 }
16483 l := v_0.Args[0]
16484 if l.Op != OpARMSUBshiftRLreg {
16485 break
16486 }
16487 z := l.Args[2]
16488 x := l.Args[0]
16489 y := l.Args[1]
16490 if !(l.Uses == 1) {
16491 break
16492 }
16493 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
16494 v0.AddArg3(x, y, z)
16495 b.resetWithControl(BlockARMEQ, v0)
16496 return true
16497 }
16498
16499
16500
16501 for b.Controls[0].Op == OpARMCMPconst {
16502 v_0 := b.Controls[0]
16503 if auxIntToInt32(v_0.AuxInt) != 0 {
16504 break
16505 }
16506 l := v_0.Args[0]
16507 if l.Op != OpARMSUBshiftRAreg {
16508 break
16509 }
16510 z := l.Args[2]
16511 x := l.Args[0]
16512 y := l.Args[1]
16513 if !(l.Uses == 1) {
16514 break
16515 }
16516 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
16517 v0.AddArg3(x, y, z)
16518 b.resetWithControl(BlockARMEQ, v0)
16519 return true
16520 }
16521
16522
16523
16524 for b.Controls[0].Op == OpARMCMPconst {
16525 v_0 := b.Controls[0]
16526 if auxIntToInt32(v_0.AuxInt) != 0 {
16527 break
16528 }
16529 l := v_0.Args[0]
16530 if l.Op != OpARMADD {
16531 break
16532 }
16533 _ = l.Args[1]
16534 l_0 := l.Args[0]
16535 l_1 := l.Args[1]
16536 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16537 x := l_0
16538 y := l_1
16539 if !(l.Uses == 1) {
16540 continue
16541 }
16542 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16543 v0.AddArg2(x, y)
16544 b.resetWithControl(BlockARMEQ, v0)
16545 return true
16546 }
16547 break
16548 }
16549
16550
16551
16552 for b.Controls[0].Op == OpARMCMPconst {
16553 v_0 := b.Controls[0]
16554 if auxIntToInt32(v_0.AuxInt) != 0 {
16555 break
16556 }
16557 l := v_0.Args[0]
16558 if l.Op != OpARMMULA {
16559 break
16560 }
16561 a := l.Args[2]
16562 x := l.Args[0]
16563 y := l.Args[1]
16564 if !(l.Uses == 1) {
16565 break
16566 }
16567 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16568 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
16569 v1.AddArg2(x, y)
16570 v0.AddArg2(a, v1)
16571 b.resetWithControl(BlockARMEQ, v0)
16572 return true
16573 }
16574
16575
16576
16577 for b.Controls[0].Op == OpARMCMPconst {
16578 v_0 := b.Controls[0]
16579 if auxIntToInt32(v_0.AuxInt) != 0 {
16580 break
16581 }
16582 l := v_0.Args[0]
16583 if l.Op != OpARMADDconst {
16584 break
16585 }
16586 c := auxIntToInt32(l.AuxInt)
16587 x := l.Args[0]
16588 if !(l.Uses == 1) {
16589 break
16590 }
16591 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
16592 v0.AuxInt = int32ToAuxInt(c)
16593 v0.AddArg(x)
16594 b.resetWithControl(BlockARMEQ, v0)
16595 return true
16596 }
16597
16598
16599
16600 for b.Controls[0].Op == OpARMCMPconst {
16601 v_0 := b.Controls[0]
16602 if auxIntToInt32(v_0.AuxInt) != 0 {
16603 break
16604 }
16605 l := v_0.Args[0]
16606 if l.Op != OpARMADDshiftLL {
16607 break
16608 }
16609 c := auxIntToInt32(l.AuxInt)
16610 y := l.Args[1]
16611 x := l.Args[0]
16612 if !(l.Uses == 1) {
16613 break
16614 }
16615 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
16616 v0.AuxInt = int32ToAuxInt(c)
16617 v0.AddArg2(x, y)
16618 b.resetWithControl(BlockARMEQ, v0)
16619 return true
16620 }
16621
16622
16623
16624 for b.Controls[0].Op == OpARMCMPconst {
16625 v_0 := b.Controls[0]
16626 if auxIntToInt32(v_0.AuxInt) != 0 {
16627 break
16628 }
16629 l := v_0.Args[0]
16630 if l.Op != OpARMADDshiftRL {
16631 break
16632 }
16633 c := auxIntToInt32(l.AuxInt)
16634 y := l.Args[1]
16635 x := l.Args[0]
16636 if !(l.Uses == 1) {
16637 break
16638 }
16639 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
16640 v0.AuxInt = int32ToAuxInt(c)
16641 v0.AddArg2(x, y)
16642 b.resetWithControl(BlockARMEQ, v0)
16643 return true
16644 }
16645
16646
16647
16648 for b.Controls[0].Op == OpARMCMPconst {
16649 v_0 := b.Controls[0]
16650 if auxIntToInt32(v_0.AuxInt) != 0 {
16651 break
16652 }
16653 l := v_0.Args[0]
16654 if l.Op != OpARMADDshiftRA {
16655 break
16656 }
16657 c := auxIntToInt32(l.AuxInt)
16658 y := l.Args[1]
16659 x := l.Args[0]
16660 if !(l.Uses == 1) {
16661 break
16662 }
16663 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
16664 v0.AuxInt = int32ToAuxInt(c)
16665 v0.AddArg2(x, y)
16666 b.resetWithControl(BlockARMEQ, v0)
16667 return true
16668 }
16669
16670
16671
16672 for b.Controls[0].Op == OpARMCMPconst {
16673 v_0 := b.Controls[0]
16674 if auxIntToInt32(v_0.AuxInt) != 0 {
16675 break
16676 }
16677 l := v_0.Args[0]
16678 if l.Op != OpARMADDshiftLLreg {
16679 break
16680 }
16681 z := l.Args[2]
16682 x := l.Args[0]
16683 y := l.Args[1]
16684 if !(l.Uses == 1) {
16685 break
16686 }
16687 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
16688 v0.AddArg3(x, y, z)
16689 b.resetWithControl(BlockARMEQ, v0)
16690 return true
16691 }
16692
16693
16694
16695 for b.Controls[0].Op == OpARMCMPconst {
16696 v_0 := b.Controls[0]
16697 if auxIntToInt32(v_0.AuxInt) != 0 {
16698 break
16699 }
16700 l := v_0.Args[0]
16701 if l.Op != OpARMADDshiftRLreg {
16702 break
16703 }
16704 z := l.Args[2]
16705 x := l.Args[0]
16706 y := l.Args[1]
16707 if !(l.Uses == 1) {
16708 break
16709 }
16710 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
16711 v0.AddArg3(x, y, z)
16712 b.resetWithControl(BlockARMEQ, v0)
16713 return true
16714 }
16715
16716
16717
16718 for b.Controls[0].Op == OpARMCMPconst {
16719 v_0 := b.Controls[0]
16720 if auxIntToInt32(v_0.AuxInt) != 0 {
16721 break
16722 }
16723 l := v_0.Args[0]
16724 if l.Op != OpARMADDshiftRAreg {
16725 break
16726 }
16727 z := l.Args[2]
16728 x := l.Args[0]
16729 y := l.Args[1]
16730 if !(l.Uses == 1) {
16731 break
16732 }
16733 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
16734 v0.AddArg3(x, y, z)
16735 b.resetWithControl(BlockARMEQ, v0)
16736 return true
16737 }
16738
16739
16740
16741 for b.Controls[0].Op == OpARMCMPconst {
16742 v_0 := b.Controls[0]
16743 if auxIntToInt32(v_0.AuxInt) != 0 {
16744 break
16745 }
16746 l := v_0.Args[0]
16747 if l.Op != OpARMAND {
16748 break
16749 }
16750 _ = l.Args[1]
16751 l_0 := l.Args[0]
16752 l_1 := l.Args[1]
16753 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16754 x := l_0
16755 y := l_1
16756 if !(l.Uses == 1) {
16757 continue
16758 }
16759 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
16760 v0.AddArg2(x, y)
16761 b.resetWithControl(BlockARMEQ, v0)
16762 return true
16763 }
16764 break
16765 }
16766
16767
16768
16769 for b.Controls[0].Op == OpARMCMPconst {
16770 v_0 := b.Controls[0]
16771 if auxIntToInt32(v_0.AuxInt) != 0 {
16772 break
16773 }
16774 l := v_0.Args[0]
16775 if l.Op != OpARMANDconst {
16776 break
16777 }
16778 c := auxIntToInt32(l.AuxInt)
16779 x := l.Args[0]
16780 if !(l.Uses == 1) {
16781 break
16782 }
16783 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
16784 v0.AuxInt = int32ToAuxInt(c)
16785 v0.AddArg(x)
16786 b.resetWithControl(BlockARMEQ, v0)
16787 return true
16788 }
16789
16790
16791
16792 for b.Controls[0].Op == OpARMCMPconst {
16793 v_0 := b.Controls[0]
16794 if auxIntToInt32(v_0.AuxInt) != 0 {
16795 break
16796 }
16797 l := v_0.Args[0]
16798 if l.Op != OpARMANDshiftLL {
16799 break
16800 }
16801 c := auxIntToInt32(l.AuxInt)
16802 y := l.Args[1]
16803 x := l.Args[0]
16804 if !(l.Uses == 1) {
16805 break
16806 }
16807 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
16808 v0.AuxInt = int32ToAuxInt(c)
16809 v0.AddArg2(x, y)
16810 b.resetWithControl(BlockARMEQ, v0)
16811 return true
16812 }
16813
16814
16815
16816 for b.Controls[0].Op == OpARMCMPconst {
16817 v_0 := b.Controls[0]
16818 if auxIntToInt32(v_0.AuxInt) != 0 {
16819 break
16820 }
16821 l := v_0.Args[0]
16822 if l.Op != OpARMANDshiftRL {
16823 break
16824 }
16825 c := auxIntToInt32(l.AuxInt)
16826 y := l.Args[1]
16827 x := l.Args[0]
16828 if !(l.Uses == 1) {
16829 break
16830 }
16831 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
16832 v0.AuxInt = int32ToAuxInt(c)
16833 v0.AddArg2(x, y)
16834 b.resetWithControl(BlockARMEQ, v0)
16835 return true
16836 }
16837
16838
16839
16840 for b.Controls[0].Op == OpARMCMPconst {
16841 v_0 := b.Controls[0]
16842 if auxIntToInt32(v_0.AuxInt) != 0 {
16843 break
16844 }
16845 l := v_0.Args[0]
16846 if l.Op != OpARMANDshiftRA {
16847 break
16848 }
16849 c := auxIntToInt32(l.AuxInt)
16850 y := l.Args[1]
16851 x := l.Args[0]
16852 if !(l.Uses == 1) {
16853 break
16854 }
16855 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
16856 v0.AuxInt = int32ToAuxInt(c)
16857 v0.AddArg2(x, y)
16858 b.resetWithControl(BlockARMEQ, v0)
16859 return true
16860 }
16861
16862
16863
16864 for b.Controls[0].Op == OpARMCMPconst {
16865 v_0 := b.Controls[0]
16866 if auxIntToInt32(v_0.AuxInt) != 0 {
16867 break
16868 }
16869 l := v_0.Args[0]
16870 if l.Op != OpARMANDshiftLLreg {
16871 break
16872 }
16873 z := l.Args[2]
16874 x := l.Args[0]
16875 y := l.Args[1]
16876 if !(l.Uses == 1) {
16877 break
16878 }
16879 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
16880 v0.AddArg3(x, y, z)
16881 b.resetWithControl(BlockARMEQ, v0)
16882 return true
16883 }
16884
16885
16886
16887 for b.Controls[0].Op == OpARMCMPconst {
16888 v_0 := b.Controls[0]
16889 if auxIntToInt32(v_0.AuxInt) != 0 {
16890 break
16891 }
16892 l := v_0.Args[0]
16893 if l.Op != OpARMANDshiftRLreg {
16894 break
16895 }
16896 z := l.Args[2]
16897 x := l.Args[0]
16898 y := l.Args[1]
16899 if !(l.Uses == 1) {
16900 break
16901 }
16902 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
16903 v0.AddArg3(x, y, z)
16904 b.resetWithControl(BlockARMEQ, v0)
16905 return true
16906 }
16907
16908
16909
16910 for b.Controls[0].Op == OpARMCMPconst {
16911 v_0 := b.Controls[0]
16912 if auxIntToInt32(v_0.AuxInt) != 0 {
16913 break
16914 }
16915 l := v_0.Args[0]
16916 if l.Op != OpARMANDshiftRAreg {
16917 break
16918 }
16919 z := l.Args[2]
16920 x := l.Args[0]
16921 y := l.Args[1]
16922 if !(l.Uses == 1) {
16923 break
16924 }
16925 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
16926 v0.AddArg3(x, y, z)
16927 b.resetWithControl(BlockARMEQ, v0)
16928 return true
16929 }
16930
16931
16932
16933 for b.Controls[0].Op == OpARMCMPconst {
16934 v_0 := b.Controls[0]
16935 if auxIntToInt32(v_0.AuxInt) != 0 {
16936 break
16937 }
16938 l := v_0.Args[0]
16939 if l.Op != OpARMXOR {
16940 break
16941 }
16942 _ = l.Args[1]
16943 l_0 := l.Args[0]
16944 l_1 := l.Args[1]
16945 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16946 x := l_0
16947 y := l_1
16948 if !(l.Uses == 1) {
16949 continue
16950 }
16951 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
16952 v0.AddArg2(x, y)
16953 b.resetWithControl(BlockARMEQ, v0)
16954 return true
16955 }
16956 break
16957 }
16958
16959
16960
16961 for b.Controls[0].Op == OpARMCMPconst {
16962 v_0 := b.Controls[0]
16963 if auxIntToInt32(v_0.AuxInt) != 0 {
16964 break
16965 }
16966 l := v_0.Args[0]
16967 if l.Op != OpARMXORconst {
16968 break
16969 }
16970 c := auxIntToInt32(l.AuxInt)
16971 x := l.Args[0]
16972 if !(l.Uses == 1) {
16973 break
16974 }
16975 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
16976 v0.AuxInt = int32ToAuxInt(c)
16977 v0.AddArg(x)
16978 b.resetWithControl(BlockARMEQ, v0)
16979 return true
16980 }
16981
16982
16983
16984 for b.Controls[0].Op == OpARMCMPconst {
16985 v_0 := b.Controls[0]
16986 if auxIntToInt32(v_0.AuxInt) != 0 {
16987 break
16988 }
16989 l := v_0.Args[0]
16990 if l.Op != OpARMXORshiftLL {
16991 break
16992 }
16993 c := auxIntToInt32(l.AuxInt)
16994 y := l.Args[1]
16995 x := l.Args[0]
16996 if !(l.Uses == 1) {
16997 break
16998 }
16999 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
17000 v0.AuxInt = int32ToAuxInt(c)
17001 v0.AddArg2(x, y)
17002 b.resetWithControl(BlockARMEQ, v0)
17003 return true
17004 }
17005
17006
17007
17008 for b.Controls[0].Op == OpARMCMPconst {
17009 v_0 := b.Controls[0]
17010 if auxIntToInt32(v_0.AuxInt) != 0 {
17011 break
17012 }
17013 l := v_0.Args[0]
17014 if l.Op != OpARMXORshiftRL {
17015 break
17016 }
17017 c := auxIntToInt32(l.AuxInt)
17018 y := l.Args[1]
17019 x := l.Args[0]
17020 if !(l.Uses == 1) {
17021 break
17022 }
17023 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
17024 v0.AuxInt = int32ToAuxInt(c)
17025 v0.AddArg2(x, y)
17026 b.resetWithControl(BlockARMEQ, v0)
17027 return true
17028 }
17029
17030
17031
17032 for b.Controls[0].Op == OpARMCMPconst {
17033 v_0 := b.Controls[0]
17034 if auxIntToInt32(v_0.AuxInt) != 0 {
17035 break
17036 }
17037 l := v_0.Args[0]
17038 if l.Op != OpARMXORshiftRA {
17039 break
17040 }
17041 c := auxIntToInt32(l.AuxInt)
17042 y := l.Args[1]
17043 x := l.Args[0]
17044 if !(l.Uses == 1) {
17045 break
17046 }
17047 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
17048 v0.AuxInt = int32ToAuxInt(c)
17049 v0.AddArg2(x, y)
17050 b.resetWithControl(BlockARMEQ, v0)
17051 return true
17052 }
17053
17054
17055
17056 for b.Controls[0].Op == OpARMCMPconst {
17057 v_0 := b.Controls[0]
17058 if auxIntToInt32(v_0.AuxInt) != 0 {
17059 break
17060 }
17061 l := v_0.Args[0]
17062 if l.Op != OpARMXORshiftLLreg {
17063 break
17064 }
17065 z := l.Args[2]
17066 x := l.Args[0]
17067 y := l.Args[1]
17068 if !(l.Uses == 1) {
17069 break
17070 }
17071 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
17072 v0.AddArg3(x, y, z)
17073 b.resetWithControl(BlockARMEQ, v0)
17074 return true
17075 }
17076
17077
17078
17079 for b.Controls[0].Op == OpARMCMPconst {
17080 v_0 := b.Controls[0]
17081 if auxIntToInt32(v_0.AuxInt) != 0 {
17082 break
17083 }
17084 l := v_0.Args[0]
17085 if l.Op != OpARMXORshiftRLreg {
17086 break
17087 }
17088 z := l.Args[2]
17089 x := l.Args[0]
17090 y := l.Args[1]
17091 if !(l.Uses == 1) {
17092 break
17093 }
17094 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
17095 v0.AddArg3(x, y, z)
17096 b.resetWithControl(BlockARMEQ, v0)
17097 return true
17098 }
17099
17100
17101
17102 for b.Controls[0].Op == OpARMCMPconst {
17103 v_0 := b.Controls[0]
17104 if auxIntToInt32(v_0.AuxInt) != 0 {
17105 break
17106 }
17107 l := v_0.Args[0]
17108 if l.Op != OpARMXORshiftRAreg {
17109 break
17110 }
17111 z := l.Args[2]
17112 x := l.Args[0]
17113 y := l.Args[1]
17114 if !(l.Uses == 1) {
17115 break
17116 }
17117 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
17118 v0.AddArg3(x, y, z)
17119 b.resetWithControl(BlockARMEQ, v0)
17120 return true
17121 }
17122 case BlockARMGE:
17123
17124
17125
17126 for b.Controls[0].Op == OpARMFlagConstant {
17127 v_0 := b.Controls[0]
17128 fc := auxIntToFlagConstant(v_0.AuxInt)
17129 if !(fc.ge()) {
17130 break
17131 }
17132 b.Reset(BlockFirst)
17133 return true
17134 }
17135
17136
17137
17138 for b.Controls[0].Op == OpARMFlagConstant {
17139 v_0 := b.Controls[0]
17140 fc := auxIntToFlagConstant(v_0.AuxInt)
17141 if !(!fc.ge()) {
17142 break
17143 }
17144 b.Reset(BlockFirst)
17145 b.swapSuccessors()
17146 return true
17147 }
17148
17149
17150 for b.Controls[0].Op == OpARMInvertFlags {
17151 v_0 := b.Controls[0]
17152 cmp := v_0.Args[0]
17153 b.resetWithControl(BlockARMLE, cmp)
17154 return true
17155 }
17156
17157
17158
17159 for b.Controls[0].Op == OpARMCMPconst {
17160 v_0 := b.Controls[0]
17161 if auxIntToInt32(v_0.AuxInt) != 0 {
17162 break
17163 }
17164 l := v_0.Args[0]
17165 if l.Op != OpARMSUB {
17166 break
17167 }
17168 y := l.Args[1]
17169 x := l.Args[0]
17170 if !(l.Uses == 1) {
17171 break
17172 }
17173 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
17174 v0.AddArg2(x, y)
17175 b.resetWithControl(BlockARMGEnoov, v0)
17176 return true
17177 }
17178
17179
17180
17181 for b.Controls[0].Op == OpARMCMPconst {
17182 v_0 := b.Controls[0]
17183 if auxIntToInt32(v_0.AuxInt) != 0 {
17184 break
17185 }
17186 l := v_0.Args[0]
17187 if l.Op != OpARMMULS {
17188 break
17189 }
17190 a := l.Args[2]
17191 x := l.Args[0]
17192 y := l.Args[1]
17193 if !(l.Uses == 1) {
17194 break
17195 }
17196 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
17197 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
17198 v1.AddArg2(x, y)
17199 v0.AddArg2(a, v1)
17200 b.resetWithControl(BlockARMGEnoov, v0)
17201 return true
17202 }
17203
17204
17205
17206 for b.Controls[0].Op == OpARMCMPconst {
17207 v_0 := b.Controls[0]
17208 if auxIntToInt32(v_0.AuxInt) != 0 {
17209 break
17210 }
17211 l := v_0.Args[0]
17212 if l.Op != OpARMSUBconst {
17213 break
17214 }
17215 c := auxIntToInt32(l.AuxInt)
17216 x := l.Args[0]
17217 if !(l.Uses == 1) {
17218 break
17219 }
17220 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
17221 v0.AuxInt = int32ToAuxInt(c)
17222 v0.AddArg(x)
17223 b.resetWithControl(BlockARMGEnoov, v0)
17224 return true
17225 }
17226
17227
17228
17229 for b.Controls[0].Op == OpARMCMPconst {
17230 v_0 := b.Controls[0]
17231 if auxIntToInt32(v_0.AuxInt) != 0 {
17232 break
17233 }
17234 l := v_0.Args[0]
17235 if l.Op != OpARMSUBshiftLL {
17236 break
17237 }
17238 c := auxIntToInt32(l.AuxInt)
17239 y := l.Args[1]
17240 x := l.Args[0]
17241 if !(l.Uses == 1) {
17242 break
17243 }
17244 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
17245 v0.AuxInt = int32ToAuxInt(c)
17246 v0.AddArg2(x, y)
17247 b.resetWithControl(BlockARMGEnoov, v0)
17248 return true
17249 }
17250
17251
17252
17253 for b.Controls[0].Op == OpARMCMPconst {
17254 v_0 := b.Controls[0]
17255 if auxIntToInt32(v_0.AuxInt) != 0 {
17256 break
17257 }
17258 l := v_0.Args[0]
17259 if l.Op != OpARMSUBshiftRL {
17260 break
17261 }
17262 c := auxIntToInt32(l.AuxInt)
17263 y := l.Args[1]
17264 x := l.Args[0]
17265 if !(l.Uses == 1) {
17266 break
17267 }
17268 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
17269 v0.AuxInt = int32ToAuxInt(c)
17270 v0.AddArg2(x, y)
17271 b.resetWithControl(BlockARMGEnoov, v0)
17272 return true
17273 }
17274
17275
17276
17277 for b.Controls[0].Op == OpARMCMPconst {
17278 v_0 := b.Controls[0]
17279 if auxIntToInt32(v_0.AuxInt) != 0 {
17280 break
17281 }
17282 l := v_0.Args[0]
17283 if l.Op != OpARMSUBshiftRA {
17284 break
17285 }
17286 c := auxIntToInt32(l.AuxInt)
17287 y := l.Args[1]
17288 x := l.Args[0]
17289 if !(l.Uses == 1) {
17290 break
17291 }
17292 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
17293 v0.AuxInt = int32ToAuxInt(c)
17294 v0.AddArg2(x, y)
17295 b.resetWithControl(BlockARMGEnoov, v0)
17296 return true
17297 }
17298
17299
17300
17301 for b.Controls[0].Op == OpARMCMPconst {
17302 v_0 := b.Controls[0]
17303 if auxIntToInt32(v_0.AuxInt) != 0 {
17304 break
17305 }
17306 l := v_0.Args[0]
17307 if l.Op != OpARMSUBshiftLLreg {
17308 break
17309 }
17310 z := l.Args[2]
17311 x := l.Args[0]
17312 y := l.Args[1]
17313 if !(l.Uses == 1) {
17314 break
17315 }
17316 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
17317 v0.AddArg3(x, y, z)
17318 b.resetWithControl(BlockARMGEnoov, v0)
17319 return true
17320 }
17321
17322
17323
17324 for b.Controls[0].Op == OpARMCMPconst {
17325 v_0 := b.Controls[0]
17326 if auxIntToInt32(v_0.AuxInt) != 0 {
17327 break
17328 }
17329 l := v_0.Args[0]
17330 if l.Op != OpARMSUBshiftRLreg {
17331 break
17332 }
17333 z := l.Args[2]
17334 x := l.Args[0]
17335 y := l.Args[1]
17336 if !(l.Uses == 1) {
17337 break
17338 }
17339 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
17340 v0.AddArg3(x, y, z)
17341 b.resetWithControl(BlockARMGEnoov, v0)
17342 return true
17343 }
17344
17345
17346
17347 for b.Controls[0].Op == OpARMCMPconst {
17348 v_0 := b.Controls[0]
17349 if auxIntToInt32(v_0.AuxInt) != 0 {
17350 break
17351 }
17352 l := v_0.Args[0]
17353 if l.Op != OpARMSUBshiftRAreg {
17354 break
17355 }
17356 z := l.Args[2]
17357 x := l.Args[0]
17358 y := l.Args[1]
17359 if !(l.Uses == 1) {
17360 break
17361 }
17362 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
17363 v0.AddArg3(x, y, z)
17364 b.resetWithControl(BlockARMGEnoov, v0)
17365 return true
17366 }
17367
17368
17369
17370 for b.Controls[0].Op == OpARMCMPconst {
17371 v_0 := b.Controls[0]
17372 if auxIntToInt32(v_0.AuxInt) != 0 {
17373 break
17374 }
17375 l := v_0.Args[0]
17376 if l.Op != OpARMADD {
17377 break
17378 }
17379 _ = l.Args[1]
17380 l_0 := l.Args[0]
17381 l_1 := l.Args[1]
17382 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17383 x := l_0
17384 y := l_1
17385 if !(l.Uses == 1) {
17386 continue
17387 }
17388 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
17389 v0.AddArg2(x, y)
17390 b.resetWithControl(BlockARMGEnoov, v0)
17391 return true
17392 }
17393 break
17394 }
17395
17396
17397
17398 for b.Controls[0].Op == OpARMCMPconst {
17399 v_0 := b.Controls[0]
17400 if auxIntToInt32(v_0.AuxInt) != 0 {
17401 break
17402 }
17403 l := v_0.Args[0]
17404 if l.Op != OpARMMULA {
17405 break
17406 }
17407 a := l.Args[2]
17408 x := l.Args[0]
17409 y := l.Args[1]
17410 if !(l.Uses == 1) {
17411 break
17412 }
17413 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
17414 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
17415 v1.AddArg2(x, y)
17416 v0.AddArg2(a, v1)
17417 b.resetWithControl(BlockARMGEnoov, v0)
17418 return true
17419 }
17420
17421
17422
17423 for b.Controls[0].Op == OpARMCMPconst {
17424 v_0 := b.Controls[0]
17425 if auxIntToInt32(v_0.AuxInt) != 0 {
17426 break
17427 }
17428 l := v_0.Args[0]
17429 if l.Op != OpARMADDconst {
17430 break
17431 }
17432 c := auxIntToInt32(l.AuxInt)
17433 x := l.Args[0]
17434 if !(l.Uses == 1) {
17435 break
17436 }
17437 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
17438 v0.AuxInt = int32ToAuxInt(c)
17439 v0.AddArg(x)
17440 b.resetWithControl(BlockARMGEnoov, v0)
17441 return true
17442 }
17443
17444
17445
17446 for b.Controls[0].Op == OpARMCMPconst {
17447 v_0 := b.Controls[0]
17448 if auxIntToInt32(v_0.AuxInt) != 0 {
17449 break
17450 }
17451 l := v_0.Args[0]
17452 if l.Op != OpARMADDshiftLL {
17453 break
17454 }
17455 c := auxIntToInt32(l.AuxInt)
17456 y := l.Args[1]
17457 x := l.Args[0]
17458 if !(l.Uses == 1) {
17459 break
17460 }
17461 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
17462 v0.AuxInt = int32ToAuxInt(c)
17463 v0.AddArg2(x, y)
17464 b.resetWithControl(BlockARMGEnoov, v0)
17465 return true
17466 }
17467
17468
17469
17470 for b.Controls[0].Op == OpARMCMPconst {
17471 v_0 := b.Controls[0]
17472 if auxIntToInt32(v_0.AuxInt) != 0 {
17473 break
17474 }
17475 l := v_0.Args[0]
17476 if l.Op != OpARMADDshiftRL {
17477 break
17478 }
17479 c := auxIntToInt32(l.AuxInt)
17480 y := l.Args[1]
17481 x := l.Args[0]
17482 if !(l.Uses == 1) {
17483 break
17484 }
17485 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
17486 v0.AuxInt = int32ToAuxInt(c)
17487 v0.AddArg2(x, y)
17488 b.resetWithControl(BlockARMGEnoov, v0)
17489 return true
17490 }
17491
17492
17493
17494 for b.Controls[0].Op == OpARMCMPconst {
17495 v_0 := b.Controls[0]
17496 if auxIntToInt32(v_0.AuxInt) != 0 {
17497 break
17498 }
17499 l := v_0.Args[0]
17500 if l.Op != OpARMADDshiftRA {
17501 break
17502 }
17503 c := auxIntToInt32(l.AuxInt)
17504 y := l.Args[1]
17505 x := l.Args[0]
17506 if !(l.Uses == 1) {
17507 break
17508 }
17509 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
17510 v0.AuxInt = int32ToAuxInt(c)
17511 v0.AddArg2(x, y)
17512 b.resetWithControl(BlockARMGEnoov, v0)
17513 return true
17514 }
17515
17516
17517
17518 for b.Controls[0].Op == OpARMCMPconst {
17519 v_0 := b.Controls[0]
17520 if auxIntToInt32(v_0.AuxInt) != 0 {
17521 break
17522 }
17523 l := v_0.Args[0]
17524 if l.Op != OpARMADDshiftLLreg {
17525 break
17526 }
17527 z := l.Args[2]
17528 x := l.Args[0]
17529 y := l.Args[1]
17530 if !(l.Uses == 1) {
17531 break
17532 }
17533 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
17534 v0.AddArg3(x, y, z)
17535 b.resetWithControl(BlockARMGEnoov, v0)
17536 return true
17537 }
17538
17539
17540
17541 for b.Controls[0].Op == OpARMCMPconst {
17542 v_0 := b.Controls[0]
17543 if auxIntToInt32(v_0.AuxInt) != 0 {
17544 break
17545 }
17546 l := v_0.Args[0]
17547 if l.Op != OpARMADDshiftRLreg {
17548 break
17549 }
17550 z := l.Args[2]
17551 x := l.Args[0]
17552 y := l.Args[1]
17553 if !(l.Uses == 1) {
17554 break
17555 }
17556 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
17557 v0.AddArg3(x, y, z)
17558 b.resetWithControl(BlockARMGEnoov, v0)
17559 return true
17560 }
17561
17562
17563
17564 for b.Controls[0].Op == OpARMCMPconst {
17565 v_0 := b.Controls[0]
17566 if auxIntToInt32(v_0.AuxInt) != 0 {
17567 break
17568 }
17569 l := v_0.Args[0]
17570 if l.Op != OpARMADDshiftRAreg {
17571 break
17572 }
17573 z := l.Args[2]
17574 x := l.Args[0]
17575 y := l.Args[1]
17576 if !(l.Uses == 1) {
17577 break
17578 }
17579 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
17580 v0.AddArg3(x, y, z)
17581 b.resetWithControl(BlockARMGEnoov, v0)
17582 return true
17583 }
17584
17585
17586
17587 for b.Controls[0].Op == OpARMCMPconst {
17588 v_0 := b.Controls[0]
17589 if auxIntToInt32(v_0.AuxInt) != 0 {
17590 break
17591 }
17592 l := v_0.Args[0]
17593 if l.Op != OpARMAND {
17594 break
17595 }
17596 _ = l.Args[1]
17597 l_0 := l.Args[0]
17598 l_1 := l.Args[1]
17599 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17600 x := l_0
17601 y := l_1
17602 if !(l.Uses == 1) {
17603 continue
17604 }
17605 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
17606 v0.AddArg2(x, y)
17607 b.resetWithControl(BlockARMGEnoov, v0)
17608 return true
17609 }
17610 break
17611 }
17612
17613
17614
17615 for b.Controls[0].Op == OpARMCMPconst {
17616 v_0 := b.Controls[0]
17617 if auxIntToInt32(v_0.AuxInt) != 0 {
17618 break
17619 }
17620 l := v_0.Args[0]
17621 if l.Op != OpARMANDconst {
17622 break
17623 }
17624 c := auxIntToInt32(l.AuxInt)
17625 x := l.Args[0]
17626 if !(l.Uses == 1) {
17627 break
17628 }
17629 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
17630 v0.AuxInt = int32ToAuxInt(c)
17631 v0.AddArg(x)
17632 b.resetWithControl(BlockARMGEnoov, v0)
17633 return true
17634 }
17635
17636
17637
17638 for b.Controls[0].Op == OpARMCMPconst {
17639 v_0 := b.Controls[0]
17640 if auxIntToInt32(v_0.AuxInt) != 0 {
17641 break
17642 }
17643 l := v_0.Args[0]
17644 if l.Op != OpARMANDshiftLL {
17645 break
17646 }
17647 c := auxIntToInt32(l.AuxInt)
17648 y := l.Args[1]
17649 x := l.Args[0]
17650 if !(l.Uses == 1) {
17651 break
17652 }
17653 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
17654 v0.AuxInt = int32ToAuxInt(c)
17655 v0.AddArg2(x, y)
17656 b.resetWithControl(BlockARMGEnoov, v0)
17657 return true
17658 }
17659
17660
17661
17662 for b.Controls[0].Op == OpARMCMPconst {
17663 v_0 := b.Controls[0]
17664 if auxIntToInt32(v_0.AuxInt) != 0 {
17665 break
17666 }
17667 l := v_0.Args[0]
17668 if l.Op != OpARMANDshiftRL {
17669 break
17670 }
17671 c := auxIntToInt32(l.AuxInt)
17672 y := l.Args[1]
17673 x := l.Args[0]
17674 if !(l.Uses == 1) {
17675 break
17676 }
17677 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
17678 v0.AuxInt = int32ToAuxInt(c)
17679 v0.AddArg2(x, y)
17680 b.resetWithControl(BlockARMGEnoov, v0)
17681 return true
17682 }
17683
17684
17685
17686 for b.Controls[0].Op == OpARMCMPconst {
17687 v_0 := b.Controls[0]
17688 if auxIntToInt32(v_0.AuxInt) != 0 {
17689 break
17690 }
17691 l := v_0.Args[0]
17692 if l.Op != OpARMANDshiftRA {
17693 break
17694 }
17695 c := auxIntToInt32(l.AuxInt)
17696 y := l.Args[1]
17697 x := l.Args[0]
17698 if !(l.Uses == 1) {
17699 break
17700 }
17701 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
17702 v0.AuxInt = int32ToAuxInt(c)
17703 v0.AddArg2(x, y)
17704 b.resetWithControl(BlockARMGEnoov, v0)
17705 return true
17706 }
17707
17708
17709
17710 for b.Controls[0].Op == OpARMCMPconst {
17711 v_0 := b.Controls[0]
17712 if auxIntToInt32(v_0.AuxInt) != 0 {
17713 break
17714 }
17715 l := v_0.Args[0]
17716 if l.Op != OpARMANDshiftLLreg {
17717 break
17718 }
17719 z := l.Args[2]
17720 x := l.Args[0]
17721 y := l.Args[1]
17722 if !(l.Uses == 1) {
17723 break
17724 }
17725 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
17726 v0.AddArg3(x, y, z)
17727 b.resetWithControl(BlockARMGEnoov, v0)
17728 return true
17729 }
17730
17731
17732
17733 for b.Controls[0].Op == OpARMCMPconst {
17734 v_0 := b.Controls[0]
17735 if auxIntToInt32(v_0.AuxInt) != 0 {
17736 break
17737 }
17738 l := v_0.Args[0]
17739 if l.Op != OpARMANDshiftRLreg {
17740 break
17741 }
17742 z := l.Args[2]
17743 x := l.Args[0]
17744 y := l.Args[1]
17745 if !(l.Uses == 1) {
17746 break
17747 }
17748 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
17749 v0.AddArg3(x, y, z)
17750 b.resetWithControl(BlockARMGEnoov, v0)
17751 return true
17752 }
17753
17754
17755
17756 for b.Controls[0].Op == OpARMCMPconst {
17757 v_0 := b.Controls[0]
17758 if auxIntToInt32(v_0.AuxInt) != 0 {
17759 break
17760 }
17761 l := v_0.Args[0]
17762 if l.Op != OpARMANDshiftRAreg {
17763 break
17764 }
17765 z := l.Args[2]
17766 x := l.Args[0]
17767 y := l.Args[1]
17768 if !(l.Uses == 1) {
17769 break
17770 }
17771 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
17772 v0.AddArg3(x, y, z)
17773 b.resetWithControl(BlockARMGEnoov, v0)
17774 return true
17775 }
17776
17777
17778
17779 for b.Controls[0].Op == OpARMCMPconst {
17780 v_0 := b.Controls[0]
17781 if auxIntToInt32(v_0.AuxInt) != 0 {
17782 break
17783 }
17784 l := v_0.Args[0]
17785 if l.Op != OpARMXOR {
17786 break
17787 }
17788 _ = l.Args[1]
17789 l_0 := l.Args[0]
17790 l_1 := l.Args[1]
17791 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17792 x := l_0
17793 y := l_1
17794 if !(l.Uses == 1) {
17795 continue
17796 }
17797 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
17798 v0.AddArg2(x, y)
17799 b.resetWithControl(BlockARMGEnoov, v0)
17800 return true
17801 }
17802 break
17803 }
17804
17805
17806
17807 for b.Controls[0].Op == OpARMCMPconst {
17808 v_0 := b.Controls[0]
17809 if auxIntToInt32(v_0.AuxInt) != 0 {
17810 break
17811 }
17812 l := v_0.Args[0]
17813 if l.Op != OpARMXORconst {
17814 break
17815 }
17816 c := auxIntToInt32(l.AuxInt)
17817 x := l.Args[0]
17818 if !(l.Uses == 1) {
17819 break
17820 }
17821 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
17822 v0.AuxInt = int32ToAuxInt(c)
17823 v0.AddArg(x)
17824 b.resetWithControl(BlockARMGEnoov, v0)
17825 return true
17826 }
17827
17828
17829
17830 for b.Controls[0].Op == OpARMCMPconst {
17831 v_0 := b.Controls[0]
17832 if auxIntToInt32(v_0.AuxInt) != 0 {
17833 break
17834 }
17835 l := v_0.Args[0]
17836 if l.Op != OpARMXORshiftLL {
17837 break
17838 }
17839 c := auxIntToInt32(l.AuxInt)
17840 y := l.Args[1]
17841 x := l.Args[0]
17842 if !(l.Uses == 1) {
17843 break
17844 }
17845 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
17846 v0.AuxInt = int32ToAuxInt(c)
17847 v0.AddArg2(x, y)
17848 b.resetWithControl(BlockARMGEnoov, v0)
17849 return true
17850 }
17851
17852
17853
17854 for b.Controls[0].Op == OpARMCMPconst {
17855 v_0 := b.Controls[0]
17856 if auxIntToInt32(v_0.AuxInt) != 0 {
17857 break
17858 }
17859 l := v_0.Args[0]
17860 if l.Op != OpARMXORshiftRL {
17861 break
17862 }
17863 c := auxIntToInt32(l.AuxInt)
17864 y := l.Args[1]
17865 x := l.Args[0]
17866 if !(l.Uses == 1) {
17867 break
17868 }
17869 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
17870 v0.AuxInt = int32ToAuxInt(c)
17871 v0.AddArg2(x, y)
17872 b.resetWithControl(BlockARMGEnoov, v0)
17873 return true
17874 }
17875
17876
17877
17878 for b.Controls[0].Op == OpARMCMPconst {
17879 v_0 := b.Controls[0]
17880 if auxIntToInt32(v_0.AuxInt) != 0 {
17881 break
17882 }
17883 l := v_0.Args[0]
17884 if l.Op != OpARMXORshiftRA {
17885 break
17886 }
17887 c := auxIntToInt32(l.AuxInt)
17888 y := l.Args[1]
17889 x := l.Args[0]
17890 if !(l.Uses == 1) {
17891 break
17892 }
17893 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
17894 v0.AuxInt = int32ToAuxInt(c)
17895 v0.AddArg2(x, y)
17896 b.resetWithControl(BlockARMGEnoov, v0)
17897 return true
17898 }
17899
17900
17901
17902 for b.Controls[0].Op == OpARMCMPconst {
17903 v_0 := b.Controls[0]
17904 if auxIntToInt32(v_0.AuxInt) != 0 {
17905 break
17906 }
17907 l := v_0.Args[0]
17908 if l.Op != OpARMXORshiftLLreg {
17909 break
17910 }
17911 z := l.Args[2]
17912 x := l.Args[0]
17913 y := l.Args[1]
17914 if !(l.Uses == 1) {
17915 break
17916 }
17917 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
17918 v0.AddArg3(x, y, z)
17919 b.resetWithControl(BlockARMGEnoov, v0)
17920 return true
17921 }
17922
17923
17924
17925 for b.Controls[0].Op == OpARMCMPconst {
17926 v_0 := b.Controls[0]
17927 if auxIntToInt32(v_0.AuxInt) != 0 {
17928 break
17929 }
17930 l := v_0.Args[0]
17931 if l.Op != OpARMXORshiftRLreg {
17932 break
17933 }
17934 z := l.Args[2]
17935 x := l.Args[0]
17936 y := l.Args[1]
17937 if !(l.Uses == 1) {
17938 break
17939 }
17940 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
17941 v0.AddArg3(x, y, z)
17942 b.resetWithControl(BlockARMGEnoov, v0)
17943 return true
17944 }
17945
17946
17947
17948 for b.Controls[0].Op == OpARMCMPconst {
17949 v_0 := b.Controls[0]
17950 if auxIntToInt32(v_0.AuxInt) != 0 {
17951 break
17952 }
17953 l := v_0.Args[0]
17954 if l.Op != OpARMXORshiftRAreg {
17955 break
17956 }
17957 z := l.Args[2]
17958 x := l.Args[0]
17959 y := l.Args[1]
17960 if !(l.Uses == 1) {
17961 break
17962 }
17963 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
17964 v0.AddArg3(x, y, z)
17965 b.resetWithControl(BlockARMGEnoov, v0)
17966 return true
17967 }
17968 case BlockARMGEnoov:
17969
17970
17971
17972 for b.Controls[0].Op == OpARMFlagConstant {
17973 v_0 := b.Controls[0]
17974 fc := auxIntToFlagConstant(v_0.AuxInt)
17975 if !(fc.geNoov()) {
17976 break
17977 }
17978 b.Reset(BlockFirst)
17979 return true
17980 }
17981
17982
17983
17984 for b.Controls[0].Op == OpARMFlagConstant {
17985 v_0 := b.Controls[0]
17986 fc := auxIntToFlagConstant(v_0.AuxInt)
17987 if !(!fc.geNoov()) {
17988 break
17989 }
17990 b.Reset(BlockFirst)
17991 b.swapSuccessors()
17992 return true
17993 }
17994
17995
17996 for b.Controls[0].Op == OpARMInvertFlags {
17997 v_0 := b.Controls[0]
17998 cmp := v_0.Args[0]
17999 b.resetWithControl(BlockARMLEnoov, cmp)
18000 return true
18001 }
18002 case BlockARMGT:
18003
18004
18005
18006 for b.Controls[0].Op == OpARMFlagConstant {
18007 v_0 := b.Controls[0]
18008 fc := auxIntToFlagConstant(v_0.AuxInt)
18009 if !(fc.gt()) {
18010 break
18011 }
18012 b.Reset(BlockFirst)
18013 return true
18014 }
18015
18016
18017
18018 for b.Controls[0].Op == OpARMFlagConstant {
18019 v_0 := b.Controls[0]
18020 fc := auxIntToFlagConstant(v_0.AuxInt)
18021 if !(!fc.gt()) {
18022 break
18023 }
18024 b.Reset(BlockFirst)
18025 b.swapSuccessors()
18026 return true
18027 }
18028
18029
18030 for b.Controls[0].Op == OpARMInvertFlags {
18031 v_0 := b.Controls[0]
18032 cmp := v_0.Args[0]
18033 b.resetWithControl(BlockARMLT, cmp)
18034 return true
18035 }
18036
18037
18038
18039 for b.Controls[0].Op == OpARMCMPconst {
18040 v_0 := b.Controls[0]
18041 if auxIntToInt32(v_0.AuxInt) != 0 {
18042 break
18043 }
18044 l := v_0.Args[0]
18045 if l.Op != OpARMSUB {
18046 break
18047 }
18048 y := l.Args[1]
18049 x := l.Args[0]
18050 if !(l.Uses == 1) {
18051 break
18052 }
18053 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
18054 v0.AddArg2(x, y)
18055 b.resetWithControl(BlockARMGTnoov, v0)
18056 return true
18057 }
18058
18059
18060
18061 for b.Controls[0].Op == OpARMCMPconst {
18062 v_0 := b.Controls[0]
18063 if auxIntToInt32(v_0.AuxInt) != 0 {
18064 break
18065 }
18066 l := v_0.Args[0]
18067 if l.Op != OpARMMULS {
18068 break
18069 }
18070 a := l.Args[2]
18071 x := l.Args[0]
18072 y := l.Args[1]
18073 if !(l.Uses == 1) {
18074 break
18075 }
18076 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
18077 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
18078 v1.AddArg2(x, y)
18079 v0.AddArg2(a, v1)
18080 b.resetWithControl(BlockARMGTnoov, v0)
18081 return true
18082 }
18083
18084
18085
18086 for b.Controls[0].Op == OpARMCMPconst {
18087 v_0 := b.Controls[0]
18088 if auxIntToInt32(v_0.AuxInt) != 0 {
18089 break
18090 }
18091 l := v_0.Args[0]
18092 if l.Op != OpARMSUBconst {
18093 break
18094 }
18095 c := auxIntToInt32(l.AuxInt)
18096 x := l.Args[0]
18097 if !(l.Uses == 1) {
18098 break
18099 }
18100 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
18101 v0.AuxInt = int32ToAuxInt(c)
18102 v0.AddArg(x)
18103 b.resetWithControl(BlockARMGTnoov, v0)
18104 return true
18105 }
18106
18107
18108
18109 for b.Controls[0].Op == OpARMCMPconst {
18110 v_0 := b.Controls[0]
18111 if auxIntToInt32(v_0.AuxInt) != 0 {
18112 break
18113 }
18114 l := v_0.Args[0]
18115 if l.Op != OpARMSUBshiftLL {
18116 break
18117 }
18118 c := auxIntToInt32(l.AuxInt)
18119 y := l.Args[1]
18120 x := l.Args[0]
18121 if !(l.Uses == 1) {
18122 break
18123 }
18124 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
18125 v0.AuxInt = int32ToAuxInt(c)
18126 v0.AddArg2(x, y)
18127 b.resetWithControl(BlockARMGTnoov, v0)
18128 return true
18129 }
18130
18131
18132
18133 for b.Controls[0].Op == OpARMCMPconst {
18134 v_0 := b.Controls[0]
18135 if auxIntToInt32(v_0.AuxInt) != 0 {
18136 break
18137 }
18138 l := v_0.Args[0]
18139 if l.Op != OpARMSUBshiftRL {
18140 break
18141 }
18142 c := auxIntToInt32(l.AuxInt)
18143 y := l.Args[1]
18144 x := l.Args[0]
18145 if !(l.Uses == 1) {
18146 break
18147 }
18148 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
18149 v0.AuxInt = int32ToAuxInt(c)
18150 v0.AddArg2(x, y)
18151 b.resetWithControl(BlockARMGTnoov, v0)
18152 return true
18153 }
18154
18155
18156
18157 for b.Controls[0].Op == OpARMCMPconst {
18158 v_0 := b.Controls[0]
18159 if auxIntToInt32(v_0.AuxInt) != 0 {
18160 break
18161 }
18162 l := v_0.Args[0]
18163 if l.Op != OpARMSUBshiftRA {
18164 break
18165 }
18166 c := auxIntToInt32(l.AuxInt)
18167 y := l.Args[1]
18168 x := l.Args[0]
18169 if !(l.Uses == 1) {
18170 break
18171 }
18172 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
18173 v0.AuxInt = int32ToAuxInt(c)
18174 v0.AddArg2(x, y)
18175 b.resetWithControl(BlockARMGTnoov, v0)
18176 return true
18177 }
18178
18179
18180
18181 for b.Controls[0].Op == OpARMCMPconst {
18182 v_0 := b.Controls[0]
18183 if auxIntToInt32(v_0.AuxInt) != 0 {
18184 break
18185 }
18186 l := v_0.Args[0]
18187 if l.Op != OpARMSUBshiftLLreg {
18188 break
18189 }
18190 z := l.Args[2]
18191 x := l.Args[0]
18192 y := l.Args[1]
18193 if !(l.Uses == 1) {
18194 break
18195 }
18196 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
18197 v0.AddArg3(x, y, z)
18198 b.resetWithControl(BlockARMGTnoov, v0)
18199 return true
18200 }
18201
18202
18203
18204 for b.Controls[0].Op == OpARMCMPconst {
18205 v_0 := b.Controls[0]
18206 if auxIntToInt32(v_0.AuxInt) != 0 {
18207 break
18208 }
18209 l := v_0.Args[0]
18210 if l.Op != OpARMSUBshiftRLreg {
18211 break
18212 }
18213 z := l.Args[2]
18214 x := l.Args[0]
18215 y := l.Args[1]
18216 if !(l.Uses == 1) {
18217 break
18218 }
18219 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
18220 v0.AddArg3(x, y, z)
18221 b.resetWithControl(BlockARMGTnoov, v0)
18222 return true
18223 }
18224
18225
18226
18227 for b.Controls[0].Op == OpARMCMPconst {
18228 v_0 := b.Controls[0]
18229 if auxIntToInt32(v_0.AuxInt) != 0 {
18230 break
18231 }
18232 l := v_0.Args[0]
18233 if l.Op != OpARMSUBshiftRAreg {
18234 break
18235 }
18236 z := l.Args[2]
18237 x := l.Args[0]
18238 y := l.Args[1]
18239 if !(l.Uses == 1) {
18240 break
18241 }
18242 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
18243 v0.AddArg3(x, y, z)
18244 b.resetWithControl(BlockARMGTnoov, v0)
18245 return true
18246 }
18247
18248
18249
18250 for b.Controls[0].Op == OpARMCMPconst {
18251 v_0 := b.Controls[0]
18252 if auxIntToInt32(v_0.AuxInt) != 0 {
18253 break
18254 }
18255 l := v_0.Args[0]
18256 if l.Op != OpARMADD {
18257 break
18258 }
18259 _ = l.Args[1]
18260 l_0 := l.Args[0]
18261 l_1 := l.Args[1]
18262 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18263 x := l_0
18264 y := l_1
18265 if !(l.Uses == 1) {
18266 continue
18267 }
18268 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
18269 v0.AddArg2(x, y)
18270 b.resetWithControl(BlockARMGTnoov, v0)
18271 return true
18272 }
18273 break
18274 }
18275
18276
18277
18278 for b.Controls[0].Op == OpARMCMPconst {
18279 v_0 := b.Controls[0]
18280 if auxIntToInt32(v_0.AuxInt) != 0 {
18281 break
18282 }
18283 l := v_0.Args[0]
18284 if l.Op != OpARMADDconst {
18285 break
18286 }
18287 c := auxIntToInt32(l.AuxInt)
18288 x := l.Args[0]
18289 if !(l.Uses == 1) {
18290 break
18291 }
18292 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
18293 v0.AuxInt = int32ToAuxInt(c)
18294 v0.AddArg(x)
18295 b.resetWithControl(BlockARMGTnoov, v0)
18296 return true
18297 }
18298
18299
18300
18301 for b.Controls[0].Op == OpARMCMPconst {
18302 v_0 := b.Controls[0]
18303 if auxIntToInt32(v_0.AuxInt) != 0 {
18304 break
18305 }
18306 l := v_0.Args[0]
18307 if l.Op != OpARMADDshiftLL {
18308 break
18309 }
18310 c := auxIntToInt32(l.AuxInt)
18311 y := l.Args[1]
18312 x := l.Args[0]
18313 if !(l.Uses == 1) {
18314 break
18315 }
18316 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
18317 v0.AuxInt = int32ToAuxInt(c)
18318 v0.AddArg2(x, y)
18319 b.resetWithControl(BlockARMGTnoov, v0)
18320 return true
18321 }
18322
18323
18324
18325 for b.Controls[0].Op == OpARMCMPconst {
18326 v_0 := b.Controls[0]
18327 if auxIntToInt32(v_0.AuxInt) != 0 {
18328 break
18329 }
18330 l := v_0.Args[0]
18331 if l.Op != OpARMADDshiftRL {
18332 break
18333 }
18334 c := auxIntToInt32(l.AuxInt)
18335 y := l.Args[1]
18336 x := l.Args[0]
18337 if !(l.Uses == 1) {
18338 break
18339 }
18340 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
18341 v0.AuxInt = int32ToAuxInt(c)
18342 v0.AddArg2(x, y)
18343 b.resetWithControl(BlockARMGTnoov, v0)
18344 return true
18345 }
18346
18347
18348
18349 for b.Controls[0].Op == OpARMCMPconst {
18350 v_0 := b.Controls[0]
18351 if auxIntToInt32(v_0.AuxInt) != 0 {
18352 break
18353 }
18354 l := v_0.Args[0]
18355 if l.Op != OpARMADDshiftRA {
18356 break
18357 }
18358 c := auxIntToInt32(l.AuxInt)
18359 y := l.Args[1]
18360 x := l.Args[0]
18361 if !(l.Uses == 1) {
18362 break
18363 }
18364 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
18365 v0.AuxInt = int32ToAuxInt(c)
18366 v0.AddArg2(x, y)
18367 b.resetWithControl(BlockARMGTnoov, v0)
18368 return true
18369 }
18370
18371
18372
18373 for b.Controls[0].Op == OpARMCMPconst {
18374 v_0 := b.Controls[0]
18375 if auxIntToInt32(v_0.AuxInt) != 0 {
18376 break
18377 }
18378 l := v_0.Args[0]
18379 if l.Op != OpARMADDshiftLLreg {
18380 break
18381 }
18382 z := l.Args[2]
18383 x := l.Args[0]
18384 y := l.Args[1]
18385 if !(l.Uses == 1) {
18386 break
18387 }
18388 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
18389 v0.AddArg3(x, y, z)
18390 b.resetWithControl(BlockARMGTnoov, v0)
18391 return true
18392 }
18393
18394
18395
18396 for b.Controls[0].Op == OpARMCMPconst {
18397 v_0 := b.Controls[0]
18398 if auxIntToInt32(v_0.AuxInt) != 0 {
18399 break
18400 }
18401 l := v_0.Args[0]
18402 if l.Op != OpARMADDshiftRLreg {
18403 break
18404 }
18405 z := l.Args[2]
18406 x := l.Args[0]
18407 y := l.Args[1]
18408 if !(l.Uses == 1) {
18409 break
18410 }
18411 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
18412 v0.AddArg3(x, y, z)
18413 b.resetWithControl(BlockARMGTnoov, v0)
18414 return true
18415 }
18416
18417
18418
18419 for b.Controls[0].Op == OpARMCMPconst {
18420 v_0 := b.Controls[0]
18421 if auxIntToInt32(v_0.AuxInt) != 0 {
18422 break
18423 }
18424 l := v_0.Args[0]
18425 if l.Op != OpARMADDshiftRAreg {
18426 break
18427 }
18428 z := l.Args[2]
18429 x := l.Args[0]
18430 y := l.Args[1]
18431 if !(l.Uses == 1) {
18432 break
18433 }
18434 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
18435 v0.AddArg3(x, y, z)
18436 b.resetWithControl(BlockARMGTnoov, v0)
18437 return true
18438 }
18439
18440
18441
18442 for b.Controls[0].Op == OpARMCMPconst {
18443 v_0 := b.Controls[0]
18444 if auxIntToInt32(v_0.AuxInt) != 0 {
18445 break
18446 }
18447 l := v_0.Args[0]
18448 if l.Op != OpARMMULA {
18449 break
18450 }
18451 a := l.Args[2]
18452 x := l.Args[0]
18453 y := l.Args[1]
18454 if !(l.Uses == 1) {
18455 break
18456 }
18457 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
18458 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
18459 v1.AddArg2(x, y)
18460 v0.AddArg2(a, v1)
18461 b.resetWithControl(BlockARMGTnoov, v0)
18462 return true
18463 }
18464
18465
18466
18467 for b.Controls[0].Op == OpARMCMPconst {
18468 v_0 := b.Controls[0]
18469 if auxIntToInt32(v_0.AuxInt) != 0 {
18470 break
18471 }
18472 l := v_0.Args[0]
18473 if l.Op != OpARMAND {
18474 break
18475 }
18476 _ = l.Args[1]
18477 l_0 := l.Args[0]
18478 l_1 := l.Args[1]
18479 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18480 x := l_0
18481 y := l_1
18482 if !(l.Uses == 1) {
18483 continue
18484 }
18485 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
18486 v0.AddArg2(x, y)
18487 b.resetWithControl(BlockARMGTnoov, v0)
18488 return true
18489 }
18490 break
18491 }
18492
18493
18494
18495 for b.Controls[0].Op == OpARMCMPconst {
18496 v_0 := b.Controls[0]
18497 if auxIntToInt32(v_0.AuxInt) != 0 {
18498 break
18499 }
18500 l := v_0.Args[0]
18501 if l.Op != OpARMANDconst {
18502 break
18503 }
18504 c := auxIntToInt32(l.AuxInt)
18505 x := l.Args[0]
18506 if !(l.Uses == 1) {
18507 break
18508 }
18509 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
18510 v0.AuxInt = int32ToAuxInt(c)
18511 v0.AddArg(x)
18512 b.resetWithControl(BlockARMGTnoov, v0)
18513 return true
18514 }
18515
18516
18517
18518 for b.Controls[0].Op == OpARMCMPconst {
18519 v_0 := b.Controls[0]
18520 if auxIntToInt32(v_0.AuxInt) != 0 {
18521 break
18522 }
18523 l := v_0.Args[0]
18524 if l.Op != OpARMANDshiftLL {
18525 break
18526 }
18527 c := auxIntToInt32(l.AuxInt)
18528 y := l.Args[1]
18529 x := l.Args[0]
18530 if !(l.Uses == 1) {
18531 break
18532 }
18533 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
18534 v0.AuxInt = int32ToAuxInt(c)
18535 v0.AddArg2(x, y)
18536 b.resetWithControl(BlockARMGTnoov, v0)
18537 return true
18538 }
18539
18540
18541
18542 for b.Controls[0].Op == OpARMCMPconst {
18543 v_0 := b.Controls[0]
18544 if auxIntToInt32(v_0.AuxInt) != 0 {
18545 break
18546 }
18547 l := v_0.Args[0]
18548 if l.Op != OpARMANDshiftRL {
18549 break
18550 }
18551 c := auxIntToInt32(l.AuxInt)
18552 y := l.Args[1]
18553 x := l.Args[0]
18554 if !(l.Uses == 1) {
18555 break
18556 }
18557 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
18558 v0.AuxInt = int32ToAuxInt(c)
18559 v0.AddArg2(x, y)
18560 b.resetWithControl(BlockARMGTnoov, v0)
18561 return true
18562 }
18563
18564
18565
18566 for b.Controls[0].Op == OpARMCMPconst {
18567 v_0 := b.Controls[0]
18568 if auxIntToInt32(v_0.AuxInt) != 0 {
18569 break
18570 }
18571 l := v_0.Args[0]
18572 if l.Op != OpARMANDshiftRA {
18573 break
18574 }
18575 c := auxIntToInt32(l.AuxInt)
18576 y := l.Args[1]
18577 x := l.Args[0]
18578 if !(l.Uses == 1) {
18579 break
18580 }
18581 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
18582 v0.AuxInt = int32ToAuxInt(c)
18583 v0.AddArg2(x, y)
18584 b.resetWithControl(BlockARMGTnoov, v0)
18585 return true
18586 }
18587
18588
18589
18590 for b.Controls[0].Op == OpARMCMPconst {
18591 v_0 := b.Controls[0]
18592 if auxIntToInt32(v_0.AuxInt) != 0 {
18593 break
18594 }
18595 l := v_0.Args[0]
18596 if l.Op != OpARMANDshiftLLreg {
18597 break
18598 }
18599 z := l.Args[2]
18600 x := l.Args[0]
18601 y := l.Args[1]
18602 if !(l.Uses == 1) {
18603 break
18604 }
18605 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
18606 v0.AddArg3(x, y, z)
18607 b.resetWithControl(BlockARMGTnoov, v0)
18608 return true
18609 }
18610
18611
18612
18613 for b.Controls[0].Op == OpARMCMPconst {
18614 v_0 := b.Controls[0]
18615 if auxIntToInt32(v_0.AuxInt) != 0 {
18616 break
18617 }
18618 l := v_0.Args[0]
18619 if l.Op != OpARMANDshiftRLreg {
18620 break
18621 }
18622 z := l.Args[2]
18623 x := l.Args[0]
18624 y := l.Args[1]
18625 if !(l.Uses == 1) {
18626 break
18627 }
18628 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
18629 v0.AddArg3(x, y, z)
18630 b.resetWithControl(BlockARMGTnoov, v0)
18631 return true
18632 }
18633
18634
18635
18636 for b.Controls[0].Op == OpARMCMPconst {
18637 v_0 := b.Controls[0]
18638 if auxIntToInt32(v_0.AuxInt) != 0 {
18639 break
18640 }
18641 l := v_0.Args[0]
18642 if l.Op != OpARMANDshiftRAreg {
18643 break
18644 }
18645 z := l.Args[2]
18646 x := l.Args[0]
18647 y := l.Args[1]
18648 if !(l.Uses == 1) {
18649 break
18650 }
18651 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
18652 v0.AddArg3(x, y, z)
18653 b.resetWithControl(BlockARMGTnoov, v0)
18654 return true
18655 }
18656
18657
18658
18659 for b.Controls[0].Op == OpARMCMPconst {
18660 v_0 := b.Controls[0]
18661 if auxIntToInt32(v_0.AuxInt) != 0 {
18662 break
18663 }
18664 l := v_0.Args[0]
18665 if l.Op != OpARMXOR {
18666 break
18667 }
18668 _ = l.Args[1]
18669 l_0 := l.Args[0]
18670 l_1 := l.Args[1]
18671 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18672 x := l_0
18673 y := l_1
18674 if !(l.Uses == 1) {
18675 continue
18676 }
18677 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
18678 v0.AddArg2(x, y)
18679 b.resetWithControl(BlockARMGTnoov, v0)
18680 return true
18681 }
18682 break
18683 }
18684
18685
18686
18687 for b.Controls[0].Op == OpARMCMPconst {
18688 v_0 := b.Controls[0]
18689 if auxIntToInt32(v_0.AuxInt) != 0 {
18690 break
18691 }
18692 l := v_0.Args[0]
18693 if l.Op != OpARMXORconst {
18694 break
18695 }
18696 c := auxIntToInt32(l.AuxInt)
18697 x := l.Args[0]
18698 if !(l.Uses == 1) {
18699 break
18700 }
18701 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
18702 v0.AuxInt = int32ToAuxInt(c)
18703 v0.AddArg(x)
18704 b.resetWithControl(BlockARMGTnoov, v0)
18705 return true
18706 }
18707
18708
18709
18710 for b.Controls[0].Op == OpARMCMPconst {
18711 v_0 := b.Controls[0]
18712 if auxIntToInt32(v_0.AuxInt) != 0 {
18713 break
18714 }
18715 l := v_0.Args[0]
18716 if l.Op != OpARMXORshiftLL {
18717 break
18718 }
18719 c := auxIntToInt32(l.AuxInt)
18720 y := l.Args[1]
18721 x := l.Args[0]
18722 if !(l.Uses == 1) {
18723 break
18724 }
18725 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
18726 v0.AuxInt = int32ToAuxInt(c)
18727 v0.AddArg2(x, y)
18728 b.resetWithControl(BlockARMGTnoov, v0)
18729 return true
18730 }
18731
18732
18733
18734 for b.Controls[0].Op == OpARMCMPconst {
18735 v_0 := b.Controls[0]
18736 if auxIntToInt32(v_0.AuxInt) != 0 {
18737 break
18738 }
18739 l := v_0.Args[0]
18740 if l.Op != OpARMXORshiftRL {
18741 break
18742 }
18743 c := auxIntToInt32(l.AuxInt)
18744 y := l.Args[1]
18745 x := l.Args[0]
18746 if !(l.Uses == 1) {
18747 break
18748 }
18749 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
18750 v0.AuxInt = int32ToAuxInt(c)
18751 v0.AddArg2(x, y)
18752 b.resetWithControl(BlockARMGTnoov, v0)
18753 return true
18754 }
18755
18756
18757
18758 for b.Controls[0].Op == OpARMCMPconst {
18759 v_0 := b.Controls[0]
18760 if auxIntToInt32(v_0.AuxInt) != 0 {
18761 break
18762 }
18763 l := v_0.Args[0]
18764 if l.Op != OpARMXORshiftRA {
18765 break
18766 }
18767 c := auxIntToInt32(l.AuxInt)
18768 y := l.Args[1]
18769 x := l.Args[0]
18770 if !(l.Uses == 1) {
18771 break
18772 }
18773 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
18774 v0.AuxInt = int32ToAuxInt(c)
18775 v0.AddArg2(x, y)
18776 b.resetWithControl(BlockARMGTnoov, v0)
18777 return true
18778 }
18779
18780
18781
18782 for b.Controls[0].Op == OpARMCMPconst {
18783 v_0 := b.Controls[0]
18784 if auxIntToInt32(v_0.AuxInt) != 0 {
18785 break
18786 }
18787 l := v_0.Args[0]
18788 if l.Op != OpARMXORshiftLLreg {
18789 break
18790 }
18791 z := l.Args[2]
18792 x := l.Args[0]
18793 y := l.Args[1]
18794 if !(l.Uses == 1) {
18795 break
18796 }
18797 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
18798 v0.AddArg3(x, y, z)
18799 b.resetWithControl(BlockARMGTnoov, v0)
18800 return true
18801 }
18802
18803
18804
18805 for b.Controls[0].Op == OpARMCMPconst {
18806 v_0 := b.Controls[0]
18807 if auxIntToInt32(v_0.AuxInt) != 0 {
18808 break
18809 }
18810 l := v_0.Args[0]
18811 if l.Op != OpARMXORshiftRLreg {
18812 break
18813 }
18814 z := l.Args[2]
18815 x := l.Args[0]
18816 y := l.Args[1]
18817 if !(l.Uses == 1) {
18818 break
18819 }
18820 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
18821 v0.AddArg3(x, y, z)
18822 b.resetWithControl(BlockARMGTnoov, v0)
18823 return true
18824 }
18825
18826
18827
18828 for b.Controls[0].Op == OpARMCMPconst {
18829 v_0 := b.Controls[0]
18830 if auxIntToInt32(v_0.AuxInt) != 0 {
18831 break
18832 }
18833 l := v_0.Args[0]
18834 if l.Op != OpARMXORshiftRAreg {
18835 break
18836 }
18837 z := l.Args[2]
18838 x := l.Args[0]
18839 y := l.Args[1]
18840 if !(l.Uses == 1) {
18841 break
18842 }
18843 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
18844 v0.AddArg3(x, y, z)
18845 b.resetWithControl(BlockARMGTnoov, v0)
18846 return true
18847 }
18848 case BlockARMGTnoov:
18849
18850
18851
18852 for b.Controls[0].Op == OpARMFlagConstant {
18853 v_0 := b.Controls[0]
18854 fc := auxIntToFlagConstant(v_0.AuxInt)
18855 if !(fc.gtNoov()) {
18856 break
18857 }
18858 b.Reset(BlockFirst)
18859 return true
18860 }
18861
18862
18863
18864 for b.Controls[0].Op == OpARMFlagConstant {
18865 v_0 := b.Controls[0]
18866 fc := auxIntToFlagConstant(v_0.AuxInt)
18867 if !(!fc.gtNoov()) {
18868 break
18869 }
18870 b.Reset(BlockFirst)
18871 b.swapSuccessors()
18872 return true
18873 }
18874
18875
18876 for b.Controls[0].Op == OpARMInvertFlags {
18877 v_0 := b.Controls[0]
18878 cmp := v_0.Args[0]
18879 b.resetWithControl(BlockARMLTnoov, cmp)
18880 return true
18881 }
18882 case BlockIf:
18883
18884
18885 for b.Controls[0].Op == OpARMEqual {
18886 v_0 := b.Controls[0]
18887 cc := v_0.Args[0]
18888 b.resetWithControl(BlockARMEQ, cc)
18889 return true
18890 }
18891
18892
18893 for b.Controls[0].Op == OpARMNotEqual {
18894 v_0 := b.Controls[0]
18895 cc := v_0.Args[0]
18896 b.resetWithControl(BlockARMNE, cc)
18897 return true
18898 }
18899
18900
18901 for b.Controls[0].Op == OpARMLessThan {
18902 v_0 := b.Controls[0]
18903 cc := v_0.Args[0]
18904 b.resetWithControl(BlockARMLT, cc)
18905 return true
18906 }
18907
18908
18909 for b.Controls[0].Op == OpARMLessThanU {
18910 v_0 := b.Controls[0]
18911 cc := v_0.Args[0]
18912 b.resetWithControl(BlockARMULT, cc)
18913 return true
18914 }
18915
18916
18917 for b.Controls[0].Op == OpARMLessEqual {
18918 v_0 := b.Controls[0]
18919 cc := v_0.Args[0]
18920 b.resetWithControl(BlockARMLE, cc)
18921 return true
18922 }
18923
18924
18925 for b.Controls[0].Op == OpARMLessEqualU {
18926 v_0 := b.Controls[0]
18927 cc := v_0.Args[0]
18928 b.resetWithControl(BlockARMULE, cc)
18929 return true
18930 }
18931
18932
18933 for b.Controls[0].Op == OpARMGreaterThan {
18934 v_0 := b.Controls[0]
18935 cc := v_0.Args[0]
18936 b.resetWithControl(BlockARMGT, cc)
18937 return true
18938 }
18939
18940
18941 for b.Controls[0].Op == OpARMGreaterThanU {
18942 v_0 := b.Controls[0]
18943 cc := v_0.Args[0]
18944 b.resetWithControl(BlockARMUGT, cc)
18945 return true
18946 }
18947
18948
18949 for b.Controls[0].Op == OpARMGreaterEqual {
18950 v_0 := b.Controls[0]
18951 cc := v_0.Args[0]
18952 b.resetWithControl(BlockARMGE, cc)
18953 return true
18954 }
18955
18956
18957 for b.Controls[0].Op == OpARMGreaterEqualU {
18958 v_0 := b.Controls[0]
18959 cc := v_0.Args[0]
18960 b.resetWithControl(BlockARMUGE, cc)
18961 return true
18962 }
18963
18964
18965 for {
18966 cond := b.Controls[0]
18967 v0 := b.NewValue0(cond.Pos, OpARMCMPconst, types.TypeFlags)
18968 v0.AuxInt = int32ToAuxInt(0)
18969 v0.AddArg(cond)
18970 b.resetWithControl(BlockARMNE, v0)
18971 return true
18972 }
18973 case BlockARMLE:
18974
18975
18976
18977 for b.Controls[0].Op == OpARMFlagConstant {
18978 v_0 := b.Controls[0]
18979 fc := auxIntToFlagConstant(v_0.AuxInt)
18980 if !(fc.le()) {
18981 break
18982 }
18983 b.Reset(BlockFirst)
18984 return true
18985 }
18986
18987
18988
18989 for b.Controls[0].Op == OpARMFlagConstant {
18990 v_0 := b.Controls[0]
18991 fc := auxIntToFlagConstant(v_0.AuxInt)
18992 if !(!fc.le()) {
18993 break
18994 }
18995 b.Reset(BlockFirst)
18996 b.swapSuccessors()
18997 return true
18998 }
18999
19000
19001 for b.Controls[0].Op == OpARMInvertFlags {
19002 v_0 := b.Controls[0]
19003 cmp := v_0.Args[0]
19004 b.resetWithControl(BlockARMGE, cmp)
19005 return true
19006 }
19007
19008
19009
19010 for b.Controls[0].Op == OpARMCMPconst {
19011 v_0 := b.Controls[0]
19012 if auxIntToInt32(v_0.AuxInt) != 0 {
19013 break
19014 }
19015 l := v_0.Args[0]
19016 if l.Op != OpARMSUB {
19017 break
19018 }
19019 y := l.Args[1]
19020 x := l.Args[0]
19021 if !(l.Uses == 1) {
19022 break
19023 }
19024 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19025 v0.AddArg2(x, y)
19026 b.resetWithControl(BlockARMLEnoov, v0)
19027 return true
19028 }
19029
19030
19031
19032 for b.Controls[0].Op == OpARMCMPconst {
19033 v_0 := b.Controls[0]
19034 if auxIntToInt32(v_0.AuxInt) != 0 {
19035 break
19036 }
19037 l := v_0.Args[0]
19038 if l.Op != OpARMMULS {
19039 break
19040 }
19041 a := l.Args[2]
19042 x := l.Args[0]
19043 y := l.Args[1]
19044 if !(l.Uses == 1) {
19045 break
19046 }
19047 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19048 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
19049 v1.AddArg2(x, y)
19050 v0.AddArg2(a, v1)
19051 b.resetWithControl(BlockARMLEnoov, v0)
19052 return true
19053 }
19054
19055
19056
19057 for b.Controls[0].Op == OpARMCMPconst {
19058 v_0 := b.Controls[0]
19059 if auxIntToInt32(v_0.AuxInt) != 0 {
19060 break
19061 }
19062 l := v_0.Args[0]
19063 if l.Op != OpARMSUBconst {
19064 break
19065 }
19066 c := auxIntToInt32(l.AuxInt)
19067 x := l.Args[0]
19068 if !(l.Uses == 1) {
19069 break
19070 }
19071 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
19072 v0.AuxInt = int32ToAuxInt(c)
19073 v0.AddArg(x)
19074 b.resetWithControl(BlockARMLEnoov, v0)
19075 return true
19076 }
19077
19078
19079
19080 for b.Controls[0].Op == OpARMCMPconst {
19081 v_0 := b.Controls[0]
19082 if auxIntToInt32(v_0.AuxInt) != 0 {
19083 break
19084 }
19085 l := v_0.Args[0]
19086 if l.Op != OpARMSUBshiftLL {
19087 break
19088 }
19089 c := auxIntToInt32(l.AuxInt)
19090 y := l.Args[1]
19091 x := l.Args[0]
19092 if !(l.Uses == 1) {
19093 break
19094 }
19095 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
19096 v0.AuxInt = int32ToAuxInt(c)
19097 v0.AddArg2(x, y)
19098 b.resetWithControl(BlockARMLEnoov, v0)
19099 return true
19100 }
19101
19102
19103
19104 for b.Controls[0].Op == OpARMCMPconst {
19105 v_0 := b.Controls[0]
19106 if auxIntToInt32(v_0.AuxInt) != 0 {
19107 break
19108 }
19109 l := v_0.Args[0]
19110 if l.Op != OpARMSUBshiftRL {
19111 break
19112 }
19113 c := auxIntToInt32(l.AuxInt)
19114 y := l.Args[1]
19115 x := l.Args[0]
19116 if !(l.Uses == 1) {
19117 break
19118 }
19119 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
19120 v0.AuxInt = int32ToAuxInt(c)
19121 v0.AddArg2(x, y)
19122 b.resetWithControl(BlockARMLEnoov, v0)
19123 return true
19124 }
19125
19126
19127
19128 for b.Controls[0].Op == OpARMCMPconst {
19129 v_0 := b.Controls[0]
19130 if auxIntToInt32(v_0.AuxInt) != 0 {
19131 break
19132 }
19133 l := v_0.Args[0]
19134 if l.Op != OpARMSUBshiftRA {
19135 break
19136 }
19137 c := auxIntToInt32(l.AuxInt)
19138 y := l.Args[1]
19139 x := l.Args[0]
19140 if !(l.Uses == 1) {
19141 break
19142 }
19143 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
19144 v0.AuxInt = int32ToAuxInt(c)
19145 v0.AddArg2(x, y)
19146 b.resetWithControl(BlockARMLEnoov, v0)
19147 return true
19148 }
19149
19150
19151
19152 for b.Controls[0].Op == OpARMCMPconst {
19153 v_0 := b.Controls[0]
19154 if auxIntToInt32(v_0.AuxInt) != 0 {
19155 break
19156 }
19157 l := v_0.Args[0]
19158 if l.Op != OpARMSUBshiftLLreg {
19159 break
19160 }
19161 z := l.Args[2]
19162 x := l.Args[0]
19163 y := l.Args[1]
19164 if !(l.Uses == 1) {
19165 break
19166 }
19167 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
19168 v0.AddArg3(x, y, z)
19169 b.resetWithControl(BlockARMLEnoov, v0)
19170 return true
19171 }
19172
19173
19174
19175 for b.Controls[0].Op == OpARMCMPconst {
19176 v_0 := b.Controls[0]
19177 if auxIntToInt32(v_0.AuxInt) != 0 {
19178 break
19179 }
19180 l := v_0.Args[0]
19181 if l.Op != OpARMSUBshiftRLreg {
19182 break
19183 }
19184 z := l.Args[2]
19185 x := l.Args[0]
19186 y := l.Args[1]
19187 if !(l.Uses == 1) {
19188 break
19189 }
19190 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
19191 v0.AddArg3(x, y, z)
19192 b.resetWithControl(BlockARMLEnoov, v0)
19193 return true
19194 }
19195
19196
19197
19198 for b.Controls[0].Op == OpARMCMPconst {
19199 v_0 := b.Controls[0]
19200 if auxIntToInt32(v_0.AuxInt) != 0 {
19201 break
19202 }
19203 l := v_0.Args[0]
19204 if l.Op != OpARMSUBshiftRAreg {
19205 break
19206 }
19207 z := l.Args[2]
19208 x := l.Args[0]
19209 y := l.Args[1]
19210 if !(l.Uses == 1) {
19211 break
19212 }
19213 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
19214 v0.AddArg3(x, y, z)
19215 b.resetWithControl(BlockARMLEnoov, v0)
19216 return true
19217 }
19218
19219
19220
19221 for b.Controls[0].Op == OpARMCMPconst {
19222 v_0 := b.Controls[0]
19223 if auxIntToInt32(v_0.AuxInt) != 0 {
19224 break
19225 }
19226 l := v_0.Args[0]
19227 if l.Op != OpARMADD {
19228 break
19229 }
19230 _ = l.Args[1]
19231 l_0 := l.Args[0]
19232 l_1 := l.Args[1]
19233 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19234 x := l_0
19235 y := l_1
19236 if !(l.Uses == 1) {
19237 continue
19238 }
19239 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
19240 v0.AddArg2(x, y)
19241 b.resetWithControl(BlockARMLEnoov, v0)
19242 return true
19243 }
19244 break
19245 }
19246
19247
19248
19249 for b.Controls[0].Op == OpARMCMPconst {
19250 v_0 := b.Controls[0]
19251 if auxIntToInt32(v_0.AuxInt) != 0 {
19252 break
19253 }
19254 l := v_0.Args[0]
19255 if l.Op != OpARMMULA {
19256 break
19257 }
19258 a := l.Args[2]
19259 x := l.Args[0]
19260 y := l.Args[1]
19261 if !(l.Uses == 1) {
19262 break
19263 }
19264 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
19265 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
19266 v1.AddArg2(x, y)
19267 v0.AddArg2(a, v1)
19268 b.resetWithControl(BlockARMLEnoov, v0)
19269 return true
19270 }
19271
19272
19273
19274 for b.Controls[0].Op == OpARMCMPconst {
19275 v_0 := b.Controls[0]
19276 if auxIntToInt32(v_0.AuxInt) != 0 {
19277 break
19278 }
19279 l := v_0.Args[0]
19280 if l.Op != OpARMADDconst {
19281 break
19282 }
19283 c := auxIntToInt32(l.AuxInt)
19284 x := l.Args[0]
19285 if !(l.Uses == 1) {
19286 break
19287 }
19288 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
19289 v0.AuxInt = int32ToAuxInt(c)
19290 v0.AddArg(x)
19291 b.resetWithControl(BlockARMLEnoov, v0)
19292 return true
19293 }
19294
19295
19296
19297 for b.Controls[0].Op == OpARMCMPconst {
19298 v_0 := b.Controls[0]
19299 if auxIntToInt32(v_0.AuxInt) != 0 {
19300 break
19301 }
19302 l := v_0.Args[0]
19303 if l.Op != OpARMADDshiftLL {
19304 break
19305 }
19306 c := auxIntToInt32(l.AuxInt)
19307 y := l.Args[1]
19308 x := l.Args[0]
19309 if !(l.Uses == 1) {
19310 break
19311 }
19312 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
19313 v0.AuxInt = int32ToAuxInt(c)
19314 v0.AddArg2(x, y)
19315 b.resetWithControl(BlockARMLEnoov, v0)
19316 return true
19317 }
19318
19319
19320
19321 for b.Controls[0].Op == OpARMCMPconst {
19322 v_0 := b.Controls[0]
19323 if auxIntToInt32(v_0.AuxInt) != 0 {
19324 break
19325 }
19326 l := v_0.Args[0]
19327 if l.Op != OpARMADDshiftRL {
19328 break
19329 }
19330 c := auxIntToInt32(l.AuxInt)
19331 y := l.Args[1]
19332 x := l.Args[0]
19333 if !(l.Uses == 1) {
19334 break
19335 }
19336 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
19337 v0.AuxInt = int32ToAuxInt(c)
19338 v0.AddArg2(x, y)
19339 b.resetWithControl(BlockARMLEnoov, v0)
19340 return true
19341 }
19342
19343
19344
19345 for b.Controls[0].Op == OpARMCMPconst {
19346 v_0 := b.Controls[0]
19347 if auxIntToInt32(v_0.AuxInt) != 0 {
19348 break
19349 }
19350 l := v_0.Args[0]
19351 if l.Op != OpARMADDshiftRA {
19352 break
19353 }
19354 c := auxIntToInt32(l.AuxInt)
19355 y := l.Args[1]
19356 x := l.Args[0]
19357 if !(l.Uses == 1) {
19358 break
19359 }
19360 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
19361 v0.AuxInt = int32ToAuxInt(c)
19362 v0.AddArg2(x, y)
19363 b.resetWithControl(BlockARMLEnoov, v0)
19364 return true
19365 }
19366
19367
19368
19369 for b.Controls[0].Op == OpARMCMPconst {
19370 v_0 := b.Controls[0]
19371 if auxIntToInt32(v_0.AuxInt) != 0 {
19372 break
19373 }
19374 l := v_0.Args[0]
19375 if l.Op != OpARMADDshiftLLreg {
19376 break
19377 }
19378 z := l.Args[2]
19379 x := l.Args[0]
19380 y := l.Args[1]
19381 if !(l.Uses == 1) {
19382 break
19383 }
19384 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
19385 v0.AddArg3(x, y, z)
19386 b.resetWithControl(BlockARMLEnoov, v0)
19387 return true
19388 }
19389
19390
19391
19392 for b.Controls[0].Op == OpARMCMPconst {
19393 v_0 := b.Controls[0]
19394 if auxIntToInt32(v_0.AuxInt) != 0 {
19395 break
19396 }
19397 l := v_0.Args[0]
19398 if l.Op != OpARMADDshiftRLreg {
19399 break
19400 }
19401 z := l.Args[2]
19402 x := l.Args[0]
19403 y := l.Args[1]
19404 if !(l.Uses == 1) {
19405 break
19406 }
19407 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
19408 v0.AddArg3(x, y, z)
19409 b.resetWithControl(BlockARMLEnoov, v0)
19410 return true
19411 }
19412
19413
19414
19415 for b.Controls[0].Op == OpARMCMPconst {
19416 v_0 := b.Controls[0]
19417 if auxIntToInt32(v_0.AuxInt) != 0 {
19418 break
19419 }
19420 l := v_0.Args[0]
19421 if l.Op != OpARMADDshiftRAreg {
19422 break
19423 }
19424 z := l.Args[2]
19425 x := l.Args[0]
19426 y := l.Args[1]
19427 if !(l.Uses == 1) {
19428 break
19429 }
19430 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
19431 v0.AddArg3(x, y, z)
19432 b.resetWithControl(BlockARMLEnoov, v0)
19433 return true
19434 }
19435
19436
19437
19438 for b.Controls[0].Op == OpARMCMPconst {
19439 v_0 := b.Controls[0]
19440 if auxIntToInt32(v_0.AuxInt) != 0 {
19441 break
19442 }
19443 l := v_0.Args[0]
19444 if l.Op != OpARMAND {
19445 break
19446 }
19447 _ = l.Args[1]
19448 l_0 := l.Args[0]
19449 l_1 := l.Args[1]
19450 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19451 x := l_0
19452 y := l_1
19453 if !(l.Uses == 1) {
19454 continue
19455 }
19456 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
19457 v0.AddArg2(x, y)
19458 b.resetWithControl(BlockARMLEnoov, v0)
19459 return true
19460 }
19461 break
19462 }
19463
19464
19465
19466 for b.Controls[0].Op == OpARMCMPconst {
19467 v_0 := b.Controls[0]
19468 if auxIntToInt32(v_0.AuxInt) != 0 {
19469 break
19470 }
19471 l := v_0.Args[0]
19472 if l.Op != OpARMANDconst {
19473 break
19474 }
19475 c := auxIntToInt32(l.AuxInt)
19476 x := l.Args[0]
19477 if !(l.Uses == 1) {
19478 break
19479 }
19480 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
19481 v0.AuxInt = int32ToAuxInt(c)
19482 v0.AddArg(x)
19483 b.resetWithControl(BlockARMLEnoov, v0)
19484 return true
19485 }
19486
19487
19488
19489 for b.Controls[0].Op == OpARMCMPconst {
19490 v_0 := b.Controls[0]
19491 if auxIntToInt32(v_0.AuxInt) != 0 {
19492 break
19493 }
19494 l := v_0.Args[0]
19495 if l.Op != OpARMANDshiftLL {
19496 break
19497 }
19498 c := auxIntToInt32(l.AuxInt)
19499 y := l.Args[1]
19500 x := l.Args[0]
19501 if !(l.Uses == 1) {
19502 break
19503 }
19504 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
19505 v0.AuxInt = int32ToAuxInt(c)
19506 v0.AddArg2(x, y)
19507 b.resetWithControl(BlockARMLEnoov, v0)
19508 return true
19509 }
19510
19511
19512
19513 for b.Controls[0].Op == OpARMCMPconst {
19514 v_0 := b.Controls[0]
19515 if auxIntToInt32(v_0.AuxInt) != 0 {
19516 break
19517 }
19518 l := v_0.Args[0]
19519 if l.Op != OpARMANDshiftRL {
19520 break
19521 }
19522 c := auxIntToInt32(l.AuxInt)
19523 y := l.Args[1]
19524 x := l.Args[0]
19525 if !(l.Uses == 1) {
19526 break
19527 }
19528 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
19529 v0.AuxInt = int32ToAuxInt(c)
19530 v0.AddArg2(x, y)
19531 b.resetWithControl(BlockARMLEnoov, v0)
19532 return true
19533 }
19534
19535
19536
19537 for b.Controls[0].Op == OpARMCMPconst {
19538 v_0 := b.Controls[0]
19539 if auxIntToInt32(v_0.AuxInt) != 0 {
19540 break
19541 }
19542 l := v_0.Args[0]
19543 if l.Op != OpARMANDshiftRA {
19544 break
19545 }
19546 c := auxIntToInt32(l.AuxInt)
19547 y := l.Args[1]
19548 x := l.Args[0]
19549 if !(l.Uses == 1) {
19550 break
19551 }
19552 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
19553 v0.AuxInt = int32ToAuxInt(c)
19554 v0.AddArg2(x, y)
19555 b.resetWithControl(BlockARMLEnoov, v0)
19556 return true
19557 }
19558
19559
19560
19561 for b.Controls[0].Op == OpARMCMPconst {
19562 v_0 := b.Controls[0]
19563 if auxIntToInt32(v_0.AuxInt) != 0 {
19564 break
19565 }
19566 l := v_0.Args[0]
19567 if l.Op != OpARMANDshiftLLreg {
19568 break
19569 }
19570 z := l.Args[2]
19571 x := l.Args[0]
19572 y := l.Args[1]
19573 if !(l.Uses == 1) {
19574 break
19575 }
19576 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
19577 v0.AddArg3(x, y, z)
19578 b.resetWithControl(BlockARMLEnoov, v0)
19579 return true
19580 }
19581
19582
19583
19584 for b.Controls[0].Op == OpARMCMPconst {
19585 v_0 := b.Controls[0]
19586 if auxIntToInt32(v_0.AuxInt) != 0 {
19587 break
19588 }
19589 l := v_0.Args[0]
19590 if l.Op != OpARMANDshiftRLreg {
19591 break
19592 }
19593 z := l.Args[2]
19594 x := l.Args[0]
19595 y := l.Args[1]
19596 if !(l.Uses == 1) {
19597 break
19598 }
19599 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
19600 v0.AddArg3(x, y, z)
19601 b.resetWithControl(BlockARMLEnoov, v0)
19602 return true
19603 }
19604
19605
19606
19607 for b.Controls[0].Op == OpARMCMPconst {
19608 v_0 := b.Controls[0]
19609 if auxIntToInt32(v_0.AuxInt) != 0 {
19610 break
19611 }
19612 l := v_0.Args[0]
19613 if l.Op != OpARMANDshiftRAreg {
19614 break
19615 }
19616 z := l.Args[2]
19617 x := l.Args[0]
19618 y := l.Args[1]
19619 if !(l.Uses == 1) {
19620 break
19621 }
19622 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
19623 v0.AddArg3(x, y, z)
19624 b.resetWithControl(BlockARMLEnoov, v0)
19625 return true
19626 }
19627
19628
19629
19630 for b.Controls[0].Op == OpARMCMPconst {
19631 v_0 := b.Controls[0]
19632 if auxIntToInt32(v_0.AuxInt) != 0 {
19633 break
19634 }
19635 l := v_0.Args[0]
19636 if l.Op != OpARMXOR {
19637 break
19638 }
19639 _ = l.Args[1]
19640 l_0 := l.Args[0]
19641 l_1 := l.Args[1]
19642 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19643 x := l_0
19644 y := l_1
19645 if !(l.Uses == 1) {
19646 continue
19647 }
19648 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
19649 v0.AddArg2(x, y)
19650 b.resetWithControl(BlockARMLEnoov, v0)
19651 return true
19652 }
19653 break
19654 }
19655
19656
19657
19658 for b.Controls[0].Op == OpARMCMPconst {
19659 v_0 := b.Controls[0]
19660 if auxIntToInt32(v_0.AuxInt) != 0 {
19661 break
19662 }
19663 l := v_0.Args[0]
19664 if l.Op != OpARMXORconst {
19665 break
19666 }
19667 c := auxIntToInt32(l.AuxInt)
19668 x := l.Args[0]
19669 if !(l.Uses == 1) {
19670 break
19671 }
19672 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
19673 v0.AuxInt = int32ToAuxInt(c)
19674 v0.AddArg(x)
19675 b.resetWithControl(BlockARMLEnoov, v0)
19676 return true
19677 }
19678
19679
19680
19681 for b.Controls[0].Op == OpARMCMPconst {
19682 v_0 := b.Controls[0]
19683 if auxIntToInt32(v_0.AuxInt) != 0 {
19684 break
19685 }
19686 l := v_0.Args[0]
19687 if l.Op != OpARMXORshiftLL {
19688 break
19689 }
19690 c := auxIntToInt32(l.AuxInt)
19691 y := l.Args[1]
19692 x := l.Args[0]
19693 if !(l.Uses == 1) {
19694 break
19695 }
19696 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
19697 v0.AuxInt = int32ToAuxInt(c)
19698 v0.AddArg2(x, y)
19699 b.resetWithControl(BlockARMLEnoov, v0)
19700 return true
19701 }
19702
19703
19704
19705 for b.Controls[0].Op == OpARMCMPconst {
19706 v_0 := b.Controls[0]
19707 if auxIntToInt32(v_0.AuxInt) != 0 {
19708 break
19709 }
19710 l := v_0.Args[0]
19711 if l.Op != OpARMXORshiftRL {
19712 break
19713 }
19714 c := auxIntToInt32(l.AuxInt)
19715 y := l.Args[1]
19716 x := l.Args[0]
19717 if !(l.Uses == 1) {
19718 break
19719 }
19720 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
19721 v0.AuxInt = int32ToAuxInt(c)
19722 v0.AddArg2(x, y)
19723 b.resetWithControl(BlockARMLEnoov, v0)
19724 return true
19725 }
19726
19727
19728
19729 for b.Controls[0].Op == OpARMCMPconst {
19730 v_0 := b.Controls[0]
19731 if auxIntToInt32(v_0.AuxInt) != 0 {
19732 break
19733 }
19734 l := v_0.Args[0]
19735 if l.Op != OpARMXORshiftRA {
19736 break
19737 }
19738 c := auxIntToInt32(l.AuxInt)
19739 y := l.Args[1]
19740 x := l.Args[0]
19741 if !(l.Uses == 1) {
19742 break
19743 }
19744 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
19745 v0.AuxInt = int32ToAuxInt(c)
19746 v0.AddArg2(x, y)
19747 b.resetWithControl(BlockARMLEnoov, v0)
19748 return true
19749 }
19750
19751
19752
19753 for b.Controls[0].Op == OpARMCMPconst {
19754 v_0 := b.Controls[0]
19755 if auxIntToInt32(v_0.AuxInt) != 0 {
19756 break
19757 }
19758 l := v_0.Args[0]
19759 if l.Op != OpARMXORshiftLLreg {
19760 break
19761 }
19762 z := l.Args[2]
19763 x := l.Args[0]
19764 y := l.Args[1]
19765 if !(l.Uses == 1) {
19766 break
19767 }
19768 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
19769 v0.AddArg3(x, y, z)
19770 b.resetWithControl(BlockARMLEnoov, v0)
19771 return true
19772 }
19773
19774
19775
19776 for b.Controls[0].Op == OpARMCMPconst {
19777 v_0 := b.Controls[0]
19778 if auxIntToInt32(v_0.AuxInt) != 0 {
19779 break
19780 }
19781 l := v_0.Args[0]
19782 if l.Op != OpARMXORshiftRLreg {
19783 break
19784 }
19785 z := l.Args[2]
19786 x := l.Args[0]
19787 y := l.Args[1]
19788 if !(l.Uses == 1) {
19789 break
19790 }
19791 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
19792 v0.AddArg3(x, y, z)
19793 b.resetWithControl(BlockARMLEnoov, v0)
19794 return true
19795 }
19796
19797
19798
19799 for b.Controls[0].Op == OpARMCMPconst {
19800 v_0 := b.Controls[0]
19801 if auxIntToInt32(v_0.AuxInt) != 0 {
19802 break
19803 }
19804 l := v_0.Args[0]
19805 if l.Op != OpARMXORshiftRAreg {
19806 break
19807 }
19808 z := l.Args[2]
19809 x := l.Args[0]
19810 y := l.Args[1]
19811 if !(l.Uses == 1) {
19812 break
19813 }
19814 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
19815 v0.AddArg3(x, y, z)
19816 b.resetWithControl(BlockARMLEnoov, v0)
19817 return true
19818 }
19819 case BlockARMLEnoov:
19820
19821
19822
19823 for b.Controls[0].Op == OpARMFlagConstant {
19824 v_0 := b.Controls[0]
19825 fc := auxIntToFlagConstant(v_0.AuxInt)
19826 if !(fc.leNoov()) {
19827 break
19828 }
19829 b.Reset(BlockFirst)
19830 return true
19831 }
19832
19833
19834
19835 for b.Controls[0].Op == OpARMFlagConstant {
19836 v_0 := b.Controls[0]
19837 fc := auxIntToFlagConstant(v_0.AuxInt)
19838 if !(!fc.leNoov()) {
19839 break
19840 }
19841 b.Reset(BlockFirst)
19842 b.swapSuccessors()
19843 return true
19844 }
19845
19846
19847 for b.Controls[0].Op == OpARMInvertFlags {
19848 v_0 := b.Controls[0]
19849 cmp := v_0.Args[0]
19850 b.resetWithControl(BlockARMGEnoov, cmp)
19851 return true
19852 }
19853 case BlockARMLT:
19854
19855
19856
19857 for b.Controls[0].Op == OpARMFlagConstant {
19858 v_0 := b.Controls[0]
19859 fc := auxIntToFlagConstant(v_0.AuxInt)
19860 if !(fc.lt()) {
19861 break
19862 }
19863 b.Reset(BlockFirst)
19864 return true
19865 }
19866
19867
19868
19869 for b.Controls[0].Op == OpARMFlagConstant {
19870 v_0 := b.Controls[0]
19871 fc := auxIntToFlagConstant(v_0.AuxInt)
19872 if !(!fc.lt()) {
19873 break
19874 }
19875 b.Reset(BlockFirst)
19876 b.swapSuccessors()
19877 return true
19878 }
19879
19880
19881 for b.Controls[0].Op == OpARMInvertFlags {
19882 v_0 := b.Controls[0]
19883 cmp := v_0.Args[0]
19884 b.resetWithControl(BlockARMGT, cmp)
19885 return true
19886 }
19887
19888
19889
19890 for b.Controls[0].Op == OpARMCMPconst {
19891 v_0 := b.Controls[0]
19892 if auxIntToInt32(v_0.AuxInt) != 0 {
19893 break
19894 }
19895 l := v_0.Args[0]
19896 if l.Op != OpARMSUB {
19897 break
19898 }
19899 y := l.Args[1]
19900 x := l.Args[0]
19901 if !(l.Uses == 1) {
19902 break
19903 }
19904 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19905 v0.AddArg2(x, y)
19906 b.resetWithControl(BlockARMLTnoov, v0)
19907 return true
19908 }
19909
19910
19911
19912 for b.Controls[0].Op == OpARMCMPconst {
19913 v_0 := b.Controls[0]
19914 if auxIntToInt32(v_0.AuxInt) != 0 {
19915 break
19916 }
19917 l := v_0.Args[0]
19918 if l.Op != OpARMMULS {
19919 break
19920 }
19921 a := l.Args[2]
19922 x := l.Args[0]
19923 y := l.Args[1]
19924 if !(l.Uses == 1) {
19925 break
19926 }
19927 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19928 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
19929 v1.AddArg2(x, y)
19930 v0.AddArg2(a, v1)
19931 b.resetWithControl(BlockARMLTnoov, v0)
19932 return true
19933 }
19934
19935
19936
19937 for b.Controls[0].Op == OpARMCMPconst {
19938 v_0 := b.Controls[0]
19939 if auxIntToInt32(v_0.AuxInt) != 0 {
19940 break
19941 }
19942 l := v_0.Args[0]
19943 if l.Op != OpARMSUBconst {
19944 break
19945 }
19946 c := auxIntToInt32(l.AuxInt)
19947 x := l.Args[0]
19948 if !(l.Uses == 1) {
19949 break
19950 }
19951 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
19952 v0.AuxInt = int32ToAuxInt(c)
19953 v0.AddArg(x)
19954 b.resetWithControl(BlockARMLTnoov, v0)
19955 return true
19956 }
19957
19958
19959
19960 for b.Controls[0].Op == OpARMCMPconst {
19961 v_0 := b.Controls[0]
19962 if auxIntToInt32(v_0.AuxInt) != 0 {
19963 break
19964 }
19965 l := v_0.Args[0]
19966 if l.Op != OpARMSUBshiftLL {
19967 break
19968 }
19969 c := auxIntToInt32(l.AuxInt)
19970 y := l.Args[1]
19971 x := l.Args[0]
19972 if !(l.Uses == 1) {
19973 break
19974 }
19975 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
19976 v0.AuxInt = int32ToAuxInt(c)
19977 v0.AddArg2(x, y)
19978 b.resetWithControl(BlockARMLTnoov, v0)
19979 return true
19980 }
19981
19982
19983
19984 for b.Controls[0].Op == OpARMCMPconst {
19985 v_0 := b.Controls[0]
19986 if auxIntToInt32(v_0.AuxInt) != 0 {
19987 break
19988 }
19989 l := v_0.Args[0]
19990 if l.Op != OpARMSUBshiftRL {
19991 break
19992 }
19993 c := auxIntToInt32(l.AuxInt)
19994 y := l.Args[1]
19995 x := l.Args[0]
19996 if !(l.Uses == 1) {
19997 break
19998 }
19999 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
20000 v0.AuxInt = int32ToAuxInt(c)
20001 v0.AddArg2(x, y)
20002 b.resetWithControl(BlockARMLTnoov, v0)
20003 return true
20004 }
20005
20006
20007
20008 for b.Controls[0].Op == OpARMCMPconst {
20009 v_0 := b.Controls[0]
20010 if auxIntToInt32(v_0.AuxInt) != 0 {
20011 break
20012 }
20013 l := v_0.Args[0]
20014 if l.Op != OpARMSUBshiftRA {
20015 break
20016 }
20017 c := auxIntToInt32(l.AuxInt)
20018 y := l.Args[1]
20019 x := l.Args[0]
20020 if !(l.Uses == 1) {
20021 break
20022 }
20023 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
20024 v0.AuxInt = int32ToAuxInt(c)
20025 v0.AddArg2(x, y)
20026 b.resetWithControl(BlockARMLTnoov, v0)
20027 return true
20028 }
20029
20030
20031
20032 for b.Controls[0].Op == OpARMCMPconst {
20033 v_0 := b.Controls[0]
20034 if auxIntToInt32(v_0.AuxInt) != 0 {
20035 break
20036 }
20037 l := v_0.Args[0]
20038 if l.Op != OpARMSUBshiftLLreg {
20039 break
20040 }
20041 z := l.Args[2]
20042 x := l.Args[0]
20043 y := l.Args[1]
20044 if !(l.Uses == 1) {
20045 break
20046 }
20047 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
20048 v0.AddArg3(x, y, z)
20049 b.resetWithControl(BlockARMLTnoov, v0)
20050 return true
20051 }
20052
20053
20054
20055 for b.Controls[0].Op == OpARMCMPconst {
20056 v_0 := b.Controls[0]
20057 if auxIntToInt32(v_0.AuxInt) != 0 {
20058 break
20059 }
20060 l := v_0.Args[0]
20061 if l.Op != OpARMSUBshiftRLreg {
20062 break
20063 }
20064 z := l.Args[2]
20065 x := l.Args[0]
20066 y := l.Args[1]
20067 if !(l.Uses == 1) {
20068 break
20069 }
20070 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
20071 v0.AddArg3(x, y, z)
20072 b.resetWithControl(BlockARMLTnoov, v0)
20073 return true
20074 }
20075
20076
20077
20078 for b.Controls[0].Op == OpARMCMPconst {
20079 v_0 := b.Controls[0]
20080 if auxIntToInt32(v_0.AuxInt) != 0 {
20081 break
20082 }
20083 l := v_0.Args[0]
20084 if l.Op != OpARMSUBshiftRAreg {
20085 break
20086 }
20087 z := l.Args[2]
20088 x := l.Args[0]
20089 y := l.Args[1]
20090 if !(l.Uses == 1) {
20091 break
20092 }
20093 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
20094 v0.AddArg3(x, y, z)
20095 b.resetWithControl(BlockARMLTnoov, v0)
20096 return true
20097 }
20098
20099
20100
20101 for b.Controls[0].Op == OpARMCMPconst {
20102 v_0 := b.Controls[0]
20103 if auxIntToInt32(v_0.AuxInt) != 0 {
20104 break
20105 }
20106 l := v_0.Args[0]
20107 if l.Op != OpARMADD {
20108 break
20109 }
20110 _ = l.Args[1]
20111 l_0 := l.Args[0]
20112 l_1 := l.Args[1]
20113 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20114 x := l_0
20115 y := l_1
20116 if !(l.Uses == 1) {
20117 continue
20118 }
20119 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20120 v0.AddArg2(x, y)
20121 b.resetWithControl(BlockARMLTnoov, v0)
20122 return true
20123 }
20124 break
20125 }
20126
20127
20128
20129 for b.Controls[0].Op == OpARMCMPconst {
20130 v_0 := b.Controls[0]
20131 if auxIntToInt32(v_0.AuxInt) != 0 {
20132 break
20133 }
20134 l := v_0.Args[0]
20135 if l.Op != OpARMMULA {
20136 break
20137 }
20138 a := l.Args[2]
20139 x := l.Args[0]
20140 y := l.Args[1]
20141 if !(l.Uses == 1) {
20142 break
20143 }
20144 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20145 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
20146 v1.AddArg2(x, y)
20147 v0.AddArg2(a, v1)
20148 b.resetWithControl(BlockARMLTnoov, v0)
20149 return true
20150 }
20151
20152
20153
20154 for b.Controls[0].Op == OpARMCMPconst {
20155 v_0 := b.Controls[0]
20156 if auxIntToInt32(v_0.AuxInt) != 0 {
20157 break
20158 }
20159 l := v_0.Args[0]
20160 if l.Op != OpARMADDconst {
20161 break
20162 }
20163 c := auxIntToInt32(l.AuxInt)
20164 x := l.Args[0]
20165 if !(l.Uses == 1) {
20166 break
20167 }
20168 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
20169 v0.AuxInt = int32ToAuxInt(c)
20170 v0.AddArg(x)
20171 b.resetWithControl(BlockARMLTnoov, v0)
20172 return true
20173 }
20174
20175
20176
20177 for b.Controls[0].Op == OpARMCMPconst {
20178 v_0 := b.Controls[0]
20179 if auxIntToInt32(v_0.AuxInt) != 0 {
20180 break
20181 }
20182 l := v_0.Args[0]
20183 if l.Op != OpARMADDshiftLL {
20184 break
20185 }
20186 c := auxIntToInt32(l.AuxInt)
20187 y := l.Args[1]
20188 x := l.Args[0]
20189 if !(l.Uses == 1) {
20190 break
20191 }
20192 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
20193 v0.AuxInt = int32ToAuxInt(c)
20194 v0.AddArg2(x, y)
20195 b.resetWithControl(BlockARMLTnoov, v0)
20196 return true
20197 }
20198
20199
20200
20201 for b.Controls[0].Op == OpARMCMPconst {
20202 v_0 := b.Controls[0]
20203 if auxIntToInt32(v_0.AuxInt) != 0 {
20204 break
20205 }
20206 l := v_0.Args[0]
20207 if l.Op != OpARMADDshiftRL {
20208 break
20209 }
20210 c := auxIntToInt32(l.AuxInt)
20211 y := l.Args[1]
20212 x := l.Args[0]
20213 if !(l.Uses == 1) {
20214 break
20215 }
20216 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
20217 v0.AuxInt = int32ToAuxInt(c)
20218 v0.AddArg2(x, y)
20219 b.resetWithControl(BlockARMLTnoov, v0)
20220 return true
20221 }
20222
20223
20224
20225 for b.Controls[0].Op == OpARMCMPconst {
20226 v_0 := b.Controls[0]
20227 if auxIntToInt32(v_0.AuxInt) != 0 {
20228 break
20229 }
20230 l := v_0.Args[0]
20231 if l.Op != OpARMADDshiftRA {
20232 break
20233 }
20234 c := auxIntToInt32(l.AuxInt)
20235 y := l.Args[1]
20236 x := l.Args[0]
20237 if !(l.Uses == 1) {
20238 break
20239 }
20240 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
20241 v0.AuxInt = int32ToAuxInt(c)
20242 v0.AddArg2(x, y)
20243 b.resetWithControl(BlockARMLTnoov, v0)
20244 return true
20245 }
20246
20247
20248
20249 for b.Controls[0].Op == OpARMCMPconst {
20250 v_0 := b.Controls[0]
20251 if auxIntToInt32(v_0.AuxInt) != 0 {
20252 break
20253 }
20254 l := v_0.Args[0]
20255 if l.Op != OpARMADDshiftLLreg {
20256 break
20257 }
20258 z := l.Args[2]
20259 x := l.Args[0]
20260 y := l.Args[1]
20261 if !(l.Uses == 1) {
20262 break
20263 }
20264 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
20265 v0.AddArg3(x, y, z)
20266 b.resetWithControl(BlockARMLTnoov, v0)
20267 return true
20268 }
20269
20270
20271
20272 for b.Controls[0].Op == OpARMCMPconst {
20273 v_0 := b.Controls[0]
20274 if auxIntToInt32(v_0.AuxInt) != 0 {
20275 break
20276 }
20277 l := v_0.Args[0]
20278 if l.Op != OpARMADDshiftRLreg {
20279 break
20280 }
20281 z := l.Args[2]
20282 x := l.Args[0]
20283 y := l.Args[1]
20284 if !(l.Uses == 1) {
20285 break
20286 }
20287 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
20288 v0.AddArg3(x, y, z)
20289 b.resetWithControl(BlockARMLTnoov, v0)
20290 return true
20291 }
20292
20293
20294
20295 for b.Controls[0].Op == OpARMCMPconst {
20296 v_0 := b.Controls[0]
20297 if auxIntToInt32(v_0.AuxInt) != 0 {
20298 break
20299 }
20300 l := v_0.Args[0]
20301 if l.Op != OpARMADDshiftRAreg {
20302 break
20303 }
20304 z := l.Args[2]
20305 x := l.Args[0]
20306 y := l.Args[1]
20307 if !(l.Uses == 1) {
20308 break
20309 }
20310 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
20311 v0.AddArg3(x, y, z)
20312 b.resetWithControl(BlockARMLTnoov, v0)
20313 return true
20314 }
20315
20316
20317
20318 for b.Controls[0].Op == OpARMCMPconst {
20319 v_0 := b.Controls[0]
20320 if auxIntToInt32(v_0.AuxInt) != 0 {
20321 break
20322 }
20323 l := v_0.Args[0]
20324 if l.Op != OpARMAND {
20325 break
20326 }
20327 _ = l.Args[1]
20328 l_0 := l.Args[0]
20329 l_1 := l.Args[1]
20330 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20331 x := l_0
20332 y := l_1
20333 if !(l.Uses == 1) {
20334 continue
20335 }
20336 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
20337 v0.AddArg2(x, y)
20338 b.resetWithControl(BlockARMLTnoov, v0)
20339 return true
20340 }
20341 break
20342 }
20343
20344
20345
20346 for b.Controls[0].Op == OpARMCMPconst {
20347 v_0 := b.Controls[0]
20348 if auxIntToInt32(v_0.AuxInt) != 0 {
20349 break
20350 }
20351 l := v_0.Args[0]
20352 if l.Op != OpARMANDconst {
20353 break
20354 }
20355 c := auxIntToInt32(l.AuxInt)
20356 x := l.Args[0]
20357 if !(l.Uses == 1) {
20358 break
20359 }
20360 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
20361 v0.AuxInt = int32ToAuxInt(c)
20362 v0.AddArg(x)
20363 b.resetWithControl(BlockARMLTnoov, v0)
20364 return true
20365 }
20366
20367
20368
20369 for b.Controls[0].Op == OpARMCMPconst {
20370 v_0 := b.Controls[0]
20371 if auxIntToInt32(v_0.AuxInt) != 0 {
20372 break
20373 }
20374 l := v_0.Args[0]
20375 if l.Op != OpARMANDshiftLL {
20376 break
20377 }
20378 c := auxIntToInt32(l.AuxInt)
20379 y := l.Args[1]
20380 x := l.Args[0]
20381 if !(l.Uses == 1) {
20382 break
20383 }
20384 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
20385 v0.AuxInt = int32ToAuxInt(c)
20386 v0.AddArg2(x, y)
20387 b.resetWithControl(BlockARMLTnoov, v0)
20388 return true
20389 }
20390
20391
20392
20393 for b.Controls[0].Op == OpARMCMPconst {
20394 v_0 := b.Controls[0]
20395 if auxIntToInt32(v_0.AuxInt) != 0 {
20396 break
20397 }
20398 l := v_0.Args[0]
20399 if l.Op != OpARMANDshiftRL {
20400 break
20401 }
20402 c := auxIntToInt32(l.AuxInt)
20403 y := l.Args[1]
20404 x := l.Args[0]
20405 if !(l.Uses == 1) {
20406 break
20407 }
20408 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
20409 v0.AuxInt = int32ToAuxInt(c)
20410 v0.AddArg2(x, y)
20411 b.resetWithControl(BlockARMLTnoov, v0)
20412 return true
20413 }
20414
20415
20416
20417 for b.Controls[0].Op == OpARMCMPconst {
20418 v_0 := b.Controls[0]
20419 if auxIntToInt32(v_0.AuxInt) != 0 {
20420 break
20421 }
20422 l := v_0.Args[0]
20423 if l.Op != OpARMANDshiftRA {
20424 break
20425 }
20426 c := auxIntToInt32(l.AuxInt)
20427 y := l.Args[1]
20428 x := l.Args[0]
20429 if !(l.Uses == 1) {
20430 break
20431 }
20432 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
20433 v0.AuxInt = int32ToAuxInt(c)
20434 v0.AddArg2(x, y)
20435 b.resetWithControl(BlockARMLTnoov, v0)
20436 return true
20437 }
20438
20439
20440
20441 for b.Controls[0].Op == OpARMCMPconst {
20442 v_0 := b.Controls[0]
20443 if auxIntToInt32(v_0.AuxInt) != 0 {
20444 break
20445 }
20446 l := v_0.Args[0]
20447 if l.Op != OpARMANDshiftLLreg {
20448 break
20449 }
20450 z := l.Args[2]
20451 x := l.Args[0]
20452 y := l.Args[1]
20453 if !(l.Uses == 1) {
20454 break
20455 }
20456 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
20457 v0.AddArg3(x, y, z)
20458 b.resetWithControl(BlockARMLTnoov, v0)
20459 return true
20460 }
20461
20462
20463
20464 for b.Controls[0].Op == OpARMCMPconst {
20465 v_0 := b.Controls[0]
20466 if auxIntToInt32(v_0.AuxInt) != 0 {
20467 break
20468 }
20469 l := v_0.Args[0]
20470 if l.Op != OpARMANDshiftRLreg {
20471 break
20472 }
20473 z := l.Args[2]
20474 x := l.Args[0]
20475 y := l.Args[1]
20476 if !(l.Uses == 1) {
20477 break
20478 }
20479 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
20480 v0.AddArg3(x, y, z)
20481 b.resetWithControl(BlockARMLTnoov, v0)
20482 return true
20483 }
20484
20485
20486
20487 for b.Controls[0].Op == OpARMCMPconst {
20488 v_0 := b.Controls[0]
20489 if auxIntToInt32(v_0.AuxInt) != 0 {
20490 break
20491 }
20492 l := v_0.Args[0]
20493 if l.Op != OpARMANDshiftRAreg {
20494 break
20495 }
20496 z := l.Args[2]
20497 x := l.Args[0]
20498 y := l.Args[1]
20499 if !(l.Uses == 1) {
20500 break
20501 }
20502 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
20503 v0.AddArg3(x, y, z)
20504 b.resetWithControl(BlockARMLTnoov, v0)
20505 return true
20506 }
20507
20508
20509
20510 for b.Controls[0].Op == OpARMCMPconst {
20511 v_0 := b.Controls[0]
20512 if auxIntToInt32(v_0.AuxInt) != 0 {
20513 break
20514 }
20515 l := v_0.Args[0]
20516 if l.Op != OpARMXOR {
20517 break
20518 }
20519 _ = l.Args[1]
20520 l_0 := l.Args[0]
20521 l_1 := l.Args[1]
20522 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20523 x := l_0
20524 y := l_1
20525 if !(l.Uses == 1) {
20526 continue
20527 }
20528 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
20529 v0.AddArg2(x, y)
20530 b.resetWithControl(BlockARMLTnoov, v0)
20531 return true
20532 }
20533 break
20534 }
20535
20536
20537
20538 for b.Controls[0].Op == OpARMCMPconst {
20539 v_0 := b.Controls[0]
20540 if auxIntToInt32(v_0.AuxInt) != 0 {
20541 break
20542 }
20543 l := v_0.Args[0]
20544 if l.Op != OpARMXORconst {
20545 break
20546 }
20547 c := auxIntToInt32(l.AuxInt)
20548 x := l.Args[0]
20549 if !(l.Uses == 1) {
20550 break
20551 }
20552 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
20553 v0.AuxInt = int32ToAuxInt(c)
20554 v0.AddArg(x)
20555 b.resetWithControl(BlockARMLTnoov, v0)
20556 return true
20557 }
20558
20559
20560
20561 for b.Controls[0].Op == OpARMCMPconst {
20562 v_0 := b.Controls[0]
20563 if auxIntToInt32(v_0.AuxInt) != 0 {
20564 break
20565 }
20566 l := v_0.Args[0]
20567 if l.Op != OpARMXORshiftLL {
20568 break
20569 }
20570 c := auxIntToInt32(l.AuxInt)
20571 y := l.Args[1]
20572 x := l.Args[0]
20573 if !(l.Uses == 1) {
20574 break
20575 }
20576 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
20577 v0.AuxInt = int32ToAuxInt(c)
20578 v0.AddArg2(x, y)
20579 b.resetWithControl(BlockARMLTnoov, v0)
20580 return true
20581 }
20582
20583
20584
20585 for b.Controls[0].Op == OpARMCMPconst {
20586 v_0 := b.Controls[0]
20587 if auxIntToInt32(v_0.AuxInt) != 0 {
20588 break
20589 }
20590 l := v_0.Args[0]
20591 if l.Op != OpARMXORshiftRL {
20592 break
20593 }
20594 c := auxIntToInt32(l.AuxInt)
20595 y := l.Args[1]
20596 x := l.Args[0]
20597 if !(l.Uses == 1) {
20598 break
20599 }
20600 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
20601 v0.AuxInt = int32ToAuxInt(c)
20602 v0.AddArg2(x, y)
20603 b.resetWithControl(BlockARMLTnoov, v0)
20604 return true
20605 }
20606
20607
20608
20609 for b.Controls[0].Op == OpARMCMPconst {
20610 v_0 := b.Controls[0]
20611 if auxIntToInt32(v_0.AuxInt) != 0 {
20612 break
20613 }
20614 l := v_0.Args[0]
20615 if l.Op != OpARMXORshiftRA {
20616 break
20617 }
20618 c := auxIntToInt32(l.AuxInt)
20619 y := l.Args[1]
20620 x := l.Args[0]
20621 if !(l.Uses == 1) {
20622 break
20623 }
20624 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
20625 v0.AuxInt = int32ToAuxInt(c)
20626 v0.AddArg2(x, y)
20627 b.resetWithControl(BlockARMLTnoov, v0)
20628 return true
20629 }
20630
20631
20632
20633 for b.Controls[0].Op == OpARMCMPconst {
20634 v_0 := b.Controls[0]
20635 if auxIntToInt32(v_0.AuxInt) != 0 {
20636 break
20637 }
20638 l := v_0.Args[0]
20639 if l.Op != OpARMXORshiftLLreg {
20640 break
20641 }
20642 z := l.Args[2]
20643 x := l.Args[0]
20644 y := l.Args[1]
20645 if !(l.Uses == 1) {
20646 break
20647 }
20648 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
20649 v0.AddArg3(x, y, z)
20650 b.resetWithControl(BlockARMLTnoov, v0)
20651 return true
20652 }
20653
20654
20655
20656 for b.Controls[0].Op == OpARMCMPconst {
20657 v_0 := b.Controls[0]
20658 if auxIntToInt32(v_0.AuxInt) != 0 {
20659 break
20660 }
20661 l := v_0.Args[0]
20662 if l.Op != OpARMXORshiftRLreg {
20663 break
20664 }
20665 z := l.Args[2]
20666 x := l.Args[0]
20667 y := l.Args[1]
20668 if !(l.Uses == 1) {
20669 break
20670 }
20671 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
20672 v0.AddArg3(x, y, z)
20673 b.resetWithControl(BlockARMLTnoov, v0)
20674 return true
20675 }
20676
20677
20678
20679 for b.Controls[0].Op == OpARMCMPconst {
20680 v_0 := b.Controls[0]
20681 if auxIntToInt32(v_0.AuxInt) != 0 {
20682 break
20683 }
20684 l := v_0.Args[0]
20685 if l.Op != OpARMXORshiftRAreg {
20686 break
20687 }
20688 z := l.Args[2]
20689 x := l.Args[0]
20690 y := l.Args[1]
20691 if !(l.Uses == 1) {
20692 break
20693 }
20694 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
20695 v0.AddArg3(x, y, z)
20696 b.resetWithControl(BlockARMLTnoov, v0)
20697 return true
20698 }
20699 case BlockARMLTnoov:
20700
20701
20702
20703 for b.Controls[0].Op == OpARMFlagConstant {
20704 v_0 := b.Controls[0]
20705 fc := auxIntToFlagConstant(v_0.AuxInt)
20706 if !(fc.ltNoov()) {
20707 break
20708 }
20709 b.Reset(BlockFirst)
20710 return true
20711 }
20712
20713
20714
20715 for b.Controls[0].Op == OpARMFlagConstant {
20716 v_0 := b.Controls[0]
20717 fc := auxIntToFlagConstant(v_0.AuxInt)
20718 if !(!fc.ltNoov()) {
20719 break
20720 }
20721 b.Reset(BlockFirst)
20722 b.swapSuccessors()
20723 return true
20724 }
20725
20726
20727 for b.Controls[0].Op == OpARMInvertFlags {
20728 v_0 := b.Controls[0]
20729 cmp := v_0.Args[0]
20730 b.resetWithControl(BlockARMGTnoov, cmp)
20731 return true
20732 }
20733 case BlockARMNE:
20734
20735
20736 for b.Controls[0].Op == OpARMCMPconst {
20737 v_0 := b.Controls[0]
20738 if auxIntToInt32(v_0.AuxInt) != 0 {
20739 break
20740 }
20741 v_0_0 := v_0.Args[0]
20742 if v_0_0.Op != OpARMEqual {
20743 break
20744 }
20745 cc := v_0_0.Args[0]
20746 b.resetWithControl(BlockARMEQ, cc)
20747 return true
20748 }
20749
20750
20751 for b.Controls[0].Op == OpARMCMPconst {
20752 v_0 := b.Controls[0]
20753 if auxIntToInt32(v_0.AuxInt) != 0 {
20754 break
20755 }
20756 v_0_0 := v_0.Args[0]
20757 if v_0_0.Op != OpARMNotEqual {
20758 break
20759 }
20760 cc := v_0_0.Args[0]
20761 b.resetWithControl(BlockARMNE, cc)
20762 return true
20763 }
20764
20765
20766 for b.Controls[0].Op == OpARMCMPconst {
20767 v_0 := b.Controls[0]
20768 if auxIntToInt32(v_0.AuxInt) != 0 {
20769 break
20770 }
20771 v_0_0 := v_0.Args[0]
20772 if v_0_0.Op != OpARMLessThan {
20773 break
20774 }
20775 cc := v_0_0.Args[0]
20776 b.resetWithControl(BlockARMLT, cc)
20777 return true
20778 }
20779
20780
20781 for b.Controls[0].Op == OpARMCMPconst {
20782 v_0 := b.Controls[0]
20783 if auxIntToInt32(v_0.AuxInt) != 0 {
20784 break
20785 }
20786 v_0_0 := v_0.Args[0]
20787 if v_0_0.Op != OpARMLessThanU {
20788 break
20789 }
20790 cc := v_0_0.Args[0]
20791 b.resetWithControl(BlockARMULT, cc)
20792 return true
20793 }
20794
20795
20796 for b.Controls[0].Op == OpARMCMPconst {
20797 v_0 := b.Controls[0]
20798 if auxIntToInt32(v_0.AuxInt) != 0 {
20799 break
20800 }
20801 v_0_0 := v_0.Args[0]
20802 if v_0_0.Op != OpARMLessEqual {
20803 break
20804 }
20805 cc := v_0_0.Args[0]
20806 b.resetWithControl(BlockARMLE, cc)
20807 return true
20808 }
20809
20810
20811 for b.Controls[0].Op == OpARMCMPconst {
20812 v_0 := b.Controls[0]
20813 if auxIntToInt32(v_0.AuxInt) != 0 {
20814 break
20815 }
20816 v_0_0 := v_0.Args[0]
20817 if v_0_0.Op != OpARMLessEqualU {
20818 break
20819 }
20820 cc := v_0_0.Args[0]
20821 b.resetWithControl(BlockARMULE, cc)
20822 return true
20823 }
20824
20825
20826 for b.Controls[0].Op == OpARMCMPconst {
20827 v_0 := b.Controls[0]
20828 if auxIntToInt32(v_0.AuxInt) != 0 {
20829 break
20830 }
20831 v_0_0 := v_0.Args[0]
20832 if v_0_0.Op != OpARMGreaterThan {
20833 break
20834 }
20835 cc := v_0_0.Args[0]
20836 b.resetWithControl(BlockARMGT, cc)
20837 return true
20838 }
20839
20840
20841 for b.Controls[0].Op == OpARMCMPconst {
20842 v_0 := b.Controls[0]
20843 if auxIntToInt32(v_0.AuxInt) != 0 {
20844 break
20845 }
20846 v_0_0 := v_0.Args[0]
20847 if v_0_0.Op != OpARMGreaterThanU {
20848 break
20849 }
20850 cc := v_0_0.Args[0]
20851 b.resetWithControl(BlockARMUGT, cc)
20852 return true
20853 }
20854
20855
20856 for b.Controls[0].Op == OpARMCMPconst {
20857 v_0 := b.Controls[0]
20858 if auxIntToInt32(v_0.AuxInt) != 0 {
20859 break
20860 }
20861 v_0_0 := v_0.Args[0]
20862 if v_0_0.Op != OpARMGreaterEqual {
20863 break
20864 }
20865 cc := v_0_0.Args[0]
20866 b.resetWithControl(BlockARMGE, cc)
20867 return true
20868 }
20869
20870
20871 for b.Controls[0].Op == OpARMCMPconst {
20872 v_0 := b.Controls[0]
20873 if auxIntToInt32(v_0.AuxInt) != 0 {
20874 break
20875 }
20876 v_0_0 := v_0.Args[0]
20877 if v_0_0.Op != OpARMGreaterEqualU {
20878 break
20879 }
20880 cc := v_0_0.Args[0]
20881 b.resetWithControl(BlockARMUGE, cc)
20882 return true
20883 }
20884
20885
20886
20887 for b.Controls[0].Op == OpARMFlagConstant {
20888 v_0 := b.Controls[0]
20889 fc := auxIntToFlagConstant(v_0.AuxInt)
20890 if !(fc.ne()) {
20891 break
20892 }
20893 b.Reset(BlockFirst)
20894 return true
20895 }
20896
20897
20898
20899 for b.Controls[0].Op == OpARMFlagConstant {
20900 v_0 := b.Controls[0]
20901 fc := auxIntToFlagConstant(v_0.AuxInt)
20902 if !(!fc.ne()) {
20903 break
20904 }
20905 b.Reset(BlockFirst)
20906 b.swapSuccessors()
20907 return true
20908 }
20909
20910
20911 for b.Controls[0].Op == OpARMInvertFlags {
20912 v_0 := b.Controls[0]
20913 cmp := v_0.Args[0]
20914 b.resetWithControl(BlockARMNE, cmp)
20915 return true
20916 }
20917
20918
20919 for b.Controls[0].Op == OpARMCMP {
20920 v_0 := b.Controls[0]
20921 _ = v_0.Args[1]
20922 x := v_0.Args[0]
20923 v_0_1 := v_0.Args[1]
20924 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
20925 break
20926 }
20927 y := v_0_1.Args[0]
20928 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20929 v0.AddArg2(x, y)
20930 b.resetWithControl(BlockARMNE, v0)
20931 return true
20932 }
20933
20934
20935 for b.Controls[0].Op == OpARMCMN {
20936 v_0 := b.Controls[0]
20937 _ = v_0.Args[1]
20938 v_0_0 := v_0.Args[0]
20939 v_0_1 := v_0.Args[1]
20940 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
20941 x := v_0_0
20942 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
20943 continue
20944 }
20945 y := v_0_1.Args[0]
20946 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20947 v0.AddArg2(x, y)
20948 b.resetWithControl(BlockARMNE, v0)
20949 return true
20950 }
20951 break
20952 }
20953
20954
20955
20956 for b.Controls[0].Op == OpARMCMPconst {
20957 v_0 := b.Controls[0]
20958 if auxIntToInt32(v_0.AuxInt) != 0 {
20959 break
20960 }
20961 l := v_0.Args[0]
20962 if l.Op != OpARMSUB {
20963 break
20964 }
20965 y := l.Args[1]
20966 x := l.Args[0]
20967 if !(l.Uses == 1) {
20968 break
20969 }
20970 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20971 v0.AddArg2(x, y)
20972 b.resetWithControl(BlockARMNE, v0)
20973 return true
20974 }
20975
20976
20977
20978 for b.Controls[0].Op == OpARMCMPconst {
20979 v_0 := b.Controls[0]
20980 if auxIntToInt32(v_0.AuxInt) != 0 {
20981 break
20982 }
20983 l := v_0.Args[0]
20984 if l.Op != OpARMMULS {
20985 break
20986 }
20987 a := l.Args[2]
20988 x := l.Args[0]
20989 y := l.Args[1]
20990 if !(l.Uses == 1) {
20991 break
20992 }
20993 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20994 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
20995 v1.AddArg2(x, y)
20996 v0.AddArg2(a, v1)
20997 b.resetWithControl(BlockARMNE, v0)
20998 return true
20999 }
21000
21001
21002
21003 for b.Controls[0].Op == OpARMCMPconst {
21004 v_0 := b.Controls[0]
21005 if auxIntToInt32(v_0.AuxInt) != 0 {
21006 break
21007 }
21008 l := v_0.Args[0]
21009 if l.Op != OpARMSUBconst {
21010 break
21011 }
21012 c := auxIntToInt32(l.AuxInt)
21013 x := l.Args[0]
21014 if !(l.Uses == 1) {
21015 break
21016 }
21017 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
21018 v0.AuxInt = int32ToAuxInt(c)
21019 v0.AddArg(x)
21020 b.resetWithControl(BlockARMNE, v0)
21021 return true
21022 }
21023
21024
21025
21026 for b.Controls[0].Op == OpARMCMPconst {
21027 v_0 := b.Controls[0]
21028 if auxIntToInt32(v_0.AuxInt) != 0 {
21029 break
21030 }
21031 l := v_0.Args[0]
21032 if l.Op != OpARMSUBshiftLL {
21033 break
21034 }
21035 c := auxIntToInt32(l.AuxInt)
21036 y := l.Args[1]
21037 x := l.Args[0]
21038 if !(l.Uses == 1) {
21039 break
21040 }
21041 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
21042 v0.AuxInt = int32ToAuxInt(c)
21043 v0.AddArg2(x, y)
21044 b.resetWithControl(BlockARMNE, v0)
21045 return true
21046 }
21047
21048
21049
21050 for b.Controls[0].Op == OpARMCMPconst {
21051 v_0 := b.Controls[0]
21052 if auxIntToInt32(v_0.AuxInt) != 0 {
21053 break
21054 }
21055 l := v_0.Args[0]
21056 if l.Op != OpARMSUBshiftRL {
21057 break
21058 }
21059 c := auxIntToInt32(l.AuxInt)
21060 y := l.Args[1]
21061 x := l.Args[0]
21062 if !(l.Uses == 1) {
21063 break
21064 }
21065 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
21066 v0.AuxInt = int32ToAuxInt(c)
21067 v0.AddArg2(x, y)
21068 b.resetWithControl(BlockARMNE, v0)
21069 return true
21070 }
21071
21072
21073
21074 for b.Controls[0].Op == OpARMCMPconst {
21075 v_0 := b.Controls[0]
21076 if auxIntToInt32(v_0.AuxInt) != 0 {
21077 break
21078 }
21079 l := v_0.Args[0]
21080 if l.Op != OpARMSUBshiftRA {
21081 break
21082 }
21083 c := auxIntToInt32(l.AuxInt)
21084 y := l.Args[1]
21085 x := l.Args[0]
21086 if !(l.Uses == 1) {
21087 break
21088 }
21089 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
21090 v0.AuxInt = int32ToAuxInt(c)
21091 v0.AddArg2(x, y)
21092 b.resetWithControl(BlockARMNE, v0)
21093 return true
21094 }
21095
21096
21097
21098 for b.Controls[0].Op == OpARMCMPconst {
21099 v_0 := b.Controls[0]
21100 if auxIntToInt32(v_0.AuxInt) != 0 {
21101 break
21102 }
21103 l := v_0.Args[0]
21104 if l.Op != OpARMSUBshiftLLreg {
21105 break
21106 }
21107 z := l.Args[2]
21108 x := l.Args[0]
21109 y := l.Args[1]
21110 if !(l.Uses == 1) {
21111 break
21112 }
21113 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
21114 v0.AddArg3(x, y, z)
21115 b.resetWithControl(BlockARMNE, v0)
21116 return true
21117 }
21118
21119
21120
21121 for b.Controls[0].Op == OpARMCMPconst {
21122 v_0 := b.Controls[0]
21123 if auxIntToInt32(v_0.AuxInt) != 0 {
21124 break
21125 }
21126 l := v_0.Args[0]
21127 if l.Op != OpARMSUBshiftRLreg {
21128 break
21129 }
21130 z := l.Args[2]
21131 x := l.Args[0]
21132 y := l.Args[1]
21133 if !(l.Uses == 1) {
21134 break
21135 }
21136 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
21137 v0.AddArg3(x, y, z)
21138 b.resetWithControl(BlockARMNE, v0)
21139 return true
21140 }
21141
21142
21143
21144 for b.Controls[0].Op == OpARMCMPconst {
21145 v_0 := b.Controls[0]
21146 if auxIntToInt32(v_0.AuxInt) != 0 {
21147 break
21148 }
21149 l := v_0.Args[0]
21150 if l.Op != OpARMSUBshiftRAreg {
21151 break
21152 }
21153 z := l.Args[2]
21154 x := l.Args[0]
21155 y := l.Args[1]
21156 if !(l.Uses == 1) {
21157 break
21158 }
21159 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
21160 v0.AddArg3(x, y, z)
21161 b.resetWithControl(BlockARMNE, v0)
21162 return true
21163 }
21164
21165
21166
21167 for b.Controls[0].Op == OpARMCMPconst {
21168 v_0 := b.Controls[0]
21169 if auxIntToInt32(v_0.AuxInt) != 0 {
21170 break
21171 }
21172 l := v_0.Args[0]
21173 if l.Op != OpARMADD {
21174 break
21175 }
21176 _ = l.Args[1]
21177 l_0 := l.Args[0]
21178 l_1 := l.Args[1]
21179 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21180 x := l_0
21181 y := l_1
21182 if !(l.Uses == 1) {
21183 continue
21184 }
21185 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
21186 v0.AddArg2(x, y)
21187 b.resetWithControl(BlockARMNE, v0)
21188 return true
21189 }
21190 break
21191 }
21192
21193
21194
21195 for b.Controls[0].Op == OpARMCMPconst {
21196 v_0 := b.Controls[0]
21197 if auxIntToInt32(v_0.AuxInt) != 0 {
21198 break
21199 }
21200 l := v_0.Args[0]
21201 if l.Op != OpARMMULA {
21202 break
21203 }
21204 a := l.Args[2]
21205 x := l.Args[0]
21206 y := l.Args[1]
21207 if !(l.Uses == 1) {
21208 break
21209 }
21210 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
21211 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
21212 v1.AddArg2(x, y)
21213 v0.AddArg2(a, v1)
21214 b.resetWithControl(BlockARMNE, v0)
21215 return true
21216 }
21217
21218
21219
21220 for b.Controls[0].Op == OpARMCMPconst {
21221 v_0 := b.Controls[0]
21222 if auxIntToInt32(v_0.AuxInt) != 0 {
21223 break
21224 }
21225 l := v_0.Args[0]
21226 if l.Op != OpARMADDconst {
21227 break
21228 }
21229 c := auxIntToInt32(l.AuxInt)
21230 x := l.Args[0]
21231 if !(l.Uses == 1) {
21232 break
21233 }
21234 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
21235 v0.AuxInt = int32ToAuxInt(c)
21236 v0.AddArg(x)
21237 b.resetWithControl(BlockARMNE, v0)
21238 return true
21239 }
21240
21241
21242
21243 for b.Controls[0].Op == OpARMCMPconst {
21244 v_0 := b.Controls[0]
21245 if auxIntToInt32(v_0.AuxInt) != 0 {
21246 break
21247 }
21248 l := v_0.Args[0]
21249 if l.Op != OpARMADDshiftLL {
21250 break
21251 }
21252 c := auxIntToInt32(l.AuxInt)
21253 y := l.Args[1]
21254 x := l.Args[0]
21255 if !(l.Uses == 1) {
21256 break
21257 }
21258 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
21259 v0.AuxInt = int32ToAuxInt(c)
21260 v0.AddArg2(x, y)
21261 b.resetWithControl(BlockARMNE, v0)
21262 return true
21263 }
21264
21265
21266
21267 for b.Controls[0].Op == OpARMCMPconst {
21268 v_0 := b.Controls[0]
21269 if auxIntToInt32(v_0.AuxInt) != 0 {
21270 break
21271 }
21272 l := v_0.Args[0]
21273 if l.Op != OpARMADDshiftRL {
21274 break
21275 }
21276 c := auxIntToInt32(l.AuxInt)
21277 y := l.Args[1]
21278 x := l.Args[0]
21279 if !(l.Uses == 1) {
21280 break
21281 }
21282 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
21283 v0.AuxInt = int32ToAuxInt(c)
21284 v0.AddArg2(x, y)
21285 b.resetWithControl(BlockARMNE, v0)
21286 return true
21287 }
21288
21289
21290
21291 for b.Controls[0].Op == OpARMCMPconst {
21292 v_0 := b.Controls[0]
21293 if auxIntToInt32(v_0.AuxInt) != 0 {
21294 break
21295 }
21296 l := v_0.Args[0]
21297 if l.Op != OpARMADDshiftRA {
21298 break
21299 }
21300 c := auxIntToInt32(l.AuxInt)
21301 y := l.Args[1]
21302 x := l.Args[0]
21303 if !(l.Uses == 1) {
21304 break
21305 }
21306 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
21307 v0.AuxInt = int32ToAuxInt(c)
21308 v0.AddArg2(x, y)
21309 b.resetWithControl(BlockARMNE, v0)
21310 return true
21311 }
21312
21313
21314
21315 for b.Controls[0].Op == OpARMCMPconst {
21316 v_0 := b.Controls[0]
21317 if auxIntToInt32(v_0.AuxInt) != 0 {
21318 break
21319 }
21320 l := v_0.Args[0]
21321 if l.Op != OpARMADDshiftLLreg {
21322 break
21323 }
21324 z := l.Args[2]
21325 x := l.Args[0]
21326 y := l.Args[1]
21327 if !(l.Uses == 1) {
21328 break
21329 }
21330 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
21331 v0.AddArg3(x, y, z)
21332 b.resetWithControl(BlockARMNE, v0)
21333 return true
21334 }
21335
21336
21337
21338 for b.Controls[0].Op == OpARMCMPconst {
21339 v_0 := b.Controls[0]
21340 if auxIntToInt32(v_0.AuxInt) != 0 {
21341 break
21342 }
21343 l := v_0.Args[0]
21344 if l.Op != OpARMADDshiftRLreg {
21345 break
21346 }
21347 z := l.Args[2]
21348 x := l.Args[0]
21349 y := l.Args[1]
21350 if !(l.Uses == 1) {
21351 break
21352 }
21353 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
21354 v0.AddArg3(x, y, z)
21355 b.resetWithControl(BlockARMNE, v0)
21356 return true
21357 }
21358
21359
21360
21361 for b.Controls[0].Op == OpARMCMPconst {
21362 v_0 := b.Controls[0]
21363 if auxIntToInt32(v_0.AuxInt) != 0 {
21364 break
21365 }
21366 l := v_0.Args[0]
21367 if l.Op != OpARMADDshiftRAreg {
21368 break
21369 }
21370 z := l.Args[2]
21371 x := l.Args[0]
21372 y := l.Args[1]
21373 if !(l.Uses == 1) {
21374 break
21375 }
21376 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
21377 v0.AddArg3(x, y, z)
21378 b.resetWithControl(BlockARMNE, v0)
21379 return true
21380 }
21381
21382
21383
21384 for b.Controls[0].Op == OpARMCMPconst {
21385 v_0 := b.Controls[0]
21386 if auxIntToInt32(v_0.AuxInt) != 0 {
21387 break
21388 }
21389 l := v_0.Args[0]
21390 if l.Op != OpARMAND {
21391 break
21392 }
21393 _ = l.Args[1]
21394 l_0 := l.Args[0]
21395 l_1 := l.Args[1]
21396 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21397 x := l_0
21398 y := l_1
21399 if !(l.Uses == 1) {
21400 continue
21401 }
21402 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
21403 v0.AddArg2(x, y)
21404 b.resetWithControl(BlockARMNE, v0)
21405 return true
21406 }
21407 break
21408 }
21409
21410
21411
21412 for b.Controls[0].Op == OpARMCMPconst {
21413 v_0 := b.Controls[0]
21414 if auxIntToInt32(v_0.AuxInt) != 0 {
21415 break
21416 }
21417 l := v_0.Args[0]
21418 if l.Op != OpARMANDconst {
21419 break
21420 }
21421 c := auxIntToInt32(l.AuxInt)
21422 x := l.Args[0]
21423 if !(l.Uses == 1) {
21424 break
21425 }
21426 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
21427 v0.AuxInt = int32ToAuxInt(c)
21428 v0.AddArg(x)
21429 b.resetWithControl(BlockARMNE, v0)
21430 return true
21431 }
21432
21433
21434
21435 for b.Controls[0].Op == OpARMCMPconst {
21436 v_0 := b.Controls[0]
21437 if auxIntToInt32(v_0.AuxInt) != 0 {
21438 break
21439 }
21440 l := v_0.Args[0]
21441 if l.Op != OpARMANDshiftLL {
21442 break
21443 }
21444 c := auxIntToInt32(l.AuxInt)
21445 y := l.Args[1]
21446 x := l.Args[0]
21447 if !(l.Uses == 1) {
21448 break
21449 }
21450 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
21451 v0.AuxInt = int32ToAuxInt(c)
21452 v0.AddArg2(x, y)
21453 b.resetWithControl(BlockARMNE, v0)
21454 return true
21455 }
21456
21457
21458
21459 for b.Controls[0].Op == OpARMCMPconst {
21460 v_0 := b.Controls[0]
21461 if auxIntToInt32(v_0.AuxInt) != 0 {
21462 break
21463 }
21464 l := v_0.Args[0]
21465 if l.Op != OpARMANDshiftRL {
21466 break
21467 }
21468 c := auxIntToInt32(l.AuxInt)
21469 y := l.Args[1]
21470 x := l.Args[0]
21471 if !(l.Uses == 1) {
21472 break
21473 }
21474 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
21475 v0.AuxInt = int32ToAuxInt(c)
21476 v0.AddArg2(x, y)
21477 b.resetWithControl(BlockARMNE, v0)
21478 return true
21479 }
21480
21481
21482
21483 for b.Controls[0].Op == OpARMCMPconst {
21484 v_0 := b.Controls[0]
21485 if auxIntToInt32(v_0.AuxInt) != 0 {
21486 break
21487 }
21488 l := v_0.Args[0]
21489 if l.Op != OpARMANDshiftRA {
21490 break
21491 }
21492 c := auxIntToInt32(l.AuxInt)
21493 y := l.Args[1]
21494 x := l.Args[0]
21495 if !(l.Uses == 1) {
21496 break
21497 }
21498 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
21499 v0.AuxInt = int32ToAuxInt(c)
21500 v0.AddArg2(x, y)
21501 b.resetWithControl(BlockARMNE, v0)
21502 return true
21503 }
21504
21505
21506
21507 for b.Controls[0].Op == OpARMCMPconst {
21508 v_0 := b.Controls[0]
21509 if auxIntToInt32(v_0.AuxInt) != 0 {
21510 break
21511 }
21512 l := v_0.Args[0]
21513 if l.Op != OpARMANDshiftLLreg {
21514 break
21515 }
21516 z := l.Args[2]
21517 x := l.Args[0]
21518 y := l.Args[1]
21519 if !(l.Uses == 1) {
21520 break
21521 }
21522 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
21523 v0.AddArg3(x, y, z)
21524 b.resetWithControl(BlockARMNE, v0)
21525 return true
21526 }
21527
21528
21529
21530 for b.Controls[0].Op == OpARMCMPconst {
21531 v_0 := b.Controls[0]
21532 if auxIntToInt32(v_0.AuxInt) != 0 {
21533 break
21534 }
21535 l := v_0.Args[0]
21536 if l.Op != OpARMANDshiftRLreg {
21537 break
21538 }
21539 z := l.Args[2]
21540 x := l.Args[0]
21541 y := l.Args[1]
21542 if !(l.Uses == 1) {
21543 break
21544 }
21545 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
21546 v0.AddArg3(x, y, z)
21547 b.resetWithControl(BlockARMNE, v0)
21548 return true
21549 }
21550
21551
21552
21553 for b.Controls[0].Op == OpARMCMPconst {
21554 v_0 := b.Controls[0]
21555 if auxIntToInt32(v_0.AuxInt) != 0 {
21556 break
21557 }
21558 l := v_0.Args[0]
21559 if l.Op != OpARMANDshiftRAreg {
21560 break
21561 }
21562 z := l.Args[2]
21563 x := l.Args[0]
21564 y := l.Args[1]
21565 if !(l.Uses == 1) {
21566 break
21567 }
21568 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
21569 v0.AddArg3(x, y, z)
21570 b.resetWithControl(BlockARMNE, v0)
21571 return true
21572 }
21573
21574
21575
21576 for b.Controls[0].Op == OpARMCMPconst {
21577 v_0 := b.Controls[0]
21578 if auxIntToInt32(v_0.AuxInt) != 0 {
21579 break
21580 }
21581 l := v_0.Args[0]
21582 if l.Op != OpARMXOR {
21583 break
21584 }
21585 _ = l.Args[1]
21586 l_0 := l.Args[0]
21587 l_1 := l.Args[1]
21588 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21589 x := l_0
21590 y := l_1
21591 if !(l.Uses == 1) {
21592 continue
21593 }
21594 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
21595 v0.AddArg2(x, y)
21596 b.resetWithControl(BlockARMNE, v0)
21597 return true
21598 }
21599 break
21600 }
21601
21602
21603
21604 for b.Controls[0].Op == OpARMCMPconst {
21605 v_0 := b.Controls[0]
21606 if auxIntToInt32(v_0.AuxInt) != 0 {
21607 break
21608 }
21609 l := v_0.Args[0]
21610 if l.Op != OpARMXORconst {
21611 break
21612 }
21613 c := auxIntToInt32(l.AuxInt)
21614 x := l.Args[0]
21615 if !(l.Uses == 1) {
21616 break
21617 }
21618 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
21619 v0.AuxInt = int32ToAuxInt(c)
21620 v0.AddArg(x)
21621 b.resetWithControl(BlockARMNE, v0)
21622 return true
21623 }
21624
21625
21626
21627 for b.Controls[0].Op == OpARMCMPconst {
21628 v_0 := b.Controls[0]
21629 if auxIntToInt32(v_0.AuxInt) != 0 {
21630 break
21631 }
21632 l := v_0.Args[0]
21633 if l.Op != OpARMXORshiftLL {
21634 break
21635 }
21636 c := auxIntToInt32(l.AuxInt)
21637 y := l.Args[1]
21638 x := l.Args[0]
21639 if !(l.Uses == 1) {
21640 break
21641 }
21642 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
21643 v0.AuxInt = int32ToAuxInt(c)
21644 v0.AddArg2(x, y)
21645 b.resetWithControl(BlockARMNE, v0)
21646 return true
21647 }
21648
21649
21650
21651 for b.Controls[0].Op == OpARMCMPconst {
21652 v_0 := b.Controls[0]
21653 if auxIntToInt32(v_0.AuxInt) != 0 {
21654 break
21655 }
21656 l := v_0.Args[0]
21657 if l.Op != OpARMXORshiftRL {
21658 break
21659 }
21660 c := auxIntToInt32(l.AuxInt)
21661 y := l.Args[1]
21662 x := l.Args[0]
21663 if !(l.Uses == 1) {
21664 break
21665 }
21666 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
21667 v0.AuxInt = int32ToAuxInt(c)
21668 v0.AddArg2(x, y)
21669 b.resetWithControl(BlockARMNE, v0)
21670 return true
21671 }
21672
21673
21674
21675 for b.Controls[0].Op == OpARMCMPconst {
21676 v_0 := b.Controls[0]
21677 if auxIntToInt32(v_0.AuxInt) != 0 {
21678 break
21679 }
21680 l := v_0.Args[0]
21681 if l.Op != OpARMXORshiftRA {
21682 break
21683 }
21684 c := auxIntToInt32(l.AuxInt)
21685 y := l.Args[1]
21686 x := l.Args[0]
21687 if !(l.Uses == 1) {
21688 break
21689 }
21690 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
21691 v0.AuxInt = int32ToAuxInt(c)
21692 v0.AddArg2(x, y)
21693 b.resetWithControl(BlockARMNE, v0)
21694 return true
21695 }
21696
21697
21698
21699 for b.Controls[0].Op == OpARMCMPconst {
21700 v_0 := b.Controls[0]
21701 if auxIntToInt32(v_0.AuxInt) != 0 {
21702 break
21703 }
21704 l := v_0.Args[0]
21705 if l.Op != OpARMXORshiftLLreg {
21706 break
21707 }
21708 z := l.Args[2]
21709 x := l.Args[0]
21710 y := l.Args[1]
21711 if !(l.Uses == 1) {
21712 break
21713 }
21714 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
21715 v0.AddArg3(x, y, z)
21716 b.resetWithControl(BlockARMNE, v0)
21717 return true
21718 }
21719
21720
21721
21722 for b.Controls[0].Op == OpARMCMPconst {
21723 v_0 := b.Controls[0]
21724 if auxIntToInt32(v_0.AuxInt) != 0 {
21725 break
21726 }
21727 l := v_0.Args[0]
21728 if l.Op != OpARMXORshiftRLreg {
21729 break
21730 }
21731 z := l.Args[2]
21732 x := l.Args[0]
21733 y := l.Args[1]
21734 if !(l.Uses == 1) {
21735 break
21736 }
21737 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
21738 v0.AddArg3(x, y, z)
21739 b.resetWithControl(BlockARMNE, v0)
21740 return true
21741 }
21742
21743
21744
21745 for b.Controls[0].Op == OpARMCMPconst {
21746 v_0 := b.Controls[0]
21747 if auxIntToInt32(v_0.AuxInt) != 0 {
21748 break
21749 }
21750 l := v_0.Args[0]
21751 if l.Op != OpARMXORshiftRAreg {
21752 break
21753 }
21754 z := l.Args[2]
21755 x := l.Args[0]
21756 y := l.Args[1]
21757 if !(l.Uses == 1) {
21758 break
21759 }
21760 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
21761 v0.AddArg3(x, y, z)
21762 b.resetWithControl(BlockARMNE, v0)
21763 return true
21764 }
21765 case BlockARMUGE:
21766
21767
21768
21769 for b.Controls[0].Op == OpARMFlagConstant {
21770 v_0 := b.Controls[0]
21771 fc := auxIntToFlagConstant(v_0.AuxInt)
21772 if !(fc.uge()) {
21773 break
21774 }
21775 b.Reset(BlockFirst)
21776 return true
21777 }
21778
21779
21780
21781 for b.Controls[0].Op == OpARMFlagConstant {
21782 v_0 := b.Controls[0]
21783 fc := auxIntToFlagConstant(v_0.AuxInt)
21784 if !(!fc.uge()) {
21785 break
21786 }
21787 b.Reset(BlockFirst)
21788 b.swapSuccessors()
21789 return true
21790 }
21791
21792
21793 for b.Controls[0].Op == OpARMInvertFlags {
21794 v_0 := b.Controls[0]
21795 cmp := v_0.Args[0]
21796 b.resetWithControl(BlockARMULE, cmp)
21797 return true
21798 }
21799 case BlockARMUGT:
21800
21801
21802
21803 for b.Controls[0].Op == OpARMFlagConstant {
21804 v_0 := b.Controls[0]
21805 fc := auxIntToFlagConstant(v_0.AuxInt)
21806 if !(fc.ugt()) {
21807 break
21808 }
21809 b.Reset(BlockFirst)
21810 return true
21811 }
21812
21813
21814
21815 for b.Controls[0].Op == OpARMFlagConstant {
21816 v_0 := b.Controls[0]
21817 fc := auxIntToFlagConstant(v_0.AuxInt)
21818 if !(!fc.ugt()) {
21819 break
21820 }
21821 b.Reset(BlockFirst)
21822 b.swapSuccessors()
21823 return true
21824 }
21825
21826
21827 for b.Controls[0].Op == OpARMInvertFlags {
21828 v_0 := b.Controls[0]
21829 cmp := v_0.Args[0]
21830 b.resetWithControl(BlockARMULT, cmp)
21831 return true
21832 }
21833 case BlockARMULE:
21834
21835
21836
21837 for b.Controls[0].Op == OpARMFlagConstant {
21838 v_0 := b.Controls[0]
21839 fc := auxIntToFlagConstant(v_0.AuxInt)
21840 if !(fc.ule()) {
21841 break
21842 }
21843 b.Reset(BlockFirst)
21844 return true
21845 }
21846
21847
21848
21849 for b.Controls[0].Op == OpARMFlagConstant {
21850 v_0 := b.Controls[0]
21851 fc := auxIntToFlagConstant(v_0.AuxInt)
21852 if !(!fc.ule()) {
21853 break
21854 }
21855 b.Reset(BlockFirst)
21856 b.swapSuccessors()
21857 return true
21858 }
21859
21860
21861 for b.Controls[0].Op == OpARMInvertFlags {
21862 v_0 := b.Controls[0]
21863 cmp := v_0.Args[0]
21864 b.resetWithControl(BlockARMUGE, cmp)
21865 return true
21866 }
21867 case BlockARMULT:
21868
21869
21870
21871 for b.Controls[0].Op == OpARMFlagConstant {
21872 v_0 := b.Controls[0]
21873 fc := auxIntToFlagConstant(v_0.AuxInt)
21874 if !(fc.ult()) {
21875 break
21876 }
21877 b.Reset(BlockFirst)
21878 return true
21879 }
21880
21881
21882
21883 for b.Controls[0].Op == OpARMFlagConstant {
21884 v_0 := b.Controls[0]
21885 fc := auxIntToFlagConstant(v_0.AuxInt)
21886 if !(!fc.ult()) {
21887 break
21888 }
21889 b.Reset(BlockFirst)
21890 b.swapSuccessors()
21891 return true
21892 }
21893
21894
21895 for b.Controls[0].Op == OpARMInvertFlags {
21896 v_0 := b.Controls[0]
21897 cmp := v_0.Args[0]
21898 b.resetWithControl(BlockARMUGT, cmp)
21899 return true
21900 }
21901 }
21902 return false
21903 }
21904
View as plain text