1
2
3 package ssa
4
5 import "internal/buildcfg"
6 import "cmd/compile/internal/types"
7
8 func rewriteValueARM(v *Value) bool {
9 switch v.Op {
10 case OpARMADC:
11 return rewriteValueARM_OpARMADC(v)
12 case OpARMADCconst:
13 return rewriteValueARM_OpARMADCconst(v)
14 case OpARMADCshiftLL:
15 return rewriteValueARM_OpARMADCshiftLL(v)
16 case OpARMADCshiftLLreg:
17 return rewriteValueARM_OpARMADCshiftLLreg(v)
18 case OpARMADCshiftRA:
19 return rewriteValueARM_OpARMADCshiftRA(v)
20 case OpARMADCshiftRAreg:
21 return rewriteValueARM_OpARMADCshiftRAreg(v)
22 case OpARMADCshiftRL:
23 return rewriteValueARM_OpARMADCshiftRL(v)
24 case OpARMADCshiftRLreg:
25 return rewriteValueARM_OpARMADCshiftRLreg(v)
26 case OpARMADD:
27 return rewriteValueARM_OpARMADD(v)
28 case OpARMADDD:
29 return rewriteValueARM_OpARMADDD(v)
30 case OpARMADDF:
31 return rewriteValueARM_OpARMADDF(v)
32 case OpARMADDS:
33 return rewriteValueARM_OpARMADDS(v)
34 case OpARMADDSshiftLL:
35 return rewriteValueARM_OpARMADDSshiftLL(v)
36 case OpARMADDSshiftLLreg:
37 return rewriteValueARM_OpARMADDSshiftLLreg(v)
38 case OpARMADDSshiftRA:
39 return rewriteValueARM_OpARMADDSshiftRA(v)
40 case OpARMADDSshiftRAreg:
41 return rewriteValueARM_OpARMADDSshiftRAreg(v)
42 case OpARMADDSshiftRL:
43 return rewriteValueARM_OpARMADDSshiftRL(v)
44 case OpARMADDSshiftRLreg:
45 return rewriteValueARM_OpARMADDSshiftRLreg(v)
46 case OpARMADDconst:
47 return rewriteValueARM_OpARMADDconst(v)
48 case OpARMADDshiftLL:
49 return rewriteValueARM_OpARMADDshiftLL(v)
50 case OpARMADDshiftLLreg:
51 return rewriteValueARM_OpARMADDshiftLLreg(v)
52 case OpARMADDshiftRA:
53 return rewriteValueARM_OpARMADDshiftRA(v)
54 case OpARMADDshiftRAreg:
55 return rewriteValueARM_OpARMADDshiftRAreg(v)
56 case OpARMADDshiftRL:
57 return rewriteValueARM_OpARMADDshiftRL(v)
58 case OpARMADDshiftRLreg:
59 return rewriteValueARM_OpARMADDshiftRLreg(v)
60 case OpARMAND:
61 return rewriteValueARM_OpARMAND(v)
62 case OpARMANDconst:
63 return rewriteValueARM_OpARMANDconst(v)
64 case OpARMANDshiftLL:
65 return rewriteValueARM_OpARMANDshiftLL(v)
66 case OpARMANDshiftLLreg:
67 return rewriteValueARM_OpARMANDshiftLLreg(v)
68 case OpARMANDshiftRA:
69 return rewriteValueARM_OpARMANDshiftRA(v)
70 case OpARMANDshiftRAreg:
71 return rewriteValueARM_OpARMANDshiftRAreg(v)
72 case OpARMANDshiftRL:
73 return rewriteValueARM_OpARMANDshiftRL(v)
74 case OpARMANDshiftRLreg:
75 return rewriteValueARM_OpARMANDshiftRLreg(v)
76 case OpARMBFX:
77 return rewriteValueARM_OpARMBFX(v)
78 case OpARMBFXU:
79 return rewriteValueARM_OpARMBFXU(v)
80 case OpARMBIC:
81 return rewriteValueARM_OpARMBIC(v)
82 case OpARMBICconst:
83 return rewriteValueARM_OpARMBICconst(v)
84 case OpARMBICshiftLL:
85 return rewriteValueARM_OpARMBICshiftLL(v)
86 case OpARMBICshiftLLreg:
87 return rewriteValueARM_OpARMBICshiftLLreg(v)
88 case OpARMBICshiftRA:
89 return rewriteValueARM_OpARMBICshiftRA(v)
90 case OpARMBICshiftRAreg:
91 return rewriteValueARM_OpARMBICshiftRAreg(v)
92 case OpARMBICshiftRL:
93 return rewriteValueARM_OpARMBICshiftRL(v)
94 case OpARMBICshiftRLreg:
95 return rewriteValueARM_OpARMBICshiftRLreg(v)
96 case OpARMCMN:
97 return rewriteValueARM_OpARMCMN(v)
98 case OpARMCMNconst:
99 return rewriteValueARM_OpARMCMNconst(v)
100 case OpARMCMNshiftLL:
101 return rewriteValueARM_OpARMCMNshiftLL(v)
102 case OpARMCMNshiftLLreg:
103 return rewriteValueARM_OpARMCMNshiftLLreg(v)
104 case OpARMCMNshiftRA:
105 return rewriteValueARM_OpARMCMNshiftRA(v)
106 case OpARMCMNshiftRAreg:
107 return rewriteValueARM_OpARMCMNshiftRAreg(v)
108 case OpARMCMNshiftRL:
109 return rewriteValueARM_OpARMCMNshiftRL(v)
110 case OpARMCMNshiftRLreg:
111 return rewriteValueARM_OpARMCMNshiftRLreg(v)
112 case OpARMCMOVWHSconst:
113 return rewriteValueARM_OpARMCMOVWHSconst(v)
114 case OpARMCMOVWLSconst:
115 return rewriteValueARM_OpARMCMOVWLSconst(v)
116 case OpARMCMP:
117 return rewriteValueARM_OpARMCMP(v)
118 case OpARMCMPD:
119 return rewriteValueARM_OpARMCMPD(v)
120 case OpARMCMPF:
121 return rewriteValueARM_OpARMCMPF(v)
122 case OpARMCMPconst:
123 return rewriteValueARM_OpARMCMPconst(v)
124 case OpARMCMPshiftLL:
125 return rewriteValueARM_OpARMCMPshiftLL(v)
126 case OpARMCMPshiftLLreg:
127 return rewriteValueARM_OpARMCMPshiftLLreg(v)
128 case OpARMCMPshiftRA:
129 return rewriteValueARM_OpARMCMPshiftRA(v)
130 case OpARMCMPshiftRAreg:
131 return rewriteValueARM_OpARMCMPshiftRAreg(v)
132 case OpARMCMPshiftRL:
133 return rewriteValueARM_OpARMCMPshiftRL(v)
134 case OpARMCMPshiftRLreg:
135 return rewriteValueARM_OpARMCMPshiftRLreg(v)
136 case OpARMEqual:
137 return rewriteValueARM_OpARMEqual(v)
138 case OpARMGreaterEqual:
139 return rewriteValueARM_OpARMGreaterEqual(v)
140 case OpARMGreaterEqualU:
141 return rewriteValueARM_OpARMGreaterEqualU(v)
142 case OpARMGreaterThan:
143 return rewriteValueARM_OpARMGreaterThan(v)
144 case OpARMGreaterThanU:
145 return rewriteValueARM_OpARMGreaterThanU(v)
146 case OpARMLessEqual:
147 return rewriteValueARM_OpARMLessEqual(v)
148 case OpARMLessEqualU:
149 return rewriteValueARM_OpARMLessEqualU(v)
150 case OpARMLessThan:
151 return rewriteValueARM_OpARMLessThan(v)
152 case OpARMLessThanU:
153 return rewriteValueARM_OpARMLessThanU(v)
154 case OpARMMOVBUload:
155 return rewriteValueARM_OpARMMOVBUload(v)
156 case OpARMMOVBUloadidx:
157 return rewriteValueARM_OpARMMOVBUloadidx(v)
158 case OpARMMOVBUreg:
159 return rewriteValueARM_OpARMMOVBUreg(v)
160 case OpARMMOVBload:
161 return rewriteValueARM_OpARMMOVBload(v)
162 case OpARMMOVBloadidx:
163 return rewriteValueARM_OpARMMOVBloadidx(v)
164 case OpARMMOVBreg:
165 return rewriteValueARM_OpARMMOVBreg(v)
166 case OpARMMOVBstore:
167 return rewriteValueARM_OpARMMOVBstore(v)
168 case OpARMMOVBstoreidx:
169 return rewriteValueARM_OpARMMOVBstoreidx(v)
170 case OpARMMOVDload:
171 return rewriteValueARM_OpARMMOVDload(v)
172 case OpARMMOVDstore:
173 return rewriteValueARM_OpARMMOVDstore(v)
174 case OpARMMOVFload:
175 return rewriteValueARM_OpARMMOVFload(v)
176 case OpARMMOVFstore:
177 return rewriteValueARM_OpARMMOVFstore(v)
178 case OpARMMOVHUload:
179 return rewriteValueARM_OpARMMOVHUload(v)
180 case OpARMMOVHUloadidx:
181 return rewriteValueARM_OpARMMOVHUloadidx(v)
182 case OpARMMOVHUreg:
183 return rewriteValueARM_OpARMMOVHUreg(v)
184 case OpARMMOVHload:
185 return rewriteValueARM_OpARMMOVHload(v)
186 case OpARMMOVHloadidx:
187 return rewriteValueARM_OpARMMOVHloadidx(v)
188 case OpARMMOVHreg:
189 return rewriteValueARM_OpARMMOVHreg(v)
190 case OpARMMOVHstore:
191 return rewriteValueARM_OpARMMOVHstore(v)
192 case OpARMMOVHstoreidx:
193 return rewriteValueARM_OpARMMOVHstoreidx(v)
194 case OpARMMOVWload:
195 return rewriteValueARM_OpARMMOVWload(v)
196 case OpARMMOVWloadidx:
197 return rewriteValueARM_OpARMMOVWloadidx(v)
198 case OpARMMOVWloadshiftLL:
199 return rewriteValueARM_OpARMMOVWloadshiftLL(v)
200 case OpARMMOVWloadshiftRA:
201 return rewriteValueARM_OpARMMOVWloadshiftRA(v)
202 case OpARMMOVWloadshiftRL:
203 return rewriteValueARM_OpARMMOVWloadshiftRL(v)
204 case OpARMMOVWnop:
205 return rewriteValueARM_OpARMMOVWnop(v)
206 case OpARMMOVWreg:
207 return rewriteValueARM_OpARMMOVWreg(v)
208 case OpARMMOVWstore:
209 return rewriteValueARM_OpARMMOVWstore(v)
210 case OpARMMOVWstoreidx:
211 return rewriteValueARM_OpARMMOVWstoreidx(v)
212 case OpARMMOVWstoreshiftLL:
213 return rewriteValueARM_OpARMMOVWstoreshiftLL(v)
214 case OpARMMOVWstoreshiftRA:
215 return rewriteValueARM_OpARMMOVWstoreshiftRA(v)
216 case OpARMMOVWstoreshiftRL:
217 return rewriteValueARM_OpARMMOVWstoreshiftRL(v)
218 case OpARMMUL:
219 return rewriteValueARM_OpARMMUL(v)
220 case OpARMMULA:
221 return rewriteValueARM_OpARMMULA(v)
222 case OpARMMULD:
223 return rewriteValueARM_OpARMMULD(v)
224 case OpARMMULF:
225 return rewriteValueARM_OpARMMULF(v)
226 case OpARMMULS:
227 return rewriteValueARM_OpARMMULS(v)
228 case OpARMMVN:
229 return rewriteValueARM_OpARMMVN(v)
230 case OpARMMVNshiftLL:
231 return rewriteValueARM_OpARMMVNshiftLL(v)
232 case OpARMMVNshiftLLreg:
233 return rewriteValueARM_OpARMMVNshiftLLreg(v)
234 case OpARMMVNshiftRA:
235 return rewriteValueARM_OpARMMVNshiftRA(v)
236 case OpARMMVNshiftRAreg:
237 return rewriteValueARM_OpARMMVNshiftRAreg(v)
238 case OpARMMVNshiftRL:
239 return rewriteValueARM_OpARMMVNshiftRL(v)
240 case OpARMMVNshiftRLreg:
241 return rewriteValueARM_OpARMMVNshiftRLreg(v)
242 case OpARMNEGD:
243 return rewriteValueARM_OpARMNEGD(v)
244 case OpARMNEGF:
245 return rewriteValueARM_OpARMNEGF(v)
246 case OpARMNMULD:
247 return rewriteValueARM_OpARMNMULD(v)
248 case OpARMNMULF:
249 return rewriteValueARM_OpARMNMULF(v)
250 case OpARMNotEqual:
251 return rewriteValueARM_OpARMNotEqual(v)
252 case OpARMOR:
253 return rewriteValueARM_OpARMOR(v)
254 case OpARMORconst:
255 return rewriteValueARM_OpARMORconst(v)
256 case OpARMORshiftLL:
257 return rewriteValueARM_OpARMORshiftLL(v)
258 case OpARMORshiftLLreg:
259 return rewriteValueARM_OpARMORshiftLLreg(v)
260 case OpARMORshiftRA:
261 return rewriteValueARM_OpARMORshiftRA(v)
262 case OpARMORshiftRAreg:
263 return rewriteValueARM_OpARMORshiftRAreg(v)
264 case OpARMORshiftRL:
265 return rewriteValueARM_OpARMORshiftRL(v)
266 case OpARMORshiftRLreg:
267 return rewriteValueARM_OpARMORshiftRLreg(v)
268 case OpARMRSB:
269 return rewriteValueARM_OpARMRSB(v)
270 case OpARMRSBSshiftLL:
271 return rewriteValueARM_OpARMRSBSshiftLL(v)
272 case OpARMRSBSshiftLLreg:
273 return rewriteValueARM_OpARMRSBSshiftLLreg(v)
274 case OpARMRSBSshiftRA:
275 return rewriteValueARM_OpARMRSBSshiftRA(v)
276 case OpARMRSBSshiftRAreg:
277 return rewriteValueARM_OpARMRSBSshiftRAreg(v)
278 case OpARMRSBSshiftRL:
279 return rewriteValueARM_OpARMRSBSshiftRL(v)
280 case OpARMRSBSshiftRLreg:
281 return rewriteValueARM_OpARMRSBSshiftRLreg(v)
282 case OpARMRSBconst:
283 return rewriteValueARM_OpARMRSBconst(v)
284 case OpARMRSBshiftLL:
285 return rewriteValueARM_OpARMRSBshiftLL(v)
286 case OpARMRSBshiftLLreg:
287 return rewriteValueARM_OpARMRSBshiftLLreg(v)
288 case OpARMRSBshiftRA:
289 return rewriteValueARM_OpARMRSBshiftRA(v)
290 case OpARMRSBshiftRAreg:
291 return rewriteValueARM_OpARMRSBshiftRAreg(v)
292 case OpARMRSBshiftRL:
293 return rewriteValueARM_OpARMRSBshiftRL(v)
294 case OpARMRSBshiftRLreg:
295 return rewriteValueARM_OpARMRSBshiftRLreg(v)
296 case OpARMRSCconst:
297 return rewriteValueARM_OpARMRSCconst(v)
298 case OpARMRSCshiftLL:
299 return rewriteValueARM_OpARMRSCshiftLL(v)
300 case OpARMRSCshiftLLreg:
301 return rewriteValueARM_OpARMRSCshiftLLreg(v)
302 case OpARMRSCshiftRA:
303 return rewriteValueARM_OpARMRSCshiftRA(v)
304 case OpARMRSCshiftRAreg:
305 return rewriteValueARM_OpARMRSCshiftRAreg(v)
306 case OpARMRSCshiftRL:
307 return rewriteValueARM_OpARMRSCshiftRL(v)
308 case OpARMRSCshiftRLreg:
309 return rewriteValueARM_OpARMRSCshiftRLreg(v)
310 case OpARMSBC:
311 return rewriteValueARM_OpARMSBC(v)
312 case OpARMSBCconst:
313 return rewriteValueARM_OpARMSBCconst(v)
314 case OpARMSBCshiftLL:
315 return rewriteValueARM_OpARMSBCshiftLL(v)
316 case OpARMSBCshiftLLreg:
317 return rewriteValueARM_OpARMSBCshiftLLreg(v)
318 case OpARMSBCshiftRA:
319 return rewriteValueARM_OpARMSBCshiftRA(v)
320 case OpARMSBCshiftRAreg:
321 return rewriteValueARM_OpARMSBCshiftRAreg(v)
322 case OpARMSBCshiftRL:
323 return rewriteValueARM_OpARMSBCshiftRL(v)
324 case OpARMSBCshiftRLreg:
325 return rewriteValueARM_OpARMSBCshiftRLreg(v)
326 case OpARMSLL:
327 return rewriteValueARM_OpARMSLL(v)
328 case OpARMSLLconst:
329 return rewriteValueARM_OpARMSLLconst(v)
330 case OpARMSRA:
331 return rewriteValueARM_OpARMSRA(v)
332 case OpARMSRAcond:
333 return rewriteValueARM_OpARMSRAcond(v)
334 case OpARMSRAconst:
335 return rewriteValueARM_OpARMSRAconst(v)
336 case OpARMSRL:
337 return rewriteValueARM_OpARMSRL(v)
338 case OpARMSRLconst:
339 return rewriteValueARM_OpARMSRLconst(v)
340 case OpARMSRR:
341 return rewriteValueARM_OpARMSRR(v)
342 case OpARMSUB:
343 return rewriteValueARM_OpARMSUB(v)
344 case OpARMSUBD:
345 return rewriteValueARM_OpARMSUBD(v)
346 case OpARMSUBF:
347 return rewriteValueARM_OpARMSUBF(v)
348 case OpARMSUBS:
349 return rewriteValueARM_OpARMSUBS(v)
350 case OpARMSUBSshiftLL:
351 return rewriteValueARM_OpARMSUBSshiftLL(v)
352 case OpARMSUBSshiftLLreg:
353 return rewriteValueARM_OpARMSUBSshiftLLreg(v)
354 case OpARMSUBSshiftRA:
355 return rewriteValueARM_OpARMSUBSshiftRA(v)
356 case OpARMSUBSshiftRAreg:
357 return rewriteValueARM_OpARMSUBSshiftRAreg(v)
358 case OpARMSUBSshiftRL:
359 return rewriteValueARM_OpARMSUBSshiftRL(v)
360 case OpARMSUBSshiftRLreg:
361 return rewriteValueARM_OpARMSUBSshiftRLreg(v)
362 case OpARMSUBconst:
363 return rewriteValueARM_OpARMSUBconst(v)
364 case OpARMSUBshiftLL:
365 return rewriteValueARM_OpARMSUBshiftLL(v)
366 case OpARMSUBshiftLLreg:
367 return rewriteValueARM_OpARMSUBshiftLLreg(v)
368 case OpARMSUBshiftRA:
369 return rewriteValueARM_OpARMSUBshiftRA(v)
370 case OpARMSUBshiftRAreg:
371 return rewriteValueARM_OpARMSUBshiftRAreg(v)
372 case OpARMSUBshiftRL:
373 return rewriteValueARM_OpARMSUBshiftRL(v)
374 case OpARMSUBshiftRLreg:
375 return rewriteValueARM_OpARMSUBshiftRLreg(v)
376 case OpARMTEQ:
377 return rewriteValueARM_OpARMTEQ(v)
378 case OpARMTEQconst:
379 return rewriteValueARM_OpARMTEQconst(v)
380 case OpARMTEQshiftLL:
381 return rewriteValueARM_OpARMTEQshiftLL(v)
382 case OpARMTEQshiftLLreg:
383 return rewriteValueARM_OpARMTEQshiftLLreg(v)
384 case OpARMTEQshiftRA:
385 return rewriteValueARM_OpARMTEQshiftRA(v)
386 case OpARMTEQshiftRAreg:
387 return rewriteValueARM_OpARMTEQshiftRAreg(v)
388 case OpARMTEQshiftRL:
389 return rewriteValueARM_OpARMTEQshiftRL(v)
390 case OpARMTEQshiftRLreg:
391 return rewriteValueARM_OpARMTEQshiftRLreg(v)
392 case OpARMTST:
393 return rewriteValueARM_OpARMTST(v)
394 case OpARMTSTconst:
395 return rewriteValueARM_OpARMTSTconst(v)
396 case OpARMTSTshiftLL:
397 return rewriteValueARM_OpARMTSTshiftLL(v)
398 case OpARMTSTshiftLLreg:
399 return rewriteValueARM_OpARMTSTshiftLLreg(v)
400 case OpARMTSTshiftRA:
401 return rewriteValueARM_OpARMTSTshiftRA(v)
402 case OpARMTSTshiftRAreg:
403 return rewriteValueARM_OpARMTSTshiftRAreg(v)
404 case OpARMTSTshiftRL:
405 return rewriteValueARM_OpARMTSTshiftRL(v)
406 case OpARMTSTshiftRLreg:
407 return rewriteValueARM_OpARMTSTshiftRLreg(v)
408 case OpARMXOR:
409 return rewriteValueARM_OpARMXOR(v)
410 case OpARMXORconst:
411 return rewriteValueARM_OpARMXORconst(v)
412 case OpARMXORshiftLL:
413 return rewriteValueARM_OpARMXORshiftLL(v)
414 case OpARMXORshiftLLreg:
415 return rewriteValueARM_OpARMXORshiftLLreg(v)
416 case OpARMXORshiftRA:
417 return rewriteValueARM_OpARMXORshiftRA(v)
418 case OpARMXORshiftRAreg:
419 return rewriteValueARM_OpARMXORshiftRAreg(v)
420 case OpARMXORshiftRL:
421 return rewriteValueARM_OpARMXORshiftRL(v)
422 case OpARMXORshiftRLreg:
423 return rewriteValueARM_OpARMXORshiftRLreg(v)
424 case OpARMXORshiftRR:
425 return rewriteValueARM_OpARMXORshiftRR(v)
426 case OpAbs:
427 v.Op = OpARMABSD
428 return true
429 case OpAdd16:
430 v.Op = OpARMADD
431 return true
432 case OpAdd32:
433 v.Op = OpARMADD
434 return true
435 case OpAdd32F:
436 v.Op = OpARMADDF
437 return true
438 case OpAdd32carry:
439 v.Op = OpARMADDS
440 return true
441 case OpAdd32withcarry:
442 v.Op = OpARMADC
443 return true
444 case OpAdd64F:
445 v.Op = OpARMADDD
446 return true
447 case OpAdd8:
448 v.Op = OpARMADD
449 return true
450 case OpAddPtr:
451 v.Op = OpARMADD
452 return true
453 case OpAddr:
454 return rewriteValueARM_OpAddr(v)
455 case OpAnd16:
456 v.Op = OpARMAND
457 return true
458 case OpAnd32:
459 v.Op = OpARMAND
460 return true
461 case OpAnd8:
462 v.Op = OpARMAND
463 return true
464 case OpAndB:
465 v.Op = OpARMAND
466 return true
467 case OpAvg32u:
468 return rewriteValueARM_OpAvg32u(v)
469 case OpBitLen32:
470 return rewriteValueARM_OpBitLen32(v)
471 case OpBswap32:
472 return rewriteValueARM_OpBswap32(v)
473 case OpClosureCall:
474 v.Op = OpARMCALLclosure
475 return true
476 case OpCom16:
477 v.Op = OpARMMVN
478 return true
479 case OpCom32:
480 v.Op = OpARMMVN
481 return true
482 case OpCom8:
483 v.Op = OpARMMVN
484 return true
485 case OpConst16:
486 return rewriteValueARM_OpConst16(v)
487 case OpConst32:
488 return rewriteValueARM_OpConst32(v)
489 case OpConst32F:
490 return rewriteValueARM_OpConst32F(v)
491 case OpConst64F:
492 return rewriteValueARM_OpConst64F(v)
493 case OpConst8:
494 return rewriteValueARM_OpConst8(v)
495 case OpConstBool:
496 return rewriteValueARM_OpConstBool(v)
497 case OpConstNil:
498 return rewriteValueARM_OpConstNil(v)
499 case OpCtz16:
500 return rewriteValueARM_OpCtz16(v)
501 case OpCtz16NonZero:
502 v.Op = OpCtz32
503 return true
504 case OpCtz32:
505 return rewriteValueARM_OpCtz32(v)
506 case OpCtz32NonZero:
507 v.Op = OpCtz32
508 return true
509 case OpCtz8:
510 return rewriteValueARM_OpCtz8(v)
511 case OpCtz8NonZero:
512 v.Op = OpCtz32
513 return true
514 case OpCvt32Fto32:
515 v.Op = OpARMMOVFW
516 return true
517 case OpCvt32Fto32U:
518 v.Op = OpARMMOVFWU
519 return true
520 case OpCvt32Fto64F:
521 v.Op = OpARMMOVFD
522 return true
523 case OpCvt32Uto32F:
524 v.Op = OpARMMOVWUF
525 return true
526 case OpCvt32Uto64F:
527 v.Op = OpARMMOVWUD
528 return true
529 case OpCvt32to32F:
530 v.Op = OpARMMOVWF
531 return true
532 case OpCvt32to64F:
533 v.Op = OpARMMOVWD
534 return true
535 case OpCvt64Fto32:
536 v.Op = OpARMMOVDW
537 return true
538 case OpCvt64Fto32F:
539 v.Op = OpARMMOVDF
540 return true
541 case OpCvt64Fto32U:
542 v.Op = OpARMMOVDWU
543 return true
544 case OpCvtBoolToUint8:
545 v.Op = OpCopy
546 return true
547 case OpDiv16:
548 return rewriteValueARM_OpDiv16(v)
549 case OpDiv16u:
550 return rewriteValueARM_OpDiv16u(v)
551 case OpDiv32:
552 return rewriteValueARM_OpDiv32(v)
553 case OpDiv32F:
554 v.Op = OpARMDIVF
555 return true
556 case OpDiv32u:
557 return rewriteValueARM_OpDiv32u(v)
558 case OpDiv64F:
559 v.Op = OpARMDIVD
560 return true
561 case OpDiv8:
562 return rewriteValueARM_OpDiv8(v)
563 case OpDiv8u:
564 return rewriteValueARM_OpDiv8u(v)
565 case OpEq16:
566 return rewriteValueARM_OpEq16(v)
567 case OpEq32:
568 return rewriteValueARM_OpEq32(v)
569 case OpEq32F:
570 return rewriteValueARM_OpEq32F(v)
571 case OpEq64F:
572 return rewriteValueARM_OpEq64F(v)
573 case OpEq8:
574 return rewriteValueARM_OpEq8(v)
575 case OpEqB:
576 return rewriteValueARM_OpEqB(v)
577 case OpEqPtr:
578 return rewriteValueARM_OpEqPtr(v)
579 case OpFMA:
580 return rewriteValueARM_OpFMA(v)
581 case OpGetCallerPC:
582 v.Op = OpARMLoweredGetCallerPC
583 return true
584 case OpGetCallerSP:
585 v.Op = OpARMLoweredGetCallerSP
586 return true
587 case OpGetClosurePtr:
588 v.Op = OpARMLoweredGetClosurePtr
589 return true
590 case OpHmul32:
591 v.Op = OpARMHMUL
592 return true
593 case OpHmul32u:
594 v.Op = OpARMHMULU
595 return true
596 case OpInterCall:
597 v.Op = OpARMCALLinter
598 return true
599 case OpIsInBounds:
600 return rewriteValueARM_OpIsInBounds(v)
601 case OpIsNonNil:
602 return rewriteValueARM_OpIsNonNil(v)
603 case OpIsSliceInBounds:
604 return rewriteValueARM_OpIsSliceInBounds(v)
605 case OpLeq16:
606 return rewriteValueARM_OpLeq16(v)
607 case OpLeq16U:
608 return rewriteValueARM_OpLeq16U(v)
609 case OpLeq32:
610 return rewriteValueARM_OpLeq32(v)
611 case OpLeq32F:
612 return rewriteValueARM_OpLeq32F(v)
613 case OpLeq32U:
614 return rewriteValueARM_OpLeq32U(v)
615 case OpLeq64F:
616 return rewriteValueARM_OpLeq64F(v)
617 case OpLeq8:
618 return rewriteValueARM_OpLeq8(v)
619 case OpLeq8U:
620 return rewriteValueARM_OpLeq8U(v)
621 case OpLess16:
622 return rewriteValueARM_OpLess16(v)
623 case OpLess16U:
624 return rewriteValueARM_OpLess16U(v)
625 case OpLess32:
626 return rewriteValueARM_OpLess32(v)
627 case OpLess32F:
628 return rewriteValueARM_OpLess32F(v)
629 case OpLess32U:
630 return rewriteValueARM_OpLess32U(v)
631 case OpLess64F:
632 return rewriteValueARM_OpLess64F(v)
633 case OpLess8:
634 return rewriteValueARM_OpLess8(v)
635 case OpLess8U:
636 return rewriteValueARM_OpLess8U(v)
637 case OpLoad:
638 return rewriteValueARM_OpLoad(v)
639 case OpLocalAddr:
640 return rewriteValueARM_OpLocalAddr(v)
641 case OpLsh16x16:
642 return rewriteValueARM_OpLsh16x16(v)
643 case OpLsh16x32:
644 return rewriteValueARM_OpLsh16x32(v)
645 case OpLsh16x64:
646 return rewriteValueARM_OpLsh16x64(v)
647 case OpLsh16x8:
648 return rewriteValueARM_OpLsh16x8(v)
649 case OpLsh32x16:
650 return rewriteValueARM_OpLsh32x16(v)
651 case OpLsh32x32:
652 return rewriteValueARM_OpLsh32x32(v)
653 case OpLsh32x64:
654 return rewriteValueARM_OpLsh32x64(v)
655 case OpLsh32x8:
656 return rewriteValueARM_OpLsh32x8(v)
657 case OpLsh8x16:
658 return rewriteValueARM_OpLsh8x16(v)
659 case OpLsh8x32:
660 return rewriteValueARM_OpLsh8x32(v)
661 case OpLsh8x64:
662 return rewriteValueARM_OpLsh8x64(v)
663 case OpLsh8x8:
664 return rewriteValueARM_OpLsh8x8(v)
665 case OpMod16:
666 return rewriteValueARM_OpMod16(v)
667 case OpMod16u:
668 return rewriteValueARM_OpMod16u(v)
669 case OpMod32:
670 return rewriteValueARM_OpMod32(v)
671 case OpMod32u:
672 return rewriteValueARM_OpMod32u(v)
673 case OpMod8:
674 return rewriteValueARM_OpMod8(v)
675 case OpMod8u:
676 return rewriteValueARM_OpMod8u(v)
677 case OpMove:
678 return rewriteValueARM_OpMove(v)
679 case OpMul16:
680 v.Op = OpARMMUL
681 return true
682 case OpMul32:
683 v.Op = OpARMMUL
684 return true
685 case OpMul32F:
686 v.Op = OpARMMULF
687 return true
688 case OpMul32uhilo:
689 v.Op = OpARMMULLU
690 return true
691 case OpMul64F:
692 v.Op = OpARMMULD
693 return true
694 case OpMul8:
695 v.Op = OpARMMUL
696 return true
697 case OpNeg16:
698 return rewriteValueARM_OpNeg16(v)
699 case OpNeg32:
700 return rewriteValueARM_OpNeg32(v)
701 case OpNeg32F:
702 v.Op = OpARMNEGF
703 return true
704 case OpNeg64F:
705 v.Op = OpARMNEGD
706 return true
707 case OpNeg8:
708 return rewriteValueARM_OpNeg8(v)
709 case OpNeq16:
710 return rewriteValueARM_OpNeq16(v)
711 case OpNeq32:
712 return rewriteValueARM_OpNeq32(v)
713 case OpNeq32F:
714 return rewriteValueARM_OpNeq32F(v)
715 case OpNeq64F:
716 return rewriteValueARM_OpNeq64F(v)
717 case OpNeq8:
718 return rewriteValueARM_OpNeq8(v)
719 case OpNeqB:
720 v.Op = OpARMXOR
721 return true
722 case OpNeqPtr:
723 return rewriteValueARM_OpNeqPtr(v)
724 case OpNilCheck:
725 v.Op = OpARMLoweredNilCheck
726 return true
727 case OpNot:
728 return rewriteValueARM_OpNot(v)
729 case OpOffPtr:
730 return rewriteValueARM_OpOffPtr(v)
731 case OpOr16:
732 v.Op = OpARMOR
733 return true
734 case OpOr32:
735 v.Op = OpARMOR
736 return true
737 case OpOr8:
738 v.Op = OpARMOR
739 return true
740 case OpOrB:
741 v.Op = OpARMOR
742 return true
743 case OpPanicBounds:
744 return rewriteValueARM_OpPanicBounds(v)
745 case OpPanicExtend:
746 return rewriteValueARM_OpPanicExtend(v)
747 case OpRotateLeft16:
748 return rewriteValueARM_OpRotateLeft16(v)
749 case OpRotateLeft32:
750 return rewriteValueARM_OpRotateLeft32(v)
751 case OpRotateLeft8:
752 return rewriteValueARM_OpRotateLeft8(v)
753 case OpRound32F:
754 v.Op = OpCopy
755 return true
756 case OpRound64F:
757 v.Op = OpCopy
758 return true
759 case OpRsh16Ux16:
760 return rewriteValueARM_OpRsh16Ux16(v)
761 case OpRsh16Ux32:
762 return rewriteValueARM_OpRsh16Ux32(v)
763 case OpRsh16Ux64:
764 return rewriteValueARM_OpRsh16Ux64(v)
765 case OpRsh16Ux8:
766 return rewriteValueARM_OpRsh16Ux8(v)
767 case OpRsh16x16:
768 return rewriteValueARM_OpRsh16x16(v)
769 case OpRsh16x32:
770 return rewriteValueARM_OpRsh16x32(v)
771 case OpRsh16x64:
772 return rewriteValueARM_OpRsh16x64(v)
773 case OpRsh16x8:
774 return rewriteValueARM_OpRsh16x8(v)
775 case OpRsh32Ux16:
776 return rewriteValueARM_OpRsh32Ux16(v)
777 case OpRsh32Ux32:
778 return rewriteValueARM_OpRsh32Ux32(v)
779 case OpRsh32Ux64:
780 return rewriteValueARM_OpRsh32Ux64(v)
781 case OpRsh32Ux8:
782 return rewriteValueARM_OpRsh32Ux8(v)
783 case OpRsh32x16:
784 return rewriteValueARM_OpRsh32x16(v)
785 case OpRsh32x32:
786 return rewriteValueARM_OpRsh32x32(v)
787 case OpRsh32x64:
788 return rewriteValueARM_OpRsh32x64(v)
789 case OpRsh32x8:
790 return rewriteValueARM_OpRsh32x8(v)
791 case OpRsh8Ux16:
792 return rewriteValueARM_OpRsh8Ux16(v)
793 case OpRsh8Ux32:
794 return rewriteValueARM_OpRsh8Ux32(v)
795 case OpRsh8Ux64:
796 return rewriteValueARM_OpRsh8Ux64(v)
797 case OpRsh8Ux8:
798 return rewriteValueARM_OpRsh8Ux8(v)
799 case OpRsh8x16:
800 return rewriteValueARM_OpRsh8x16(v)
801 case OpRsh8x32:
802 return rewriteValueARM_OpRsh8x32(v)
803 case OpRsh8x64:
804 return rewriteValueARM_OpRsh8x64(v)
805 case OpRsh8x8:
806 return rewriteValueARM_OpRsh8x8(v)
807 case OpSelect0:
808 return rewriteValueARM_OpSelect0(v)
809 case OpSelect1:
810 return rewriteValueARM_OpSelect1(v)
811 case OpSignExt16to32:
812 v.Op = OpARMMOVHreg
813 return true
814 case OpSignExt8to16:
815 v.Op = OpARMMOVBreg
816 return true
817 case OpSignExt8to32:
818 v.Op = OpARMMOVBreg
819 return true
820 case OpSignmask:
821 return rewriteValueARM_OpSignmask(v)
822 case OpSlicemask:
823 return rewriteValueARM_OpSlicemask(v)
824 case OpSqrt:
825 v.Op = OpARMSQRTD
826 return true
827 case OpSqrt32:
828 v.Op = OpARMSQRTF
829 return true
830 case OpStaticCall:
831 v.Op = OpARMCALLstatic
832 return true
833 case OpStore:
834 return rewriteValueARM_OpStore(v)
835 case OpSub16:
836 v.Op = OpARMSUB
837 return true
838 case OpSub32:
839 v.Op = OpARMSUB
840 return true
841 case OpSub32F:
842 v.Op = OpARMSUBF
843 return true
844 case OpSub32carry:
845 v.Op = OpARMSUBS
846 return true
847 case OpSub32withcarry:
848 v.Op = OpARMSBC
849 return true
850 case OpSub64F:
851 v.Op = OpARMSUBD
852 return true
853 case OpSub8:
854 v.Op = OpARMSUB
855 return true
856 case OpSubPtr:
857 v.Op = OpARMSUB
858 return true
859 case OpTailCall:
860 v.Op = OpARMCALLtail
861 return true
862 case OpTrunc16to8:
863 v.Op = OpCopy
864 return true
865 case OpTrunc32to16:
866 v.Op = OpCopy
867 return true
868 case OpTrunc32to8:
869 v.Op = OpCopy
870 return true
871 case OpWB:
872 v.Op = OpARMLoweredWB
873 return true
874 case OpXor16:
875 v.Op = OpARMXOR
876 return true
877 case OpXor32:
878 v.Op = OpARMXOR
879 return true
880 case OpXor8:
881 v.Op = OpARMXOR
882 return true
883 case OpZero:
884 return rewriteValueARM_OpZero(v)
885 case OpZeroExt16to32:
886 v.Op = OpARMMOVHUreg
887 return true
888 case OpZeroExt8to16:
889 v.Op = OpARMMOVBUreg
890 return true
891 case OpZeroExt8to32:
892 v.Op = OpARMMOVBUreg
893 return true
894 case OpZeromask:
895 return rewriteValueARM_OpZeromask(v)
896 }
897 return false
898 }
899 func rewriteValueARM_OpARMADC(v *Value) bool {
900 v_2 := v.Args[2]
901 v_1 := v.Args[1]
902 v_0 := v.Args[0]
903
904
905 for {
906 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
907 if v_0.Op != OpARMMOVWconst {
908 continue
909 }
910 c := auxIntToInt32(v_0.AuxInt)
911 x := v_1
912 flags := v_2
913 v.reset(OpARMADCconst)
914 v.AuxInt = int32ToAuxInt(c)
915 v.AddArg2(x, flags)
916 return true
917 }
918 break
919 }
920
921
922 for {
923 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
924 x := v_0
925 if v_1.Op != OpARMSLLconst {
926 continue
927 }
928 c := auxIntToInt32(v_1.AuxInt)
929 y := v_1.Args[0]
930 flags := v_2
931 v.reset(OpARMADCshiftLL)
932 v.AuxInt = int32ToAuxInt(c)
933 v.AddArg3(x, y, flags)
934 return true
935 }
936 break
937 }
938
939
940 for {
941 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
942 x := v_0
943 if v_1.Op != OpARMSRLconst {
944 continue
945 }
946 c := auxIntToInt32(v_1.AuxInt)
947 y := v_1.Args[0]
948 flags := v_2
949 v.reset(OpARMADCshiftRL)
950 v.AuxInt = int32ToAuxInt(c)
951 v.AddArg3(x, y, flags)
952 return true
953 }
954 break
955 }
956
957
958 for {
959 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
960 x := v_0
961 if v_1.Op != OpARMSRAconst {
962 continue
963 }
964 c := auxIntToInt32(v_1.AuxInt)
965 y := v_1.Args[0]
966 flags := v_2
967 v.reset(OpARMADCshiftRA)
968 v.AuxInt = int32ToAuxInt(c)
969 v.AddArg3(x, y, flags)
970 return true
971 }
972 break
973 }
974
975
976 for {
977 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
978 x := v_0
979 if v_1.Op != OpARMSLL {
980 continue
981 }
982 z := v_1.Args[1]
983 y := v_1.Args[0]
984 flags := v_2
985 v.reset(OpARMADCshiftLLreg)
986 v.AddArg4(x, y, z, flags)
987 return true
988 }
989 break
990 }
991
992
993 for {
994 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
995 x := v_0
996 if v_1.Op != OpARMSRL {
997 continue
998 }
999 z := v_1.Args[1]
1000 y := v_1.Args[0]
1001 flags := v_2
1002 v.reset(OpARMADCshiftRLreg)
1003 v.AddArg4(x, y, z, flags)
1004 return true
1005 }
1006 break
1007 }
1008
1009
1010 for {
1011 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1012 x := v_0
1013 if v_1.Op != OpARMSRA {
1014 continue
1015 }
1016 z := v_1.Args[1]
1017 y := v_1.Args[0]
1018 flags := v_2
1019 v.reset(OpARMADCshiftRAreg)
1020 v.AddArg4(x, y, z, flags)
1021 return true
1022 }
1023 break
1024 }
1025 return false
1026 }
1027 func rewriteValueARM_OpARMADCconst(v *Value) bool {
1028 v_1 := v.Args[1]
1029 v_0 := v.Args[0]
1030
1031
1032 for {
1033 c := auxIntToInt32(v.AuxInt)
1034 if v_0.Op != OpARMADDconst {
1035 break
1036 }
1037 d := auxIntToInt32(v_0.AuxInt)
1038 x := v_0.Args[0]
1039 flags := v_1
1040 v.reset(OpARMADCconst)
1041 v.AuxInt = int32ToAuxInt(c + d)
1042 v.AddArg2(x, flags)
1043 return true
1044 }
1045
1046
1047 for {
1048 c := auxIntToInt32(v.AuxInt)
1049 if v_0.Op != OpARMSUBconst {
1050 break
1051 }
1052 d := auxIntToInt32(v_0.AuxInt)
1053 x := v_0.Args[0]
1054 flags := v_1
1055 v.reset(OpARMADCconst)
1056 v.AuxInt = int32ToAuxInt(c - d)
1057 v.AddArg2(x, flags)
1058 return true
1059 }
1060 return false
1061 }
1062 func rewriteValueARM_OpARMADCshiftLL(v *Value) bool {
1063 v_2 := v.Args[2]
1064 v_1 := v.Args[1]
1065 v_0 := v.Args[0]
1066 b := v.Block
1067
1068
1069 for {
1070 d := auxIntToInt32(v.AuxInt)
1071 if v_0.Op != OpARMMOVWconst {
1072 break
1073 }
1074 c := auxIntToInt32(v_0.AuxInt)
1075 x := v_1
1076 flags := v_2
1077 v.reset(OpARMADCconst)
1078 v.AuxInt = int32ToAuxInt(c)
1079 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
1080 v0.AuxInt = int32ToAuxInt(d)
1081 v0.AddArg(x)
1082 v.AddArg2(v0, flags)
1083 return true
1084 }
1085
1086
1087 for {
1088 d := auxIntToInt32(v.AuxInt)
1089 x := v_0
1090 if v_1.Op != OpARMMOVWconst {
1091 break
1092 }
1093 c := auxIntToInt32(v_1.AuxInt)
1094 flags := v_2
1095 v.reset(OpARMADCconst)
1096 v.AuxInt = int32ToAuxInt(c << uint64(d))
1097 v.AddArg2(x, flags)
1098 return true
1099 }
1100 return false
1101 }
1102 func rewriteValueARM_OpARMADCshiftLLreg(v *Value) bool {
1103 v_3 := v.Args[3]
1104 v_2 := v.Args[2]
1105 v_1 := v.Args[1]
1106 v_0 := v.Args[0]
1107 b := v.Block
1108
1109
1110 for {
1111 if v_0.Op != OpARMMOVWconst {
1112 break
1113 }
1114 c := auxIntToInt32(v_0.AuxInt)
1115 x := v_1
1116 y := v_2
1117 flags := v_3
1118 v.reset(OpARMADCconst)
1119 v.AuxInt = int32ToAuxInt(c)
1120 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
1121 v0.AddArg2(x, y)
1122 v.AddArg2(v0, flags)
1123 return true
1124 }
1125
1126
1127
1128 for {
1129 x := v_0
1130 y := v_1
1131 if v_2.Op != OpARMMOVWconst {
1132 break
1133 }
1134 c := auxIntToInt32(v_2.AuxInt)
1135 flags := v_3
1136 if !(0 <= c && c < 32) {
1137 break
1138 }
1139 v.reset(OpARMADCshiftLL)
1140 v.AuxInt = int32ToAuxInt(c)
1141 v.AddArg3(x, y, flags)
1142 return true
1143 }
1144 return false
1145 }
1146 func rewriteValueARM_OpARMADCshiftRA(v *Value) bool {
1147 v_2 := v.Args[2]
1148 v_1 := v.Args[1]
1149 v_0 := v.Args[0]
1150 b := v.Block
1151
1152
1153 for {
1154 d := auxIntToInt32(v.AuxInt)
1155 if v_0.Op != OpARMMOVWconst {
1156 break
1157 }
1158 c := auxIntToInt32(v_0.AuxInt)
1159 x := v_1
1160 flags := v_2
1161 v.reset(OpARMADCconst)
1162 v.AuxInt = int32ToAuxInt(c)
1163 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
1164 v0.AuxInt = int32ToAuxInt(d)
1165 v0.AddArg(x)
1166 v.AddArg2(v0, flags)
1167 return true
1168 }
1169
1170
1171 for {
1172 d := auxIntToInt32(v.AuxInt)
1173 x := v_0
1174 if v_1.Op != OpARMMOVWconst {
1175 break
1176 }
1177 c := auxIntToInt32(v_1.AuxInt)
1178 flags := v_2
1179 v.reset(OpARMADCconst)
1180 v.AuxInt = int32ToAuxInt(c >> uint64(d))
1181 v.AddArg2(x, flags)
1182 return true
1183 }
1184 return false
1185 }
1186 func rewriteValueARM_OpARMADCshiftRAreg(v *Value) bool {
1187 v_3 := v.Args[3]
1188 v_2 := v.Args[2]
1189 v_1 := v.Args[1]
1190 v_0 := v.Args[0]
1191 b := v.Block
1192
1193
1194 for {
1195 if v_0.Op != OpARMMOVWconst {
1196 break
1197 }
1198 c := auxIntToInt32(v_0.AuxInt)
1199 x := v_1
1200 y := v_2
1201 flags := v_3
1202 v.reset(OpARMADCconst)
1203 v.AuxInt = int32ToAuxInt(c)
1204 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
1205 v0.AddArg2(x, y)
1206 v.AddArg2(v0, flags)
1207 return true
1208 }
1209
1210
1211
1212 for {
1213 x := v_0
1214 y := v_1
1215 if v_2.Op != OpARMMOVWconst {
1216 break
1217 }
1218 c := auxIntToInt32(v_2.AuxInt)
1219 flags := v_3
1220 if !(0 <= c && c < 32) {
1221 break
1222 }
1223 v.reset(OpARMADCshiftRA)
1224 v.AuxInt = int32ToAuxInt(c)
1225 v.AddArg3(x, y, flags)
1226 return true
1227 }
1228 return false
1229 }
1230 func rewriteValueARM_OpARMADCshiftRL(v *Value) bool {
1231 v_2 := v.Args[2]
1232 v_1 := v.Args[1]
1233 v_0 := v.Args[0]
1234 b := v.Block
1235
1236
1237 for {
1238 d := auxIntToInt32(v.AuxInt)
1239 if v_0.Op != OpARMMOVWconst {
1240 break
1241 }
1242 c := auxIntToInt32(v_0.AuxInt)
1243 x := v_1
1244 flags := v_2
1245 v.reset(OpARMADCconst)
1246 v.AuxInt = int32ToAuxInt(c)
1247 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
1248 v0.AuxInt = int32ToAuxInt(d)
1249 v0.AddArg(x)
1250 v.AddArg2(v0, flags)
1251 return true
1252 }
1253
1254
1255 for {
1256 d := auxIntToInt32(v.AuxInt)
1257 x := v_0
1258 if v_1.Op != OpARMMOVWconst {
1259 break
1260 }
1261 c := auxIntToInt32(v_1.AuxInt)
1262 flags := v_2
1263 v.reset(OpARMADCconst)
1264 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1265 v.AddArg2(x, flags)
1266 return true
1267 }
1268 return false
1269 }
1270 func rewriteValueARM_OpARMADCshiftRLreg(v *Value) bool {
1271 v_3 := v.Args[3]
1272 v_2 := v.Args[2]
1273 v_1 := v.Args[1]
1274 v_0 := v.Args[0]
1275 b := v.Block
1276
1277
1278 for {
1279 if v_0.Op != OpARMMOVWconst {
1280 break
1281 }
1282 c := auxIntToInt32(v_0.AuxInt)
1283 x := v_1
1284 y := v_2
1285 flags := v_3
1286 v.reset(OpARMADCconst)
1287 v.AuxInt = int32ToAuxInt(c)
1288 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
1289 v0.AddArg2(x, y)
1290 v.AddArg2(v0, flags)
1291 return true
1292 }
1293
1294
1295
1296 for {
1297 x := v_0
1298 y := v_1
1299 if v_2.Op != OpARMMOVWconst {
1300 break
1301 }
1302 c := auxIntToInt32(v_2.AuxInt)
1303 flags := v_3
1304 if !(0 <= c && c < 32) {
1305 break
1306 }
1307 v.reset(OpARMADCshiftRL)
1308 v.AuxInt = int32ToAuxInt(c)
1309 v.AddArg3(x, y, flags)
1310 return true
1311 }
1312 return false
1313 }
1314 func rewriteValueARM_OpARMADD(v *Value) bool {
1315 v_1 := v.Args[1]
1316 v_0 := v.Args[0]
1317 b := v.Block
1318
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 t := v_1.Type
1328 c := auxIntToInt32(v_1.AuxInt)
1329 if !(!t.IsPtr()) {
1330 continue
1331 }
1332 v.reset(OpARMADDconst)
1333 v.AuxInt = int32ToAuxInt(c)
1334 v.AddArg(x)
1335 return true
1336 }
1337 break
1338 }
1339
1340
1341 for {
1342 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1343 x := v_0
1344 if v_1.Op != OpARMSLLconst {
1345 continue
1346 }
1347 c := auxIntToInt32(v_1.AuxInt)
1348 y := v_1.Args[0]
1349 v.reset(OpARMADDshiftLL)
1350 v.AuxInt = int32ToAuxInt(c)
1351 v.AddArg2(x, y)
1352 return true
1353 }
1354 break
1355 }
1356
1357
1358 for {
1359 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1360 x := v_0
1361 if v_1.Op != OpARMSRLconst {
1362 continue
1363 }
1364 c := auxIntToInt32(v_1.AuxInt)
1365 y := v_1.Args[0]
1366 v.reset(OpARMADDshiftRL)
1367 v.AuxInt = int32ToAuxInt(c)
1368 v.AddArg2(x, y)
1369 return true
1370 }
1371 break
1372 }
1373
1374
1375 for {
1376 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1377 x := v_0
1378 if v_1.Op != OpARMSRAconst {
1379 continue
1380 }
1381 c := auxIntToInt32(v_1.AuxInt)
1382 y := v_1.Args[0]
1383 v.reset(OpARMADDshiftRA)
1384 v.AuxInt = int32ToAuxInt(c)
1385 v.AddArg2(x, y)
1386 return true
1387 }
1388 break
1389 }
1390
1391
1392 for {
1393 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1394 x := v_0
1395 if v_1.Op != OpARMSLL {
1396 continue
1397 }
1398 z := v_1.Args[1]
1399 y := v_1.Args[0]
1400 v.reset(OpARMADDshiftLLreg)
1401 v.AddArg3(x, y, z)
1402 return true
1403 }
1404 break
1405 }
1406
1407
1408 for {
1409 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1410 x := v_0
1411 if v_1.Op != OpARMSRL {
1412 continue
1413 }
1414 z := v_1.Args[1]
1415 y := v_1.Args[0]
1416 v.reset(OpARMADDshiftRLreg)
1417 v.AddArg3(x, y, z)
1418 return true
1419 }
1420 break
1421 }
1422
1423
1424 for {
1425 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1426 x := v_0
1427 if v_1.Op != OpARMSRA {
1428 continue
1429 }
1430 z := v_1.Args[1]
1431 y := v_1.Args[0]
1432 v.reset(OpARMADDshiftRAreg)
1433 v.AddArg3(x, y, z)
1434 return true
1435 }
1436 break
1437 }
1438
1439
1440 for {
1441 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1442 x := v_0
1443 if v_1.Op != OpARMRSBconst || auxIntToInt32(v_1.AuxInt) != 0 {
1444 continue
1445 }
1446 y := v_1.Args[0]
1447 v.reset(OpARMSUB)
1448 v.AddArg2(x, y)
1449 return true
1450 }
1451 break
1452 }
1453
1454
1455 for {
1456 t := v.Type
1457 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1458 if v_0.Op != OpARMRSBconst {
1459 continue
1460 }
1461 c := auxIntToInt32(v_0.AuxInt)
1462 x := v_0.Args[0]
1463 if v_1.Op != OpARMRSBconst {
1464 continue
1465 }
1466 d := auxIntToInt32(v_1.AuxInt)
1467 y := v_1.Args[0]
1468 v.reset(OpARMRSBconst)
1469 v.AuxInt = int32ToAuxInt(c + d)
1470 v0 := b.NewValue0(v.Pos, OpARMADD, t)
1471 v0.AddArg2(x, y)
1472 v.AddArg(v0)
1473 return true
1474 }
1475 break
1476 }
1477
1478
1479 for {
1480 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1481 if v_0.Op != OpARMMUL {
1482 continue
1483 }
1484 y := v_0.Args[1]
1485 x := v_0.Args[0]
1486 a := v_1
1487 v.reset(OpARMMULA)
1488 v.AddArg3(x, y, a)
1489 return true
1490 }
1491 break
1492 }
1493 return false
1494 }
1495 func rewriteValueARM_OpARMADDD(v *Value) bool {
1496 v_1 := v.Args[1]
1497 v_0 := v.Args[0]
1498
1499
1500
1501 for {
1502 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1503 a := v_0
1504 if v_1.Op != OpARMMULD {
1505 continue
1506 }
1507 y := v_1.Args[1]
1508 x := v_1.Args[0]
1509 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1510 continue
1511 }
1512 v.reset(OpARMMULAD)
1513 v.AddArg3(a, x, y)
1514 return true
1515 }
1516 break
1517 }
1518
1519
1520
1521 for {
1522 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1523 a := v_0
1524 if v_1.Op != OpARMNMULD {
1525 continue
1526 }
1527 y := v_1.Args[1]
1528 x := v_1.Args[0]
1529 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1530 continue
1531 }
1532 v.reset(OpARMMULSD)
1533 v.AddArg3(a, x, y)
1534 return true
1535 }
1536 break
1537 }
1538 return false
1539 }
1540 func rewriteValueARM_OpARMADDF(v *Value) bool {
1541 v_1 := v.Args[1]
1542 v_0 := v.Args[0]
1543
1544
1545
1546 for {
1547 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1548 a := v_0
1549 if v_1.Op != OpARMMULF {
1550 continue
1551 }
1552 y := v_1.Args[1]
1553 x := v_1.Args[0]
1554 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1555 continue
1556 }
1557 v.reset(OpARMMULAF)
1558 v.AddArg3(a, x, y)
1559 return true
1560 }
1561 break
1562 }
1563
1564
1565
1566 for {
1567 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1568 a := v_0
1569 if v_1.Op != OpARMNMULF {
1570 continue
1571 }
1572 y := v_1.Args[1]
1573 x := v_1.Args[0]
1574 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
1575 continue
1576 }
1577 v.reset(OpARMMULSF)
1578 v.AddArg3(a, x, y)
1579 return true
1580 }
1581 break
1582 }
1583 return false
1584 }
1585 func rewriteValueARM_OpARMADDS(v *Value) bool {
1586 v_1 := v.Args[1]
1587 v_0 := v.Args[0]
1588
1589
1590 for {
1591 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1592 x := v_0
1593 if v_1.Op != OpARMMOVWconst {
1594 continue
1595 }
1596 c := auxIntToInt32(v_1.AuxInt)
1597 v.reset(OpARMADDSconst)
1598 v.AuxInt = int32ToAuxInt(c)
1599 v.AddArg(x)
1600 return true
1601 }
1602 break
1603 }
1604
1605
1606 for {
1607 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1608 x := v_0
1609 if v_1.Op != OpARMSLLconst {
1610 continue
1611 }
1612 c := auxIntToInt32(v_1.AuxInt)
1613 y := v_1.Args[0]
1614 v.reset(OpARMADDSshiftLL)
1615 v.AuxInt = int32ToAuxInt(c)
1616 v.AddArg2(x, y)
1617 return true
1618 }
1619 break
1620 }
1621
1622
1623 for {
1624 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1625 x := v_0
1626 if v_1.Op != OpARMSRLconst {
1627 continue
1628 }
1629 c := auxIntToInt32(v_1.AuxInt)
1630 y := v_1.Args[0]
1631 v.reset(OpARMADDSshiftRL)
1632 v.AuxInt = int32ToAuxInt(c)
1633 v.AddArg2(x, y)
1634 return true
1635 }
1636 break
1637 }
1638
1639
1640 for {
1641 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1642 x := v_0
1643 if v_1.Op != OpARMSRAconst {
1644 continue
1645 }
1646 c := auxIntToInt32(v_1.AuxInt)
1647 y := v_1.Args[0]
1648 v.reset(OpARMADDSshiftRA)
1649 v.AuxInt = int32ToAuxInt(c)
1650 v.AddArg2(x, y)
1651 return true
1652 }
1653 break
1654 }
1655
1656
1657 for {
1658 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1659 x := v_0
1660 if v_1.Op != OpARMSLL {
1661 continue
1662 }
1663 z := v_1.Args[1]
1664 y := v_1.Args[0]
1665 v.reset(OpARMADDSshiftLLreg)
1666 v.AddArg3(x, y, z)
1667 return true
1668 }
1669 break
1670 }
1671
1672
1673 for {
1674 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1675 x := v_0
1676 if v_1.Op != OpARMSRL {
1677 continue
1678 }
1679 z := v_1.Args[1]
1680 y := v_1.Args[0]
1681 v.reset(OpARMADDSshiftRLreg)
1682 v.AddArg3(x, y, z)
1683 return true
1684 }
1685 break
1686 }
1687
1688
1689 for {
1690 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1691 x := v_0
1692 if v_1.Op != OpARMSRA {
1693 continue
1694 }
1695 z := v_1.Args[1]
1696 y := v_1.Args[0]
1697 v.reset(OpARMADDSshiftRAreg)
1698 v.AddArg3(x, y, z)
1699 return true
1700 }
1701 break
1702 }
1703 return false
1704 }
1705 func rewriteValueARM_OpARMADDSshiftLL(v *Value) bool {
1706 v_1 := v.Args[1]
1707 v_0 := v.Args[0]
1708 b := v.Block
1709
1710
1711 for {
1712 d := auxIntToInt32(v.AuxInt)
1713 if v_0.Op != OpARMMOVWconst {
1714 break
1715 }
1716 c := auxIntToInt32(v_0.AuxInt)
1717 x := v_1
1718 v.reset(OpARMADDSconst)
1719 v.AuxInt = int32ToAuxInt(c)
1720 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
1721 v0.AuxInt = int32ToAuxInt(d)
1722 v0.AddArg(x)
1723 v.AddArg(v0)
1724 return true
1725 }
1726
1727
1728 for {
1729 d := auxIntToInt32(v.AuxInt)
1730 x := v_0
1731 if v_1.Op != OpARMMOVWconst {
1732 break
1733 }
1734 c := auxIntToInt32(v_1.AuxInt)
1735 v.reset(OpARMADDSconst)
1736 v.AuxInt = int32ToAuxInt(c << uint64(d))
1737 v.AddArg(x)
1738 return true
1739 }
1740 return false
1741 }
1742 func rewriteValueARM_OpARMADDSshiftLLreg(v *Value) bool {
1743 v_2 := v.Args[2]
1744 v_1 := v.Args[1]
1745 v_0 := v.Args[0]
1746 b := v.Block
1747
1748
1749 for {
1750 if v_0.Op != OpARMMOVWconst {
1751 break
1752 }
1753 c := auxIntToInt32(v_0.AuxInt)
1754 x := v_1
1755 y := v_2
1756 v.reset(OpARMADDSconst)
1757 v.AuxInt = int32ToAuxInt(c)
1758 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
1759 v0.AddArg2(x, y)
1760 v.AddArg(v0)
1761 return true
1762 }
1763
1764
1765
1766 for {
1767 x := v_0
1768 y := v_1
1769 if v_2.Op != OpARMMOVWconst {
1770 break
1771 }
1772 c := auxIntToInt32(v_2.AuxInt)
1773 if !(0 <= c && c < 32) {
1774 break
1775 }
1776 v.reset(OpARMADDSshiftLL)
1777 v.AuxInt = int32ToAuxInt(c)
1778 v.AddArg2(x, y)
1779 return true
1780 }
1781 return false
1782 }
1783 func rewriteValueARM_OpARMADDSshiftRA(v *Value) bool {
1784 v_1 := v.Args[1]
1785 v_0 := v.Args[0]
1786 b := v.Block
1787
1788
1789 for {
1790 d := auxIntToInt32(v.AuxInt)
1791 if v_0.Op != OpARMMOVWconst {
1792 break
1793 }
1794 c := auxIntToInt32(v_0.AuxInt)
1795 x := v_1
1796 v.reset(OpARMADDSconst)
1797 v.AuxInt = int32ToAuxInt(c)
1798 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
1799 v0.AuxInt = int32ToAuxInt(d)
1800 v0.AddArg(x)
1801 v.AddArg(v0)
1802 return true
1803 }
1804
1805
1806 for {
1807 d := auxIntToInt32(v.AuxInt)
1808 x := v_0
1809 if v_1.Op != OpARMMOVWconst {
1810 break
1811 }
1812 c := auxIntToInt32(v_1.AuxInt)
1813 v.reset(OpARMADDSconst)
1814 v.AuxInt = int32ToAuxInt(c >> uint64(d))
1815 v.AddArg(x)
1816 return true
1817 }
1818 return false
1819 }
1820 func rewriteValueARM_OpARMADDSshiftRAreg(v *Value) bool {
1821 v_2 := v.Args[2]
1822 v_1 := v.Args[1]
1823 v_0 := v.Args[0]
1824 b := v.Block
1825
1826
1827 for {
1828 if v_0.Op != OpARMMOVWconst {
1829 break
1830 }
1831 c := auxIntToInt32(v_0.AuxInt)
1832 x := v_1
1833 y := v_2
1834 v.reset(OpARMADDSconst)
1835 v.AuxInt = int32ToAuxInt(c)
1836 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
1837 v0.AddArg2(x, y)
1838 v.AddArg(v0)
1839 return true
1840 }
1841
1842
1843
1844 for {
1845 x := v_0
1846 y := v_1
1847 if v_2.Op != OpARMMOVWconst {
1848 break
1849 }
1850 c := auxIntToInt32(v_2.AuxInt)
1851 if !(0 <= c && c < 32) {
1852 break
1853 }
1854 v.reset(OpARMADDSshiftRA)
1855 v.AuxInt = int32ToAuxInt(c)
1856 v.AddArg2(x, y)
1857 return true
1858 }
1859 return false
1860 }
1861 func rewriteValueARM_OpARMADDSshiftRL(v *Value) bool {
1862 v_1 := v.Args[1]
1863 v_0 := v.Args[0]
1864 b := v.Block
1865
1866
1867 for {
1868 d := auxIntToInt32(v.AuxInt)
1869 if v_0.Op != OpARMMOVWconst {
1870 break
1871 }
1872 c := auxIntToInt32(v_0.AuxInt)
1873 x := v_1
1874 v.reset(OpARMADDSconst)
1875 v.AuxInt = int32ToAuxInt(c)
1876 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
1877 v0.AuxInt = int32ToAuxInt(d)
1878 v0.AddArg(x)
1879 v.AddArg(v0)
1880 return true
1881 }
1882
1883
1884 for {
1885 d := auxIntToInt32(v.AuxInt)
1886 x := v_0
1887 if v_1.Op != OpARMMOVWconst {
1888 break
1889 }
1890 c := auxIntToInt32(v_1.AuxInt)
1891 v.reset(OpARMADDSconst)
1892 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
1893 v.AddArg(x)
1894 return true
1895 }
1896 return false
1897 }
1898 func rewriteValueARM_OpARMADDSshiftRLreg(v *Value) bool {
1899 v_2 := v.Args[2]
1900 v_1 := v.Args[1]
1901 v_0 := v.Args[0]
1902 b := v.Block
1903
1904
1905 for {
1906 if v_0.Op != OpARMMOVWconst {
1907 break
1908 }
1909 c := auxIntToInt32(v_0.AuxInt)
1910 x := v_1
1911 y := v_2
1912 v.reset(OpARMADDSconst)
1913 v.AuxInt = int32ToAuxInt(c)
1914 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
1915 v0.AddArg2(x, y)
1916 v.AddArg(v0)
1917 return true
1918 }
1919
1920
1921
1922 for {
1923 x := v_0
1924 y := v_1
1925 if v_2.Op != OpARMMOVWconst {
1926 break
1927 }
1928 c := auxIntToInt32(v_2.AuxInt)
1929 if !(0 <= c && c < 32) {
1930 break
1931 }
1932 v.reset(OpARMADDSshiftRL)
1933 v.AuxInt = int32ToAuxInt(c)
1934 v.AddArg2(x, y)
1935 return true
1936 }
1937 return false
1938 }
1939 func rewriteValueARM_OpARMADDconst(v *Value) bool {
1940 v_0 := v.Args[0]
1941
1942
1943 for {
1944 off1 := auxIntToInt32(v.AuxInt)
1945 if v_0.Op != OpARMMOVWaddr {
1946 break
1947 }
1948 off2 := auxIntToInt32(v_0.AuxInt)
1949 sym := auxToSym(v_0.Aux)
1950 ptr := v_0.Args[0]
1951 v.reset(OpARMMOVWaddr)
1952 v.AuxInt = int32ToAuxInt(off1 + off2)
1953 v.Aux = symToAux(sym)
1954 v.AddArg(ptr)
1955 return true
1956 }
1957
1958
1959 for {
1960 if auxIntToInt32(v.AuxInt) != 0 {
1961 break
1962 }
1963 x := v_0
1964 v.copyOf(x)
1965 return true
1966 }
1967
1968
1969
1970 for {
1971 c := auxIntToInt32(v.AuxInt)
1972 x := v_0
1973 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
1974 break
1975 }
1976 v.reset(OpARMSUBconst)
1977 v.AuxInt = int32ToAuxInt(-c)
1978 v.AddArg(x)
1979 return true
1980 }
1981
1982
1983
1984 for {
1985 c := auxIntToInt32(v.AuxInt)
1986 x := v_0
1987 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
1988 break
1989 }
1990 v.reset(OpARMSUBconst)
1991 v.AuxInt = int32ToAuxInt(-c)
1992 v.AddArg(x)
1993 return true
1994 }
1995
1996
1997 for {
1998 c := auxIntToInt32(v.AuxInt)
1999 if v_0.Op != OpARMMOVWconst {
2000 break
2001 }
2002 d := auxIntToInt32(v_0.AuxInt)
2003 v.reset(OpARMMOVWconst)
2004 v.AuxInt = int32ToAuxInt(c + d)
2005 return true
2006 }
2007
2008
2009 for {
2010 c := auxIntToInt32(v.AuxInt)
2011 if v_0.Op != OpARMADDconst {
2012 break
2013 }
2014 d := auxIntToInt32(v_0.AuxInt)
2015 x := v_0.Args[0]
2016 v.reset(OpARMADDconst)
2017 v.AuxInt = int32ToAuxInt(c + d)
2018 v.AddArg(x)
2019 return true
2020 }
2021
2022
2023 for {
2024 c := auxIntToInt32(v.AuxInt)
2025 if v_0.Op != OpARMSUBconst {
2026 break
2027 }
2028 d := auxIntToInt32(v_0.AuxInt)
2029 x := v_0.Args[0]
2030 v.reset(OpARMADDconst)
2031 v.AuxInt = int32ToAuxInt(c - d)
2032 v.AddArg(x)
2033 return true
2034 }
2035
2036
2037 for {
2038 c := auxIntToInt32(v.AuxInt)
2039 if v_0.Op != OpARMRSBconst {
2040 break
2041 }
2042 d := auxIntToInt32(v_0.AuxInt)
2043 x := v_0.Args[0]
2044 v.reset(OpARMRSBconst)
2045 v.AuxInt = int32ToAuxInt(c + d)
2046 v.AddArg(x)
2047 return true
2048 }
2049 return false
2050 }
2051 func rewriteValueARM_OpARMADDshiftLL(v *Value) bool {
2052 v_1 := v.Args[1]
2053 v_0 := v.Args[0]
2054 b := v.Block
2055 typ := &b.Func.Config.Types
2056
2057
2058 for {
2059 d := auxIntToInt32(v.AuxInt)
2060 if v_0.Op != OpARMMOVWconst {
2061 break
2062 }
2063 c := auxIntToInt32(v_0.AuxInt)
2064 x := v_1
2065 v.reset(OpARMADDconst)
2066 v.AuxInt = int32ToAuxInt(c)
2067 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
2068 v0.AuxInt = int32ToAuxInt(d)
2069 v0.AddArg(x)
2070 v.AddArg(v0)
2071 return true
2072 }
2073
2074
2075 for {
2076 d := auxIntToInt32(v.AuxInt)
2077 x := v_0
2078 if v_1.Op != OpARMMOVWconst {
2079 break
2080 }
2081 c := auxIntToInt32(v_1.AuxInt)
2082 v.reset(OpARMADDconst)
2083 v.AuxInt = int32ToAuxInt(c << uint64(d))
2084 v.AddArg(x)
2085 return true
2086 }
2087
2088
2089 for {
2090 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)) {
2091 break
2092 }
2093 x := v_0.Args[0]
2094 if x != v_1 {
2095 break
2096 }
2097 v.reset(OpARMREV16)
2098 v.AddArg(x)
2099 return true
2100 }
2101
2102
2103
2104 for {
2105 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
2106 break
2107 }
2108 v_0_0 := v_0.Args[0]
2109 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
2110 break
2111 }
2112 x := v_0_0.Args[0]
2113 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
2114 break
2115 }
2116 v.reset(OpARMREV16)
2117 v.AddArg(x)
2118 return true
2119 }
2120 return false
2121 }
2122 func rewriteValueARM_OpARMADDshiftLLreg(v *Value) bool {
2123 v_2 := v.Args[2]
2124 v_1 := v.Args[1]
2125 v_0 := v.Args[0]
2126 b := v.Block
2127
2128
2129 for {
2130 if v_0.Op != OpARMMOVWconst {
2131 break
2132 }
2133 c := auxIntToInt32(v_0.AuxInt)
2134 x := v_1
2135 y := v_2
2136 v.reset(OpARMADDconst)
2137 v.AuxInt = int32ToAuxInt(c)
2138 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
2139 v0.AddArg2(x, y)
2140 v.AddArg(v0)
2141 return true
2142 }
2143
2144
2145
2146 for {
2147 x := v_0
2148 y := v_1
2149 if v_2.Op != OpARMMOVWconst {
2150 break
2151 }
2152 c := auxIntToInt32(v_2.AuxInt)
2153 if !(0 <= c && c < 32) {
2154 break
2155 }
2156 v.reset(OpARMADDshiftLL)
2157 v.AuxInt = int32ToAuxInt(c)
2158 v.AddArg2(x, y)
2159 return true
2160 }
2161 return false
2162 }
2163 func rewriteValueARM_OpARMADDshiftRA(v *Value) bool {
2164 v_1 := v.Args[1]
2165 v_0 := v.Args[0]
2166 b := v.Block
2167
2168
2169 for {
2170 d := auxIntToInt32(v.AuxInt)
2171 if v_0.Op != OpARMMOVWconst {
2172 break
2173 }
2174 c := auxIntToInt32(v_0.AuxInt)
2175 x := v_1
2176 v.reset(OpARMADDconst)
2177 v.AuxInt = int32ToAuxInt(c)
2178 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
2179 v0.AuxInt = int32ToAuxInt(d)
2180 v0.AddArg(x)
2181 v.AddArg(v0)
2182 return true
2183 }
2184
2185
2186 for {
2187 d := auxIntToInt32(v.AuxInt)
2188 x := v_0
2189 if v_1.Op != OpARMMOVWconst {
2190 break
2191 }
2192 c := auxIntToInt32(v_1.AuxInt)
2193 v.reset(OpARMADDconst)
2194 v.AuxInt = int32ToAuxInt(c >> uint64(d))
2195 v.AddArg(x)
2196 return true
2197 }
2198 return false
2199 }
2200 func rewriteValueARM_OpARMADDshiftRAreg(v *Value) bool {
2201 v_2 := v.Args[2]
2202 v_1 := v.Args[1]
2203 v_0 := v.Args[0]
2204 b := v.Block
2205
2206
2207 for {
2208 if v_0.Op != OpARMMOVWconst {
2209 break
2210 }
2211 c := auxIntToInt32(v_0.AuxInt)
2212 x := v_1
2213 y := v_2
2214 v.reset(OpARMADDconst)
2215 v.AuxInt = int32ToAuxInt(c)
2216 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
2217 v0.AddArg2(x, y)
2218 v.AddArg(v0)
2219 return true
2220 }
2221
2222
2223
2224 for {
2225 x := v_0
2226 y := v_1
2227 if v_2.Op != OpARMMOVWconst {
2228 break
2229 }
2230 c := auxIntToInt32(v_2.AuxInt)
2231 if !(0 <= c && c < 32) {
2232 break
2233 }
2234 v.reset(OpARMADDshiftRA)
2235 v.AuxInt = int32ToAuxInt(c)
2236 v.AddArg2(x, y)
2237 return true
2238 }
2239 return false
2240 }
2241 func rewriteValueARM_OpARMADDshiftRL(v *Value) bool {
2242 v_1 := v.Args[1]
2243 v_0 := v.Args[0]
2244 b := v.Block
2245
2246
2247 for {
2248 d := auxIntToInt32(v.AuxInt)
2249 if v_0.Op != OpARMMOVWconst {
2250 break
2251 }
2252 c := auxIntToInt32(v_0.AuxInt)
2253 x := v_1
2254 v.reset(OpARMADDconst)
2255 v.AuxInt = int32ToAuxInt(c)
2256 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
2257 v0.AuxInt = int32ToAuxInt(d)
2258 v0.AddArg(x)
2259 v.AddArg(v0)
2260 return true
2261 }
2262
2263
2264 for {
2265 d := auxIntToInt32(v.AuxInt)
2266 x := v_0
2267 if v_1.Op != OpARMMOVWconst {
2268 break
2269 }
2270 c := auxIntToInt32(v_1.AuxInt)
2271 v.reset(OpARMADDconst)
2272 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2273 v.AddArg(x)
2274 return true
2275 }
2276 return false
2277 }
2278 func rewriteValueARM_OpARMADDshiftRLreg(v *Value) bool {
2279 v_2 := v.Args[2]
2280 v_1 := v.Args[1]
2281 v_0 := v.Args[0]
2282 b := v.Block
2283
2284
2285 for {
2286 if v_0.Op != OpARMMOVWconst {
2287 break
2288 }
2289 c := auxIntToInt32(v_0.AuxInt)
2290 x := v_1
2291 y := v_2
2292 v.reset(OpARMADDconst)
2293 v.AuxInt = int32ToAuxInt(c)
2294 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
2295 v0.AddArg2(x, y)
2296 v.AddArg(v0)
2297 return true
2298 }
2299
2300
2301
2302 for {
2303 x := v_0
2304 y := v_1
2305 if v_2.Op != OpARMMOVWconst {
2306 break
2307 }
2308 c := auxIntToInt32(v_2.AuxInt)
2309 if !(0 <= c && c < 32) {
2310 break
2311 }
2312 v.reset(OpARMADDshiftRL)
2313 v.AuxInt = int32ToAuxInt(c)
2314 v.AddArg2(x, y)
2315 return true
2316 }
2317 return false
2318 }
2319 func rewriteValueARM_OpARMAND(v *Value) bool {
2320 v_1 := v.Args[1]
2321 v_0 := v.Args[0]
2322
2323
2324 for {
2325 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2326 x := v_0
2327 if v_1.Op != OpARMMOVWconst {
2328 continue
2329 }
2330 c := auxIntToInt32(v_1.AuxInt)
2331 v.reset(OpARMANDconst)
2332 v.AuxInt = int32ToAuxInt(c)
2333 v.AddArg(x)
2334 return true
2335 }
2336 break
2337 }
2338
2339
2340 for {
2341 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2342 x := v_0
2343 if v_1.Op != OpARMSLLconst {
2344 continue
2345 }
2346 c := auxIntToInt32(v_1.AuxInt)
2347 y := v_1.Args[0]
2348 v.reset(OpARMANDshiftLL)
2349 v.AuxInt = int32ToAuxInt(c)
2350 v.AddArg2(x, y)
2351 return true
2352 }
2353 break
2354 }
2355
2356
2357 for {
2358 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2359 x := v_0
2360 if v_1.Op != OpARMSRLconst {
2361 continue
2362 }
2363 c := auxIntToInt32(v_1.AuxInt)
2364 y := v_1.Args[0]
2365 v.reset(OpARMANDshiftRL)
2366 v.AuxInt = int32ToAuxInt(c)
2367 v.AddArg2(x, y)
2368 return true
2369 }
2370 break
2371 }
2372
2373
2374 for {
2375 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2376 x := v_0
2377 if v_1.Op != OpARMSRAconst {
2378 continue
2379 }
2380 c := auxIntToInt32(v_1.AuxInt)
2381 y := v_1.Args[0]
2382 v.reset(OpARMANDshiftRA)
2383 v.AuxInt = int32ToAuxInt(c)
2384 v.AddArg2(x, y)
2385 return true
2386 }
2387 break
2388 }
2389
2390
2391 for {
2392 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2393 x := v_0
2394 if v_1.Op != OpARMSLL {
2395 continue
2396 }
2397 z := v_1.Args[1]
2398 y := v_1.Args[0]
2399 v.reset(OpARMANDshiftLLreg)
2400 v.AddArg3(x, y, z)
2401 return true
2402 }
2403 break
2404 }
2405
2406
2407 for {
2408 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2409 x := v_0
2410 if v_1.Op != OpARMSRL {
2411 continue
2412 }
2413 z := v_1.Args[1]
2414 y := v_1.Args[0]
2415 v.reset(OpARMANDshiftRLreg)
2416 v.AddArg3(x, y, z)
2417 return true
2418 }
2419 break
2420 }
2421
2422
2423 for {
2424 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2425 x := v_0
2426 if v_1.Op != OpARMSRA {
2427 continue
2428 }
2429 z := v_1.Args[1]
2430 y := v_1.Args[0]
2431 v.reset(OpARMANDshiftRAreg)
2432 v.AddArg3(x, y, z)
2433 return true
2434 }
2435 break
2436 }
2437
2438
2439 for {
2440 x := v_0
2441 if x != v_1 {
2442 break
2443 }
2444 v.copyOf(x)
2445 return true
2446 }
2447
2448
2449 for {
2450 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2451 x := v_0
2452 if v_1.Op != OpARMMVN {
2453 continue
2454 }
2455 y := v_1.Args[0]
2456 v.reset(OpARMBIC)
2457 v.AddArg2(x, y)
2458 return true
2459 }
2460 break
2461 }
2462
2463
2464 for {
2465 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2466 x := v_0
2467 if v_1.Op != OpARMMVNshiftLL {
2468 continue
2469 }
2470 c := auxIntToInt32(v_1.AuxInt)
2471 y := v_1.Args[0]
2472 v.reset(OpARMBICshiftLL)
2473 v.AuxInt = int32ToAuxInt(c)
2474 v.AddArg2(x, y)
2475 return true
2476 }
2477 break
2478 }
2479
2480
2481 for {
2482 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2483 x := v_0
2484 if v_1.Op != OpARMMVNshiftRL {
2485 continue
2486 }
2487 c := auxIntToInt32(v_1.AuxInt)
2488 y := v_1.Args[0]
2489 v.reset(OpARMBICshiftRL)
2490 v.AuxInt = int32ToAuxInt(c)
2491 v.AddArg2(x, y)
2492 return true
2493 }
2494 break
2495 }
2496
2497
2498 for {
2499 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2500 x := v_0
2501 if v_1.Op != OpARMMVNshiftRA {
2502 continue
2503 }
2504 c := auxIntToInt32(v_1.AuxInt)
2505 y := v_1.Args[0]
2506 v.reset(OpARMBICshiftRA)
2507 v.AuxInt = int32ToAuxInt(c)
2508 v.AddArg2(x, y)
2509 return true
2510 }
2511 break
2512 }
2513 return false
2514 }
2515 func rewriteValueARM_OpARMANDconst(v *Value) bool {
2516 v_0 := v.Args[0]
2517
2518
2519 for {
2520 if auxIntToInt32(v.AuxInt) != 0 {
2521 break
2522 }
2523 v.reset(OpARMMOVWconst)
2524 v.AuxInt = int32ToAuxInt(0)
2525 return true
2526 }
2527
2528
2529
2530 for {
2531 c := auxIntToInt32(v.AuxInt)
2532 x := v_0
2533 if !(int32(c) == -1) {
2534 break
2535 }
2536 v.copyOf(x)
2537 return true
2538 }
2539
2540
2541
2542 for {
2543 c := auxIntToInt32(v.AuxInt)
2544 x := v_0
2545 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
2546 break
2547 }
2548 v.reset(OpARMBICconst)
2549 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
2550 v.AddArg(x)
2551 return true
2552 }
2553
2554
2555
2556 for {
2557 c := auxIntToInt32(v.AuxInt)
2558 x := v_0
2559 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
2560 break
2561 }
2562 v.reset(OpARMBICconst)
2563 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
2564 v.AddArg(x)
2565 return true
2566 }
2567
2568
2569 for {
2570 c := auxIntToInt32(v.AuxInt)
2571 if v_0.Op != OpARMMOVWconst {
2572 break
2573 }
2574 d := auxIntToInt32(v_0.AuxInt)
2575 v.reset(OpARMMOVWconst)
2576 v.AuxInt = int32ToAuxInt(c & d)
2577 return true
2578 }
2579
2580
2581 for {
2582 c := auxIntToInt32(v.AuxInt)
2583 if v_0.Op != OpARMANDconst {
2584 break
2585 }
2586 d := auxIntToInt32(v_0.AuxInt)
2587 x := v_0.Args[0]
2588 v.reset(OpARMANDconst)
2589 v.AuxInt = int32ToAuxInt(c & d)
2590 v.AddArg(x)
2591 return true
2592 }
2593 return false
2594 }
2595 func rewriteValueARM_OpARMANDshiftLL(v *Value) bool {
2596 v_1 := v.Args[1]
2597 v_0 := v.Args[0]
2598 b := v.Block
2599
2600
2601 for {
2602 d := auxIntToInt32(v.AuxInt)
2603 if v_0.Op != OpARMMOVWconst {
2604 break
2605 }
2606 c := auxIntToInt32(v_0.AuxInt)
2607 x := v_1
2608 v.reset(OpARMANDconst)
2609 v.AuxInt = int32ToAuxInt(c)
2610 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
2611 v0.AuxInt = int32ToAuxInt(d)
2612 v0.AddArg(x)
2613 v.AddArg(v0)
2614 return true
2615 }
2616
2617
2618 for {
2619 d := auxIntToInt32(v.AuxInt)
2620 x := v_0
2621 if v_1.Op != OpARMMOVWconst {
2622 break
2623 }
2624 c := auxIntToInt32(v_1.AuxInt)
2625 v.reset(OpARMANDconst)
2626 v.AuxInt = int32ToAuxInt(c << uint64(d))
2627 v.AddArg(x)
2628 return true
2629 }
2630
2631
2632 for {
2633 c := auxIntToInt32(v.AuxInt)
2634 y := v_0
2635 if y.Op != OpARMSLLconst || auxIntToInt32(y.AuxInt) != c {
2636 break
2637 }
2638 x := y.Args[0]
2639 if x != v_1 {
2640 break
2641 }
2642 v.copyOf(y)
2643 return true
2644 }
2645 return false
2646 }
2647 func rewriteValueARM_OpARMANDshiftLLreg(v *Value) bool {
2648 v_2 := v.Args[2]
2649 v_1 := v.Args[1]
2650 v_0 := v.Args[0]
2651 b := v.Block
2652
2653
2654 for {
2655 if v_0.Op != OpARMMOVWconst {
2656 break
2657 }
2658 c := auxIntToInt32(v_0.AuxInt)
2659 x := v_1
2660 y := v_2
2661 v.reset(OpARMANDconst)
2662 v.AuxInt = int32ToAuxInt(c)
2663 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
2664 v0.AddArg2(x, y)
2665 v.AddArg(v0)
2666 return true
2667 }
2668
2669
2670
2671 for {
2672 x := v_0
2673 y := v_1
2674 if v_2.Op != OpARMMOVWconst {
2675 break
2676 }
2677 c := auxIntToInt32(v_2.AuxInt)
2678 if !(0 <= c && c < 32) {
2679 break
2680 }
2681 v.reset(OpARMANDshiftLL)
2682 v.AuxInt = int32ToAuxInt(c)
2683 v.AddArg2(x, y)
2684 return true
2685 }
2686 return false
2687 }
2688 func rewriteValueARM_OpARMANDshiftRA(v *Value) bool {
2689 v_1 := v.Args[1]
2690 v_0 := v.Args[0]
2691 b := v.Block
2692
2693
2694 for {
2695 d := auxIntToInt32(v.AuxInt)
2696 if v_0.Op != OpARMMOVWconst {
2697 break
2698 }
2699 c := auxIntToInt32(v_0.AuxInt)
2700 x := v_1
2701 v.reset(OpARMANDconst)
2702 v.AuxInt = int32ToAuxInt(c)
2703 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
2704 v0.AuxInt = int32ToAuxInt(d)
2705 v0.AddArg(x)
2706 v.AddArg(v0)
2707 return true
2708 }
2709
2710
2711 for {
2712 d := auxIntToInt32(v.AuxInt)
2713 x := v_0
2714 if v_1.Op != OpARMMOVWconst {
2715 break
2716 }
2717 c := auxIntToInt32(v_1.AuxInt)
2718 v.reset(OpARMANDconst)
2719 v.AuxInt = int32ToAuxInt(c >> uint64(d))
2720 v.AddArg(x)
2721 return true
2722 }
2723
2724
2725 for {
2726 c := auxIntToInt32(v.AuxInt)
2727 y := v_0
2728 if y.Op != OpARMSRAconst || auxIntToInt32(y.AuxInt) != c {
2729 break
2730 }
2731 x := y.Args[0]
2732 if x != v_1 {
2733 break
2734 }
2735 v.copyOf(y)
2736 return true
2737 }
2738 return false
2739 }
2740 func rewriteValueARM_OpARMANDshiftRAreg(v *Value) bool {
2741 v_2 := v.Args[2]
2742 v_1 := v.Args[1]
2743 v_0 := v.Args[0]
2744 b := v.Block
2745
2746
2747 for {
2748 if v_0.Op != OpARMMOVWconst {
2749 break
2750 }
2751 c := auxIntToInt32(v_0.AuxInt)
2752 x := v_1
2753 y := v_2
2754 v.reset(OpARMANDconst)
2755 v.AuxInt = int32ToAuxInt(c)
2756 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
2757 v0.AddArg2(x, y)
2758 v.AddArg(v0)
2759 return true
2760 }
2761
2762
2763
2764 for {
2765 x := v_0
2766 y := v_1
2767 if v_2.Op != OpARMMOVWconst {
2768 break
2769 }
2770 c := auxIntToInt32(v_2.AuxInt)
2771 if !(0 <= c && c < 32) {
2772 break
2773 }
2774 v.reset(OpARMANDshiftRA)
2775 v.AuxInt = int32ToAuxInt(c)
2776 v.AddArg2(x, y)
2777 return true
2778 }
2779 return false
2780 }
2781 func rewriteValueARM_OpARMANDshiftRL(v *Value) bool {
2782 v_1 := v.Args[1]
2783 v_0 := v.Args[0]
2784 b := v.Block
2785
2786
2787 for {
2788 d := auxIntToInt32(v.AuxInt)
2789 if v_0.Op != OpARMMOVWconst {
2790 break
2791 }
2792 c := auxIntToInt32(v_0.AuxInt)
2793 x := v_1
2794 v.reset(OpARMANDconst)
2795 v.AuxInt = int32ToAuxInt(c)
2796 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
2797 v0.AuxInt = int32ToAuxInt(d)
2798 v0.AddArg(x)
2799 v.AddArg(v0)
2800 return true
2801 }
2802
2803
2804 for {
2805 d := auxIntToInt32(v.AuxInt)
2806 x := v_0
2807 if v_1.Op != OpARMMOVWconst {
2808 break
2809 }
2810 c := auxIntToInt32(v_1.AuxInt)
2811 v.reset(OpARMANDconst)
2812 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
2813 v.AddArg(x)
2814 return true
2815 }
2816
2817
2818 for {
2819 c := auxIntToInt32(v.AuxInt)
2820 y := v_0
2821 if y.Op != OpARMSRLconst || auxIntToInt32(y.AuxInt) != c {
2822 break
2823 }
2824 x := y.Args[0]
2825 if x != v_1 {
2826 break
2827 }
2828 v.copyOf(y)
2829 return true
2830 }
2831 return false
2832 }
2833 func rewriteValueARM_OpARMANDshiftRLreg(v *Value) bool {
2834 v_2 := v.Args[2]
2835 v_1 := v.Args[1]
2836 v_0 := v.Args[0]
2837 b := v.Block
2838
2839
2840 for {
2841 if v_0.Op != OpARMMOVWconst {
2842 break
2843 }
2844 c := auxIntToInt32(v_0.AuxInt)
2845 x := v_1
2846 y := v_2
2847 v.reset(OpARMANDconst)
2848 v.AuxInt = int32ToAuxInt(c)
2849 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
2850 v0.AddArg2(x, y)
2851 v.AddArg(v0)
2852 return true
2853 }
2854
2855
2856
2857 for {
2858 x := v_0
2859 y := v_1
2860 if v_2.Op != OpARMMOVWconst {
2861 break
2862 }
2863 c := auxIntToInt32(v_2.AuxInt)
2864 if !(0 <= c && c < 32) {
2865 break
2866 }
2867 v.reset(OpARMANDshiftRL)
2868 v.AuxInt = int32ToAuxInt(c)
2869 v.AddArg2(x, y)
2870 return true
2871 }
2872 return false
2873 }
2874 func rewriteValueARM_OpARMBFX(v *Value) bool {
2875 v_0 := v.Args[0]
2876
2877
2878 for {
2879 c := auxIntToInt32(v.AuxInt)
2880 if v_0.Op != OpARMMOVWconst {
2881 break
2882 }
2883 d := auxIntToInt32(v_0.AuxInt)
2884 v.reset(OpARMMOVWconst)
2885 v.AuxInt = int32ToAuxInt(d << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8)))
2886 return true
2887 }
2888 return false
2889 }
2890 func rewriteValueARM_OpARMBFXU(v *Value) bool {
2891 v_0 := v.Args[0]
2892
2893
2894 for {
2895 c := auxIntToInt32(v.AuxInt)
2896 if v_0.Op != OpARMMOVWconst {
2897 break
2898 }
2899 d := auxIntToInt32(v_0.AuxInt)
2900 v.reset(OpARMMOVWconst)
2901 v.AuxInt = int32ToAuxInt(int32(uint32(d) << (32 - uint32(c&0xff) - uint32(c>>8)) >> (32 - uint32(c>>8))))
2902 return true
2903 }
2904 return false
2905 }
2906 func rewriteValueARM_OpARMBIC(v *Value) bool {
2907 v_1 := v.Args[1]
2908 v_0 := v.Args[0]
2909
2910
2911 for {
2912 x := v_0
2913 if v_1.Op != OpARMMOVWconst {
2914 break
2915 }
2916 c := auxIntToInt32(v_1.AuxInt)
2917 v.reset(OpARMBICconst)
2918 v.AuxInt = int32ToAuxInt(c)
2919 v.AddArg(x)
2920 return true
2921 }
2922
2923
2924 for {
2925 x := v_0
2926 if v_1.Op != OpARMSLLconst {
2927 break
2928 }
2929 c := auxIntToInt32(v_1.AuxInt)
2930 y := v_1.Args[0]
2931 v.reset(OpARMBICshiftLL)
2932 v.AuxInt = int32ToAuxInt(c)
2933 v.AddArg2(x, y)
2934 return true
2935 }
2936
2937
2938 for {
2939 x := v_0
2940 if v_1.Op != OpARMSRLconst {
2941 break
2942 }
2943 c := auxIntToInt32(v_1.AuxInt)
2944 y := v_1.Args[0]
2945 v.reset(OpARMBICshiftRL)
2946 v.AuxInt = int32ToAuxInt(c)
2947 v.AddArg2(x, y)
2948 return true
2949 }
2950
2951
2952 for {
2953 x := v_0
2954 if v_1.Op != OpARMSRAconst {
2955 break
2956 }
2957 c := auxIntToInt32(v_1.AuxInt)
2958 y := v_1.Args[0]
2959 v.reset(OpARMBICshiftRA)
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 != OpARMSLL {
2969 break
2970 }
2971 z := v_1.Args[1]
2972 y := v_1.Args[0]
2973 v.reset(OpARMBICshiftLLreg)
2974 v.AddArg3(x, y, z)
2975 return true
2976 }
2977
2978
2979 for {
2980 x := v_0
2981 if v_1.Op != OpARMSRL {
2982 break
2983 }
2984 z := v_1.Args[1]
2985 y := v_1.Args[0]
2986 v.reset(OpARMBICshiftRLreg)
2987 v.AddArg3(x, y, z)
2988 return true
2989 }
2990
2991
2992 for {
2993 x := v_0
2994 if v_1.Op != OpARMSRA {
2995 break
2996 }
2997 z := v_1.Args[1]
2998 y := v_1.Args[0]
2999 v.reset(OpARMBICshiftRAreg)
3000 v.AddArg3(x, y, z)
3001 return true
3002 }
3003
3004
3005 for {
3006 x := v_0
3007 if x != v_1 {
3008 break
3009 }
3010 v.reset(OpARMMOVWconst)
3011 v.AuxInt = int32ToAuxInt(0)
3012 return true
3013 }
3014 return false
3015 }
3016 func rewriteValueARM_OpARMBICconst(v *Value) bool {
3017 v_0 := v.Args[0]
3018
3019
3020 for {
3021 if auxIntToInt32(v.AuxInt) != 0 {
3022 break
3023 }
3024 x := v_0
3025 v.copyOf(x)
3026 return true
3027 }
3028
3029
3030
3031 for {
3032 c := auxIntToInt32(v.AuxInt)
3033 if !(int32(c) == -1) {
3034 break
3035 }
3036 v.reset(OpARMMOVWconst)
3037 v.AuxInt = int32ToAuxInt(0)
3038 return true
3039 }
3040
3041
3042
3043 for {
3044 c := auxIntToInt32(v.AuxInt)
3045 x := v_0
3046 if !(!isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c))) {
3047 break
3048 }
3049 v.reset(OpARMANDconst)
3050 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
3051 v.AddArg(x)
3052 return true
3053 }
3054
3055
3056
3057 for {
3058 c := auxIntToInt32(v.AuxInt)
3059 x := v_0
3060 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) {
3061 break
3062 }
3063 v.reset(OpARMANDconst)
3064 v.AuxInt = int32ToAuxInt(int32(^uint32(c)))
3065 v.AddArg(x)
3066 return true
3067 }
3068
3069
3070 for {
3071 c := auxIntToInt32(v.AuxInt)
3072 if v_0.Op != OpARMMOVWconst {
3073 break
3074 }
3075 d := auxIntToInt32(v_0.AuxInt)
3076 v.reset(OpARMMOVWconst)
3077 v.AuxInt = int32ToAuxInt(d &^ c)
3078 return true
3079 }
3080
3081
3082 for {
3083 c := auxIntToInt32(v.AuxInt)
3084 if v_0.Op != OpARMBICconst {
3085 break
3086 }
3087 d := auxIntToInt32(v_0.AuxInt)
3088 x := v_0.Args[0]
3089 v.reset(OpARMBICconst)
3090 v.AuxInt = int32ToAuxInt(c | d)
3091 v.AddArg(x)
3092 return true
3093 }
3094 return false
3095 }
3096 func rewriteValueARM_OpARMBICshiftLL(v *Value) bool {
3097 v_1 := v.Args[1]
3098 v_0 := v.Args[0]
3099
3100
3101 for {
3102 d := auxIntToInt32(v.AuxInt)
3103 x := v_0
3104 if v_1.Op != OpARMMOVWconst {
3105 break
3106 }
3107 c := auxIntToInt32(v_1.AuxInt)
3108 v.reset(OpARMBICconst)
3109 v.AuxInt = int32ToAuxInt(c << uint64(d))
3110 v.AddArg(x)
3111 return true
3112 }
3113
3114
3115 for {
3116 c := auxIntToInt32(v.AuxInt)
3117 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
3118 break
3119 }
3120 x := v_0.Args[0]
3121 if x != v_1 {
3122 break
3123 }
3124 v.reset(OpARMMOVWconst)
3125 v.AuxInt = int32ToAuxInt(0)
3126 return true
3127 }
3128 return false
3129 }
3130 func rewriteValueARM_OpARMBICshiftLLreg(v *Value) bool {
3131 v_2 := v.Args[2]
3132 v_1 := v.Args[1]
3133 v_0 := v.Args[0]
3134
3135
3136
3137 for {
3138 x := v_0
3139 y := v_1
3140 if v_2.Op != OpARMMOVWconst {
3141 break
3142 }
3143 c := auxIntToInt32(v_2.AuxInt)
3144 if !(0 <= c && c < 32) {
3145 break
3146 }
3147 v.reset(OpARMBICshiftLL)
3148 v.AuxInt = int32ToAuxInt(c)
3149 v.AddArg2(x, y)
3150 return true
3151 }
3152 return false
3153 }
3154 func rewriteValueARM_OpARMBICshiftRA(v *Value) bool {
3155 v_1 := v.Args[1]
3156 v_0 := v.Args[0]
3157
3158
3159 for {
3160 d := auxIntToInt32(v.AuxInt)
3161 x := v_0
3162 if v_1.Op != OpARMMOVWconst {
3163 break
3164 }
3165 c := auxIntToInt32(v_1.AuxInt)
3166 v.reset(OpARMBICconst)
3167 v.AuxInt = int32ToAuxInt(c >> uint64(d))
3168 v.AddArg(x)
3169 return true
3170 }
3171
3172
3173 for {
3174 c := auxIntToInt32(v.AuxInt)
3175 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
3176 break
3177 }
3178 x := v_0.Args[0]
3179 if x != v_1 {
3180 break
3181 }
3182 v.reset(OpARMMOVWconst)
3183 v.AuxInt = int32ToAuxInt(0)
3184 return true
3185 }
3186 return false
3187 }
3188 func rewriteValueARM_OpARMBICshiftRAreg(v *Value) bool {
3189 v_2 := v.Args[2]
3190 v_1 := v.Args[1]
3191 v_0 := v.Args[0]
3192
3193
3194
3195 for {
3196 x := v_0
3197 y := v_1
3198 if v_2.Op != OpARMMOVWconst {
3199 break
3200 }
3201 c := auxIntToInt32(v_2.AuxInt)
3202 if !(0 <= c && c < 32) {
3203 break
3204 }
3205 v.reset(OpARMBICshiftRA)
3206 v.AuxInt = int32ToAuxInt(c)
3207 v.AddArg2(x, y)
3208 return true
3209 }
3210 return false
3211 }
3212 func rewriteValueARM_OpARMBICshiftRL(v *Value) bool {
3213 v_1 := v.Args[1]
3214 v_0 := v.Args[0]
3215
3216
3217 for {
3218 d := auxIntToInt32(v.AuxInt)
3219 x := v_0
3220 if v_1.Op != OpARMMOVWconst {
3221 break
3222 }
3223 c := auxIntToInt32(v_1.AuxInt)
3224 v.reset(OpARMBICconst)
3225 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3226 v.AddArg(x)
3227 return true
3228 }
3229
3230
3231 for {
3232 c := auxIntToInt32(v.AuxInt)
3233 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
3234 break
3235 }
3236 x := v_0.Args[0]
3237 if x != v_1 {
3238 break
3239 }
3240 v.reset(OpARMMOVWconst)
3241 v.AuxInt = int32ToAuxInt(0)
3242 return true
3243 }
3244 return false
3245 }
3246 func rewriteValueARM_OpARMBICshiftRLreg(v *Value) bool {
3247 v_2 := v.Args[2]
3248 v_1 := v.Args[1]
3249 v_0 := v.Args[0]
3250
3251
3252
3253 for {
3254 x := v_0
3255 y := v_1
3256 if v_2.Op != OpARMMOVWconst {
3257 break
3258 }
3259 c := auxIntToInt32(v_2.AuxInt)
3260 if !(0 <= c && c < 32) {
3261 break
3262 }
3263 v.reset(OpARMBICshiftRL)
3264 v.AuxInt = int32ToAuxInt(c)
3265 v.AddArg2(x, y)
3266 return true
3267 }
3268 return false
3269 }
3270 func rewriteValueARM_OpARMCMN(v *Value) bool {
3271 v_1 := v.Args[1]
3272 v_0 := v.Args[0]
3273
3274
3275 for {
3276 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3277 x := v_0
3278 if v_1.Op != OpARMMOVWconst {
3279 continue
3280 }
3281 c := auxIntToInt32(v_1.AuxInt)
3282 v.reset(OpARMCMNconst)
3283 v.AuxInt = int32ToAuxInt(c)
3284 v.AddArg(x)
3285 return true
3286 }
3287 break
3288 }
3289
3290
3291 for {
3292 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3293 x := v_0
3294 if v_1.Op != OpARMSLLconst {
3295 continue
3296 }
3297 c := auxIntToInt32(v_1.AuxInt)
3298 y := v_1.Args[0]
3299 v.reset(OpARMCMNshiftLL)
3300 v.AuxInt = int32ToAuxInt(c)
3301 v.AddArg2(x, y)
3302 return true
3303 }
3304 break
3305 }
3306
3307
3308 for {
3309 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3310 x := v_0
3311 if v_1.Op != OpARMSRLconst {
3312 continue
3313 }
3314 c := auxIntToInt32(v_1.AuxInt)
3315 y := v_1.Args[0]
3316 v.reset(OpARMCMNshiftRL)
3317 v.AuxInt = int32ToAuxInt(c)
3318 v.AddArg2(x, y)
3319 return true
3320 }
3321 break
3322 }
3323
3324
3325 for {
3326 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3327 x := v_0
3328 if v_1.Op != OpARMSRAconst {
3329 continue
3330 }
3331 c := auxIntToInt32(v_1.AuxInt)
3332 y := v_1.Args[0]
3333 v.reset(OpARMCMNshiftRA)
3334 v.AuxInt = int32ToAuxInt(c)
3335 v.AddArg2(x, y)
3336 return true
3337 }
3338 break
3339 }
3340
3341
3342 for {
3343 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3344 x := v_0
3345 if v_1.Op != OpARMSLL {
3346 continue
3347 }
3348 z := v_1.Args[1]
3349 y := v_1.Args[0]
3350 v.reset(OpARMCMNshiftLLreg)
3351 v.AddArg3(x, y, z)
3352 return true
3353 }
3354 break
3355 }
3356
3357
3358 for {
3359 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3360 x := v_0
3361 if v_1.Op != OpARMSRL {
3362 continue
3363 }
3364 z := v_1.Args[1]
3365 y := v_1.Args[0]
3366 v.reset(OpARMCMNshiftRLreg)
3367 v.AddArg3(x, y, z)
3368 return true
3369 }
3370 break
3371 }
3372
3373
3374 for {
3375 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3376 x := v_0
3377 if v_1.Op != OpARMSRA {
3378 continue
3379 }
3380 z := v_1.Args[1]
3381 y := v_1.Args[0]
3382 v.reset(OpARMCMNshiftRAreg)
3383 v.AddArg3(x, y, z)
3384 return true
3385 }
3386 break
3387 }
3388 return false
3389 }
3390 func rewriteValueARM_OpARMCMNconst(v *Value) bool {
3391 v_0 := v.Args[0]
3392
3393
3394 for {
3395 y := auxIntToInt32(v.AuxInt)
3396 if v_0.Op != OpARMMOVWconst {
3397 break
3398 }
3399 x := auxIntToInt32(v_0.AuxInt)
3400 v.reset(OpARMFlagConstant)
3401 v.AuxInt = flagConstantToAuxInt(addFlags32(x, y))
3402 return true
3403 }
3404 return false
3405 }
3406 func rewriteValueARM_OpARMCMNshiftLL(v *Value) bool {
3407 v_1 := v.Args[1]
3408 v_0 := v.Args[0]
3409 b := v.Block
3410
3411
3412 for {
3413 d := auxIntToInt32(v.AuxInt)
3414 if v_0.Op != OpARMMOVWconst {
3415 break
3416 }
3417 c := auxIntToInt32(v_0.AuxInt)
3418 x := v_1
3419 v.reset(OpARMCMNconst)
3420 v.AuxInt = int32ToAuxInt(c)
3421 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
3422 v0.AuxInt = int32ToAuxInt(d)
3423 v0.AddArg(x)
3424 v.AddArg(v0)
3425 return true
3426 }
3427
3428
3429 for {
3430 d := auxIntToInt32(v.AuxInt)
3431 x := v_0
3432 if v_1.Op != OpARMMOVWconst {
3433 break
3434 }
3435 c := auxIntToInt32(v_1.AuxInt)
3436 v.reset(OpARMCMNconst)
3437 v.AuxInt = int32ToAuxInt(c << uint64(d))
3438 v.AddArg(x)
3439 return true
3440 }
3441 return false
3442 }
3443 func rewriteValueARM_OpARMCMNshiftLLreg(v *Value) bool {
3444 v_2 := v.Args[2]
3445 v_1 := v.Args[1]
3446 v_0 := v.Args[0]
3447 b := v.Block
3448
3449
3450 for {
3451 if v_0.Op != OpARMMOVWconst {
3452 break
3453 }
3454 c := auxIntToInt32(v_0.AuxInt)
3455 x := v_1
3456 y := v_2
3457 v.reset(OpARMCMNconst)
3458 v.AuxInt = int32ToAuxInt(c)
3459 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
3460 v0.AddArg2(x, y)
3461 v.AddArg(v0)
3462 return true
3463 }
3464
3465
3466
3467 for {
3468 x := v_0
3469 y := v_1
3470 if v_2.Op != OpARMMOVWconst {
3471 break
3472 }
3473 c := auxIntToInt32(v_2.AuxInt)
3474 if !(0 <= c && c < 32) {
3475 break
3476 }
3477 v.reset(OpARMCMNshiftLL)
3478 v.AuxInt = int32ToAuxInt(c)
3479 v.AddArg2(x, y)
3480 return true
3481 }
3482 return false
3483 }
3484 func rewriteValueARM_OpARMCMNshiftRA(v *Value) bool {
3485 v_1 := v.Args[1]
3486 v_0 := v.Args[0]
3487 b := v.Block
3488
3489
3490 for {
3491 d := auxIntToInt32(v.AuxInt)
3492 if v_0.Op != OpARMMOVWconst {
3493 break
3494 }
3495 c := auxIntToInt32(v_0.AuxInt)
3496 x := v_1
3497 v.reset(OpARMCMNconst)
3498 v.AuxInt = int32ToAuxInt(c)
3499 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
3500 v0.AuxInt = int32ToAuxInt(d)
3501 v0.AddArg(x)
3502 v.AddArg(v0)
3503 return true
3504 }
3505
3506
3507 for {
3508 d := auxIntToInt32(v.AuxInt)
3509 x := v_0
3510 if v_1.Op != OpARMMOVWconst {
3511 break
3512 }
3513 c := auxIntToInt32(v_1.AuxInt)
3514 v.reset(OpARMCMNconst)
3515 v.AuxInt = int32ToAuxInt(c >> uint64(d))
3516 v.AddArg(x)
3517 return true
3518 }
3519 return false
3520 }
3521 func rewriteValueARM_OpARMCMNshiftRAreg(v *Value) bool {
3522 v_2 := v.Args[2]
3523 v_1 := v.Args[1]
3524 v_0 := v.Args[0]
3525 b := v.Block
3526
3527
3528 for {
3529 if v_0.Op != OpARMMOVWconst {
3530 break
3531 }
3532 c := auxIntToInt32(v_0.AuxInt)
3533 x := v_1
3534 y := v_2
3535 v.reset(OpARMCMNconst)
3536 v.AuxInt = int32ToAuxInt(c)
3537 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
3538 v0.AddArg2(x, y)
3539 v.AddArg(v0)
3540 return true
3541 }
3542
3543
3544
3545 for {
3546 x := v_0
3547 y := v_1
3548 if v_2.Op != OpARMMOVWconst {
3549 break
3550 }
3551 c := auxIntToInt32(v_2.AuxInt)
3552 if !(0 <= c && c < 32) {
3553 break
3554 }
3555 v.reset(OpARMCMNshiftRA)
3556 v.AuxInt = int32ToAuxInt(c)
3557 v.AddArg2(x, y)
3558 return true
3559 }
3560 return false
3561 }
3562 func rewriteValueARM_OpARMCMNshiftRL(v *Value) bool {
3563 v_1 := v.Args[1]
3564 v_0 := v.Args[0]
3565 b := v.Block
3566
3567
3568 for {
3569 d := auxIntToInt32(v.AuxInt)
3570 if v_0.Op != OpARMMOVWconst {
3571 break
3572 }
3573 c := auxIntToInt32(v_0.AuxInt)
3574 x := v_1
3575 v.reset(OpARMCMNconst)
3576 v.AuxInt = int32ToAuxInt(c)
3577 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
3578 v0.AuxInt = int32ToAuxInt(d)
3579 v0.AddArg(x)
3580 v.AddArg(v0)
3581 return true
3582 }
3583
3584
3585 for {
3586 d := auxIntToInt32(v.AuxInt)
3587 x := v_0
3588 if v_1.Op != OpARMMOVWconst {
3589 break
3590 }
3591 c := auxIntToInt32(v_1.AuxInt)
3592 v.reset(OpARMCMNconst)
3593 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
3594 v.AddArg(x)
3595 return true
3596 }
3597 return false
3598 }
3599 func rewriteValueARM_OpARMCMNshiftRLreg(v *Value) bool {
3600 v_2 := v.Args[2]
3601 v_1 := v.Args[1]
3602 v_0 := v.Args[0]
3603 b := v.Block
3604
3605
3606 for {
3607 if v_0.Op != OpARMMOVWconst {
3608 break
3609 }
3610 c := auxIntToInt32(v_0.AuxInt)
3611 x := v_1
3612 y := v_2
3613 v.reset(OpARMCMNconst)
3614 v.AuxInt = int32ToAuxInt(c)
3615 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
3616 v0.AddArg2(x, y)
3617 v.AddArg(v0)
3618 return true
3619 }
3620
3621
3622
3623 for {
3624 x := v_0
3625 y := v_1
3626 if v_2.Op != OpARMMOVWconst {
3627 break
3628 }
3629 c := auxIntToInt32(v_2.AuxInt)
3630 if !(0 <= c && c < 32) {
3631 break
3632 }
3633 v.reset(OpARMCMNshiftRL)
3634 v.AuxInt = int32ToAuxInt(c)
3635 v.AddArg2(x, y)
3636 return true
3637 }
3638 return false
3639 }
3640 func rewriteValueARM_OpARMCMOVWHSconst(v *Value) bool {
3641 v_1 := v.Args[1]
3642 v_0 := v.Args[0]
3643
3644
3645
3646 for {
3647 c := auxIntToInt32(v.AuxInt)
3648 if v_1.Op != OpARMFlagConstant {
3649 break
3650 }
3651 fc := auxIntToFlagConstant(v_1.AuxInt)
3652 if !(fc.uge()) {
3653 break
3654 }
3655 v.reset(OpARMMOVWconst)
3656 v.AuxInt = int32ToAuxInt(c)
3657 return true
3658 }
3659
3660
3661
3662 for {
3663 x := v_0
3664 if v_1.Op != OpARMFlagConstant {
3665 break
3666 }
3667 fc := auxIntToFlagConstant(v_1.AuxInt)
3668 if !(fc.ult()) {
3669 break
3670 }
3671 v.copyOf(x)
3672 return true
3673 }
3674
3675
3676 for {
3677 c := auxIntToInt32(v.AuxInt)
3678 x := v_0
3679 if v_1.Op != OpARMInvertFlags {
3680 break
3681 }
3682 flags := v_1.Args[0]
3683 v.reset(OpARMCMOVWLSconst)
3684 v.AuxInt = int32ToAuxInt(c)
3685 v.AddArg2(x, flags)
3686 return true
3687 }
3688 return false
3689 }
3690 func rewriteValueARM_OpARMCMOVWLSconst(v *Value) bool {
3691 v_1 := v.Args[1]
3692 v_0 := v.Args[0]
3693
3694
3695
3696 for {
3697 c := auxIntToInt32(v.AuxInt)
3698 if v_1.Op != OpARMFlagConstant {
3699 break
3700 }
3701 fc := auxIntToFlagConstant(v_1.AuxInt)
3702 if !(fc.ule()) {
3703 break
3704 }
3705 v.reset(OpARMMOVWconst)
3706 v.AuxInt = int32ToAuxInt(c)
3707 return true
3708 }
3709
3710
3711
3712 for {
3713 x := v_0
3714 if v_1.Op != OpARMFlagConstant {
3715 break
3716 }
3717 fc := auxIntToFlagConstant(v_1.AuxInt)
3718 if !(fc.ugt()) {
3719 break
3720 }
3721 v.copyOf(x)
3722 return true
3723 }
3724
3725
3726 for {
3727 c := auxIntToInt32(v.AuxInt)
3728 x := v_0
3729 if v_1.Op != OpARMInvertFlags {
3730 break
3731 }
3732 flags := v_1.Args[0]
3733 v.reset(OpARMCMOVWHSconst)
3734 v.AuxInt = int32ToAuxInt(c)
3735 v.AddArg2(x, flags)
3736 return true
3737 }
3738 return false
3739 }
3740 func rewriteValueARM_OpARMCMP(v *Value) bool {
3741 v_1 := v.Args[1]
3742 v_0 := v.Args[0]
3743 b := v.Block
3744
3745
3746 for {
3747 x := v_0
3748 if v_1.Op != OpARMMOVWconst {
3749 break
3750 }
3751 c := auxIntToInt32(v_1.AuxInt)
3752 v.reset(OpARMCMPconst)
3753 v.AuxInt = int32ToAuxInt(c)
3754 v.AddArg(x)
3755 return true
3756 }
3757
3758
3759 for {
3760 if v_0.Op != OpARMMOVWconst {
3761 break
3762 }
3763 c := auxIntToInt32(v_0.AuxInt)
3764 x := v_1
3765 v.reset(OpARMInvertFlags)
3766 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
3767 v0.AuxInt = int32ToAuxInt(c)
3768 v0.AddArg(x)
3769 v.AddArg(v0)
3770 return true
3771 }
3772
3773
3774
3775 for {
3776 x := v_0
3777 y := v_1
3778 if !(canonLessThan(x, y)) {
3779 break
3780 }
3781 v.reset(OpARMInvertFlags)
3782 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
3783 v0.AddArg2(y, x)
3784 v.AddArg(v0)
3785 return true
3786 }
3787
3788
3789 for {
3790 x := v_0
3791 if v_1.Op != OpARMSLLconst {
3792 break
3793 }
3794 c := auxIntToInt32(v_1.AuxInt)
3795 y := v_1.Args[0]
3796 v.reset(OpARMCMPshiftLL)
3797 v.AuxInt = int32ToAuxInt(c)
3798 v.AddArg2(x, y)
3799 return true
3800 }
3801
3802
3803 for {
3804 if v_0.Op != OpARMSLLconst {
3805 break
3806 }
3807 c := auxIntToInt32(v_0.AuxInt)
3808 y := v_0.Args[0]
3809 x := v_1
3810 v.reset(OpARMInvertFlags)
3811 v0 := b.NewValue0(v.Pos, OpARMCMPshiftLL, types.TypeFlags)
3812 v0.AuxInt = int32ToAuxInt(c)
3813 v0.AddArg2(x, y)
3814 v.AddArg(v0)
3815 return true
3816 }
3817
3818
3819 for {
3820 x := v_0
3821 if v_1.Op != OpARMSRLconst {
3822 break
3823 }
3824 c := auxIntToInt32(v_1.AuxInt)
3825 y := v_1.Args[0]
3826 v.reset(OpARMCMPshiftRL)
3827 v.AuxInt = int32ToAuxInt(c)
3828 v.AddArg2(x, y)
3829 return true
3830 }
3831
3832
3833 for {
3834 if v_0.Op != OpARMSRLconst {
3835 break
3836 }
3837 c := auxIntToInt32(v_0.AuxInt)
3838 y := v_0.Args[0]
3839 x := v_1
3840 v.reset(OpARMInvertFlags)
3841 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRL, types.TypeFlags)
3842 v0.AuxInt = int32ToAuxInt(c)
3843 v0.AddArg2(x, y)
3844 v.AddArg(v0)
3845 return true
3846 }
3847
3848
3849 for {
3850 x := v_0
3851 if v_1.Op != OpARMSRAconst {
3852 break
3853 }
3854 c := auxIntToInt32(v_1.AuxInt)
3855 y := v_1.Args[0]
3856 v.reset(OpARMCMPshiftRA)
3857 v.AuxInt = int32ToAuxInt(c)
3858 v.AddArg2(x, y)
3859 return true
3860 }
3861
3862
3863 for {
3864 if v_0.Op != OpARMSRAconst {
3865 break
3866 }
3867 c := auxIntToInt32(v_0.AuxInt)
3868 y := v_0.Args[0]
3869 x := v_1
3870 v.reset(OpARMInvertFlags)
3871 v0 := b.NewValue0(v.Pos, OpARMCMPshiftRA, types.TypeFlags)
3872 v0.AuxInt = int32ToAuxInt(c)
3873 v0.AddArg2(x, y)
3874 v.AddArg(v0)
3875 return true
3876 }
3877
3878
3879 for {
3880 x := v_0
3881 if v_1.Op != OpARMSLL {
3882 break
3883 }
3884 z := v_1.Args[1]
3885 y := v_1.Args[0]
3886 v.reset(OpARMCMPshiftLLreg)
3887 v.AddArg3(x, y, z)
3888 return true
3889 }
3890
3891
3892 for {
3893 if v_0.Op != OpARMSLL {
3894 break
3895 }
3896 z := v_0.Args[1]
3897 y := v_0.Args[0]
3898 x := v_1
3899 v.reset(OpARMInvertFlags)
3900 v0 := b.NewValue0(v.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
3901 v0.AddArg3(x, y, z)
3902 v.AddArg(v0)
3903 return true
3904 }
3905
3906
3907 for {
3908 x := v_0
3909 if v_1.Op != OpARMSRL {
3910 break
3911 }
3912 z := v_1.Args[1]
3913 y := v_1.Args[0]
3914 v.reset(OpARMCMPshiftRLreg)
3915 v.AddArg3(x, y, z)
3916 return true
3917 }
3918
3919
3920 for {
3921 if v_0.Op != OpARMSRL {
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, OpARMCMPshiftRLreg, 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 != OpARMSRA {
3938 break
3939 }
3940 z := v_1.Args[1]
3941 y := v_1.Args[0]
3942 v.reset(OpARMCMPshiftRAreg)
3943 v.AddArg3(x, y, z)
3944 return true
3945 }
3946
3947
3948 for {
3949 if v_0.Op != OpARMSRA {
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, OpARMCMPshiftRAreg, types.TypeFlags)
3957 v0.AddArg3(x, y, z)
3958 v.AddArg(v0)
3959 return true
3960 }
3961 return false
3962 }
3963 func rewriteValueARM_OpARMCMPD(v *Value) bool {
3964 v_1 := v.Args[1]
3965 v_0 := v.Args[0]
3966
3967
3968 for {
3969 x := v_0
3970 if v_1.Op != OpARMMOVDconst || auxIntToFloat64(v_1.AuxInt) != 0 {
3971 break
3972 }
3973 v.reset(OpARMCMPD0)
3974 v.AddArg(x)
3975 return true
3976 }
3977 return false
3978 }
3979 func rewriteValueARM_OpARMCMPF(v *Value) bool {
3980 v_1 := v.Args[1]
3981 v_0 := v.Args[0]
3982
3983
3984 for {
3985 x := v_0
3986 if v_1.Op != OpARMMOVFconst || auxIntToFloat64(v_1.AuxInt) != 0 {
3987 break
3988 }
3989 v.reset(OpARMCMPF0)
3990 v.AddArg(x)
3991 return true
3992 }
3993 return false
3994 }
3995 func rewriteValueARM_OpARMCMPconst(v *Value) bool {
3996 v_0 := v.Args[0]
3997
3998
3999 for {
4000 y := auxIntToInt32(v.AuxInt)
4001 if v_0.Op != OpARMMOVWconst {
4002 break
4003 }
4004 x := auxIntToInt32(v_0.AuxInt)
4005 v.reset(OpARMFlagConstant)
4006 v.AuxInt = flagConstantToAuxInt(subFlags32(x, y))
4007 return true
4008 }
4009
4010
4011
4012 for {
4013 c := auxIntToInt32(v.AuxInt)
4014 if v_0.Op != OpARMMOVBUreg || !(0xff < c) {
4015 break
4016 }
4017 v.reset(OpARMFlagConstant)
4018 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4019 return true
4020 }
4021
4022
4023
4024 for {
4025 c := auxIntToInt32(v.AuxInt)
4026 if v_0.Op != OpARMMOVHUreg || !(0xffff < c) {
4027 break
4028 }
4029 v.reset(OpARMFlagConstant)
4030 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4031 return true
4032 }
4033
4034
4035
4036 for {
4037 n := auxIntToInt32(v.AuxInt)
4038 if v_0.Op != OpARMANDconst {
4039 break
4040 }
4041 m := auxIntToInt32(v_0.AuxInt)
4042 if !(0 <= m && m < n) {
4043 break
4044 }
4045 v.reset(OpARMFlagConstant)
4046 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4047 return true
4048 }
4049
4050
4051
4052 for {
4053 n := auxIntToInt32(v.AuxInt)
4054 if v_0.Op != OpARMSRLconst {
4055 break
4056 }
4057 c := auxIntToInt32(v_0.AuxInt)
4058 if !(0 <= n && 0 < c && c <= 32 && (1<<uint32(32-c)) <= uint32(n)) {
4059 break
4060 }
4061 v.reset(OpARMFlagConstant)
4062 v.AuxInt = flagConstantToAuxInt(subFlags32(0, 1))
4063 return true
4064 }
4065 return false
4066 }
4067 func rewriteValueARM_OpARMCMPshiftLL(v *Value) bool {
4068 v_1 := v.Args[1]
4069 v_0 := v.Args[0]
4070 b := v.Block
4071
4072
4073 for {
4074 d := auxIntToInt32(v.AuxInt)
4075 if v_0.Op != OpARMMOVWconst {
4076 break
4077 }
4078 c := auxIntToInt32(v_0.AuxInt)
4079 x := v_1
4080 v.reset(OpARMInvertFlags)
4081 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4082 v0.AuxInt = int32ToAuxInt(c)
4083 v1 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
4084 v1.AuxInt = int32ToAuxInt(d)
4085 v1.AddArg(x)
4086 v0.AddArg(v1)
4087 v.AddArg(v0)
4088 return true
4089 }
4090
4091
4092 for {
4093 d := auxIntToInt32(v.AuxInt)
4094 x := v_0
4095 if v_1.Op != OpARMMOVWconst {
4096 break
4097 }
4098 c := auxIntToInt32(v_1.AuxInt)
4099 v.reset(OpARMCMPconst)
4100 v.AuxInt = int32ToAuxInt(c << uint64(d))
4101 v.AddArg(x)
4102 return true
4103 }
4104 return false
4105 }
4106 func rewriteValueARM_OpARMCMPshiftLLreg(v *Value) bool {
4107 v_2 := v.Args[2]
4108 v_1 := v.Args[1]
4109 v_0 := v.Args[0]
4110 b := v.Block
4111
4112
4113 for {
4114 if v_0.Op != OpARMMOVWconst {
4115 break
4116 }
4117 c := auxIntToInt32(v_0.AuxInt)
4118 x := v_1
4119 y := v_2
4120 v.reset(OpARMInvertFlags)
4121 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4122 v0.AuxInt = int32ToAuxInt(c)
4123 v1 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
4124 v1.AddArg2(x, y)
4125 v0.AddArg(v1)
4126 v.AddArg(v0)
4127 return true
4128 }
4129
4130
4131
4132 for {
4133 x := v_0
4134 y := v_1
4135 if v_2.Op != OpARMMOVWconst {
4136 break
4137 }
4138 c := auxIntToInt32(v_2.AuxInt)
4139 if !(0 <= c && c < 32) {
4140 break
4141 }
4142 v.reset(OpARMCMPshiftLL)
4143 v.AuxInt = int32ToAuxInt(c)
4144 v.AddArg2(x, y)
4145 return true
4146 }
4147 return false
4148 }
4149 func rewriteValueARM_OpARMCMPshiftRA(v *Value) bool {
4150 v_1 := v.Args[1]
4151 v_0 := v.Args[0]
4152 b := v.Block
4153
4154
4155 for {
4156 d := auxIntToInt32(v.AuxInt)
4157 if v_0.Op != OpARMMOVWconst {
4158 break
4159 }
4160 c := auxIntToInt32(v_0.AuxInt)
4161 x := v_1
4162 v.reset(OpARMInvertFlags)
4163 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4164 v0.AuxInt = int32ToAuxInt(c)
4165 v1 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
4166 v1.AuxInt = int32ToAuxInt(d)
4167 v1.AddArg(x)
4168 v0.AddArg(v1)
4169 v.AddArg(v0)
4170 return true
4171 }
4172
4173
4174 for {
4175 d := auxIntToInt32(v.AuxInt)
4176 x := v_0
4177 if v_1.Op != OpARMMOVWconst {
4178 break
4179 }
4180 c := auxIntToInt32(v_1.AuxInt)
4181 v.reset(OpARMCMPconst)
4182 v.AuxInt = int32ToAuxInt(c >> uint64(d))
4183 v.AddArg(x)
4184 return true
4185 }
4186 return false
4187 }
4188 func rewriteValueARM_OpARMCMPshiftRAreg(v *Value) bool {
4189 v_2 := v.Args[2]
4190 v_1 := v.Args[1]
4191 v_0 := v.Args[0]
4192 b := v.Block
4193
4194
4195 for {
4196 if v_0.Op != OpARMMOVWconst {
4197 break
4198 }
4199 c := auxIntToInt32(v_0.AuxInt)
4200 x := v_1
4201 y := v_2
4202 v.reset(OpARMInvertFlags)
4203 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4204 v0.AuxInt = int32ToAuxInt(c)
4205 v1 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
4206 v1.AddArg2(x, y)
4207 v0.AddArg(v1)
4208 v.AddArg(v0)
4209 return true
4210 }
4211
4212
4213
4214 for {
4215 x := v_0
4216 y := v_1
4217 if v_2.Op != OpARMMOVWconst {
4218 break
4219 }
4220 c := auxIntToInt32(v_2.AuxInt)
4221 if !(0 <= c && c < 32) {
4222 break
4223 }
4224 v.reset(OpARMCMPshiftRA)
4225 v.AuxInt = int32ToAuxInt(c)
4226 v.AddArg2(x, y)
4227 return true
4228 }
4229 return false
4230 }
4231 func rewriteValueARM_OpARMCMPshiftRL(v *Value) bool {
4232 v_1 := v.Args[1]
4233 v_0 := v.Args[0]
4234 b := v.Block
4235
4236
4237 for {
4238 d := auxIntToInt32(v.AuxInt)
4239 if v_0.Op != OpARMMOVWconst {
4240 break
4241 }
4242 c := auxIntToInt32(v_0.AuxInt)
4243 x := v_1
4244 v.reset(OpARMInvertFlags)
4245 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4246 v0.AuxInt = int32ToAuxInt(c)
4247 v1 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
4248 v1.AuxInt = int32ToAuxInt(d)
4249 v1.AddArg(x)
4250 v0.AddArg(v1)
4251 v.AddArg(v0)
4252 return true
4253 }
4254
4255
4256 for {
4257 d := auxIntToInt32(v.AuxInt)
4258 x := v_0
4259 if v_1.Op != OpARMMOVWconst {
4260 break
4261 }
4262 c := auxIntToInt32(v_1.AuxInt)
4263 v.reset(OpARMCMPconst)
4264 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
4265 v.AddArg(x)
4266 return true
4267 }
4268 return false
4269 }
4270 func rewriteValueARM_OpARMCMPshiftRLreg(v *Value) bool {
4271 v_2 := v.Args[2]
4272 v_1 := v.Args[1]
4273 v_0 := v.Args[0]
4274 b := v.Block
4275
4276
4277 for {
4278 if v_0.Op != OpARMMOVWconst {
4279 break
4280 }
4281 c := auxIntToInt32(v_0.AuxInt)
4282 x := v_1
4283 y := v_2
4284 v.reset(OpARMInvertFlags)
4285 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
4286 v0.AuxInt = int32ToAuxInt(c)
4287 v1 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
4288 v1.AddArg2(x, y)
4289 v0.AddArg(v1)
4290 v.AddArg(v0)
4291 return true
4292 }
4293
4294
4295
4296 for {
4297 x := v_0
4298 y := v_1
4299 if v_2.Op != OpARMMOVWconst {
4300 break
4301 }
4302 c := auxIntToInt32(v_2.AuxInt)
4303 if !(0 <= c && c < 32) {
4304 break
4305 }
4306 v.reset(OpARMCMPshiftRL)
4307 v.AuxInt = int32ToAuxInt(c)
4308 v.AddArg2(x, y)
4309 return true
4310 }
4311 return false
4312 }
4313 func rewriteValueARM_OpARMEqual(v *Value) bool {
4314 v_0 := v.Args[0]
4315
4316
4317 for {
4318 if v_0.Op != OpARMFlagConstant {
4319 break
4320 }
4321 fc := auxIntToFlagConstant(v_0.AuxInt)
4322 v.reset(OpARMMOVWconst)
4323 v.AuxInt = int32ToAuxInt(b2i32(fc.eq()))
4324 return true
4325 }
4326
4327
4328 for {
4329 if v_0.Op != OpARMInvertFlags {
4330 break
4331 }
4332 x := v_0.Args[0]
4333 v.reset(OpARMEqual)
4334 v.AddArg(x)
4335 return true
4336 }
4337 return false
4338 }
4339 func rewriteValueARM_OpARMGreaterEqual(v *Value) bool {
4340 v_0 := v.Args[0]
4341
4342
4343 for {
4344 if v_0.Op != OpARMFlagConstant {
4345 break
4346 }
4347 fc := auxIntToFlagConstant(v_0.AuxInt)
4348 v.reset(OpARMMOVWconst)
4349 v.AuxInt = int32ToAuxInt(b2i32(fc.ge()))
4350 return true
4351 }
4352
4353
4354 for {
4355 if v_0.Op != OpARMInvertFlags {
4356 break
4357 }
4358 x := v_0.Args[0]
4359 v.reset(OpARMLessEqual)
4360 v.AddArg(x)
4361 return true
4362 }
4363 return false
4364 }
4365 func rewriteValueARM_OpARMGreaterEqualU(v *Value) bool {
4366 v_0 := v.Args[0]
4367
4368
4369 for {
4370 if v_0.Op != OpARMFlagConstant {
4371 break
4372 }
4373 fc := auxIntToFlagConstant(v_0.AuxInt)
4374 v.reset(OpARMMOVWconst)
4375 v.AuxInt = int32ToAuxInt(b2i32(fc.uge()))
4376 return true
4377 }
4378
4379
4380 for {
4381 if v_0.Op != OpARMInvertFlags {
4382 break
4383 }
4384 x := v_0.Args[0]
4385 v.reset(OpARMLessEqualU)
4386 v.AddArg(x)
4387 return true
4388 }
4389 return false
4390 }
4391 func rewriteValueARM_OpARMGreaterThan(v *Value) bool {
4392 v_0 := v.Args[0]
4393
4394
4395 for {
4396 if v_0.Op != OpARMFlagConstant {
4397 break
4398 }
4399 fc := auxIntToFlagConstant(v_0.AuxInt)
4400 v.reset(OpARMMOVWconst)
4401 v.AuxInt = int32ToAuxInt(b2i32(fc.gt()))
4402 return true
4403 }
4404
4405
4406 for {
4407 if v_0.Op != OpARMInvertFlags {
4408 break
4409 }
4410 x := v_0.Args[0]
4411 v.reset(OpARMLessThan)
4412 v.AddArg(x)
4413 return true
4414 }
4415 return false
4416 }
4417 func rewriteValueARM_OpARMGreaterThanU(v *Value) bool {
4418 v_0 := v.Args[0]
4419
4420
4421 for {
4422 if v_0.Op != OpARMFlagConstant {
4423 break
4424 }
4425 fc := auxIntToFlagConstant(v_0.AuxInt)
4426 v.reset(OpARMMOVWconst)
4427 v.AuxInt = int32ToAuxInt(b2i32(fc.ugt()))
4428 return true
4429 }
4430
4431
4432 for {
4433 if v_0.Op != OpARMInvertFlags {
4434 break
4435 }
4436 x := v_0.Args[0]
4437 v.reset(OpARMLessThanU)
4438 v.AddArg(x)
4439 return true
4440 }
4441 return false
4442 }
4443 func rewriteValueARM_OpARMLessEqual(v *Value) bool {
4444 v_0 := v.Args[0]
4445
4446
4447 for {
4448 if v_0.Op != OpARMFlagConstant {
4449 break
4450 }
4451 fc := auxIntToFlagConstant(v_0.AuxInt)
4452 v.reset(OpARMMOVWconst)
4453 v.AuxInt = int32ToAuxInt(b2i32(fc.le()))
4454 return true
4455 }
4456
4457
4458 for {
4459 if v_0.Op != OpARMInvertFlags {
4460 break
4461 }
4462 x := v_0.Args[0]
4463 v.reset(OpARMGreaterEqual)
4464 v.AddArg(x)
4465 return true
4466 }
4467 return false
4468 }
4469 func rewriteValueARM_OpARMLessEqualU(v *Value) bool {
4470 v_0 := v.Args[0]
4471
4472
4473 for {
4474 if v_0.Op != OpARMFlagConstant {
4475 break
4476 }
4477 fc := auxIntToFlagConstant(v_0.AuxInt)
4478 v.reset(OpARMMOVWconst)
4479 v.AuxInt = int32ToAuxInt(b2i32(fc.ule()))
4480 return true
4481 }
4482
4483
4484 for {
4485 if v_0.Op != OpARMInvertFlags {
4486 break
4487 }
4488 x := v_0.Args[0]
4489 v.reset(OpARMGreaterEqualU)
4490 v.AddArg(x)
4491 return true
4492 }
4493 return false
4494 }
4495 func rewriteValueARM_OpARMLessThan(v *Value) bool {
4496 v_0 := v.Args[0]
4497
4498
4499 for {
4500 if v_0.Op != OpARMFlagConstant {
4501 break
4502 }
4503 fc := auxIntToFlagConstant(v_0.AuxInt)
4504 v.reset(OpARMMOVWconst)
4505 v.AuxInt = int32ToAuxInt(b2i32(fc.lt()))
4506 return true
4507 }
4508
4509
4510 for {
4511 if v_0.Op != OpARMInvertFlags {
4512 break
4513 }
4514 x := v_0.Args[0]
4515 v.reset(OpARMGreaterThan)
4516 v.AddArg(x)
4517 return true
4518 }
4519 return false
4520 }
4521 func rewriteValueARM_OpARMLessThanU(v *Value) bool {
4522 v_0 := v.Args[0]
4523
4524
4525 for {
4526 if v_0.Op != OpARMFlagConstant {
4527 break
4528 }
4529 fc := auxIntToFlagConstant(v_0.AuxInt)
4530 v.reset(OpARMMOVWconst)
4531 v.AuxInt = int32ToAuxInt(b2i32(fc.ult()))
4532 return true
4533 }
4534
4535
4536 for {
4537 if v_0.Op != OpARMInvertFlags {
4538 break
4539 }
4540 x := v_0.Args[0]
4541 v.reset(OpARMGreaterThanU)
4542 v.AddArg(x)
4543 return true
4544 }
4545 return false
4546 }
4547 func rewriteValueARM_OpARMMOVBUload(v *Value) bool {
4548 v_1 := v.Args[1]
4549 v_0 := v.Args[0]
4550
4551
4552 for {
4553 off1 := auxIntToInt32(v.AuxInt)
4554 sym := auxToSym(v.Aux)
4555 if v_0.Op != OpARMADDconst {
4556 break
4557 }
4558 off2 := auxIntToInt32(v_0.AuxInt)
4559 ptr := v_0.Args[0]
4560 mem := v_1
4561 v.reset(OpARMMOVBUload)
4562 v.AuxInt = int32ToAuxInt(off1 + off2)
4563 v.Aux = symToAux(sym)
4564 v.AddArg2(ptr, mem)
4565 return true
4566 }
4567
4568
4569 for {
4570 off1 := auxIntToInt32(v.AuxInt)
4571 sym := auxToSym(v.Aux)
4572 if v_0.Op != OpARMSUBconst {
4573 break
4574 }
4575 off2 := auxIntToInt32(v_0.AuxInt)
4576 ptr := v_0.Args[0]
4577 mem := v_1
4578 v.reset(OpARMMOVBUload)
4579 v.AuxInt = int32ToAuxInt(off1 - off2)
4580 v.Aux = symToAux(sym)
4581 v.AddArg2(ptr, mem)
4582 return true
4583 }
4584
4585
4586
4587 for {
4588 off1 := auxIntToInt32(v.AuxInt)
4589 sym1 := auxToSym(v.Aux)
4590 if v_0.Op != OpARMMOVWaddr {
4591 break
4592 }
4593 off2 := auxIntToInt32(v_0.AuxInt)
4594 sym2 := auxToSym(v_0.Aux)
4595 ptr := v_0.Args[0]
4596 mem := v_1
4597 if !(canMergeSym(sym1, sym2)) {
4598 break
4599 }
4600 v.reset(OpARMMOVBUload)
4601 v.AuxInt = int32ToAuxInt(off1 + off2)
4602 v.Aux = symToAux(mergeSym(sym1, sym2))
4603 v.AddArg2(ptr, mem)
4604 return true
4605 }
4606
4607
4608
4609 for {
4610 off := auxIntToInt32(v.AuxInt)
4611 sym := auxToSym(v.Aux)
4612 ptr := v_0
4613 if v_1.Op != OpARMMOVBstore {
4614 break
4615 }
4616 off2 := auxIntToInt32(v_1.AuxInt)
4617 sym2 := auxToSym(v_1.Aux)
4618 x := v_1.Args[1]
4619 ptr2 := v_1.Args[0]
4620 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
4621 break
4622 }
4623 v.reset(OpARMMOVBUreg)
4624 v.AddArg(x)
4625 return true
4626 }
4627
4628
4629
4630 for {
4631 if auxIntToInt32(v.AuxInt) != 0 {
4632 break
4633 }
4634 sym := auxToSym(v.Aux)
4635 if v_0.Op != OpARMADD {
4636 break
4637 }
4638 idx := v_0.Args[1]
4639 ptr := v_0.Args[0]
4640 mem := v_1
4641 if !(sym == nil) {
4642 break
4643 }
4644 v.reset(OpARMMOVBUloadidx)
4645 v.AddArg3(ptr, idx, mem)
4646 return true
4647 }
4648
4649
4650
4651 for {
4652 off := auxIntToInt32(v.AuxInt)
4653 sym := auxToSym(v.Aux)
4654 if v_0.Op != OpSB || !(symIsRO(sym)) {
4655 break
4656 }
4657 v.reset(OpARMMOVWconst)
4658 v.AuxInt = int32ToAuxInt(int32(read8(sym, int64(off))))
4659 return true
4660 }
4661 return false
4662 }
4663 func rewriteValueARM_OpARMMOVBUloadidx(v *Value) bool {
4664 v_2 := v.Args[2]
4665 v_1 := v.Args[1]
4666 v_0 := v.Args[0]
4667
4668
4669
4670 for {
4671 ptr := v_0
4672 idx := v_1
4673 if v_2.Op != OpARMMOVBstoreidx {
4674 break
4675 }
4676 x := v_2.Args[2]
4677 ptr2 := v_2.Args[0]
4678 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
4679 break
4680 }
4681 v.reset(OpARMMOVBUreg)
4682 v.AddArg(x)
4683 return true
4684 }
4685
4686
4687 for {
4688 ptr := v_0
4689 if v_1.Op != OpARMMOVWconst {
4690 break
4691 }
4692 c := auxIntToInt32(v_1.AuxInt)
4693 mem := v_2
4694 v.reset(OpARMMOVBUload)
4695 v.AuxInt = int32ToAuxInt(c)
4696 v.AddArg2(ptr, mem)
4697 return true
4698 }
4699
4700
4701 for {
4702 if v_0.Op != OpARMMOVWconst {
4703 break
4704 }
4705 c := auxIntToInt32(v_0.AuxInt)
4706 ptr := v_1
4707 mem := v_2
4708 v.reset(OpARMMOVBUload)
4709 v.AuxInt = int32ToAuxInt(c)
4710 v.AddArg2(ptr, mem)
4711 return true
4712 }
4713 return false
4714 }
4715 func rewriteValueARM_OpARMMOVBUreg(v *Value) bool {
4716 v_0 := v.Args[0]
4717
4718
4719 for {
4720 x := v_0
4721 if x.Op != OpARMMOVBUload {
4722 break
4723 }
4724 v.reset(OpARMMOVWreg)
4725 v.AddArg(x)
4726 return true
4727 }
4728
4729
4730 for {
4731 if v_0.Op != OpARMANDconst {
4732 break
4733 }
4734 c := auxIntToInt32(v_0.AuxInt)
4735 x := v_0.Args[0]
4736 v.reset(OpARMANDconst)
4737 v.AuxInt = int32ToAuxInt(c & 0xff)
4738 v.AddArg(x)
4739 return true
4740 }
4741
4742
4743 for {
4744 x := v_0
4745 if x.Op != OpARMMOVBUreg {
4746 break
4747 }
4748 v.reset(OpARMMOVWreg)
4749 v.AddArg(x)
4750 return true
4751 }
4752
4753
4754 for {
4755 if v_0.Op != OpARMMOVWconst {
4756 break
4757 }
4758 c := auxIntToInt32(v_0.AuxInt)
4759 v.reset(OpARMMOVWconst)
4760 v.AuxInt = int32ToAuxInt(int32(uint8(c)))
4761 return true
4762 }
4763 return false
4764 }
4765 func rewriteValueARM_OpARMMOVBload(v *Value) bool {
4766 v_1 := v.Args[1]
4767 v_0 := v.Args[0]
4768
4769
4770 for {
4771 off1 := auxIntToInt32(v.AuxInt)
4772 sym := auxToSym(v.Aux)
4773 if v_0.Op != OpARMADDconst {
4774 break
4775 }
4776 off2 := auxIntToInt32(v_0.AuxInt)
4777 ptr := v_0.Args[0]
4778 mem := v_1
4779 v.reset(OpARMMOVBload)
4780 v.AuxInt = int32ToAuxInt(off1 + off2)
4781 v.Aux = symToAux(sym)
4782 v.AddArg2(ptr, mem)
4783 return true
4784 }
4785
4786
4787 for {
4788 off1 := auxIntToInt32(v.AuxInt)
4789 sym := auxToSym(v.Aux)
4790 if v_0.Op != OpARMSUBconst {
4791 break
4792 }
4793 off2 := auxIntToInt32(v_0.AuxInt)
4794 ptr := v_0.Args[0]
4795 mem := v_1
4796 v.reset(OpARMMOVBload)
4797 v.AuxInt = int32ToAuxInt(off1 - off2)
4798 v.Aux = symToAux(sym)
4799 v.AddArg2(ptr, mem)
4800 return true
4801 }
4802
4803
4804
4805 for {
4806 off1 := auxIntToInt32(v.AuxInt)
4807 sym1 := auxToSym(v.Aux)
4808 if v_0.Op != OpARMMOVWaddr {
4809 break
4810 }
4811 off2 := auxIntToInt32(v_0.AuxInt)
4812 sym2 := auxToSym(v_0.Aux)
4813 ptr := v_0.Args[0]
4814 mem := v_1
4815 if !(canMergeSym(sym1, sym2)) {
4816 break
4817 }
4818 v.reset(OpARMMOVBload)
4819 v.AuxInt = int32ToAuxInt(off1 + off2)
4820 v.Aux = symToAux(mergeSym(sym1, sym2))
4821 v.AddArg2(ptr, mem)
4822 return true
4823 }
4824
4825
4826
4827 for {
4828 off := auxIntToInt32(v.AuxInt)
4829 sym := auxToSym(v.Aux)
4830 ptr := v_0
4831 if v_1.Op != OpARMMOVBstore {
4832 break
4833 }
4834 off2 := auxIntToInt32(v_1.AuxInt)
4835 sym2 := auxToSym(v_1.Aux)
4836 x := v_1.Args[1]
4837 ptr2 := v_1.Args[0]
4838 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
4839 break
4840 }
4841 v.reset(OpARMMOVBreg)
4842 v.AddArg(x)
4843 return true
4844 }
4845
4846
4847
4848 for {
4849 if auxIntToInt32(v.AuxInt) != 0 {
4850 break
4851 }
4852 sym := auxToSym(v.Aux)
4853 if v_0.Op != OpARMADD {
4854 break
4855 }
4856 idx := v_0.Args[1]
4857 ptr := v_0.Args[0]
4858 mem := v_1
4859 if !(sym == nil) {
4860 break
4861 }
4862 v.reset(OpARMMOVBloadidx)
4863 v.AddArg3(ptr, idx, mem)
4864 return true
4865 }
4866 return false
4867 }
4868 func rewriteValueARM_OpARMMOVBloadidx(v *Value) bool {
4869 v_2 := v.Args[2]
4870 v_1 := v.Args[1]
4871 v_0 := v.Args[0]
4872
4873
4874
4875 for {
4876 ptr := v_0
4877 idx := v_1
4878 if v_2.Op != OpARMMOVBstoreidx {
4879 break
4880 }
4881 x := v_2.Args[2]
4882 ptr2 := v_2.Args[0]
4883 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
4884 break
4885 }
4886 v.reset(OpARMMOVBreg)
4887 v.AddArg(x)
4888 return true
4889 }
4890
4891
4892 for {
4893 ptr := v_0
4894 if v_1.Op != OpARMMOVWconst {
4895 break
4896 }
4897 c := auxIntToInt32(v_1.AuxInt)
4898 mem := v_2
4899 v.reset(OpARMMOVBload)
4900 v.AuxInt = int32ToAuxInt(c)
4901 v.AddArg2(ptr, mem)
4902 return true
4903 }
4904
4905
4906 for {
4907 if v_0.Op != OpARMMOVWconst {
4908 break
4909 }
4910 c := auxIntToInt32(v_0.AuxInt)
4911 ptr := v_1
4912 mem := v_2
4913 v.reset(OpARMMOVBload)
4914 v.AuxInt = int32ToAuxInt(c)
4915 v.AddArg2(ptr, mem)
4916 return true
4917 }
4918 return false
4919 }
4920 func rewriteValueARM_OpARMMOVBreg(v *Value) bool {
4921 v_0 := v.Args[0]
4922
4923
4924 for {
4925 x := v_0
4926 if x.Op != OpARMMOVBload {
4927 break
4928 }
4929 v.reset(OpARMMOVWreg)
4930 v.AddArg(x)
4931 return true
4932 }
4933
4934
4935
4936 for {
4937 if v_0.Op != OpARMANDconst {
4938 break
4939 }
4940 c := auxIntToInt32(v_0.AuxInt)
4941 x := v_0.Args[0]
4942 if !(c&0x80 == 0) {
4943 break
4944 }
4945 v.reset(OpARMANDconst)
4946 v.AuxInt = int32ToAuxInt(c & 0x7f)
4947 v.AddArg(x)
4948 return true
4949 }
4950
4951
4952 for {
4953 x := v_0
4954 if x.Op != OpARMMOVBreg {
4955 break
4956 }
4957 v.reset(OpARMMOVWreg)
4958 v.AddArg(x)
4959 return true
4960 }
4961
4962
4963 for {
4964 if v_0.Op != OpARMMOVWconst {
4965 break
4966 }
4967 c := auxIntToInt32(v_0.AuxInt)
4968 v.reset(OpARMMOVWconst)
4969 v.AuxInt = int32ToAuxInt(int32(int8(c)))
4970 return true
4971 }
4972 return false
4973 }
4974 func rewriteValueARM_OpARMMOVBstore(v *Value) bool {
4975 v_2 := v.Args[2]
4976 v_1 := v.Args[1]
4977 v_0 := v.Args[0]
4978
4979
4980 for {
4981 off1 := auxIntToInt32(v.AuxInt)
4982 sym := auxToSym(v.Aux)
4983 if v_0.Op != OpARMADDconst {
4984 break
4985 }
4986 off2 := auxIntToInt32(v_0.AuxInt)
4987 ptr := v_0.Args[0]
4988 val := v_1
4989 mem := v_2
4990 v.reset(OpARMMOVBstore)
4991 v.AuxInt = int32ToAuxInt(off1 + off2)
4992 v.Aux = symToAux(sym)
4993 v.AddArg3(ptr, val, mem)
4994 return true
4995 }
4996
4997
4998 for {
4999 off1 := auxIntToInt32(v.AuxInt)
5000 sym := auxToSym(v.Aux)
5001 if v_0.Op != OpARMSUBconst {
5002 break
5003 }
5004 off2 := auxIntToInt32(v_0.AuxInt)
5005 ptr := v_0.Args[0]
5006 val := v_1
5007 mem := v_2
5008 v.reset(OpARMMOVBstore)
5009 v.AuxInt = int32ToAuxInt(off1 - off2)
5010 v.Aux = symToAux(sym)
5011 v.AddArg3(ptr, val, mem)
5012 return true
5013 }
5014
5015
5016
5017 for {
5018 off1 := auxIntToInt32(v.AuxInt)
5019 sym1 := auxToSym(v.Aux)
5020 if v_0.Op != OpARMMOVWaddr {
5021 break
5022 }
5023 off2 := auxIntToInt32(v_0.AuxInt)
5024 sym2 := auxToSym(v_0.Aux)
5025 ptr := v_0.Args[0]
5026 val := v_1
5027 mem := v_2
5028 if !(canMergeSym(sym1, sym2)) {
5029 break
5030 }
5031 v.reset(OpARMMOVBstore)
5032 v.AuxInt = int32ToAuxInt(off1 + off2)
5033 v.Aux = symToAux(mergeSym(sym1, sym2))
5034 v.AddArg3(ptr, val, mem)
5035 return true
5036 }
5037
5038
5039 for {
5040 off := auxIntToInt32(v.AuxInt)
5041 sym := auxToSym(v.Aux)
5042 ptr := v_0
5043 if v_1.Op != OpARMMOVBreg {
5044 break
5045 }
5046 x := v_1.Args[0]
5047 mem := v_2
5048 v.reset(OpARMMOVBstore)
5049 v.AuxInt = int32ToAuxInt(off)
5050 v.Aux = symToAux(sym)
5051 v.AddArg3(ptr, x, mem)
5052 return true
5053 }
5054
5055
5056 for {
5057 off := auxIntToInt32(v.AuxInt)
5058 sym := auxToSym(v.Aux)
5059 ptr := v_0
5060 if v_1.Op != OpARMMOVBUreg {
5061 break
5062 }
5063 x := v_1.Args[0]
5064 mem := v_2
5065 v.reset(OpARMMOVBstore)
5066 v.AuxInt = int32ToAuxInt(off)
5067 v.Aux = symToAux(sym)
5068 v.AddArg3(ptr, x, mem)
5069 return true
5070 }
5071
5072
5073 for {
5074 off := auxIntToInt32(v.AuxInt)
5075 sym := auxToSym(v.Aux)
5076 ptr := v_0
5077 if v_1.Op != OpARMMOVHreg {
5078 break
5079 }
5080 x := v_1.Args[0]
5081 mem := v_2
5082 v.reset(OpARMMOVBstore)
5083 v.AuxInt = int32ToAuxInt(off)
5084 v.Aux = symToAux(sym)
5085 v.AddArg3(ptr, x, mem)
5086 return true
5087 }
5088
5089
5090 for {
5091 off := auxIntToInt32(v.AuxInt)
5092 sym := auxToSym(v.Aux)
5093 ptr := v_0
5094 if v_1.Op != OpARMMOVHUreg {
5095 break
5096 }
5097 x := v_1.Args[0]
5098 mem := v_2
5099 v.reset(OpARMMOVBstore)
5100 v.AuxInt = int32ToAuxInt(off)
5101 v.Aux = symToAux(sym)
5102 v.AddArg3(ptr, x, mem)
5103 return true
5104 }
5105
5106
5107
5108 for {
5109 if auxIntToInt32(v.AuxInt) != 0 {
5110 break
5111 }
5112 sym := auxToSym(v.Aux)
5113 if v_0.Op != OpARMADD {
5114 break
5115 }
5116 idx := v_0.Args[1]
5117 ptr := v_0.Args[0]
5118 val := v_1
5119 mem := v_2
5120 if !(sym == nil) {
5121 break
5122 }
5123 v.reset(OpARMMOVBstoreidx)
5124 v.AddArg4(ptr, idx, val, mem)
5125 return true
5126 }
5127 return false
5128 }
5129 func rewriteValueARM_OpARMMOVBstoreidx(v *Value) bool {
5130 v_3 := v.Args[3]
5131 v_2 := v.Args[2]
5132 v_1 := v.Args[1]
5133 v_0 := v.Args[0]
5134
5135
5136 for {
5137 ptr := v_0
5138 if v_1.Op != OpARMMOVWconst {
5139 break
5140 }
5141 c := auxIntToInt32(v_1.AuxInt)
5142 val := v_2
5143 mem := v_3
5144 v.reset(OpARMMOVBstore)
5145 v.AuxInt = int32ToAuxInt(c)
5146 v.AddArg3(ptr, val, mem)
5147 return true
5148 }
5149
5150
5151 for {
5152 if v_0.Op != OpARMMOVWconst {
5153 break
5154 }
5155 c := auxIntToInt32(v_0.AuxInt)
5156 ptr := v_1
5157 val := v_2
5158 mem := v_3
5159 v.reset(OpARMMOVBstore)
5160 v.AuxInt = int32ToAuxInt(c)
5161 v.AddArg3(ptr, val, mem)
5162 return true
5163 }
5164 return false
5165 }
5166 func rewriteValueARM_OpARMMOVDload(v *Value) bool {
5167 v_1 := v.Args[1]
5168 v_0 := v.Args[0]
5169
5170
5171 for {
5172 off1 := auxIntToInt32(v.AuxInt)
5173 sym := auxToSym(v.Aux)
5174 if v_0.Op != OpARMADDconst {
5175 break
5176 }
5177 off2 := auxIntToInt32(v_0.AuxInt)
5178 ptr := v_0.Args[0]
5179 mem := v_1
5180 v.reset(OpARMMOVDload)
5181 v.AuxInt = int32ToAuxInt(off1 + off2)
5182 v.Aux = symToAux(sym)
5183 v.AddArg2(ptr, mem)
5184 return true
5185 }
5186
5187
5188 for {
5189 off1 := auxIntToInt32(v.AuxInt)
5190 sym := auxToSym(v.Aux)
5191 if v_0.Op != OpARMSUBconst {
5192 break
5193 }
5194 off2 := auxIntToInt32(v_0.AuxInt)
5195 ptr := v_0.Args[0]
5196 mem := v_1
5197 v.reset(OpARMMOVDload)
5198 v.AuxInt = int32ToAuxInt(off1 - off2)
5199 v.Aux = symToAux(sym)
5200 v.AddArg2(ptr, mem)
5201 return true
5202 }
5203
5204
5205
5206 for {
5207 off1 := auxIntToInt32(v.AuxInt)
5208 sym1 := auxToSym(v.Aux)
5209 if v_0.Op != OpARMMOVWaddr {
5210 break
5211 }
5212 off2 := auxIntToInt32(v_0.AuxInt)
5213 sym2 := auxToSym(v_0.Aux)
5214 ptr := v_0.Args[0]
5215 mem := v_1
5216 if !(canMergeSym(sym1, sym2)) {
5217 break
5218 }
5219 v.reset(OpARMMOVDload)
5220 v.AuxInt = int32ToAuxInt(off1 + off2)
5221 v.Aux = symToAux(mergeSym(sym1, sym2))
5222 v.AddArg2(ptr, mem)
5223 return true
5224 }
5225
5226
5227
5228 for {
5229 off := auxIntToInt32(v.AuxInt)
5230 sym := auxToSym(v.Aux)
5231 ptr := v_0
5232 if v_1.Op != OpARMMOVDstore {
5233 break
5234 }
5235 off2 := auxIntToInt32(v_1.AuxInt)
5236 sym2 := auxToSym(v_1.Aux)
5237 x := v_1.Args[1]
5238 ptr2 := v_1.Args[0]
5239 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5240 break
5241 }
5242 v.copyOf(x)
5243 return true
5244 }
5245 return false
5246 }
5247 func rewriteValueARM_OpARMMOVDstore(v *Value) bool {
5248 v_2 := v.Args[2]
5249 v_1 := v.Args[1]
5250 v_0 := v.Args[0]
5251
5252
5253 for {
5254 off1 := auxIntToInt32(v.AuxInt)
5255 sym := auxToSym(v.Aux)
5256 if v_0.Op != OpARMADDconst {
5257 break
5258 }
5259 off2 := auxIntToInt32(v_0.AuxInt)
5260 ptr := v_0.Args[0]
5261 val := v_1
5262 mem := v_2
5263 v.reset(OpARMMOVDstore)
5264 v.AuxInt = int32ToAuxInt(off1 + off2)
5265 v.Aux = symToAux(sym)
5266 v.AddArg3(ptr, val, mem)
5267 return true
5268 }
5269
5270
5271 for {
5272 off1 := auxIntToInt32(v.AuxInt)
5273 sym := auxToSym(v.Aux)
5274 if v_0.Op != OpARMSUBconst {
5275 break
5276 }
5277 off2 := auxIntToInt32(v_0.AuxInt)
5278 ptr := v_0.Args[0]
5279 val := v_1
5280 mem := v_2
5281 v.reset(OpARMMOVDstore)
5282 v.AuxInt = int32ToAuxInt(off1 - off2)
5283 v.Aux = symToAux(sym)
5284 v.AddArg3(ptr, val, mem)
5285 return true
5286 }
5287
5288
5289
5290 for {
5291 off1 := auxIntToInt32(v.AuxInt)
5292 sym1 := auxToSym(v.Aux)
5293 if v_0.Op != OpARMMOVWaddr {
5294 break
5295 }
5296 off2 := auxIntToInt32(v_0.AuxInt)
5297 sym2 := auxToSym(v_0.Aux)
5298 ptr := v_0.Args[0]
5299 val := v_1
5300 mem := v_2
5301 if !(canMergeSym(sym1, sym2)) {
5302 break
5303 }
5304 v.reset(OpARMMOVDstore)
5305 v.AuxInt = int32ToAuxInt(off1 + off2)
5306 v.Aux = symToAux(mergeSym(sym1, sym2))
5307 v.AddArg3(ptr, val, mem)
5308 return true
5309 }
5310 return false
5311 }
5312 func rewriteValueARM_OpARMMOVFload(v *Value) bool {
5313 v_1 := v.Args[1]
5314 v_0 := v.Args[0]
5315
5316
5317 for {
5318 off1 := auxIntToInt32(v.AuxInt)
5319 sym := auxToSym(v.Aux)
5320 if v_0.Op != OpARMADDconst {
5321 break
5322 }
5323 off2 := auxIntToInt32(v_0.AuxInt)
5324 ptr := v_0.Args[0]
5325 mem := v_1
5326 v.reset(OpARMMOVFload)
5327 v.AuxInt = int32ToAuxInt(off1 + off2)
5328 v.Aux = symToAux(sym)
5329 v.AddArg2(ptr, mem)
5330 return true
5331 }
5332
5333
5334 for {
5335 off1 := auxIntToInt32(v.AuxInt)
5336 sym := auxToSym(v.Aux)
5337 if v_0.Op != OpARMSUBconst {
5338 break
5339 }
5340 off2 := auxIntToInt32(v_0.AuxInt)
5341 ptr := v_0.Args[0]
5342 mem := v_1
5343 v.reset(OpARMMOVFload)
5344 v.AuxInt = int32ToAuxInt(off1 - off2)
5345 v.Aux = symToAux(sym)
5346 v.AddArg2(ptr, mem)
5347 return true
5348 }
5349
5350
5351
5352 for {
5353 off1 := auxIntToInt32(v.AuxInt)
5354 sym1 := auxToSym(v.Aux)
5355 if v_0.Op != OpARMMOVWaddr {
5356 break
5357 }
5358 off2 := auxIntToInt32(v_0.AuxInt)
5359 sym2 := auxToSym(v_0.Aux)
5360 ptr := v_0.Args[0]
5361 mem := v_1
5362 if !(canMergeSym(sym1, sym2)) {
5363 break
5364 }
5365 v.reset(OpARMMOVFload)
5366 v.AuxInt = int32ToAuxInt(off1 + off2)
5367 v.Aux = symToAux(mergeSym(sym1, sym2))
5368 v.AddArg2(ptr, mem)
5369 return true
5370 }
5371
5372
5373
5374 for {
5375 off := auxIntToInt32(v.AuxInt)
5376 sym := auxToSym(v.Aux)
5377 ptr := v_0
5378 if v_1.Op != OpARMMOVFstore {
5379 break
5380 }
5381 off2 := auxIntToInt32(v_1.AuxInt)
5382 sym2 := auxToSym(v_1.Aux)
5383 x := v_1.Args[1]
5384 ptr2 := v_1.Args[0]
5385 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5386 break
5387 }
5388 v.copyOf(x)
5389 return true
5390 }
5391 return false
5392 }
5393 func rewriteValueARM_OpARMMOVFstore(v *Value) bool {
5394 v_2 := v.Args[2]
5395 v_1 := v.Args[1]
5396 v_0 := v.Args[0]
5397
5398
5399 for {
5400 off1 := auxIntToInt32(v.AuxInt)
5401 sym := auxToSym(v.Aux)
5402 if v_0.Op != OpARMADDconst {
5403 break
5404 }
5405 off2 := auxIntToInt32(v_0.AuxInt)
5406 ptr := v_0.Args[0]
5407 val := v_1
5408 mem := v_2
5409 v.reset(OpARMMOVFstore)
5410 v.AuxInt = int32ToAuxInt(off1 + off2)
5411 v.Aux = symToAux(sym)
5412 v.AddArg3(ptr, val, mem)
5413 return true
5414 }
5415
5416
5417 for {
5418 off1 := auxIntToInt32(v.AuxInt)
5419 sym := auxToSym(v.Aux)
5420 if v_0.Op != OpARMSUBconst {
5421 break
5422 }
5423 off2 := auxIntToInt32(v_0.AuxInt)
5424 ptr := v_0.Args[0]
5425 val := v_1
5426 mem := v_2
5427 v.reset(OpARMMOVFstore)
5428 v.AuxInt = int32ToAuxInt(off1 - off2)
5429 v.Aux = symToAux(sym)
5430 v.AddArg3(ptr, val, mem)
5431 return true
5432 }
5433
5434
5435
5436 for {
5437 off1 := auxIntToInt32(v.AuxInt)
5438 sym1 := auxToSym(v.Aux)
5439 if v_0.Op != OpARMMOVWaddr {
5440 break
5441 }
5442 off2 := auxIntToInt32(v_0.AuxInt)
5443 sym2 := auxToSym(v_0.Aux)
5444 ptr := v_0.Args[0]
5445 val := v_1
5446 mem := v_2
5447 if !(canMergeSym(sym1, sym2)) {
5448 break
5449 }
5450 v.reset(OpARMMOVFstore)
5451 v.AuxInt = int32ToAuxInt(off1 + off2)
5452 v.Aux = symToAux(mergeSym(sym1, sym2))
5453 v.AddArg3(ptr, val, mem)
5454 return true
5455 }
5456 return false
5457 }
5458 func rewriteValueARM_OpARMMOVHUload(v *Value) bool {
5459 v_1 := v.Args[1]
5460 v_0 := v.Args[0]
5461 b := v.Block
5462 config := b.Func.Config
5463
5464
5465 for {
5466 off1 := auxIntToInt32(v.AuxInt)
5467 sym := auxToSym(v.Aux)
5468 if v_0.Op != OpARMADDconst {
5469 break
5470 }
5471 off2 := auxIntToInt32(v_0.AuxInt)
5472 ptr := v_0.Args[0]
5473 mem := v_1
5474 v.reset(OpARMMOVHUload)
5475 v.AuxInt = int32ToAuxInt(off1 + off2)
5476 v.Aux = symToAux(sym)
5477 v.AddArg2(ptr, mem)
5478 return true
5479 }
5480
5481
5482 for {
5483 off1 := auxIntToInt32(v.AuxInt)
5484 sym := auxToSym(v.Aux)
5485 if v_0.Op != OpARMSUBconst {
5486 break
5487 }
5488 off2 := auxIntToInt32(v_0.AuxInt)
5489 ptr := v_0.Args[0]
5490 mem := v_1
5491 v.reset(OpARMMOVHUload)
5492 v.AuxInt = int32ToAuxInt(off1 - off2)
5493 v.Aux = symToAux(sym)
5494 v.AddArg2(ptr, mem)
5495 return true
5496 }
5497
5498
5499
5500 for {
5501 off1 := auxIntToInt32(v.AuxInt)
5502 sym1 := auxToSym(v.Aux)
5503 if v_0.Op != OpARMMOVWaddr {
5504 break
5505 }
5506 off2 := auxIntToInt32(v_0.AuxInt)
5507 sym2 := auxToSym(v_0.Aux)
5508 ptr := v_0.Args[0]
5509 mem := v_1
5510 if !(canMergeSym(sym1, sym2)) {
5511 break
5512 }
5513 v.reset(OpARMMOVHUload)
5514 v.AuxInt = int32ToAuxInt(off1 + off2)
5515 v.Aux = symToAux(mergeSym(sym1, sym2))
5516 v.AddArg2(ptr, mem)
5517 return true
5518 }
5519
5520
5521
5522 for {
5523 off := auxIntToInt32(v.AuxInt)
5524 sym := auxToSym(v.Aux)
5525 ptr := v_0
5526 if v_1.Op != OpARMMOVHstore {
5527 break
5528 }
5529 off2 := auxIntToInt32(v_1.AuxInt)
5530 sym2 := auxToSym(v_1.Aux)
5531 x := v_1.Args[1]
5532 ptr2 := v_1.Args[0]
5533 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5534 break
5535 }
5536 v.reset(OpARMMOVHUreg)
5537 v.AddArg(x)
5538 return true
5539 }
5540
5541
5542
5543 for {
5544 if auxIntToInt32(v.AuxInt) != 0 {
5545 break
5546 }
5547 sym := auxToSym(v.Aux)
5548 if v_0.Op != OpARMADD {
5549 break
5550 }
5551 idx := v_0.Args[1]
5552 ptr := v_0.Args[0]
5553 mem := v_1
5554 if !(sym == nil) {
5555 break
5556 }
5557 v.reset(OpARMMOVHUloadidx)
5558 v.AddArg3(ptr, idx, mem)
5559 return true
5560 }
5561
5562
5563
5564 for {
5565 off := auxIntToInt32(v.AuxInt)
5566 sym := auxToSym(v.Aux)
5567 if v_0.Op != OpSB || !(symIsRO(sym)) {
5568 break
5569 }
5570 v.reset(OpARMMOVWconst)
5571 v.AuxInt = int32ToAuxInt(int32(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))
5572 return true
5573 }
5574 return false
5575 }
5576 func rewriteValueARM_OpARMMOVHUloadidx(v *Value) bool {
5577 v_2 := v.Args[2]
5578 v_1 := v.Args[1]
5579 v_0 := v.Args[0]
5580
5581
5582
5583 for {
5584 ptr := v_0
5585 idx := v_1
5586 if v_2.Op != OpARMMOVHstoreidx {
5587 break
5588 }
5589 x := v_2.Args[2]
5590 ptr2 := v_2.Args[0]
5591 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
5592 break
5593 }
5594 v.reset(OpARMMOVHUreg)
5595 v.AddArg(x)
5596 return true
5597 }
5598
5599
5600 for {
5601 ptr := v_0
5602 if v_1.Op != OpARMMOVWconst {
5603 break
5604 }
5605 c := auxIntToInt32(v_1.AuxInt)
5606 mem := v_2
5607 v.reset(OpARMMOVHUload)
5608 v.AuxInt = int32ToAuxInt(c)
5609 v.AddArg2(ptr, mem)
5610 return true
5611 }
5612
5613
5614 for {
5615 if v_0.Op != OpARMMOVWconst {
5616 break
5617 }
5618 c := auxIntToInt32(v_0.AuxInt)
5619 ptr := v_1
5620 mem := v_2
5621 v.reset(OpARMMOVHUload)
5622 v.AuxInt = int32ToAuxInt(c)
5623 v.AddArg2(ptr, mem)
5624 return true
5625 }
5626 return false
5627 }
5628 func rewriteValueARM_OpARMMOVHUreg(v *Value) bool {
5629 v_0 := v.Args[0]
5630
5631
5632 for {
5633 x := v_0
5634 if x.Op != OpARMMOVBUload {
5635 break
5636 }
5637 v.reset(OpARMMOVWreg)
5638 v.AddArg(x)
5639 return true
5640 }
5641
5642
5643 for {
5644 x := v_0
5645 if x.Op != OpARMMOVHUload {
5646 break
5647 }
5648 v.reset(OpARMMOVWreg)
5649 v.AddArg(x)
5650 return true
5651 }
5652
5653
5654 for {
5655 if v_0.Op != OpARMANDconst {
5656 break
5657 }
5658 c := auxIntToInt32(v_0.AuxInt)
5659 x := v_0.Args[0]
5660 v.reset(OpARMANDconst)
5661 v.AuxInt = int32ToAuxInt(c & 0xffff)
5662 v.AddArg(x)
5663 return true
5664 }
5665
5666
5667 for {
5668 x := v_0
5669 if x.Op != OpARMMOVBUreg {
5670 break
5671 }
5672 v.reset(OpARMMOVWreg)
5673 v.AddArg(x)
5674 return true
5675 }
5676
5677
5678 for {
5679 x := v_0
5680 if x.Op != OpARMMOVHUreg {
5681 break
5682 }
5683 v.reset(OpARMMOVWreg)
5684 v.AddArg(x)
5685 return true
5686 }
5687
5688
5689 for {
5690 if v_0.Op != OpARMMOVWconst {
5691 break
5692 }
5693 c := auxIntToInt32(v_0.AuxInt)
5694 v.reset(OpARMMOVWconst)
5695 v.AuxInt = int32ToAuxInt(int32(uint16(c)))
5696 return true
5697 }
5698 return false
5699 }
5700 func rewriteValueARM_OpARMMOVHload(v *Value) bool {
5701 v_1 := v.Args[1]
5702 v_0 := v.Args[0]
5703
5704
5705 for {
5706 off1 := auxIntToInt32(v.AuxInt)
5707 sym := auxToSym(v.Aux)
5708 if v_0.Op != OpARMADDconst {
5709 break
5710 }
5711 off2 := auxIntToInt32(v_0.AuxInt)
5712 ptr := v_0.Args[0]
5713 mem := v_1
5714 v.reset(OpARMMOVHload)
5715 v.AuxInt = int32ToAuxInt(off1 + off2)
5716 v.Aux = symToAux(sym)
5717 v.AddArg2(ptr, mem)
5718 return true
5719 }
5720
5721
5722 for {
5723 off1 := auxIntToInt32(v.AuxInt)
5724 sym := auxToSym(v.Aux)
5725 if v_0.Op != OpARMSUBconst {
5726 break
5727 }
5728 off2 := auxIntToInt32(v_0.AuxInt)
5729 ptr := v_0.Args[0]
5730 mem := v_1
5731 v.reset(OpARMMOVHload)
5732 v.AuxInt = int32ToAuxInt(off1 - off2)
5733 v.Aux = symToAux(sym)
5734 v.AddArg2(ptr, mem)
5735 return true
5736 }
5737
5738
5739
5740 for {
5741 off1 := auxIntToInt32(v.AuxInt)
5742 sym1 := auxToSym(v.Aux)
5743 if v_0.Op != OpARMMOVWaddr {
5744 break
5745 }
5746 off2 := auxIntToInt32(v_0.AuxInt)
5747 sym2 := auxToSym(v_0.Aux)
5748 ptr := v_0.Args[0]
5749 mem := v_1
5750 if !(canMergeSym(sym1, sym2)) {
5751 break
5752 }
5753 v.reset(OpARMMOVHload)
5754 v.AuxInt = int32ToAuxInt(off1 + off2)
5755 v.Aux = symToAux(mergeSym(sym1, sym2))
5756 v.AddArg2(ptr, mem)
5757 return true
5758 }
5759
5760
5761
5762 for {
5763 off := auxIntToInt32(v.AuxInt)
5764 sym := auxToSym(v.Aux)
5765 ptr := v_0
5766 if v_1.Op != OpARMMOVHstore {
5767 break
5768 }
5769 off2 := auxIntToInt32(v_1.AuxInt)
5770 sym2 := auxToSym(v_1.Aux)
5771 x := v_1.Args[1]
5772 ptr2 := v_1.Args[0]
5773 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
5774 break
5775 }
5776 v.reset(OpARMMOVHreg)
5777 v.AddArg(x)
5778 return true
5779 }
5780
5781
5782
5783 for {
5784 if auxIntToInt32(v.AuxInt) != 0 {
5785 break
5786 }
5787 sym := auxToSym(v.Aux)
5788 if v_0.Op != OpARMADD {
5789 break
5790 }
5791 idx := v_0.Args[1]
5792 ptr := v_0.Args[0]
5793 mem := v_1
5794 if !(sym == nil) {
5795 break
5796 }
5797 v.reset(OpARMMOVHloadidx)
5798 v.AddArg3(ptr, idx, mem)
5799 return true
5800 }
5801 return false
5802 }
5803 func rewriteValueARM_OpARMMOVHloadidx(v *Value) bool {
5804 v_2 := v.Args[2]
5805 v_1 := v.Args[1]
5806 v_0 := v.Args[0]
5807
5808
5809
5810 for {
5811 ptr := v_0
5812 idx := v_1
5813 if v_2.Op != OpARMMOVHstoreidx {
5814 break
5815 }
5816 x := v_2.Args[2]
5817 ptr2 := v_2.Args[0]
5818 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
5819 break
5820 }
5821 v.reset(OpARMMOVHreg)
5822 v.AddArg(x)
5823 return true
5824 }
5825
5826
5827 for {
5828 ptr := v_0
5829 if v_1.Op != OpARMMOVWconst {
5830 break
5831 }
5832 c := auxIntToInt32(v_1.AuxInt)
5833 mem := v_2
5834 v.reset(OpARMMOVHload)
5835 v.AuxInt = int32ToAuxInt(c)
5836 v.AddArg2(ptr, mem)
5837 return true
5838 }
5839
5840
5841 for {
5842 if v_0.Op != OpARMMOVWconst {
5843 break
5844 }
5845 c := auxIntToInt32(v_0.AuxInt)
5846 ptr := v_1
5847 mem := v_2
5848 v.reset(OpARMMOVHload)
5849 v.AuxInt = int32ToAuxInt(c)
5850 v.AddArg2(ptr, mem)
5851 return true
5852 }
5853 return false
5854 }
5855 func rewriteValueARM_OpARMMOVHreg(v *Value) bool {
5856 v_0 := v.Args[0]
5857
5858
5859 for {
5860 x := v_0
5861 if x.Op != OpARMMOVBload {
5862 break
5863 }
5864 v.reset(OpARMMOVWreg)
5865 v.AddArg(x)
5866 return true
5867 }
5868
5869
5870 for {
5871 x := v_0
5872 if x.Op != OpARMMOVBUload {
5873 break
5874 }
5875 v.reset(OpARMMOVWreg)
5876 v.AddArg(x)
5877 return true
5878 }
5879
5880
5881 for {
5882 x := v_0
5883 if x.Op != OpARMMOVHload {
5884 break
5885 }
5886 v.reset(OpARMMOVWreg)
5887 v.AddArg(x)
5888 return true
5889 }
5890
5891
5892
5893 for {
5894 if v_0.Op != OpARMANDconst {
5895 break
5896 }
5897 c := auxIntToInt32(v_0.AuxInt)
5898 x := v_0.Args[0]
5899 if !(c&0x8000 == 0) {
5900 break
5901 }
5902 v.reset(OpARMANDconst)
5903 v.AuxInt = int32ToAuxInt(c & 0x7fff)
5904 v.AddArg(x)
5905 return true
5906 }
5907
5908
5909 for {
5910 x := v_0
5911 if x.Op != OpARMMOVBreg {
5912 break
5913 }
5914 v.reset(OpARMMOVWreg)
5915 v.AddArg(x)
5916 return true
5917 }
5918
5919
5920 for {
5921 x := v_0
5922 if x.Op != OpARMMOVBUreg {
5923 break
5924 }
5925 v.reset(OpARMMOVWreg)
5926 v.AddArg(x)
5927 return true
5928 }
5929
5930
5931 for {
5932 x := v_0
5933 if x.Op != OpARMMOVHreg {
5934 break
5935 }
5936 v.reset(OpARMMOVWreg)
5937 v.AddArg(x)
5938 return true
5939 }
5940
5941
5942 for {
5943 if v_0.Op != OpARMMOVWconst {
5944 break
5945 }
5946 c := auxIntToInt32(v_0.AuxInt)
5947 v.reset(OpARMMOVWconst)
5948 v.AuxInt = int32ToAuxInt(int32(int16(c)))
5949 return true
5950 }
5951 return false
5952 }
5953 func rewriteValueARM_OpARMMOVHstore(v *Value) bool {
5954 v_2 := v.Args[2]
5955 v_1 := v.Args[1]
5956 v_0 := v.Args[0]
5957
5958
5959 for {
5960 off1 := auxIntToInt32(v.AuxInt)
5961 sym := auxToSym(v.Aux)
5962 if v_0.Op != OpARMADDconst {
5963 break
5964 }
5965 off2 := auxIntToInt32(v_0.AuxInt)
5966 ptr := v_0.Args[0]
5967 val := v_1
5968 mem := v_2
5969 v.reset(OpARMMOVHstore)
5970 v.AuxInt = int32ToAuxInt(off1 + off2)
5971 v.Aux = symToAux(sym)
5972 v.AddArg3(ptr, val, mem)
5973 return true
5974 }
5975
5976
5977 for {
5978 off1 := auxIntToInt32(v.AuxInt)
5979 sym := auxToSym(v.Aux)
5980 if v_0.Op != OpARMSUBconst {
5981 break
5982 }
5983 off2 := auxIntToInt32(v_0.AuxInt)
5984 ptr := v_0.Args[0]
5985 val := v_1
5986 mem := v_2
5987 v.reset(OpARMMOVHstore)
5988 v.AuxInt = int32ToAuxInt(off1 - off2)
5989 v.Aux = symToAux(sym)
5990 v.AddArg3(ptr, val, mem)
5991 return true
5992 }
5993
5994
5995
5996 for {
5997 off1 := auxIntToInt32(v.AuxInt)
5998 sym1 := auxToSym(v.Aux)
5999 if v_0.Op != OpARMMOVWaddr {
6000 break
6001 }
6002 off2 := auxIntToInt32(v_0.AuxInt)
6003 sym2 := auxToSym(v_0.Aux)
6004 ptr := v_0.Args[0]
6005 val := v_1
6006 mem := v_2
6007 if !(canMergeSym(sym1, sym2)) {
6008 break
6009 }
6010 v.reset(OpARMMOVHstore)
6011 v.AuxInt = int32ToAuxInt(off1 + off2)
6012 v.Aux = symToAux(mergeSym(sym1, sym2))
6013 v.AddArg3(ptr, val, mem)
6014 return true
6015 }
6016
6017
6018 for {
6019 off := auxIntToInt32(v.AuxInt)
6020 sym := auxToSym(v.Aux)
6021 ptr := v_0
6022 if v_1.Op != OpARMMOVHreg {
6023 break
6024 }
6025 x := v_1.Args[0]
6026 mem := v_2
6027 v.reset(OpARMMOVHstore)
6028 v.AuxInt = int32ToAuxInt(off)
6029 v.Aux = symToAux(sym)
6030 v.AddArg3(ptr, x, mem)
6031 return true
6032 }
6033
6034
6035 for {
6036 off := auxIntToInt32(v.AuxInt)
6037 sym := auxToSym(v.Aux)
6038 ptr := v_0
6039 if v_1.Op != OpARMMOVHUreg {
6040 break
6041 }
6042 x := v_1.Args[0]
6043 mem := v_2
6044 v.reset(OpARMMOVHstore)
6045 v.AuxInt = int32ToAuxInt(off)
6046 v.Aux = symToAux(sym)
6047 v.AddArg3(ptr, x, mem)
6048 return true
6049 }
6050
6051
6052
6053 for {
6054 if auxIntToInt32(v.AuxInt) != 0 {
6055 break
6056 }
6057 sym := auxToSym(v.Aux)
6058 if v_0.Op != OpARMADD {
6059 break
6060 }
6061 idx := v_0.Args[1]
6062 ptr := v_0.Args[0]
6063 val := v_1
6064 mem := v_2
6065 if !(sym == nil) {
6066 break
6067 }
6068 v.reset(OpARMMOVHstoreidx)
6069 v.AddArg4(ptr, idx, val, mem)
6070 return true
6071 }
6072 return false
6073 }
6074 func rewriteValueARM_OpARMMOVHstoreidx(v *Value) bool {
6075 v_3 := v.Args[3]
6076 v_2 := v.Args[2]
6077 v_1 := v.Args[1]
6078 v_0 := v.Args[0]
6079
6080
6081 for {
6082 ptr := v_0
6083 if v_1.Op != OpARMMOVWconst {
6084 break
6085 }
6086 c := auxIntToInt32(v_1.AuxInt)
6087 val := v_2
6088 mem := v_3
6089 v.reset(OpARMMOVHstore)
6090 v.AuxInt = int32ToAuxInt(c)
6091 v.AddArg3(ptr, val, mem)
6092 return true
6093 }
6094
6095
6096 for {
6097 if v_0.Op != OpARMMOVWconst {
6098 break
6099 }
6100 c := auxIntToInt32(v_0.AuxInt)
6101 ptr := v_1
6102 val := v_2
6103 mem := v_3
6104 v.reset(OpARMMOVHstore)
6105 v.AuxInt = int32ToAuxInt(c)
6106 v.AddArg3(ptr, val, mem)
6107 return true
6108 }
6109 return false
6110 }
6111 func rewriteValueARM_OpARMMOVWload(v *Value) bool {
6112 v_1 := v.Args[1]
6113 v_0 := v.Args[0]
6114 b := v.Block
6115 config := b.Func.Config
6116
6117
6118 for {
6119 off1 := auxIntToInt32(v.AuxInt)
6120 sym := auxToSym(v.Aux)
6121 if v_0.Op != OpARMADDconst {
6122 break
6123 }
6124 off2 := auxIntToInt32(v_0.AuxInt)
6125 ptr := v_0.Args[0]
6126 mem := v_1
6127 v.reset(OpARMMOVWload)
6128 v.AuxInt = int32ToAuxInt(off1 + off2)
6129 v.Aux = symToAux(sym)
6130 v.AddArg2(ptr, mem)
6131 return true
6132 }
6133
6134
6135 for {
6136 off1 := auxIntToInt32(v.AuxInt)
6137 sym := auxToSym(v.Aux)
6138 if v_0.Op != OpARMSUBconst {
6139 break
6140 }
6141 off2 := auxIntToInt32(v_0.AuxInt)
6142 ptr := v_0.Args[0]
6143 mem := v_1
6144 v.reset(OpARMMOVWload)
6145 v.AuxInt = int32ToAuxInt(off1 - off2)
6146 v.Aux = symToAux(sym)
6147 v.AddArg2(ptr, mem)
6148 return true
6149 }
6150
6151
6152
6153 for {
6154 off1 := auxIntToInt32(v.AuxInt)
6155 sym1 := auxToSym(v.Aux)
6156 if v_0.Op != OpARMMOVWaddr {
6157 break
6158 }
6159 off2 := auxIntToInt32(v_0.AuxInt)
6160 sym2 := auxToSym(v_0.Aux)
6161 ptr := v_0.Args[0]
6162 mem := v_1
6163 if !(canMergeSym(sym1, sym2)) {
6164 break
6165 }
6166 v.reset(OpARMMOVWload)
6167 v.AuxInt = int32ToAuxInt(off1 + off2)
6168 v.Aux = symToAux(mergeSym(sym1, sym2))
6169 v.AddArg2(ptr, mem)
6170 return true
6171 }
6172
6173
6174
6175 for {
6176 off := auxIntToInt32(v.AuxInt)
6177 sym := auxToSym(v.Aux)
6178 ptr := v_0
6179 if v_1.Op != OpARMMOVWstore {
6180 break
6181 }
6182 off2 := auxIntToInt32(v_1.AuxInt)
6183 sym2 := auxToSym(v_1.Aux)
6184 x := v_1.Args[1]
6185 ptr2 := v_1.Args[0]
6186 if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
6187 break
6188 }
6189 v.copyOf(x)
6190 return true
6191 }
6192
6193
6194
6195 for {
6196 if auxIntToInt32(v.AuxInt) != 0 {
6197 break
6198 }
6199 sym := auxToSym(v.Aux)
6200 if v_0.Op != OpARMADD {
6201 break
6202 }
6203 idx := v_0.Args[1]
6204 ptr := v_0.Args[0]
6205 mem := v_1
6206 if !(sym == nil) {
6207 break
6208 }
6209 v.reset(OpARMMOVWloadidx)
6210 v.AddArg3(ptr, idx, mem)
6211 return true
6212 }
6213
6214
6215
6216 for {
6217 if auxIntToInt32(v.AuxInt) != 0 {
6218 break
6219 }
6220 sym := auxToSym(v.Aux)
6221 if v_0.Op != OpARMADDshiftLL {
6222 break
6223 }
6224 c := auxIntToInt32(v_0.AuxInt)
6225 idx := v_0.Args[1]
6226 ptr := v_0.Args[0]
6227 mem := v_1
6228 if !(sym == nil) {
6229 break
6230 }
6231 v.reset(OpARMMOVWloadshiftLL)
6232 v.AuxInt = int32ToAuxInt(c)
6233 v.AddArg3(ptr, idx, mem)
6234 return true
6235 }
6236
6237
6238
6239 for {
6240 if auxIntToInt32(v.AuxInt) != 0 {
6241 break
6242 }
6243 sym := auxToSym(v.Aux)
6244 if v_0.Op != OpARMADDshiftRL {
6245 break
6246 }
6247 c := auxIntToInt32(v_0.AuxInt)
6248 idx := v_0.Args[1]
6249 ptr := v_0.Args[0]
6250 mem := v_1
6251 if !(sym == nil) {
6252 break
6253 }
6254 v.reset(OpARMMOVWloadshiftRL)
6255 v.AuxInt = int32ToAuxInt(c)
6256 v.AddArg3(ptr, idx, mem)
6257 return true
6258 }
6259
6260
6261
6262 for {
6263 if auxIntToInt32(v.AuxInt) != 0 {
6264 break
6265 }
6266 sym := auxToSym(v.Aux)
6267 if v_0.Op != OpARMADDshiftRA {
6268 break
6269 }
6270 c := auxIntToInt32(v_0.AuxInt)
6271 idx := v_0.Args[1]
6272 ptr := v_0.Args[0]
6273 mem := v_1
6274 if !(sym == nil) {
6275 break
6276 }
6277 v.reset(OpARMMOVWloadshiftRA)
6278 v.AuxInt = int32ToAuxInt(c)
6279 v.AddArg3(ptr, idx, mem)
6280 return true
6281 }
6282
6283
6284
6285 for {
6286 off := auxIntToInt32(v.AuxInt)
6287 sym := auxToSym(v.Aux)
6288 if v_0.Op != OpSB || !(symIsRO(sym)) {
6289 break
6290 }
6291 v.reset(OpARMMOVWconst)
6292 v.AuxInt = int32ToAuxInt(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))
6293 return true
6294 }
6295 return false
6296 }
6297 func rewriteValueARM_OpARMMOVWloadidx(v *Value) bool {
6298 v_2 := v.Args[2]
6299 v_1 := v.Args[1]
6300 v_0 := v.Args[0]
6301
6302
6303
6304 for {
6305 ptr := v_0
6306 idx := v_1
6307 if v_2.Op != OpARMMOVWstoreidx {
6308 break
6309 }
6310 x := v_2.Args[2]
6311 ptr2 := v_2.Args[0]
6312 if idx != v_2.Args[1] || !(isSamePtr(ptr, ptr2)) {
6313 break
6314 }
6315 v.copyOf(x)
6316 return true
6317 }
6318
6319
6320 for {
6321 ptr := v_0
6322 if v_1.Op != OpARMMOVWconst {
6323 break
6324 }
6325 c := auxIntToInt32(v_1.AuxInt)
6326 mem := v_2
6327 v.reset(OpARMMOVWload)
6328 v.AuxInt = int32ToAuxInt(c)
6329 v.AddArg2(ptr, mem)
6330 return true
6331 }
6332
6333
6334 for {
6335 if v_0.Op != OpARMMOVWconst {
6336 break
6337 }
6338 c := auxIntToInt32(v_0.AuxInt)
6339 ptr := v_1
6340 mem := v_2
6341 v.reset(OpARMMOVWload)
6342 v.AuxInt = int32ToAuxInt(c)
6343 v.AddArg2(ptr, mem)
6344 return true
6345 }
6346
6347
6348 for {
6349 ptr := v_0
6350 if v_1.Op != OpARMSLLconst {
6351 break
6352 }
6353 c := auxIntToInt32(v_1.AuxInt)
6354 idx := v_1.Args[0]
6355 mem := v_2
6356 v.reset(OpARMMOVWloadshiftLL)
6357 v.AuxInt = int32ToAuxInt(c)
6358 v.AddArg3(ptr, idx, mem)
6359 return true
6360 }
6361
6362
6363 for {
6364 if v_0.Op != OpARMSLLconst {
6365 break
6366 }
6367 c := auxIntToInt32(v_0.AuxInt)
6368 idx := v_0.Args[0]
6369 ptr := v_1
6370 mem := v_2
6371 v.reset(OpARMMOVWloadshiftLL)
6372 v.AuxInt = int32ToAuxInt(c)
6373 v.AddArg3(ptr, idx, mem)
6374 return true
6375 }
6376
6377
6378 for {
6379 ptr := v_0
6380 if v_1.Op != OpARMSRLconst {
6381 break
6382 }
6383 c := auxIntToInt32(v_1.AuxInt)
6384 idx := v_1.Args[0]
6385 mem := v_2
6386 v.reset(OpARMMOVWloadshiftRL)
6387 v.AuxInt = int32ToAuxInt(c)
6388 v.AddArg3(ptr, idx, mem)
6389 return true
6390 }
6391
6392
6393 for {
6394 if v_0.Op != OpARMSRLconst {
6395 break
6396 }
6397 c := auxIntToInt32(v_0.AuxInt)
6398 idx := v_0.Args[0]
6399 ptr := v_1
6400 mem := v_2
6401 v.reset(OpARMMOVWloadshiftRL)
6402 v.AuxInt = int32ToAuxInt(c)
6403 v.AddArg3(ptr, idx, mem)
6404 return true
6405 }
6406
6407
6408 for {
6409 ptr := v_0
6410 if v_1.Op != OpARMSRAconst {
6411 break
6412 }
6413 c := auxIntToInt32(v_1.AuxInt)
6414 idx := v_1.Args[0]
6415 mem := v_2
6416 v.reset(OpARMMOVWloadshiftRA)
6417 v.AuxInt = int32ToAuxInt(c)
6418 v.AddArg3(ptr, idx, mem)
6419 return true
6420 }
6421
6422
6423 for {
6424 if v_0.Op != OpARMSRAconst {
6425 break
6426 }
6427 c := auxIntToInt32(v_0.AuxInt)
6428 idx := v_0.Args[0]
6429 ptr := v_1
6430 mem := v_2
6431 v.reset(OpARMMOVWloadshiftRA)
6432 v.AuxInt = int32ToAuxInt(c)
6433 v.AddArg3(ptr, idx, mem)
6434 return true
6435 }
6436 return false
6437 }
6438 func rewriteValueARM_OpARMMOVWloadshiftLL(v *Value) bool {
6439 v_2 := v.Args[2]
6440 v_1 := v.Args[1]
6441 v_0 := v.Args[0]
6442
6443
6444
6445 for {
6446 c := auxIntToInt32(v.AuxInt)
6447 ptr := v_0
6448 idx := v_1
6449 if v_2.Op != OpARMMOVWstoreshiftLL {
6450 break
6451 }
6452 d := auxIntToInt32(v_2.AuxInt)
6453 x := v_2.Args[2]
6454 ptr2 := v_2.Args[0]
6455 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6456 break
6457 }
6458 v.copyOf(x)
6459 return true
6460 }
6461
6462
6463 for {
6464 d := auxIntToInt32(v.AuxInt)
6465 ptr := v_0
6466 if v_1.Op != OpARMMOVWconst {
6467 break
6468 }
6469 c := auxIntToInt32(v_1.AuxInt)
6470 mem := v_2
6471 v.reset(OpARMMOVWload)
6472 v.AuxInt = int32ToAuxInt(int32(uint32(c) << uint64(d)))
6473 v.AddArg2(ptr, mem)
6474 return true
6475 }
6476 return false
6477 }
6478 func rewriteValueARM_OpARMMOVWloadshiftRA(v *Value) bool {
6479 v_2 := v.Args[2]
6480 v_1 := v.Args[1]
6481 v_0 := v.Args[0]
6482
6483
6484
6485 for {
6486 c := auxIntToInt32(v.AuxInt)
6487 ptr := v_0
6488 idx := v_1
6489 if v_2.Op != OpARMMOVWstoreshiftRA {
6490 break
6491 }
6492 d := auxIntToInt32(v_2.AuxInt)
6493 x := v_2.Args[2]
6494 ptr2 := v_2.Args[0]
6495 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6496 break
6497 }
6498 v.copyOf(x)
6499 return true
6500 }
6501
6502
6503 for {
6504 d := auxIntToInt32(v.AuxInt)
6505 ptr := v_0
6506 if v_1.Op != OpARMMOVWconst {
6507 break
6508 }
6509 c := auxIntToInt32(v_1.AuxInt)
6510 mem := v_2
6511 v.reset(OpARMMOVWload)
6512 v.AuxInt = int32ToAuxInt(c >> uint64(d))
6513 v.AddArg2(ptr, mem)
6514 return true
6515 }
6516 return false
6517 }
6518 func rewriteValueARM_OpARMMOVWloadshiftRL(v *Value) bool {
6519 v_2 := v.Args[2]
6520 v_1 := v.Args[1]
6521 v_0 := v.Args[0]
6522
6523
6524
6525 for {
6526 c := auxIntToInt32(v.AuxInt)
6527 ptr := v_0
6528 idx := v_1
6529 if v_2.Op != OpARMMOVWstoreshiftRL {
6530 break
6531 }
6532 d := auxIntToInt32(v_2.AuxInt)
6533 x := v_2.Args[2]
6534 ptr2 := v_2.Args[0]
6535 if idx != v_2.Args[1] || !(c == d && isSamePtr(ptr, ptr2)) {
6536 break
6537 }
6538 v.copyOf(x)
6539 return true
6540 }
6541
6542
6543 for {
6544 d := auxIntToInt32(v.AuxInt)
6545 ptr := v_0
6546 if v_1.Op != OpARMMOVWconst {
6547 break
6548 }
6549 c := auxIntToInt32(v_1.AuxInt)
6550 mem := v_2
6551 v.reset(OpARMMOVWload)
6552 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
6553 v.AddArg2(ptr, mem)
6554 return true
6555 }
6556 return false
6557 }
6558 func rewriteValueARM_OpARMMOVWnop(v *Value) bool {
6559 v_0 := v.Args[0]
6560
6561
6562 for {
6563 if v_0.Op != OpARMMOVWconst {
6564 break
6565 }
6566 c := auxIntToInt32(v_0.AuxInt)
6567 v.reset(OpARMMOVWconst)
6568 v.AuxInt = int32ToAuxInt(c)
6569 return true
6570 }
6571 return false
6572 }
6573 func rewriteValueARM_OpARMMOVWreg(v *Value) bool {
6574 v_0 := v.Args[0]
6575
6576
6577
6578 for {
6579 x := v_0
6580 if !(x.Uses == 1) {
6581 break
6582 }
6583 v.reset(OpARMMOVWnop)
6584 v.AddArg(x)
6585 return true
6586 }
6587
6588
6589 for {
6590 if v_0.Op != OpARMMOVWconst {
6591 break
6592 }
6593 c := auxIntToInt32(v_0.AuxInt)
6594 v.reset(OpARMMOVWconst)
6595 v.AuxInt = int32ToAuxInt(c)
6596 return true
6597 }
6598 return false
6599 }
6600 func rewriteValueARM_OpARMMOVWstore(v *Value) bool {
6601 v_2 := v.Args[2]
6602 v_1 := v.Args[1]
6603 v_0 := v.Args[0]
6604
6605
6606 for {
6607 off1 := auxIntToInt32(v.AuxInt)
6608 sym := auxToSym(v.Aux)
6609 if v_0.Op != OpARMADDconst {
6610 break
6611 }
6612 off2 := auxIntToInt32(v_0.AuxInt)
6613 ptr := v_0.Args[0]
6614 val := v_1
6615 mem := v_2
6616 v.reset(OpARMMOVWstore)
6617 v.AuxInt = int32ToAuxInt(off1 + off2)
6618 v.Aux = symToAux(sym)
6619 v.AddArg3(ptr, val, mem)
6620 return true
6621 }
6622
6623
6624 for {
6625 off1 := auxIntToInt32(v.AuxInt)
6626 sym := auxToSym(v.Aux)
6627 if v_0.Op != OpARMSUBconst {
6628 break
6629 }
6630 off2 := auxIntToInt32(v_0.AuxInt)
6631 ptr := v_0.Args[0]
6632 val := v_1
6633 mem := v_2
6634 v.reset(OpARMMOVWstore)
6635 v.AuxInt = int32ToAuxInt(off1 - off2)
6636 v.Aux = symToAux(sym)
6637 v.AddArg3(ptr, val, mem)
6638 return true
6639 }
6640
6641
6642
6643 for {
6644 off1 := auxIntToInt32(v.AuxInt)
6645 sym1 := auxToSym(v.Aux)
6646 if v_0.Op != OpARMMOVWaddr {
6647 break
6648 }
6649 off2 := auxIntToInt32(v_0.AuxInt)
6650 sym2 := auxToSym(v_0.Aux)
6651 ptr := v_0.Args[0]
6652 val := v_1
6653 mem := v_2
6654 if !(canMergeSym(sym1, sym2)) {
6655 break
6656 }
6657 v.reset(OpARMMOVWstore)
6658 v.AuxInt = int32ToAuxInt(off1 + off2)
6659 v.Aux = symToAux(mergeSym(sym1, sym2))
6660 v.AddArg3(ptr, val, mem)
6661 return true
6662 }
6663
6664
6665
6666 for {
6667 if auxIntToInt32(v.AuxInt) != 0 {
6668 break
6669 }
6670 sym := auxToSym(v.Aux)
6671 if v_0.Op != OpARMADD {
6672 break
6673 }
6674 idx := v_0.Args[1]
6675 ptr := v_0.Args[0]
6676 val := v_1
6677 mem := v_2
6678 if !(sym == nil) {
6679 break
6680 }
6681 v.reset(OpARMMOVWstoreidx)
6682 v.AddArg4(ptr, idx, val, mem)
6683 return true
6684 }
6685
6686
6687
6688 for {
6689 if auxIntToInt32(v.AuxInt) != 0 {
6690 break
6691 }
6692 sym := auxToSym(v.Aux)
6693 if v_0.Op != OpARMADDshiftLL {
6694 break
6695 }
6696 c := auxIntToInt32(v_0.AuxInt)
6697 idx := v_0.Args[1]
6698 ptr := v_0.Args[0]
6699 val := v_1
6700 mem := v_2
6701 if !(sym == nil) {
6702 break
6703 }
6704 v.reset(OpARMMOVWstoreshiftLL)
6705 v.AuxInt = int32ToAuxInt(c)
6706 v.AddArg4(ptr, idx, val, mem)
6707 return true
6708 }
6709
6710
6711
6712 for {
6713 if auxIntToInt32(v.AuxInt) != 0 {
6714 break
6715 }
6716 sym := auxToSym(v.Aux)
6717 if v_0.Op != OpARMADDshiftRL {
6718 break
6719 }
6720 c := auxIntToInt32(v_0.AuxInt)
6721 idx := v_0.Args[1]
6722 ptr := v_0.Args[0]
6723 val := v_1
6724 mem := v_2
6725 if !(sym == nil) {
6726 break
6727 }
6728 v.reset(OpARMMOVWstoreshiftRL)
6729 v.AuxInt = int32ToAuxInt(c)
6730 v.AddArg4(ptr, idx, val, mem)
6731 return true
6732 }
6733
6734
6735
6736 for {
6737 if auxIntToInt32(v.AuxInt) != 0 {
6738 break
6739 }
6740 sym := auxToSym(v.Aux)
6741 if v_0.Op != OpARMADDshiftRA {
6742 break
6743 }
6744 c := auxIntToInt32(v_0.AuxInt)
6745 idx := v_0.Args[1]
6746 ptr := v_0.Args[0]
6747 val := v_1
6748 mem := v_2
6749 if !(sym == nil) {
6750 break
6751 }
6752 v.reset(OpARMMOVWstoreshiftRA)
6753 v.AuxInt = int32ToAuxInt(c)
6754 v.AddArg4(ptr, idx, val, mem)
6755 return true
6756 }
6757 return false
6758 }
6759 func rewriteValueARM_OpARMMOVWstoreidx(v *Value) bool {
6760 v_3 := v.Args[3]
6761 v_2 := v.Args[2]
6762 v_1 := v.Args[1]
6763 v_0 := v.Args[0]
6764
6765
6766 for {
6767 ptr := v_0
6768 if v_1.Op != OpARMMOVWconst {
6769 break
6770 }
6771 c := auxIntToInt32(v_1.AuxInt)
6772 val := v_2
6773 mem := v_3
6774 v.reset(OpARMMOVWstore)
6775 v.AuxInt = int32ToAuxInt(c)
6776 v.AddArg3(ptr, val, mem)
6777 return true
6778 }
6779
6780
6781 for {
6782 if v_0.Op != OpARMMOVWconst {
6783 break
6784 }
6785 c := auxIntToInt32(v_0.AuxInt)
6786 ptr := v_1
6787 val := v_2
6788 mem := v_3
6789 v.reset(OpARMMOVWstore)
6790 v.AuxInt = int32ToAuxInt(c)
6791 v.AddArg3(ptr, val, mem)
6792 return true
6793 }
6794
6795
6796 for {
6797 ptr := v_0
6798 if v_1.Op != OpARMSLLconst {
6799 break
6800 }
6801 c := auxIntToInt32(v_1.AuxInt)
6802 idx := v_1.Args[0]
6803 val := v_2
6804 mem := v_3
6805 v.reset(OpARMMOVWstoreshiftLL)
6806 v.AuxInt = int32ToAuxInt(c)
6807 v.AddArg4(ptr, idx, val, mem)
6808 return true
6809 }
6810
6811
6812 for {
6813 if v_0.Op != OpARMSLLconst {
6814 break
6815 }
6816 c := auxIntToInt32(v_0.AuxInt)
6817 idx := v_0.Args[0]
6818 ptr := v_1
6819 val := v_2
6820 mem := v_3
6821 v.reset(OpARMMOVWstoreshiftLL)
6822 v.AuxInt = int32ToAuxInt(c)
6823 v.AddArg4(ptr, idx, val, mem)
6824 return true
6825 }
6826
6827
6828 for {
6829 ptr := v_0
6830 if v_1.Op != OpARMSRLconst {
6831 break
6832 }
6833 c := auxIntToInt32(v_1.AuxInt)
6834 idx := v_1.Args[0]
6835 val := v_2
6836 mem := v_3
6837 v.reset(OpARMMOVWstoreshiftRL)
6838 v.AuxInt = int32ToAuxInt(c)
6839 v.AddArg4(ptr, idx, val, mem)
6840 return true
6841 }
6842
6843
6844 for {
6845 if v_0.Op != OpARMSRLconst {
6846 break
6847 }
6848 c := auxIntToInt32(v_0.AuxInt)
6849 idx := v_0.Args[0]
6850 ptr := v_1
6851 val := v_2
6852 mem := v_3
6853 v.reset(OpARMMOVWstoreshiftRL)
6854 v.AuxInt = int32ToAuxInt(c)
6855 v.AddArg4(ptr, idx, val, mem)
6856 return true
6857 }
6858
6859
6860 for {
6861 ptr := v_0
6862 if v_1.Op != OpARMSRAconst {
6863 break
6864 }
6865 c := auxIntToInt32(v_1.AuxInt)
6866 idx := v_1.Args[0]
6867 val := v_2
6868 mem := v_3
6869 v.reset(OpARMMOVWstoreshiftRA)
6870 v.AuxInt = int32ToAuxInt(c)
6871 v.AddArg4(ptr, idx, val, mem)
6872 return true
6873 }
6874
6875
6876 for {
6877 if v_0.Op != OpARMSRAconst {
6878 break
6879 }
6880 c := auxIntToInt32(v_0.AuxInt)
6881 idx := v_0.Args[0]
6882 ptr := v_1
6883 val := v_2
6884 mem := v_3
6885 v.reset(OpARMMOVWstoreshiftRA)
6886 v.AuxInt = int32ToAuxInt(c)
6887 v.AddArg4(ptr, idx, val, mem)
6888 return true
6889 }
6890 return false
6891 }
6892 func rewriteValueARM_OpARMMOVWstoreshiftLL(v *Value) bool {
6893 v_3 := v.Args[3]
6894 v_2 := v.Args[2]
6895 v_1 := v.Args[1]
6896 v_0 := v.Args[0]
6897
6898
6899 for {
6900 d := auxIntToInt32(v.AuxInt)
6901 ptr := v_0
6902 if v_1.Op != OpARMMOVWconst {
6903 break
6904 }
6905 c := auxIntToInt32(v_1.AuxInt)
6906 val := v_2
6907 mem := v_3
6908 v.reset(OpARMMOVWstore)
6909 v.AuxInt = int32ToAuxInt(int32(uint32(c) << uint64(d)))
6910 v.AddArg3(ptr, val, mem)
6911 return true
6912 }
6913 return false
6914 }
6915 func rewriteValueARM_OpARMMOVWstoreshiftRA(v *Value) bool {
6916 v_3 := v.Args[3]
6917 v_2 := v.Args[2]
6918 v_1 := v.Args[1]
6919 v_0 := v.Args[0]
6920
6921
6922 for {
6923 d := auxIntToInt32(v.AuxInt)
6924 ptr := v_0
6925 if v_1.Op != OpARMMOVWconst {
6926 break
6927 }
6928 c := auxIntToInt32(v_1.AuxInt)
6929 val := v_2
6930 mem := v_3
6931 v.reset(OpARMMOVWstore)
6932 v.AuxInt = int32ToAuxInt(c >> uint64(d))
6933 v.AddArg3(ptr, val, mem)
6934 return true
6935 }
6936 return false
6937 }
6938 func rewriteValueARM_OpARMMOVWstoreshiftRL(v *Value) bool {
6939 v_3 := v.Args[3]
6940 v_2 := v.Args[2]
6941 v_1 := v.Args[1]
6942 v_0 := v.Args[0]
6943
6944
6945 for {
6946 d := auxIntToInt32(v.AuxInt)
6947 ptr := v_0
6948 if v_1.Op != OpARMMOVWconst {
6949 break
6950 }
6951 c := auxIntToInt32(v_1.AuxInt)
6952 val := v_2
6953 mem := v_3
6954 v.reset(OpARMMOVWstore)
6955 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
6956 v.AddArg3(ptr, val, mem)
6957 return true
6958 }
6959 return false
6960 }
6961 func rewriteValueARM_OpARMMUL(v *Value) bool {
6962 v_1 := v.Args[1]
6963 v_0 := v.Args[0]
6964 b := v.Block
6965
6966
6967
6968 for {
6969 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6970 x := v_0
6971 if v_1.Op != OpARMMOVWconst {
6972 continue
6973 }
6974 c := auxIntToInt32(v_1.AuxInt)
6975 if !(int32(c) == -1) {
6976 continue
6977 }
6978 v.reset(OpARMRSBconst)
6979 v.AuxInt = int32ToAuxInt(0)
6980 v.AddArg(x)
6981 return true
6982 }
6983 break
6984 }
6985
6986
6987 for {
6988 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6989 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
6990 continue
6991 }
6992 v.reset(OpARMMOVWconst)
6993 v.AuxInt = int32ToAuxInt(0)
6994 return true
6995 }
6996 break
6997 }
6998
6999
7000 for {
7001 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7002 x := v_0
7003 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7004 continue
7005 }
7006 v.copyOf(x)
7007 return true
7008 }
7009 break
7010 }
7011
7012
7013
7014 for {
7015 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7016 x := v_0
7017 if v_1.Op != OpARMMOVWconst {
7018 continue
7019 }
7020 c := auxIntToInt32(v_1.AuxInt)
7021 if !(isPowerOfTwo32(c)) {
7022 continue
7023 }
7024 v.reset(OpARMSLLconst)
7025 v.AuxInt = int32ToAuxInt(int32(log32(c)))
7026 v.AddArg(x)
7027 return true
7028 }
7029 break
7030 }
7031
7032
7033
7034 for {
7035 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7036 x := v_0
7037 if v_1.Op != OpARMMOVWconst {
7038 continue
7039 }
7040 c := auxIntToInt32(v_1.AuxInt)
7041 if !(isPowerOfTwo32(c-1) && c >= 3) {
7042 continue
7043 }
7044 v.reset(OpARMADDshiftLL)
7045 v.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7046 v.AddArg2(x, x)
7047 return true
7048 }
7049 break
7050 }
7051
7052
7053
7054 for {
7055 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7056 x := v_0
7057 if v_1.Op != OpARMMOVWconst {
7058 continue
7059 }
7060 c := auxIntToInt32(v_1.AuxInt)
7061 if !(isPowerOfTwo32(c+1) && c >= 7) {
7062 continue
7063 }
7064 v.reset(OpARMRSBshiftLL)
7065 v.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7066 v.AddArg2(x, x)
7067 return true
7068 }
7069 break
7070 }
7071
7072
7073
7074 for {
7075 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7076 x := v_0
7077 if v_1.Op != OpARMMOVWconst {
7078 continue
7079 }
7080 c := auxIntToInt32(v_1.AuxInt)
7081 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7082 continue
7083 }
7084 v.reset(OpARMSLLconst)
7085 v.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7086 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7087 v0.AuxInt = int32ToAuxInt(1)
7088 v0.AddArg2(x, x)
7089 v.AddArg(v0)
7090 return true
7091 }
7092 break
7093 }
7094
7095
7096
7097 for {
7098 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7099 x := v_0
7100 if v_1.Op != OpARMMOVWconst {
7101 continue
7102 }
7103 c := auxIntToInt32(v_1.AuxInt)
7104 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7105 continue
7106 }
7107 v.reset(OpARMSLLconst)
7108 v.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7109 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7110 v0.AuxInt = int32ToAuxInt(2)
7111 v0.AddArg2(x, x)
7112 v.AddArg(v0)
7113 return true
7114 }
7115 break
7116 }
7117
7118
7119
7120 for {
7121 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7122 x := v_0
7123 if v_1.Op != OpARMMOVWconst {
7124 continue
7125 }
7126 c := auxIntToInt32(v_1.AuxInt)
7127 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7128 continue
7129 }
7130 v.reset(OpARMSLLconst)
7131 v.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7132 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7133 v0.AuxInt = int32ToAuxInt(3)
7134 v0.AddArg2(x, x)
7135 v.AddArg(v0)
7136 return true
7137 }
7138 break
7139 }
7140
7141
7142
7143 for {
7144 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7145 x := v_0
7146 if v_1.Op != OpARMMOVWconst {
7147 continue
7148 }
7149 c := auxIntToInt32(v_1.AuxInt)
7150 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7151 continue
7152 }
7153 v.reset(OpARMSLLconst)
7154 v.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7155 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7156 v0.AuxInt = int32ToAuxInt(3)
7157 v0.AddArg2(x, x)
7158 v.AddArg(v0)
7159 return true
7160 }
7161 break
7162 }
7163
7164
7165 for {
7166 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7167 if v_0.Op != OpARMMOVWconst {
7168 continue
7169 }
7170 c := auxIntToInt32(v_0.AuxInt)
7171 if v_1.Op != OpARMMOVWconst {
7172 continue
7173 }
7174 d := auxIntToInt32(v_1.AuxInt)
7175 v.reset(OpARMMOVWconst)
7176 v.AuxInt = int32ToAuxInt(c * d)
7177 return true
7178 }
7179 break
7180 }
7181 return false
7182 }
7183 func rewriteValueARM_OpARMMULA(v *Value) bool {
7184 v_2 := v.Args[2]
7185 v_1 := v.Args[1]
7186 v_0 := v.Args[0]
7187 b := v.Block
7188
7189
7190
7191 for {
7192 x := v_0
7193 if v_1.Op != OpARMMOVWconst {
7194 break
7195 }
7196 c := auxIntToInt32(v_1.AuxInt)
7197 a := v_2
7198 if !(c == -1) {
7199 break
7200 }
7201 v.reset(OpARMSUB)
7202 v.AddArg2(a, x)
7203 return true
7204 }
7205
7206
7207 for {
7208 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
7209 break
7210 }
7211 a := v_2
7212 v.copyOf(a)
7213 return true
7214 }
7215
7216
7217 for {
7218 x := v_0
7219 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7220 break
7221 }
7222 a := v_2
7223 v.reset(OpARMADD)
7224 v.AddArg2(x, a)
7225 return true
7226 }
7227
7228
7229
7230 for {
7231 x := v_0
7232 if v_1.Op != OpARMMOVWconst {
7233 break
7234 }
7235 c := auxIntToInt32(v_1.AuxInt)
7236 a := v_2
7237 if !(isPowerOfTwo32(c)) {
7238 break
7239 }
7240 v.reset(OpARMADD)
7241 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7242 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7243 v0.AddArg(x)
7244 v.AddArg2(v0, a)
7245 return true
7246 }
7247
7248
7249
7250 for {
7251 x := v_0
7252 if v_1.Op != OpARMMOVWconst {
7253 break
7254 }
7255 c := auxIntToInt32(v_1.AuxInt)
7256 a := v_2
7257 if !(isPowerOfTwo32(c-1) && c >= 3) {
7258 break
7259 }
7260 v.reset(OpARMADD)
7261 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7262 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7263 v0.AddArg2(x, x)
7264 v.AddArg2(v0, a)
7265 return true
7266 }
7267
7268
7269
7270 for {
7271 x := v_0
7272 if v_1.Op != OpARMMOVWconst {
7273 break
7274 }
7275 c := auxIntToInt32(v_1.AuxInt)
7276 a := v_2
7277 if !(isPowerOfTwo32(c+1) && c >= 7) {
7278 break
7279 }
7280 v.reset(OpARMADD)
7281 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7282 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7283 v0.AddArg2(x, x)
7284 v.AddArg2(v0, a)
7285 return true
7286 }
7287
7288
7289
7290 for {
7291 x := v_0
7292 if v_1.Op != OpARMMOVWconst {
7293 break
7294 }
7295 c := auxIntToInt32(v_1.AuxInt)
7296 a := v_2
7297 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7298 break
7299 }
7300 v.reset(OpARMADD)
7301 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7302 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7303 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7304 v1.AuxInt = int32ToAuxInt(1)
7305 v1.AddArg2(x, x)
7306 v0.AddArg(v1)
7307 v.AddArg2(v0, a)
7308 return true
7309 }
7310
7311
7312
7313 for {
7314 x := v_0
7315 if v_1.Op != OpARMMOVWconst {
7316 break
7317 }
7318 c := auxIntToInt32(v_1.AuxInt)
7319 a := v_2
7320 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7321 break
7322 }
7323 v.reset(OpARMADD)
7324 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7325 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7326 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7327 v1.AuxInt = int32ToAuxInt(2)
7328 v1.AddArg2(x, x)
7329 v0.AddArg(v1)
7330 v.AddArg2(v0, a)
7331 return true
7332 }
7333
7334
7335
7336 for {
7337 x := v_0
7338 if v_1.Op != OpARMMOVWconst {
7339 break
7340 }
7341 c := auxIntToInt32(v_1.AuxInt)
7342 a := v_2
7343 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7344 break
7345 }
7346 v.reset(OpARMADD)
7347 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7348 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7349 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7350 v1.AuxInt = int32ToAuxInt(3)
7351 v1.AddArg2(x, x)
7352 v0.AddArg(v1)
7353 v.AddArg2(v0, a)
7354 return true
7355 }
7356
7357
7358
7359 for {
7360 x := v_0
7361 if v_1.Op != OpARMMOVWconst {
7362 break
7363 }
7364 c := auxIntToInt32(v_1.AuxInt)
7365 a := v_2
7366 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7367 break
7368 }
7369 v.reset(OpARMADD)
7370 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7371 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7372 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7373 v1.AuxInt = int32ToAuxInt(3)
7374 v1.AddArg2(x, x)
7375 v0.AddArg(v1)
7376 v.AddArg2(v0, a)
7377 return true
7378 }
7379
7380
7381
7382 for {
7383 if v_0.Op != OpARMMOVWconst {
7384 break
7385 }
7386 c := auxIntToInt32(v_0.AuxInt)
7387 x := v_1
7388 a := v_2
7389 if !(c == -1) {
7390 break
7391 }
7392 v.reset(OpARMSUB)
7393 v.AddArg2(a, x)
7394 return true
7395 }
7396
7397
7398 for {
7399 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 0 {
7400 break
7401 }
7402 a := v_2
7403 v.copyOf(a)
7404 return true
7405 }
7406
7407
7408 for {
7409 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 1 {
7410 break
7411 }
7412 x := v_1
7413 a := v_2
7414 v.reset(OpARMADD)
7415 v.AddArg2(x, a)
7416 return true
7417 }
7418
7419
7420
7421 for {
7422 if v_0.Op != OpARMMOVWconst {
7423 break
7424 }
7425 c := auxIntToInt32(v_0.AuxInt)
7426 x := v_1
7427 a := v_2
7428 if !(isPowerOfTwo32(c)) {
7429 break
7430 }
7431 v.reset(OpARMADD)
7432 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7433 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7434 v0.AddArg(x)
7435 v.AddArg2(v0, a)
7436 return true
7437 }
7438
7439
7440
7441 for {
7442 if v_0.Op != OpARMMOVWconst {
7443 break
7444 }
7445 c := auxIntToInt32(v_0.AuxInt)
7446 x := v_1
7447 a := v_2
7448 if !(isPowerOfTwo32(c-1) && c >= 3) {
7449 break
7450 }
7451 v.reset(OpARMADD)
7452 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7453 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7454 v0.AddArg2(x, x)
7455 v.AddArg2(v0, a)
7456 return true
7457 }
7458
7459
7460
7461 for {
7462 if v_0.Op != OpARMMOVWconst {
7463 break
7464 }
7465 c := auxIntToInt32(v_0.AuxInt)
7466 x := v_1
7467 a := v_2
7468 if !(isPowerOfTwo32(c+1) && c >= 7) {
7469 break
7470 }
7471 v.reset(OpARMADD)
7472 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7473 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7474 v0.AddArg2(x, x)
7475 v.AddArg2(v0, a)
7476 return true
7477 }
7478
7479
7480
7481 for {
7482 if v_0.Op != OpARMMOVWconst {
7483 break
7484 }
7485 c := auxIntToInt32(v_0.AuxInt)
7486 x := v_1
7487 a := v_2
7488 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7489 break
7490 }
7491 v.reset(OpARMADD)
7492 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7493 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7494 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7495 v1.AuxInt = int32ToAuxInt(1)
7496 v1.AddArg2(x, x)
7497 v0.AddArg(v1)
7498 v.AddArg2(v0, a)
7499 return true
7500 }
7501
7502
7503
7504 for {
7505 if v_0.Op != OpARMMOVWconst {
7506 break
7507 }
7508 c := auxIntToInt32(v_0.AuxInt)
7509 x := v_1
7510 a := v_2
7511 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7512 break
7513 }
7514 v.reset(OpARMADD)
7515 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7516 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7517 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7518 v1.AuxInt = int32ToAuxInt(2)
7519 v1.AddArg2(x, x)
7520 v0.AddArg(v1)
7521 v.AddArg2(v0, a)
7522 return true
7523 }
7524
7525
7526
7527 for {
7528 if v_0.Op != OpARMMOVWconst {
7529 break
7530 }
7531 c := auxIntToInt32(v_0.AuxInt)
7532 x := v_1
7533 a := v_2
7534 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7535 break
7536 }
7537 v.reset(OpARMADD)
7538 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7539 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7540 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7541 v1.AuxInt = int32ToAuxInt(3)
7542 v1.AddArg2(x, x)
7543 v0.AddArg(v1)
7544 v.AddArg2(v0, a)
7545 return true
7546 }
7547
7548
7549
7550 for {
7551 if v_0.Op != OpARMMOVWconst {
7552 break
7553 }
7554 c := auxIntToInt32(v_0.AuxInt)
7555 x := v_1
7556 a := v_2
7557 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7558 break
7559 }
7560 v.reset(OpARMADD)
7561 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7562 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7563 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7564 v1.AuxInt = int32ToAuxInt(3)
7565 v1.AddArg2(x, x)
7566 v0.AddArg(v1)
7567 v.AddArg2(v0, a)
7568 return true
7569 }
7570
7571
7572 for {
7573 if v_0.Op != OpARMMOVWconst {
7574 break
7575 }
7576 c := auxIntToInt32(v_0.AuxInt)
7577 if v_1.Op != OpARMMOVWconst {
7578 break
7579 }
7580 d := auxIntToInt32(v_1.AuxInt)
7581 a := v_2
7582 v.reset(OpARMADDconst)
7583 v.AuxInt = int32ToAuxInt(c * d)
7584 v.AddArg(a)
7585 return true
7586 }
7587 return false
7588 }
7589 func rewriteValueARM_OpARMMULD(v *Value) bool {
7590 v_1 := v.Args[1]
7591 v_0 := v.Args[0]
7592
7593
7594
7595 for {
7596 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7597 if v_0.Op != OpARMNEGD {
7598 continue
7599 }
7600 x := v_0.Args[0]
7601 y := v_1
7602 if !(buildcfg.GOARM.Version >= 6) {
7603 continue
7604 }
7605 v.reset(OpARMNMULD)
7606 v.AddArg2(x, y)
7607 return true
7608 }
7609 break
7610 }
7611 return false
7612 }
7613 func rewriteValueARM_OpARMMULF(v *Value) bool {
7614 v_1 := v.Args[1]
7615 v_0 := v.Args[0]
7616
7617
7618
7619 for {
7620 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
7621 if v_0.Op != OpARMNEGF {
7622 continue
7623 }
7624 x := v_0.Args[0]
7625 y := v_1
7626 if !(buildcfg.GOARM.Version >= 6) {
7627 continue
7628 }
7629 v.reset(OpARMNMULF)
7630 v.AddArg2(x, y)
7631 return true
7632 }
7633 break
7634 }
7635 return false
7636 }
7637 func rewriteValueARM_OpARMMULS(v *Value) bool {
7638 v_2 := v.Args[2]
7639 v_1 := v.Args[1]
7640 v_0 := v.Args[0]
7641 b := v.Block
7642
7643
7644
7645 for {
7646 x := v_0
7647 if v_1.Op != OpARMMOVWconst {
7648 break
7649 }
7650 c := auxIntToInt32(v_1.AuxInt)
7651 a := v_2
7652 if !(c == -1) {
7653 break
7654 }
7655 v.reset(OpARMADD)
7656 v.AddArg2(a, x)
7657 return true
7658 }
7659
7660
7661 for {
7662 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 0 {
7663 break
7664 }
7665 a := v_2
7666 v.copyOf(a)
7667 return true
7668 }
7669
7670
7671 for {
7672 x := v_0
7673 if v_1.Op != OpARMMOVWconst || auxIntToInt32(v_1.AuxInt) != 1 {
7674 break
7675 }
7676 a := v_2
7677 v.reset(OpARMRSB)
7678 v.AddArg2(x, a)
7679 return true
7680 }
7681
7682
7683
7684 for {
7685 x := v_0
7686 if v_1.Op != OpARMMOVWconst {
7687 break
7688 }
7689 c := auxIntToInt32(v_1.AuxInt)
7690 a := v_2
7691 if !(isPowerOfTwo32(c)) {
7692 break
7693 }
7694 v.reset(OpARMRSB)
7695 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7696 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7697 v0.AddArg(x)
7698 v.AddArg2(v0, a)
7699 return true
7700 }
7701
7702
7703
7704 for {
7705 x := v_0
7706 if v_1.Op != OpARMMOVWconst {
7707 break
7708 }
7709 c := auxIntToInt32(v_1.AuxInt)
7710 a := v_2
7711 if !(isPowerOfTwo32(c-1) && c >= 3) {
7712 break
7713 }
7714 v.reset(OpARMRSB)
7715 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7716 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7717 v0.AddArg2(x, x)
7718 v.AddArg2(v0, a)
7719 return true
7720 }
7721
7722
7723
7724 for {
7725 x := v_0
7726 if v_1.Op != OpARMMOVWconst {
7727 break
7728 }
7729 c := auxIntToInt32(v_1.AuxInt)
7730 a := v_2
7731 if !(isPowerOfTwo32(c+1) && c >= 7) {
7732 break
7733 }
7734 v.reset(OpARMRSB)
7735 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7736 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7737 v0.AddArg2(x, x)
7738 v.AddArg2(v0, a)
7739 return true
7740 }
7741
7742
7743
7744 for {
7745 x := v_0
7746 if v_1.Op != OpARMMOVWconst {
7747 break
7748 }
7749 c := auxIntToInt32(v_1.AuxInt)
7750 a := v_2
7751 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7752 break
7753 }
7754 v.reset(OpARMRSB)
7755 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7756 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7757 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7758 v1.AuxInt = int32ToAuxInt(1)
7759 v1.AddArg2(x, x)
7760 v0.AddArg(v1)
7761 v.AddArg2(v0, a)
7762 return true
7763 }
7764
7765
7766
7767 for {
7768 x := v_0
7769 if v_1.Op != OpARMMOVWconst {
7770 break
7771 }
7772 c := auxIntToInt32(v_1.AuxInt)
7773 a := v_2
7774 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7775 break
7776 }
7777 v.reset(OpARMRSB)
7778 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7779 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7780 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7781 v1.AuxInt = int32ToAuxInt(2)
7782 v1.AddArg2(x, x)
7783 v0.AddArg(v1)
7784 v.AddArg2(v0, a)
7785 return true
7786 }
7787
7788
7789
7790 for {
7791 x := v_0
7792 if v_1.Op != OpARMMOVWconst {
7793 break
7794 }
7795 c := auxIntToInt32(v_1.AuxInt)
7796 a := v_2
7797 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7798 break
7799 }
7800 v.reset(OpARMRSB)
7801 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7802 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7803 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7804 v1.AuxInt = int32ToAuxInt(3)
7805 v1.AddArg2(x, x)
7806 v0.AddArg(v1)
7807 v.AddArg2(v0, a)
7808 return true
7809 }
7810
7811
7812
7813 for {
7814 x := v_0
7815 if v_1.Op != OpARMMOVWconst {
7816 break
7817 }
7818 c := auxIntToInt32(v_1.AuxInt)
7819 a := v_2
7820 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
7821 break
7822 }
7823 v.reset(OpARMRSB)
7824 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7825 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
7826 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7827 v1.AuxInt = int32ToAuxInt(3)
7828 v1.AddArg2(x, x)
7829 v0.AddArg(v1)
7830 v.AddArg2(v0, a)
7831 return true
7832 }
7833
7834
7835
7836 for {
7837 if v_0.Op != OpARMMOVWconst {
7838 break
7839 }
7840 c := auxIntToInt32(v_0.AuxInt)
7841 x := v_1
7842 a := v_2
7843 if !(c == -1) {
7844 break
7845 }
7846 v.reset(OpARMADD)
7847 v.AddArg2(a, x)
7848 return true
7849 }
7850
7851
7852 for {
7853 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 0 {
7854 break
7855 }
7856 a := v_2
7857 v.copyOf(a)
7858 return true
7859 }
7860
7861
7862 for {
7863 if v_0.Op != OpARMMOVWconst || auxIntToInt32(v_0.AuxInt) != 1 {
7864 break
7865 }
7866 x := v_1
7867 a := v_2
7868 v.reset(OpARMRSB)
7869 v.AddArg2(x, a)
7870 return true
7871 }
7872
7873
7874
7875 for {
7876 if v_0.Op != OpARMMOVWconst {
7877 break
7878 }
7879 c := auxIntToInt32(v_0.AuxInt)
7880 x := v_1
7881 a := v_2
7882 if !(isPowerOfTwo32(c)) {
7883 break
7884 }
7885 v.reset(OpARMRSB)
7886 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7887 v0.AuxInt = int32ToAuxInt(int32(log32(c)))
7888 v0.AddArg(x)
7889 v.AddArg2(v0, a)
7890 return true
7891 }
7892
7893
7894
7895 for {
7896 if v_0.Op != OpARMMOVWconst {
7897 break
7898 }
7899 c := auxIntToInt32(v_0.AuxInt)
7900 x := v_1
7901 a := v_2
7902 if !(isPowerOfTwo32(c-1) && c >= 3) {
7903 break
7904 }
7905 v.reset(OpARMRSB)
7906 v0 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7907 v0.AuxInt = int32ToAuxInt(int32(log32(c - 1)))
7908 v0.AddArg2(x, x)
7909 v.AddArg2(v0, a)
7910 return true
7911 }
7912
7913
7914
7915 for {
7916 if v_0.Op != OpARMMOVWconst {
7917 break
7918 }
7919 c := auxIntToInt32(v_0.AuxInt)
7920 x := v_1
7921 a := v_2
7922 if !(isPowerOfTwo32(c+1) && c >= 7) {
7923 break
7924 }
7925 v.reset(OpARMRSB)
7926 v0 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7927 v0.AuxInt = int32ToAuxInt(int32(log32(c + 1)))
7928 v0.AddArg2(x, x)
7929 v.AddArg2(v0, a)
7930 return true
7931 }
7932
7933
7934
7935 for {
7936 if v_0.Op != OpARMMOVWconst {
7937 break
7938 }
7939 c := auxIntToInt32(v_0.AuxInt)
7940 x := v_1
7941 a := v_2
7942 if !(c%3 == 0 && isPowerOfTwo32(c/3)) {
7943 break
7944 }
7945 v.reset(OpARMRSB)
7946 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7947 v0.AuxInt = int32ToAuxInt(int32(log32(c / 3)))
7948 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7949 v1.AuxInt = int32ToAuxInt(1)
7950 v1.AddArg2(x, x)
7951 v0.AddArg(v1)
7952 v.AddArg2(v0, a)
7953 return true
7954 }
7955
7956
7957
7958 for {
7959 if v_0.Op != OpARMMOVWconst {
7960 break
7961 }
7962 c := auxIntToInt32(v_0.AuxInt)
7963 x := v_1
7964 a := v_2
7965 if !(c%5 == 0 && isPowerOfTwo32(c/5)) {
7966 break
7967 }
7968 v.reset(OpARMRSB)
7969 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7970 v0.AuxInt = int32ToAuxInt(int32(log32(c / 5)))
7971 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
7972 v1.AuxInt = int32ToAuxInt(2)
7973 v1.AddArg2(x, x)
7974 v0.AddArg(v1)
7975 v.AddArg2(v0, a)
7976 return true
7977 }
7978
7979
7980
7981 for {
7982 if v_0.Op != OpARMMOVWconst {
7983 break
7984 }
7985 c := auxIntToInt32(v_0.AuxInt)
7986 x := v_1
7987 a := v_2
7988 if !(c%7 == 0 && isPowerOfTwo32(c/7)) {
7989 break
7990 }
7991 v.reset(OpARMRSB)
7992 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
7993 v0.AuxInt = int32ToAuxInt(int32(log32(c / 7)))
7994 v1 := b.NewValue0(v.Pos, OpARMRSBshiftLL, x.Type)
7995 v1.AuxInt = int32ToAuxInt(3)
7996 v1.AddArg2(x, x)
7997 v0.AddArg(v1)
7998 v.AddArg2(v0, a)
7999 return true
8000 }
8001
8002
8003
8004 for {
8005 if v_0.Op != OpARMMOVWconst {
8006 break
8007 }
8008 c := auxIntToInt32(v_0.AuxInt)
8009 x := v_1
8010 a := v_2
8011 if !(c%9 == 0 && isPowerOfTwo32(c/9)) {
8012 break
8013 }
8014 v.reset(OpARMRSB)
8015 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
8016 v0.AuxInt = int32ToAuxInt(int32(log32(c / 9)))
8017 v1 := b.NewValue0(v.Pos, OpARMADDshiftLL, x.Type)
8018 v1.AuxInt = int32ToAuxInt(3)
8019 v1.AddArg2(x, x)
8020 v0.AddArg(v1)
8021 v.AddArg2(v0, a)
8022 return true
8023 }
8024
8025
8026 for {
8027 if v_0.Op != OpARMMOVWconst {
8028 break
8029 }
8030 c := auxIntToInt32(v_0.AuxInt)
8031 if v_1.Op != OpARMMOVWconst {
8032 break
8033 }
8034 d := auxIntToInt32(v_1.AuxInt)
8035 a := v_2
8036 v.reset(OpARMSUBconst)
8037 v.AuxInt = int32ToAuxInt(c * d)
8038 v.AddArg(a)
8039 return true
8040 }
8041 return false
8042 }
8043 func rewriteValueARM_OpARMMVN(v *Value) bool {
8044 v_0 := v.Args[0]
8045
8046
8047 for {
8048 if v_0.Op != OpARMMOVWconst {
8049 break
8050 }
8051 c := auxIntToInt32(v_0.AuxInt)
8052 v.reset(OpARMMOVWconst)
8053 v.AuxInt = int32ToAuxInt(^c)
8054 return true
8055 }
8056
8057
8058 for {
8059 if v_0.Op != OpARMSLLconst {
8060 break
8061 }
8062 c := auxIntToInt32(v_0.AuxInt)
8063 x := v_0.Args[0]
8064 v.reset(OpARMMVNshiftLL)
8065 v.AuxInt = int32ToAuxInt(c)
8066 v.AddArg(x)
8067 return true
8068 }
8069
8070
8071 for {
8072 if v_0.Op != OpARMSRLconst {
8073 break
8074 }
8075 c := auxIntToInt32(v_0.AuxInt)
8076 x := v_0.Args[0]
8077 v.reset(OpARMMVNshiftRL)
8078 v.AuxInt = int32ToAuxInt(c)
8079 v.AddArg(x)
8080 return true
8081 }
8082
8083
8084 for {
8085 if v_0.Op != OpARMSRAconst {
8086 break
8087 }
8088 c := auxIntToInt32(v_0.AuxInt)
8089 x := v_0.Args[0]
8090 v.reset(OpARMMVNshiftRA)
8091 v.AuxInt = int32ToAuxInt(c)
8092 v.AddArg(x)
8093 return true
8094 }
8095
8096
8097 for {
8098 if v_0.Op != OpARMSLL {
8099 break
8100 }
8101 y := v_0.Args[1]
8102 x := v_0.Args[0]
8103 v.reset(OpARMMVNshiftLLreg)
8104 v.AddArg2(x, y)
8105 return true
8106 }
8107
8108
8109 for {
8110 if v_0.Op != OpARMSRL {
8111 break
8112 }
8113 y := v_0.Args[1]
8114 x := v_0.Args[0]
8115 v.reset(OpARMMVNshiftRLreg)
8116 v.AddArg2(x, y)
8117 return true
8118 }
8119
8120
8121 for {
8122 if v_0.Op != OpARMSRA {
8123 break
8124 }
8125 y := v_0.Args[1]
8126 x := v_0.Args[0]
8127 v.reset(OpARMMVNshiftRAreg)
8128 v.AddArg2(x, y)
8129 return true
8130 }
8131 return false
8132 }
8133 func rewriteValueARM_OpARMMVNshiftLL(v *Value) bool {
8134 v_0 := v.Args[0]
8135
8136
8137 for {
8138 d := auxIntToInt32(v.AuxInt)
8139 if v_0.Op != OpARMMOVWconst {
8140 break
8141 }
8142 c := auxIntToInt32(v_0.AuxInt)
8143 v.reset(OpARMMOVWconst)
8144 v.AuxInt = int32ToAuxInt(^(c << uint64(d)))
8145 return true
8146 }
8147 return false
8148 }
8149 func rewriteValueARM_OpARMMVNshiftLLreg(v *Value) bool {
8150 v_1 := v.Args[1]
8151 v_0 := v.Args[0]
8152
8153
8154
8155 for {
8156 x := v_0
8157 if v_1.Op != OpARMMOVWconst {
8158 break
8159 }
8160 c := auxIntToInt32(v_1.AuxInt)
8161 if !(0 <= c && c < 32) {
8162 break
8163 }
8164 v.reset(OpARMMVNshiftLL)
8165 v.AuxInt = int32ToAuxInt(c)
8166 v.AddArg(x)
8167 return true
8168 }
8169 return false
8170 }
8171 func rewriteValueARM_OpARMMVNshiftRA(v *Value) bool {
8172 v_0 := v.Args[0]
8173
8174
8175 for {
8176 d := auxIntToInt32(v.AuxInt)
8177 if v_0.Op != OpARMMOVWconst {
8178 break
8179 }
8180 c := auxIntToInt32(v_0.AuxInt)
8181 v.reset(OpARMMOVWconst)
8182 v.AuxInt = int32ToAuxInt(int32(c) >> uint64(d))
8183 return true
8184 }
8185 return false
8186 }
8187 func rewriteValueARM_OpARMMVNshiftRAreg(v *Value) bool {
8188 v_1 := v.Args[1]
8189 v_0 := v.Args[0]
8190
8191
8192
8193 for {
8194 x := v_0
8195 if v_1.Op != OpARMMOVWconst {
8196 break
8197 }
8198 c := auxIntToInt32(v_1.AuxInt)
8199 if !(0 <= c && c < 32) {
8200 break
8201 }
8202 v.reset(OpARMMVNshiftRA)
8203 v.AuxInt = int32ToAuxInt(c)
8204 v.AddArg(x)
8205 return true
8206 }
8207 return false
8208 }
8209 func rewriteValueARM_OpARMMVNshiftRL(v *Value) bool {
8210 v_0 := v.Args[0]
8211
8212
8213 for {
8214 d := auxIntToInt32(v.AuxInt)
8215 if v_0.Op != OpARMMOVWconst {
8216 break
8217 }
8218 c := auxIntToInt32(v_0.AuxInt)
8219 v.reset(OpARMMOVWconst)
8220 v.AuxInt = int32ToAuxInt(^int32(uint32(c) >> uint64(d)))
8221 return true
8222 }
8223 return false
8224 }
8225 func rewriteValueARM_OpARMMVNshiftRLreg(v *Value) bool {
8226 v_1 := v.Args[1]
8227 v_0 := v.Args[0]
8228
8229
8230
8231 for {
8232 x := v_0
8233 if v_1.Op != OpARMMOVWconst {
8234 break
8235 }
8236 c := auxIntToInt32(v_1.AuxInt)
8237 if !(0 <= c && c < 32) {
8238 break
8239 }
8240 v.reset(OpARMMVNshiftRL)
8241 v.AuxInt = int32ToAuxInt(c)
8242 v.AddArg(x)
8243 return true
8244 }
8245 return false
8246 }
8247 func rewriteValueARM_OpARMNEGD(v *Value) bool {
8248 v_0 := v.Args[0]
8249
8250
8251
8252 for {
8253 if v_0.Op != OpARMMULD {
8254 break
8255 }
8256 y := v_0.Args[1]
8257 x := v_0.Args[0]
8258 if !(buildcfg.GOARM.Version >= 6) {
8259 break
8260 }
8261 v.reset(OpARMNMULD)
8262 v.AddArg2(x, y)
8263 return true
8264 }
8265 return false
8266 }
8267 func rewriteValueARM_OpARMNEGF(v *Value) bool {
8268 v_0 := v.Args[0]
8269
8270
8271
8272 for {
8273 if v_0.Op != OpARMMULF {
8274 break
8275 }
8276 y := v_0.Args[1]
8277 x := v_0.Args[0]
8278 if !(buildcfg.GOARM.Version >= 6) {
8279 break
8280 }
8281 v.reset(OpARMNMULF)
8282 v.AddArg2(x, y)
8283 return true
8284 }
8285 return false
8286 }
8287 func rewriteValueARM_OpARMNMULD(v *Value) bool {
8288 v_1 := v.Args[1]
8289 v_0 := v.Args[0]
8290
8291
8292 for {
8293 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8294 if v_0.Op != OpARMNEGD {
8295 continue
8296 }
8297 x := v_0.Args[0]
8298 y := v_1
8299 v.reset(OpARMMULD)
8300 v.AddArg2(x, y)
8301 return true
8302 }
8303 break
8304 }
8305 return false
8306 }
8307 func rewriteValueARM_OpARMNMULF(v *Value) bool {
8308 v_1 := v.Args[1]
8309 v_0 := v.Args[0]
8310
8311
8312 for {
8313 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8314 if v_0.Op != OpARMNEGF {
8315 continue
8316 }
8317 x := v_0.Args[0]
8318 y := v_1
8319 v.reset(OpARMMULF)
8320 v.AddArg2(x, y)
8321 return true
8322 }
8323 break
8324 }
8325 return false
8326 }
8327 func rewriteValueARM_OpARMNotEqual(v *Value) bool {
8328 v_0 := v.Args[0]
8329
8330
8331 for {
8332 if v_0.Op != OpARMFlagConstant {
8333 break
8334 }
8335 fc := auxIntToFlagConstant(v_0.AuxInt)
8336 v.reset(OpARMMOVWconst)
8337 v.AuxInt = int32ToAuxInt(b2i32(fc.ne()))
8338 return true
8339 }
8340
8341
8342 for {
8343 if v_0.Op != OpARMInvertFlags {
8344 break
8345 }
8346 x := v_0.Args[0]
8347 v.reset(OpARMNotEqual)
8348 v.AddArg(x)
8349 return true
8350 }
8351 return false
8352 }
8353 func rewriteValueARM_OpARMOR(v *Value) bool {
8354 v_1 := v.Args[1]
8355 v_0 := v.Args[0]
8356
8357
8358 for {
8359 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8360 x := v_0
8361 if v_1.Op != OpARMMOVWconst {
8362 continue
8363 }
8364 c := auxIntToInt32(v_1.AuxInt)
8365 v.reset(OpARMORconst)
8366 v.AuxInt = int32ToAuxInt(c)
8367 v.AddArg(x)
8368 return true
8369 }
8370 break
8371 }
8372
8373
8374 for {
8375 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8376 x := v_0
8377 if v_1.Op != OpARMSLLconst {
8378 continue
8379 }
8380 c := auxIntToInt32(v_1.AuxInt)
8381 y := v_1.Args[0]
8382 v.reset(OpARMORshiftLL)
8383 v.AuxInt = int32ToAuxInt(c)
8384 v.AddArg2(x, y)
8385 return true
8386 }
8387 break
8388 }
8389
8390
8391 for {
8392 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8393 x := v_0
8394 if v_1.Op != OpARMSRLconst {
8395 continue
8396 }
8397 c := auxIntToInt32(v_1.AuxInt)
8398 y := v_1.Args[0]
8399 v.reset(OpARMORshiftRL)
8400 v.AuxInt = int32ToAuxInt(c)
8401 v.AddArg2(x, y)
8402 return true
8403 }
8404 break
8405 }
8406
8407
8408 for {
8409 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8410 x := v_0
8411 if v_1.Op != OpARMSRAconst {
8412 continue
8413 }
8414 c := auxIntToInt32(v_1.AuxInt)
8415 y := v_1.Args[0]
8416 v.reset(OpARMORshiftRA)
8417 v.AuxInt = int32ToAuxInt(c)
8418 v.AddArg2(x, y)
8419 return true
8420 }
8421 break
8422 }
8423
8424
8425 for {
8426 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8427 x := v_0
8428 if v_1.Op != OpARMSLL {
8429 continue
8430 }
8431 z := v_1.Args[1]
8432 y := v_1.Args[0]
8433 v.reset(OpARMORshiftLLreg)
8434 v.AddArg3(x, y, z)
8435 return true
8436 }
8437 break
8438 }
8439
8440
8441 for {
8442 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8443 x := v_0
8444 if v_1.Op != OpARMSRL {
8445 continue
8446 }
8447 z := v_1.Args[1]
8448 y := v_1.Args[0]
8449 v.reset(OpARMORshiftRLreg)
8450 v.AddArg3(x, y, z)
8451 return true
8452 }
8453 break
8454 }
8455
8456
8457 for {
8458 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
8459 x := v_0
8460 if v_1.Op != OpARMSRA {
8461 continue
8462 }
8463 z := v_1.Args[1]
8464 y := v_1.Args[0]
8465 v.reset(OpARMORshiftRAreg)
8466 v.AddArg3(x, y, z)
8467 return true
8468 }
8469 break
8470 }
8471
8472
8473 for {
8474 x := v_0
8475 if x != v_1 {
8476 break
8477 }
8478 v.copyOf(x)
8479 return true
8480 }
8481 return false
8482 }
8483 func rewriteValueARM_OpARMORconst(v *Value) bool {
8484 v_0 := v.Args[0]
8485
8486
8487 for {
8488 if auxIntToInt32(v.AuxInt) != 0 {
8489 break
8490 }
8491 x := v_0
8492 v.copyOf(x)
8493 return true
8494 }
8495
8496
8497
8498 for {
8499 c := auxIntToInt32(v.AuxInt)
8500 if !(int32(c) == -1) {
8501 break
8502 }
8503 v.reset(OpARMMOVWconst)
8504 v.AuxInt = int32ToAuxInt(-1)
8505 return true
8506 }
8507
8508
8509 for {
8510 c := auxIntToInt32(v.AuxInt)
8511 if v_0.Op != OpARMMOVWconst {
8512 break
8513 }
8514 d := auxIntToInt32(v_0.AuxInt)
8515 v.reset(OpARMMOVWconst)
8516 v.AuxInt = int32ToAuxInt(c | d)
8517 return true
8518 }
8519
8520
8521 for {
8522 c := auxIntToInt32(v.AuxInt)
8523 if v_0.Op != OpARMORconst {
8524 break
8525 }
8526 d := auxIntToInt32(v_0.AuxInt)
8527 x := v_0.Args[0]
8528 v.reset(OpARMORconst)
8529 v.AuxInt = int32ToAuxInt(c | d)
8530 v.AddArg(x)
8531 return true
8532 }
8533 return false
8534 }
8535 func rewriteValueARM_OpARMORshiftLL(v *Value) bool {
8536 v_1 := v.Args[1]
8537 v_0 := v.Args[0]
8538 b := v.Block
8539 typ := &b.Func.Config.Types
8540
8541
8542 for {
8543 d := auxIntToInt32(v.AuxInt)
8544 if v_0.Op != OpARMMOVWconst {
8545 break
8546 }
8547 c := auxIntToInt32(v_0.AuxInt)
8548 x := v_1
8549 v.reset(OpARMORconst)
8550 v.AuxInt = int32ToAuxInt(c)
8551 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
8552 v0.AuxInt = int32ToAuxInt(d)
8553 v0.AddArg(x)
8554 v.AddArg(v0)
8555 return true
8556 }
8557
8558
8559 for {
8560 d := auxIntToInt32(v.AuxInt)
8561 x := v_0
8562 if v_1.Op != OpARMMOVWconst {
8563 break
8564 }
8565 c := auxIntToInt32(v_1.AuxInt)
8566 v.reset(OpARMORconst)
8567 v.AuxInt = int32ToAuxInt(c << uint64(d))
8568 v.AddArg(x)
8569 return true
8570 }
8571
8572
8573 for {
8574 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)) {
8575 break
8576 }
8577 x := v_0.Args[0]
8578 if x != v_1 {
8579 break
8580 }
8581 v.reset(OpARMREV16)
8582 v.AddArg(x)
8583 return true
8584 }
8585
8586
8587
8588 for {
8589 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
8590 break
8591 }
8592 v_0_0 := v_0.Args[0]
8593 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
8594 break
8595 }
8596 x := v_0_0.Args[0]
8597 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
8598 break
8599 }
8600 v.reset(OpARMREV16)
8601 v.AddArg(x)
8602 return true
8603 }
8604
8605
8606 for {
8607 c := auxIntToInt32(v.AuxInt)
8608 y := v_0
8609 if y.Op != OpARMSLLconst || auxIntToInt32(y.AuxInt) != c {
8610 break
8611 }
8612 x := y.Args[0]
8613 if x != v_1 {
8614 break
8615 }
8616 v.copyOf(y)
8617 return true
8618 }
8619 return false
8620 }
8621 func rewriteValueARM_OpARMORshiftLLreg(v *Value) bool {
8622 v_2 := v.Args[2]
8623 v_1 := v.Args[1]
8624 v_0 := v.Args[0]
8625 b := v.Block
8626
8627
8628 for {
8629 if v_0.Op != OpARMMOVWconst {
8630 break
8631 }
8632 c := auxIntToInt32(v_0.AuxInt)
8633 x := v_1
8634 y := v_2
8635 v.reset(OpARMORconst)
8636 v.AuxInt = int32ToAuxInt(c)
8637 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
8638 v0.AddArg2(x, y)
8639 v.AddArg(v0)
8640 return true
8641 }
8642
8643
8644
8645 for {
8646 x := v_0
8647 y := v_1
8648 if v_2.Op != OpARMMOVWconst {
8649 break
8650 }
8651 c := auxIntToInt32(v_2.AuxInt)
8652 if !(0 <= c && c < 32) {
8653 break
8654 }
8655 v.reset(OpARMORshiftLL)
8656 v.AuxInt = int32ToAuxInt(c)
8657 v.AddArg2(x, y)
8658 return true
8659 }
8660 return false
8661 }
8662 func rewriteValueARM_OpARMORshiftRA(v *Value) bool {
8663 v_1 := v.Args[1]
8664 v_0 := v.Args[0]
8665 b := v.Block
8666
8667
8668 for {
8669 d := auxIntToInt32(v.AuxInt)
8670 if v_0.Op != OpARMMOVWconst {
8671 break
8672 }
8673 c := auxIntToInt32(v_0.AuxInt)
8674 x := v_1
8675 v.reset(OpARMORconst)
8676 v.AuxInt = int32ToAuxInt(c)
8677 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
8678 v0.AuxInt = int32ToAuxInt(d)
8679 v0.AddArg(x)
8680 v.AddArg(v0)
8681 return true
8682 }
8683
8684
8685 for {
8686 d := auxIntToInt32(v.AuxInt)
8687 x := v_0
8688 if v_1.Op != OpARMMOVWconst {
8689 break
8690 }
8691 c := auxIntToInt32(v_1.AuxInt)
8692 v.reset(OpARMORconst)
8693 v.AuxInt = int32ToAuxInt(c >> uint64(d))
8694 v.AddArg(x)
8695 return true
8696 }
8697
8698
8699 for {
8700 c := auxIntToInt32(v.AuxInt)
8701 y := v_0
8702 if y.Op != OpARMSRAconst || auxIntToInt32(y.AuxInt) != c {
8703 break
8704 }
8705 x := y.Args[0]
8706 if x != v_1 {
8707 break
8708 }
8709 v.copyOf(y)
8710 return true
8711 }
8712 return false
8713 }
8714 func rewriteValueARM_OpARMORshiftRAreg(v *Value) bool {
8715 v_2 := v.Args[2]
8716 v_1 := v.Args[1]
8717 v_0 := v.Args[0]
8718 b := v.Block
8719
8720
8721 for {
8722 if v_0.Op != OpARMMOVWconst {
8723 break
8724 }
8725 c := auxIntToInt32(v_0.AuxInt)
8726 x := v_1
8727 y := v_2
8728 v.reset(OpARMORconst)
8729 v.AuxInt = int32ToAuxInt(c)
8730 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
8731 v0.AddArg2(x, y)
8732 v.AddArg(v0)
8733 return true
8734 }
8735
8736
8737
8738 for {
8739 x := v_0
8740 y := v_1
8741 if v_2.Op != OpARMMOVWconst {
8742 break
8743 }
8744 c := auxIntToInt32(v_2.AuxInt)
8745 if !(0 <= c && c < 32) {
8746 break
8747 }
8748 v.reset(OpARMORshiftRA)
8749 v.AuxInt = int32ToAuxInt(c)
8750 v.AddArg2(x, y)
8751 return true
8752 }
8753 return false
8754 }
8755 func rewriteValueARM_OpARMORshiftRL(v *Value) bool {
8756 v_1 := v.Args[1]
8757 v_0 := v.Args[0]
8758 b := v.Block
8759
8760
8761 for {
8762 d := auxIntToInt32(v.AuxInt)
8763 if v_0.Op != OpARMMOVWconst {
8764 break
8765 }
8766 c := auxIntToInt32(v_0.AuxInt)
8767 x := v_1
8768 v.reset(OpARMORconst)
8769 v.AuxInt = int32ToAuxInt(c)
8770 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
8771 v0.AuxInt = int32ToAuxInt(d)
8772 v0.AddArg(x)
8773 v.AddArg(v0)
8774 return true
8775 }
8776
8777
8778 for {
8779 d := auxIntToInt32(v.AuxInt)
8780 x := v_0
8781 if v_1.Op != OpARMMOVWconst {
8782 break
8783 }
8784 c := auxIntToInt32(v_1.AuxInt)
8785 v.reset(OpARMORconst)
8786 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
8787 v.AddArg(x)
8788 return true
8789 }
8790
8791
8792 for {
8793 c := auxIntToInt32(v.AuxInt)
8794 y := v_0
8795 if y.Op != OpARMSRLconst || auxIntToInt32(y.AuxInt) != c {
8796 break
8797 }
8798 x := y.Args[0]
8799 if x != v_1 {
8800 break
8801 }
8802 v.copyOf(y)
8803 return true
8804 }
8805 return false
8806 }
8807 func rewriteValueARM_OpARMORshiftRLreg(v *Value) bool {
8808 v_2 := v.Args[2]
8809 v_1 := v.Args[1]
8810 v_0 := v.Args[0]
8811 b := v.Block
8812
8813
8814 for {
8815 if v_0.Op != OpARMMOVWconst {
8816 break
8817 }
8818 c := auxIntToInt32(v_0.AuxInt)
8819 x := v_1
8820 y := v_2
8821 v.reset(OpARMORconst)
8822 v.AuxInt = int32ToAuxInt(c)
8823 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
8824 v0.AddArg2(x, y)
8825 v.AddArg(v0)
8826 return true
8827 }
8828
8829
8830
8831 for {
8832 x := v_0
8833 y := v_1
8834 if v_2.Op != OpARMMOVWconst {
8835 break
8836 }
8837 c := auxIntToInt32(v_2.AuxInt)
8838 if !(0 <= c && c < 32) {
8839 break
8840 }
8841 v.reset(OpARMORshiftRL)
8842 v.AuxInt = int32ToAuxInt(c)
8843 v.AddArg2(x, y)
8844 return true
8845 }
8846 return false
8847 }
8848 func rewriteValueARM_OpARMRSB(v *Value) bool {
8849 v_1 := v.Args[1]
8850 v_0 := v.Args[0]
8851
8852
8853 for {
8854 if v_0.Op != OpARMMOVWconst {
8855 break
8856 }
8857 c := auxIntToInt32(v_0.AuxInt)
8858 x := v_1
8859 v.reset(OpARMSUBconst)
8860 v.AuxInt = int32ToAuxInt(c)
8861 v.AddArg(x)
8862 return true
8863 }
8864
8865
8866 for {
8867 x := v_0
8868 if v_1.Op != OpARMMOVWconst {
8869 break
8870 }
8871 c := auxIntToInt32(v_1.AuxInt)
8872 v.reset(OpARMRSBconst)
8873 v.AuxInt = int32ToAuxInt(c)
8874 v.AddArg(x)
8875 return true
8876 }
8877
8878
8879 for {
8880 x := v_0
8881 if v_1.Op != OpARMSLLconst {
8882 break
8883 }
8884 c := auxIntToInt32(v_1.AuxInt)
8885 y := v_1.Args[0]
8886 v.reset(OpARMRSBshiftLL)
8887 v.AuxInt = int32ToAuxInt(c)
8888 v.AddArg2(x, y)
8889 return true
8890 }
8891
8892
8893 for {
8894 if v_0.Op != OpARMSLLconst {
8895 break
8896 }
8897 c := auxIntToInt32(v_0.AuxInt)
8898 y := v_0.Args[0]
8899 x := v_1
8900 v.reset(OpARMSUBshiftLL)
8901 v.AuxInt = int32ToAuxInt(c)
8902 v.AddArg2(x, y)
8903 return true
8904 }
8905
8906
8907 for {
8908 x := v_0
8909 if v_1.Op != OpARMSRLconst {
8910 break
8911 }
8912 c := auxIntToInt32(v_1.AuxInt)
8913 y := v_1.Args[0]
8914 v.reset(OpARMRSBshiftRL)
8915 v.AuxInt = int32ToAuxInt(c)
8916 v.AddArg2(x, y)
8917 return true
8918 }
8919
8920
8921 for {
8922 if v_0.Op != OpARMSRLconst {
8923 break
8924 }
8925 c := auxIntToInt32(v_0.AuxInt)
8926 y := v_0.Args[0]
8927 x := v_1
8928 v.reset(OpARMSUBshiftRL)
8929 v.AuxInt = int32ToAuxInt(c)
8930 v.AddArg2(x, y)
8931 return true
8932 }
8933
8934
8935 for {
8936 x := v_0
8937 if v_1.Op != OpARMSRAconst {
8938 break
8939 }
8940 c := auxIntToInt32(v_1.AuxInt)
8941 y := v_1.Args[0]
8942 v.reset(OpARMRSBshiftRA)
8943 v.AuxInt = int32ToAuxInt(c)
8944 v.AddArg2(x, y)
8945 return true
8946 }
8947
8948
8949 for {
8950 if v_0.Op != OpARMSRAconst {
8951 break
8952 }
8953 c := auxIntToInt32(v_0.AuxInt)
8954 y := v_0.Args[0]
8955 x := v_1
8956 v.reset(OpARMSUBshiftRA)
8957 v.AuxInt = int32ToAuxInt(c)
8958 v.AddArg2(x, y)
8959 return true
8960 }
8961
8962
8963 for {
8964 x := v_0
8965 if v_1.Op != OpARMSLL {
8966 break
8967 }
8968 z := v_1.Args[1]
8969 y := v_1.Args[0]
8970 v.reset(OpARMRSBshiftLLreg)
8971 v.AddArg3(x, y, z)
8972 return true
8973 }
8974
8975
8976 for {
8977 if v_0.Op != OpARMSLL {
8978 break
8979 }
8980 z := v_0.Args[1]
8981 y := v_0.Args[0]
8982 x := v_1
8983 v.reset(OpARMSUBshiftLLreg)
8984 v.AddArg3(x, y, z)
8985 return true
8986 }
8987
8988
8989 for {
8990 x := v_0
8991 if v_1.Op != OpARMSRL {
8992 break
8993 }
8994 z := v_1.Args[1]
8995 y := v_1.Args[0]
8996 v.reset(OpARMRSBshiftRLreg)
8997 v.AddArg3(x, y, z)
8998 return true
8999 }
9000
9001
9002 for {
9003 if v_0.Op != OpARMSRL {
9004 break
9005 }
9006 z := v_0.Args[1]
9007 y := v_0.Args[0]
9008 x := v_1
9009 v.reset(OpARMSUBshiftRLreg)
9010 v.AddArg3(x, y, z)
9011 return true
9012 }
9013
9014
9015 for {
9016 x := v_0
9017 if v_1.Op != OpARMSRA {
9018 break
9019 }
9020 z := v_1.Args[1]
9021 y := v_1.Args[0]
9022 v.reset(OpARMRSBshiftRAreg)
9023 v.AddArg3(x, y, z)
9024 return true
9025 }
9026
9027
9028 for {
9029 if v_0.Op != OpARMSRA {
9030 break
9031 }
9032 z := v_0.Args[1]
9033 y := v_0.Args[0]
9034 x := v_1
9035 v.reset(OpARMSUBshiftRAreg)
9036 v.AddArg3(x, y, z)
9037 return true
9038 }
9039
9040
9041 for {
9042 x := v_0
9043 if x != v_1 {
9044 break
9045 }
9046 v.reset(OpARMMOVWconst)
9047 v.AuxInt = int32ToAuxInt(0)
9048 return true
9049 }
9050
9051
9052
9053 for {
9054 if v_0.Op != OpARMMUL {
9055 break
9056 }
9057 y := v_0.Args[1]
9058 x := v_0.Args[0]
9059 a := v_1
9060 if !(buildcfg.GOARM.Version == 7) {
9061 break
9062 }
9063 v.reset(OpARMMULS)
9064 v.AddArg3(x, y, a)
9065 return true
9066 }
9067 return false
9068 }
9069 func rewriteValueARM_OpARMRSBSshiftLL(v *Value) bool {
9070 v_1 := v.Args[1]
9071 v_0 := v.Args[0]
9072 b := v.Block
9073
9074
9075 for {
9076 d := auxIntToInt32(v.AuxInt)
9077 if v_0.Op != OpARMMOVWconst {
9078 break
9079 }
9080 c := auxIntToInt32(v_0.AuxInt)
9081 x := v_1
9082 v.reset(OpARMSUBSconst)
9083 v.AuxInt = int32ToAuxInt(c)
9084 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9085 v0.AuxInt = int32ToAuxInt(d)
9086 v0.AddArg(x)
9087 v.AddArg(v0)
9088 return true
9089 }
9090
9091
9092 for {
9093 d := auxIntToInt32(v.AuxInt)
9094 x := v_0
9095 if v_1.Op != OpARMMOVWconst {
9096 break
9097 }
9098 c := auxIntToInt32(v_1.AuxInt)
9099 v.reset(OpARMRSBSconst)
9100 v.AuxInt = int32ToAuxInt(c << uint64(d))
9101 v.AddArg(x)
9102 return true
9103 }
9104 return false
9105 }
9106 func rewriteValueARM_OpARMRSBSshiftLLreg(v *Value) bool {
9107 v_2 := v.Args[2]
9108 v_1 := v.Args[1]
9109 v_0 := v.Args[0]
9110 b := v.Block
9111
9112
9113 for {
9114 if v_0.Op != OpARMMOVWconst {
9115 break
9116 }
9117 c := auxIntToInt32(v_0.AuxInt)
9118 x := v_1
9119 y := v_2
9120 v.reset(OpARMSUBSconst)
9121 v.AuxInt = int32ToAuxInt(c)
9122 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9123 v0.AddArg2(x, y)
9124 v.AddArg(v0)
9125 return true
9126 }
9127
9128
9129
9130 for {
9131 x := v_0
9132 y := v_1
9133 if v_2.Op != OpARMMOVWconst {
9134 break
9135 }
9136 c := auxIntToInt32(v_2.AuxInt)
9137 if !(0 <= c && c < 32) {
9138 break
9139 }
9140 v.reset(OpARMRSBSshiftLL)
9141 v.AuxInt = int32ToAuxInt(c)
9142 v.AddArg2(x, y)
9143 return true
9144 }
9145 return false
9146 }
9147 func rewriteValueARM_OpARMRSBSshiftRA(v *Value) bool {
9148 v_1 := v.Args[1]
9149 v_0 := v.Args[0]
9150 b := v.Block
9151
9152
9153 for {
9154 d := auxIntToInt32(v.AuxInt)
9155 if v_0.Op != OpARMMOVWconst {
9156 break
9157 }
9158 c := auxIntToInt32(v_0.AuxInt)
9159 x := v_1
9160 v.reset(OpARMSUBSconst)
9161 v.AuxInt = int32ToAuxInt(c)
9162 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9163 v0.AuxInt = int32ToAuxInt(d)
9164 v0.AddArg(x)
9165 v.AddArg(v0)
9166 return true
9167 }
9168
9169
9170 for {
9171 d := auxIntToInt32(v.AuxInt)
9172 x := v_0
9173 if v_1.Op != OpARMMOVWconst {
9174 break
9175 }
9176 c := auxIntToInt32(v_1.AuxInt)
9177 v.reset(OpARMRSBSconst)
9178 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9179 v.AddArg(x)
9180 return true
9181 }
9182 return false
9183 }
9184 func rewriteValueARM_OpARMRSBSshiftRAreg(v *Value) bool {
9185 v_2 := v.Args[2]
9186 v_1 := v.Args[1]
9187 v_0 := v.Args[0]
9188 b := v.Block
9189
9190
9191 for {
9192 if v_0.Op != OpARMMOVWconst {
9193 break
9194 }
9195 c := auxIntToInt32(v_0.AuxInt)
9196 x := v_1
9197 y := v_2
9198 v.reset(OpARMSUBSconst)
9199 v.AuxInt = int32ToAuxInt(c)
9200 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9201 v0.AddArg2(x, y)
9202 v.AddArg(v0)
9203 return true
9204 }
9205
9206
9207
9208 for {
9209 x := v_0
9210 y := v_1
9211 if v_2.Op != OpARMMOVWconst {
9212 break
9213 }
9214 c := auxIntToInt32(v_2.AuxInt)
9215 if !(0 <= c && c < 32) {
9216 break
9217 }
9218 v.reset(OpARMRSBSshiftRA)
9219 v.AuxInt = int32ToAuxInt(c)
9220 v.AddArg2(x, y)
9221 return true
9222 }
9223 return false
9224 }
9225 func rewriteValueARM_OpARMRSBSshiftRL(v *Value) bool {
9226 v_1 := v.Args[1]
9227 v_0 := v.Args[0]
9228 b := v.Block
9229
9230
9231 for {
9232 d := auxIntToInt32(v.AuxInt)
9233 if v_0.Op != OpARMMOVWconst {
9234 break
9235 }
9236 c := auxIntToInt32(v_0.AuxInt)
9237 x := v_1
9238 v.reset(OpARMSUBSconst)
9239 v.AuxInt = int32ToAuxInt(c)
9240 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9241 v0.AuxInt = int32ToAuxInt(d)
9242 v0.AddArg(x)
9243 v.AddArg(v0)
9244 return true
9245 }
9246
9247
9248 for {
9249 d := auxIntToInt32(v.AuxInt)
9250 x := v_0
9251 if v_1.Op != OpARMMOVWconst {
9252 break
9253 }
9254 c := auxIntToInt32(v_1.AuxInt)
9255 v.reset(OpARMRSBSconst)
9256 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9257 v.AddArg(x)
9258 return true
9259 }
9260 return false
9261 }
9262 func rewriteValueARM_OpARMRSBSshiftRLreg(v *Value) bool {
9263 v_2 := v.Args[2]
9264 v_1 := v.Args[1]
9265 v_0 := v.Args[0]
9266 b := v.Block
9267
9268
9269 for {
9270 if v_0.Op != OpARMMOVWconst {
9271 break
9272 }
9273 c := auxIntToInt32(v_0.AuxInt)
9274 x := v_1
9275 y := v_2
9276 v.reset(OpARMSUBSconst)
9277 v.AuxInt = int32ToAuxInt(c)
9278 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9279 v0.AddArg2(x, y)
9280 v.AddArg(v0)
9281 return true
9282 }
9283
9284
9285
9286 for {
9287 x := v_0
9288 y := v_1
9289 if v_2.Op != OpARMMOVWconst {
9290 break
9291 }
9292 c := auxIntToInt32(v_2.AuxInt)
9293 if !(0 <= c && c < 32) {
9294 break
9295 }
9296 v.reset(OpARMRSBSshiftRL)
9297 v.AuxInt = int32ToAuxInt(c)
9298 v.AddArg2(x, y)
9299 return true
9300 }
9301 return false
9302 }
9303 func rewriteValueARM_OpARMRSBconst(v *Value) bool {
9304 v_0 := v.Args[0]
9305
9306
9307 for {
9308 c := auxIntToInt32(v.AuxInt)
9309 if v_0.Op != OpARMMOVWconst {
9310 break
9311 }
9312 d := auxIntToInt32(v_0.AuxInt)
9313 v.reset(OpARMMOVWconst)
9314 v.AuxInt = int32ToAuxInt(c - d)
9315 return true
9316 }
9317
9318
9319 for {
9320 c := auxIntToInt32(v.AuxInt)
9321 if v_0.Op != OpARMRSBconst {
9322 break
9323 }
9324 d := auxIntToInt32(v_0.AuxInt)
9325 x := v_0.Args[0]
9326 v.reset(OpARMADDconst)
9327 v.AuxInt = int32ToAuxInt(c - d)
9328 v.AddArg(x)
9329 return true
9330 }
9331
9332
9333 for {
9334 c := auxIntToInt32(v.AuxInt)
9335 if v_0.Op != OpARMADDconst {
9336 break
9337 }
9338 d := auxIntToInt32(v_0.AuxInt)
9339 x := v_0.Args[0]
9340 v.reset(OpARMRSBconst)
9341 v.AuxInt = int32ToAuxInt(c - d)
9342 v.AddArg(x)
9343 return true
9344 }
9345
9346
9347 for {
9348 c := auxIntToInt32(v.AuxInt)
9349 if v_0.Op != OpARMSUBconst {
9350 break
9351 }
9352 d := auxIntToInt32(v_0.AuxInt)
9353 x := v_0.Args[0]
9354 v.reset(OpARMRSBconst)
9355 v.AuxInt = int32ToAuxInt(c + d)
9356 v.AddArg(x)
9357 return true
9358 }
9359 return false
9360 }
9361 func rewriteValueARM_OpARMRSBshiftLL(v *Value) bool {
9362 v_1 := v.Args[1]
9363 v_0 := v.Args[0]
9364 b := v.Block
9365
9366
9367 for {
9368 d := auxIntToInt32(v.AuxInt)
9369 if v_0.Op != OpARMMOVWconst {
9370 break
9371 }
9372 c := auxIntToInt32(v_0.AuxInt)
9373 x := v_1
9374 v.reset(OpARMSUBconst)
9375 v.AuxInt = int32ToAuxInt(c)
9376 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9377 v0.AuxInt = int32ToAuxInt(d)
9378 v0.AddArg(x)
9379 v.AddArg(v0)
9380 return true
9381 }
9382
9383
9384 for {
9385 d := auxIntToInt32(v.AuxInt)
9386 x := v_0
9387 if v_1.Op != OpARMMOVWconst {
9388 break
9389 }
9390 c := auxIntToInt32(v_1.AuxInt)
9391 v.reset(OpARMRSBconst)
9392 v.AuxInt = int32ToAuxInt(c << uint64(d))
9393 v.AddArg(x)
9394 return true
9395 }
9396
9397
9398 for {
9399 c := auxIntToInt32(v.AuxInt)
9400 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
9401 break
9402 }
9403 x := v_0.Args[0]
9404 if x != v_1 {
9405 break
9406 }
9407 v.reset(OpARMMOVWconst)
9408 v.AuxInt = int32ToAuxInt(0)
9409 return true
9410 }
9411 return false
9412 }
9413 func rewriteValueARM_OpARMRSBshiftLLreg(v *Value) bool {
9414 v_2 := v.Args[2]
9415 v_1 := v.Args[1]
9416 v_0 := v.Args[0]
9417 b := v.Block
9418
9419
9420 for {
9421 if v_0.Op != OpARMMOVWconst {
9422 break
9423 }
9424 c := auxIntToInt32(v_0.AuxInt)
9425 x := v_1
9426 y := v_2
9427 v.reset(OpARMSUBconst)
9428 v.AuxInt = int32ToAuxInt(c)
9429 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9430 v0.AddArg2(x, y)
9431 v.AddArg(v0)
9432 return true
9433 }
9434
9435
9436
9437 for {
9438 x := v_0
9439 y := v_1
9440 if v_2.Op != OpARMMOVWconst {
9441 break
9442 }
9443 c := auxIntToInt32(v_2.AuxInt)
9444 if !(0 <= c && c < 32) {
9445 break
9446 }
9447 v.reset(OpARMRSBshiftLL)
9448 v.AuxInt = int32ToAuxInt(c)
9449 v.AddArg2(x, y)
9450 return true
9451 }
9452 return false
9453 }
9454 func rewriteValueARM_OpARMRSBshiftRA(v *Value) bool {
9455 v_1 := v.Args[1]
9456 v_0 := v.Args[0]
9457 b := v.Block
9458
9459
9460 for {
9461 d := auxIntToInt32(v.AuxInt)
9462 if v_0.Op != OpARMMOVWconst {
9463 break
9464 }
9465 c := auxIntToInt32(v_0.AuxInt)
9466 x := v_1
9467 v.reset(OpARMSUBconst)
9468 v.AuxInt = int32ToAuxInt(c)
9469 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9470 v0.AuxInt = int32ToAuxInt(d)
9471 v0.AddArg(x)
9472 v.AddArg(v0)
9473 return true
9474 }
9475
9476
9477 for {
9478 d := auxIntToInt32(v.AuxInt)
9479 x := v_0
9480 if v_1.Op != OpARMMOVWconst {
9481 break
9482 }
9483 c := auxIntToInt32(v_1.AuxInt)
9484 v.reset(OpARMRSBconst)
9485 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9486 v.AddArg(x)
9487 return true
9488 }
9489
9490
9491 for {
9492 c := auxIntToInt32(v.AuxInt)
9493 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
9494 break
9495 }
9496 x := v_0.Args[0]
9497 if x != v_1 {
9498 break
9499 }
9500 v.reset(OpARMMOVWconst)
9501 v.AuxInt = int32ToAuxInt(0)
9502 return true
9503 }
9504 return false
9505 }
9506 func rewriteValueARM_OpARMRSBshiftRAreg(v *Value) bool {
9507 v_2 := v.Args[2]
9508 v_1 := v.Args[1]
9509 v_0 := v.Args[0]
9510 b := v.Block
9511
9512
9513 for {
9514 if v_0.Op != OpARMMOVWconst {
9515 break
9516 }
9517 c := auxIntToInt32(v_0.AuxInt)
9518 x := v_1
9519 y := v_2
9520 v.reset(OpARMSUBconst)
9521 v.AuxInt = int32ToAuxInt(c)
9522 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9523 v0.AddArg2(x, y)
9524 v.AddArg(v0)
9525 return true
9526 }
9527
9528
9529
9530 for {
9531 x := v_0
9532 y := v_1
9533 if v_2.Op != OpARMMOVWconst {
9534 break
9535 }
9536 c := auxIntToInt32(v_2.AuxInt)
9537 if !(0 <= c && c < 32) {
9538 break
9539 }
9540 v.reset(OpARMRSBshiftRA)
9541 v.AuxInt = int32ToAuxInt(c)
9542 v.AddArg2(x, y)
9543 return true
9544 }
9545 return false
9546 }
9547 func rewriteValueARM_OpARMRSBshiftRL(v *Value) bool {
9548 v_1 := v.Args[1]
9549 v_0 := v.Args[0]
9550 b := v.Block
9551
9552
9553 for {
9554 d := auxIntToInt32(v.AuxInt)
9555 if v_0.Op != OpARMMOVWconst {
9556 break
9557 }
9558 c := auxIntToInt32(v_0.AuxInt)
9559 x := v_1
9560 v.reset(OpARMSUBconst)
9561 v.AuxInt = int32ToAuxInt(c)
9562 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9563 v0.AuxInt = int32ToAuxInt(d)
9564 v0.AddArg(x)
9565 v.AddArg(v0)
9566 return true
9567 }
9568
9569
9570 for {
9571 d := auxIntToInt32(v.AuxInt)
9572 x := v_0
9573 if v_1.Op != OpARMMOVWconst {
9574 break
9575 }
9576 c := auxIntToInt32(v_1.AuxInt)
9577 v.reset(OpARMRSBconst)
9578 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9579 v.AddArg(x)
9580 return true
9581 }
9582
9583
9584 for {
9585 c := auxIntToInt32(v.AuxInt)
9586 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
9587 break
9588 }
9589 x := v_0.Args[0]
9590 if x != v_1 {
9591 break
9592 }
9593 v.reset(OpARMMOVWconst)
9594 v.AuxInt = int32ToAuxInt(0)
9595 return true
9596 }
9597 return false
9598 }
9599 func rewriteValueARM_OpARMRSBshiftRLreg(v *Value) bool {
9600 v_2 := v.Args[2]
9601 v_1 := v.Args[1]
9602 v_0 := v.Args[0]
9603 b := v.Block
9604
9605
9606 for {
9607 if v_0.Op != OpARMMOVWconst {
9608 break
9609 }
9610 c := auxIntToInt32(v_0.AuxInt)
9611 x := v_1
9612 y := v_2
9613 v.reset(OpARMSUBconst)
9614 v.AuxInt = int32ToAuxInt(c)
9615 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9616 v0.AddArg2(x, y)
9617 v.AddArg(v0)
9618 return true
9619 }
9620
9621
9622
9623 for {
9624 x := v_0
9625 y := v_1
9626 if v_2.Op != OpARMMOVWconst {
9627 break
9628 }
9629 c := auxIntToInt32(v_2.AuxInt)
9630 if !(0 <= c && c < 32) {
9631 break
9632 }
9633 v.reset(OpARMRSBshiftRL)
9634 v.AuxInt = int32ToAuxInt(c)
9635 v.AddArg2(x, y)
9636 return true
9637 }
9638 return false
9639 }
9640 func rewriteValueARM_OpARMRSCconst(v *Value) bool {
9641 v_1 := v.Args[1]
9642 v_0 := v.Args[0]
9643
9644
9645 for {
9646 c := auxIntToInt32(v.AuxInt)
9647 if v_0.Op != OpARMADDconst {
9648 break
9649 }
9650 d := auxIntToInt32(v_0.AuxInt)
9651 x := v_0.Args[0]
9652 flags := v_1
9653 v.reset(OpARMRSCconst)
9654 v.AuxInt = int32ToAuxInt(c - d)
9655 v.AddArg2(x, flags)
9656 return true
9657 }
9658
9659
9660 for {
9661 c := auxIntToInt32(v.AuxInt)
9662 if v_0.Op != OpARMSUBconst {
9663 break
9664 }
9665 d := auxIntToInt32(v_0.AuxInt)
9666 x := v_0.Args[0]
9667 flags := v_1
9668 v.reset(OpARMRSCconst)
9669 v.AuxInt = int32ToAuxInt(c + d)
9670 v.AddArg2(x, flags)
9671 return true
9672 }
9673 return false
9674 }
9675 func rewriteValueARM_OpARMRSCshiftLL(v *Value) bool {
9676 v_2 := v.Args[2]
9677 v_1 := v.Args[1]
9678 v_0 := v.Args[0]
9679 b := v.Block
9680
9681
9682 for {
9683 d := auxIntToInt32(v.AuxInt)
9684 if v_0.Op != OpARMMOVWconst {
9685 break
9686 }
9687 c := auxIntToInt32(v_0.AuxInt)
9688 x := v_1
9689 flags := v_2
9690 v.reset(OpARMSBCconst)
9691 v.AuxInt = int32ToAuxInt(c)
9692 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
9693 v0.AuxInt = int32ToAuxInt(d)
9694 v0.AddArg(x)
9695 v.AddArg2(v0, flags)
9696 return true
9697 }
9698
9699
9700 for {
9701 d := auxIntToInt32(v.AuxInt)
9702 x := v_0
9703 if v_1.Op != OpARMMOVWconst {
9704 break
9705 }
9706 c := auxIntToInt32(v_1.AuxInt)
9707 flags := v_2
9708 v.reset(OpARMRSCconst)
9709 v.AuxInt = int32ToAuxInt(c << uint64(d))
9710 v.AddArg2(x, flags)
9711 return true
9712 }
9713 return false
9714 }
9715 func rewriteValueARM_OpARMRSCshiftLLreg(v *Value) bool {
9716 v_3 := v.Args[3]
9717 v_2 := v.Args[2]
9718 v_1 := v.Args[1]
9719 v_0 := v.Args[0]
9720 b := v.Block
9721
9722
9723 for {
9724 if v_0.Op != OpARMMOVWconst {
9725 break
9726 }
9727 c := auxIntToInt32(v_0.AuxInt)
9728 x := v_1
9729 y := v_2
9730 flags := v_3
9731 v.reset(OpARMSBCconst)
9732 v.AuxInt = int32ToAuxInt(c)
9733 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
9734 v0.AddArg2(x, y)
9735 v.AddArg2(v0, flags)
9736 return true
9737 }
9738
9739
9740
9741 for {
9742 x := v_0
9743 y := v_1
9744 if v_2.Op != OpARMMOVWconst {
9745 break
9746 }
9747 c := auxIntToInt32(v_2.AuxInt)
9748 flags := v_3
9749 if !(0 <= c && c < 32) {
9750 break
9751 }
9752 v.reset(OpARMRSCshiftLL)
9753 v.AuxInt = int32ToAuxInt(c)
9754 v.AddArg3(x, y, flags)
9755 return true
9756 }
9757 return false
9758 }
9759 func rewriteValueARM_OpARMRSCshiftRA(v *Value) bool {
9760 v_2 := v.Args[2]
9761 v_1 := v.Args[1]
9762 v_0 := v.Args[0]
9763 b := v.Block
9764
9765
9766 for {
9767 d := auxIntToInt32(v.AuxInt)
9768 if v_0.Op != OpARMMOVWconst {
9769 break
9770 }
9771 c := auxIntToInt32(v_0.AuxInt)
9772 x := v_1
9773 flags := v_2
9774 v.reset(OpARMSBCconst)
9775 v.AuxInt = int32ToAuxInt(c)
9776 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
9777 v0.AuxInt = int32ToAuxInt(d)
9778 v0.AddArg(x)
9779 v.AddArg2(v0, flags)
9780 return true
9781 }
9782
9783
9784 for {
9785 d := auxIntToInt32(v.AuxInt)
9786 x := v_0
9787 if v_1.Op != OpARMMOVWconst {
9788 break
9789 }
9790 c := auxIntToInt32(v_1.AuxInt)
9791 flags := v_2
9792 v.reset(OpARMRSCconst)
9793 v.AuxInt = int32ToAuxInt(c >> uint64(d))
9794 v.AddArg2(x, flags)
9795 return true
9796 }
9797 return false
9798 }
9799 func rewriteValueARM_OpARMRSCshiftRAreg(v *Value) bool {
9800 v_3 := v.Args[3]
9801 v_2 := v.Args[2]
9802 v_1 := v.Args[1]
9803 v_0 := v.Args[0]
9804 b := v.Block
9805
9806
9807 for {
9808 if v_0.Op != OpARMMOVWconst {
9809 break
9810 }
9811 c := auxIntToInt32(v_0.AuxInt)
9812 x := v_1
9813 y := v_2
9814 flags := v_3
9815 v.reset(OpARMSBCconst)
9816 v.AuxInt = int32ToAuxInt(c)
9817 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
9818 v0.AddArg2(x, y)
9819 v.AddArg2(v0, flags)
9820 return true
9821 }
9822
9823
9824
9825 for {
9826 x := v_0
9827 y := v_1
9828 if v_2.Op != OpARMMOVWconst {
9829 break
9830 }
9831 c := auxIntToInt32(v_2.AuxInt)
9832 flags := v_3
9833 if !(0 <= c && c < 32) {
9834 break
9835 }
9836 v.reset(OpARMRSCshiftRA)
9837 v.AuxInt = int32ToAuxInt(c)
9838 v.AddArg3(x, y, flags)
9839 return true
9840 }
9841 return false
9842 }
9843 func rewriteValueARM_OpARMRSCshiftRL(v *Value) bool {
9844 v_2 := v.Args[2]
9845 v_1 := v.Args[1]
9846 v_0 := v.Args[0]
9847 b := v.Block
9848
9849
9850 for {
9851 d := auxIntToInt32(v.AuxInt)
9852 if v_0.Op != OpARMMOVWconst {
9853 break
9854 }
9855 c := auxIntToInt32(v_0.AuxInt)
9856 x := v_1
9857 flags := v_2
9858 v.reset(OpARMSBCconst)
9859 v.AuxInt = int32ToAuxInt(c)
9860 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
9861 v0.AuxInt = int32ToAuxInt(d)
9862 v0.AddArg(x)
9863 v.AddArg2(v0, flags)
9864 return true
9865 }
9866
9867
9868 for {
9869 d := auxIntToInt32(v.AuxInt)
9870 x := v_0
9871 if v_1.Op != OpARMMOVWconst {
9872 break
9873 }
9874 c := auxIntToInt32(v_1.AuxInt)
9875 flags := v_2
9876 v.reset(OpARMRSCconst)
9877 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
9878 v.AddArg2(x, flags)
9879 return true
9880 }
9881 return false
9882 }
9883 func rewriteValueARM_OpARMRSCshiftRLreg(v *Value) bool {
9884 v_3 := v.Args[3]
9885 v_2 := v.Args[2]
9886 v_1 := v.Args[1]
9887 v_0 := v.Args[0]
9888 b := v.Block
9889
9890
9891 for {
9892 if v_0.Op != OpARMMOVWconst {
9893 break
9894 }
9895 c := auxIntToInt32(v_0.AuxInt)
9896 x := v_1
9897 y := v_2
9898 flags := v_3
9899 v.reset(OpARMSBCconst)
9900 v.AuxInt = int32ToAuxInt(c)
9901 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
9902 v0.AddArg2(x, y)
9903 v.AddArg2(v0, flags)
9904 return true
9905 }
9906
9907
9908
9909 for {
9910 x := v_0
9911 y := v_1
9912 if v_2.Op != OpARMMOVWconst {
9913 break
9914 }
9915 c := auxIntToInt32(v_2.AuxInt)
9916 flags := v_3
9917 if !(0 <= c && c < 32) {
9918 break
9919 }
9920 v.reset(OpARMRSCshiftRL)
9921 v.AuxInt = int32ToAuxInt(c)
9922 v.AddArg3(x, y, flags)
9923 return true
9924 }
9925 return false
9926 }
9927 func rewriteValueARM_OpARMSBC(v *Value) bool {
9928 v_2 := v.Args[2]
9929 v_1 := v.Args[1]
9930 v_0 := v.Args[0]
9931
9932
9933 for {
9934 if v_0.Op != OpARMMOVWconst {
9935 break
9936 }
9937 c := auxIntToInt32(v_0.AuxInt)
9938 x := v_1
9939 flags := v_2
9940 v.reset(OpARMRSCconst)
9941 v.AuxInt = int32ToAuxInt(c)
9942 v.AddArg2(x, flags)
9943 return true
9944 }
9945
9946
9947 for {
9948 x := v_0
9949 if v_1.Op != OpARMMOVWconst {
9950 break
9951 }
9952 c := auxIntToInt32(v_1.AuxInt)
9953 flags := v_2
9954 v.reset(OpARMSBCconst)
9955 v.AuxInt = int32ToAuxInt(c)
9956 v.AddArg2(x, flags)
9957 return true
9958 }
9959
9960
9961 for {
9962 x := v_0
9963 if v_1.Op != OpARMSLLconst {
9964 break
9965 }
9966 c := auxIntToInt32(v_1.AuxInt)
9967 y := v_1.Args[0]
9968 flags := v_2
9969 v.reset(OpARMSBCshiftLL)
9970 v.AuxInt = int32ToAuxInt(c)
9971 v.AddArg3(x, y, flags)
9972 return true
9973 }
9974
9975
9976 for {
9977 if v_0.Op != OpARMSLLconst {
9978 break
9979 }
9980 c := auxIntToInt32(v_0.AuxInt)
9981 y := v_0.Args[0]
9982 x := v_1
9983 flags := v_2
9984 v.reset(OpARMRSCshiftLL)
9985 v.AuxInt = int32ToAuxInt(c)
9986 v.AddArg3(x, y, flags)
9987 return true
9988 }
9989
9990
9991 for {
9992 x := v_0
9993 if v_1.Op != OpARMSRLconst {
9994 break
9995 }
9996 c := auxIntToInt32(v_1.AuxInt)
9997 y := v_1.Args[0]
9998 flags := v_2
9999 v.reset(OpARMSBCshiftRL)
10000 v.AuxInt = int32ToAuxInt(c)
10001 v.AddArg3(x, y, flags)
10002 return true
10003 }
10004
10005
10006 for {
10007 if v_0.Op != OpARMSRLconst {
10008 break
10009 }
10010 c := auxIntToInt32(v_0.AuxInt)
10011 y := v_0.Args[0]
10012 x := v_1
10013 flags := v_2
10014 v.reset(OpARMRSCshiftRL)
10015 v.AuxInt = int32ToAuxInt(c)
10016 v.AddArg3(x, y, flags)
10017 return true
10018 }
10019
10020
10021 for {
10022 x := v_0
10023 if v_1.Op != OpARMSRAconst {
10024 break
10025 }
10026 c := auxIntToInt32(v_1.AuxInt)
10027 y := v_1.Args[0]
10028 flags := v_2
10029 v.reset(OpARMSBCshiftRA)
10030 v.AuxInt = int32ToAuxInt(c)
10031 v.AddArg3(x, y, flags)
10032 return true
10033 }
10034
10035
10036 for {
10037 if v_0.Op != OpARMSRAconst {
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(OpARMRSCshiftRA)
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 != OpARMSLL {
10054 break
10055 }
10056 z := v_1.Args[1]
10057 y := v_1.Args[0]
10058 flags := v_2
10059 v.reset(OpARMSBCshiftLLreg)
10060 v.AddArg4(x, y, z, flags)
10061 return true
10062 }
10063
10064
10065 for {
10066 if v_0.Op != OpARMSLL {
10067 break
10068 }
10069 z := v_0.Args[1]
10070 y := v_0.Args[0]
10071 x := v_1
10072 flags := v_2
10073 v.reset(OpARMRSCshiftLLreg)
10074 v.AddArg4(x, y, z, flags)
10075 return true
10076 }
10077
10078
10079 for {
10080 x := v_0
10081 if v_1.Op != OpARMSRL {
10082 break
10083 }
10084 z := v_1.Args[1]
10085 y := v_1.Args[0]
10086 flags := v_2
10087 v.reset(OpARMSBCshiftRLreg)
10088 v.AddArg4(x, y, z, flags)
10089 return true
10090 }
10091
10092
10093 for {
10094 if v_0.Op != OpARMSRL {
10095 break
10096 }
10097 z := v_0.Args[1]
10098 y := v_0.Args[0]
10099 x := v_1
10100 flags := v_2
10101 v.reset(OpARMRSCshiftRLreg)
10102 v.AddArg4(x, y, z, flags)
10103 return true
10104 }
10105
10106
10107 for {
10108 x := v_0
10109 if v_1.Op != OpARMSRA {
10110 break
10111 }
10112 z := v_1.Args[1]
10113 y := v_1.Args[0]
10114 flags := v_2
10115 v.reset(OpARMSBCshiftRAreg)
10116 v.AddArg4(x, y, z, flags)
10117 return true
10118 }
10119
10120
10121 for {
10122 if v_0.Op != OpARMSRA {
10123 break
10124 }
10125 z := v_0.Args[1]
10126 y := v_0.Args[0]
10127 x := v_1
10128 flags := v_2
10129 v.reset(OpARMRSCshiftRAreg)
10130 v.AddArg4(x, y, z, flags)
10131 return true
10132 }
10133 return false
10134 }
10135 func rewriteValueARM_OpARMSBCconst(v *Value) bool {
10136 v_1 := v.Args[1]
10137 v_0 := v.Args[0]
10138
10139
10140 for {
10141 c := auxIntToInt32(v.AuxInt)
10142 if v_0.Op != OpARMADDconst {
10143 break
10144 }
10145 d := auxIntToInt32(v_0.AuxInt)
10146 x := v_0.Args[0]
10147 flags := v_1
10148 v.reset(OpARMSBCconst)
10149 v.AuxInt = int32ToAuxInt(c - d)
10150 v.AddArg2(x, flags)
10151 return true
10152 }
10153
10154
10155 for {
10156 c := auxIntToInt32(v.AuxInt)
10157 if v_0.Op != OpARMSUBconst {
10158 break
10159 }
10160 d := auxIntToInt32(v_0.AuxInt)
10161 x := v_0.Args[0]
10162 flags := v_1
10163 v.reset(OpARMSBCconst)
10164 v.AuxInt = int32ToAuxInt(c + d)
10165 v.AddArg2(x, flags)
10166 return true
10167 }
10168 return false
10169 }
10170 func rewriteValueARM_OpARMSBCshiftLL(v *Value) bool {
10171 v_2 := v.Args[2]
10172 v_1 := v.Args[1]
10173 v_0 := v.Args[0]
10174 b := v.Block
10175
10176
10177 for {
10178 d := auxIntToInt32(v.AuxInt)
10179 if v_0.Op != OpARMMOVWconst {
10180 break
10181 }
10182 c := auxIntToInt32(v_0.AuxInt)
10183 x := v_1
10184 flags := v_2
10185 v.reset(OpARMRSCconst)
10186 v.AuxInt = int32ToAuxInt(c)
10187 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
10188 v0.AuxInt = int32ToAuxInt(d)
10189 v0.AddArg(x)
10190 v.AddArg2(v0, flags)
10191 return true
10192 }
10193
10194
10195 for {
10196 d := auxIntToInt32(v.AuxInt)
10197 x := v_0
10198 if v_1.Op != OpARMMOVWconst {
10199 break
10200 }
10201 c := auxIntToInt32(v_1.AuxInt)
10202 flags := v_2
10203 v.reset(OpARMSBCconst)
10204 v.AuxInt = int32ToAuxInt(c << uint64(d))
10205 v.AddArg2(x, flags)
10206 return true
10207 }
10208 return false
10209 }
10210 func rewriteValueARM_OpARMSBCshiftLLreg(v *Value) bool {
10211 v_3 := v.Args[3]
10212 v_2 := v.Args[2]
10213 v_1 := v.Args[1]
10214 v_0 := v.Args[0]
10215 b := v.Block
10216
10217
10218 for {
10219 if v_0.Op != OpARMMOVWconst {
10220 break
10221 }
10222 c := auxIntToInt32(v_0.AuxInt)
10223 x := v_1
10224 y := v_2
10225 flags := v_3
10226 v.reset(OpARMRSCconst)
10227 v.AuxInt = int32ToAuxInt(c)
10228 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
10229 v0.AddArg2(x, y)
10230 v.AddArg2(v0, flags)
10231 return true
10232 }
10233
10234
10235
10236 for {
10237 x := v_0
10238 y := v_1
10239 if v_2.Op != OpARMMOVWconst {
10240 break
10241 }
10242 c := auxIntToInt32(v_2.AuxInt)
10243 flags := v_3
10244 if !(0 <= c && c < 32) {
10245 break
10246 }
10247 v.reset(OpARMSBCshiftLL)
10248 v.AuxInt = int32ToAuxInt(c)
10249 v.AddArg3(x, y, flags)
10250 return true
10251 }
10252 return false
10253 }
10254 func rewriteValueARM_OpARMSBCshiftRA(v *Value) bool {
10255 v_2 := v.Args[2]
10256 v_1 := v.Args[1]
10257 v_0 := v.Args[0]
10258 b := v.Block
10259
10260
10261 for {
10262 d := auxIntToInt32(v.AuxInt)
10263 if v_0.Op != OpARMMOVWconst {
10264 break
10265 }
10266 c := auxIntToInt32(v_0.AuxInt)
10267 x := v_1
10268 flags := v_2
10269 v.reset(OpARMRSCconst)
10270 v.AuxInt = int32ToAuxInt(c)
10271 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
10272 v0.AuxInt = int32ToAuxInt(d)
10273 v0.AddArg(x)
10274 v.AddArg2(v0, flags)
10275 return true
10276 }
10277
10278
10279 for {
10280 d := auxIntToInt32(v.AuxInt)
10281 x := v_0
10282 if v_1.Op != OpARMMOVWconst {
10283 break
10284 }
10285 c := auxIntToInt32(v_1.AuxInt)
10286 flags := v_2
10287 v.reset(OpARMSBCconst)
10288 v.AuxInt = int32ToAuxInt(c >> uint64(d))
10289 v.AddArg2(x, flags)
10290 return true
10291 }
10292 return false
10293 }
10294 func rewriteValueARM_OpARMSBCshiftRAreg(v *Value) bool {
10295 v_3 := v.Args[3]
10296 v_2 := v.Args[2]
10297 v_1 := v.Args[1]
10298 v_0 := v.Args[0]
10299 b := v.Block
10300
10301
10302 for {
10303 if v_0.Op != OpARMMOVWconst {
10304 break
10305 }
10306 c := auxIntToInt32(v_0.AuxInt)
10307 x := v_1
10308 y := v_2
10309 flags := v_3
10310 v.reset(OpARMRSCconst)
10311 v.AuxInt = int32ToAuxInt(c)
10312 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
10313 v0.AddArg2(x, y)
10314 v.AddArg2(v0, flags)
10315 return true
10316 }
10317
10318
10319
10320 for {
10321 x := v_0
10322 y := v_1
10323 if v_2.Op != OpARMMOVWconst {
10324 break
10325 }
10326 c := auxIntToInt32(v_2.AuxInt)
10327 flags := v_3
10328 if !(0 <= c && c < 32) {
10329 break
10330 }
10331 v.reset(OpARMSBCshiftRA)
10332 v.AuxInt = int32ToAuxInt(c)
10333 v.AddArg3(x, y, flags)
10334 return true
10335 }
10336 return false
10337 }
10338 func rewriteValueARM_OpARMSBCshiftRL(v *Value) bool {
10339 v_2 := v.Args[2]
10340 v_1 := v.Args[1]
10341 v_0 := v.Args[0]
10342 b := v.Block
10343
10344
10345 for {
10346 d := auxIntToInt32(v.AuxInt)
10347 if v_0.Op != OpARMMOVWconst {
10348 break
10349 }
10350 c := auxIntToInt32(v_0.AuxInt)
10351 x := v_1
10352 flags := v_2
10353 v.reset(OpARMRSCconst)
10354 v.AuxInt = int32ToAuxInt(c)
10355 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
10356 v0.AuxInt = int32ToAuxInt(d)
10357 v0.AddArg(x)
10358 v.AddArg2(v0, flags)
10359 return true
10360 }
10361
10362
10363 for {
10364 d := auxIntToInt32(v.AuxInt)
10365 x := v_0
10366 if v_1.Op != OpARMMOVWconst {
10367 break
10368 }
10369 c := auxIntToInt32(v_1.AuxInt)
10370 flags := v_2
10371 v.reset(OpARMSBCconst)
10372 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
10373 v.AddArg2(x, flags)
10374 return true
10375 }
10376 return false
10377 }
10378 func rewriteValueARM_OpARMSBCshiftRLreg(v *Value) bool {
10379 v_3 := v.Args[3]
10380 v_2 := v.Args[2]
10381 v_1 := v.Args[1]
10382 v_0 := v.Args[0]
10383 b := v.Block
10384
10385
10386 for {
10387 if v_0.Op != OpARMMOVWconst {
10388 break
10389 }
10390 c := auxIntToInt32(v_0.AuxInt)
10391 x := v_1
10392 y := v_2
10393 flags := v_3
10394 v.reset(OpARMRSCconst)
10395 v.AuxInt = int32ToAuxInt(c)
10396 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
10397 v0.AddArg2(x, y)
10398 v.AddArg2(v0, flags)
10399 return true
10400 }
10401
10402
10403
10404 for {
10405 x := v_0
10406 y := v_1
10407 if v_2.Op != OpARMMOVWconst {
10408 break
10409 }
10410 c := auxIntToInt32(v_2.AuxInt)
10411 flags := v_3
10412 if !(0 <= c && c < 32) {
10413 break
10414 }
10415 v.reset(OpARMSBCshiftRL)
10416 v.AuxInt = int32ToAuxInt(c)
10417 v.AddArg3(x, y, flags)
10418 return true
10419 }
10420 return false
10421 }
10422 func rewriteValueARM_OpARMSLL(v *Value) bool {
10423 v_1 := v.Args[1]
10424 v_0 := v.Args[0]
10425
10426
10427
10428 for {
10429 x := v_0
10430 if v_1.Op != OpARMMOVWconst {
10431 break
10432 }
10433 c := auxIntToInt32(v_1.AuxInt)
10434 if !(0 <= c && c < 32) {
10435 break
10436 }
10437 v.reset(OpARMSLLconst)
10438 v.AuxInt = int32ToAuxInt(c)
10439 v.AddArg(x)
10440 return true
10441 }
10442 return false
10443 }
10444 func rewriteValueARM_OpARMSLLconst(v *Value) bool {
10445 v_0 := v.Args[0]
10446
10447
10448 for {
10449 c := auxIntToInt32(v.AuxInt)
10450 if v_0.Op != OpARMMOVWconst {
10451 break
10452 }
10453 d := auxIntToInt32(v_0.AuxInt)
10454 v.reset(OpARMMOVWconst)
10455 v.AuxInt = int32ToAuxInt(d << uint64(c))
10456 return true
10457 }
10458 return false
10459 }
10460 func rewriteValueARM_OpARMSRA(v *Value) bool {
10461 v_1 := v.Args[1]
10462 v_0 := v.Args[0]
10463
10464
10465
10466 for {
10467 x := v_0
10468 if v_1.Op != OpARMMOVWconst {
10469 break
10470 }
10471 c := auxIntToInt32(v_1.AuxInt)
10472 if !(0 <= c && c < 32) {
10473 break
10474 }
10475 v.reset(OpARMSRAconst)
10476 v.AuxInt = int32ToAuxInt(c)
10477 v.AddArg(x)
10478 return true
10479 }
10480 return false
10481 }
10482 func rewriteValueARM_OpARMSRAcond(v *Value) bool {
10483 v_2 := v.Args[2]
10484 v_1 := v.Args[1]
10485 v_0 := v.Args[0]
10486
10487
10488
10489 for {
10490 x := v_0
10491 if v_2.Op != OpARMFlagConstant {
10492 break
10493 }
10494 fc := auxIntToFlagConstant(v_2.AuxInt)
10495 if !(fc.uge()) {
10496 break
10497 }
10498 v.reset(OpARMSRAconst)
10499 v.AuxInt = int32ToAuxInt(31)
10500 v.AddArg(x)
10501 return true
10502 }
10503
10504
10505
10506 for {
10507 x := v_0
10508 y := v_1
10509 if v_2.Op != OpARMFlagConstant {
10510 break
10511 }
10512 fc := auxIntToFlagConstant(v_2.AuxInt)
10513 if !(fc.ult()) {
10514 break
10515 }
10516 v.reset(OpARMSRA)
10517 v.AddArg2(x, y)
10518 return true
10519 }
10520 return false
10521 }
10522 func rewriteValueARM_OpARMSRAconst(v *Value) bool {
10523 v_0 := v.Args[0]
10524
10525
10526 for {
10527 c := auxIntToInt32(v.AuxInt)
10528 if v_0.Op != OpARMMOVWconst {
10529 break
10530 }
10531 d := auxIntToInt32(v_0.AuxInt)
10532 v.reset(OpARMMOVWconst)
10533 v.AuxInt = int32ToAuxInt(d >> uint64(c))
10534 return true
10535 }
10536
10537
10538
10539 for {
10540 d := auxIntToInt32(v.AuxInt)
10541 if v_0.Op != OpARMSLLconst {
10542 break
10543 }
10544 c := auxIntToInt32(v_0.AuxInt)
10545 x := v_0.Args[0]
10546 if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10547 break
10548 }
10549 v.reset(OpARMBFX)
10550 v.AuxInt = int32ToAuxInt((d - c) | (32-d)<<8)
10551 v.AddArg(x)
10552 return true
10553 }
10554 return false
10555 }
10556 func rewriteValueARM_OpARMSRL(v *Value) bool {
10557 v_1 := v.Args[1]
10558 v_0 := v.Args[0]
10559
10560
10561
10562 for {
10563 x := v_0
10564 if v_1.Op != OpARMMOVWconst {
10565 break
10566 }
10567 c := auxIntToInt32(v_1.AuxInt)
10568 if !(0 <= c && c < 32) {
10569 break
10570 }
10571 v.reset(OpARMSRLconst)
10572 v.AuxInt = int32ToAuxInt(c)
10573 v.AddArg(x)
10574 return true
10575 }
10576 return false
10577 }
10578 func rewriteValueARM_OpARMSRLconst(v *Value) bool {
10579 v_0 := v.Args[0]
10580
10581
10582 for {
10583 c := auxIntToInt32(v.AuxInt)
10584 if v_0.Op != OpARMMOVWconst {
10585 break
10586 }
10587 d := auxIntToInt32(v_0.AuxInt)
10588 v.reset(OpARMMOVWconst)
10589 v.AuxInt = int32ToAuxInt(int32(uint32(d) >> uint64(c)))
10590 return true
10591 }
10592
10593
10594
10595 for {
10596 d := auxIntToInt32(v.AuxInt)
10597 if v_0.Op != OpARMSLLconst {
10598 break
10599 }
10600 c := auxIntToInt32(v_0.AuxInt)
10601 x := v_0.Args[0]
10602 if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) {
10603 break
10604 }
10605 v.reset(OpARMBFXU)
10606 v.AuxInt = int32ToAuxInt((d - c) | (32-d)<<8)
10607 v.AddArg(x)
10608 return true
10609 }
10610 return false
10611 }
10612 func rewriteValueARM_OpARMSRR(v *Value) bool {
10613 v_1 := v.Args[1]
10614 v_0 := v.Args[0]
10615
10616
10617 for {
10618 x := v_0
10619 if v_1.Op != OpARMMOVWconst {
10620 break
10621 }
10622 c := auxIntToInt32(v_1.AuxInt)
10623 v.reset(OpARMSRRconst)
10624 v.AuxInt = int32ToAuxInt(c & 31)
10625 v.AddArg(x)
10626 return true
10627 }
10628 return false
10629 }
10630 func rewriteValueARM_OpARMSUB(v *Value) bool {
10631 v_1 := v.Args[1]
10632 v_0 := v.Args[0]
10633
10634
10635 for {
10636 if v_0.Op != OpARMMOVWconst {
10637 break
10638 }
10639 c := auxIntToInt32(v_0.AuxInt)
10640 x := v_1
10641 v.reset(OpARMRSBconst)
10642 v.AuxInt = int32ToAuxInt(c)
10643 v.AddArg(x)
10644 return true
10645 }
10646
10647
10648 for {
10649 x := v_0
10650 if v_1.Op != OpARMMOVWconst {
10651 break
10652 }
10653 c := auxIntToInt32(v_1.AuxInt)
10654 v.reset(OpARMSUBconst)
10655 v.AuxInt = int32ToAuxInt(c)
10656 v.AddArg(x)
10657 return true
10658 }
10659
10660
10661 for {
10662 x := v_0
10663 if v_1.Op != OpARMSLLconst {
10664 break
10665 }
10666 c := auxIntToInt32(v_1.AuxInt)
10667 y := v_1.Args[0]
10668 v.reset(OpARMSUBshiftLL)
10669 v.AuxInt = int32ToAuxInt(c)
10670 v.AddArg2(x, y)
10671 return true
10672 }
10673
10674
10675 for {
10676 if v_0.Op != OpARMSLLconst {
10677 break
10678 }
10679 c := auxIntToInt32(v_0.AuxInt)
10680 y := v_0.Args[0]
10681 x := v_1
10682 v.reset(OpARMRSBshiftLL)
10683 v.AuxInt = int32ToAuxInt(c)
10684 v.AddArg2(x, y)
10685 return true
10686 }
10687
10688
10689 for {
10690 x := v_0
10691 if v_1.Op != OpARMSRLconst {
10692 break
10693 }
10694 c := auxIntToInt32(v_1.AuxInt)
10695 y := v_1.Args[0]
10696 v.reset(OpARMSUBshiftRL)
10697 v.AuxInt = int32ToAuxInt(c)
10698 v.AddArg2(x, y)
10699 return true
10700 }
10701
10702
10703 for {
10704 if v_0.Op != OpARMSRLconst {
10705 break
10706 }
10707 c := auxIntToInt32(v_0.AuxInt)
10708 y := v_0.Args[0]
10709 x := v_1
10710 v.reset(OpARMRSBshiftRL)
10711 v.AuxInt = int32ToAuxInt(c)
10712 v.AddArg2(x, y)
10713 return true
10714 }
10715
10716
10717 for {
10718 x := v_0
10719 if v_1.Op != OpARMSRAconst {
10720 break
10721 }
10722 c := auxIntToInt32(v_1.AuxInt)
10723 y := v_1.Args[0]
10724 v.reset(OpARMSUBshiftRA)
10725 v.AuxInt = int32ToAuxInt(c)
10726 v.AddArg2(x, y)
10727 return true
10728 }
10729
10730
10731 for {
10732 if v_0.Op != OpARMSRAconst {
10733 break
10734 }
10735 c := auxIntToInt32(v_0.AuxInt)
10736 y := v_0.Args[0]
10737 x := v_1
10738 v.reset(OpARMRSBshiftRA)
10739 v.AuxInt = int32ToAuxInt(c)
10740 v.AddArg2(x, y)
10741 return true
10742 }
10743
10744
10745 for {
10746 x := v_0
10747 if v_1.Op != OpARMSLL {
10748 break
10749 }
10750 z := v_1.Args[1]
10751 y := v_1.Args[0]
10752 v.reset(OpARMSUBshiftLLreg)
10753 v.AddArg3(x, y, z)
10754 return true
10755 }
10756
10757
10758 for {
10759 if v_0.Op != OpARMSLL {
10760 break
10761 }
10762 z := v_0.Args[1]
10763 y := v_0.Args[0]
10764 x := v_1
10765 v.reset(OpARMRSBshiftLLreg)
10766 v.AddArg3(x, y, z)
10767 return true
10768 }
10769
10770
10771 for {
10772 x := v_0
10773 if v_1.Op != OpARMSRL {
10774 break
10775 }
10776 z := v_1.Args[1]
10777 y := v_1.Args[0]
10778 v.reset(OpARMSUBshiftRLreg)
10779 v.AddArg3(x, y, z)
10780 return true
10781 }
10782
10783
10784 for {
10785 if v_0.Op != OpARMSRL {
10786 break
10787 }
10788 z := v_0.Args[1]
10789 y := v_0.Args[0]
10790 x := v_1
10791 v.reset(OpARMRSBshiftRLreg)
10792 v.AddArg3(x, y, z)
10793 return true
10794 }
10795
10796
10797 for {
10798 x := v_0
10799 if v_1.Op != OpARMSRA {
10800 break
10801 }
10802 z := v_1.Args[1]
10803 y := v_1.Args[0]
10804 v.reset(OpARMSUBshiftRAreg)
10805 v.AddArg3(x, y, z)
10806 return true
10807 }
10808
10809
10810 for {
10811 if v_0.Op != OpARMSRA {
10812 break
10813 }
10814 z := v_0.Args[1]
10815 y := v_0.Args[0]
10816 x := v_1
10817 v.reset(OpARMRSBshiftRAreg)
10818 v.AddArg3(x, y, z)
10819 return true
10820 }
10821
10822
10823 for {
10824 x := v_0
10825 if x != v_1 {
10826 break
10827 }
10828 v.reset(OpARMMOVWconst)
10829 v.AuxInt = int32ToAuxInt(0)
10830 return true
10831 }
10832
10833
10834
10835 for {
10836 a := v_0
10837 if v_1.Op != OpARMMUL {
10838 break
10839 }
10840 y := v_1.Args[1]
10841 x := v_1.Args[0]
10842 if !(buildcfg.GOARM.Version == 7) {
10843 break
10844 }
10845 v.reset(OpARMMULS)
10846 v.AddArg3(x, y, a)
10847 return true
10848 }
10849 return false
10850 }
10851 func rewriteValueARM_OpARMSUBD(v *Value) bool {
10852 v_1 := v.Args[1]
10853 v_0 := v.Args[0]
10854
10855
10856
10857 for {
10858 a := v_0
10859 if v_1.Op != OpARMMULD {
10860 break
10861 }
10862 y := v_1.Args[1]
10863 x := v_1.Args[0]
10864 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
10865 break
10866 }
10867 v.reset(OpARMMULSD)
10868 v.AddArg3(a, x, y)
10869 return true
10870 }
10871
10872
10873
10874 for {
10875 a := v_0
10876 if v_1.Op != OpARMNMULD {
10877 break
10878 }
10879 y := v_1.Args[1]
10880 x := v_1.Args[0]
10881 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
10882 break
10883 }
10884 v.reset(OpARMMULAD)
10885 v.AddArg3(a, x, y)
10886 return true
10887 }
10888 return false
10889 }
10890 func rewriteValueARM_OpARMSUBF(v *Value) bool {
10891 v_1 := v.Args[1]
10892 v_0 := v.Args[0]
10893
10894
10895
10896 for {
10897 a := v_0
10898 if v_1.Op != OpARMMULF {
10899 break
10900 }
10901 y := v_1.Args[1]
10902 x := v_1.Args[0]
10903 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
10904 break
10905 }
10906 v.reset(OpARMMULSF)
10907 v.AddArg3(a, x, y)
10908 return true
10909 }
10910
10911
10912
10913 for {
10914 a := v_0
10915 if v_1.Op != OpARMNMULF {
10916 break
10917 }
10918 y := v_1.Args[1]
10919 x := v_1.Args[0]
10920 if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) {
10921 break
10922 }
10923 v.reset(OpARMMULAF)
10924 v.AddArg3(a, x, y)
10925 return true
10926 }
10927 return false
10928 }
10929 func rewriteValueARM_OpARMSUBS(v *Value) bool {
10930 v_1 := v.Args[1]
10931 v_0 := v.Args[0]
10932
10933
10934 for {
10935 x := v_0
10936 if v_1.Op != OpARMMOVWconst {
10937 break
10938 }
10939 c := auxIntToInt32(v_1.AuxInt)
10940 v.reset(OpARMSUBSconst)
10941 v.AuxInt = int32ToAuxInt(c)
10942 v.AddArg(x)
10943 return true
10944 }
10945
10946
10947 for {
10948 x := v_0
10949 if v_1.Op != OpARMSLLconst {
10950 break
10951 }
10952 c := auxIntToInt32(v_1.AuxInt)
10953 y := v_1.Args[0]
10954 v.reset(OpARMSUBSshiftLL)
10955 v.AuxInt = int32ToAuxInt(c)
10956 v.AddArg2(x, y)
10957 return true
10958 }
10959
10960
10961 for {
10962 if v_0.Op != OpARMSLLconst {
10963 break
10964 }
10965 c := auxIntToInt32(v_0.AuxInt)
10966 y := v_0.Args[0]
10967 x := v_1
10968 v.reset(OpARMRSBSshiftLL)
10969 v.AuxInt = int32ToAuxInt(c)
10970 v.AddArg2(x, y)
10971 return true
10972 }
10973
10974
10975 for {
10976 x := v_0
10977 if v_1.Op != OpARMSRLconst {
10978 break
10979 }
10980 c := auxIntToInt32(v_1.AuxInt)
10981 y := v_1.Args[0]
10982 v.reset(OpARMSUBSshiftRL)
10983 v.AuxInt = int32ToAuxInt(c)
10984 v.AddArg2(x, y)
10985 return true
10986 }
10987
10988
10989 for {
10990 if v_0.Op != OpARMSRLconst {
10991 break
10992 }
10993 c := auxIntToInt32(v_0.AuxInt)
10994 y := v_0.Args[0]
10995 x := v_1
10996 v.reset(OpARMRSBSshiftRL)
10997 v.AuxInt = int32ToAuxInt(c)
10998 v.AddArg2(x, y)
10999 return true
11000 }
11001
11002
11003 for {
11004 x := v_0
11005 if v_1.Op != OpARMSRAconst {
11006 break
11007 }
11008 c := auxIntToInt32(v_1.AuxInt)
11009 y := v_1.Args[0]
11010 v.reset(OpARMSUBSshiftRA)
11011 v.AuxInt = int32ToAuxInt(c)
11012 v.AddArg2(x, y)
11013 return true
11014 }
11015
11016
11017 for {
11018 if v_0.Op != OpARMSRAconst {
11019 break
11020 }
11021 c := auxIntToInt32(v_0.AuxInt)
11022 y := v_0.Args[0]
11023 x := v_1
11024 v.reset(OpARMRSBSshiftRA)
11025 v.AuxInt = int32ToAuxInt(c)
11026 v.AddArg2(x, y)
11027 return true
11028 }
11029
11030
11031 for {
11032 x := v_0
11033 if v_1.Op != OpARMSLL {
11034 break
11035 }
11036 z := v_1.Args[1]
11037 y := v_1.Args[0]
11038 v.reset(OpARMSUBSshiftLLreg)
11039 v.AddArg3(x, y, z)
11040 return true
11041 }
11042
11043
11044 for {
11045 if v_0.Op != OpARMSLL {
11046 break
11047 }
11048 z := v_0.Args[1]
11049 y := v_0.Args[0]
11050 x := v_1
11051 v.reset(OpARMRSBSshiftLLreg)
11052 v.AddArg3(x, y, z)
11053 return true
11054 }
11055
11056
11057 for {
11058 x := v_0
11059 if v_1.Op != OpARMSRL {
11060 break
11061 }
11062 z := v_1.Args[1]
11063 y := v_1.Args[0]
11064 v.reset(OpARMSUBSshiftRLreg)
11065 v.AddArg3(x, y, z)
11066 return true
11067 }
11068
11069
11070 for {
11071 if v_0.Op != OpARMSRL {
11072 break
11073 }
11074 z := v_0.Args[1]
11075 y := v_0.Args[0]
11076 x := v_1
11077 v.reset(OpARMRSBSshiftRLreg)
11078 v.AddArg3(x, y, z)
11079 return true
11080 }
11081
11082
11083 for {
11084 x := v_0
11085 if v_1.Op != OpARMSRA {
11086 break
11087 }
11088 z := v_1.Args[1]
11089 y := v_1.Args[0]
11090 v.reset(OpARMSUBSshiftRAreg)
11091 v.AddArg3(x, y, z)
11092 return true
11093 }
11094
11095
11096 for {
11097 if v_0.Op != OpARMSRA {
11098 break
11099 }
11100 z := v_0.Args[1]
11101 y := v_0.Args[0]
11102 x := v_1
11103 v.reset(OpARMRSBSshiftRAreg)
11104 v.AddArg3(x, y, z)
11105 return true
11106 }
11107 return false
11108 }
11109 func rewriteValueARM_OpARMSUBSshiftLL(v *Value) bool {
11110 v_1 := v.Args[1]
11111 v_0 := v.Args[0]
11112 b := v.Block
11113
11114
11115 for {
11116 d := auxIntToInt32(v.AuxInt)
11117 if v_0.Op != OpARMMOVWconst {
11118 break
11119 }
11120 c := auxIntToInt32(v_0.AuxInt)
11121 x := v_1
11122 v.reset(OpARMRSBSconst)
11123 v.AuxInt = int32ToAuxInt(c)
11124 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11125 v0.AuxInt = int32ToAuxInt(d)
11126 v0.AddArg(x)
11127 v.AddArg(v0)
11128 return true
11129 }
11130
11131
11132 for {
11133 d := auxIntToInt32(v.AuxInt)
11134 x := v_0
11135 if v_1.Op != OpARMMOVWconst {
11136 break
11137 }
11138 c := auxIntToInt32(v_1.AuxInt)
11139 v.reset(OpARMSUBSconst)
11140 v.AuxInt = int32ToAuxInt(c << uint64(d))
11141 v.AddArg(x)
11142 return true
11143 }
11144 return false
11145 }
11146 func rewriteValueARM_OpARMSUBSshiftLLreg(v *Value) bool {
11147 v_2 := v.Args[2]
11148 v_1 := v.Args[1]
11149 v_0 := v.Args[0]
11150 b := v.Block
11151
11152
11153 for {
11154 if v_0.Op != OpARMMOVWconst {
11155 break
11156 }
11157 c := auxIntToInt32(v_0.AuxInt)
11158 x := v_1
11159 y := v_2
11160 v.reset(OpARMRSBSconst)
11161 v.AuxInt = int32ToAuxInt(c)
11162 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11163 v0.AddArg2(x, y)
11164 v.AddArg(v0)
11165 return true
11166 }
11167
11168
11169
11170 for {
11171 x := v_0
11172 y := v_1
11173 if v_2.Op != OpARMMOVWconst {
11174 break
11175 }
11176 c := auxIntToInt32(v_2.AuxInt)
11177 if !(0 <= c && c < 32) {
11178 break
11179 }
11180 v.reset(OpARMSUBSshiftLL)
11181 v.AuxInt = int32ToAuxInt(c)
11182 v.AddArg2(x, y)
11183 return true
11184 }
11185 return false
11186 }
11187 func rewriteValueARM_OpARMSUBSshiftRA(v *Value) bool {
11188 v_1 := v.Args[1]
11189 v_0 := v.Args[0]
11190 b := v.Block
11191
11192
11193 for {
11194 d := auxIntToInt32(v.AuxInt)
11195 if v_0.Op != OpARMMOVWconst {
11196 break
11197 }
11198 c := auxIntToInt32(v_0.AuxInt)
11199 x := v_1
11200 v.reset(OpARMRSBSconst)
11201 v.AuxInt = int32ToAuxInt(c)
11202 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
11203 v0.AuxInt = int32ToAuxInt(d)
11204 v0.AddArg(x)
11205 v.AddArg(v0)
11206 return true
11207 }
11208
11209
11210 for {
11211 d := auxIntToInt32(v.AuxInt)
11212 x := v_0
11213 if v_1.Op != OpARMMOVWconst {
11214 break
11215 }
11216 c := auxIntToInt32(v_1.AuxInt)
11217 v.reset(OpARMSUBSconst)
11218 v.AuxInt = int32ToAuxInt(c >> uint64(d))
11219 v.AddArg(x)
11220 return true
11221 }
11222 return false
11223 }
11224 func rewriteValueARM_OpARMSUBSshiftRAreg(v *Value) bool {
11225 v_2 := v.Args[2]
11226 v_1 := v.Args[1]
11227 v_0 := v.Args[0]
11228 b := v.Block
11229
11230
11231 for {
11232 if v_0.Op != OpARMMOVWconst {
11233 break
11234 }
11235 c := auxIntToInt32(v_0.AuxInt)
11236 x := v_1
11237 y := v_2
11238 v.reset(OpARMRSBSconst)
11239 v.AuxInt = int32ToAuxInt(c)
11240 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
11241 v0.AddArg2(x, y)
11242 v.AddArg(v0)
11243 return true
11244 }
11245
11246
11247
11248 for {
11249 x := v_0
11250 y := v_1
11251 if v_2.Op != OpARMMOVWconst {
11252 break
11253 }
11254 c := auxIntToInt32(v_2.AuxInt)
11255 if !(0 <= c && c < 32) {
11256 break
11257 }
11258 v.reset(OpARMSUBSshiftRA)
11259 v.AuxInt = int32ToAuxInt(c)
11260 v.AddArg2(x, y)
11261 return true
11262 }
11263 return false
11264 }
11265 func rewriteValueARM_OpARMSUBSshiftRL(v *Value) bool {
11266 v_1 := v.Args[1]
11267 v_0 := v.Args[0]
11268 b := v.Block
11269
11270
11271 for {
11272 d := auxIntToInt32(v.AuxInt)
11273 if v_0.Op != OpARMMOVWconst {
11274 break
11275 }
11276 c := auxIntToInt32(v_0.AuxInt)
11277 x := v_1
11278 v.reset(OpARMRSBSconst)
11279 v.AuxInt = int32ToAuxInt(c)
11280 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
11281 v0.AuxInt = int32ToAuxInt(d)
11282 v0.AddArg(x)
11283 v.AddArg(v0)
11284 return true
11285 }
11286
11287
11288 for {
11289 d := auxIntToInt32(v.AuxInt)
11290 x := v_0
11291 if v_1.Op != OpARMMOVWconst {
11292 break
11293 }
11294 c := auxIntToInt32(v_1.AuxInt)
11295 v.reset(OpARMSUBSconst)
11296 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11297 v.AddArg(x)
11298 return true
11299 }
11300 return false
11301 }
11302 func rewriteValueARM_OpARMSUBSshiftRLreg(v *Value) bool {
11303 v_2 := v.Args[2]
11304 v_1 := v.Args[1]
11305 v_0 := v.Args[0]
11306 b := v.Block
11307
11308
11309 for {
11310 if v_0.Op != OpARMMOVWconst {
11311 break
11312 }
11313 c := auxIntToInt32(v_0.AuxInt)
11314 x := v_1
11315 y := v_2
11316 v.reset(OpARMRSBSconst)
11317 v.AuxInt = int32ToAuxInt(c)
11318 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
11319 v0.AddArg2(x, y)
11320 v.AddArg(v0)
11321 return true
11322 }
11323
11324
11325
11326 for {
11327 x := v_0
11328 y := v_1
11329 if v_2.Op != OpARMMOVWconst {
11330 break
11331 }
11332 c := auxIntToInt32(v_2.AuxInt)
11333 if !(0 <= c && c < 32) {
11334 break
11335 }
11336 v.reset(OpARMSUBSshiftRL)
11337 v.AuxInt = int32ToAuxInt(c)
11338 v.AddArg2(x, y)
11339 return true
11340 }
11341 return false
11342 }
11343 func rewriteValueARM_OpARMSUBconst(v *Value) bool {
11344 v_0 := v.Args[0]
11345
11346
11347 for {
11348 off1 := auxIntToInt32(v.AuxInt)
11349 if v_0.Op != OpARMMOVWaddr {
11350 break
11351 }
11352 off2 := auxIntToInt32(v_0.AuxInt)
11353 sym := auxToSym(v_0.Aux)
11354 ptr := v_0.Args[0]
11355 v.reset(OpARMMOVWaddr)
11356 v.AuxInt = int32ToAuxInt(off2 - off1)
11357 v.Aux = symToAux(sym)
11358 v.AddArg(ptr)
11359 return true
11360 }
11361
11362
11363 for {
11364 if auxIntToInt32(v.AuxInt) != 0 {
11365 break
11366 }
11367 x := v_0
11368 v.copyOf(x)
11369 return true
11370 }
11371
11372
11373
11374 for {
11375 c := auxIntToInt32(v.AuxInt)
11376 x := v_0
11377 if !(!isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c))) {
11378 break
11379 }
11380 v.reset(OpARMADDconst)
11381 v.AuxInt = int32ToAuxInt(-c)
11382 v.AddArg(x)
11383 return true
11384 }
11385
11386
11387
11388 for {
11389 c := auxIntToInt32(v.AuxInt)
11390 x := v_0
11391 if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) {
11392 break
11393 }
11394 v.reset(OpARMADDconst)
11395 v.AuxInt = int32ToAuxInt(-c)
11396 v.AddArg(x)
11397 return true
11398 }
11399
11400
11401 for {
11402 c := auxIntToInt32(v.AuxInt)
11403 if v_0.Op != OpARMMOVWconst {
11404 break
11405 }
11406 d := auxIntToInt32(v_0.AuxInt)
11407 v.reset(OpARMMOVWconst)
11408 v.AuxInt = int32ToAuxInt(d - c)
11409 return true
11410 }
11411
11412
11413 for {
11414 c := auxIntToInt32(v.AuxInt)
11415 if v_0.Op != OpARMSUBconst {
11416 break
11417 }
11418 d := auxIntToInt32(v_0.AuxInt)
11419 x := v_0.Args[0]
11420 v.reset(OpARMADDconst)
11421 v.AuxInt = int32ToAuxInt(-c - d)
11422 v.AddArg(x)
11423 return true
11424 }
11425
11426
11427 for {
11428 c := auxIntToInt32(v.AuxInt)
11429 if v_0.Op != OpARMADDconst {
11430 break
11431 }
11432 d := auxIntToInt32(v_0.AuxInt)
11433 x := v_0.Args[0]
11434 v.reset(OpARMADDconst)
11435 v.AuxInt = int32ToAuxInt(-c + d)
11436 v.AddArg(x)
11437 return true
11438 }
11439
11440
11441 for {
11442 c := auxIntToInt32(v.AuxInt)
11443 if v_0.Op != OpARMRSBconst {
11444 break
11445 }
11446 d := auxIntToInt32(v_0.AuxInt)
11447 x := v_0.Args[0]
11448 v.reset(OpARMRSBconst)
11449 v.AuxInt = int32ToAuxInt(-c + d)
11450 v.AddArg(x)
11451 return true
11452 }
11453 return false
11454 }
11455 func rewriteValueARM_OpARMSUBshiftLL(v *Value) bool {
11456 v_1 := v.Args[1]
11457 v_0 := v.Args[0]
11458 b := v.Block
11459
11460
11461 for {
11462 d := auxIntToInt32(v.AuxInt)
11463 if v_0.Op != OpARMMOVWconst {
11464 break
11465 }
11466 c := auxIntToInt32(v_0.AuxInt)
11467 x := v_1
11468 v.reset(OpARMRSBconst)
11469 v.AuxInt = int32ToAuxInt(c)
11470 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11471 v0.AuxInt = int32ToAuxInt(d)
11472 v0.AddArg(x)
11473 v.AddArg(v0)
11474 return true
11475 }
11476
11477
11478 for {
11479 d := auxIntToInt32(v.AuxInt)
11480 x := v_0
11481 if v_1.Op != OpARMMOVWconst {
11482 break
11483 }
11484 c := auxIntToInt32(v_1.AuxInt)
11485 v.reset(OpARMSUBconst)
11486 v.AuxInt = int32ToAuxInt(c << uint64(d))
11487 v.AddArg(x)
11488 return true
11489 }
11490
11491
11492 for {
11493 c := auxIntToInt32(v.AuxInt)
11494 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
11495 break
11496 }
11497 x := v_0.Args[0]
11498 if x != v_1 {
11499 break
11500 }
11501 v.reset(OpARMMOVWconst)
11502 v.AuxInt = int32ToAuxInt(0)
11503 return true
11504 }
11505 return false
11506 }
11507 func rewriteValueARM_OpARMSUBshiftLLreg(v *Value) bool {
11508 v_2 := v.Args[2]
11509 v_1 := v.Args[1]
11510 v_0 := v.Args[0]
11511 b := v.Block
11512
11513
11514 for {
11515 if v_0.Op != OpARMMOVWconst {
11516 break
11517 }
11518 c := auxIntToInt32(v_0.AuxInt)
11519 x := v_1
11520 y := v_2
11521 v.reset(OpARMRSBconst)
11522 v.AuxInt = int32ToAuxInt(c)
11523 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11524 v0.AddArg2(x, y)
11525 v.AddArg(v0)
11526 return true
11527 }
11528
11529
11530
11531 for {
11532 x := v_0
11533 y := v_1
11534 if v_2.Op != OpARMMOVWconst {
11535 break
11536 }
11537 c := auxIntToInt32(v_2.AuxInt)
11538 if !(0 <= c && c < 32) {
11539 break
11540 }
11541 v.reset(OpARMSUBshiftLL)
11542 v.AuxInt = int32ToAuxInt(c)
11543 v.AddArg2(x, y)
11544 return true
11545 }
11546 return false
11547 }
11548 func rewriteValueARM_OpARMSUBshiftRA(v *Value) bool {
11549 v_1 := v.Args[1]
11550 v_0 := v.Args[0]
11551 b := v.Block
11552
11553
11554 for {
11555 d := auxIntToInt32(v.AuxInt)
11556 if v_0.Op != OpARMMOVWconst {
11557 break
11558 }
11559 c := auxIntToInt32(v_0.AuxInt)
11560 x := v_1
11561 v.reset(OpARMRSBconst)
11562 v.AuxInt = int32ToAuxInt(c)
11563 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
11564 v0.AuxInt = int32ToAuxInt(d)
11565 v0.AddArg(x)
11566 v.AddArg(v0)
11567 return true
11568 }
11569
11570
11571 for {
11572 d := auxIntToInt32(v.AuxInt)
11573 x := v_0
11574 if v_1.Op != OpARMMOVWconst {
11575 break
11576 }
11577 c := auxIntToInt32(v_1.AuxInt)
11578 v.reset(OpARMSUBconst)
11579 v.AuxInt = int32ToAuxInt(c >> uint64(d))
11580 v.AddArg(x)
11581 return true
11582 }
11583
11584
11585 for {
11586 c := auxIntToInt32(v.AuxInt)
11587 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
11588 break
11589 }
11590 x := v_0.Args[0]
11591 if x != v_1 {
11592 break
11593 }
11594 v.reset(OpARMMOVWconst)
11595 v.AuxInt = int32ToAuxInt(0)
11596 return true
11597 }
11598 return false
11599 }
11600 func rewriteValueARM_OpARMSUBshiftRAreg(v *Value) bool {
11601 v_2 := v.Args[2]
11602 v_1 := v.Args[1]
11603 v_0 := v.Args[0]
11604 b := v.Block
11605
11606
11607 for {
11608 if v_0.Op != OpARMMOVWconst {
11609 break
11610 }
11611 c := auxIntToInt32(v_0.AuxInt)
11612 x := v_1
11613 y := v_2
11614 v.reset(OpARMRSBconst)
11615 v.AuxInt = int32ToAuxInt(c)
11616 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
11617 v0.AddArg2(x, y)
11618 v.AddArg(v0)
11619 return true
11620 }
11621
11622
11623
11624 for {
11625 x := v_0
11626 y := v_1
11627 if v_2.Op != OpARMMOVWconst {
11628 break
11629 }
11630 c := auxIntToInt32(v_2.AuxInt)
11631 if !(0 <= c && c < 32) {
11632 break
11633 }
11634 v.reset(OpARMSUBshiftRA)
11635 v.AuxInt = int32ToAuxInt(c)
11636 v.AddArg2(x, y)
11637 return true
11638 }
11639 return false
11640 }
11641 func rewriteValueARM_OpARMSUBshiftRL(v *Value) bool {
11642 v_1 := v.Args[1]
11643 v_0 := v.Args[0]
11644 b := v.Block
11645
11646
11647 for {
11648 d := auxIntToInt32(v.AuxInt)
11649 if v_0.Op != OpARMMOVWconst {
11650 break
11651 }
11652 c := auxIntToInt32(v_0.AuxInt)
11653 x := v_1
11654 v.reset(OpARMRSBconst)
11655 v.AuxInt = int32ToAuxInt(c)
11656 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
11657 v0.AuxInt = int32ToAuxInt(d)
11658 v0.AddArg(x)
11659 v.AddArg(v0)
11660 return true
11661 }
11662
11663
11664 for {
11665 d := auxIntToInt32(v.AuxInt)
11666 x := v_0
11667 if v_1.Op != OpARMMOVWconst {
11668 break
11669 }
11670 c := auxIntToInt32(v_1.AuxInt)
11671 v.reset(OpARMSUBconst)
11672 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
11673 v.AddArg(x)
11674 return true
11675 }
11676
11677
11678 for {
11679 c := auxIntToInt32(v.AuxInt)
11680 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
11681 break
11682 }
11683 x := v_0.Args[0]
11684 if x != v_1 {
11685 break
11686 }
11687 v.reset(OpARMMOVWconst)
11688 v.AuxInt = int32ToAuxInt(0)
11689 return true
11690 }
11691 return false
11692 }
11693 func rewriteValueARM_OpARMSUBshiftRLreg(v *Value) bool {
11694 v_2 := v.Args[2]
11695 v_1 := v.Args[1]
11696 v_0 := v.Args[0]
11697 b := v.Block
11698
11699
11700 for {
11701 if v_0.Op != OpARMMOVWconst {
11702 break
11703 }
11704 c := auxIntToInt32(v_0.AuxInt)
11705 x := v_1
11706 y := v_2
11707 v.reset(OpARMRSBconst)
11708 v.AuxInt = int32ToAuxInt(c)
11709 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
11710 v0.AddArg2(x, y)
11711 v.AddArg(v0)
11712 return true
11713 }
11714
11715
11716
11717 for {
11718 x := v_0
11719 y := v_1
11720 if v_2.Op != OpARMMOVWconst {
11721 break
11722 }
11723 c := auxIntToInt32(v_2.AuxInt)
11724 if !(0 <= c && c < 32) {
11725 break
11726 }
11727 v.reset(OpARMSUBshiftRL)
11728 v.AuxInt = int32ToAuxInt(c)
11729 v.AddArg2(x, y)
11730 return true
11731 }
11732 return false
11733 }
11734 func rewriteValueARM_OpARMTEQ(v *Value) bool {
11735 v_1 := v.Args[1]
11736 v_0 := v.Args[0]
11737
11738
11739 for {
11740 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11741 x := v_0
11742 if v_1.Op != OpARMMOVWconst {
11743 continue
11744 }
11745 c := auxIntToInt32(v_1.AuxInt)
11746 v.reset(OpARMTEQconst)
11747 v.AuxInt = int32ToAuxInt(c)
11748 v.AddArg(x)
11749 return true
11750 }
11751 break
11752 }
11753
11754
11755 for {
11756 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11757 x := v_0
11758 if v_1.Op != OpARMSLLconst {
11759 continue
11760 }
11761 c := auxIntToInt32(v_1.AuxInt)
11762 y := v_1.Args[0]
11763 v.reset(OpARMTEQshiftLL)
11764 v.AuxInt = int32ToAuxInt(c)
11765 v.AddArg2(x, y)
11766 return true
11767 }
11768 break
11769 }
11770
11771
11772 for {
11773 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11774 x := v_0
11775 if v_1.Op != OpARMSRLconst {
11776 continue
11777 }
11778 c := auxIntToInt32(v_1.AuxInt)
11779 y := v_1.Args[0]
11780 v.reset(OpARMTEQshiftRL)
11781 v.AuxInt = int32ToAuxInt(c)
11782 v.AddArg2(x, y)
11783 return true
11784 }
11785 break
11786 }
11787
11788
11789 for {
11790 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11791 x := v_0
11792 if v_1.Op != OpARMSRAconst {
11793 continue
11794 }
11795 c := auxIntToInt32(v_1.AuxInt)
11796 y := v_1.Args[0]
11797 v.reset(OpARMTEQshiftRA)
11798 v.AuxInt = int32ToAuxInt(c)
11799 v.AddArg2(x, y)
11800 return true
11801 }
11802 break
11803 }
11804
11805
11806 for {
11807 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11808 x := v_0
11809 if v_1.Op != OpARMSLL {
11810 continue
11811 }
11812 z := v_1.Args[1]
11813 y := v_1.Args[0]
11814 v.reset(OpARMTEQshiftLLreg)
11815 v.AddArg3(x, y, z)
11816 return true
11817 }
11818 break
11819 }
11820
11821
11822 for {
11823 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11824 x := v_0
11825 if v_1.Op != OpARMSRL {
11826 continue
11827 }
11828 z := v_1.Args[1]
11829 y := v_1.Args[0]
11830 v.reset(OpARMTEQshiftRLreg)
11831 v.AddArg3(x, y, z)
11832 return true
11833 }
11834 break
11835 }
11836
11837
11838 for {
11839 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11840 x := v_0
11841 if v_1.Op != OpARMSRA {
11842 continue
11843 }
11844 z := v_1.Args[1]
11845 y := v_1.Args[0]
11846 v.reset(OpARMTEQshiftRAreg)
11847 v.AddArg3(x, y, z)
11848 return true
11849 }
11850 break
11851 }
11852 return false
11853 }
11854 func rewriteValueARM_OpARMTEQconst(v *Value) bool {
11855 v_0 := v.Args[0]
11856
11857
11858 for {
11859 y := auxIntToInt32(v.AuxInt)
11860 if v_0.Op != OpARMMOVWconst {
11861 break
11862 }
11863 x := auxIntToInt32(v_0.AuxInt)
11864 v.reset(OpARMFlagConstant)
11865 v.AuxInt = flagConstantToAuxInt(logicFlags32(x ^ y))
11866 return true
11867 }
11868 return false
11869 }
11870 func rewriteValueARM_OpARMTEQshiftLL(v *Value) bool {
11871 v_1 := v.Args[1]
11872 v_0 := v.Args[0]
11873 b := v.Block
11874
11875
11876 for {
11877 d := auxIntToInt32(v.AuxInt)
11878 if v_0.Op != OpARMMOVWconst {
11879 break
11880 }
11881 c := auxIntToInt32(v_0.AuxInt)
11882 x := v_1
11883 v.reset(OpARMTEQconst)
11884 v.AuxInt = int32ToAuxInt(c)
11885 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
11886 v0.AuxInt = int32ToAuxInt(d)
11887 v0.AddArg(x)
11888 v.AddArg(v0)
11889 return true
11890 }
11891
11892
11893 for {
11894 d := auxIntToInt32(v.AuxInt)
11895 x := v_0
11896 if v_1.Op != OpARMMOVWconst {
11897 break
11898 }
11899 c := auxIntToInt32(v_1.AuxInt)
11900 v.reset(OpARMTEQconst)
11901 v.AuxInt = int32ToAuxInt(c << uint64(d))
11902 v.AddArg(x)
11903 return true
11904 }
11905 return false
11906 }
11907 func rewriteValueARM_OpARMTEQshiftLLreg(v *Value) bool {
11908 v_2 := v.Args[2]
11909 v_1 := v.Args[1]
11910 v_0 := v.Args[0]
11911 b := v.Block
11912
11913
11914 for {
11915 if v_0.Op != OpARMMOVWconst {
11916 break
11917 }
11918 c := auxIntToInt32(v_0.AuxInt)
11919 x := v_1
11920 y := v_2
11921 v.reset(OpARMTEQconst)
11922 v.AuxInt = int32ToAuxInt(c)
11923 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
11924 v0.AddArg2(x, y)
11925 v.AddArg(v0)
11926 return true
11927 }
11928
11929
11930
11931 for {
11932 x := v_0
11933 y := v_1
11934 if v_2.Op != OpARMMOVWconst {
11935 break
11936 }
11937 c := auxIntToInt32(v_2.AuxInt)
11938 if !(0 <= c && c < 32) {
11939 break
11940 }
11941 v.reset(OpARMTEQshiftLL)
11942 v.AuxInt = int32ToAuxInt(c)
11943 v.AddArg2(x, y)
11944 return true
11945 }
11946 return false
11947 }
11948 func rewriteValueARM_OpARMTEQshiftRA(v *Value) bool {
11949 v_1 := v.Args[1]
11950 v_0 := v.Args[0]
11951 b := v.Block
11952
11953
11954 for {
11955 d := auxIntToInt32(v.AuxInt)
11956 if v_0.Op != OpARMMOVWconst {
11957 break
11958 }
11959 c := auxIntToInt32(v_0.AuxInt)
11960 x := v_1
11961 v.reset(OpARMTEQconst)
11962 v.AuxInt = int32ToAuxInt(c)
11963 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
11964 v0.AuxInt = int32ToAuxInt(d)
11965 v0.AddArg(x)
11966 v.AddArg(v0)
11967 return true
11968 }
11969
11970
11971 for {
11972 d := auxIntToInt32(v.AuxInt)
11973 x := v_0
11974 if v_1.Op != OpARMMOVWconst {
11975 break
11976 }
11977 c := auxIntToInt32(v_1.AuxInt)
11978 v.reset(OpARMTEQconst)
11979 v.AuxInt = int32ToAuxInt(c >> uint64(d))
11980 v.AddArg(x)
11981 return true
11982 }
11983 return false
11984 }
11985 func rewriteValueARM_OpARMTEQshiftRAreg(v *Value) bool {
11986 v_2 := v.Args[2]
11987 v_1 := v.Args[1]
11988 v_0 := v.Args[0]
11989 b := v.Block
11990
11991
11992 for {
11993 if v_0.Op != OpARMMOVWconst {
11994 break
11995 }
11996 c := auxIntToInt32(v_0.AuxInt)
11997 x := v_1
11998 y := v_2
11999 v.reset(OpARMTEQconst)
12000 v.AuxInt = int32ToAuxInt(c)
12001 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12002 v0.AddArg2(x, y)
12003 v.AddArg(v0)
12004 return true
12005 }
12006
12007
12008
12009 for {
12010 x := v_0
12011 y := v_1
12012 if v_2.Op != OpARMMOVWconst {
12013 break
12014 }
12015 c := auxIntToInt32(v_2.AuxInt)
12016 if !(0 <= c && c < 32) {
12017 break
12018 }
12019 v.reset(OpARMTEQshiftRA)
12020 v.AuxInt = int32ToAuxInt(c)
12021 v.AddArg2(x, y)
12022 return true
12023 }
12024 return false
12025 }
12026 func rewriteValueARM_OpARMTEQshiftRL(v *Value) bool {
12027 v_1 := v.Args[1]
12028 v_0 := v.Args[0]
12029 b := v.Block
12030
12031
12032 for {
12033 d := auxIntToInt32(v.AuxInt)
12034 if v_0.Op != OpARMMOVWconst {
12035 break
12036 }
12037 c := auxIntToInt32(v_0.AuxInt)
12038 x := v_1
12039 v.reset(OpARMTEQconst)
12040 v.AuxInt = int32ToAuxInt(c)
12041 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12042 v0.AuxInt = int32ToAuxInt(d)
12043 v0.AddArg(x)
12044 v.AddArg(v0)
12045 return true
12046 }
12047
12048
12049 for {
12050 d := auxIntToInt32(v.AuxInt)
12051 x := v_0
12052 if v_1.Op != OpARMMOVWconst {
12053 break
12054 }
12055 c := auxIntToInt32(v_1.AuxInt)
12056 v.reset(OpARMTEQconst)
12057 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12058 v.AddArg(x)
12059 return true
12060 }
12061 return false
12062 }
12063 func rewriteValueARM_OpARMTEQshiftRLreg(v *Value) bool {
12064 v_2 := v.Args[2]
12065 v_1 := v.Args[1]
12066 v_0 := v.Args[0]
12067 b := v.Block
12068
12069
12070 for {
12071 if v_0.Op != OpARMMOVWconst {
12072 break
12073 }
12074 c := auxIntToInt32(v_0.AuxInt)
12075 x := v_1
12076 y := v_2
12077 v.reset(OpARMTEQconst)
12078 v.AuxInt = int32ToAuxInt(c)
12079 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
12080 v0.AddArg2(x, y)
12081 v.AddArg(v0)
12082 return true
12083 }
12084
12085
12086
12087 for {
12088 x := v_0
12089 y := v_1
12090 if v_2.Op != OpARMMOVWconst {
12091 break
12092 }
12093 c := auxIntToInt32(v_2.AuxInt)
12094 if !(0 <= c && c < 32) {
12095 break
12096 }
12097 v.reset(OpARMTEQshiftRL)
12098 v.AuxInt = int32ToAuxInt(c)
12099 v.AddArg2(x, y)
12100 return true
12101 }
12102 return false
12103 }
12104 func rewriteValueARM_OpARMTST(v *Value) bool {
12105 v_1 := v.Args[1]
12106 v_0 := v.Args[0]
12107
12108
12109 for {
12110 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12111 x := v_0
12112 if v_1.Op != OpARMMOVWconst {
12113 continue
12114 }
12115 c := auxIntToInt32(v_1.AuxInt)
12116 v.reset(OpARMTSTconst)
12117 v.AuxInt = int32ToAuxInt(c)
12118 v.AddArg(x)
12119 return true
12120 }
12121 break
12122 }
12123
12124
12125 for {
12126 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12127 x := v_0
12128 if v_1.Op != OpARMSLLconst {
12129 continue
12130 }
12131 c := auxIntToInt32(v_1.AuxInt)
12132 y := v_1.Args[0]
12133 v.reset(OpARMTSTshiftLL)
12134 v.AuxInt = int32ToAuxInt(c)
12135 v.AddArg2(x, y)
12136 return true
12137 }
12138 break
12139 }
12140
12141
12142 for {
12143 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12144 x := v_0
12145 if v_1.Op != OpARMSRLconst {
12146 continue
12147 }
12148 c := auxIntToInt32(v_1.AuxInt)
12149 y := v_1.Args[0]
12150 v.reset(OpARMTSTshiftRL)
12151 v.AuxInt = int32ToAuxInt(c)
12152 v.AddArg2(x, y)
12153 return true
12154 }
12155 break
12156 }
12157
12158
12159 for {
12160 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12161 x := v_0
12162 if v_1.Op != OpARMSRAconst {
12163 continue
12164 }
12165 c := auxIntToInt32(v_1.AuxInt)
12166 y := v_1.Args[0]
12167 v.reset(OpARMTSTshiftRA)
12168 v.AuxInt = int32ToAuxInt(c)
12169 v.AddArg2(x, y)
12170 return true
12171 }
12172 break
12173 }
12174
12175
12176 for {
12177 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12178 x := v_0
12179 if v_1.Op != OpARMSLL {
12180 continue
12181 }
12182 z := v_1.Args[1]
12183 y := v_1.Args[0]
12184 v.reset(OpARMTSTshiftLLreg)
12185 v.AddArg3(x, y, z)
12186 return true
12187 }
12188 break
12189 }
12190
12191
12192 for {
12193 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12194 x := v_0
12195 if v_1.Op != OpARMSRL {
12196 continue
12197 }
12198 z := v_1.Args[1]
12199 y := v_1.Args[0]
12200 v.reset(OpARMTSTshiftRLreg)
12201 v.AddArg3(x, y, z)
12202 return true
12203 }
12204 break
12205 }
12206
12207
12208 for {
12209 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12210 x := v_0
12211 if v_1.Op != OpARMSRA {
12212 continue
12213 }
12214 z := v_1.Args[1]
12215 y := v_1.Args[0]
12216 v.reset(OpARMTSTshiftRAreg)
12217 v.AddArg3(x, y, z)
12218 return true
12219 }
12220 break
12221 }
12222 return false
12223 }
12224 func rewriteValueARM_OpARMTSTconst(v *Value) bool {
12225 v_0 := v.Args[0]
12226
12227
12228 for {
12229 y := auxIntToInt32(v.AuxInt)
12230 if v_0.Op != OpARMMOVWconst {
12231 break
12232 }
12233 x := auxIntToInt32(v_0.AuxInt)
12234 v.reset(OpARMFlagConstant)
12235 v.AuxInt = flagConstantToAuxInt(logicFlags32(x & y))
12236 return true
12237 }
12238 return false
12239 }
12240 func rewriteValueARM_OpARMTSTshiftLL(v *Value) bool {
12241 v_1 := v.Args[1]
12242 v_0 := v.Args[0]
12243 b := v.Block
12244
12245
12246 for {
12247 d := auxIntToInt32(v.AuxInt)
12248 if v_0.Op != OpARMMOVWconst {
12249 break
12250 }
12251 c := auxIntToInt32(v_0.AuxInt)
12252 x := v_1
12253 v.reset(OpARMTSTconst)
12254 v.AuxInt = int32ToAuxInt(c)
12255 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
12256 v0.AuxInt = int32ToAuxInt(d)
12257 v0.AddArg(x)
12258 v.AddArg(v0)
12259 return true
12260 }
12261
12262
12263 for {
12264 d := auxIntToInt32(v.AuxInt)
12265 x := v_0
12266 if v_1.Op != OpARMMOVWconst {
12267 break
12268 }
12269 c := auxIntToInt32(v_1.AuxInt)
12270 v.reset(OpARMTSTconst)
12271 v.AuxInt = int32ToAuxInt(c << uint64(d))
12272 v.AddArg(x)
12273 return true
12274 }
12275 return false
12276 }
12277 func rewriteValueARM_OpARMTSTshiftLLreg(v *Value) bool {
12278 v_2 := v.Args[2]
12279 v_1 := v.Args[1]
12280 v_0 := v.Args[0]
12281 b := v.Block
12282
12283
12284 for {
12285 if v_0.Op != OpARMMOVWconst {
12286 break
12287 }
12288 c := auxIntToInt32(v_0.AuxInt)
12289 x := v_1
12290 y := v_2
12291 v.reset(OpARMTSTconst)
12292 v.AuxInt = int32ToAuxInt(c)
12293 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
12294 v0.AddArg2(x, y)
12295 v.AddArg(v0)
12296 return true
12297 }
12298
12299
12300
12301 for {
12302 x := v_0
12303 y := v_1
12304 if v_2.Op != OpARMMOVWconst {
12305 break
12306 }
12307 c := auxIntToInt32(v_2.AuxInt)
12308 if !(0 <= c && c < 32) {
12309 break
12310 }
12311 v.reset(OpARMTSTshiftLL)
12312 v.AuxInt = int32ToAuxInt(c)
12313 v.AddArg2(x, y)
12314 return true
12315 }
12316 return false
12317 }
12318 func rewriteValueARM_OpARMTSTshiftRA(v *Value) bool {
12319 v_1 := v.Args[1]
12320 v_0 := v.Args[0]
12321 b := v.Block
12322
12323
12324 for {
12325 d := auxIntToInt32(v.AuxInt)
12326 if v_0.Op != OpARMMOVWconst {
12327 break
12328 }
12329 c := auxIntToInt32(v_0.AuxInt)
12330 x := v_1
12331 v.reset(OpARMTSTconst)
12332 v.AuxInt = int32ToAuxInt(c)
12333 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
12334 v0.AuxInt = int32ToAuxInt(d)
12335 v0.AddArg(x)
12336 v.AddArg(v0)
12337 return true
12338 }
12339
12340
12341 for {
12342 d := auxIntToInt32(v.AuxInt)
12343 x := v_0
12344 if v_1.Op != OpARMMOVWconst {
12345 break
12346 }
12347 c := auxIntToInt32(v_1.AuxInt)
12348 v.reset(OpARMTSTconst)
12349 v.AuxInt = int32ToAuxInt(c >> uint64(d))
12350 v.AddArg(x)
12351 return true
12352 }
12353 return false
12354 }
12355 func rewriteValueARM_OpARMTSTshiftRAreg(v *Value) bool {
12356 v_2 := v.Args[2]
12357 v_1 := v.Args[1]
12358 v_0 := v.Args[0]
12359 b := v.Block
12360
12361
12362 for {
12363 if v_0.Op != OpARMMOVWconst {
12364 break
12365 }
12366 c := auxIntToInt32(v_0.AuxInt)
12367 x := v_1
12368 y := v_2
12369 v.reset(OpARMTSTconst)
12370 v.AuxInt = int32ToAuxInt(c)
12371 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12372 v0.AddArg2(x, y)
12373 v.AddArg(v0)
12374 return true
12375 }
12376
12377
12378
12379 for {
12380 x := v_0
12381 y := v_1
12382 if v_2.Op != OpARMMOVWconst {
12383 break
12384 }
12385 c := auxIntToInt32(v_2.AuxInt)
12386 if !(0 <= c && c < 32) {
12387 break
12388 }
12389 v.reset(OpARMTSTshiftRA)
12390 v.AuxInt = int32ToAuxInt(c)
12391 v.AddArg2(x, y)
12392 return true
12393 }
12394 return false
12395 }
12396 func rewriteValueARM_OpARMTSTshiftRL(v *Value) bool {
12397 v_1 := v.Args[1]
12398 v_0 := v.Args[0]
12399 b := v.Block
12400
12401
12402 for {
12403 d := auxIntToInt32(v.AuxInt)
12404 if v_0.Op != OpARMMOVWconst {
12405 break
12406 }
12407 c := auxIntToInt32(v_0.AuxInt)
12408 x := v_1
12409 v.reset(OpARMTSTconst)
12410 v.AuxInt = int32ToAuxInt(c)
12411 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12412 v0.AuxInt = int32ToAuxInt(d)
12413 v0.AddArg(x)
12414 v.AddArg(v0)
12415 return true
12416 }
12417
12418
12419 for {
12420 d := auxIntToInt32(v.AuxInt)
12421 x := v_0
12422 if v_1.Op != OpARMMOVWconst {
12423 break
12424 }
12425 c := auxIntToInt32(v_1.AuxInt)
12426 v.reset(OpARMTSTconst)
12427 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12428 v.AddArg(x)
12429 return true
12430 }
12431 return false
12432 }
12433 func rewriteValueARM_OpARMTSTshiftRLreg(v *Value) bool {
12434 v_2 := v.Args[2]
12435 v_1 := v.Args[1]
12436 v_0 := v.Args[0]
12437 b := v.Block
12438
12439
12440 for {
12441 if v_0.Op != OpARMMOVWconst {
12442 break
12443 }
12444 c := auxIntToInt32(v_0.AuxInt)
12445 x := v_1
12446 y := v_2
12447 v.reset(OpARMTSTconst)
12448 v.AuxInt = int32ToAuxInt(c)
12449 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
12450 v0.AddArg2(x, y)
12451 v.AddArg(v0)
12452 return true
12453 }
12454
12455
12456
12457 for {
12458 x := v_0
12459 y := v_1
12460 if v_2.Op != OpARMMOVWconst {
12461 break
12462 }
12463 c := auxIntToInt32(v_2.AuxInt)
12464 if !(0 <= c && c < 32) {
12465 break
12466 }
12467 v.reset(OpARMTSTshiftRL)
12468 v.AuxInt = int32ToAuxInt(c)
12469 v.AddArg2(x, y)
12470 return true
12471 }
12472 return false
12473 }
12474 func rewriteValueARM_OpARMXOR(v *Value) bool {
12475 v_1 := v.Args[1]
12476 v_0 := v.Args[0]
12477
12478
12479 for {
12480 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12481 x := v_0
12482 if v_1.Op != OpARMMOVWconst {
12483 continue
12484 }
12485 c := auxIntToInt32(v_1.AuxInt)
12486 v.reset(OpARMXORconst)
12487 v.AuxInt = int32ToAuxInt(c)
12488 v.AddArg(x)
12489 return true
12490 }
12491 break
12492 }
12493
12494
12495 for {
12496 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12497 x := v_0
12498 if v_1.Op != OpARMSLLconst {
12499 continue
12500 }
12501 c := auxIntToInt32(v_1.AuxInt)
12502 y := v_1.Args[0]
12503 v.reset(OpARMXORshiftLL)
12504 v.AuxInt = int32ToAuxInt(c)
12505 v.AddArg2(x, y)
12506 return true
12507 }
12508 break
12509 }
12510
12511
12512 for {
12513 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12514 x := v_0
12515 if v_1.Op != OpARMSRLconst {
12516 continue
12517 }
12518 c := auxIntToInt32(v_1.AuxInt)
12519 y := v_1.Args[0]
12520 v.reset(OpARMXORshiftRL)
12521 v.AuxInt = int32ToAuxInt(c)
12522 v.AddArg2(x, y)
12523 return true
12524 }
12525 break
12526 }
12527
12528
12529 for {
12530 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12531 x := v_0
12532 if v_1.Op != OpARMSRAconst {
12533 continue
12534 }
12535 c := auxIntToInt32(v_1.AuxInt)
12536 y := v_1.Args[0]
12537 v.reset(OpARMXORshiftRA)
12538 v.AuxInt = int32ToAuxInt(c)
12539 v.AddArg2(x, y)
12540 return true
12541 }
12542 break
12543 }
12544
12545
12546 for {
12547 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12548 x := v_0
12549 if v_1.Op != OpARMSRRconst {
12550 continue
12551 }
12552 c := auxIntToInt32(v_1.AuxInt)
12553 y := v_1.Args[0]
12554 v.reset(OpARMXORshiftRR)
12555 v.AuxInt = int32ToAuxInt(c)
12556 v.AddArg2(x, y)
12557 return true
12558 }
12559 break
12560 }
12561
12562
12563 for {
12564 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12565 x := v_0
12566 if v_1.Op != OpARMSLL {
12567 continue
12568 }
12569 z := v_1.Args[1]
12570 y := v_1.Args[0]
12571 v.reset(OpARMXORshiftLLreg)
12572 v.AddArg3(x, y, z)
12573 return true
12574 }
12575 break
12576 }
12577
12578
12579 for {
12580 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12581 x := v_0
12582 if v_1.Op != OpARMSRL {
12583 continue
12584 }
12585 z := v_1.Args[1]
12586 y := v_1.Args[0]
12587 v.reset(OpARMXORshiftRLreg)
12588 v.AddArg3(x, y, z)
12589 return true
12590 }
12591 break
12592 }
12593
12594
12595 for {
12596 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
12597 x := v_0
12598 if v_1.Op != OpARMSRA {
12599 continue
12600 }
12601 z := v_1.Args[1]
12602 y := v_1.Args[0]
12603 v.reset(OpARMXORshiftRAreg)
12604 v.AddArg3(x, y, z)
12605 return true
12606 }
12607 break
12608 }
12609
12610
12611 for {
12612 x := v_0
12613 if x != v_1 {
12614 break
12615 }
12616 v.reset(OpARMMOVWconst)
12617 v.AuxInt = int32ToAuxInt(0)
12618 return true
12619 }
12620 return false
12621 }
12622 func rewriteValueARM_OpARMXORconst(v *Value) bool {
12623 v_0 := v.Args[0]
12624
12625
12626 for {
12627 if auxIntToInt32(v.AuxInt) != 0 {
12628 break
12629 }
12630 x := v_0
12631 v.copyOf(x)
12632 return true
12633 }
12634
12635
12636 for {
12637 c := auxIntToInt32(v.AuxInt)
12638 if v_0.Op != OpARMMOVWconst {
12639 break
12640 }
12641 d := auxIntToInt32(v_0.AuxInt)
12642 v.reset(OpARMMOVWconst)
12643 v.AuxInt = int32ToAuxInt(c ^ d)
12644 return true
12645 }
12646
12647
12648 for {
12649 c := auxIntToInt32(v.AuxInt)
12650 if v_0.Op != OpARMXORconst {
12651 break
12652 }
12653 d := auxIntToInt32(v_0.AuxInt)
12654 x := v_0.Args[0]
12655 v.reset(OpARMXORconst)
12656 v.AuxInt = int32ToAuxInt(c ^ d)
12657 v.AddArg(x)
12658 return true
12659 }
12660 return false
12661 }
12662 func rewriteValueARM_OpARMXORshiftLL(v *Value) bool {
12663 v_1 := v.Args[1]
12664 v_0 := v.Args[0]
12665 b := v.Block
12666 typ := &b.Func.Config.Types
12667
12668
12669 for {
12670 d := auxIntToInt32(v.AuxInt)
12671 if v_0.Op != OpARMMOVWconst {
12672 break
12673 }
12674 c := auxIntToInt32(v_0.AuxInt)
12675 x := v_1
12676 v.reset(OpARMXORconst)
12677 v.AuxInt = int32ToAuxInt(c)
12678 v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type)
12679 v0.AuxInt = int32ToAuxInt(d)
12680 v0.AddArg(x)
12681 v.AddArg(v0)
12682 return true
12683 }
12684
12685
12686 for {
12687 d := auxIntToInt32(v.AuxInt)
12688 x := v_0
12689 if v_1.Op != OpARMMOVWconst {
12690 break
12691 }
12692 c := auxIntToInt32(v_1.AuxInt)
12693 v.reset(OpARMXORconst)
12694 v.AuxInt = int32ToAuxInt(c << uint64(d))
12695 v.AddArg(x)
12696 return true
12697 }
12698
12699
12700 for {
12701 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)) {
12702 break
12703 }
12704 x := v_0.Args[0]
12705 if x != v_1 {
12706 break
12707 }
12708 v.reset(OpARMREV16)
12709 v.AddArg(x)
12710 return true
12711 }
12712
12713
12714
12715 for {
12716 if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 {
12717 break
12718 }
12719 v_0_0 := v_0.Args[0]
12720 if v_0_0.Op != OpARMSLLconst || auxIntToInt32(v_0_0.AuxInt) != 16 {
12721 break
12722 }
12723 x := v_0_0.Args[0]
12724 if x != v_1 || !(buildcfg.GOARM.Version >= 6) {
12725 break
12726 }
12727 v.reset(OpARMREV16)
12728 v.AddArg(x)
12729 return true
12730 }
12731
12732
12733 for {
12734 c := auxIntToInt32(v.AuxInt)
12735 if v_0.Op != OpARMSLLconst || auxIntToInt32(v_0.AuxInt) != c {
12736 break
12737 }
12738 x := v_0.Args[0]
12739 if x != v_1 {
12740 break
12741 }
12742 v.reset(OpARMMOVWconst)
12743 v.AuxInt = int32ToAuxInt(0)
12744 return true
12745 }
12746 return false
12747 }
12748 func rewriteValueARM_OpARMXORshiftLLreg(v *Value) bool {
12749 v_2 := v.Args[2]
12750 v_1 := v.Args[1]
12751 v_0 := v.Args[0]
12752 b := v.Block
12753
12754
12755 for {
12756 if v_0.Op != OpARMMOVWconst {
12757 break
12758 }
12759 c := auxIntToInt32(v_0.AuxInt)
12760 x := v_1
12761 y := v_2
12762 v.reset(OpARMXORconst)
12763 v.AuxInt = int32ToAuxInt(c)
12764 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
12765 v0.AddArg2(x, y)
12766 v.AddArg(v0)
12767 return true
12768 }
12769
12770
12771
12772 for {
12773 x := v_0
12774 y := v_1
12775 if v_2.Op != OpARMMOVWconst {
12776 break
12777 }
12778 c := auxIntToInt32(v_2.AuxInt)
12779 if !(0 <= c && c < 32) {
12780 break
12781 }
12782 v.reset(OpARMXORshiftLL)
12783 v.AuxInt = int32ToAuxInt(c)
12784 v.AddArg2(x, y)
12785 return true
12786 }
12787 return false
12788 }
12789 func rewriteValueARM_OpARMXORshiftRA(v *Value) bool {
12790 v_1 := v.Args[1]
12791 v_0 := v.Args[0]
12792 b := v.Block
12793
12794
12795 for {
12796 d := auxIntToInt32(v.AuxInt)
12797 if v_0.Op != OpARMMOVWconst {
12798 break
12799 }
12800 c := auxIntToInt32(v_0.AuxInt)
12801 x := v_1
12802 v.reset(OpARMXORconst)
12803 v.AuxInt = int32ToAuxInt(c)
12804 v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type)
12805 v0.AuxInt = int32ToAuxInt(d)
12806 v0.AddArg(x)
12807 v.AddArg(v0)
12808 return true
12809 }
12810
12811
12812 for {
12813 d := auxIntToInt32(v.AuxInt)
12814 x := v_0
12815 if v_1.Op != OpARMMOVWconst {
12816 break
12817 }
12818 c := auxIntToInt32(v_1.AuxInt)
12819 v.reset(OpARMXORconst)
12820 v.AuxInt = int32ToAuxInt(c >> uint64(d))
12821 v.AddArg(x)
12822 return true
12823 }
12824
12825
12826 for {
12827 c := auxIntToInt32(v.AuxInt)
12828 if v_0.Op != OpARMSRAconst || auxIntToInt32(v_0.AuxInt) != c {
12829 break
12830 }
12831 x := v_0.Args[0]
12832 if x != v_1 {
12833 break
12834 }
12835 v.reset(OpARMMOVWconst)
12836 v.AuxInt = int32ToAuxInt(0)
12837 return true
12838 }
12839 return false
12840 }
12841 func rewriteValueARM_OpARMXORshiftRAreg(v *Value) bool {
12842 v_2 := v.Args[2]
12843 v_1 := v.Args[1]
12844 v_0 := v.Args[0]
12845 b := v.Block
12846
12847
12848 for {
12849 if v_0.Op != OpARMMOVWconst {
12850 break
12851 }
12852 c := auxIntToInt32(v_0.AuxInt)
12853 x := v_1
12854 y := v_2
12855 v.reset(OpARMXORconst)
12856 v.AuxInt = int32ToAuxInt(c)
12857 v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type)
12858 v0.AddArg2(x, y)
12859 v.AddArg(v0)
12860 return true
12861 }
12862
12863
12864
12865 for {
12866 x := v_0
12867 y := v_1
12868 if v_2.Op != OpARMMOVWconst {
12869 break
12870 }
12871 c := auxIntToInt32(v_2.AuxInt)
12872 if !(0 <= c && c < 32) {
12873 break
12874 }
12875 v.reset(OpARMXORshiftRA)
12876 v.AuxInt = int32ToAuxInt(c)
12877 v.AddArg2(x, y)
12878 return true
12879 }
12880 return false
12881 }
12882 func rewriteValueARM_OpARMXORshiftRL(v *Value) bool {
12883 v_1 := v.Args[1]
12884 v_0 := v.Args[0]
12885 b := v.Block
12886
12887
12888 for {
12889 d := auxIntToInt32(v.AuxInt)
12890 if v_0.Op != OpARMMOVWconst {
12891 break
12892 }
12893 c := auxIntToInt32(v_0.AuxInt)
12894 x := v_1
12895 v.reset(OpARMXORconst)
12896 v.AuxInt = int32ToAuxInt(c)
12897 v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type)
12898 v0.AuxInt = int32ToAuxInt(d)
12899 v0.AddArg(x)
12900 v.AddArg(v0)
12901 return true
12902 }
12903
12904
12905 for {
12906 d := auxIntToInt32(v.AuxInt)
12907 x := v_0
12908 if v_1.Op != OpARMMOVWconst {
12909 break
12910 }
12911 c := auxIntToInt32(v_1.AuxInt)
12912 v.reset(OpARMXORconst)
12913 v.AuxInt = int32ToAuxInt(int32(uint32(c) >> uint64(d)))
12914 v.AddArg(x)
12915 return true
12916 }
12917
12918
12919 for {
12920 c := auxIntToInt32(v.AuxInt)
12921 if v_0.Op != OpARMSRLconst || auxIntToInt32(v_0.AuxInt) != c {
12922 break
12923 }
12924 x := v_0.Args[0]
12925 if x != v_1 {
12926 break
12927 }
12928 v.reset(OpARMMOVWconst)
12929 v.AuxInt = int32ToAuxInt(0)
12930 return true
12931 }
12932 return false
12933 }
12934 func rewriteValueARM_OpARMXORshiftRLreg(v *Value) bool {
12935 v_2 := v.Args[2]
12936 v_1 := v.Args[1]
12937 v_0 := v.Args[0]
12938 b := v.Block
12939
12940
12941 for {
12942 if v_0.Op != OpARMMOVWconst {
12943 break
12944 }
12945 c := auxIntToInt32(v_0.AuxInt)
12946 x := v_1
12947 y := v_2
12948 v.reset(OpARMXORconst)
12949 v.AuxInt = int32ToAuxInt(c)
12950 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
12951 v0.AddArg2(x, y)
12952 v.AddArg(v0)
12953 return true
12954 }
12955
12956
12957
12958 for {
12959 x := v_0
12960 y := v_1
12961 if v_2.Op != OpARMMOVWconst {
12962 break
12963 }
12964 c := auxIntToInt32(v_2.AuxInt)
12965 if !(0 <= c && c < 32) {
12966 break
12967 }
12968 v.reset(OpARMXORshiftRL)
12969 v.AuxInt = int32ToAuxInt(c)
12970 v.AddArg2(x, y)
12971 return true
12972 }
12973 return false
12974 }
12975 func rewriteValueARM_OpARMXORshiftRR(v *Value) bool {
12976 v_1 := v.Args[1]
12977 v_0 := v.Args[0]
12978 b := v.Block
12979
12980
12981 for {
12982 d := auxIntToInt32(v.AuxInt)
12983 if v_0.Op != OpARMMOVWconst {
12984 break
12985 }
12986 c := auxIntToInt32(v_0.AuxInt)
12987 x := v_1
12988 v.reset(OpARMXORconst)
12989 v.AuxInt = int32ToAuxInt(c)
12990 v0 := b.NewValue0(v.Pos, OpARMSRRconst, x.Type)
12991 v0.AuxInt = int32ToAuxInt(d)
12992 v0.AddArg(x)
12993 v.AddArg(v0)
12994 return true
12995 }
12996
12997
12998 for {
12999 d := auxIntToInt32(v.AuxInt)
13000 x := v_0
13001 if v_1.Op != OpARMMOVWconst {
13002 break
13003 }
13004 c := auxIntToInt32(v_1.AuxInt)
13005 v.reset(OpARMXORconst)
13006 v.AuxInt = int32ToAuxInt(int32(uint32(c)>>uint64(d) | uint32(c)<<uint64(32-d)))
13007 v.AddArg(x)
13008 return true
13009 }
13010 return false
13011 }
13012 func rewriteValueARM_OpAddr(v *Value) bool {
13013 v_0 := v.Args[0]
13014
13015
13016 for {
13017 sym := auxToSym(v.Aux)
13018 base := v_0
13019 v.reset(OpARMMOVWaddr)
13020 v.Aux = symToAux(sym)
13021 v.AddArg(base)
13022 return true
13023 }
13024 }
13025 func rewriteValueARM_OpAvg32u(v *Value) bool {
13026 v_1 := v.Args[1]
13027 v_0 := v.Args[0]
13028 b := v.Block
13029
13030
13031 for {
13032 t := v.Type
13033 x := v_0
13034 y := v_1
13035 v.reset(OpARMADD)
13036 v0 := b.NewValue0(v.Pos, OpARMSRLconst, t)
13037 v0.AuxInt = int32ToAuxInt(1)
13038 v1 := b.NewValue0(v.Pos, OpARMSUB, t)
13039 v1.AddArg2(x, y)
13040 v0.AddArg(v1)
13041 v.AddArg2(v0, y)
13042 return true
13043 }
13044 }
13045 func rewriteValueARM_OpBitLen32(v *Value) bool {
13046 v_0 := v.Args[0]
13047 b := v.Block
13048
13049
13050 for {
13051 t := v.Type
13052 x := v_0
13053 v.reset(OpARMRSBconst)
13054 v.AuxInt = int32ToAuxInt(32)
13055 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13056 v0.AddArg(x)
13057 v.AddArg(v0)
13058 return true
13059 }
13060 }
13061 func rewriteValueARM_OpBswap32(v *Value) bool {
13062 v_0 := v.Args[0]
13063 b := v.Block
13064
13065
13066
13067 for {
13068 t := v.Type
13069 x := v_0
13070 if !(buildcfg.GOARM.Version == 5) {
13071 break
13072 }
13073 v.reset(OpARMXOR)
13074 v.Type = t
13075 v0 := b.NewValue0(v.Pos, OpARMSRLconst, t)
13076 v0.AuxInt = int32ToAuxInt(8)
13077 v1 := b.NewValue0(v.Pos, OpARMBICconst, t)
13078 v1.AuxInt = int32ToAuxInt(0xff0000)
13079 v2 := b.NewValue0(v.Pos, OpARMXOR, t)
13080 v3 := b.NewValue0(v.Pos, OpARMSRRconst, t)
13081 v3.AuxInt = int32ToAuxInt(16)
13082 v3.AddArg(x)
13083 v2.AddArg2(x, v3)
13084 v1.AddArg(v2)
13085 v0.AddArg(v1)
13086 v4 := b.NewValue0(v.Pos, OpARMSRRconst, t)
13087 v4.AuxInt = int32ToAuxInt(8)
13088 v4.AddArg(x)
13089 v.AddArg2(v0, v4)
13090 return true
13091 }
13092
13093
13094
13095 for {
13096 x := v_0
13097 if !(buildcfg.GOARM.Version >= 6) {
13098 break
13099 }
13100 v.reset(OpARMREV)
13101 v.AddArg(x)
13102 return true
13103 }
13104 return false
13105 }
13106 func rewriteValueARM_OpConst16(v *Value) bool {
13107
13108
13109 for {
13110 val := auxIntToInt16(v.AuxInt)
13111 v.reset(OpARMMOVWconst)
13112 v.AuxInt = int32ToAuxInt(int32(val))
13113 return true
13114 }
13115 }
13116 func rewriteValueARM_OpConst32(v *Value) bool {
13117
13118
13119 for {
13120 val := auxIntToInt32(v.AuxInt)
13121 v.reset(OpARMMOVWconst)
13122 v.AuxInt = int32ToAuxInt(int32(val))
13123 return true
13124 }
13125 }
13126 func rewriteValueARM_OpConst32F(v *Value) bool {
13127
13128
13129 for {
13130 val := auxIntToFloat32(v.AuxInt)
13131 v.reset(OpARMMOVFconst)
13132 v.AuxInt = float64ToAuxInt(float64(val))
13133 return true
13134 }
13135 }
13136 func rewriteValueARM_OpConst64F(v *Value) bool {
13137
13138
13139 for {
13140 val := auxIntToFloat64(v.AuxInt)
13141 v.reset(OpARMMOVDconst)
13142 v.AuxInt = float64ToAuxInt(float64(val))
13143 return true
13144 }
13145 }
13146 func rewriteValueARM_OpConst8(v *Value) bool {
13147
13148
13149 for {
13150 val := auxIntToInt8(v.AuxInt)
13151 v.reset(OpARMMOVWconst)
13152 v.AuxInt = int32ToAuxInt(int32(val))
13153 return true
13154 }
13155 }
13156 func rewriteValueARM_OpConstBool(v *Value) bool {
13157
13158
13159 for {
13160 t := auxIntToBool(v.AuxInt)
13161 v.reset(OpARMMOVWconst)
13162 v.AuxInt = int32ToAuxInt(b2i32(t))
13163 return true
13164 }
13165 }
13166 func rewriteValueARM_OpConstNil(v *Value) bool {
13167
13168
13169 for {
13170 v.reset(OpARMMOVWconst)
13171 v.AuxInt = int32ToAuxInt(0)
13172 return true
13173 }
13174 }
13175 func rewriteValueARM_OpCtz16(v *Value) bool {
13176 v_0 := v.Args[0]
13177 b := v.Block
13178 typ := &b.Func.Config.Types
13179
13180
13181
13182 for {
13183 t := v.Type
13184 x := v_0
13185 if !(buildcfg.GOARM.Version <= 6) {
13186 break
13187 }
13188 v.reset(OpARMRSBconst)
13189 v.AuxInt = int32ToAuxInt(32)
13190 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13191 v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32)
13192 v1.AuxInt = int32ToAuxInt(1)
13193 v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32)
13194 v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13195 v3.AuxInt = int32ToAuxInt(0x10000)
13196 v3.AddArg(x)
13197 v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
13198 v4.AuxInt = int32ToAuxInt(0)
13199 v4.AddArg(v3)
13200 v2.AddArg2(v3, v4)
13201 v1.AddArg(v2)
13202 v0.AddArg(v1)
13203 v.AddArg(v0)
13204 return true
13205 }
13206
13207
13208
13209 for {
13210 t := v.Type
13211 x := v_0
13212 if !(buildcfg.GOARM.Version == 7) {
13213 break
13214 }
13215 v.reset(OpARMCLZ)
13216 v.Type = t
13217 v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32)
13218 v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13219 v1.AuxInt = int32ToAuxInt(0x10000)
13220 v1.AddArg(x)
13221 v0.AddArg(v1)
13222 v.AddArg(v0)
13223 return true
13224 }
13225 return false
13226 }
13227 func rewriteValueARM_OpCtz32(v *Value) bool {
13228 v_0 := v.Args[0]
13229 b := v.Block
13230
13231
13232
13233 for {
13234 t := v.Type
13235 x := v_0
13236 if !(buildcfg.GOARM.Version <= 6) {
13237 break
13238 }
13239 v.reset(OpARMRSBconst)
13240 v.AuxInt = int32ToAuxInt(32)
13241 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13242 v1 := b.NewValue0(v.Pos, OpARMSUBconst, t)
13243 v1.AuxInt = int32ToAuxInt(1)
13244 v2 := b.NewValue0(v.Pos, OpARMAND, t)
13245 v3 := b.NewValue0(v.Pos, OpARMRSBconst, t)
13246 v3.AuxInt = int32ToAuxInt(0)
13247 v3.AddArg(x)
13248 v2.AddArg2(x, v3)
13249 v1.AddArg(v2)
13250 v0.AddArg(v1)
13251 v.AddArg(v0)
13252 return true
13253 }
13254
13255
13256
13257 for {
13258 t := v.Type
13259 x := v_0
13260 if !(buildcfg.GOARM.Version == 7) {
13261 break
13262 }
13263 v.reset(OpARMCLZ)
13264 v.Type = t
13265 v0 := b.NewValue0(v.Pos, OpARMRBIT, t)
13266 v0.AddArg(x)
13267 v.AddArg(v0)
13268 return true
13269 }
13270 return false
13271 }
13272 func rewriteValueARM_OpCtz8(v *Value) bool {
13273 v_0 := v.Args[0]
13274 b := v.Block
13275 typ := &b.Func.Config.Types
13276
13277
13278
13279 for {
13280 t := v.Type
13281 x := v_0
13282 if !(buildcfg.GOARM.Version <= 6) {
13283 break
13284 }
13285 v.reset(OpARMRSBconst)
13286 v.AuxInt = int32ToAuxInt(32)
13287 v0 := b.NewValue0(v.Pos, OpARMCLZ, t)
13288 v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32)
13289 v1.AuxInt = int32ToAuxInt(1)
13290 v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32)
13291 v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13292 v3.AuxInt = int32ToAuxInt(0x100)
13293 v3.AddArg(x)
13294 v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
13295 v4.AuxInt = int32ToAuxInt(0)
13296 v4.AddArg(v3)
13297 v2.AddArg2(v3, v4)
13298 v1.AddArg(v2)
13299 v0.AddArg(v1)
13300 v.AddArg(v0)
13301 return true
13302 }
13303
13304
13305
13306 for {
13307 t := v.Type
13308 x := v_0
13309 if !(buildcfg.GOARM.Version == 7) {
13310 break
13311 }
13312 v.reset(OpARMCLZ)
13313 v.Type = t
13314 v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32)
13315 v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
13316 v1.AuxInt = int32ToAuxInt(0x100)
13317 v1.AddArg(x)
13318 v0.AddArg(v1)
13319 v.AddArg(v0)
13320 return true
13321 }
13322 return false
13323 }
13324 func rewriteValueARM_OpDiv16(v *Value) bool {
13325 v_1 := v.Args[1]
13326 v_0 := v.Args[0]
13327 b := v.Block
13328 typ := &b.Func.Config.Types
13329
13330
13331 for {
13332 x := v_0
13333 y := v_1
13334 v.reset(OpDiv32)
13335 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13336 v0.AddArg(x)
13337 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13338 v1.AddArg(y)
13339 v.AddArg2(v0, v1)
13340 return true
13341 }
13342 }
13343 func rewriteValueARM_OpDiv16u(v *Value) bool {
13344 v_1 := v.Args[1]
13345 v_0 := v.Args[0]
13346 b := v.Block
13347 typ := &b.Func.Config.Types
13348
13349
13350 for {
13351 x := v_0
13352 y := v_1
13353 v.reset(OpDiv32u)
13354 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13355 v0.AddArg(x)
13356 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13357 v1.AddArg(y)
13358 v.AddArg2(v0, v1)
13359 return true
13360 }
13361 }
13362 func rewriteValueARM_OpDiv32(v *Value) bool {
13363 v_1 := v.Args[1]
13364 v_0 := v.Args[0]
13365 b := v.Block
13366 typ := &b.Func.Config.Types
13367
13368
13369 for {
13370 x := v_0
13371 y := v_1
13372 v.reset(OpARMSUB)
13373 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13374 v1 := b.NewValue0(v.Pos, OpSelect0, typ.UInt32)
13375 v2 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13376 v3 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
13377 v4 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13378 v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13379 v5.AddArg(x)
13380 v4.AddArg2(x, v5)
13381 v3.AddArg2(v4, v5)
13382 v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
13383 v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13384 v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13385 v8.AddArg(y)
13386 v7.AddArg2(y, v8)
13387 v6.AddArg2(v7, v8)
13388 v2.AddArg2(v3, v6)
13389 v1.AddArg(v2)
13390 v9 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
13391 v10 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
13392 v10.AddArg2(x, y)
13393 v9.AddArg(v10)
13394 v0.AddArg2(v1, v9)
13395 v.AddArg2(v0, v9)
13396 return true
13397 }
13398 }
13399 func rewriteValueARM_OpDiv32u(v *Value) bool {
13400 v_1 := v.Args[1]
13401 v_0 := v.Args[0]
13402 b := v.Block
13403 typ := &b.Func.Config.Types
13404
13405
13406 for {
13407 x := v_0
13408 y := v_1
13409 v.reset(OpSelect0)
13410 v.Type = typ.UInt32
13411 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
13412 v0.AddArg2(x, y)
13413 v.AddArg(v0)
13414 return true
13415 }
13416 }
13417 func rewriteValueARM_OpDiv8(v *Value) bool {
13418 v_1 := v.Args[1]
13419 v_0 := v.Args[0]
13420 b := v.Block
13421 typ := &b.Func.Config.Types
13422
13423
13424 for {
13425 x := v_0
13426 y := v_1
13427 v.reset(OpDiv32)
13428 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13429 v0.AddArg(x)
13430 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13431 v1.AddArg(y)
13432 v.AddArg2(v0, v1)
13433 return true
13434 }
13435 }
13436 func rewriteValueARM_OpDiv8u(v *Value) bool {
13437 v_1 := v.Args[1]
13438 v_0 := v.Args[0]
13439 b := v.Block
13440 typ := &b.Func.Config.Types
13441
13442
13443 for {
13444 x := v_0
13445 y := v_1
13446 v.reset(OpDiv32u)
13447 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13448 v0.AddArg(x)
13449 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13450 v1.AddArg(y)
13451 v.AddArg2(v0, v1)
13452 return true
13453 }
13454 }
13455 func rewriteValueARM_OpEq16(v *Value) bool {
13456 v_1 := v.Args[1]
13457 v_0 := v.Args[0]
13458 b := v.Block
13459 typ := &b.Func.Config.Types
13460
13461
13462 for {
13463 x := v_0
13464 y := v_1
13465 v.reset(OpARMEqual)
13466 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13467 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13468 v1.AddArg(x)
13469 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13470 v2.AddArg(y)
13471 v0.AddArg2(v1, v2)
13472 v.AddArg(v0)
13473 return true
13474 }
13475 }
13476 func rewriteValueARM_OpEq32(v *Value) bool {
13477 v_1 := v.Args[1]
13478 v_0 := v.Args[0]
13479 b := v.Block
13480
13481
13482 for {
13483 x := v_0
13484 y := v_1
13485 v.reset(OpARMEqual)
13486 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13487 v0.AddArg2(x, y)
13488 v.AddArg(v0)
13489 return true
13490 }
13491 }
13492 func rewriteValueARM_OpEq32F(v *Value) bool {
13493 v_1 := v.Args[1]
13494 v_0 := v.Args[0]
13495 b := v.Block
13496
13497
13498 for {
13499 x := v_0
13500 y := v_1
13501 v.reset(OpARMEqual)
13502 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13503 v0.AddArg2(x, y)
13504 v.AddArg(v0)
13505 return true
13506 }
13507 }
13508 func rewriteValueARM_OpEq64F(v *Value) bool {
13509 v_1 := v.Args[1]
13510 v_0 := v.Args[0]
13511 b := v.Block
13512
13513
13514 for {
13515 x := v_0
13516 y := v_1
13517 v.reset(OpARMEqual)
13518 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13519 v0.AddArg2(x, y)
13520 v.AddArg(v0)
13521 return true
13522 }
13523 }
13524 func rewriteValueARM_OpEq8(v *Value) bool {
13525 v_1 := v.Args[1]
13526 v_0 := v.Args[0]
13527 b := v.Block
13528 typ := &b.Func.Config.Types
13529
13530
13531 for {
13532 x := v_0
13533 y := v_1
13534 v.reset(OpARMEqual)
13535 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13536 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13537 v1.AddArg(x)
13538 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13539 v2.AddArg(y)
13540 v0.AddArg2(v1, v2)
13541 v.AddArg(v0)
13542 return true
13543 }
13544 }
13545 func rewriteValueARM_OpEqB(v *Value) bool {
13546 v_1 := v.Args[1]
13547 v_0 := v.Args[0]
13548 b := v.Block
13549 typ := &b.Func.Config.Types
13550
13551
13552 for {
13553 x := v_0
13554 y := v_1
13555 v.reset(OpARMXORconst)
13556 v.AuxInt = int32ToAuxInt(1)
13557 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.Bool)
13558 v0.AddArg2(x, y)
13559 v.AddArg(v0)
13560 return true
13561 }
13562 }
13563 func rewriteValueARM_OpEqPtr(v *Value) bool {
13564 v_1 := v.Args[1]
13565 v_0 := v.Args[0]
13566 b := v.Block
13567
13568
13569 for {
13570 x := v_0
13571 y := v_1
13572 v.reset(OpARMEqual)
13573 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13574 v0.AddArg2(x, y)
13575 v.AddArg(v0)
13576 return true
13577 }
13578 }
13579 func rewriteValueARM_OpFMA(v *Value) bool {
13580 v_2 := v.Args[2]
13581 v_1 := v.Args[1]
13582 v_0 := v.Args[0]
13583
13584
13585 for {
13586 x := v_0
13587 y := v_1
13588 z := v_2
13589 v.reset(OpARMFMULAD)
13590 v.AddArg3(z, x, y)
13591 return true
13592 }
13593 }
13594 func rewriteValueARM_OpIsInBounds(v *Value) bool {
13595 v_1 := v.Args[1]
13596 v_0 := v.Args[0]
13597 b := v.Block
13598
13599
13600 for {
13601 idx := v_0
13602 len := v_1
13603 v.reset(OpARMLessThanU)
13604 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13605 v0.AddArg2(idx, len)
13606 v.AddArg(v0)
13607 return true
13608 }
13609 }
13610 func rewriteValueARM_OpIsNonNil(v *Value) bool {
13611 v_0 := v.Args[0]
13612 b := v.Block
13613
13614
13615 for {
13616 ptr := v_0
13617 v.reset(OpARMNotEqual)
13618 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
13619 v0.AuxInt = int32ToAuxInt(0)
13620 v0.AddArg(ptr)
13621 v.AddArg(v0)
13622 return true
13623 }
13624 }
13625 func rewriteValueARM_OpIsSliceInBounds(v *Value) bool {
13626 v_1 := v.Args[1]
13627 v_0 := v.Args[0]
13628 b := v.Block
13629
13630
13631 for {
13632 idx := v_0
13633 len := v_1
13634 v.reset(OpARMLessEqualU)
13635 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13636 v0.AddArg2(idx, len)
13637 v.AddArg(v0)
13638 return true
13639 }
13640 }
13641 func rewriteValueARM_OpLeq16(v *Value) bool {
13642 v_1 := v.Args[1]
13643 v_0 := v.Args[0]
13644 b := v.Block
13645 typ := &b.Func.Config.Types
13646
13647
13648 for {
13649 x := v_0
13650 y := v_1
13651 v.reset(OpARMLessEqual)
13652 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13653 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13654 v1.AddArg(x)
13655 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13656 v2.AddArg(y)
13657 v0.AddArg2(v1, v2)
13658 v.AddArg(v0)
13659 return true
13660 }
13661 }
13662 func rewriteValueARM_OpLeq16U(v *Value) bool {
13663 v_1 := v.Args[1]
13664 v_0 := v.Args[0]
13665 b := v.Block
13666 typ := &b.Func.Config.Types
13667
13668
13669 for {
13670 x := v_0
13671 y := v_1
13672 v.reset(OpARMLessEqualU)
13673 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13674 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13675 v1.AddArg(x)
13676 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13677 v2.AddArg(y)
13678 v0.AddArg2(v1, v2)
13679 v.AddArg(v0)
13680 return true
13681 }
13682 }
13683 func rewriteValueARM_OpLeq32(v *Value) bool {
13684 v_1 := v.Args[1]
13685 v_0 := v.Args[0]
13686 b := v.Block
13687
13688
13689 for {
13690 x := v_0
13691 y := v_1
13692 v.reset(OpARMLessEqual)
13693 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13694 v0.AddArg2(x, y)
13695 v.AddArg(v0)
13696 return true
13697 }
13698 }
13699 func rewriteValueARM_OpLeq32F(v *Value) bool {
13700 v_1 := v.Args[1]
13701 v_0 := v.Args[0]
13702 b := v.Block
13703
13704
13705 for {
13706 x := v_0
13707 y := v_1
13708 v.reset(OpARMGreaterEqual)
13709 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13710 v0.AddArg2(y, x)
13711 v.AddArg(v0)
13712 return true
13713 }
13714 }
13715 func rewriteValueARM_OpLeq32U(v *Value) bool {
13716 v_1 := v.Args[1]
13717 v_0 := v.Args[0]
13718 b := v.Block
13719
13720
13721 for {
13722 x := v_0
13723 y := v_1
13724 v.reset(OpARMLessEqualU)
13725 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13726 v0.AddArg2(x, y)
13727 v.AddArg(v0)
13728 return true
13729 }
13730 }
13731 func rewriteValueARM_OpLeq64F(v *Value) bool {
13732 v_1 := v.Args[1]
13733 v_0 := v.Args[0]
13734 b := v.Block
13735
13736
13737 for {
13738 x := v_0
13739 y := v_1
13740 v.reset(OpARMGreaterEqual)
13741 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13742 v0.AddArg2(y, x)
13743 v.AddArg(v0)
13744 return true
13745 }
13746 }
13747 func rewriteValueARM_OpLeq8(v *Value) bool {
13748 v_1 := v.Args[1]
13749 v_0 := v.Args[0]
13750 b := v.Block
13751 typ := &b.Func.Config.Types
13752
13753
13754 for {
13755 x := v_0
13756 y := v_1
13757 v.reset(OpARMLessEqual)
13758 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13759 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13760 v1.AddArg(x)
13761 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13762 v2.AddArg(y)
13763 v0.AddArg2(v1, v2)
13764 v.AddArg(v0)
13765 return true
13766 }
13767 }
13768 func rewriteValueARM_OpLeq8U(v *Value) bool {
13769 v_1 := v.Args[1]
13770 v_0 := v.Args[0]
13771 b := v.Block
13772 typ := &b.Func.Config.Types
13773
13774
13775 for {
13776 x := v_0
13777 y := v_1
13778 v.reset(OpARMLessEqualU)
13779 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13780 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13781 v1.AddArg(x)
13782 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13783 v2.AddArg(y)
13784 v0.AddArg2(v1, v2)
13785 v.AddArg(v0)
13786 return true
13787 }
13788 }
13789 func rewriteValueARM_OpLess16(v *Value) bool {
13790 v_1 := v.Args[1]
13791 v_0 := v.Args[0]
13792 b := v.Block
13793 typ := &b.Func.Config.Types
13794
13795
13796 for {
13797 x := v_0
13798 y := v_1
13799 v.reset(OpARMLessThan)
13800 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13801 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13802 v1.AddArg(x)
13803 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
13804 v2.AddArg(y)
13805 v0.AddArg2(v1, v2)
13806 v.AddArg(v0)
13807 return true
13808 }
13809 }
13810 func rewriteValueARM_OpLess16U(v *Value) bool {
13811 v_1 := v.Args[1]
13812 v_0 := v.Args[0]
13813 b := v.Block
13814 typ := &b.Func.Config.Types
13815
13816
13817 for {
13818 x := v_0
13819 y := v_1
13820 v.reset(OpARMLessThanU)
13821 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13822 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13823 v1.AddArg(x)
13824 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
13825 v2.AddArg(y)
13826 v0.AddArg2(v1, v2)
13827 v.AddArg(v0)
13828 return true
13829 }
13830 }
13831 func rewriteValueARM_OpLess32(v *Value) bool {
13832 v_1 := v.Args[1]
13833 v_0 := v.Args[0]
13834 b := v.Block
13835
13836
13837 for {
13838 x := v_0
13839 y := v_1
13840 v.reset(OpARMLessThan)
13841 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13842 v0.AddArg2(x, y)
13843 v.AddArg(v0)
13844 return true
13845 }
13846 }
13847 func rewriteValueARM_OpLess32F(v *Value) bool {
13848 v_1 := v.Args[1]
13849 v_0 := v.Args[0]
13850 b := v.Block
13851
13852
13853 for {
13854 x := v_0
13855 y := v_1
13856 v.reset(OpARMGreaterThan)
13857 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
13858 v0.AddArg2(y, x)
13859 v.AddArg(v0)
13860 return true
13861 }
13862 }
13863 func rewriteValueARM_OpLess32U(v *Value) bool {
13864 v_1 := v.Args[1]
13865 v_0 := v.Args[0]
13866 b := v.Block
13867
13868
13869 for {
13870 x := v_0
13871 y := v_1
13872 v.reset(OpARMLessThanU)
13873 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13874 v0.AddArg2(x, y)
13875 v.AddArg(v0)
13876 return true
13877 }
13878 }
13879 func rewriteValueARM_OpLess64F(v *Value) bool {
13880 v_1 := v.Args[1]
13881 v_0 := v.Args[0]
13882 b := v.Block
13883
13884
13885 for {
13886 x := v_0
13887 y := v_1
13888 v.reset(OpARMGreaterThan)
13889 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
13890 v0.AddArg2(y, x)
13891 v.AddArg(v0)
13892 return true
13893 }
13894 }
13895 func rewriteValueARM_OpLess8(v *Value) bool {
13896 v_1 := v.Args[1]
13897 v_0 := v.Args[0]
13898 b := v.Block
13899 typ := &b.Func.Config.Types
13900
13901
13902 for {
13903 x := v_0
13904 y := v_1
13905 v.reset(OpARMLessThan)
13906 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13907 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13908 v1.AddArg(x)
13909 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
13910 v2.AddArg(y)
13911 v0.AddArg2(v1, v2)
13912 v.AddArg(v0)
13913 return true
13914 }
13915 }
13916 func rewriteValueARM_OpLess8U(v *Value) bool {
13917 v_1 := v.Args[1]
13918 v_0 := v.Args[0]
13919 b := v.Block
13920 typ := &b.Func.Config.Types
13921
13922
13923 for {
13924 x := v_0
13925 y := v_1
13926 v.reset(OpARMLessThanU)
13927 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
13928 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13929 v1.AddArg(x)
13930 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
13931 v2.AddArg(y)
13932 v0.AddArg2(v1, v2)
13933 v.AddArg(v0)
13934 return true
13935 }
13936 }
13937 func rewriteValueARM_OpLoad(v *Value) bool {
13938 v_1 := v.Args[1]
13939 v_0 := v.Args[0]
13940
13941
13942
13943 for {
13944 t := v.Type
13945 ptr := v_0
13946 mem := v_1
13947 if !(t.IsBoolean()) {
13948 break
13949 }
13950 v.reset(OpARMMOVBUload)
13951 v.AddArg2(ptr, mem)
13952 return true
13953 }
13954
13955
13956
13957 for {
13958 t := v.Type
13959 ptr := v_0
13960 mem := v_1
13961 if !(is8BitInt(t) && t.IsSigned()) {
13962 break
13963 }
13964 v.reset(OpARMMOVBload)
13965 v.AddArg2(ptr, mem)
13966 return true
13967 }
13968
13969
13970
13971 for {
13972 t := v.Type
13973 ptr := v_0
13974 mem := v_1
13975 if !(is8BitInt(t) && !t.IsSigned()) {
13976 break
13977 }
13978 v.reset(OpARMMOVBUload)
13979 v.AddArg2(ptr, mem)
13980 return true
13981 }
13982
13983
13984
13985 for {
13986 t := v.Type
13987 ptr := v_0
13988 mem := v_1
13989 if !(is16BitInt(t) && t.IsSigned()) {
13990 break
13991 }
13992 v.reset(OpARMMOVHload)
13993 v.AddArg2(ptr, mem)
13994 return true
13995 }
13996
13997
13998
13999 for {
14000 t := v.Type
14001 ptr := v_0
14002 mem := v_1
14003 if !(is16BitInt(t) && !t.IsSigned()) {
14004 break
14005 }
14006 v.reset(OpARMMOVHUload)
14007 v.AddArg2(ptr, mem)
14008 return true
14009 }
14010
14011
14012
14013 for {
14014 t := v.Type
14015 ptr := v_0
14016 mem := v_1
14017 if !(is32BitInt(t) || isPtr(t)) {
14018 break
14019 }
14020 v.reset(OpARMMOVWload)
14021 v.AddArg2(ptr, mem)
14022 return true
14023 }
14024
14025
14026
14027 for {
14028 t := v.Type
14029 ptr := v_0
14030 mem := v_1
14031 if !(is32BitFloat(t)) {
14032 break
14033 }
14034 v.reset(OpARMMOVFload)
14035 v.AddArg2(ptr, mem)
14036 return true
14037 }
14038
14039
14040
14041 for {
14042 t := v.Type
14043 ptr := v_0
14044 mem := v_1
14045 if !(is64BitFloat(t)) {
14046 break
14047 }
14048 v.reset(OpARMMOVDload)
14049 v.AddArg2(ptr, mem)
14050 return true
14051 }
14052 return false
14053 }
14054 func rewriteValueARM_OpLocalAddr(v *Value) bool {
14055 v_1 := v.Args[1]
14056 v_0 := v.Args[0]
14057 b := v.Block
14058 typ := &b.Func.Config.Types
14059
14060
14061
14062 for {
14063 t := v.Type
14064 sym := auxToSym(v.Aux)
14065 base := v_0
14066 mem := v_1
14067 if !(t.Elem().HasPointers()) {
14068 break
14069 }
14070 v.reset(OpARMMOVWaddr)
14071 v.Aux = symToAux(sym)
14072 v0 := b.NewValue0(v.Pos, OpSPanchored, typ.Uintptr)
14073 v0.AddArg2(base, mem)
14074 v.AddArg(v0)
14075 return true
14076 }
14077
14078
14079
14080 for {
14081 t := v.Type
14082 sym := auxToSym(v.Aux)
14083 base := v_0
14084 if !(!t.Elem().HasPointers()) {
14085 break
14086 }
14087 v.reset(OpARMMOVWaddr)
14088 v.Aux = symToAux(sym)
14089 v.AddArg(base)
14090 return true
14091 }
14092 return false
14093 }
14094 func rewriteValueARM_OpLsh16x16(v *Value) bool {
14095 v_1 := v.Args[1]
14096 v_0 := v.Args[0]
14097 b := v.Block
14098 typ := &b.Func.Config.Types
14099
14100
14101 for {
14102 x := v_0
14103 y := v_1
14104 v.reset(OpARMCMOVWHSconst)
14105 v.AuxInt = int32ToAuxInt(0)
14106 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14107 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14108 v1.AddArg(y)
14109 v0.AddArg2(x, v1)
14110 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14111 v2.AuxInt = int32ToAuxInt(256)
14112 v2.AddArg(v1)
14113 v.AddArg2(v0, v2)
14114 return true
14115 }
14116 }
14117 func rewriteValueARM_OpLsh16x32(v *Value) bool {
14118 v_1 := v.Args[1]
14119 v_0 := v.Args[0]
14120 b := v.Block
14121
14122
14123 for {
14124 x := v_0
14125 y := v_1
14126 v.reset(OpARMCMOVWHSconst)
14127 v.AuxInt = int32ToAuxInt(0)
14128 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14129 v0.AddArg2(x, y)
14130 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14131 v1.AuxInt = int32ToAuxInt(256)
14132 v1.AddArg(y)
14133 v.AddArg2(v0, v1)
14134 return true
14135 }
14136 }
14137 func rewriteValueARM_OpLsh16x64(v *Value) bool {
14138 v_1 := v.Args[1]
14139 v_0 := v.Args[0]
14140
14141
14142
14143 for {
14144 x := v_0
14145 if v_1.Op != OpConst64 {
14146 break
14147 }
14148 c := auxIntToInt64(v_1.AuxInt)
14149 if !(uint64(c) < 16) {
14150 break
14151 }
14152 v.reset(OpARMSLLconst)
14153 v.AuxInt = int32ToAuxInt(int32(c))
14154 v.AddArg(x)
14155 return true
14156 }
14157
14158
14159
14160 for {
14161 if v_1.Op != OpConst64 {
14162 break
14163 }
14164 c := auxIntToInt64(v_1.AuxInt)
14165 if !(uint64(c) >= 16) {
14166 break
14167 }
14168 v.reset(OpConst16)
14169 v.AuxInt = int16ToAuxInt(0)
14170 return true
14171 }
14172 return false
14173 }
14174 func rewriteValueARM_OpLsh16x8(v *Value) bool {
14175 v_1 := v.Args[1]
14176 v_0 := v.Args[0]
14177 b := v.Block
14178 typ := &b.Func.Config.Types
14179
14180
14181 for {
14182 x := v_0
14183 y := v_1
14184 v.reset(OpARMSLL)
14185 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14186 v0.AddArg(y)
14187 v.AddArg2(x, v0)
14188 return true
14189 }
14190 }
14191 func rewriteValueARM_OpLsh32x16(v *Value) bool {
14192 v_1 := v.Args[1]
14193 v_0 := v.Args[0]
14194 b := v.Block
14195 typ := &b.Func.Config.Types
14196
14197
14198 for {
14199 x := v_0
14200 y := v_1
14201 v.reset(OpARMCMOVWHSconst)
14202 v.AuxInt = int32ToAuxInt(0)
14203 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14204 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14205 v1.AddArg(y)
14206 v0.AddArg2(x, v1)
14207 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14208 v2.AuxInt = int32ToAuxInt(256)
14209 v2.AddArg(v1)
14210 v.AddArg2(v0, v2)
14211 return true
14212 }
14213 }
14214 func rewriteValueARM_OpLsh32x32(v *Value) bool {
14215 v_1 := v.Args[1]
14216 v_0 := v.Args[0]
14217 b := v.Block
14218
14219
14220 for {
14221 x := v_0
14222 y := v_1
14223 v.reset(OpARMCMOVWHSconst)
14224 v.AuxInt = int32ToAuxInt(0)
14225 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14226 v0.AddArg2(x, y)
14227 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14228 v1.AuxInt = int32ToAuxInt(256)
14229 v1.AddArg(y)
14230 v.AddArg2(v0, v1)
14231 return true
14232 }
14233 }
14234 func rewriteValueARM_OpLsh32x64(v *Value) bool {
14235 v_1 := v.Args[1]
14236 v_0 := v.Args[0]
14237
14238
14239
14240 for {
14241 x := v_0
14242 if v_1.Op != OpConst64 {
14243 break
14244 }
14245 c := auxIntToInt64(v_1.AuxInt)
14246 if !(uint64(c) < 32) {
14247 break
14248 }
14249 v.reset(OpARMSLLconst)
14250 v.AuxInt = int32ToAuxInt(int32(c))
14251 v.AddArg(x)
14252 return true
14253 }
14254
14255
14256
14257 for {
14258 if v_1.Op != OpConst64 {
14259 break
14260 }
14261 c := auxIntToInt64(v_1.AuxInt)
14262 if !(uint64(c) >= 32) {
14263 break
14264 }
14265 v.reset(OpConst32)
14266 v.AuxInt = int32ToAuxInt(0)
14267 return true
14268 }
14269 return false
14270 }
14271 func rewriteValueARM_OpLsh32x8(v *Value) bool {
14272 v_1 := v.Args[1]
14273 v_0 := v.Args[0]
14274 b := v.Block
14275 typ := &b.Func.Config.Types
14276
14277
14278 for {
14279 x := v_0
14280 y := v_1
14281 v.reset(OpARMSLL)
14282 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14283 v0.AddArg(y)
14284 v.AddArg2(x, v0)
14285 return true
14286 }
14287 }
14288 func rewriteValueARM_OpLsh8x16(v *Value) bool {
14289 v_1 := v.Args[1]
14290 v_0 := v.Args[0]
14291 b := v.Block
14292 typ := &b.Func.Config.Types
14293
14294
14295 for {
14296 x := v_0
14297 y := v_1
14298 v.reset(OpARMCMOVWHSconst)
14299 v.AuxInt = int32ToAuxInt(0)
14300 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14301 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14302 v1.AddArg(y)
14303 v0.AddArg2(x, v1)
14304 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14305 v2.AuxInt = int32ToAuxInt(256)
14306 v2.AddArg(v1)
14307 v.AddArg2(v0, v2)
14308 return true
14309 }
14310 }
14311 func rewriteValueARM_OpLsh8x32(v *Value) bool {
14312 v_1 := v.Args[1]
14313 v_0 := v.Args[0]
14314 b := v.Block
14315
14316
14317 for {
14318 x := v_0
14319 y := v_1
14320 v.reset(OpARMCMOVWHSconst)
14321 v.AuxInt = int32ToAuxInt(0)
14322 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type)
14323 v0.AddArg2(x, y)
14324 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
14325 v1.AuxInt = int32ToAuxInt(256)
14326 v1.AddArg(y)
14327 v.AddArg2(v0, v1)
14328 return true
14329 }
14330 }
14331 func rewriteValueARM_OpLsh8x64(v *Value) bool {
14332 v_1 := v.Args[1]
14333 v_0 := v.Args[0]
14334
14335
14336
14337 for {
14338 x := v_0
14339 if v_1.Op != OpConst64 {
14340 break
14341 }
14342 c := auxIntToInt64(v_1.AuxInt)
14343 if !(uint64(c) < 8) {
14344 break
14345 }
14346 v.reset(OpARMSLLconst)
14347 v.AuxInt = int32ToAuxInt(int32(c))
14348 v.AddArg(x)
14349 return true
14350 }
14351
14352
14353
14354 for {
14355 if v_1.Op != OpConst64 {
14356 break
14357 }
14358 c := auxIntToInt64(v_1.AuxInt)
14359 if !(uint64(c) >= 8) {
14360 break
14361 }
14362 v.reset(OpConst8)
14363 v.AuxInt = int8ToAuxInt(0)
14364 return true
14365 }
14366 return false
14367 }
14368 func rewriteValueARM_OpLsh8x8(v *Value) bool {
14369 v_1 := v.Args[1]
14370 v_0 := v.Args[0]
14371 b := v.Block
14372 typ := &b.Func.Config.Types
14373
14374
14375 for {
14376 x := v_0
14377 y := v_1
14378 v.reset(OpARMSLL)
14379 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14380 v0.AddArg(y)
14381 v.AddArg2(x, v0)
14382 return true
14383 }
14384 }
14385 func rewriteValueARM_OpMod16(v *Value) bool {
14386 v_1 := v.Args[1]
14387 v_0 := v.Args[0]
14388 b := v.Block
14389 typ := &b.Func.Config.Types
14390
14391
14392 for {
14393 x := v_0
14394 y := v_1
14395 v.reset(OpMod32)
14396 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
14397 v0.AddArg(x)
14398 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
14399 v1.AddArg(y)
14400 v.AddArg2(v0, v1)
14401 return true
14402 }
14403 }
14404 func rewriteValueARM_OpMod16u(v *Value) bool {
14405 v_1 := v.Args[1]
14406 v_0 := v.Args[0]
14407 b := v.Block
14408 typ := &b.Func.Config.Types
14409
14410
14411 for {
14412 x := v_0
14413 y := v_1
14414 v.reset(OpMod32u)
14415 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14416 v0.AddArg(x)
14417 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14418 v1.AddArg(y)
14419 v.AddArg2(v0, v1)
14420 return true
14421 }
14422 }
14423 func rewriteValueARM_OpMod32(v *Value) bool {
14424 v_1 := v.Args[1]
14425 v_0 := v.Args[0]
14426 b := v.Block
14427 typ := &b.Func.Config.Types
14428
14429
14430 for {
14431 x := v_0
14432 y := v_1
14433 v.reset(OpARMSUB)
14434 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14435 v1 := b.NewValue0(v.Pos, OpSelect1, typ.UInt32)
14436 v2 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14437 v3 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
14438 v4 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14439 v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
14440 v5.AddArg(x)
14441 v4.AddArg2(x, v5)
14442 v3.AddArg2(v4, v5)
14443 v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
14444 v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
14445 v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
14446 v8.AddArg(y)
14447 v7.AddArg2(y, v8)
14448 v6.AddArg2(v7, v8)
14449 v2.AddArg2(v3, v6)
14450 v1.AddArg(v2)
14451 v0.AddArg2(v1, v5)
14452 v.AddArg2(v0, v5)
14453 return true
14454 }
14455 }
14456 func rewriteValueARM_OpMod32u(v *Value) bool {
14457 v_1 := v.Args[1]
14458 v_0 := v.Args[0]
14459 b := v.Block
14460 typ := &b.Func.Config.Types
14461
14462
14463 for {
14464 x := v_0
14465 y := v_1
14466 v.reset(OpSelect1)
14467 v.Type = typ.UInt32
14468 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32))
14469 v0.AddArg2(x, y)
14470 v.AddArg(v0)
14471 return true
14472 }
14473 }
14474 func rewriteValueARM_OpMod8(v *Value) bool {
14475 v_1 := v.Args[1]
14476 v_0 := v.Args[0]
14477 b := v.Block
14478 typ := &b.Func.Config.Types
14479
14480
14481 for {
14482 x := v_0
14483 y := v_1
14484 v.reset(OpMod32)
14485 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14486 v0.AddArg(x)
14487 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
14488 v1.AddArg(y)
14489 v.AddArg2(v0, v1)
14490 return true
14491 }
14492 }
14493 func rewriteValueARM_OpMod8u(v *Value) bool {
14494 v_1 := v.Args[1]
14495 v_0 := v.Args[0]
14496 b := v.Block
14497 typ := &b.Func.Config.Types
14498
14499
14500 for {
14501 x := v_0
14502 y := v_1
14503 v.reset(OpMod32u)
14504 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14505 v0.AddArg(x)
14506 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14507 v1.AddArg(y)
14508 v.AddArg2(v0, v1)
14509 return true
14510 }
14511 }
14512 func rewriteValueARM_OpMove(v *Value) bool {
14513 v_2 := v.Args[2]
14514 v_1 := v.Args[1]
14515 v_0 := v.Args[0]
14516 b := v.Block
14517 config := b.Func.Config
14518 typ := &b.Func.Config.Types
14519
14520
14521 for {
14522 if auxIntToInt64(v.AuxInt) != 0 {
14523 break
14524 }
14525 mem := v_2
14526 v.copyOf(mem)
14527 return true
14528 }
14529
14530
14531 for {
14532 if auxIntToInt64(v.AuxInt) != 1 {
14533 break
14534 }
14535 dst := v_0
14536 src := v_1
14537 mem := v_2
14538 v.reset(OpARMMOVBstore)
14539 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14540 v0.AddArg2(src, mem)
14541 v.AddArg3(dst, v0, mem)
14542 return true
14543 }
14544
14545
14546
14547 for {
14548 if auxIntToInt64(v.AuxInt) != 2 {
14549 break
14550 }
14551 t := auxToType(v.Aux)
14552 dst := v_0
14553 src := v_1
14554 mem := v_2
14555 if !(t.Alignment()%2 == 0) {
14556 break
14557 }
14558 v.reset(OpARMMOVHstore)
14559 v0 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14560 v0.AddArg2(src, mem)
14561 v.AddArg3(dst, v0, mem)
14562 return true
14563 }
14564
14565
14566 for {
14567 if auxIntToInt64(v.AuxInt) != 2 {
14568 break
14569 }
14570 dst := v_0
14571 src := v_1
14572 mem := v_2
14573 v.reset(OpARMMOVBstore)
14574 v.AuxInt = int32ToAuxInt(1)
14575 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14576 v0.AuxInt = int32ToAuxInt(1)
14577 v0.AddArg2(src, mem)
14578 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14579 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14580 v2.AddArg2(src, mem)
14581 v1.AddArg3(dst, v2, mem)
14582 v.AddArg3(dst, v0, v1)
14583 return true
14584 }
14585
14586
14587
14588 for {
14589 if auxIntToInt64(v.AuxInt) != 4 {
14590 break
14591 }
14592 t := auxToType(v.Aux)
14593 dst := v_0
14594 src := v_1
14595 mem := v_2
14596 if !(t.Alignment()%4 == 0) {
14597 break
14598 }
14599 v.reset(OpARMMOVWstore)
14600 v0 := b.NewValue0(v.Pos, OpARMMOVWload, typ.UInt32)
14601 v0.AddArg2(src, mem)
14602 v.AddArg3(dst, v0, mem)
14603 return true
14604 }
14605
14606
14607
14608 for {
14609 if auxIntToInt64(v.AuxInt) != 4 {
14610 break
14611 }
14612 t := auxToType(v.Aux)
14613 dst := v_0
14614 src := v_1
14615 mem := v_2
14616 if !(t.Alignment()%2 == 0) {
14617 break
14618 }
14619 v.reset(OpARMMOVHstore)
14620 v.AuxInt = int32ToAuxInt(2)
14621 v0 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14622 v0.AuxInt = int32ToAuxInt(2)
14623 v0.AddArg2(src, mem)
14624 v1 := b.NewValue0(v.Pos, OpARMMOVHstore, types.TypeMem)
14625 v2 := b.NewValue0(v.Pos, OpARMMOVHUload, typ.UInt16)
14626 v2.AddArg2(src, mem)
14627 v1.AddArg3(dst, v2, mem)
14628 v.AddArg3(dst, v0, v1)
14629 return true
14630 }
14631
14632
14633 for {
14634 if auxIntToInt64(v.AuxInt) != 4 {
14635 break
14636 }
14637 dst := v_0
14638 src := v_1
14639 mem := v_2
14640 v.reset(OpARMMOVBstore)
14641 v.AuxInt = int32ToAuxInt(3)
14642 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14643 v0.AuxInt = int32ToAuxInt(3)
14644 v0.AddArg2(src, mem)
14645 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14646 v1.AuxInt = int32ToAuxInt(2)
14647 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14648 v2.AuxInt = int32ToAuxInt(2)
14649 v2.AddArg2(src, mem)
14650 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14651 v3.AuxInt = int32ToAuxInt(1)
14652 v4 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14653 v4.AuxInt = int32ToAuxInt(1)
14654 v4.AddArg2(src, mem)
14655 v5 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14656 v6 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14657 v6.AddArg2(src, mem)
14658 v5.AddArg3(dst, v6, mem)
14659 v3.AddArg3(dst, v4, v5)
14660 v1.AddArg3(dst, v2, v3)
14661 v.AddArg3(dst, v0, v1)
14662 return true
14663 }
14664
14665
14666 for {
14667 if auxIntToInt64(v.AuxInt) != 3 {
14668 break
14669 }
14670 dst := v_0
14671 src := v_1
14672 mem := v_2
14673 v.reset(OpARMMOVBstore)
14674 v.AuxInt = int32ToAuxInt(2)
14675 v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14676 v0.AuxInt = int32ToAuxInt(2)
14677 v0.AddArg2(src, mem)
14678 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14679 v1.AuxInt = int32ToAuxInt(1)
14680 v2 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14681 v2.AuxInt = int32ToAuxInt(1)
14682 v2.AddArg2(src, mem)
14683 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
14684 v4 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8)
14685 v4.AddArg2(src, mem)
14686 v3.AddArg3(dst, v4, mem)
14687 v1.AddArg3(dst, v2, v3)
14688 v.AddArg3(dst, v0, v1)
14689 return true
14690 }
14691
14692
14693
14694 for {
14695 s := auxIntToInt64(v.AuxInt)
14696 t := auxToType(v.Aux)
14697 dst := v_0
14698 src := v_1
14699 mem := v_2
14700 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0 && !config.noDuffDevice && logLargeCopy(v, s)) {
14701 break
14702 }
14703 v.reset(OpARMDUFFCOPY)
14704 v.AuxInt = int64ToAuxInt(8 * (128 - s/4))
14705 v.AddArg3(dst, src, mem)
14706 return true
14707 }
14708
14709
14710
14711 for {
14712 s := auxIntToInt64(v.AuxInt)
14713 t := auxToType(v.Aux)
14714 dst := v_0
14715 src := v_1
14716 mem := v_2
14717 if !(((s > 512 || config.noDuffDevice) || t.Alignment()%4 != 0) && logLargeCopy(v, s)) {
14718 break
14719 }
14720 v.reset(OpARMLoweredMove)
14721 v.AuxInt = int64ToAuxInt(t.Alignment())
14722 v0 := b.NewValue0(v.Pos, OpARMADDconst, src.Type)
14723 v0.AuxInt = int32ToAuxInt(int32(s - moveSize(t.Alignment(), config)))
14724 v0.AddArg(src)
14725 v.AddArg4(dst, src, v0, mem)
14726 return true
14727 }
14728 return false
14729 }
14730 func rewriteValueARM_OpNeg16(v *Value) bool {
14731 v_0 := v.Args[0]
14732
14733
14734 for {
14735 x := v_0
14736 v.reset(OpARMRSBconst)
14737 v.AuxInt = int32ToAuxInt(0)
14738 v.AddArg(x)
14739 return true
14740 }
14741 }
14742 func rewriteValueARM_OpNeg32(v *Value) bool {
14743 v_0 := v.Args[0]
14744
14745
14746 for {
14747 x := v_0
14748 v.reset(OpARMRSBconst)
14749 v.AuxInt = int32ToAuxInt(0)
14750 v.AddArg(x)
14751 return true
14752 }
14753 }
14754 func rewriteValueARM_OpNeg8(v *Value) bool {
14755 v_0 := v.Args[0]
14756
14757
14758 for {
14759 x := v_0
14760 v.reset(OpARMRSBconst)
14761 v.AuxInt = int32ToAuxInt(0)
14762 v.AddArg(x)
14763 return true
14764 }
14765 }
14766 func rewriteValueARM_OpNeq16(v *Value) bool {
14767 v_1 := v.Args[1]
14768 v_0 := v.Args[0]
14769 b := v.Block
14770 typ := &b.Func.Config.Types
14771
14772
14773 for {
14774 x := v_0
14775 y := v_1
14776 v.reset(OpARMNotEqual)
14777 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14778 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14779 v1.AddArg(x)
14780 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
14781 v2.AddArg(y)
14782 v0.AddArg2(v1, v2)
14783 v.AddArg(v0)
14784 return true
14785 }
14786 }
14787 func rewriteValueARM_OpNeq32(v *Value) bool {
14788 v_1 := v.Args[1]
14789 v_0 := v.Args[0]
14790 b := v.Block
14791
14792
14793 for {
14794 x := v_0
14795 y := v_1
14796 v.reset(OpARMNotEqual)
14797 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14798 v0.AddArg2(x, y)
14799 v.AddArg(v0)
14800 return true
14801 }
14802 }
14803 func rewriteValueARM_OpNeq32F(v *Value) bool {
14804 v_1 := v.Args[1]
14805 v_0 := v.Args[0]
14806 b := v.Block
14807
14808
14809 for {
14810 x := v_0
14811 y := v_1
14812 v.reset(OpARMNotEqual)
14813 v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags)
14814 v0.AddArg2(x, y)
14815 v.AddArg(v0)
14816 return true
14817 }
14818 }
14819 func rewriteValueARM_OpNeq64F(v *Value) bool {
14820 v_1 := v.Args[1]
14821 v_0 := v.Args[0]
14822 b := v.Block
14823
14824
14825 for {
14826 x := v_0
14827 y := v_1
14828 v.reset(OpARMNotEqual)
14829 v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags)
14830 v0.AddArg2(x, y)
14831 v.AddArg(v0)
14832 return true
14833 }
14834 }
14835 func rewriteValueARM_OpNeq8(v *Value) bool {
14836 v_1 := v.Args[1]
14837 v_0 := v.Args[0]
14838 b := v.Block
14839 typ := &b.Func.Config.Types
14840
14841
14842 for {
14843 x := v_0
14844 y := v_1
14845 v.reset(OpARMNotEqual)
14846 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14847 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14848 v1.AddArg(x)
14849 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
14850 v2.AddArg(y)
14851 v0.AddArg2(v1, v2)
14852 v.AddArg(v0)
14853 return true
14854 }
14855 }
14856 func rewriteValueARM_OpNeqPtr(v *Value) bool {
14857 v_1 := v.Args[1]
14858 v_0 := v.Args[0]
14859 b := v.Block
14860
14861
14862 for {
14863 x := v_0
14864 y := v_1
14865 v.reset(OpARMNotEqual)
14866 v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
14867 v0.AddArg2(x, y)
14868 v.AddArg(v0)
14869 return true
14870 }
14871 }
14872 func rewriteValueARM_OpNot(v *Value) bool {
14873 v_0 := v.Args[0]
14874
14875
14876 for {
14877 x := v_0
14878 v.reset(OpARMXORconst)
14879 v.AuxInt = int32ToAuxInt(1)
14880 v.AddArg(x)
14881 return true
14882 }
14883 }
14884 func rewriteValueARM_OpOffPtr(v *Value) bool {
14885 v_0 := v.Args[0]
14886
14887
14888 for {
14889 off := auxIntToInt64(v.AuxInt)
14890 ptr := v_0
14891 if ptr.Op != OpSP {
14892 break
14893 }
14894 v.reset(OpARMMOVWaddr)
14895 v.AuxInt = int32ToAuxInt(int32(off))
14896 v.AddArg(ptr)
14897 return true
14898 }
14899
14900
14901 for {
14902 off := auxIntToInt64(v.AuxInt)
14903 ptr := v_0
14904 v.reset(OpARMADDconst)
14905 v.AuxInt = int32ToAuxInt(int32(off))
14906 v.AddArg(ptr)
14907 return true
14908 }
14909 }
14910 func rewriteValueARM_OpPanicBounds(v *Value) bool {
14911 v_2 := v.Args[2]
14912 v_1 := v.Args[1]
14913 v_0 := v.Args[0]
14914
14915
14916
14917 for {
14918 kind := auxIntToInt64(v.AuxInt)
14919 x := v_0
14920 y := v_1
14921 mem := v_2
14922 if !(boundsABI(kind) == 0) {
14923 break
14924 }
14925 v.reset(OpARMLoweredPanicBoundsA)
14926 v.AuxInt = int64ToAuxInt(kind)
14927 v.AddArg3(x, y, mem)
14928 return true
14929 }
14930
14931
14932
14933 for {
14934 kind := auxIntToInt64(v.AuxInt)
14935 x := v_0
14936 y := v_1
14937 mem := v_2
14938 if !(boundsABI(kind) == 1) {
14939 break
14940 }
14941 v.reset(OpARMLoweredPanicBoundsB)
14942 v.AuxInt = int64ToAuxInt(kind)
14943 v.AddArg3(x, y, mem)
14944 return true
14945 }
14946
14947
14948
14949 for {
14950 kind := auxIntToInt64(v.AuxInt)
14951 x := v_0
14952 y := v_1
14953 mem := v_2
14954 if !(boundsABI(kind) == 2) {
14955 break
14956 }
14957 v.reset(OpARMLoweredPanicBoundsC)
14958 v.AuxInt = int64ToAuxInt(kind)
14959 v.AddArg3(x, y, mem)
14960 return true
14961 }
14962 return false
14963 }
14964 func rewriteValueARM_OpPanicExtend(v *Value) bool {
14965 v_3 := v.Args[3]
14966 v_2 := v.Args[2]
14967 v_1 := v.Args[1]
14968 v_0 := v.Args[0]
14969
14970
14971
14972 for {
14973 kind := auxIntToInt64(v.AuxInt)
14974 hi := v_0
14975 lo := v_1
14976 y := v_2
14977 mem := v_3
14978 if !(boundsABI(kind) == 0) {
14979 break
14980 }
14981 v.reset(OpARMLoweredPanicExtendA)
14982 v.AuxInt = int64ToAuxInt(kind)
14983 v.AddArg4(hi, lo, y, mem)
14984 return true
14985 }
14986
14987
14988
14989 for {
14990 kind := auxIntToInt64(v.AuxInt)
14991 hi := v_0
14992 lo := v_1
14993 y := v_2
14994 mem := v_3
14995 if !(boundsABI(kind) == 1) {
14996 break
14997 }
14998 v.reset(OpARMLoweredPanicExtendB)
14999 v.AuxInt = int64ToAuxInt(kind)
15000 v.AddArg4(hi, lo, y, mem)
15001 return true
15002 }
15003
15004
15005
15006 for {
15007 kind := auxIntToInt64(v.AuxInt)
15008 hi := v_0
15009 lo := v_1
15010 y := v_2
15011 mem := v_3
15012 if !(boundsABI(kind) == 2) {
15013 break
15014 }
15015 v.reset(OpARMLoweredPanicExtendC)
15016 v.AuxInt = int64ToAuxInt(kind)
15017 v.AddArg4(hi, lo, y, mem)
15018 return true
15019 }
15020 return false
15021 }
15022 func rewriteValueARM_OpRotateLeft16(v *Value) bool {
15023 v_1 := v.Args[1]
15024 v_0 := v.Args[0]
15025 b := v.Block
15026 typ := &b.Func.Config.Types
15027
15028
15029 for {
15030 t := v.Type
15031 x := v_0
15032 if v_1.Op != OpARMMOVWconst {
15033 break
15034 }
15035 c := auxIntToInt32(v_1.AuxInt)
15036 v.reset(OpOr16)
15037 v0 := b.NewValue0(v.Pos, OpLsh16x32, t)
15038 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15039 v1.AuxInt = int32ToAuxInt(c & 15)
15040 v0.AddArg2(x, v1)
15041 v2 := b.NewValue0(v.Pos, OpRsh16Ux32, t)
15042 v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15043 v3.AuxInt = int32ToAuxInt(-c & 15)
15044 v2.AddArg2(x, v3)
15045 v.AddArg2(v0, v2)
15046 return true
15047 }
15048 return false
15049 }
15050 func rewriteValueARM_OpRotateLeft32(v *Value) bool {
15051 v_1 := v.Args[1]
15052 v_0 := v.Args[0]
15053 b := v.Block
15054
15055
15056 for {
15057 x := v_0
15058 y := v_1
15059 v.reset(OpARMSRR)
15060 v0 := b.NewValue0(v.Pos, OpARMRSBconst, y.Type)
15061 v0.AuxInt = int32ToAuxInt(0)
15062 v0.AddArg(y)
15063 v.AddArg2(x, v0)
15064 return true
15065 }
15066 }
15067 func rewriteValueARM_OpRotateLeft8(v *Value) bool {
15068 v_1 := v.Args[1]
15069 v_0 := v.Args[0]
15070 b := v.Block
15071 typ := &b.Func.Config.Types
15072
15073
15074 for {
15075 t := v.Type
15076 x := v_0
15077 if v_1.Op != OpARMMOVWconst {
15078 break
15079 }
15080 c := auxIntToInt32(v_1.AuxInt)
15081 v.reset(OpOr8)
15082 v0 := b.NewValue0(v.Pos, OpLsh8x32, t)
15083 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15084 v1.AuxInt = int32ToAuxInt(c & 7)
15085 v0.AddArg2(x, v1)
15086 v2 := b.NewValue0(v.Pos, OpRsh8Ux32, t)
15087 v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15088 v3.AuxInt = int32ToAuxInt(-c & 7)
15089 v2.AddArg2(x, v3)
15090 v.AddArg2(v0, v2)
15091 return true
15092 }
15093 return false
15094 }
15095 func rewriteValueARM_OpRsh16Ux16(v *Value) bool {
15096 v_1 := v.Args[1]
15097 v_0 := v.Args[0]
15098 b := v.Block
15099 typ := &b.Func.Config.Types
15100
15101
15102 for {
15103 x := v_0
15104 y := v_1
15105 v.reset(OpARMCMOVWHSconst)
15106 v.AuxInt = int32ToAuxInt(0)
15107 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15108 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15109 v1.AddArg(x)
15110 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15111 v2.AddArg(y)
15112 v0.AddArg2(v1, v2)
15113 v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15114 v3.AuxInt = int32ToAuxInt(256)
15115 v3.AddArg(v2)
15116 v.AddArg2(v0, v3)
15117 return true
15118 }
15119 }
15120 func rewriteValueARM_OpRsh16Ux32(v *Value) bool {
15121 v_1 := v.Args[1]
15122 v_0 := v.Args[0]
15123 b := v.Block
15124 typ := &b.Func.Config.Types
15125
15126
15127 for {
15128 x := v_0
15129 y := v_1
15130 v.reset(OpARMCMOVWHSconst)
15131 v.AuxInt = int32ToAuxInt(0)
15132 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15133 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15134 v1.AddArg(x)
15135 v0.AddArg2(v1, y)
15136 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15137 v2.AuxInt = int32ToAuxInt(256)
15138 v2.AddArg(y)
15139 v.AddArg2(v0, v2)
15140 return true
15141 }
15142 }
15143 func rewriteValueARM_OpRsh16Ux64(v *Value) bool {
15144 v_1 := v.Args[1]
15145 v_0 := v.Args[0]
15146 b := v.Block
15147 typ := &b.Func.Config.Types
15148
15149
15150
15151 for {
15152 x := v_0
15153 if v_1.Op != OpConst64 {
15154 break
15155 }
15156 c := auxIntToInt64(v_1.AuxInt)
15157 if !(uint64(c) < 16) {
15158 break
15159 }
15160 v.reset(OpARMSRLconst)
15161 v.AuxInt = int32ToAuxInt(int32(c + 16))
15162 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15163 v0.AuxInt = int32ToAuxInt(16)
15164 v0.AddArg(x)
15165 v.AddArg(v0)
15166 return true
15167 }
15168
15169
15170
15171 for {
15172 if v_1.Op != OpConst64 {
15173 break
15174 }
15175 c := auxIntToInt64(v_1.AuxInt)
15176 if !(uint64(c) >= 16) {
15177 break
15178 }
15179 v.reset(OpConst16)
15180 v.AuxInt = int16ToAuxInt(0)
15181 return true
15182 }
15183 return false
15184 }
15185 func rewriteValueARM_OpRsh16Ux8(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(OpARMSRL)
15196 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15197 v0.AddArg(x)
15198 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15199 v1.AddArg(y)
15200 v.AddArg2(v0, v1)
15201 return true
15202 }
15203 }
15204 func rewriteValueARM_OpRsh16x16(v *Value) bool {
15205 v_1 := v.Args[1]
15206 v_0 := v.Args[0]
15207 b := v.Block
15208 typ := &b.Func.Config.Types
15209
15210
15211 for {
15212 x := v_0
15213 y := v_1
15214 v.reset(OpARMSRAcond)
15215 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15216 v0.AddArg(x)
15217 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15218 v1.AddArg(y)
15219 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15220 v2.AuxInt = int32ToAuxInt(256)
15221 v2.AddArg(v1)
15222 v.AddArg3(v0, v1, v2)
15223 return true
15224 }
15225 }
15226 func rewriteValueARM_OpRsh16x32(v *Value) bool {
15227 v_1 := v.Args[1]
15228 v_0 := v.Args[0]
15229 b := v.Block
15230 typ := &b.Func.Config.Types
15231
15232
15233 for {
15234 x := v_0
15235 y := v_1
15236 v.reset(OpARMSRAcond)
15237 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15238 v0.AddArg(x)
15239 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15240 v1.AuxInt = int32ToAuxInt(256)
15241 v1.AddArg(y)
15242 v.AddArg3(v0, y, v1)
15243 return true
15244 }
15245 }
15246 func rewriteValueARM_OpRsh16x64(v *Value) bool {
15247 v_1 := v.Args[1]
15248 v_0 := v.Args[0]
15249 b := v.Block
15250 typ := &b.Func.Config.Types
15251
15252
15253
15254 for {
15255 x := v_0
15256 if v_1.Op != OpConst64 {
15257 break
15258 }
15259 c := auxIntToInt64(v_1.AuxInt)
15260 if !(uint64(c) < 16) {
15261 break
15262 }
15263 v.reset(OpARMSRAconst)
15264 v.AuxInt = int32ToAuxInt(int32(c + 16))
15265 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15266 v0.AuxInt = int32ToAuxInt(16)
15267 v0.AddArg(x)
15268 v.AddArg(v0)
15269 return true
15270 }
15271
15272
15273
15274 for {
15275 x := v_0
15276 if v_1.Op != OpConst64 {
15277 break
15278 }
15279 c := auxIntToInt64(v_1.AuxInt)
15280 if !(uint64(c) >= 16) {
15281 break
15282 }
15283 v.reset(OpARMSRAconst)
15284 v.AuxInt = int32ToAuxInt(31)
15285 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15286 v0.AuxInt = int32ToAuxInt(16)
15287 v0.AddArg(x)
15288 v.AddArg(v0)
15289 return true
15290 }
15291 return false
15292 }
15293 func rewriteValueARM_OpRsh16x8(v *Value) bool {
15294 v_1 := v.Args[1]
15295 v_0 := v.Args[0]
15296 b := v.Block
15297 typ := &b.Func.Config.Types
15298
15299
15300 for {
15301 x := v_0
15302 y := v_1
15303 v.reset(OpARMSRA)
15304 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
15305 v0.AddArg(x)
15306 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15307 v1.AddArg(y)
15308 v.AddArg2(v0, v1)
15309 return true
15310 }
15311 }
15312 func rewriteValueARM_OpRsh32Ux16(v *Value) bool {
15313 v_1 := v.Args[1]
15314 v_0 := v.Args[0]
15315 b := v.Block
15316 typ := &b.Func.Config.Types
15317
15318
15319 for {
15320 x := v_0
15321 y := v_1
15322 v.reset(OpARMCMOVWHSconst)
15323 v.AuxInt = int32ToAuxInt(0)
15324 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15325 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15326 v1.AddArg(y)
15327 v0.AddArg2(x, v1)
15328 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15329 v2.AuxInt = int32ToAuxInt(256)
15330 v2.AddArg(v1)
15331 v.AddArg2(v0, v2)
15332 return true
15333 }
15334 }
15335 func rewriteValueARM_OpRsh32Ux32(v *Value) bool {
15336 v_1 := v.Args[1]
15337 v_0 := v.Args[0]
15338 b := v.Block
15339
15340
15341 for {
15342 x := v_0
15343 y := v_1
15344 v.reset(OpARMCMOVWHSconst)
15345 v.AuxInt = int32ToAuxInt(0)
15346 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15347 v0.AddArg2(x, y)
15348 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15349 v1.AuxInt = int32ToAuxInt(256)
15350 v1.AddArg(y)
15351 v.AddArg2(v0, v1)
15352 return true
15353 }
15354 }
15355 func rewriteValueARM_OpRsh32Ux64(v *Value) bool {
15356 v_1 := v.Args[1]
15357 v_0 := v.Args[0]
15358
15359
15360
15361 for {
15362 x := v_0
15363 if v_1.Op != OpConst64 {
15364 break
15365 }
15366 c := auxIntToInt64(v_1.AuxInt)
15367 if !(uint64(c) < 32) {
15368 break
15369 }
15370 v.reset(OpARMSRLconst)
15371 v.AuxInt = int32ToAuxInt(int32(c))
15372 v.AddArg(x)
15373 return true
15374 }
15375
15376
15377
15378 for {
15379 if v_1.Op != OpConst64 {
15380 break
15381 }
15382 c := auxIntToInt64(v_1.AuxInt)
15383 if !(uint64(c) >= 32) {
15384 break
15385 }
15386 v.reset(OpConst32)
15387 v.AuxInt = int32ToAuxInt(0)
15388 return true
15389 }
15390 return false
15391 }
15392 func rewriteValueARM_OpRsh32Ux8(v *Value) bool {
15393 v_1 := v.Args[1]
15394 v_0 := v.Args[0]
15395 b := v.Block
15396 typ := &b.Func.Config.Types
15397
15398
15399 for {
15400 x := v_0
15401 y := v_1
15402 v.reset(OpARMSRL)
15403 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15404 v0.AddArg(y)
15405 v.AddArg2(x, v0)
15406 return true
15407 }
15408 }
15409 func rewriteValueARM_OpRsh32x16(v *Value) bool {
15410 v_1 := v.Args[1]
15411 v_0 := v.Args[0]
15412 b := v.Block
15413 typ := &b.Func.Config.Types
15414
15415
15416 for {
15417 x := v_0
15418 y := v_1
15419 v.reset(OpARMSRAcond)
15420 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15421 v0.AddArg(y)
15422 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15423 v1.AuxInt = int32ToAuxInt(256)
15424 v1.AddArg(v0)
15425 v.AddArg3(x, v0, v1)
15426 return true
15427 }
15428 }
15429 func rewriteValueARM_OpRsh32x32(v *Value) bool {
15430 v_1 := v.Args[1]
15431 v_0 := v.Args[0]
15432 b := v.Block
15433
15434
15435 for {
15436 x := v_0
15437 y := v_1
15438 v.reset(OpARMSRAcond)
15439 v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15440 v0.AuxInt = int32ToAuxInt(256)
15441 v0.AddArg(y)
15442 v.AddArg3(x, y, v0)
15443 return true
15444 }
15445 }
15446 func rewriteValueARM_OpRsh32x64(v *Value) bool {
15447 v_1 := v.Args[1]
15448 v_0 := v.Args[0]
15449
15450
15451
15452 for {
15453 x := v_0
15454 if v_1.Op != OpConst64 {
15455 break
15456 }
15457 c := auxIntToInt64(v_1.AuxInt)
15458 if !(uint64(c) < 32) {
15459 break
15460 }
15461 v.reset(OpARMSRAconst)
15462 v.AuxInt = int32ToAuxInt(int32(c))
15463 v.AddArg(x)
15464 return true
15465 }
15466
15467
15468
15469 for {
15470 x := v_0
15471 if v_1.Op != OpConst64 {
15472 break
15473 }
15474 c := auxIntToInt64(v_1.AuxInt)
15475 if !(uint64(c) >= 32) {
15476 break
15477 }
15478 v.reset(OpARMSRAconst)
15479 v.AuxInt = int32ToAuxInt(31)
15480 v.AddArg(x)
15481 return true
15482 }
15483 return false
15484 }
15485 func rewriteValueARM_OpRsh32x8(v *Value) bool {
15486 v_1 := v.Args[1]
15487 v_0 := v.Args[0]
15488 b := v.Block
15489 typ := &b.Func.Config.Types
15490
15491
15492 for {
15493 x := v_0
15494 y := v_1
15495 v.reset(OpARMSRA)
15496 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15497 v0.AddArg(y)
15498 v.AddArg2(x, v0)
15499 return true
15500 }
15501 }
15502 func rewriteValueARM_OpRsh8Ux16(v *Value) bool {
15503 v_1 := v.Args[1]
15504 v_0 := v.Args[0]
15505 b := v.Block
15506 typ := &b.Func.Config.Types
15507
15508
15509 for {
15510 x := v_0
15511 y := v_1
15512 v.reset(OpARMCMOVWHSconst)
15513 v.AuxInt = int32ToAuxInt(0)
15514 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15515 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15516 v1.AddArg(x)
15517 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15518 v2.AddArg(y)
15519 v0.AddArg2(v1, v2)
15520 v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15521 v3.AuxInt = int32ToAuxInt(256)
15522 v3.AddArg(v2)
15523 v.AddArg2(v0, v3)
15524 return true
15525 }
15526 }
15527 func rewriteValueARM_OpRsh8Ux32(v *Value) bool {
15528 v_1 := v.Args[1]
15529 v_0 := v.Args[0]
15530 b := v.Block
15531 typ := &b.Func.Config.Types
15532
15533
15534 for {
15535 x := v_0
15536 y := v_1
15537 v.reset(OpARMCMOVWHSconst)
15538 v.AuxInt = int32ToAuxInt(0)
15539 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type)
15540 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15541 v1.AddArg(x)
15542 v0.AddArg2(v1, y)
15543 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15544 v2.AuxInt = int32ToAuxInt(256)
15545 v2.AddArg(y)
15546 v.AddArg2(v0, v2)
15547 return true
15548 }
15549 }
15550 func rewriteValueARM_OpRsh8Ux64(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
15558 for {
15559 x := v_0
15560 if v_1.Op != OpConst64 {
15561 break
15562 }
15563 c := auxIntToInt64(v_1.AuxInt)
15564 if !(uint64(c) < 8) {
15565 break
15566 }
15567 v.reset(OpARMSRLconst)
15568 v.AuxInt = int32ToAuxInt(int32(c + 24))
15569 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15570 v0.AuxInt = int32ToAuxInt(24)
15571 v0.AddArg(x)
15572 v.AddArg(v0)
15573 return true
15574 }
15575
15576
15577
15578 for {
15579 if v_1.Op != OpConst64 {
15580 break
15581 }
15582 c := auxIntToInt64(v_1.AuxInt)
15583 if !(uint64(c) >= 8) {
15584 break
15585 }
15586 v.reset(OpConst8)
15587 v.AuxInt = int8ToAuxInt(0)
15588 return true
15589 }
15590 return false
15591 }
15592 func rewriteValueARM_OpRsh8Ux8(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(OpARMSRL)
15603 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15604 v0.AddArg(x)
15605 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15606 v1.AddArg(y)
15607 v.AddArg2(v0, v1)
15608 return true
15609 }
15610 }
15611 func rewriteValueARM_OpRsh8x16(v *Value) bool {
15612 v_1 := v.Args[1]
15613 v_0 := v.Args[0]
15614 b := v.Block
15615 typ := &b.Func.Config.Types
15616
15617
15618 for {
15619 x := v_0
15620 y := v_1
15621 v.reset(OpARMSRAcond)
15622 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15623 v0.AddArg(x)
15624 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
15625 v1.AddArg(y)
15626 v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15627 v2.AuxInt = int32ToAuxInt(256)
15628 v2.AddArg(v1)
15629 v.AddArg3(v0, v1, v2)
15630 return true
15631 }
15632 }
15633 func rewriteValueARM_OpRsh8x32(v *Value) bool {
15634 v_1 := v.Args[1]
15635 v_0 := v.Args[0]
15636 b := v.Block
15637 typ := &b.Func.Config.Types
15638
15639
15640 for {
15641 x := v_0
15642 y := v_1
15643 v.reset(OpARMSRAcond)
15644 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15645 v0.AddArg(x)
15646 v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
15647 v1.AuxInt = int32ToAuxInt(256)
15648 v1.AddArg(y)
15649 v.AddArg3(v0, y, v1)
15650 return true
15651 }
15652 }
15653 func rewriteValueARM_OpRsh8x64(v *Value) bool {
15654 v_1 := v.Args[1]
15655 v_0 := v.Args[0]
15656 b := v.Block
15657 typ := &b.Func.Config.Types
15658
15659
15660
15661 for {
15662 x := v_0
15663 if v_1.Op != OpConst64 {
15664 break
15665 }
15666 c := auxIntToInt64(v_1.AuxInt)
15667 if !(uint64(c) < 8) {
15668 break
15669 }
15670 v.reset(OpARMSRAconst)
15671 v.AuxInt = int32ToAuxInt(int32(c + 24))
15672 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15673 v0.AuxInt = int32ToAuxInt(24)
15674 v0.AddArg(x)
15675 v.AddArg(v0)
15676 return true
15677 }
15678
15679
15680
15681 for {
15682 x := v_0
15683 if v_1.Op != OpConst64 {
15684 break
15685 }
15686 c := auxIntToInt64(v_1.AuxInt)
15687 if !(uint64(c) >= 8) {
15688 break
15689 }
15690 v.reset(OpARMSRAconst)
15691 v.AuxInt = int32ToAuxInt(31)
15692 v0 := b.NewValue0(v.Pos, OpARMSLLconst, typ.UInt32)
15693 v0.AuxInt = int32ToAuxInt(24)
15694 v0.AddArg(x)
15695 v.AddArg(v0)
15696 return true
15697 }
15698 return false
15699 }
15700 func rewriteValueARM_OpRsh8x8(v *Value) bool {
15701 v_1 := v.Args[1]
15702 v_0 := v.Args[0]
15703 b := v.Block
15704 typ := &b.Func.Config.Types
15705
15706
15707 for {
15708 x := v_0
15709 y := v_1
15710 v.reset(OpARMSRA)
15711 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
15712 v0.AddArg(x)
15713 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
15714 v1.AddArg(y)
15715 v.AddArg2(v0, v1)
15716 return true
15717 }
15718 }
15719 func rewriteValueARM_OpSelect0(v *Value) bool {
15720 v_0 := v.Args[0]
15721
15722
15723 for {
15724 if v_0.Op != OpARMCALLudiv {
15725 break
15726 }
15727 _ = v_0.Args[1]
15728 x := v_0.Args[0]
15729 v_0_1 := v_0.Args[1]
15730 if v_0_1.Op != OpARMMOVWconst || auxIntToInt32(v_0_1.AuxInt) != 1 {
15731 break
15732 }
15733 v.copyOf(x)
15734 return true
15735 }
15736
15737
15738
15739 for {
15740 if v_0.Op != OpARMCALLudiv {
15741 break
15742 }
15743 _ = v_0.Args[1]
15744 x := v_0.Args[0]
15745 v_0_1 := v_0.Args[1]
15746 if v_0_1.Op != OpARMMOVWconst {
15747 break
15748 }
15749 c := auxIntToInt32(v_0_1.AuxInt)
15750 if !(isPowerOfTwo32(c)) {
15751 break
15752 }
15753 v.reset(OpARMSRLconst)
15754 v.AuxInt = int32ToAuxInt(int32(log32(c)))
15755 v.AddArg(x)
15756 return true
15757 }
15758
15759
15760
15761 for {
15762 if v_0.Op != OpARMCALLudiv {
15763 break
15764 }
15765 _ = v_0.Args[1]
15766 v_0_0 := v_0.Args[0]
15767 if v_0_0.Op != OpARMMOVWconst {
15768 break
15769 }
15770 c := auxIntToInt32(v_0_0.AuxInt)
15771 v_0_1 := v_0.Args[1]
15772 if v_0_1.Op != OpARMMOVWconst {
15773 break
15774 }
15775 d := auxIntToInt32(v_0_1.AuxInt)
15776 if !(d != 0) {
15777 break
15778 }
15779 v.reset(OpARMMOVWconst)
15780 v.AuxInt = int32ToAuxInt(int32(uint32(c) / uint32(d)))
15781 return true
15782 }
15783 return false
15784 }
15785 func rewriteValueARM_OpSelect1(v *Value) bool {
15786 v_0 := v.Args[0]
15787
15788
15789 for {
15790 if v_0.Op != OpARMCALLudiv {
15791 break
15792 }
15793 _ = v_0.Args[1]
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.reset(OpARMMOVWconst)
15799 v.AuxInt = int32ToAuxInt(0)
15800 return true
15801 }
15802
15803
15804
15805 for {
15806 if v_0.Op != OpARMCALLudiv {
15807 break
15808 }
15809 _ = v_0.Args[1]
15810 x := v_0.Args[0]
15811 v_0_1 := v_0.Args[1]
15812 if v_0_1.Op != OpARMMOVWconst {
15813 break
15814 }
15815 c := auxIntToInt32(v_0_1.AuxInt)
15816 if !(isPowerOfTwo32(c)) {
15817 break
15818 }
15819 v.reset(OpARMANDconst)
15820 v.AuxInt = int32ToAuxInt(c - 1)
15821 v.AddArg(x)
15822 return true
15823 }
15824
15825
15826
15827 for {
15828 if v_0.Op != OpARMCALLudiv {
15829 break
15830 }
15831 _ = v_0.Args[1]
15832 v_0_0 := v_0.Args[0]
15833 if v_0_0.Op != OpARMMOVWconst {
15834 break
15835 }
15836 c := auxIntToInt32(v_0_0.AuxInt)
15837 v_0_1 := v_0.Args[1]
15838 if v_0_1.Op != OpARMMOVWconst {
15839 break
15840 }
15841 d := auxIntToInt32(v_0_1.AuxInt)
15842 if !(d != 0) {
15843 break
15844 }
15845 v.reset(OpARMMOVWconst)
15846 v.AuxInt = int32ToAuxInt(int32(uint32(c) % uint32(d)))
15847 return true
15848 }
15849 return false
15850 }
15851 func rewriteValueARM_OpSignmask(v *Value) bool {
15852 v_0 := v.Args[0]
15853
15854
15855 for {
15856 x := v_0
15857 v.reset(OpARMSRAconst)
15858 v.AuxInt = int32ToAuxInt(31)
15859 v.AddArg(x)
15860 return true
15861 }
15862 }
15863 func rewriteValueARM_OpSlicemask(v *Value) bool {
15864 v_0 := v.Args[0]
15865 b := v.Block
15866
15867
15868 for {
15869 t := v.Type
15870 x := v_0
15871 v.reset(OpARMSRAconst)
15872 v.AuxInt = int32ToAuxInt(31)
15873 v0 := b.NewValue0(v.Pos, OpARMRSBconst, t)
15874 v0.AuxInt = int32ToAuxInt(0)
15875 v0.AddArg(x)
15876 v.AddArg(v0)
15877 return true
15878 }
15879 }
15880 func rewriteValueARM_OpStore(v *Value) bool {
15881 v_2 := v.Args[2]
15882 v_1 := v.Args[1]
15883 v_0 := v.Args[0]
15884
15885
15886
15887 for {
15888 t := auxToType(v.Aux)
15889 ptr := v_0
15890 val := v_1
15891 mem := v_2
15892 if !(t.Size() == 1) {
15893 break
15894 }
15895 v.reset(OpARMMOVBstore)
15896 v.AddArg3(ptr, val, mem)
15897 return true
15898 }
15899
15900
15901
15902 for {
15903 t := auxToType(v.Aux)
15904 ptr := v_0
15905 val := v_1
15906 mem := v_2
15907 if !(t.Size() == 2) {
15908 break
15909 }
15910 v.reset(OpARMMOVHstore)
15911 v.AddArg3(ptr, val, mem)
15912 return true
15913 }
15914
15915
15916
15917 for {
15918 t := auxToType(v.Aux)
15919 ptr := v_0
15920 val := v_1
15921 mem := v_2
15922 if !(t.Size() == 4 && !t.IsFloat()) {
15923 break
15924 }
15925 v.reset(OpARMMOVWstore)
15926 v.AddArg3(ptr, val, mem)
15927 return true
15928 }
15929
15930
15931
15932 for {
15933 t := auxToType(v.Aux)
15934 ptr := v_0
15935 val := v_1
15936 mem := v_2
15937 if !(t.Size() == 4 && t.IsFloat()) {
15938 break
15939 }
15940 v.reset(OpARMMOVFstore)
15941 v.AddArg3(ptr, val, mem)
15942 return true
15943 }
15944
15945
15946
15947 for {
15948 t := auxToType(v.Aux)
15949 ptr := v_0
15950 val := v_1
15951 mem := v_2
15952 if !(t.Size() == 8 && t.IsFloat()) {
15953 break
15954 }
15955 v.reset(OpARMMOVDstore)
15956 v.AddArg3(ptr, val, mem)
15957 return true
15958 }
15959 return false
15960 }
15961 func rewriteValueARM_OpZero(v *Value) bool {
15962 v_1 := v.Args[1]
15963 v_0 := v.Args[0]
15964 b := v.Block
15965 config := b.Func.Config
15966 typ := &b.Func.Config.Types
15967
15968
15969 for {
15970 if auxIntToInt64(v.AuxInt) != 0 {
15971 break
15972 }
15973 mem := v_1
15974 v.copyOf(mem)
15975 return true
15976 }
15977
15978
15979 for {
15980 if auxIntToInt64(v.AuxInt) != 1 {
15981 break
15982 }
15983 ptr := v_0
15984 mem := v_1
15985 v.reset(OpARMMOVBstore)
15986 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
15987 v0.AuxInt = int32ToAuxInt(0)
15988 v.AddArg3(ptr, v0, mem)
15989 return true
15990 }
15991
15992
15993
15994 for {
15995 if auxIntToInt64(v.AuxInt) != 2 {
15996 break
15997 }
15998 t := auxToType(v.Aux)
15999 ptr := v_0
16000 mem := v_1
16001 if !(t.Alignment()%2 == 0) {
16002 break
16003 }
16004 v.reset(OpARMMOVHstore)
16005 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16006 v0.AuxInt = int32ToAuxInt(0)
16007 v.AddArg3(ptr, v0, mem)
16008 return true
16009 }
16010
16011
16012 for {
16013 if auxIntToInt64(v.AuxInt) != 2 {
16014 break
16015 }
16016 ptr := v_0
16017 mem := v_1
16018 v.reset(OpARMMOVBstore)
16019 v.AuxInt = int32ToAuxInt(1)
16020 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16021 v0.AuxInt = int32ToAuxInt(0)
16022 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16023 v1.AuxInt = int32ToAuxInt(0)
16024 v1.AddArg3(ptr, v0, mem)
16025 v.AddArg3(ptr, v0, v1)
16026 return true
16027 }
16028
16029
16030
16031 for {
16032 if auxIntToInt64(v.AuxInt) != 4 {
16033 break
16034 }
16035 t := auxToType(v.Aux)
16036 ptr := v_0
16037 mem := v_1
16038 if !(t.Alignment()%4 == 0) {
16039 break
16040 }
16041 v.reset(OpARMMOVWstore)
16042 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16043 v0.AuxInt = int32ToAuxInt(0)
16044 v.AddArg3(ptr, v0, mem)
16045 return true
16046 }
16047
16048
16049
16050 for {
16051 if auxIntToInt64(v.AuxInt) != 4 {
16052 break
16053 }
16054 t := auxToType(v.Aux)
16055 ptr := v_0
16056 mem := v_1
16057 if !(t.Alignment()%2 == 0) {
16058 break
16059 }
16060 v.reset(OpARMMOVHstore)
16061 v.AuxInt = int32ToAuxInt(2)
16062 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16063 v0.AuxInt = int32ToAuxInt(0)
16064 v1 := b.NewValue0(v.Pos, OpARMMOVHstore, types.TypeMem)
16065 v1.AuxInt = int32ToAuxInt(0)
16066 v1.AddArg3(ptr, v0, mem)
16067 v.AddArg3(ptr, v0, v1)
16068 return true
16069 }
16070
16071
16072 for {
16073 if auxIntToInt64(v.AuxInt) != 4 {
16074 break
16075 }
16076 ptr := v_0
16077 mem := v_1
16078 v.reset(OpARMMOVBstore)
16079 v.AuxInt = int32ToAuxInt(3)
16080 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16081 v0.AuxInt = int32ToAuxInt(0)
16082 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16083 v1.AuxInt = int32ToAuxInt(2)
16084 v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16085 v2.AuxInt = int32ToAuxInt(1)
16086 v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16087 v3.AuxInt = int32ToAuxInt(0)
16088 v3.AddArg3(ptr, v0, mem)
16089 v2.AddArg3(ptr, v0, v3)
16090 v1.AddArg3(ptr, v0, v2)
16091 v.AddArg3(ptr, v0, v1)
16092 return true
16093 }
16094
16095
16096 for {
16097 if auxIntToInt64(v.AuxInt) != 3 {
16098 break
16099 }
16100 ptr := v_0
16101 mem := v_1
16102 v.reset(OpARMMOVBstore)
16103 v.AuxInt = int32ToAuxInt(2)
16104 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16105 v0.AuxInt = int32ToAuxInt(0)
16106 v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16107 v1.AuxInt = int32ToAuxInt(1)
16108 v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
16109 v2.AuxInt = int32ToAuxInt(0)
16110 v2.AddArg3(ptr, v0, mem)
16111 v1.AddArg3(ptr, v0, v2)
16112 v.AddArg3(ptr, v0, v1)
16113 return true
16114 }
16115
16116
16117
16118 for {
16119 s := auxIntToInt64(v.AuxInt)
16120 t := auxToType(v.Aux)
16121 ptr := v_0
16122 mem := v_1
16123 if !(s%4 == 0 && s > 4 && s <= 512 && t.Alignment()%4 == 0 && !config.noDuffDevice) {
16124 break
16125 }
16126 v.reset(OpARMDUFFZERO)
16127 v.AuxInt = int64ToAuxInt(4 * (128 - s/4))
16128 v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16129 v0.AuxInt = int32ToAuxInt(0)
16130 v.AddArg3(ptr, v0, mem)
16131 return true
16132 }
16133
16134
16135
16136 for {
16137 s := auxIntToInt64(v.AuxInt)
16138 t := auxToType(v.Aux)
16139 ptr := v_0
16140 mem := v_1
16141 if !((s > 512 || config.noDuffDevice) || t.Alignment()%4 != 0) {
16142 break
16143 }
16144 v.reset(OpARMLoweredZero)
16145 v.AuxInt = int64ToAuxInt(t.Alignment())
16146 v0 := b.NewValue0(v.Pos, OpARMADDconst, ptr.Type)
16147 v0.AuxInt = int32ToAuxInt(int32(s - moveSize(t.Alignment(), config)))
16148 v0.AddArg(ptr)
16149 v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
16150 v1.AuxInt = int32ToAuxInt(0)
16151 v.AddArg4(ptr, v0, v1, mem)
16152 return true
16153 }
16154 return false
16155 }
16156 func rewriteValueARM_OpZeromask(v *Value) bool {
16157 v_0 := v.Args[0]
16158 b := v.Block
16159 typ := &b.Func.Config.Types
16160
16161
16162 for {
16163 x := v_0
16164 v.reset(OpARMSRAconst)
16165 v.AuxInt = int32ToAuxInt(31)
16166 v0 := b.NewValue0(v.Pos, OpARMRSBshiftRL, typ.Int32)
16167 v0.AuxInt = int32ToAuxInt(1)
16168 v0.AddArg2(x, x)
16169 v.AddArg(v0)
16170 return true
16171 }
16172 }
16173 func rewriteBlockARM(b *Block) bool {
16174 switch b.Kind {
16175 case BlockARMEQ:
16176
16177
16178
16179 for b.Controls[0].Op == OpARMFlagConstant {
16180 v_0 := b.Controls[0]
16181 fc := auxIntToFlagConstant(v_0.AuxInt)
16182 if !(fc.eq()) {
16183 break
16184 }
16185 b.Reset(BlockFirst)
16186 return true
16187 }
16188
16189
16190
16191 for b.Controls[0].Op == OpARMFlagConstant {
16192 v_0 := b.Controls[0]
16193 fc := auxIntToFlagConstant(v_0.AuxInt)
16194 if !(!fc.eq()) {
16195 break
16196 }
16197 b.Reset(BlockFirst)
16198 b.swapSuccessors()
16199 return true
16200 }
16201
16202
16203 for b.Controls[0].Op == OpARMInvertFlags {
16204 v_0 := b.Controls[0]
16205 cmp := v_0.Args[0]
16206 b.resetWithControl(BlockARMEQ, cmp)
16207 return true
16208 }
16209
16210
16211 for b.Controls[0].Op == OpARMCMP {
16212 v_0 := b.Controls[0]
16213 _ = v_0.Args[1]
16214 x := v_0.Args[0]
16215 v_0_1 := v_0.Args[1]
16216 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
16217 break
16218 }
16219 y := v_0_1.Args[0]
16220 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16221 v0.AddArg2(x, y)
16222 b.resetWithControl(BlockARMEQ, v0)
16223 return true
16224 }
16225
16226
16227 for b.Controls[0].Op == OpARMCMN {
16228 v_0 := b.Controls[0]
16229 _ = v_0.Args[1]
16230 v_0_0 := v_0.Args[0]
16231 v_0_1 := v_0.Args[1]
16232 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16233 x := v_0_0
16234 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
16235 continue
16236 }
16237 y := v_0_1.Args[0]
16238 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16239 v0.AddArg2(x, y)
16240 b.resetWithControl(BlockARMEQ, v0)
16241 return true
16242 }
16243 break
16244 }
16245
16246
16247
16248 for b.Controls[0].Op == OpARMCMPconst {
16249 v_0 := b.Controls[0]
16250 if auxIntToInt32(v_0.AuxInt) != 0 {
16251 break
16252 }
16253 l := v_0.Args[0]
16254 if l.Op != OpARMSUB {
16255 break
16256 }
16257 y := l.Args[1]
16258 x := l.Args[0]
16259 if !(l.Uses == 1) {
16260 break
16261 }
16262 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16263 v0.AddArg2(x, y)
16264 b.resetWithControl(BlockARMEQ, v0)
16265 return true
16266 }
16267
16268
16269
16270 for b.Controls[0].Op == OpARMCMPconst {
16271 v_0 := b.Controls[0]
16272 if auxIntToInt32(v_0.AuxInt) != 0 {
16273 break
16274 }
16275 l := v_0.Args[0]
16276 if l.Op != OpARMMULS {
16277 break
16278 }
16279 a := l.Args[2]
16280 x := l.Args[0]
16281 y := l.Args[1]
16282 if !(l.Uses == 1) {
16283 break
16284 }
16285 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
16286 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
16287 v1.AddArg2(x, y)
16288 v0.AddArg2(a, v1)
16289 b.resetWithControl(BlockARMEQ, v0)
16290 return true
16291 }
16292
16293
16294
16295 for b.Controls[0].Op == OpARMCMPconst {
16296 v_0 := b.Controls[0]
16297 if auxIntToInt32(v_0.AuxInt) != 0 {
16298 break
16299 }
16300 l := v_0.Args[0]
16301 if l.Op != OpARMSUBconst {
16302 break
16303 }
16304 c := auxIntToInt32(l.AuxInt)
16305 x := l.Args[0]
16306 if !(l.Uses == 1) {
16307 break
16308 }
16309 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
16310 v0.AuxInt = int32ToAuxInt(c)
16311 v0.AddArg(x)
16312 b.resetWithControl(BlockARMEQ, v0)
16313 return true
16314 }
16315
16316
16317
16318 for b.Controls[0].Op == OpARMCMPconst {
16319 v_0 := b.Controls[0]
16320 if auxIntToInt32(v_0.AuxInt) != 0 {
16321 break
16322 }
16323 l := v_0.Args[0]
16324 if l.Op != OpARMSUBshiftLL {
16325 break
16326 }
16327 c := auxIntToInt32(l.AuxInt)
16328 y := l.Args[1]
16329 x := l.Args[0]
16330 if !(l.Uses == 1) {
16331 break
16332 }
16333 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
16334 v0.AuxInt = int32ToAuxInt(c)
16335 v0.AddArg2(x, y)
16336 b.resetWithControl(BlockARMEQ, v0)
16337 return true
16338 }
16339
16340
16341
16342 for b.Controls[0].Op == OpARMCMPconst {
16343 v_0 := b.Controls[0]
16344 if auxIntToInt32(v_0.AuxInt) != 0 {
16345 break
16346 }
16347 l := v_0.Args[0]
16348 if l.Op != OpARMSUBshiftRL {
16349 break
16350 }
16351 c := auxIntToInt32(l.AuxInt)
16352 y := l.Args[1]
16353 x := l.Args[0]
16354 if !(l.Uses == 1) {
16355 break
16356 }
16357 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
16358 v0.AuxInt = int32ToAuxInt(c)
16359 v0.AddArg2(x, y)
16360 b.resetWithControl(BlockARMEQ, v0)
16361 return true
16362 }
16363
16364
16365
16366 for b.Controls[0].Op == OpARMCMPconst {
16367 v_0 := b.Controls[0]
16368 if auxIntToInt32(v_0.AuxInt) != 0 {
16369 break
16370 }
16371 l := v_0.Args[0]
16372 if l.Op != OpARMSUBshiftRA {
16373 break
16374 }
16375 c := auxIntToInt32(l.AuxInt)
16376 y := l.Args[1]
16377 x := l.Args[0]
16378 if !(l.Uses == 1) {
16379 break
16380 }
16381 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
16382 v0.AuxInt = int32ToAuxInt(c)
16383 v0.AddArg2(x, y)
16384 b.resetWithControl(BlockARMEQ, v0)
16385 return true
16386 }
16387
16388
16389
16390 for b.Controls[0].Op == OpARMCMPconst {
16391 v_0 := b.Controls[0]
16392 if auxIntToInt32(v_0.AuxInt) != 0 {
16393 break
16394 }
16395 l := v_0.Args[0]
16396 if l.Op != OpARMSUBshiftLLreg {
16397 break
16398 }
16399 z := l.Args[2]
16400 x := l.Args[0]
16401 y := l.Args[1]
16402 if !(l.Uses == 1) {
16403 break
16404 }
16405 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
16406 v0.AddArg3(x, y, z)
16407 b.resetWithControl(BlockARMEQ, v0)
16408 return true
16409 }
16410
16411
16412
16413 for b.Controls[0].Op == OpARMCMPconst {
16414 v_0 := b.Controls[0]
16415 if auxIntToInt32(v_0.AuxInt) != 0 {
16416 break
16417 }
16418 l := v_0.Args[0]
16419 if l.Op != OpARMSUBshiftRLreg {
16420 break
16421 }
16422 z := l.Args[2]
16423 x := l.Args[0]
16424 y := l.Args[1]
16425 if !(l.Uses == 1) {
16426 break
16427 }
16428 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
16429 v0.AddArg3(x, y, z)
16430 b.resetWithControl(BlockARMEQ, v0)
16431 return true
16432 }
16433
16434
16435
16436 for b.Controls[0].Op == OpARMCMPconst {
16437 v_0 := b.Controls[0]
16438 if auxIntToInt32(v_0.AuxInt) != 0 {
16439 break
16440 }
16441 l := v_0.Args[0]
16442 if l.Op != OpARMSUBshiftRAreg {
16443 break
16444 }
16445 z := l.Args[2]
16446 x := l.Args[0]
16447 y := l.Args[1]
16448 if !(l.Uses == 1) {
16449 break
16450 }
16451 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
16452 v0.AddArg3(x, y, z)
16453 b.resetWithControl(BlockARMEQ, v0)
16454 return true
16455 }
16456
16457
16458
16459 for b.Controls[0].Op == OpARMCMPconst {
16460 v_0 := b.Controls[0]
16461 if auxIntToInt32(v_0.AuxInt) != 0 {
16462 break
16463 }
16464 l := v_0.Args[0]
16465 if l.Op != OpARMADD {
16466 break
16467 }
16468 _ = l.Args[1]
16469 l_0 := l.Args[0]
16470 l_1 := l.Args[1]
16471 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16472 x := l_0
16473 y := l_1
16474 if !(l.Uses == 1) {
16475 continue
16476 }
16477 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16478 v0.AddArg2(x, y)
16479 b.resetWithControl(BlockARMEQ, v0)
16480 return true
16481 }
16482 break
16483 }
16484
16485
16486
16487 for b.Controls[0].Op == OpARMCMPconst {
16488 v_0 := b.Controls[0]
16489 if auxIntToInt32(v_0.AuxInt) != 0 {
16490 break
16491 }
16492 l := v_0.Args[0]
16493 if l.Op != OpARMMULA {
16494 break
16495 }
16496 a := l.Args[2]
16497 x := l.Args[0]
16498 y := l.Args[1]
16499 if !(l.Uses == 1) {
16500 break
16501 }
16502 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
16503 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
16504 v1.AddArg2(x, y)
16505 v0.AddArg2(a, v1)
16506 b.resetWithControl(BlockARMEQ, v0)
16507 return true
16508 }
16509
16510
16511
16512 for b.Controls[0].Op == OpARMCMPconst {
16513 v_0 := b.Controls[0]
16514 if auxIntToInt32(v_0.AuxInt) != 0 {
16515 break
16516 }
16517 l := v_0.Args[0]
16518 if l.Op != OpARMADDconst {
16519 break
16520 }
16521 c := auxIntToInt32(l.AuxInt)
16522 x := l.Args[0]
16523 if !(l.Uses == 1) {
16524 break
16525 }
16526 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
16527 v0.AuxInt = int32ToAuxInt(c)
16528 v0.AddArg(x)
16529 b.resetWithControl(BlockARMEQ, v0)
16530 return true
16531 }
16532
16533
16534
16535 for b.Controls[0].Op == OpARMCMPconst {
16536 v_0 := b.Controls[0]
16537 if auxIntToInt32(v_0.AuxInt) != 0 {
16538 break
16539 }
16540 l := v_0.Args[0]
16541 if l.Op != OpARMADDshiftLL {
16542 break
16543 }
16544 c := auxIntToInt32(l.AuxInt)
16545 y := l.Args[1]
16546 x := l.Args[0]
16547 if !(l.Uses == 1) {
16548 break
16549 }
16550 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
16551 v0.AuxInt = int32ToAuxInt(c)
16552 v0.AddArg2(x, y)
16553 b.resetWithControl(BlockARMEQ, v0)
16554 return true
16555 }
16556
16557
16558
16559 for b.Controls[0].Op == OpARMCMPconst {
16560 v_0 := b.Controls[0]
16561 if auxIntToInt32(v_0.AuxInt) != 0 {
16562 break
16563 }
16564 l := v_0.Args[0]
16565 if l.Op != OpARMADDshiftRL {
16566 break
16567 }
16568 c := auxIntToInt32(l.AuxInt)
16569 y := l.Args[1]
16570 x := l.Args[0]
16571 if !(l.Uses == 1) {
16572 break
16573 }
16574 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
16575 v0.AuxInt = int32ToAuxInt(c)
16576 v0.AddArg2(x, y)
16577 b.resetWithControl(BlockARMEQ, v0)
16578 return true
16579 }
16580
16581
16582
16583 for b.Controls[0].Op == OpARMCMPconst {
16584 v_0 := b.Controls[0]
16585 if auxIntToInt32(v_0.AuxInt) != 0 {
16586 break
16587 }
16588 l := v_0.Args[0]
16589 if l.Op != OpARMADDshiftRA {
16590 break
16591 }
16592 c := auxIntToInt32(l.AuxInt)
16593 y := l.Args[1]
16594 x := l.Args[0]
16595 if !(l.Uses == 1) {
16596 break
16597 }
16598 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
16599 v0.AuxInt = int32ToAuxInt(c)
16600 v0.AddArg2(x, y)
16601 b.resetWithControl(BlockARMEQ, v0)
16602 return true
16603 }
16604
16605
16606
16607 for b.Controls[0].Op == OpARMCMPconst {
16608 v_0 := b.Controls[0]
16609 if auxIntToInt32(v_0.AuxInt) != 0 {
16610 break
16611 }
16612 l := v_0.Args[0]
16613 if l.Op != OpARMADDshiftLLreg {
16614 break
16615 }
16616 z := l.Args[2]
16617 x := l.Args[0]
16618 y := l.Args[1]
16619 if !(l.Uses == 1) {
16620 break
16621 }
16622 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
16623 v0.AddArg3(x, y, z)
16624 b.resetWithControl(BlockARMEQ, v0)
16625 return true
16626 }
16627
16628
16629
16630 for b.Controls[0].Op == OpARMCMPconst {
16631 v_0 := b.Controls[0]
16632 if auxIntToInt32(v_0.AuxInt) != 0 {
16633 break
16634 }
16635 l := v_0.Args[0]
16636 if l.Op != OpARMADDshiftRLreg {
16637 break
16638 }
16639 z := l.Args[2]
16640 x := l.Args[0]
16641 y := l.Args[1]
16642 if !(l.Uses == 1) {
16643 break
16644 }
16645 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
16646 v0.AddArg3(x, y, z)
16647 b.resetWithControl(BlockARMEQ, v0)
16648 return true
16649 }
16650
16651
16652
16653 for b.Controls[0].Op == OpARMCMPconst {
16654 v_0 := b.Controls[0]
16655 if auxIntToInt32(v_0.AuxInt) != 0 {
16656 break
16657 }
16658 l := v_0.Args[0]
16659 if l.Op != OpARMADDshiftRAreg {
16660 break
16661 }
16662 z := l.Args[2]
16663 x := l.Args[0]
16664 y := l.Args[1]
16665 if !(l.Uses == 1) {
16666 break
16667 }
16668 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
16669 v0.AddArg3(x, y, z)
16670 b.resetWithControl(BlockARMEQ, v0)
16671 return true
16672 }
16673
16674
16675
16676 for b.Controls[0].Op == OpARMCMPconst {
16677 v_0 := b.Controls[0]
16678 if auxIntToInt32(v_0.AuxInt) != 0 {
16679 break
16680 }
16681 l := v_0.Args[0]
16682 if l.Op != OpARMAND {
16683 break
16684 }
16685 _ = l.Args[1]
16686 l_0 := l.Args[0]
16687 l_1 := l.Args[1]
16688 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16689 x := l_0
16690 y := l_1
16691 if !(l.Uses == 1) {
16692 continue
16693 }
16694 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
16695 v0.AddArg2(x, y)
16696 b.resetWithControl(BlockARMEQ, v0)
16697 return true
16698 }
16699 break
16700 }
16701
16702
16703
16704 for b.Controls[0].Op == OpARMCMPconst {
16705 v_0 := b.Controls[0]
16706 if auxIntToInt32(v_0.AuxInt) != 0 {
16707 break
16708 }
16709 l := v_0.Args[0]
16710 if l.Op != OpARMANDconst {
16711 break
16712 }
16713 c := auxIntToInt32(l.AuxInt)
16714 x := l.Args[0]
16715 if !(l.Uses == 1) {
16716 break
16717 }
16718 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
16719 v0.AuxInt = int32ToAuxInt(c)
16720 v0.AddArg(x)
16721 b.resetWithControl(BlockARMEQ, v0)
16722 return true
16723 }
16724
16725
16726
16727 for b.Controls[0].Op == OpARMCMPconst {
16728 v_0 := b.Controls[0]
16729 if auxIntToInt32(v_0.AuxInt) != 0 {
16730 break
16731 }
16732 l := v_0.Args[0]
16733 if l.Op != OpARMANDshiftLL {
16734 break
16735 }
16736 c := auxIntToInt32(l.AuxInt)
16737 y := l.Args[1]
16738 x := l.Args[0]
16739 if !(l.Uses == 1) {
16740 break
16741 }
16742 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
16743 v0.AuxInt = int32ToAuxInt(c)
16744 v0.AddArg2(x, y)
16745 b.resetWithControl(BlockARMEQ, v0)
16746 return true
16747 }
16748
16749
16750
16751 for b.Controls[0].Op == OpARMCMPconst {
16752 v_0 := b.Controls[0]
16753 if auxIntToInt32(v_0.AuxInt) != 0 {
16754 break
16755 }
16756 l := v_0.Args[0]
16757 if l.Op != OpARMANDshiftRL {
16758 break
16759 }
16760 c := auxIntToInt32(l.AuxInt)
16761 y := l.Args[1]
16762 x := l.Args[0]
16763 if !(l.Uses == 1) {
16764 break
16765 }
16766 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
16767 v0.AuxInt = int32ToAuxInt(c)
16768 v0.AddArg2(x, y)
16769 b.resetWithControl(BlockARMEQ, v0)
16770 return true
16771 }
16772
16773
16774
16775 for b.Controls[0].Op == OpARMCMPconst {
16776 v_0 := b.Controls[0]
16777 if auxIntToInt32(v_0.AuxInt) != 0 {
16778 break
16779 }
16780 l := v_0.Args[0]
16781 if l.Op != OpARMANDshiftRA {
16782 break
16783 }
16784 c := auxIntToInt32(l.AuxInt)
16785 y := l.Args[1]
16786 x := l.Args[0]
16787 if !(l.Uses == 1) {
16788 break
16789 }
16790 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
16791 v0.AuxInt = int32ToAuxInt(c)
16792 v0.AddArg2(x, y)
16793 b.resetWithControl(BlockARMEQ, v0)
16794 return true
16795 }
16796
16797
16798
16799 for b.Controls[0].Op == OpARMCMPconst {
16800 v_0 := b.Controls[0]
16801 if auxIntToInt32(v_0.AuxInt) != 0 {
16802 break
16803 }
16804 l := v_0.Args[0]
16805 if l.Op != OpARMANDshiftLLreg {
16806 break
16807 }
16808 z := l.Args[2]
16809 x := l.Args[0]
16810 y := l.Args[1]
16811 if !(l.Uses == 1) {
16812 break
16813 }
16814 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
16815 v0.AddArg3(x, y, z)
16816 b.resetWithControl(BlockARMEQ, v0)
16817 return true
16818 }
16819
16820
16821
16822 for b.Controls[0].Op == OpARMCMPconst {
16823 v_0 := b.Controls[0]
16824 if auxIntToInt32(v_0.AuxInt) != 0 {
16825 break
16826 }
16827 l := v_0.Args[0]
16828 if l.Op != OpARMANDshiftRLreg {
16829 break
16830 }
16831 z := l.Args[2]
16832 x := l.Args[0]
16833 y := l.Args[1]
16834 if !(l.Uses == 1) {
16835 break
16836 }
16837 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
16838 v0.AddArg3(x, y, z)
16839 b.resetWithControl(BlockARMEQ, v0)
16840 return true
16841 }
16842
16843
16844
16845 for b.Controls[0].Op == OpARMCMPconst {
16846 v_0 := b.Controls[0]
16847 if auxIntToInt32(v_0.AuxInt) != 0 {
16848 break
16849 }
16850 l := v_0.Args[0]
16851 if l.Op != OpARMANDshiftRAreg {
16852 break
16853 }
16854 z := l.Args[2]
16855 x := l.Args[0]
16856 y := l.Args[1]
16857 if !(l.Uses == 1) {
16858 break
16859 }
16860 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
16861 v0.AddArg3(x, y, z)
16862 b.resetWithControl(BlockARMEQ, v0)
16863 return true
16864 }
16865
16866
16867
16868 for b.Controls[0].Op == OpARMCMPconst {
16869 v_0 := b.Controls[0]
16870 if auxIntToInt32(v_0.AuxInt) != 0 {
16871 break
16872 }
16873 l := v_0.Args[0]
16874 if l.Op != OpARMXOR {
16875 break
16876 }
16877 _ = l.Args[1]
16878 l_0 := l.Args[0]
16879 l_1 := l.Args[1]
16880 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
16881 x := l_0
16882 y := l_1
16883 if !(l.Uses == 1) {
16884 continue
16885 }
16886 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
16887 v0.AddArg2(x, y)
16888 b.resetWithControl(BlockARMEQ, v0)
16889 return true
16890 }
16891 break
16892 }
16893
16894
16895
16896 for b.Controls[0].Op == OpARMCMPconst {
16897 v_0 := b.Controls[0]
16898 if auxIntToInt32(v_0.AuxInt) != 0 {
16899 break
16900 }
16901 l := v_0.Args[0]
16902 if l.Op != OpARMXORconst {
16903 break
16904 }
16905 c := auxIntToInt32(l.AuxInt)
16906 x := l.Args[0]
16907 if !(l.Uses == 1) {
16908 break
16909 }
16910 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
16911 v0.AuxInt = int32ToAuxInt(c)
16912 v0.AddArg(x)
16913 b.resetWithControl(BlockARMEQ, v0)
16914 return true
16915 }
16916
16917
16918
16919 for b.Controls[0].Op == OpARMCMPconst {
16920 v_0 := b.Controls[0]
16921 if auxIntToInt32(v_0.AuxInt) != 0 {
16922 break
16923 }
16924 l := v_0.Args[0]
16925 if l.Op != OpARMXORshiftLL {
16926 break
16927 }
16928 c := auxIntToInt32(l.AuxInt)
16929 y := l.Args[1]
16930 x := l.Args[0]
16931 if !(l.Uses == 1) {
16932 break
16933 }
16934 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
16935 v0.AuxInt = int32ToAuxInt(c)
16936 v0.AddArg2(x, y)
16937 b.resetWithControl(BlockARMEQ, v0)
16938 return true
16939 }
16940
16941
16942
16943 for b.Controls[0].Op == OpARMCMPconst {
16944 v_0 := b.Controls[0]
16945 if auxIntToInt32(v_0.AuxInt) != 0 {
16946 break
16947 }
16948 l := v_0.Args[0]
16949 if l.Op != OpARMXORshiftRL {
16950 break
16951 }
16952 c := auxIntToInt32(l.AuxInt)
16953 y := l.Args[1]
16954 x := l.Args[0]
16955 if !(l.Uses == 1) {
16956 break
16957 }
16958 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
16959 v0.AuxInt = int32ToAuxInt(c)
16960 v0.AddArg2(x, y)
16961 b.resetWithControl(BlockARMEQ, v0)
16962 return true
16963 }
16964
16965
16966
16967 for b.Controls[0].Op == OpARMCMPconst {
16968 v_0 := b.Controls[0]
16969 if auxIntToInt32(v_0.AuxInt) != 0 {
16970 break
16971 }
16972 l := v_0.Args[0]
16973 if l.Op != OpARMXORshiftRA {
16974 break
16975 }
16976 c := auxIntToInt32(l.AuxInt)
16977 y := l.Args[1]
16978 x := l.Args[0]
16979 if !(l.Uses == 1) {
16980 break
16981 }
16982 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
16983 v0.AuxInt = int32ToAuxInt(c)
16984 v0.AddArg2(x, y)
16985 b.resetWithControl(BlockARMEQ, v0)
16986 return true
16987 }
16988
16989
16990
16991 for b.Controls[0].Op == OpARMCMPconst {
16992 v_0 := b.Controls[0]
16993 if auxIntToInt32(v_0.AuxInt) != 0 {
16994 break
16995 }
16996 l := v_0.Args[0]
16997 if l.Op != OpARMXORshiftLLreg {
16998 break
16999 }
17000 z := l.Args[2]
17001 x := l.Args[0]
17002 y := l.Args[1]
17003 if !(l.Uses == 1) {
17004 break
17005 }
17006 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
17007 v0.AddArg3(x, y, z)
17008 b.resetWithControl(BlockARMEQ, v0)
17009 return true
17010 }
17011
17012
17013
17014 for b.Controls[0].Op == OpARMCMPconst {
17015 v_0 := b.Controls[0]
17016 if auxIntToInt32(v_0.AuxInt) != 0 {
17017 break
17018 }
17019 l := v_0.Args[0]
17020 if l.Op != OpARMXORshiftRLreg {
17021 break
17022 }
17023 z := l.Args[2]
17024 x := l.Args[0]
17025 y := l.Args[1]
17026 if !(l.Uses == 1) {
17027 break
17028 }
17029 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
17030 v0.AddArg3(x, y, z)
17031 b.resetWithControl(BlockARMEQ, v0)
17032 return true
17033 }
17034
17035
17036
17037 for b.Controls[0].Op == OpARMCMPconst {
17038 v_0 := b.Controls[0]
17039 if auxIntToInt32(v_0.AuxInt) != 0 {
17040 break
17041 }
17042 l := v_0.Args[0]
17043 if l.Op != OpARMXORshiftRAreg {
17044 break
17045 }
17046 z := l.Args[2]
17047 x := l.Args[0]
17048 y := l.Args[1]
17049 if !(l.Uses == 1) {
17050 break
17051 }
17052 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
17053 v0.AddArg3(x, y, z)
17054 b.resetWithControl(BlockARMEQ, v0)
17055 return true
17056 }
17057 case BlockARMGE:
17058
17059
17060
17061 for b.Controls[0].Op == OpARMFlagConstant {
17062 v_0 := b.Controls[0]
17063 fc := auxIntToFlagConstant(v_0.AuxInt)
17064 if !(fc.ge()) {
17065 break
17066 }
17067 b.Reset(BlockFirst)
17068 return true
17069 }
17070
17071
17072
17073 for b.Controls[0].Op == OpARMFlagConstant {
17074 v_0 := b.Controls[0]
17075 fc := auxIntToFlagConstant(v_0.AuxInt)
17076 if !(!fc.ge()) {
17077 break
17078 }
17079 b.Reset(BlockFirst)
17080 b.swapSuccessors()
17081 return true
17082 }
17083
17084
17085 for b.Controls[0].Op == OpARMInvertFlags {
17086 v_0 := b.Controls[0]
17087 cmp := v_0.Args[0]
17088 b.resetWithControl(BlockARMLE, cmp)
17089 return true
17090 }
17091
17092
17093
17094 for b.Controls[0].Op == OpARMCMPconst {
17095 v_0 := b.Controls[0]
17096 if auxIntToInt32(v_0.AuxInt) != 0 {
17097 break
17098 }
17099 l := v_0.Args[0]
17100 if l.Op != OpARMSUB {
17101 break
17102 }
17103 y := l.Args[1]
17104 x := l.Args[0]
17105 if !(l.Uses == 1) {
17106 break
17107 }
17108 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
17109 v0.AddArg2(x, y)
17110 b.resetWithControl(BlockARMGEnoov, v0)
17111 return true
17112 }
17113
17114
17115
17116 for b.Controls[0].Op == OpARMCMPconst {
17117 v_0 := b.Controls[0]
17118 if auxIntToInt32(v_0.AuxInt) != 0 {
17119 break
17120 }
17121 l := v_0.Args[0]
17122 if l.Op != OpARMMULS {
17123 break
17124 }
17125 a := l.Args[2]
17126 x := l.Args[0]
17127 y := l.Args[1]
17128 if !(l.Uses == 1) {
17129 break
17130 }
17131 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
17132 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
17133 v1.AddArg2(x, y)
17134 v0.AddArg2(a, v1)
17135 b.resetWithControl(BlockARMGEnoov, v0)
17136 return true
17137 }
17138
17139
17140
17141 for b.Controls[0].Op == OpARMCMPconst {
17142 v_0 := b.Controls[0]
17143 if auxIntToInt32(v_0.AuxInt) != 0 {
17144 break
17145 }
17146 l := v_0.Args[0]
17147 if l.Op != OpARMSUBconst {
17148 break
17149 }
17150 c := auxIntToInt32(l.AuxInt)
17151 x := l.Args[0]
17152 if !(l.Uses == 1) {
17153 break
17154 }
17155 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
17156 v0.AuxInt = int32ToAuxInt(c)
17157 v0.AddArg(x)
17158 b.resetWithControl(BlockARMGEnoov, v0)
17159 return true
17160 }
17161
17162
17163
17164 for b.Controls[0].Op == OpARMCMPconst {
17165 v_0 := b.Controls[0]
17166 if auxIntToInt32(v_0.AuxInt) != 0 {
17167 break
17168 }
17169 l := v_0.Args[0]
17170 if l.Op != OpARMSUBshiftLL {
17171 break
17172 }
17173 c := auxIntToInt32(l.AuxInt)
17174 y := l.Args[1]
17175 x := l.Args[0]
17176 if !(l.Uses == 1) {
17177 break
17178 }
17179 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
17180 v0.AuxInt = int32ToAuxInt(c)
17181 v0.AddArg2(x, y)
17182 b.resetWithControl(BlockARMGEnoov, v0)
17183 return true
17184 }
17185
17186
17187
17188 for b.Controls[0].Op == OpARMCMPconst {
17189 v_0 := b.Controls[0]
17190 if auxIntToInt32(v_0.AuxInt) != 0 {
17191 break
17192 }
17193 l := v_0.Args[0]
17194 if l.Op != OpARMSUBshiftRL {
17195 break
17196 }
17197 c := auxIntToInt32(l.AuxInt)
17198 y := l.Args[1]
17199 x := l.Args[0]
17200 if !(l.Uses == 1) {
17201 break
17202 }
17203 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
17204 v0.AuxInt = int32ToAuxInt(c)
17205 v0.AddArg2(x, y)
17206 b.resetWithControl(BlockARMGEnoov, v0)
17207 return true
17208 }
17209
17210
17211
17212 for b.Controls[0].Op == OpARMCMPconst {
17213 v_0 := b.Controls[0]
17214 if auxIntToInt32(v_0.AuxInt) != 0 {
17215 break
17216 }
17217 l := v_0.Args[0]
17218 if l.Op != OpARMSUBshiftRA {
17219 break
17220 }
17221 c := auxIntToInt32(l.AuxInt)
17222 y := l.Args[1]
17223 x := l.Args[0]
17224 if !(l.Uses == 1) {
17225 break
17226 }
17227 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
17228 v0.AuxInt = int32ToAuxInt(c)
17229 v0.AddArg2(x, y)
17230 b.resetWithControl(BlockARMGEnoov, v0)
17231 return true
17232 }
17233
17234
17235
17236 for b.Controls[0].Op == OpARMCMPconst {
17237 v_0 := b.Controls[0]
17238 if auxIntToInt32(v_0.AuxInt) != 0 {
17239 break
17240 }
17241 l := v_0.Args[0]
17242 if l.Op != OpARMSUBshiftLLreg {
17243 break
17244 }
17245 z := l.Args[2]
17246 x := l.Args[0]
17247 y := l.Args[1]
17248 if !(l.Uses == 1) {
17249 break
17250 }
17251 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
17252 v0.AddArg3(x, y, z)
17253 b.resetWithControl(BlockARMGEnoov, v0)
17254 return true
17255 }
17256
17257
17258
17259 for b.Controls[0].Op == OpARMCMPconst {
17260 v_0 := b.Controls[0]
17261 if auxIntToInt32(v_0.AuxInt) != 0 {
17262 break
17263 }
17264 l := v_0.Args[0]
17265 if l.Op != OpARMSUBshiftRLreg {
17266 break
17267 }
17268 z := l.Args[2]
17269 x := l.Args[0]
17270 y := l.Args[1]
17271 if !(l.Uses == 1) {
17272 break
17273 }
17274 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
17275 v0.AddArg3(x, y, z)
17276 b.resetWithControl(BlockARMGEnoov, v0)
17277 return true
17278 }
17279
17280
17281
17282 for b.Controls[0].Op == OpARMCMPconst {
17283 v_0 := b.Controls[0]
17284 if auxIntToInt32(v_0.AuxInt) != 0 {
17285 break
17286 }
17287 l := v_0.Args[0]
17288 if l.Op != OpARMSUBshiftRAreg {
17289 break
17290 }
17291 z := l.Args[2]
17292 x := l.Args[0]
17293 y := l.Args[1]
17294 if !(l.Uses == 1) {
17295 break
17296 }
17297 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
17298 v0.AddArg3(x, y, z)
17299 b.resetWithControl(BlockARMGEnoov, v0)
17300 return true
17301 }
17302
17303
17304
17305 for b.Controls[0].Op == OpARMCMPconst {
17306 v_0 := b.Controls[0]
17307 if auxIntToInt32(v_0.AuxInt) != 0 {
17308 break
17309 }
17310 l := v_0.Args[0]
17311 if l.Op != OpARMADD {
17312 break
17313 }
17314 _ = l.Args[1]
17315 l_0 := l.Args[0]
17316 l_1 := l.Args[1]
17317 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17318 x := l_0
17319 y := l_1
17320 if !(l.Uses == 1) {
17321 continue
17322 }
17323 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
17324 v0.AddArg2(x, y)
17325 b.resetWithControl(BlockARMGEnoov, v0)
17326 return true
17327 }
17328 break
17329 }
17330
17331
17332
17333 for b.Controls[0].Op == OpARMCMPconst {
17334 v_0 := b.Controls[0]
17335 if auxIntToInt32(v_0.AuxInt) != 0 {
17336 break
17337 }
17338 l := v_0.Args[0]
17339 if l.Op != OpARMMULA {
17340 break
17341 }
17342 a := l.Args[2]
17343 x := l.Args[0]
17344 y := l.Args[1]
17345 if !(l.Uses == 1) {
17346 break
17347 }
17348 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
17349 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
17350 v1.AddArg2(x, y)
17351 v0.AddArg2(a, v1)
17352 b.resetWithControl(BlockARMGEnoov, v0)
17353 return true
17354 }
17355
17356
17357
17358 for b.Controls[0].Op == OpARMCMPconst {
17359 v_0 := b.Controls[0]
17360 if auxIntToInt32(v_0.AuxInt) != 0 {
17361 break
17362 }
17363 l := v_0.Args[0]
17364 if l.Op != OpARMADDconst {
17365 break
17366 }
17367 c := auxIntToInt32(l.AuxInt)
17368 x := l.Args[0]
17369 if !(l.Uses == 1) {
17370 break
17371 }
17372 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
17373 v0.AuxInt = int32ToAuxInt(c)
17374 v0.AddArg(x)
17375 b.resetWithControl(BlockARMGEnoov, v0)
17376 return true
17377 }
17378
17379
17380
17381 for b.Controls[0].Op == OpARMCMPconst {
17382 v_0 := b.Controls[0]
17383 if auxIntToInt32(v_0.AuxInt) != 0 {
17384 break
17385 }
17386 l := v_0.Args[0]
17387 if l.Op != OpARMADDshiftLL {
17388 break
17389 }
17390 c := auxIntToInt32(l.AuxInt)
17391 y := l.Args[1]
17392 x := l.Args[0]
17393 if !(l.Uses == 1) {
17394 break
17395 }
17396 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
17397 v0.AuxInt = int32ToAuxInt(c)
17398 v0.AddArg2(x, y)
17399 b.resetWithControl(BlockARMGEnoov, v0)
17400 return true
17401 }
17402
17403
17404
17405 for b.Controls[0].Op == OpARMCMPconst {
17406 v_0 := b.Controls[0]
17407 if auxIntToInt32(v_0.AuxInt) != 0 {
17408 break
17409 }
17410 l := v_0.Args[0]
17411 if l.Op != OpARMADDshiftRL {
17412 break
17413 }
17414 c := auxIntToInt32(l.AuxInt)
17415 y := l.Args[1]
17416 x := l.Args[0]
17417 if !(l.Uses == 1) {
17418 break
17419 }
17420 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
17421 v0.AuxInt = int32ToAuxInt(c)
17422 v0.AddArg2(x, y)
17423 b.resetWithControl(BlockARMGEnoov, v0)
17424 return true
17425 }
17426
17427
17428
17429 for b.Controls[0].Op == OpARMCMPconst {
17430 v_0 := b.Controls[0]
17431 if auxIntToInt32(v_0.AuxInt) != 0 {
17432 break
17433 }
17434 l := v_0.Args[0]
17435 if l.Op != OpARMADDshiftRA {
17436 break
17437 }
17438 c := auxIntToInt32(l.AuxInt)
17439 y := l.Args[1]
17440 x := l.Args[0]
17441 if !(l.Uses == 1) {
17442 break
17443 }
17444 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
17445 v0.AuxInt = int32ToAuxInt(c)
17446 v0.AddArg2(x, y)
17447 b.resetWithControl(BlockARMGEnoov, v0)
17448 return true
17449 }
17450
17451
17452
17453 for b.Controls[0].Op == OpARMCMPconst {
17454 v_0 := b.Controls[0]
17455 if auxIntToInt32(v_0.AuxInt) != 0 {
17456 break
17457 }
17458 l := v_0.Args[0]
17459 if l.Op != OpARMADDshiftLLreg {
17460 break
17461 }
17462 z := l.Args[2]
17463 x := l.Args[0]
17464 y := l.Args[1]
17465 if !(l.Uses == 1) {
17466 break
17467 }
17468 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
17469 v0.AddArg3(x, y, z)
17470 b.resetWithControl(BlockARMGEnoov, v0)
17471 return true
17472 }
17473
17474
17475
17476 for b.Controls[0].Op == OpARMCMPconst {
17477 v_0 := b.Controls[0]
17478 if auxIntToInt32(v_0.AuxInt) != 0 {
17479 break
17480 }
17481 l := v_0.Args[0]
17482 if l.Op != OpARMADDshiftRLreg {
17483 break
17484 }
17485 z := l.Args[2]
17486 x := l.Args[0]
17487 y := l.Args[1]
17488 if !(l.Uses == 1) {
17489 break
17490 }
17491 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
17492 v0.AddArg3(x, y, z)
17493 b.resetWithControl(BlockARMGEnoov, v0)
17494 return true
17495 }
17496
17497
17498
17499 for b.Controls[0].Op == OpARMCMPconst {
17500 v_0 := b.Controls[0]
17501 if auxIntToInt32(v_0.AuxInt) != 0 {
17502 break
17503 }
17504 l := v_0.Args[0]
17505 if l.Op != OpARMADDshiftRAreg {
17506 break
17507 }
17508 z := l.Args[2]
17509 x := l.Args[0]
17510 y := l.Args[1]
17511 if !(l.Uses == 1) {
17512 break
17513 }
17514 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
17515 v0.AddArg3(x, y, z)
17516 b.resetWithControl(BlockARMGEnoov, v0)
17517 return true
17518 }
17519
17520
17521
17522 for b.Controls[0].Op == OpARMCMPconst {
17523 v_0 := b.Controls[0]
17524 if auxIntToInt32(v_0.AuxInt) != 0 {
17525 break
17526 }
17527 l := v_0.Args[0]
17528 if l.Op != OpARMAND {
17529 break
17530 }
17531 _ = l.Args[1]
17532 l_0 := l.Args[0]
17533 l_1 := l.Args[1]
17534 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17535 x := l_0
17536 y := l_1
17537 if !(l.Uses == 1) {
17538 continue
17539 }
17540 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
17541 v0.AddArg2(x, y)
17542 b.resetWithControl(BlockARMGEnoov, v0)
17543 return true
17544 }
17545 break
17546 }
17547
17548
17549
17550 for b.Controls[0].Op == OpARMCMPconst {
17551 v_0 := b.Controls[0]
17552 if auxIntToInt32(v_0.AuxInt) != 0 {
17553 break
17554 }
17555 l := v_0.Args[0]
17556 if l.Op != OpARMANDconst {
17557 break
17558 }
17559 c := auxIntToInt32(l.AuxInt)
17560 x := l.Args[0]
17561 if !(l.Uses == 1) {
17562 break
17563 }
17564 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
17565 v0.AuxInt = int32ToAuxInt(c)
17566 v0.AddArg(x)
17567 b.resetWithControl(BlockARMGEnoov, v0)
17568 return true
17569 }
17570
17571
17572
17573 for b.Controls[0].Op == OpARMCMPconst {
17574 v_0 := b.Controls[0]
17575 if auxIntToInt32(v_0.AuxInt) != 0 {
17576 break
17577 }
17578 l := v_0.Args[0]
17579 if l.Op != OpARMANDshiftLL {
17580 break
17581 }
17582 c := auxIntToInt32(l.AuxInt)
17583 y := l.Args[1]
17584 x := l.Args[0]
17585 if !(l.Uses == 1) {
17586 break
17587 }
17588 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
17589 v0.AuxInt = int32ToAuxInt(c)
17590 v0.AddArg2(x, y)
17591 b.resetWithControl(BlockARMGEnoov, v0)
17592 return true
17593 }
17594
17595
17596
17597 for b.Controls[0].Op == OpARMCMPconst {
17598 v_0 := b.Controls[0]
17599 if auxIntToInt32(v_0.AuxInt) != 0 {
17600 break
17601 }
17602 l := v_0.Args[0]
17603 if l.Op != OpARMANDshiftRL {
17604 break
17605 }
17606 c := auxIntToInt32(l.AuxInt)
17607 y := l.Args[1]
17608 x := l.Args[0]
17609 if !(l.Uses == 1) {
17610 break
17611 }
17612 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
17613 v0.AuxInt = int32ToAuxInt(c)
17614 v0.AddArg2(x, y)
17615 b.resetWithControl(BlockARMGEnoov, v0)
17616 return true
17617 }
17618
17619
17620
17621 for b.Controls[0].Op == OpARMCMPconst {
17622 v_0 := b.Controls[0]
17623 if auxIntToInt32(v_0.AuxInt) != 0 {
17624 break
17625 }
17626 l := v_0.Args[0]
17627 if l.Op != OpARMANDshiftRA {
17628 break
17629 }
17630 c := auxIntToInt32(l.AuxInt)
17631 y := l.Args[1]
17632 x := l.Args[0]
17633 if !(l.Uses == 1) {
17634 break
17635 }
17636 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
17637 v0.AuxInt = int32ToAuxInt(c)
17638 v0.AddArg2(x, y)
17639 b.resetWithControl(BlockARMGEnoov, v0)
17640 return true
17641 }
17642
17643
17644
17645 for b.Controls[0].Op == OpARMCMPconst {
17646 v_0 := b.Controls[0]
17647 if auxIntToInt32(v_0.AuxInt) != 0 {
17648 break
17649 }
17650 l := v_0.Args[0]
17651 if l.Op != OpARMANDshiftLLreg {
17652 break
17653 }
17654 z := l.Args[2]
17655 x := l.Args[0]
17656 y := l.Args[1]
17657 if !(l.Uses == 1) {
17658 break
17659 }
17660 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
17661 v0.AddArg3(x, y, z)
17662 b.resetWithControl(BlockARMGEnoov, v0)
17663 return true
17664 }
17665
17666
17667
17668 for b.Controls[0].Op == OpARMCMPconst {
17669 v_0 := b.Controls[0]
17670 if auxIntToInt32(v_0.AuxInt) != 0 {
17671 break
17672 }
17673 l := v_0.Args[0]
17674 if l.Op != OpARMANDshiftRLreg {
17675 break
17676 }
17677 z := l.Args[2]
17678 x := l.Args[0]
17679 y := l.Args[1]
17680 if !(l.Uses == 1) {
17681 break
17682 }
17683 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
17684 v0.AddArg3(x, y, z)
17685 b.resetWithControl(BlockARMGEnoov, v0)
17686 return true
17687 }
17688
17689
17690
17691 for b.Controls[0].Op == OpARMCMPconst {
17692 v_0 := b.Controls[0]
17693 if auxIntToInt32(v_0.AuxInt) != 0 {
17694 break
17695 }
17696 l := v_0.Args[0]
17697 if l.Op != OpARMANDshiftRAreg {
17698 break
17699 }
17700 z := l.Args[2]
17701 x := l.Args[0]
17702 y := l.Args[1]
17703 if !(l.Uses == 1) {
17704 break
17705 }
17706 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
17707 v0.AddArg3(x, y, z)
17708 b.resetWithControl(BlockARMGEnoov, v0)
17709 return true
17710 }
17711
17712
17713
17714 for b.Controls[0].Op == OpARMCMPconst {
17715 v_0 := b.Controls[0]
17716 if auxIntToInt32(v_0.AuxInt) != 0 {
17717 break
17718 }
17719 l := v_0.Args[0]
17720 if l.Op != OpARMXOR {
17721 break
17722 }
17723 _ = l.Args[1]
17724 l_0 := l.Args[0]
17725 l_1 := l.Args[1]
17726 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
17727 x := l_0
17728 y := l_1
17729 if !(l.Uses == 1) {
17730 continue
17731 }
17732 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
17733 v0.AddArg2(x, y)
17734 b.resetWithControl(BlockARMGEnoov, v0)
17735 return true
17736 }
17737 break
17738 }
17739
17740
17741
17742 for b.Controls[0].Op == OpARMCMPconst {
17743 v_0 := b.Controls[0]
17744 if auxIntToInt32(v_0.AuxInt) != 0 {
17745 break
17746 }
17747 l := v_0.Args[0]
17748 if l.Op != OpARMXORconst {
17749 break
17750 }
17751 c := auxIntToInt32(l.AuxInt)
17752 x := l.Args[0]
17753 if !(l.Uses == 1) {
17754 break
17755 }
17756 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
17757 v0.AuxInt = int32ToAuxInt(c)
17758 v0.AddArg(x)
17759 b.resetWithControl(BlockARMGEnoov, v0)
17760 return true
17761 }
17762
17763
17764
17765 for b.Controls[0].Op == OpARMCMPconst {
17766 v_0 := b.Controls[0]
17767 if auxIntToInt32(v_0.AuxInt) != 0 {
17768 break
17769 }
17770 l := v_0.Args[0]
17771 if l.Op != OpARMXORshiftLL {
17772 break
17773 }
17774 c := auxIntToInt32(l.AuxInt)
17775 y := l.Args[1]
17776 x := l.Args[0]
17777 if !(l.Uses == 1) {
17778 break
17779 }
17780 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
17781 v0.AuxInt = int32ToAuxInt(c)
17782 v0.AddArg2(x, y)
17783 b.resetWithControl(BlockARMGEnoov, v0)
17784 return true
17785 }
17786
17787
17788
17789 for b.Controls[0].Op == OpARMCMPconst {
17790 v_0 := b.Controls[0]
17791 if auxIntToInt32(v_0.AuxInt) != 0 {
17792 break
17793 }
17794 l := v_0.Args[0]
17795 if l.Op != OpARMXORshiftRL {
17796 break
17797 }
17798 c := auxIntToInt32(l.AuxInt)
17799 y := l.Args[1]
17800 x := l.Args[0]
17801 if !(l.Uses == 1) {
17802 break
17803 }
17804 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
17805 v0.AuxInt = int32ToAuxInt(c)
17806 v0.AddArg2(x, y)
17807 b.resetWithControl(BlockARMGEnoov, v0)
17808 return true
17809 }
17810
17811
17812
17813 for b.Controls[0].Op == OpARMCMPconst {
17814 v_0 := b.Controls[0]
17815 if auxIntToInt32(v_0.AuxInt) != 0 {
17816 break
17817 }
17818 l := v_0.Args[0]
17819 if l.Op != OpARMXORshiftRA {
17820 break
17821 }
17822 c := auxIntToInt32(l.AuxInt)
17823 y := l.Args[1]
17824 x := l.Args[0]
17825 if !(l.Uses == 1) {
17826 break
17827 }
17828 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
17829 v0.AuxInt = int32ToAuxInt(c)
17830 v0.AddArg2(x, y)
17831 b.resetWithControl(BlockARMGEnoov, v0)
17832 return true
17833 }
17834
17835
17836
17837 for b.Controls[0].Op == OpARMCMPconst {
17838 v_0 := b.Controls[0]
17839 if auxIntToInt32(v_0.AuxInt) != 0 {
17840 break
17841 }
17842 l := v_0.Args[0]
17843 if l.Op != OpARMXORshiftLLreg {
17844 break
17845 }
17846 z := l.Args[2]
17847 x := l.Args[0]
17848 y := l.Args[1]
17849 if !(l.Uses == 1) {
17850 break
17851 }
17852 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
17853 v0.AddArg3(x, y, z)
17854 b.resetWithControl(BlockARMGEnoov, v0)
17855 return true
17856 }
17857
17858
17859
17860 for b.Controls[0].Op == OpARMCMPconst {
17861 v_0 := b.Controls[0]
17862 if auxIntToInt32(v_0.AuxInt) != 0 {
17863 break
17864 }
17865 l := v_0.Args[0]
17866 if l.Op != OpARMXORshiftRLreg {
17867 break
17868 }
17869 z := l.Args[2]
17870 x := l.Args[0]
17871 y := l.Args[1]
17872 if !(l.Uses == 1) {
17873 break
17874 }
17875 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
17876 v0.AddArg3(x, y, z)
17877 b.resetWithControl(BlockARMGEnoov, v0)
17878 return true
17879 }
17880
17881
17882
17883 for b.Controls[0].Op == OpARMCMPconst {
17884 v_0 := b.Controls[0]
17885 if auxIntToInt32(v_0.AuxInt) != 0 {
17886 break
17887 }
17888 l := v_0.Args[0]
17889 if l.Op != OpARMXORshiftRAreg {
17890 break
17891 }
17892 z := l.Args[2]
17893 x := l.Args[0]
17894 y := l.Args[1]
17895 if !(l.Uses == 1) {
17896 break
17897 }
17898 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
17899 v0.AddArg3(x, y, z)
17900 b.resetWithControl(BlockARMGEnoov, v0)
17901 return true
17902 }
17903 case BlockARMGEnoov:
17904
17905
17906
17907 for b.Controls[0].Op == OpARMFlagConstant {
17908 v_0 := b.Controls[0]
17909 fc := auxIntToFlagConstant(v_0.AuxInt)
17910 if !(fc.geNoov()) {
17911 break
17912 }
17913 b.Reset(BlockFirst)
17914 return true
17915 }
17916
17917
17918
17919 for b.Controls[0].Op == OpARMFlagConstant {
17920 v_0 := b.Controls[0]
17921 fc := auxIntToFlagConstant(v_0.AuxInt)
17922 if !(!fc.geNoov()) {
17923 break
17924 }
17925 b.Reset(BlockFirst)
17926 b.swapSuccessors()
17927 return true
17928 }
17929
17930
17931 for b.Controls[0].Op == OpARMInvertFlags {
17932 v_0 := b.Controls[0]
17933 cmp := v_0.Args[0]
17934 b.resetWithControl(BlockARMLEnoov, cmp)
17935 return true
17936 }
17937 case BlockARMGT:
17938
17939
17940
17941 for b.Controls[0].Op == OpARMFlagConstant {
17942 v_0 := b.Controls[0]
17943 fc := auxIntToFlagConstant(v_0.AuxInt)
17944 if !(fc.gt()) {
17945 break
17946 }
17947 b.Reset(BlockFirst)
17948 return true
17949 }
17950
17951
17952
17953 for b.Controls[0].Op == OpARMFlagConstant {
17954 v_0 := b.Controls[0]
17955 fc := auxIntToFlagConstant(v_0.AuxInt)
17956 if !(!fc.gt()) {
17957 break
17958 }
17959 b.Reset(BlockFirst)
17960 b.swapSuccessors()
17961 return true
17962 }
17963
17964
17965 for b.Controls[0].Op == OpARMInvertFlags {
17966 v_0 := b.Controls[0]
17967 cmp := v_0.Args[0]
17968 b.resetWithControl(BlockARMLT, cmp)
17969 return true
17970 }
17971
17972
17973
17974 for b.Controls[0].Op == OpARMCMPconst {
17975 v_0 := b.Controls[0]
17976 if auxIntToInt32(v_0.AuxInt) != 0 {
17977 break
17978 }
17979 l := v_0.Args[0]
17980 if l.Op != OpARMSUB {
17981 break
17982 }
17983 y := l.Args[1]
17984 x := l.Args[0]
17985 if !(l.Uses == 1) {
17986 break
17987 }
17988 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
17989 v0.AddArg2(x, y)
17990 b.resetWithControl(BlockARMGTnoov, v0)
17991 return true
17992 }
17993
17994
17995
17996 for b.Controls[0].Op == OpARMCMPconst {
17997 v_0 := b.Controls[0]
17998 if auxIntToInt32(v_0.AuxInt) != 0 {
17999 break
18000 }
18001 l := v_0.Args[0]
18002 if l.Op != OpARMMULS {
18003 break
18004 }
18005 a := l.Args[2]
18006 x := l.Args[0]
18007 y := l.Args[1]
18008 if !(l.Uses == 1) {
18009 break
18010 }
18011 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
18012 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
18013 v1.AddArg2(x, y)
18014 v0.AddArg2(a, v1)
18015 b.resetWithControl(BlockARMGTnoov, v0)
18016 return true
18017 }
18018
18019
18020
18021 for b.Controls[0].Op == OpARMCMPconst {
18022 v_0 := b.Controls[0]
18023 if auxIntToInt32(v_0.AuxInt) != 0 {
18024 break
18025 }
18026 l := v_0.Args[0]
18027 if l.Op != OpARMSUBconst {
18028 break
18029 }
18030 c := auxIntToInt32(l.AuxInt)
18031 x := l.Args[0]
18032 if !(l.Uses == 1) {
18033 break
18034 }
18035 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
18036 v0.AuxInt = int32ToAuxInt(c)
18037 v0.AddArg(x)
18038 b.resetWithControl(BlockARMGTnoov, v0)
18039 return true
18040 }
18041
18042
18043
18044 for b.Controls[0].Op == OpARMCMPconst {
18045 v_0 := b.Controls[0]
18046 if auxIntToInt32(v_0.AuxInt) != 0 {
18047 break
18048 }
18049 l := v_0.Args[0]
18050 if l.Op != OpARMSUBshiftLL {
18051 break
18052 }
18053 c := auxIntToInt32(l.AuxInt)
18054 y := l.Args[1]
18055 x := l.Args[0]
18056 if !(l.Uses == 1) {
18057 break
18058 }
18059 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
18060 v0.AuxInt = int32ToAuxInt(c)
18061 v0.AddArg2(x, y)
18062 b.resetWithControl(BlockARMGTnoov, v0)
18063 return true
18064 }
18065
18066
18067
18068 for b.Controls[0].Op == OpARMCMPconst {
18069 v_0 := b.Controls[0]
18070 if auxIntToInt32(v_0.AuxInt) != 0 {
18071 break
18072 }
18073 l := v_0.Args[0]
18074 if l.Op != OpARMSUBshiftRL {
18075 break
18076 }
18077 c := auxIntToInt32(l.AuxInt)
18078 y := l.Args[1]
18079 x := l.Args[0]
18080 if !(l.Uses == 1) {
18081 break
18082 }
18083 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
18084 v0.AuxInt = int32ToAuxInt(c)
18085 v0.AddArg2(x, y)
18086 b.resetWithControl(BlockARMGTnoov, v0)
18087 return true
18088 }
18089
18090
18091
18092 for b.Controls[0].Op == OpARMCMPconst {
18093 v_0 := b.Controls[0]
18094 if auxIntToInt32(v_0.AuxInt) != 0 {
18095 break
18096 }
18097 l := v_0.Args[0]
18098 if l.Op != OpARMSUBshiftRA {
18099 break
18100 }
18101 c := auxIntToInt32(l.AuxInt)
18102 y := l.Args[1]
18103 x := l.Args[0]
18104 if !(l.Uses == 1) {
18105 break
18106 }
18107 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
18108 v0.AuxInt = int32ToAuxInt(c)
18109 v0.AddArg2(x, y)
18110 b.resetWithControl(BlockARMGTnoov, v0)
18111 return true
18112 }
18113
18114
18115
18116 for b.Controls[0].Op == OpARMCMPconst {
18117 v_0 := b.Controls[0]
18118 if auxIntToInt32(v_0.AuxInt) != 0 {
18119 break
18120 }
18121 l := v_0.Args[0]
18122 if l.Op != OpARMSUBshiftLLreg {
18123 break
18124 }
18125 z := l.Args[2]
18126 x := l.Args[0]
18127 y := l.Args[1]
18128 if !(l.Uses == 1) {
18129 break
18130 }
18131 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
18132 v0.AddArg3(x, y, z)
18133 b.resetWithControl(BlockARMGTnoov, v0)
18134 return true
18135 }
18136
18137
18138
18139 for b.Controls[0].Op == OpARMCMPconst {
18140 v_0 := b.Controls[0]
18141 if auxIntToInt32(v_0.AuxInt) != 0 {
18142 break
18143 }
18144 l := v_0.Args[0]
18145 if l.Op != OpARMSUBshiftRLreg {
18146 break
18147 }
18148 z := l.Args[2]
18149 x := l.Args[0]
18150 y := l.Args[1]
18151 if !(l.Uses == 1) {
18152 break
18153 }
18154 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
18155 v0.AddArg3(x, y, z)
18156 b.resetWithControl(BlockARMGTnoov, v0)
18157 return true
18158 }
18159
18160
18161
18162 for b.Controls[0].Op == OpARMCMPconst {
18163 v_0 := b.Controls[0]
18164 if auxIntToInt32(v_0.AuxInt) != 0 {
18165 break
18166 }
18167 l := v_0.Args[0]
18168 if l.Op != OpARMSUBshiftRAreg {
18169 break
18170 }
18171 z := l.Args[2]
18172 x := l.Args[0]
18173 y := l.Args[1]
18174 if !(l.Uses == 1) {
18175 break
18176 }
18177 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
18178 v0.AddArg3(x, y, z)
18179 b.resetWithControl(BlockARMGTnoov, v0)
18180 return true
18181 }
18182
18183
18184
18185 for b.Controls[0].Op == OpARMCMPconst {
18186 v_0 := b.Controls[0]
18187 if auxIntToInt32(v_0.AuxInt) != 0 {
18188 break
18189 }
18190 l := v_0.Args[0]
18191 if l.Op != OpARMADD {
18192 break
18193 }
18194 _ = l.Args[1]
18195 l_0 := l.Args[0]
18196 l_1 := l.Args[1]
18197 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18198 x := l_0
18199 y := l_1
18200 if !(l.Uses == 1) {
18201 continue
18202 }
18203 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
18204 v0.AddArg2(x, y)
18205 b.resetWithControl(BlockARMGTnoov, v0)
18206 return true
18207 }
18208 break
18209 }
18210
18211
18212
18213 for b.Controls[0].Op == OpARMCMPconst {
18214 v_0 := b.Controls[0]
18215 if auxIntToInt32(v_0.AuxInt) != 0 {
18216 break
18217 }
18218 l := v_0.Args[0]
18219 if l.Op != OpARMADDconst {
18220 break
18221 }
18222 c := auxIntToInt32(l.AuxInt)
18223 x := l.Args[0]
18224 if !(l.Uses == 1) {
18225 break
18226 }
18227 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
18228 v0.AuxInt = int32ToAuxInt(c)
18229 v0.AddArg(x)
18230 b.resetWithControl(BlockARMGTnoov, v0)
18231 return true
18232 }
18233
18234
18235
18236 for b.Controls[0].Op == OpARMCMPconst {
18237 v_0 := b.Controls[0]
18238 if auxIntToInt32(v_0.AuxInt) != 0 {
18239 break
18240 }
18241 l := v_0.Args[0]
18242 if l.Op != OpARMADDshiftLL {
18243 break
18244 }
18245 c := auxIntToInt32(l.AuxInt)
18246 y := l.Args[1]
18247 x := l.Args[0]
18248 if !(l.Uses == 1) {
18249 break
18250 }
18251 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
18252 v0.AuxInt = int32ToAuxInt(c)
18253 v0.AddArg2(x, y)
18254 b.resetWithControl(BlockARMGTnoov, v0)
18255 return true
18256 }
18257
18258
18259
18260 for b.Controls[0].Op == OpARMCMPconst {
18261 v_0 := b.Controls[0]
18262 if auxIntToInt32(v_0.AuxInt) != 0 {
18263 break
18264 }
18265 l := v_0.Args[0]
18266 if l.Op != OpARMADDshiftRL {
18267 break
18268 }
18269 c := auxIntToInt32(l.AuxInt)
18270 y := l.Args[1]
18271 x := l.Args[0]
18272 if !(l.Uses == 1) {
18273 break
18274 }
18275 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
18276 v0.AuxInt = int32ToAuxInt(c)
18277 v0.AddArg2(x, y)
18278 b.resetWithControl(BlockARMGTnoov, v0)
18279 return true
18280 }
18281
18282
18283
18284 for b.Controls[0].Op == OpARMCMPconst {
18285 v_0 := b.Controls[0]
18286 if auxIntToInt32(v_0.AuxInt) != 0 {
18287 break
18288 }
18289 l := v_0.Args[0]
18290 if l.Op != OpARMADDshiftRA {
18291 break
18292 }
18293 c := auxIntToInt32(l.AuxInt)
18294 y := l.Args[1]
18295 x := l.Args[0]
18296 if !(l.Uses == 1) {
18297 break
18298 }
18299 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
18300 v0.AuxInt = int32ToAuxInt(c)
18301 v0.AddArg2(x, y)
18302 b.resetWithControl(BlockARMGTnoov, v0)
18303 return true
18304 }
18305
18306
18307
18308 for b.Controls[0].Op == OpARMCMPconst {
18309 v_0 := b.Controls[0]
18310 if auxIntToInt32(v_0.AuxInt) != 0 {
18311 break
18312 }
18313 l := v_0.Args[0]
18314 if l.Op != OpARMADDshiftLLreg {
18315 break
18316 }
18317 z := l.Args[2]
18318 x := l.Args[0]
18319 y := l.Args[1]
18320 if !(l.Uses == 1) {
18321 break
18322 }
18323 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
18324 v0.AddArg3(x, y, z)
18325 b.resetWithControl(BlockARMGTnoov, v0)
18326 return true
18327 }
18328
18329
18330
18331 for b.Controls[0].Op == OpARMCMPconst {
18332 v_0 := b.Controls[0]
18333 if auxIntToInt32(v_0.AuxInt) != 0 {
18334 break
18335 }
18336 l := v_0.Args[0]
18337 if l.Op != OpARMADDshiftRLreg {
18338 break
18339 }
18340 z := l.Args[2]
18341 x := l.Args[0]
18342 y := l.Args[1]
18343 if !(l.Uses == 1) {
18344 break
18345 }
18346 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
18347 v0.AddArg3(x, y, z)
18348 b.resetWithControl(BlockARMGTnoov, v0)
18349 return true
18350 }
18351
18352
18353
18354 for b.Controls[0].Op == OpARMCMPconst {
18355 v_0 := b.Controls[0]
18356 if auxIntToInt32(v_0.AuxInt) != 0 {
18357 break
18358 }
18359 l := v_0.Args[0]
18360 if l.Op != OpARMADDshiftRAreg {
18361 break
18362 }
18363 z := l.Args[2]
18364 x := l.Args[0]
18365 y := l.Args[1]
18366 if !(l.Uses == 1) {
18367 break
18368 }
18369 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
18370 v0.AddArg3(x, y, z)
18371 b.resetWithControl(BlockARMGTnoov, v0)
18372 return true
18373 }
18374
18375
18376
18377 for b.Controls[0].Op == OpARMCMPconst {
18378 v_0 := b.Controls[0]
18379 if auxIntToInt32(v_0.AuxInt) != 0 {
18380 break
18381 }
18382 l := v_0.Args[0]
18383 if l.Op != OpARMMULA {
18384 break
18385 }
18386 a := l.Args[2]
18387 x := l.Args[0]
18388 y := l.Args[1]
18389 if !(l.Uses == 1) {
18390 break
18391 }
18392 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
18393 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
18394 v1.AddArg2(x, y)
18395 v0.AddArg2(a, v1)
18396 b.resetWithControl(BlockARMGTnoov, v0)
18397 return true
18398 }
18399
18400
18401
18402 for b.Controls[0].Op == OpARMCMPconst {
18403 v_0 := b.Controls[0]
18404 if auxIntToInt32(v_0.AuxInt) != 0 {
18405 break
18406 }
18407 l := v_0.Args[0]
18408 if l.Op != OpARMAND {
18409 break
18410 }
18411 _ = l.Args[1]
18412 l_0 := l.Args[0]
18413 l_1 := l.Args[1]
18414 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18415 x := l_0
18416 y := l_1
18417 if !(l.Uses == 1) {
18418 continue
18419 }
18420 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
18421 v0.AddArg2(x, y)
18422 b.resetWithControl(BlockARMGTnoov, v0)
18423 return true
18424 }
18425 break
18426 }
18427
18428
18429
18430 for b.Controls[0].Op == OpARMCMPconst {
18431 v_0 := b.Controls[0]
18432 if auxIntToInt32(v_0.AuxInt) != 0 {
18433 break
18434 }
18435 l := v_0.Args[0]
18436 if l.Op != OpARMANDconst {
18437 break
18438 }
18439 c := auxIntToInt32(l.AuxInt)
18440 x := l.Args[0]
18441 if !(l.Uses == 1) {
18442 break
18443 }
18444 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
18445 v0.AuxInt = int32ToAuxInt(c)
18446 v0.AddArg(x)
18447 b.resetWithControl(BlockARMGTnoov, v0)
18448 return true
18449 }
18450
18451
18452
18453 for b.Controls[0].Op == OpARMCMPconst {
18454 v_0 := b.Controls[0]
18455 if auxIntToInt32(v_0.AuxInt) != 0 {
18456 break
18457 }
18458 l := v_0.Args[0]
18459 if l.Op != OpARMANDshiftLL {
18460 break
18461 }
18462 c := auxIntToInt32(l.AuxInt)
18463 y := l.Args[1]
18464 x := l.Args[0]
18465 if !(l.Uses == 1) {
18466 break
18467 }
18468 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
18469 v0.AuxInt = int32ToAuxInt(c)
18470 v0.AddArg2(x, y)
18471 b.resetWithControl(BlockARMGTnoov, v0)
18472 return true
18473 }
18474
18475
18476
18477 for b.Controls[0].Op == OpARMCMPconst {
18478 v_0 := b.Controls[0]
18479 if auxIntToInt32(v_0.AuxInt) != 0 {
18480 break
18481 }
18482 l := v_0.Args[0]
18483 if l.Op != OpARMANDshiftRL {
18484 break
18485 }
18486 c := auxIntToInt32(l.AuxInt)
18487 y := l.Args[1]
18488 x := l.Args[0]
18489 if !(l.Uses == 1) {
18490 break
18491 }
18492 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
18493 v0.AuxInt = int32ToAuxInt(c)
18494 v0.AddArg2(x, y)
18495 b.resetWithControl(BlockARMGTnoov, v0)
18496 return true
18497 }
18498
18499
18500
18501 for b.Controls[0].Op == OpARMCMPconst {
18502 v_0 := b.Controls[0]
18503 if auxIntToInt32(v_0.AuxInt) != 0 {
18504 break
18505 }
18506 l := v_0.Args[0]
18507 if l.Op != OpARMANDshiftRA {
18508 break
18509 }
18510 c := auxIntToInt32(l.AuxInt)
18511 y := l.Args[1]
18512 x := l.Args[0]
18513 if !(l.Uses == 1) {
18514 break
18515 }
18516 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
18517 v0.AuxInt = int32ToAuxInt(c)
18518 v0.AddArg2(x, y)
18519 b.resetWithControl(BlockARMGTnoov, v0)
18520 return true
18521 }
18522
18523
18524
18525 for b.Controls[0].Op == OpARMCMPconst {
18526 v_0 := b.Controls[0]
18527 if auxIntToInt32(v_0.AuxInt) != 0 {
18528 break
18529 }
18530 l := v_0.Args[0]
18531 if l.Op != OpARMANDshiftLLreg {
18532 break
18533 }
18534 z := l.Args[2]
18535 x := l.Args[0]
18536 y := l.Args[1]
18537 if !(l.Uses == 1) {
18538 break
18539 }
18540 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
18541 v0.AddArg3(x, y, z)
18542 b.resetWithControl(BlockARMGTnoov, v0)
18543 return true
18544 }
18545
18546
18547
18548 for b.Controls[0].Op == OpARMCMPconst {
18549 v_0 := b.Controls[0]
18550 if auxIntToInt32(v_0.AuxInt) != 0 {
18551 break
18552 }
18553 l := v_0.Args[0]
18554 if l.Op != OpARMANDshiftRLreg {
18555 break
18556 }
18557 z := l.Args[2]
18558 x := l.Args[0]
18559 y := l.Args[1]
18560 if !(l.Uses == 1) {
18561 break
18562 }
18563 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
18564 v0.AddArg3(x, y, z)
18565 b.resetWithControl(BlockARMGTnoov, v0)
18566 return true
18567 }
18568
18569
18570
18571 for b.Controls[0].Op == OpARMCMPconst {
18572 v_0 := b.Controls[0]
18573 if auxIntToInt32(v_0.AuxInt) != 0 {
18574 break
18575 }
18576 l := v_0.Args[0]
18577 if l.Op != OpARMANDshiftRAreg {
18578 break
18579 }
18580 z := l.Args[2]
18581 x := l.Args[0]
18582 y := l.Args[1]
18583 if !(l.Uses == 1) {
18584 break
18585 }
18586 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
18587 v0.AddArg3(x, y, z)
18588 b.resetWithControl(BlockARMGTnoov, v0)
18589 return true
18590 }
18591
18592
18593
18594 for b.Controls[0].Op == OpARMCMPconst {
18595 v_0 := b.Controls[0]
18596 if auxIntToInt32(v_0.AuxInt) != 0 {
18597 break
18598 }
18599 l := v_0.Args[0]
18600 if l.Op != OpARMXOR {
18601 break
18602 }
18603 _ = l.Args[1]
18604 l_0 := l.Args[0]
18605 l_1 := l.Args[1]
18606 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
18607 x := l_0
18608 y := l_1
18609 if !(l.Uses == 1) {
18610 continue
18611 }
18612 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
18613 v0.AddArg2(x, y)
18614 b.resetWithControl(BlockARMGTnoov, v0)
18615 return true
18616 }
18617 break
18618 }
18619
18620
18621
18622 for b.Controls[0].Op == OpARMCMPconst {
18623 v_0 := b.Controls[0]
18624 if auxIntToInt32(v_0.AuxInt) != 0 {
18625 break
18626 }
18627 l := v_0.Args[0]
18628 if l.Op != OpARMXORconst {
18629 break
18630 }
18631 c := auxIntToInt32(l.AuxInt)
18632 x := l.Args[0]
18633 if !(l.Uses == 1) {
18634 break
18635 }
18636 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
18637 v0.AuxInt = int32ToAuxInt(c)
18638 v0.AddArg(x)
18639 b.resetWithControl(BlockARMGTnoov, v0)
18640 return true
18641 }
18642
18643
18644
18645 for b.Controls[0].Op == OpARMCMPconst {
18646 v_0 := b.Controls[0]
18647 if auxIntToInt32(v_0.AuxInt) != 0 {
18648 break
18649 }
18650 l := v_0.Args[0]
18651 if l.Op != OpARMXORshiftLL {
18652 break
18653 }
18654 c := auxIntToInt32(l.AuxInt)
18655 y := l.Args[1]
18656 x := l.Args[0]
18657 if !(l.Uses == 1) {
18658 break
18659 }
18660 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
18661 v0.AuxInt = int32ToAuxInt(c)
18662 v0.AddArg2(x, y)
18663 b.resetWithControl(BlockARMGTnoov, v0)
18664 return true
18665 }
18666
18667
18668
18669 for b.Controls[0].Op == OpARMCMPconst {
18670 v_0 := b.Controls[0]
18671 if auxIntToInt32(v_0.AuxInt) != 0 {
18672 break
18673 }
18674 l := v_0.Args[0]
18675 if l.Op != OpARMXORshiftRL {
18676 break
18677 }
18678 c := auxIntToInt32(l.AuxInt)
18679 y := l.Args[1]
18680 x := l.Args[0]
18681 if !(l.Uses == 1) {
18682 break
18683 }
18684 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
18685 v0.AuxInt = int32ToAuxInt(c)
18686 v0.AddArg2(x, y)
18687 b.resetWithControl(BlockARMGTnoov, v0)
18688 return true
18689 }
18690
18691
18692
18693 for b.Controls[0].Op == OpARMCMPconst {
18694 v_0 := b.Controls[0]
18695 if auxIntToInt32(v_0.AuxInt) != 0 {
18696 break
18697 }
18698 l := v_0.Args[0]
18699 if l.Op != OpARMXORshiftRA {
18700 break
18701 }
18702 c := auxIntToInt32(l.AuxInt)
18703 y := l.Args[1]
18704 x := l.Args[0]
18705 if !(l.Uses == 1) {
18706 break
18707 }
18708 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
18709 v0.AuxInt = int32ToAuxInt(c)
18710 v0.AddArg2(x, y)
18711 b.resetWithControl(BlockARMGTnoov, v0)
18712 return true
18713 }
18714
18715
18716
18717 for b.Controls[0].Op == OpARMCMPconst {
18718 v_0 := b.Controls[0]
18719 if auxIntToInt32(v_0.AuxInt) != 0 {
18720 break
18721 }
18722 l := v_0.Args[0]
18723 if l.Op != OpARMXORshiftLLreg {
18724 break
18725 }
18726 z := l.Args[2]
18727 x := l.Args[0]
18728 y := l.Args[1]
18729 if !(l.Uses == 1) {
18730 break
18731 }
18732 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
18733 v0.AddArg3(x, y, z)
18734 b.resetWithControl(BlockARMGTnoov, v0)
18735 return true
18736 }
18737
18738
18739
18740 for b.Controls[0].Op == OpARMCMPconst {
18741 v_0 := b.Controls[0]
18742 if auxIntToInt32(v_0.AuxInt) != 0 {
18743 break
18744 }
18745 l := v_0.Args[0]
18746 if l.Op != OpARMXORshiftRLreg {
18747 break
18748 }
18749 z := l.Args[2]
18750 x := l.Args[0]
18751 y := l.Args[1]
18752 if !(l.Uses == 1) {
18753 break
18754 }
18755 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
18756 v0.AddArg3(x, y, z)
18757 b.resetWithControl(BlockARMGTnoov, v0)
18758 return true
18759 }
18760
18761
18762
18763 for b.Controls[0].Op == OpARMCMPconst {
18764 v_0 := b.Controls[0]
18765 if auxIntToInt32(v_0.AuxInt) != 0 {
18766 break
18767 }
18768 l := v_0.Args[0]
18769 if l.Op != OpARMXORshiftRAreg {
18770 break
18771 }
18772 z := l.Args[2]
18773 x := l.Args[0]
18774 y := l.Args[1]
18775 if !(l.Uses == 1) {
18776 break
18777 }
18778 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
18779 v0.AddArg3(x, y, z)
18780 b.resetWithControl(BlockARMGTnoov, v0)
18781 return true
18782 }
18783 case BlockARMGTnoov:
18784
18785
18786
18787 for b.Controls[0].Op == OpARMFlagConstant {
18788 v_0 := b.Controls[0]
18789 fc := auxIntToFlagConstant(v_0.AuxInt)
18790 if !(fc.gtNoov()) {
18791 break
18792 }
18793 b.Reset(BlockFirst)
18794 return true
18795 }
18796
18797
18798
18799 for b.Controls[0].Op == OpARMFlagConstant {
18800 v_0 := b.Controls[0]
18801 fc := auxIntToFlagConstant(v_0.AuxInt)
18802 if !(!fc.gtNoov()) {
18803 break
18804 }
18805 b.Reset(BlockFirst)
18806 b.swapSuccessors()
18807 return true
18808 }
18809
18810
18811 for b.Controls[0].Op == OpARMInvertFlags {
18812 v_0 := b.Controls[0]
18813 cmp := v_0.Args[0]
18814 b.resetWithControl(BlockARMLTnoov, cmp)
18815 return true
18816 }
18817 case BlockIf:
18818
18819
18820 for b.Controls[0].Op == OpARMEqual {
18821 v_0 := b.Controls[0]
18822 cc := v_0.Args[0]
18823 b.resetWithControl(BlockARMEQ, cc)
18824 return true
18825 }
18826
18827
18828 for b.Controls[0].Op == OpARMNotEqual {
18829 v_0 := b.Controls[0]
18830 cc := v_0.Args[0]
18831 b.resetWithControl(BlockARMNE, cc)
18832 return true
18833 }
18834
18835
18836 for b.Controls[0].Op == OpARMLessThan {
18837 v_0 := b.Controls[0]
18838 cc := v_0.Args[0]
18839 b.resetWithControl(BlockARMLT, cc)
18840 return true
18841 }
18842
18843
18844 for b.Controls[0].Op == OpARMLessThanU {
18845 v_0 := b.Controls[0]
18846 cc := v_0.Args[0]
18847 b.resetWithControl(BlockARMULT, cc)
18848 return true
18849 }
18850
18851
18852 for b.Controls[0].Op == OpARMLessEqual {
18853 v_0 := b.Controls[0]
18854 cc := v_0.Args[0]
18855 b.resetWithControl(BlockARMLE, cc)
18856 return true
18857 }
18858
18859
18860 for b.Controls[0].Op == OpARMLessEqualU {
18861 v_0 := b.Controls[0]
18862 cc := v_0.Args[0]
18863 b.resetWithControl(BlockARMULE, cc)
18864 return true
18865 }
18866
18867
18868 for b.Controls[0].Op == OpARMGreaterThan {
18869 v_0 := b.Controls[0]
18870 cc := v_0.Args[0]
18871 b.resetWithControl(BlockARMGT, cc)
18872 return true
18873 }
18874
18875
18876 for b.Controls[0].Op == OpARMGreaterThanU {
18877 v_0 := b.Controls[0]
18878 cc := v_0.Args[0]
18879 b.resetWithControl(BlockARMUGT, cc)
18880 return true
18881 }
18882
18883
18884 for b.Controls[0].Op == OpARMGreaterEqual {
18885 v_0 := b.Controls[0]
18886 cc := v_0.Args[0]
18887 b.resetWithControl(BlockARMGE, cc)
18888 return true
18889 }
18890
18891
18892 for b.Controls[0].Op == OpARMGreaterEqualU {
18893 v_0 := b.Controls[0]
18894 cc := v_0.Args[0]
18895 b.resetWithControl(BlockARMUGE, cc)
18896 return true
18897 }
18898
18899
18900 for {
18901 cond := b.Controls[0]
18902 v0 := b.NewValue0(cond.Pos, OpARMCMPconst, types.TypeFlags)
18903 v0.AuxInt = int32ToAuxInt(0)
18904 v0.AddArg(cond)
18905 b.resetWithControl(BlockARMNE, v0)
18906 return true
18907 }
18908 case BlockARMLE:
18909
18910
18911
18912 for b.Controls[0].Op == OpARMFlagConstant {
18913 v_0 := b.Controls[0]
18914 fc := auxIntToFlagConstant(v_0.AuxInt)
18915 if !(fc.le()) {
18916 break
18917 }
18918 b.Reset(BlockFirst)
18919 return true
18920 }
18921
18922
18923
18924 for b.Controls[0].Op == OpARMFlagConstant {
18925 v_0 := b.Controls[0]
18926 fc := auxIntToFlagConstant(v_0.AuxInt)
18927 if !(!fc.le()) {
18928 break
18929 }
18930 b.Reset(BlockFirst)
18931 b.swapSuccessors()
18932 return true
18933 }
18934
18935
18936 for b.Controls[0].Op == OpARMInvertFlags {
18937 v_0 := b.Controls[0]
18938 cmp := v_0.Args[0]
18939 b.resetWithControl(BlockARMGE, cmp)
18940 return true
18941 }
18942
18943
18944
18945 for b.Controls[0].Op == OpARMCMPconst {
18946 v_0 := b.Controls[0]
18947 if auxIntToInt32(v_0.AuxInt) != 0 {
18948 break
18949 }
18950 l := v_0.Args[0]
18951 if l.Op != OpARMSUB {
18952 break
18953 }
18954 y := l.Args[1]
18955 x := l.Args[0]
18956 if !(l.Uses == 1) {
18957 break
18958 }
18959 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
18960 v0.AddArg2(x, y)
18961 b.resetWithControl(BlockARMLEnoov, v0)
18962 return true
18963 }
18964
18965
18966
18967 for b.Controls[0].Op == OpARMCMPconst {
18968 v_0 := b.Controls[0]
18969 if auxIntToInt32(v_0.AuxInt) != 0 {
18970 break
18971 }
18972 l := v_0.Args[0]
18973 if l.Op != OpARMMULS {
18974 break
18975 }
18976 a := l.Args[2]
18977 x := l.Args[0]
18978 y := l.Args[1]
18979 if !(l.Uses == 1) {
18980 break
18981 }
18982 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
18983 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
18984 v1.AddArg2(x, y)
18985 v0.AddArg2(a, v1)
18986 b.resetWithControl(BlockARMLEnoov, v0)
18987 return true
18988 }
18989
18990
18991
18992 for b.Controls[0].Op == OpARMCMPconst {
18993 v_0 := b.Controls[0]
18994 if auxIntToInt32(v_0.AuxInt) != 0 {
18995 break
18996 }
18997 l := v_0.Args[0]
18998 if l.Op != OpARMSUBconst {
18999 break
19000 }
19001 c := auxIntToInt32(l.AuxInt)
19002 x := l.Args[0]
19003 if !(l.Uses == 1) {
19004 break
19005 }
19006 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
19007 v0.AuxInt = int32ToAuxInt(c)
19008 v0.AddArg(x)
19009 b.resetWithControl(BlockARMLEnoov, v0)
19010 return true
19011 }
19012
19013
19014
19015 for b.Controls[0].Op == OpARMCMPconst {
19016 v_0 := b.Controls[0]
19017 if auxIntToInt32(v_0.AuxInt) != 0 {
19018 break
19019 }
19020 l := v_0.Args[0]
19021 if l.Op != OpARMSUBshiftLL {
19022 break
19023 }
19024 c := auxIntToInt32(l.AuxInt)
19025 y := l.Args[1]
19026 x := l.Args[0]
19027 if !(l.Uses == 1) {
19028 break
19029 }
19030 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
19031 v0.AuxInt = int32ToAuxInt(c)
19032 v0.AddArg2(x, y)
19033 b.resetWithControl(BlockARMLEnoov, v0)
19034 return true
19035 }
19036
19037
19038
19039 for b.Controls[0].Op == OpARMCMPconst {
19040 v_0 := b.Controls[0]
19041 if auxIntToInt32(v_0.AuxInt) != 0 {
19042 break
19043 }
19044 l := v_0.Args[0]
19045 if l.Op != OpARMSUBshiftRL {
19046 break
19047 }
19048 c := auxIntToInt32(l.AuxInt)
19049 y := l.Args[1]
19050 x := l.Args[0]
19051 if !(l.Uses == 1) {
19052 break
19053 }
19054 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
19055 v0.AuxInt = int32ToAuxInt(c)
19056 v0.AddArg2(x, y)
19057 b.resetWithControl(BlockARMLEnoov, v0)
19058 return true
19059 }
19060
19061
19062
19063 for b.Controls[0].Op == OpARMCMPconst {
19064 v_0 := b.Controls[0]
19065 if auxIntToInt32(v_0.AuxInt) != 0 {
19066 break
19067 }
19068 l := v_0.Args[0]
19069 if l.Op != OpARMSUBshiftRA {
19070 break
19071 }
19072 c := auxIntToInt32(l.AuxInt)
19073 y := l.Args[1]
19074 x := l.Args[0]
19075 if !(l.Uses == 1) {
19076 break
19077 }
19078 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
19079 v0.AuxInt = int32ToAuxInt(c)
19080 v0.AddArg2(x, y)
19081 b.resetWithControl(BlockARMLEnoov, v0)
19082 return true
19083 }
19084
19085
19086
19087 for b.Controls[0].Op == OpARMCMPconst {
19088 v_0 := b.Controls[0]
19089 if auxIntToInt32(v_0.AuxInt) != 0 {
19090 break
19091 }
19092 l := v_0.Args[0]
19093 if l.Op != OpARMSUBshiftLLreg {
19094 break
19095 }
19096 z := l.Args[2]
19097 x := l.Args[0]
19098 y := l.Args[1]
19099 if !(l.Uses == 1) {
19100 break
19101 }
19102 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
19103 v0.AddArg3(x, y, z)
19104 b.resetWithControl(BlockARMLEnoov, v0)
19105 return true
19106 }
19107
19108
19109
19110 for b.Controls[0].Op == OpARMCMPconst {
19111 v_0 := b.Controls[0]
19112 if auxIntToInt32(v_0.AuxInt) != 0 {
19113 break
19114 }
19115 l := v_0.Args[0]
19116 if l.Op != OpARMSUBshiftRLreg {
19117 break
19118 }
19119 z := l.Args[2]
19120 x := l.Args[0]
19121 y := l.Args[1]
19122 if !(l.Uses == 1) {
19123 break
19124 }
19125 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
19126 v0.AddArg3(x, y, z)
19127 b.resetWithControl(BlockARMLEnoov, v0)
19128 return true
19129 }
19130
19131
19132
19133 for b.Controls[0].Op == OpARMCMPconst {
19134 v_0 := b.Controls[0]
19135 if auxIntToInt32(v_0.AuxInt) != 0 {
19136 break
19137 }
19138 l := v_0.Args[0]
19139 if l.Op != OpARMSUBshiftRAreg {
19140 break
19141 }
19142 z := l.Args[2]
19143 x := l.Args[0]
19144 y := l.Args[1]
19145 if !(l.Uses == 1) {
19146 break
19147 }
19148 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
19149 v0.AddArg3(x, y, z)
19150 b.resetWithControl(BlockARMLEnoov, v0)
19151 return true
19152 }
19153
19154
19155
19156 for b.Controls[0].Op == OpARMCMPconst {
19157 v_0 := b.Controls[0]
19158 if auxIntToInt32(v_0.AuxInt) != 0 {
19159 break
19160 }
19161 l := v_0.Args[0]
19162 if l.Op != OpARMADD {
19163 break
19164 }
19165 _ = l.Args[1]
19166 l_0 := l.Args[0]
19167 l_1 := l.Args[1]
19168 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19169 x := l_0
19170 y := l_1
19171 if !(l.Uses == 1) {
19172 continue
19173 }
19174 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
19175 v0.AddArg2(x, y)
19176 b.resetWithControl(BlockARMLEnoov, v0)
19177 return true
19178 }
19179 break
19180 }
19181
19182
19183
19184 for b.Controls[0].Op == OpARMCMPconst {
19185 v_0 := b.Controls[0]
19186 if auxIntToInt32(v_0.AuxInt) != 0 {
19187 break
19188 }
19189 l := v_0.Args[0]
19190 if l.Op != OpARMMULA {
19191 break
19192 }
19193 a := l.Args[2]
19194 x := l.Args[0]
19195 y := l.Args[1]
19196 if !(l.Uses == 1) {
19197 break
19198 }
19199 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
19200 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
19201 v1.AddArg2(x, y)
19202 v0.AddArg2(a, v1)
19203 b.resetWithControl(BlockARMLEnoov, v0)
19204 return true
19205 }
19206
19207
19208
19209 for b.Controls[0].Op == OpARMCMPconst {
19210 v_0 := b.Controls[0]
19211 if auxIntToInt32(v_0.AuxInt) != 0 {
19212 break
19213 }
19214 l := v_0.Args[0]
19215 if l.Op != OpARMADDconst {
19216 break
19217 }
19218 c := auxIntToInt32(l.AuxInt)
19219 x := l.Args[0]
19220 if !(l.Uses == 1) {
19221 break
19222 }
19223 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
19224 v0.AuxInt = int32ToAuxInt(c)
19225 v0.AddArg(x)
19226 b.resetWithControl(BlockARMLEnoov, v0)
19227 return true
19228 }
19229
19230
19231
19232 for b.Controls[0].Op == OpARMCMPconst {
19233 v_0 := b.Controls[0]
19234 if auxIntToInt32(v_0.AuxInt) != 0 {
19235 break
19236 }
19237 l := v_0.Args[0]
19238 if l.Op != OpARMADDshiftLL {
19239 break
19240 }
19241 c := auxIntToInt32(l.AuxInt)
19242 y := l.Args[1]
19243 x := l.Args[0]
19244 if !(l.Uses == 1) {
19245 break
19246 }
19247 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
19248 v0.AuxInt = int32ToAuxInt(c)
19249 v0.AddArg2(x, y)
19250 b.resetWithControl(BlockARMLEnoov, v0)
19251 return true
19252 }
19253
19254
19255
19256 for b.Controls[0].Op == OpARMCMPconst {
19257 v_0 := b.Controls[0]
19258 if auxIntToInt32(v_0.AuxInt) != 0 {
19259 break
19260 }
19261 l := v_0.Args[0]
19262 if l.Op != OpARMADDshiftRL {
19263 break
19264 }
19265 c := auxIntToInt32(l.AuxInt)
19266 y := l.Args[1]
19267 x := l.Args[0]
19268 if !(l.Uses == 1) {
19269 break
19270 }
19271 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
19272 v0.AuxInt = int32ToAuxInt(c)
19273 v0.AddArg2(x, y)
19274 b.resetWithControl(BlockARMLEnoov, v0)
19275 return true
19276 }
19277
19278
19279
19280 for b.Controls[0].Op == OpARMCMPconst {
19281 v_0 := b.Controls[0]
19282 if auxIntToInt32(v_0.AuxInt) != 0 {
19283 break
19284 }
19285 l := v_0.Args[0]
19286 if l.Op != OpARMADDshiftRA {
19287 break
19288 }
19289 c := auxIntToInt32(l.AuxInt)
19290 y := l.Args[1]
19291 x := l.Args[0]
19292 if !(l.Uses == 1) {
19293 break
19294 }
19295 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
19296 v0.AuxInt = int32ToAuxInt(c)
19297 v0.AddArg2(x, y)
19298 b.resetWithControl(BlockARMLEnoov, v0)
19299 return true
19300 }
19301
19302
19303
19304 for b.Controls[0].Op == OpARMCMPconst {
19305 v_0 := b.Controls[0]
19306 if auxIntToInt32(v_0.AuxInt) != 0 {
19307 break
19308 }
19309 l := v_0.Args[0]
19310 if l.Op != OpARMADDshiftLLreg {
19311 break
19312 }
19313 z := l.Args[2]
19314 x := l.Args[0]
19315 y := l.Args[1]
19316 if !(l.Uses == 1) {
19317 break
19318 }
19319 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
19320 v0.AddArg3(x, y, z)
19321 b.resetWithControl(BlockARMLEnoov, v0)
19322 return true
19323 }
19324
19325
19326
19327 for b.Controls[0].Op == OpARMCMPconst {
19328 v_0 := b.Controls[0]
19329 if auxIntToInt32(v_0.AuxInt) != 0 {
19330 break
19331 }
19332 l := v_0.Args[0]
19333 if l.Op != OpARMADDshiftRLreg {
19334 break
19335 }
19336 z := l.Args[2]
19337 x := l.Args[0]
19338 y := l.Args[1]
19339 if !(l.Uses == 1) {
19340 break
19341 }
19342 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
19343 v0.AddArg3(x, y, z)
19344 b.resetWithControl(BlockARMLEnoov, v0)
19345 return true
19346 }
19347
19348
19349
19350 for b.Controls[0].Op == OpARMCMPconst {
19351 v_0 := b.Controls[0]
19352 if auxIntToInt32(v_0.AuxInt) != 0 {
19353 break
19354 }
19355 l := v_0.Args[0]
19356 if l.Op != OpARMADDshiftRAreg {
19357 break
19358 }
19359 z := l.Args[2]
19360 x := l.Args[0]
19361 y := l.Args[1]
19362 if !(l.Uses == 1) {
19363 break
19364 }
19365 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
19366 v0.AddArg3(x, y, z)
19367 b.resetWithControl(BlockARMLEnoov, v0)
19368 return true
19369 }
19370
19371
19372
19373 for b.Controls[0].Op == OpARMCMPconst {
19374 v_0 := b.Controls[0]
19375 if auxIntToInt32(v_0.AuxInt) != 0 {
19376 break
19377 }
19378 l := v_0.Args[0]
19379 if l.Op != OpARMAND {
19380 break
19381 }
19382 _ = l.Args[1]
19383 l_0 := l.Args[0]
19384 l_1 := l.Args[1]
19385 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19386 x := l_0
19387 y := l_1
19388 if !(l.Uses == 1) {
19389 continue
19390 }
19391 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
19392 v0.AddArg2(x, y)
19393 b.resetWithControl(BlockARMLEnoov, v0)
19394 return true
19395 }
19396 break
19397 }
19398
19399
19400
19401 for b.Controls[0].Op == OpARMCMPconst {
19402 v_0 := b.Controls[0]
19403 if auxIntToInt32(v_0.AuxInt) != 0 {
19404 break
19405 }
19406 l := v_0.Args[0]
19407 if l.Op != OpARMANDconst {
19408 break
19409 }
19410 c := auxIntToInt32(l.AuxInt)
19411 x := l.Args[0]
19412 if !(l.Uses == 1) {
19413 break
19414 }
19415 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
19416 v0.AuxInt = int32ToAuxInt(c)
19417 v0.AddArg(x)
19418 b.resetWithControl(BlockARMLEnoov, v0)
19419 return true
19420 }
19421
19422
19423
19424 for b.Controls[0].Op == OpARMCMPconst {
19425 v_0 := b.Controls[0]
19426 if auxIntToInt32(v_0.AuxInt) != 0 {
19427 break
19428 }
19429 l := v_0.Args[0]
19430 if l.Op != OpARMANDshiftLL {
19431 break
19432 }
19433 c := auxIntToInt32(l.AuxInt)
19434 y := l.Args[1]
19435 x := l.Args[0]
19436 if !(l.Uses == 1) {
19437 break
19438 }
19439 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
19440 v0.AuxInt = int32ToAuxInt(c)
19441 v0.AddArg2(x, y)
19442 b.resetWithControl(BlockARMLEnoov, v0)
19443 return true
19444 }
19445
19446
19447
19448 for b.Controls[0].Op == OpARMCMPconst {
19449 v_0 := b.Controls[0]
19450 if auxIntToInt32(v_0.AuxInt) != 0 {
19451 break
19452 }
19453 l := v_0.Args[0]
19454 if l.Op != OpARMANDshiftRL {
19455 break
19456 }
19457 c := auxIntToInt32(l.AuxInt)
19458 y := l.Args[1]
19459 x := l.Args[0]
19460 if !(l.Uses == 1) {
19461 break
19462 }
19463 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
19464 v0.AuxInt = int32ToAuxInt(c)
19465 v0.AddArg2(x, y)
19466 b.resetWithControl(BlockARMLEnoov, v0)
19467 return true
19468 }
19469
19470
19471
19472 for b.Controls[0].Op == OpARMCMPconst {
19473 v_0 := b.Controls[0]
19474 if auxIntToInt32(v_0.AuxInt) != 0 {
19475 break
19476 }
19477 l := v_0.Args[0]
19478 if l.Op != OpARMANDshiftRA {
19479 break
19480 }
19481 c := auxIntToInt32(l.AuxInt)
19482 y := l.Args[1]
19483 x := l.Args[0]
19484 if !(l.Uses == 1) {
19485 break
19486 }
19487 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
19488 v0.AuxInt = int32ToAuxInt(c)
19489 v0.AddArg2(x, y)
19490 b.resetWithControl(BlockARMLEnoov, v0)
19491 return true
19492 }
19493
19494
19495
19496 for b.Controls[0].Op == OpARMCMPconst {
19497 v_0 := b.Controls[0]
19498 if auxIntToInt32(v_0.AuxInt) != 0 {
19499 break
19500 }
19501 l := v_0.Args[0]
19502 if l.Op != OpARMANDshiftLLreg {
19503 break
19504 }
19505 z := l.Args[2]
19506 x := l.Args[0]
19507 y := l.Args[1]
19508 if !(l.Uses == 1) {
19509 break
19510 }
19511 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
19512 v0.AddArg3(x, y, z)
19513 b.resetWithControl(BlockARMLEnoov, v0)
19514 return true
19515 }
19516
19517
19518
19519 for b.Controls[0].Op == OpARMCMPconst {
19520 v_0 := b.Controls[0]
19521 if auxIntToInt32(v_0.AuxInt) != 0 {
19522 break
19523 }
19524 l := v_0.Args[0]
19525 if l.Op != OpARMANDshiftRLreg {
19526 break
19527 }
19528 z := l.Args[2]
19529 x := l.Args[0]
19530 y := l.Args[1]
19531 if !(l.Uses == 1) {
19532 break
19533 }
19534 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
19535 v0.AddArg3(x, y, z)
19536 b.resetWithControl(BlockARMLEnoov, v0)
19537 return true
19538 }
19539
19540
19541
19542 for b.Controls[0].Op == OpARMCMPconst {
19543 v_0 := b.Controls[0]
19544 if auxIntToInt32(v_0.AuxInt) != 0 {
19545 break
19546 }
19547 l := v_0.Args[0]
19548 if l.Op != OpARMANDshiftRAreg {
19549 break
19550 }
19551 z := l.Args[2]
19552 x := l.Args[0]
19553 y := l.Args[1]
19554 if !(l.Uses == 1) {
19555 break
19556 }
19557 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
19558 v0.AddArg3(x, y, z)
19559 b.resetWithControl(BlockARMLEnoov, v0)
19560 return true
19561 }
19562
19563
19564
19565 for b.Controls[0].Op == OpARMCMPconst {
19566 v_0 := b.Controls[0]
19567 if auxIntToInt32(v_0.AuxInt) != 0 {
19568 break
19569 }
19570 l := v_0.Args[0]
19571 if l.Op != OpARMXOR {
19572 break
19573 }
19574 _ = l.Args[1]
19575 l_0 := l.Args[0]
19576 l_1 := l.Args[1]
19577 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
19578 x := l_0
19579 y := l_1
19580 if !(l.Uses == 1) {
19581 continue
19582 }
19583 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
19584 v0.AddArg2(x, y)
19585 b.resetWithControl(BlockARMLEnoov, v0)
19586 return true
19587 }
19588 break
19589 }
19590
19591
19592
19593 for b.Controls[0].Op == OpARMCMPconst {
19594 v_0 := b.Controls[0]
19595 if auxIntToInt32(v_0.AuxInt) != 0 {
19596 break
19597 }
19598 l := v_0.Args[0]
19599 if l.Op != OpARMXORconst {
19600 break
19601 }
19602 c := auxIntToInt32(l.AuxInt)
19603 x := l.Args[0]
19604 if !(l.Uses == 1) {
19605 break
19606 }
19607 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
19608 v0.AuxInt = int32ToAuxInt(c)
19609 v0.AddArg(x)
19610 b.resetWithControl(BlockARMLEnoov, v0)
19611 return true
19612 }
19613
19614
19615
19616 for b.Controls[0].Op == OpARMCMPconst {
19617 v_0 := b.Controls[0]
19618 if auxIntToInt32(v_0.AuxInt) != 0 {
19619 break
19620 }
19621 l := v_0.Args[0]
19622 if l.Op != OpARMXORshiftLL {
19623 break
19624 }
19625 c := auxIntToInt32(l.AuxInt)
19626 y := l.Args[1]
19627 x := l.Args[0]
19628 if !(l.Uses == 1) {
19629 break
19630 }
19631 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
19632 v0.AuxInt = int32ToAuxInt(c)
19633 v0.AddArg2(x, y)
19634 b.resetWithControl(BlockARMLEnoov, v0)
19635 return true
19636 }
19637
19638
19639
19640 for b.Controls[0].Op == OpARMCMPconst {
19641 v_0 := b.Controls[0]
19642 if auxIntToInt32(v_0.AuxInt) != 0 {
19643 break
19644 }
19645 l := v_0.Args[0]
19646 if l.Op != OpARMXORshiftRL {
19647 break
19648 }
19649 c := auxIntToInt32(l.AuxInt)
19650 y := l.Args[1]
19651 x := l.Args[0]
19652 if !(l.Uses == 1) {
19653 break
19654 }
19655 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
19656 v0.AuxInt = int32ToAuxInt(c)
19657 v0.AddArg2(x, y)
19658 b.resetWithControl(BlockARMLEnoov, v0)
19659 return true
19660 }
19661
19662
19663
19664 for b.Controls[0].Op == OpARMCMPconst {
19665 v_0 := b.Controls[0]
19666 if auxIntToInt32(v_0.AuxInt) != 0 {
19667 break
19668 }
19669 l := v_0.Args[0]
19670 if l.Op != OpARMXORshiftRA {
19671 break
19672 }
19673 c := auxIntToInt32(l.AuxInt)
19674 y := l.Args[1]
19675 x := l.Args[0]
19676 if !(l.Uses == 1) {
19677 break
19678 }
19679 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
19680 v0.AuxInt = int32ToAuxInt(c)
19681 v0.AddArg2(x, y)
19682 b.resetWithControl(BlockARMLEnoov, v0)
19683 return true
19684 }
19685
19686
19687
19688 for b.Controls[0].Op == OpARMCMPconst {
19689 v_0 := b.Controls[0]
19690 if auxIntToInt32(v_0.AuxInt) != 0 {
19691 break
19692 }
19693 l := v_0.Args[0]
19694 if l.Op != OpARMXORshiftLLreg {
19695 break
19696 }
19697 z := l.Args[2]
19698 x := l.Args[0]
19699 y := l.Args[1]
19700 if !(l.Uses == 1) {
19701 break
19702 }
19703 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
19704 v0.AddArg3(x, y, z)
19705 b.resetWithControl(BlockARMLEnoov, v0)
19706 return true
19707 }
19708
19709
19710
19711 for b.Controls[0].Op == OpARMCMPconst {
19712 v_0 := b.Controls[0]
19713 if auxIntToInt32(v_0.AuxInt) != 0 {
19714 break
19715 }
19716 l := v_0.Args[0]
19717 if l.Op != OpARMXORshiftRLreg {
19718 break
19719 }
19720 z := l.Args[2]
19721 x := l.Args[0]
19722 y := l.Args[1]
19723 if !(l.Uses == 1) {
19724 break
19725 }
19726 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
19727 v0.AddArg3(x, y, z)
19728 b.resetWithControl(BlockARMLEnoov, v0)
19729 return true
19730 }
19731
19732
19733
19734 for b.Controls[0].Op == OpARMCMPconst {
19735 v_0 := b.Controls[0]
19736 if auxIntToInt32(v_0.AuxInt) != 0 {
19737 break
19738 }
19739 l := v_0.Args[0]
19740 if l.Op != OpARMXORshiftRAreg {
19741 break
19742 }
19743 z := l.Args[2]
19744 x := l.Args[0]
19745 y := l.Args[1]
19746 if !(l.Uses == 1) {
19747 break
19748 }
19749 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
19750 v0.AddArg3(x, y, z)
19751 b.resetWithControl(BlockARMLEnoov, v0)
19752 return true
19753 }
19754 case BlockARMLEnoov:
19755
19756
19757
19758 for b.Controls[0].Op == OpARMFlagConstant {
19759 v_0 := b.Controls[0]
19760 fc := auxIntToFlagConstant(v_0.AuxInt)
19761 if !(fc.leNoov()) {
19762 break
19763 }
19764 b.Reset(BlockFirst)
19765 return true
19766 }
19767
19768
19769
19770 for b.Controls[0].Op == OpARMFlagConstant {
19771 v_0 := b.Controls[0]
19772 fc := auxIntToFlagConstant(v_0.AuxInt)
19773 if !(!fc.leNoov()) {
19774 break
19775 }
19776 b.Reset(BlockFirst)
19777 b.swapSuccessors()
19778 return true
19779 }
19780
19781
19782 for b.Controls[0].Op == OpARMInvertFlags {
19783 v_0 := b.Controls[0]
19784 cmp := v_0.Args[0]
19785 b.resetWithControl(BlockARMGEnoov, cmp)
19786 return true
19787 }
19788 case BlockARMLT:
19789
19790
19791
19792 for b.Controls[0].Op == OpARMFlagConstant {
19793 v_0 := b.Controls[0]
19794 fc := auxIntToFlagConstant(v_0.AuxInt)
19795 if !(fc.lt()) {
19796 break
19797 }
19798 b.Reset(BlockFirst)
19799 return true
19800 }
19801
19802
19803
19804 for b.Controls[0].Op == OpARMFlagConstant {
19805 v_0 := b.Controls[0]
19806 fc := auxIntToFlagConstant(v_0.AuxInt)
19807 if !(!fc.lt()) {
19808 break
19809 }
19810 b.Reset(BlockFirst)
19811 b.swapSuccessors()
19812 return true
19813 }
19814
19815
19816 for b.Controls[0].Op == OpARMInvertFlags {
19817 v_0 := b.Controls[0]
19818 cmp := v_0.Args[0]
19819 b.resetWithControl(BlockARMGT, cmp)
19820 return true
19821 }
19822
19823
19824
19825 for b.Controls[0].Op == OpARMCMPconst {
19826 v_0 := b.Controls[0]
19827 if auxIntToInt32(v_0.AuxInt) != 0 {
19828 break
19829 }
19830 l := v_0.Args[0]
19831 if l.Op != OpARMSUB {
19832 break
19833 }
19834 y := l.Args[1]
19835 x := l.Args[0]
19836 if !(l.Uses == 1) {
19837 break
19838 }
19839 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19840 v0.AddArg2(x, y)
19841 b.resetWithControl(BlockARMLTnoov, v0)
19842 return true
19843 }
19844
19845
19846
19847 for b.Controls[0].Op == OpARMCMPconst {
19848 v_0 := b.Controls[0]
19849 if auxIntToInt32(v_0.AuxInt) != 0 {
19850 break
19851 }
19852 l := v_0.Args[0]
19853 if l.Op != OpARMMULS {
19854 break
19855 }
19856 a := l.Args[2]
19857 x := l.Args[0]
19858 y := l.Args[1]
19859 if !(l.Uses == 1) {
19860 break
19861 }
19862 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
19863 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
19864 v1.AddArg2(x, y)
19865 v0.AddArg2(a, v1)
19866 b.resetWithControl(BlockARMLTnoov, v0)
19867 return true
19868 }
19869
19870
19871
19872 for b.Controls[0].Op == OpARMCMPconst {
19873 v_0 := b.Controls[0]
19874 if auxIntToInt32(v_0.AuxInt) != 0 {
19875 break
19876 }
19877 l := v_0.Args[0]
19878 if l.Op != OpARMSUBconst {
19879 break
19880 }
19881 c := auxIntToInt32(l.AuxInt)
19882 x := l.Args[0]
19883 if !(l.Uses == 1) {
19884 break
19885 }
19886 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
19887 v0.AuxInt = int32ToAuxInt(c)
19888 v0.AddArg(x)
19889 b.resetWithControl(BlockARMLTnoov, v0)
19890 return true
19891 }
19892
19893
19894
19895 for b.Controls[0].Op == OpARMCMPconst {
19896 v_0 := b.Controls[0]
19897 if auxIntToInt32(v_0.AuxInt) != 0 {
19898 break
19899 }
19900 l := v_0.Args[0]
19901 if l.Op != OpARMSUBshiftLL {
19902 break
19903 }
19904 c := auxIntToInt32(l.AuxInt)
19905 y := l.Args[1]
19906 x := l.Args[0]
19907 if !(l.Uses == 1) {
19908 break
19909 }
19910 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
19911 v0.AuxInt = int32ToAuxInt(c)
19912 v0.AddArg2(x, y)
19913 b.resetWithControl(BlockARMLTnoov, v0)
19914 return true
19915 }
19916
19917
19918
19919 for b.Controls[0].Op == OpARMCMPconst {
19920 v_0 := b.Controls[0]
19921 if auxIntToInt32(v_0.AuxInt) != 0 {
19922 break
19923 }
19924 l := v_0.Args[0]
19925 if l.Op != OpARMSUBshiftRL {
19926 break
19927 }
19928 c := auxIntToInt32(l.AuxInt)
19929 y := l.Args[1]
19930 x := l.Args[0]
19931 if !(l.Uses == 1) {
19932 break
19933 }
19934 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
19935 v0.AuxInt = int32ToAuxInt(c)
19936 v0.AddArg2(x, y)
19937 b.resetWithControl(BlockARMLTnoov, v0)
19938 return true
19939 }
19940
19941
19942
19943 for b.Controls[0].Op == OpARMCMPconst {
19944 v_0 := b.Controls[0]
19945 if auxIntToInt32(v_0.AuxInt) != 0 {
19946 break
19947 }
19948 l := v_0.Args[0]
19949 if l.Op != OpARMSUBshiftRA {
19950 break
19951 }
19952 c := auxIntToInt32(l.AuxInt)
19953 y := l.Args[1]
19954 x := l.Args[0]
19955 if !(l.Uses == 1) {
19956 break
19957 }
19958 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
19959 v0.AuxInt = int32ToAuxInt(c)
19960 v0.AddArg2(x, y)
19961 b.resetWithControl(BlockARMLTnoov, v0)
19962 return true
19963 }
19964
19965
19966
19967 for b.Controls[0].Op == OpARMCMPconst {
19968 v_0 := b.Controls[0]
19969 if auxIntToInt32(v_0.AuxInt) != 0 {
19970 break
19971 }
19972 l := v_0.Args[0]
19973 if l.Op != OpARMSUBshiftLLreg {
19974 break
19975 }
19976 z := l.Args[2]
19977 x := l.Args[0]
19978 y := l.Args[1]
19979 if !(l.Uses == 1) {
19980 break
19981 }
19982 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
19983 v0.AddArg3(x, y, z)
19984 b.resetWithControl(BlockARMLTnoov, v0)
19985 return true
19986 }
19987
19988
19989
19990 for b.Controls[0].Op == OpARMCMPconst {
19991 v_0 := b.Controls[0]
19992 if auxIntToInt32(v_0.AuxInt) != 0 {
19993 break
19994 }
19995 l := v_0.Args[0]
19996 if l.Op != OpARMSUBshiftRLreg {
19997 break
19998 }
19999 z := l.Args[2]
20000 x := l.Args[0]
20001 y := l.Args[1]
20002 if !(l.Uses == 1) {
20003 break
20004 }
20005 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
20006 v0.AddArg3(x, y, z)
20007 b.resetWithControl(BlockARMLTnoov, v0)
20008 return true
20009 }
20010
20011
20012
20013 for b.Controls[0].Op == OpARMCMPconst {
20014 v_0 := b.Controls[0]
20015 if auxIntToInt32(v_0.AuxInt) != 0 {
20016 break
20017 }
20018 l := v_0.Args[0]
20019 if l.Op != OpARMSUBshiftRAreg {
20020 break
20021 }
20022 z := l.Args[2]
20023 x := l.Args[0]
20024 y := l.Args[1]
20025 if !(l.Uses == 1) {
20026 break
20027 }
20028 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
20029 v0.AddArg3(x, y, z)
20030 b.resetWithControl(BlockARMLTnoov, v0)
20031 return true
20032 }
20033
20034
20035
20036 for b.Controls[0].Op == OpARMCMPconst {
20037 v_0 := b.Controls[0]
20038 if auxIntToInt32(v_0.AuxInt) != 0 {
20039 break
20040 }
20041 l := v_0.Args[0]
20042 if l.Op != OpARMADD {
20043 break
20044 }
20045 _ = l.Args[1]
20046 l_0 := l.Args[0]
20047 l_1 := l.Args[1]
20048 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20049 x := l_0
20050 y := l_1
20051 if !(l.Uses == 1) {
20052 continue
20053 }
20054 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20055 v0.AddArg2(x, y)
20056 b.resetWithControl(BlockARMLTnoov, v0)
20057 return true
20058 }
20059 break
20060 }
20061
20062
20063
20064 for b.Controls[0].Op == OpARMCMPconst {
20065 v_0 := b.Controls[0]
20066 if auxIntToInt32(v_0.AuxInt) != 0 {
20067 break
20068 }
20069 l := v_0.Args[0]
20070 if l.Op != OpARMMULA {
20071 break
20072 }
20073 a := l.Args[2]
20074 x := l.Args[0]
20075 y := l.Args[1]
20076 if !(l.Uses == 1) {
20077 break
20078 }
20079 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20080 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
20081 v1.AddArg2(x, y)
20082 v0.AddArg2(a, v1)
20083 b.resetWithControl(BlockARMLTnoov, v0)
20084 return true
20085 }
20086
20087
20088
20089 for b.Controls[0].Op == OpARMCMPconst {
20090 v_0 := b.Controls[0]
20091 if auxIntToInt32(v_0.AuxInt) != 0 {
20092 break
20093 }
20094 l := v_0.Args[0]
20095 if l.Op != OpARMADDconst {
20096 break
20097 }
20098 c := auxIntToInt32(l.AuxInt)
20099 x := l.Args[0]
20100 if !(l.Uses == 1) {
20101 break
20102 }
20103 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
20104 v0.AuxInt = int32ToAuxInt(c)
20105 v0.AddArg(x)
20106 b.resetWithControl(BlockARMLTnoov, v0)
20107 return true
20108 }
20109
20110
20111
20112 for b.Controls[0].Op == OpARMCMPconst {
20113 v_0 := b.Controls[0]
20114 if auxIntToInt32(v_0.AuxInt) != 0 {
20115 break
20116 }
20117 l := v_0.Args[0]
20118 if l.Op != OpARMADDshiftLL {
20119 break
20120 }
20121 c := auxIntToInt32(l.AuxInt)
20122 y := l.Args[1]
20123 x := l.Args[0]
20124 if !(l.Uses == 1) {
20125 break
20126 }
20127 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
20128 v0.AuxInt = int32ToAuxInt(c)
20129 v0.AddArg2(x, y)
20130 b.resetWithControl(BlockARMLTnoov, v0)
20131 return true
20132 }
20133
20134
20135
20136 for b.Controls[0].Op == OpARMCMPconst {
20137 v_0 := b.Controls[0]
20138 if auxIntToInt32(v_0.AuxInt) != 0 {
20139 break
20140 }
20141 l := v_0.Args[0]
20142 if l.Op != OpARMADDshiftRL {
20143 break
20144 }
20145 c := auxIntToInt32(l.AuxInt)
20146 y := l.Args[1]
20147 x := l.Args[0]
20148 if !(l.Uses == 1) {
20149 break
20150 }
20151 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
20152 v0.AuxInt = int32ToAuxInt(c)
20153 v0.AddArg2(x, y)
20154 b.resetWithControl(BlockARMLTnoov, v0)
20155 return true
20156 }
20157
20158
20159
20160 for b.Controls[0].Op == OpARMCMPconst {
20161 v_0 := b.Controls[0]
20162 if auxIntToInt32(v_0.AuxInt) != 0 {
20163 break
20164 }
20165 l := v_0.Args[0]
20166 if l.Op != OpARMADDshiftRA {
20167 break
20168 }
20169 c := auxIntToInt32(l.AuxInt)
20170 y := l.Args[1]
20171 x := l.Args[0]
20172 if !(l.Uses == 1) {
20173 break
20174 }
20175 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
20176 v0.AuxInt = int32ToAuxInt(c)
20177 v0.AddArg2(x, y)
20178 b.resetWithControl(BlockARMLTnoov, v0)
20179 return true
20180 }
20181
20182
20183
20184 for b.Controls[0].Op == OpARMCMPconst {
20185 v_0 := b.Controls[0]
20186 if auxIntToInt32(v_0.AuxInt) != 0 {
20187 break
20188 }
20189 l := v_0.Args[0]
20190 if l.Op != OpARMADDshiftLLreg {
20191 break
20192 }
20193 z := l.Args[2]
20194 x := l.Args[0]
20195 y := l.Args[1]
20196 if !(l.Uses == 1) {
20197 break
20198 }
20199 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
20200 v0.AddArg3(x, y, z)
20201 b.resetWithControl(BlockARMLTnoov, v0)
20202 return true
20203 }
20204
20205
20206
20207 for b.Controls[0].Op == OpARMCMPconst {
20208 v_0 := b.Controls[0]
20209 if auxIntToInt32(v_0.AuxInt) != 0 {
20210 break
20211 }
20212 l := v_0.Args[0]
20213 if l.Op != OpARMADDshiftRLreg {
20214 break
20215 }
20216 z := l.Args[2]
20217 x := l.Args[0]
20218 y := l.Args[1]
20219 if !(l.Uses == 1) {
20220 break
20221 }
20222 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
20223 v0.AddArg3(x, y, z)
20224 b.resetWithControl(BlockARMLTnoov, v0)
20225 return true
20226 }
20227
20228
20229
20230 for b.Controls[0].Op == OpARMCMPconst {
20231 v_0 := b.Controls[0]
20232 if auxIntToInt32(v_0.AuxInt) != 0 {
20233 break
20234 }
20235 l := v_0.Args[0]
20236 if l.Op != OpARMADDshiftRAreg {
20237 break
20238 }
20239 z := l.Args[2]
20240 x := l.Args[0]
20241 y := l.Args[1]
20242 if !(l.Uses == 1) {
20243 break
20244 }
20245 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
20246 v0.AddArg3(x, y, z)
20247 b.resetWithControl(BlockARMLTnoov, v0)
20248 return true
20249 }
20250
20251
20252
20253 for b.Controls[0].Op == OpARMCMPconst {
20254 v_0 := b.Controls[0]
20255 if auxIntToInt32(v_0.AuxInt) != 0 {
20256 break
20257 }
20258 l := v_0.Args[0]
20259 if l.Op != OpARMAND {
20260 break
20261 }
20262 _ = l.Args[1]
20263 l_0 := l.Args[0]
20264 l_1 := l.Args[1]
20265 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20266 x := l_0
20267 y := l_1
20268 if !(l.Uses == 1) {
20269 continue
20270 }
20271 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
20272 v0.AddArg2(x, y)
20273 b.resetWithControl(BlockARMLTnoov, v0)
20274 return true
20275 }
20276 break
20277 }
20278
20279
20280
20281 for b.Controls[0].Op == OpARMCMPconst {
20282 v_0 := b.Controls[0]
20283 if auxIntToInt32(v_0.AuxInt) != 0 {
20284 break
20285 }
20286 l := v_0.Args[0]
20287 if l.Op != OpARMANDconst {
20288 break
20289 }
20290 c := auxIntToInt32(l.AuxInt)
20291 x := l.Args[0]
20292 if !(l.Uses == 1) {
20293 break
20294 }
20295 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
20296 v0.AuxInt = int32ToAuxInt(c)
20297 v0.AddArg(x)
20298 b.resetWithControl(BlockARMLTnoov, v0)
20299 return true
20300 }
20301
20302
20303
20304 for b.Controls[0].Op == OpARMCMPconst {
20305 v_0 := b.Controls[0]
20306 if auxIntToInt32(v_0.AuxInt) != 0 {
20307 break
20308 }
20309 l := v_0.Args[0]
20310 if l.Op != OpARMANDshiftLL {
20311 break
20312 }
20313 c := auxIntToInt32(l.AuxInt)
20314 y := l.Args[1]
20315 x := l.Args[0]
20316 if !(l.Uses == 1) {
20317 break
20318 }
20319 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
20320 v0.AuxInt = int32ToAuxInt(c)
20321 v0.AddArg2(x, y)
20322 b.resetWithControl(BlockARMLTnoov, v0)
20323 return true
20324 }
20325
20326
20327
20328 for b.Controls[0].Op == OpARMCMPconst {
20329 v_0 := b.Controls[0]
20330 if auxIntToInt32(v_0.AuxInt) != 0 {
20331 break
20332 }
20333 l := v_0.Args[0]
20334 if l.Op != OpARMANDshiftRL {
20335 break
20336 }
20337 c := auxIntToInt32(l.AuxInt)
20338 y := l.Args[1]
20339 x := l.Args[0]
20340 if !(l.Uses == 1) {
20341 break
20342 }
20343 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
20344 v0.AuxInt = int32ToAuxInt(c)
20345 v0.AddArg2(x, y)
20346 b.resetWithControl(BlockARMLTnoov, v0)
20347 return true
20348 }
20349
20350
20351
20352 for b.Controls[0].Op == OpARMCMPconst {
20353 v_0 := b.Controls[0]
20354 if auxIntToInt32(v_0.AuxInt) != 0 {
20355 break
20356 }
20357 l := v_0.Args[0]
20358 if l.Op != OpARMANDshiftRA {
20359 break
20360 }
20361 c := auxIntToInt32(l.AuxInt)
20362 y := l.Args[1]
20363 x := l.Args[0]
20364 if !(l.Uses == 1) {
20365 break
20366 }
20367 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
20368 v0.AuxInt = int32ToAuxInt(c)
20369 v0.AddArg2(x, y)
20370 b.resetWithControl(BlockARMLTnoov, v0)
20371 return true
20372 }
20373
20374
20375
20376 for b.Controls[0].Op == OpARMCMPconst {
20377 v_0 := b.Controls[0]
20378 if auxIntToInt32(v_0.AuxInt) != 0 {
20379 break
20380 }
20381 l := v_0.Args[0]
20382 if l.Op != OpARMANDshiftLLreg {
20383 break
20384 }
20385 z := l.Args[2]
20386 x := l.Args[0]
20387 y := l.Args[1]
20388 if !(l.Uses == 1) {
20389 break
20390 }
20391 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
20392 v0.AddArg3(x, y, z)
20393 b.resetWithControl(BlockARMLTnoov, v0)
20394 return true
20395 }
20396
20397
20398
20399 for b.Controls[0].Op == OpARMCMPconst {
20400 v_0 := b.Controls[0]
20401 if auxIntToInt32(v_0.AuxInt) != 0 {
20402 break
20403 }
20404 l := v_0.Args[0]
20405 if l.Op != OpARMANDshiftRLreg {
20406 break
20407 }
20408 z := l.Args[2]
20409 x := l.Args[0]
20410 y := l.Args[1]
20411 if !(l.Uses == 1) {
20412 break
20413 }
20414 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
20415 v0.AddArg3(x, y, z)
20416 b.resetWithControl(BlockARMLTnoov, v0)
20417 return true
20418 }
20419
20420
20421
20422 for b.Controls[0].Op == OpARMCMPconst {
20423 v_0 := b.Controls[0]
20424 if auxIntToInt32(v_0.AuxInt) != 0 {
20425 break
20426 }
20427 l := v_0.Args[0]
20428 if l.Op != OpARMANDshiftRAreg {
20429 break
20430 }
20431 z := l.Args[2]
20432 x := l.Args[0]
20433 y := l.Args[1]
20434 if !(l.Uses == 1) {
20435 break
20436 }
20437 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
20438 v0.AddArg3(x, y, z)
20439 b.resetWithControl(BlockARMLTnoov, v0)
20440 return true
20441 }
20442
20443
20444
20445 for b.Controls[0].Op == OpARMCMPconst {
20446 v_0 := b.Controls[0]
20447 if auxIntToInt32(v_0.AuxInt) != 0 {
20448 break
20449 }
20450 l := v_0.Args[0]
20451 if l.Op != OpARMXOR {
20452 break
20453 }
20454 _ = l.Args[1]
20455 l_0 := l.Args[0]
20456 l_1 := l.Args[1]
20457 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
20458 x := l_0
20459 y := l_1
20460 if !(l.Uses == 1) {
20461 continue
20462 }
20463 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
20464 v0.AddArg2(x, y)
20465 b.resetWithControl(BlockARMLTnoov, v0)
20466 return true
20467 }
20468 break
20469 }
20470
20471
20472
20473 for b.Controls[0].Op == OpARMCMPconst {
20474 v_0 := b.Controls[0]
20475 if auxIntToInt32(v_0.AuxInt) != 0 {
20476 break
20477 }
20478 l := v_0.Args[0]
20479 if l.Op != OpARMXORconst {
20480 break
20481 }
20482 c := auxIntToInt32(l.AuxInt)
20483 x := l.Args[0]
20484 if !(l.Uses == 1) {
20485 break
20486 }
20487 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
20488 v0.AuxInt = int32ToAuxInt(c)
20489 v0.AddArg(x)
20490 b.resetWithControl(BlockARMLTnoov, v0)
20491 return true
20492 }
20493
20494
20495
20496 for b.Controls[0].Op == OpARMCMPconst {
20497 v_0 := b.Controls[0]
20498 if auxIntToInt32(v_0.AuxInt) != 0 {
20499 break
20500 }
20501 l := v_0.Args[0]
20502 if l.Op != OpARMXORshiftLL {
20503 break
20504 }
20505 c := auxIntToInt32(l.AuxInt)
20506 y := l.Args[1]
20507 x := l.Args[0]
20508 if !(l.Uses == 1) {
20509 break
20510 }
20511 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
20512 v0.AuxInt = int32ToAuxInt(c)
20513 v0.AddArg2(x, y)
20514 b.resetWithControl(BlockARMLTnoov, v0)
20515 return true
20516 }
20517
20518
20519
20520 for b.Controls[0].Op == OpARMCMPconst {
20521 v_0 := b.Controls[0]
20522 if auxIntToInt32(v_0.AuxInt) != 0 {
20523 break
20524 }
20525 l := v_0.Args[0]
20526 if l.Op != OpARMXORshiftRL {
20527 break
20528 }
20529 c := auxIntToInt32(l.AuxInt)
20530 y := l.Args[1]
20531 x := l.Args[0]
20532 if !(l.Uses == 1) {
20533 break
20534 }
20535 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
20536 v0.AuxInt = int32ToAuxInt(c)
20537 v0.AddArg2(x, y)
20538 b.resetWithControl(BlockARMLTnoov, v0)
20539 return true
20540 }
20541
20542
20543
20544 for b.Controls[0].Op == OpARMCMPconst {
20545 v_0 := b.Controls[0]
20546 if auxIntToInt32(v_0.AuxInt) != 0 {
20547 break
20548 }
20549 l := v_0.Args[0]
20550 if l.Op != OpARMXORshiftRA {
20551 break
20552 }
20553 c := auxIntToInt32(l.AuxInt)
20554 y := l.Args[1]
20555 x := l.Args[0]
20556 if !(l.Uses == 1) {
20557 break
20558 }
20559 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
20560 v0.AuxInt = int32ToAuxInt(c)
20561 v0.AddArg2(x, y)
20562 b.resetWithControl(BlockARMLTnoov, v0)
20563 return true
20564 }
20565
20566
20567
20568 for b.Controls[0].Op == OpARMCMPconst {
20569 v_0 := b.Controls[0]
20570 if auxIntToInt32(v_0.AuxInt) != 0 {
20571 break
20572 }
20573 l := v_0.Args[0]
20574 if l.Op != OpARMXORshiftLLreg {
20575 break
20576 }
20577 z := l.Args[2]
20578 x := l.Args[0]
20579 y := l.Args[1]
20580 if !(l.Uses == 1) {
20581 break
20582 }
20583 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
20584 v0.AddArg3(x, y, z)
20585 b.resetWithControl(BlockARMLTnoov, v0)
20586 return true
20587 }
20588
20589
20590
20591 for b.Controls[0].Op == OpARMCMPconst {
20592 v_0 := b.Controls[0]
20593 if auxIntToInt32(v_0.AuxInt) != 0 {
20594 break
20595 }
20596 l := v_0.Args[0]
20597 if l.Op != OpARMXORshiftRLreg {
20598 break
20599 }
20600 z := l.Args[2]
20601 x := l.Args[0]
20602 y := l.Args[1]
20603 if !(l.Uses == 1) {
20604 break
20605 }
20606 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
20607 v0.AddArg3(x, y, z)
20608 b.resetWithControl(BlockARMLTnoov, v0)
20609 return true
20610 }
20611
20612
20613
20614 for b.Controls[0].Op == OpARMCMPconst {
20615 v_0 := b.Controls[0]
20616 if auxIntToInt32(v_0.AuxInt) != 0 {
20617 break
20618 }
20619 l := v_0.Args[0]
20620 if l.Op != OpARMXORshiftRAreg {
20621 break
20622 }
20623 z := l.Args[2]
20624 x := l.Args[0]
20625 y := l.Args[1]
20626 if !(l.Uses == 1) {
20627 break
20628 }
20629 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
20630 v0.AddArg3(x, y, z)
20631 b.resetWithControl(BlockARMLTnoov, v0)
20632 return true
20633 }
20634 case BlockARMLTnoov:
20635
20636
20637
20638 for b.Controls[0].Op == OpARMFlagConstant {
20639 v_0 := b.Controls[0]
20640 fc := auxIntToFlagConstant(v_0.AuxInt)
20641 if !(fc.ltNoov()) {
20642 break
20643 }
20644 b.Reset(BlockFirst)
20645 return true
20646 }
20647
20648
20649
20650 for b.Controls[0].Op == OpARMFlagConstant {
20651 v_0 := b.Controls[0]
20652 fc := auxIntToFlagConstant(v_0.AuxInt)
20653 if !(!fc.ltNoov()) {
20654 break
20655 }
20656 b.Reset(BlockFirst)
20657 b.swapSuccessors()
20658 return true
20659 }
20660
20661
20662 for b.Controls[0].Op == OpARMInvertFlags {
20663 v_0 := b.Controls[0]
20664 cmp := v_0.Args[0]
20665 b.resetWithControl(BlockARMGTnoov, cmp)
20666 return true
20667 }
20668 case BlockARMNE:
20669
20670
20671 for b.Controls[0].Op == OpARMCMPconst {
20672 v_0 := b.Controls[0]
20673 if auxIntToInt32(v_0.AuxInt) != 0 {
20674 break
20675 }
20676 v_0_0 := v_0.Args[0]
20677 if v_0_0.Op != OpARMEqual {
20678 break
20679 }
20680 cc := v_0_0.Args[0]
20681 b.resetWithControl(BlockARMEQ, cc)
20682 return true
20683 }
20684
20685
20686 for b.Controls[0].Op == OpARMCMPconst {
20687 v_0 := b.Controls[0]
20688 if auxIntToInt32(v_0.AuxInt) != 0 {
20689 break
20690 }
20691 v_0_0 := v_0.Args[0]
20692 if v_0_0.Op != OpARMNotEqual {
20693 break
20694 }
20695 cc := v_0_0.Args[0]
20696 b.resetWithControl(BlockARMNE, cc)
20697 return true
20698 }
20699
20700
20701 for b.Controls[0].Op == OpARMCMPconst {
20702 v_0 := b.Controls[0]
20703 if auxIntToInt32(v_0.AuxInt) != 0 {
20704 break
20705 }
20706 v_0_0 := v_0.Args[0]
20707 if v_0_0.Op != OpARMLessThan {
20708 break
20709 }
20710 cc := v_0_0.Args[0]
20711 b.resetWithControl(BlockARMLT, cc)
20712 return true
20713 }
20714
20715
20716 for b.Controls[0].Op == OpARMCMPconst {
20717 v_0 := b.Controls[0]
20718 if auxIntToInt32(v_0.AuxInt) != 0 {
20719 break
20720 }
20721 v_0_0 := v_0.Args[0]
20722 if v_0_0.Op != OpARMLessThanU {
20723 break
20724 }
20725 cc := v_0_0.Args[0]
20726 b.resetWithControl(BlockARMULT, cc)
20727 return true
20728 }
20729
20730
20731 for b.Controls[0].Op == OpARMCMPconst {
20732 v_0 := b.Controls[0]
20733 if auxIntToInt32(v_0.AuxInt) != 0 {
20734 break
20735 }
20736 v_0_0 := v_0.Args[0]
20737 if v_0_0.Op != OpARMLessEqual {
20738 break
20739 }
20740 cc := v_0_0.Args[0]
20741 b.resetWithControl(BlockARMLE, cc)
20742 return true
20743 }
20744
20745
20746 for b.Controls[0].Op == OpARMCMPconst {
20747 v_0 := b.Controls[0]
20748 if auxIntToInt32(v_0.AuxInt) != 0 {
20749 break
20750 }
20751 v_0_0 := v_0.Args[0]
20752 if v_0_0.Op != OpARMLessEqualU {
20753 break
20754 }
20755 cc := v_0_0.Args[0]
20756 b.resetWithControl(BlockARMULE, cc)
20757 return true
20758 }
20759
20760
20761 for b.Controls[0].Op == OpARMCMPconst {
20762 v_0 := b.Controls[0]
20763 if auxIntToInt32(v_0.AuxInt) != 0 {
20764 break
20765 }
20766 v_0_0 := v_0.Args[0]
20767 if v_0_0.Op != OpARMGreaterThan {
20768 break
20769 }
20770 cc := v_0_0.Args[0]
20771 b.resetWithControl(BlockARMGT, cc)
20772 return true
20773 }
20774
20775
20776 for b.Controls[0].Op == OpARMCMPconst {
20777 v_0 := b.Controls[0]
20778 if auxIntToInt32(v_0.AuxInt) != 0 {
20779 break
20780 }
20781 v_0_0 := v_0.Args[0]
20782 if v_0_0.Op != OpARMGreaterThanU {
20783 break
20784 }
20785 cc := v_0_0.Args[0]
20786 b.resetWithControl(BlockARMUGT, cc)
20787 return true
20788 }
20789
20790
20791 for b.Controls[0].Op == OpARMCMPconst {
20792 v_0 := b.Controls[0]
20793 if auxIntToInt32(v_0.AuxInt) != 0 {
20794 break
20795 }
20796 v_0_0 := v_0.Args[0]
20797 if v_0_0.Op != OpARMGreaterEqual {
20798 break
20799 }
20800 cc := v_0_0.Args[0]
20801 b.resetWithControl(BlockARMGE, cc)
20802 return true
20803 }
20804
20805
20806 for b.Controls[0].Op == OpARMCMPconst {
20807 v_0 := b.Controls[0]
20808 if auxIntToInt32(v_0.AuxInt) != 0 {
20809 break
20810 }
20811 v_0_0 := v_0.Args[0]
20812 if v_0_0.Op != OpARMGreaterEqualU {
20813 break
20814 }
20815 cc := v_0_0.Args[0]
20816 b.resetWithControl(BlockARMUGE, cc)
20817 return true
20818 }
20819
20820
20821
20822 for b.Controls[0].Op == OpARMFlagConstant {
20823 v_0 := b.Controls[0]
20824 fc := auxIntToFlagConstant(v_0.AuxInt)
20825 if !(fc.ne()) {
20826 break
20827 }
20828 b.Reset(BlockFirst)
20829 return true
20830 }
20831
20832
20833
20834 for b.Controls[0].Op == OpARMFlagConstant {
20835 v_0 := b.Controls[0]
20836 fc := auxIntToFlagConstant(v_0.AuxInt)
20837 if !(!fc.ne()) {
20838 break
20839 }
20840 b.Reset(BlockFirst)
20841 b.swapSuccessors()
20842 return true
20843 }
20844
20845
20846 for b.Controls[0].Op == OpARMInvertFlags {
20847 v_0 := b.Controls[0]
20848 cmp := v_0.Args[0]
20849 b.resetWithControl(BlockARMNE, cmp)
20850 return true
20851 }
20852
20853
20854 for b.Controls[0].Op == OpARMCMP {
20855 v_0 := b.Controls[0]
20856 _ = v_0.Args[1]
20857 x := v_0.Args[0]
20858 v_0_1 := v_0.Args[1]
20859 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
20860 break
20861 }
20862 y := v_0_1.Args[0]
20863 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
20864 v0.AddArg2(x, y)
20865 b.resetWithControl(BlockARMNE, v0)
20866 return true
20867 }
20868
20869
20870 for b.Controls[0].Op == OpARMCMN {
20871 v_0 := b.Controls[0]
20872 _ = v_0.Args[1]
20873 v_0_0 := v_0.Args[0]
20874 v_0_1 := v_0.Args[1]
20875 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
20876 x := v_0_0
20877 if v_0_1.Op != OpARMRSBconst || auxIntToInt32(v_0_1.AuxInt) != 0 {
20878 continue
20879 }
20880 y := v_0_1.Args[0]
20881 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20882 v0.AddArg2(x, y)
20883 b.resetWithControl(BlockARMNE, v0)
20884 return true
20885 }
20886 break
20887 }
20888
20889
20890
20891 for b.Controls[0].Op == OpARMCMPconst {
20892 v_0 := b.Controls[0]
20893 if auxIntToInt32(v_0.AuxInt) != 0 {
20894 break
20895 }
20896 l := v_0.Args[0]
20897 if l.Op != OpARMSUB {
20898 break
20899 }
20900 y := l.Args[1]
20901 x := l.Args[0]
20902 if !(l.Uses == 1) {
20903 break
20904 }
20905 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20906 v0.AddArg2(x, y)
20907 b.resetWithControl(BlockARMNE, v0)
20908 return true
20909 }
20910
20911
20912
20913 for b.Controls[0].Op == OpARMCMPconst {
20914 v_0 := b.Controls[0]
20915 if auxIntToInt32(v_0.AuxInt) != 0 {
20916 break
20917 }
20918 l := v_0.Args[0]
20919 if l.Op != OpARMMULS {
20920 break
20921 }
20922 a := l.Args[2]
20923 x := l.Args[0]
20924 y := l.Args[1]
20925 if !(l.Uses == 1) {
20926 break
20927 }
20928 v0 := b.NewValue0(v_0.Pos, OpARMCMP, types.TypeFlags)
20929 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
20930 v1.AddArg2(x, y)
20931 v0.AddArg2(a, v1)
20932 b.resetWithControl(BlockARMNE, v0)
20933 return true
20934 }
20935
20936
20937
20938 for b.Controls[0].Op == OpARMCMPconst {
20939 v_0 := b.Controls[0]
20940 if auxIntToInt32(v_0.AuxInt) != 0 {
20941 break
20942 }
20943 l := v_0.Args[0]
20944 if l.Op != OpARMSUBconst {
20945 break
20946 }
20947 c := auxIntToInt32(l.AuxInt)
20948 x := l.Args[0]
20949 if !(l.Uses == 1) {
20950 break
20951 }
20952 v0 := b.NewValue0(v_0.Pos, OpARMCMPconst, types.TypeFlags)
20953 v0.AuxInt = int32ToAuxInt(c)
20954 v0.AddArg(x)
20955 b.resetWithControl(BlockARMNE, v0)
20956 return true
20957 }
20958
20959
20960
20961 for b.Controls[0].Op == OpARMCMPconst {
20962 v_0 := b.Controls[0]
20963 if auxIntToInt32(v_0.AuxInt) != 0 {
20964 break
20965 }
20966 l := v_0.Args[0]
20967 if l.Op != OpARMSUBshiftLL {
20968 break
20969 }
20970 c := auxIntToInt32(l.AuxInt)
20971 y := l.Args[1]
20972 x := l.Args[0]
20973 if !(l.Uses == 1) {
20974 break
20975 }
20976 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLL, types.TypeFlags)
20977 v0.AuxInt = int32ToAuxInt(c)
20978 v0.AddArg2(x, y)
20979 b.resetWithControl(BlockARMNE, v0)
20980 return true
20981 }
20982
20983
20984
20985 for b.Controls[0].Op == OpARMCMPconst {
20986 v_0 := b.Controls[0]
20987 if auxIntToInt32(v_0.AuxInt) != 0 {
20988 break
20989 }
20990 l := v_0.Args[0]
20991 if l.Op != OpARMSUBshiftRL {
20992 break
20993 }
20994 c := auxIntToInt32(l.AuxInt)
20995 y := l.Args[1]
20996 x := l.Args[0]
20997 if !(l.Uses == 1) {
20998 break
20999 }
21000 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRL, types.TypeFlags)
21001 v0.AuxInt = int32ToAuxInt(c)
21002 v0.AddArg2(x, y)
21003 b.resetWithControl(BlockARMNE, v0)
21004 return true
21005 }
21006
21007
21008
21009 for b.Controls[0].Op == OpARMCMPconst {
21010 v_0 := b.Controls[0]
21011 if auxIntToInt32(v_0.AuxInt) != 0 {
21012 break
21013 }
21014 l := v_0.Args[0]
21015 if l.Op != OpARMSUBshiftRA {
21016 break
21017 }
21018 c := auxIntToInt32(l.AuxInt)
21019 y := l.Args[1]
21020 x := l.Args[0]
21021 if !(l.Uses == 1) {
21022 break
21023 }
21024 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRA, types.TypeFlags)
21025 v0.AuxInt = int32ToAuxInt(c)
21026 v0.AddArg2(x, y)
21027 b.resetWithControl(BlockARMNE, v0)
21028 return true
21029 }
21030
21031
21032
21033 for b.Controls[0].Op == OpARMCMPconst {
21034 v_0 := b.Controls[0]
21035 if auxIntToInt32(v_0.AuxInt) != 0 {
21036 break
21037 }
21038 l := v_0.Args[0]
21039 if l.Op != OpARMSUBshiftLLreg {
21040 break
21041 }
21042 z := l.Args[2]
21043 x := l.Args[0]
21044 y := l.Args[1]
21045 if !(l.Uses == 1) {
21046 break
21047 }
21048 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftLLreg, types.TypeFlags)
21049 v0.AddArg3(x, y, z)
21050 b.resetWithControl(BlockARMNE, v0)
21051 return true
21052 }
21053
21054
21055
21056 for b.Controls[0].Op == OpARMCMPconst {
21057 v_0 := b.Controls[0]
21058 if auxIntToInt32(v_0.AuxInt) != 0 {
21059 break
21060 }
21061 l := v_0.Args[0]
21062 if l.Op != OpARMSUBshiftRLreg {
21063 break
21064 }
21065 z := l.Args[2]
21066 x := l.Args[0]
21067 y := l.Args[1]
21068 if !(l.Uses == 1) {
21069 break
21070 }
21071 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRLreg, types.TypeFlags)
21072 v0.AddArg3(x, y, z)
21073 b.resetWithControl(BlockARMNE, v0)
21074 return true
21075 }
21076
21077
21078
21079 for b.Controls[0].Op == OpARMCMPconst {
21080 v_0 := b.Controls[0]
21081 if auxIntToInt32(v_0.AuxInt) != 0 {
21082 break
21083 }
21084 l := v_0.Args[0]
21085 if l.Op != OpARMSUBshiftRAreg {
21086 break
21087 }
21088 z := l.Args[2]
21089 x := l.Args[0]
21090 y := l.Args[1]
21091 if !(l.Uses == 1) {
21092 break
21093 }
21094 v0 := b.NewValue0(v_0.Pos, OpARMCMPshiftRAreg, types.TypeFlags)
21095 v0.AddArg3(x, y, z)
21096 b.resetWithControl(BlockARMNE, v0)
21097 return true
21098 }
21099
21100
21101
21102 for b.Controls[0].Op == OpARMCMPconst {
21103 v_0 := b.Controls[0]
21104 if auxIntToInt32(v_0.AuxInt) != 0 {
21105 break
21106 }
21107 l := v_0.Args[0]
21108 if l.Op != OpARMADD {
21109 break
21110 }
21111 _ = l.Args[1]
21112 l_0 := l.Args[0]
21113 l_1 := l.Args[1]
21114 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21115 x := l_0
21116 y := l_1
21117 if !(l.Uses == 1) {
21118 continue
21119 }
21120 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
21121 v0.AddArg2(x, y)
21122 b.resetWithControl(BlockARMNE, v0)
21123 return true
21124 }
21125 break
21126 }
21127
21128
21129
21130 for b.Controls[0].Op == OpARMCMPconst {
21131 v_0 := b.Controls[0]
21132 if auxIntToInt32(v_0.AuxInt) != 0 {
21133 break
21134 }
21135 l := v_0.Args[0]
21136 if l.Op != OpARMMULA {
21137 break
21138 }
21139 a := l.Args[2]
21140 x := l.Args[0]
21141 y := l.Args[1]
21142 if !(l.Uses == 1) {
21143 break
21144 }
21145 v0 := b.NewValue0(v_0.Pos, OpARMCMN, types.TypeFlags)
21146 v1 := b.NewValue0(v_0.Pos, OpARMMUL, x.Type)
21147 v1.AddArg2(x, y)
21148 v0.AddArg2(a, v1)
21149 b.resetWithControl(BlockARMNE, v0)
21150 return true
21151 }
21152
21153
21154
21155 for b.Controls[0].Op == OpARMCMPconst {
21156 v_0 := b.Controls[0]
21157 if auxIntToInt32(v_0.AuxInt) != 0 {
21158 break
21159 }
21160 l := v_0.Args[0]
21161 if l.Op != OpARMADDconst {
21162 break
21163 }
21164 c := auxIntToInt32(l.AuxInt)
21165 x := l.Args[0]
21166 if !(l.Uses == 1) {
21167 break
21168 }
21169 v0 := b.NewValue0(v_0.Pos, OpARMCMNconst, types.TypeFlags)
21170 v0.AuxInt = int32ToAuxInt(c)
21171 v0.AddArg(x)
21172 b.resetWithControl(BlockARMNE, v0)
21173 return true
21174 }
21175
21176
21177
21178 for b.Controls[0].Op == OpARMCMPconst {
21179 v_0 := b.Controls[0]
21180 if auxIntToInt32(v_0.AuxInt) != 0 {
21181 break
21182 }
21183 l := v_0.Args[0]
21184 if l.Op != OpARMADDshiftLL {
21185 break
21186 }
21187 c := auxIntToInt32(l.AuxInt)
21188 y := l.Args[1]
21189 x := l.Args[0]
21190 if !(l.Uses == 1) {
21191 break
21192 }
21193 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLL, types.TypeFlags)
21194 v0.AuxInt = int32ToAuxInt(c)
21195 v0.AddArg2(x, y)
21196 b.resetWithControl(BlockARMNE, v0)
21197 return true
21198 }
21199
21200
21201
21202 for b.Controls[0].Op == OpARMCMPconst {
21203 v_0 := b.Controls[0]
21204 if auxIntToInt32(v_0.AuxInt) != 0 {
21205 break
21206 }
21207 l := v_0.Args[0]
21208 if l.Op != OpARMADDshiftRL {
21209 break
21210 }
21211 c := auxIntToInt32(l.AuxInt)
21212 y := l.Args[1]
21213 x := l.Args[0]
21214 if !(l.Uses == 1) {
21215 break
21216 }
21217 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRL, types.TypeFlags)
21218 v0.AuxInt = int32ToAuxInt(c)
21219 v0.AddArg2(x, y)
21220 b.resetWithControl(BlockARMNE, v0)
21221 return true
21222 }
21223
21224
21225
21226 for b.Controls[0].Op == OpARMCMPconst {
21227 v_0 := b.Controls[0]
21228 if auxIntToInt32(v_0.AuxInt) != 0 {
21229 break
21230 }
21231 l := v_0.Args[0]
21232 if l.Op != OpARMADDshiftRA {
21233 break
21234 }
21235 c := auxIntToInt32(l.AuxInt)
21236 y := l.Args[1]
21237 x := l.Args[0]
21238 if !(l.Uses == 1) {
21239 break
21240 }
21241 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRA, types.TypeFlags)
21242 v0.AuxInt = int32ToAuxInt(c)
21243 v0.AddArg2(x, y)
21244 b.resetWithControl(BlockARMNE, v0)
21245 return true
21246 }
21247
21248
21249
21250 for b.Controls[0].Op == OpARMCMPconst {
21251 v_0 := b.Controls[0]
21252 if auxIntToInt32(v_0.AuxInt) != 0 {
21253 break
21254 }
21255 l := v_0.Args[0]
21256 if l.Op != OpARMADDshiftLLreg {
21257 break
21258 }
21259 z := l.Args[2]
21260 x := l.Args[0]
21261 y := l.Args[1]
21262 if !(l.Uses == 1) {
21263 break
21264 }
21265 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftLLreg, types.TypeFlags)
21266 v0.AddArg3(x, y, z)
21267 b.resetWithControl(BlockARMNE, v0)
21268 return true
21269 }
21270
21271
21272
21273 for b.Controls[0].Op == OpARMCMPconst {
21274 v_0 := b.Controls[0]
21275 if auxIntToInt32(v_0.AuxInt) != 0 {
21276 break
21277 }
21278 l := v_0.Args[0]
21279 if l.Op != OpARMADDshiftRLreg {
21280 break
21281 }
21282 z := l.Args[2]
21283 x := l.Args[0]
21284 y := l.Args[1]
21285 if !(l.Uses == 1) {
21286 break
21287 }
21288 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRLreg, types.TypeFlags)
21289 v0.AddArg3(x, y, z)
21290 b.resetWithControl(BlockARMNE, v0)
21291 return true
21292 }
21293
21294
21295
21296 for b.Controls[0].Op == OpARMCMPconst {
21297 v_0 := b.Controls[0]
21298 if auxIntToInt32(v_0.AuxInt) != 0 {
21299 break
21300 }
21301 l := v_0.Args[0]
21302 if l.Op != OpARMADDshiftRAreg {
21303 break
21304 }
21305 z := l.Args[2]
21306 x := l.Args[0]
21307 y := l.Args[1]
21308 if !(l.Uses == 1) {
21309 break
21310 }
21311 v0 := b.NewValue0(v_0.Pos, OpARMCMNshiftRAreg, types.TypeFlags)
21312 v0.AddArg3(x, y, z)
21313 b.resetWithControl(BlockARMNE, v0)
21314 return true
21315 }
21316
21317
21318
21319 for b.Controls[0].Op == OpARMCMPconst {
21320 v_0 := b.Controls[0]
21321 if auxIntToInt32(v_0.AuxInt) != 0 {
21322 break
21323 }
21324 l := v_0.Args[0]
21325 if l.Op != OpARMAND {
21326 break
21327 }
21328 _ = l.Args[1]
21329 l_0 := l.Args[0]
21330 l_1 := l.Args[1]
21331 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21332 x := l_0
21333 y := l_1
21334 if !(l.Uses == 1) {
21335 continue
21336 }
21337 v0 := b.NewValue0(v_0.Pos, OpARMTST, types.TypeFlags)
21338 v0.AddArg2(x, y)
21339 b.resetWithControl(BlockARMNE, v0)
21340 return true
21341 }
21342 break
21343 }
21344
21345
21346
21347 for b.Controls[0].Op == OpARMCMPconst {
21348 v_0 := b.Controls[0]
21349 if auxIntToInt32(v_0.AuxInt) != 0 {
21350 break
21351 }
21352 l := v_0.Args[0]
21353 if l.Op != OpARMANDconst {
21354 break
21355 }
21356 c := auxIntToInt32(l.AuxInt)
21357 x := l.Args[0]
21358 if !(l.Uses == 1) {
21359 break
21360 }
21361 v0 := b.NewValue0(v_0.Pos, OpARMTSTconst, types.TypeFlags)
21362 v0.AuxInt = int32ToAuxInt(c)
21363 v0.AddArg(x)
21364 b.resetWithControl(BlockARMNE, v0)
21365 return true
21366 }
21367
21368
21369
21370 for b.Controls[0].Op == OpARMCMPconst {
21371 v_0 := b.Controls[0]
21372 if auxIntToInt32(v_0.AuxInt) != 0 {
21373 break
21374 }
21375 l := v_0.Args[0]
21376 if l.Op != OpARMANDshiftLL {
21377 break
21378 }
21379 c := auxIntToInt32(l.AuxInt)
21380 y := l.Args[1]
21381 x := l.Args[0]
21382 if !(l.Uses == 1) {
21383 break
21384 }
21385 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLL, types.TypeFlags)
21386 v0.AuxInt = int32ToAuxInt(c)
21387 v0.AddArg2(x, y)
21388 b.resetWithControl(BlockARMNE, v0)
21389 return true
21390 }
21391
21392
21393
21394 for b.Controls[0].Op == OpARMCMPconst {
21395 v_0 := b.Controls[0]
21396 if auxIntToInt32(v_0.AuxInt) != 0 {
21397 break
21398 }
21399 l := v_0.Args[0]
21400 if l.Op != OpARMANDshiftRL {
21401 break
21402 }
21403 c := auxIntToInt32(l.AuxInt)
21404 y := l.Args[1]
21405 x := l.Args[0]
21406 if !(l.Uses == 1) {
21407 break
21408 }
21409 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRL, types.TypeFlags)
21410 v0.AuxInt = int32ToAuxInt(c)
21411 v0.AddArg2(x, y)
21412 b.resetWithControl(BlockARMNE, v0)
21413 return true
21414 }
21415
21416
21417
21418 for b.Controls[0].Op == OpARMCMPconst {
21419 v_0 := b.Controls[0]
21420 if auxIntToInt32(v_0.AuxInt) != 0 {
21421 break
21422 }
21423 l := v_0.Args[0]
21424 if l.Op != OpARMANDshiftRA {
21425 break
21426 }
21427 c := auxIntToInt32(l.AuxInt)
21428 y := l.Args[1]
21429 x := l.Args[0]
21430 if !(l.Uses == 1) {
21431 break
21432 }
21433 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRA, types.TypeFlags)
21434 v0.AuxInt = int32ToAuxInt(c)
21435 v0.AddArg2(x, y)
21436 b.resetWithControl(BlockARMNE, v0)
21437 return true
21438 }
21439
21440
21441
21442 for b.Controls[0].Op == OpARMCMPconst {
21443 v_0 := b.Controls[0]
21444 if auxIntToInt32(v_0.AuxInt) != 0 {
21445 break
21446 }
21447 l := v_0.Args[0]
21448 if l.Op != OpARMANDshiftLLreg {
21449 break
21450 }
21451 z := l.Args[2]
21452 x := l.Args[0]
21453 y := l.Args[1]
21454 if !(l.Uses == 1) {
21455 break
21456 }
21457 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftLLreg, types.TypeFlags)
21458 v0.AddArg3(x, y, z)
21459 b.resetWithControl(BlockARMNE, v0)
21460 return true
21461 }
21462
21463
21464
21465 for b.Controls[0].Op == OpARMCMPconst {
21466 v_0 := b.Controls[0]
21467 if auxIntToInt32(v_0.AuxInt) != 0 {
21468 break
21469 }
21470 l := v_0.Args[0]
21471 if l.Op != OpARMANDshiftRLreg {
21472 break
21473 }
21474 z := l.Args[2]
21475 x := l.Args[0]
21476 y := l.Args[1]
21477 if !(l.Uses == 1) {
21478 break
21479 }
21480 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRLreg, types.TypeFlags)
21481 v0.AddArg3(x, y, z)
21482 b.resetWithControl(BlockARMNE, v0)
21483 return true
21484 }
21485
21486
21487
21488 for b.Controls[0].Op == OpARMCMPconst {
21489 v_0 := b.Controls[0]
21490 if auxIntToInt32(v_0.AuxInt) != 0 {
21491 break
21492 }
21493 l := v_0.Args[0]
21494 if l.Op != OpARMANDshiftRAreg {
21495 break
21496 }
21497 z := l.Args[2]
21498 x := l.Args[0]
21499 y := l.Args[1]
21500 if !(l.Uses == 1) {
21501 break
21502 }
21503 v0 := b.NewValue0(v_0.Pos, OpARMTSTshiftRAreg, types.TypeFlags)
21504 v0.AddArg3(x, y, z)
21505 b.resetWithControl(BlockARMNE, v0)
21506 return true
21507 }
21508
21509
21510
21511 for b.Controls[0].Op == OpARMCMPconst {
21512 v_0 := b.Controls[0]
21513 if auxIntToInt32(v_0.AuxInt) != 0 {
21514 break
21515 }
21516 l := v_0.Args[0]
21517 if l.Op != OpARMXOR {
21518 break
21519 }
21520 _ = l.Args[1]
21521 l_0 := l.Args[0]
21522 l_1 := l.Args[1]
21523 for _i0 := 0; _i0 <= 1; _i0, l_0, l_1 = _i0+1, l_1, l_0 {
21524 x := l_0
21525 y := l_1
21526 if !(l.Uses == 1) {
21527 continue
21528 }
21529 v0 := b.NewValue0(v_0.Pos, OpARMTEQ, types.TypeFlags)
21530 v0.AddArg2(x, y)
21531 b.resetWithControl(BlockARMNE, v0)
21532 return true
21533 }
21534 break
21535 }
21536
21537
21538
21539 for b.Controls[0].Op == OpARMCMPconst {
21540 v_0 := b.Controls[0]
21541 if auxIntToInt32(v_0.AuxInt) != 0 {
21542 break
21543 }
21544 l := v_0.Args[0]
21545 if l.Op != OpARMXORconst {
21546 break
21547 }
21548 c := auxIntToInt32(l.AuxInt)
21549 x := l.Args[0]
21550 if !(l.Uses == 1) {
21551 break
21552 }
21553 v0 := b.NewValue0(v_0.Pos, OpARMTEQconst, types.TypeFlags)
21554 v0.AuxInt = int32ToAuxInt(c)
21555 v0.AddArg(x)
21556 b.resetWithControl(BlockARMNE, v0)
21557 return true
21558 }
21559
21560
21561
21562 for b.Controls[0].Op == OpARMCMPconst {
21563 v_0 := b.Controls[0]
21564 if auxIntToInt32(v_0.AuxInt) != 0 {
21565 break
21566 }
21567 l := v_0.Args[0]
21568 if l.Op != OpARMXORshiftLL {
21569 break
21570 }
21571 c := auxIntToInt32(l.AuxInt)
21572 y := l.Args[1]
21573 x := l.Args[0]
21574 if !(l.Uses == 1) {
21575 break
21576 }
21577 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLL, types.TypeFlags)
21578 v0.AuxInt = int32ToAuxInt(c)
21579 v0.AddArg2(x, y)
21580 b.resetWithControl(BlockARMNE, v0)
21581 return true
21582 }
21583
21584
21585
21586 for b.Controls[0].Op == OpARMCMPconst {
21587 v_0 := b.Controls[0]
21588 if auxIntToInt32(v_0.AuxInt) != 0 {
21589 break
21590 }
21591 l := v_0.Args[0]
21592 if l.Op != OpARMXORshiftRL {
21593 break
21594 }
21595 c := auxIntToInt32(l.AuxInt)
21596 y := l.Args[1]
21597 x := l.Args[0]
21598 if !(l.Uses == 1) {
21599 break
21600 }
21601 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRL, types.TypeFlags)
21602 v0.AuxInt = int32ToAuxInt(c)
21603 v0.AddArg2(x, y)
21604 b.resetWithControl(BlockARMNE, v0)
21605 return true
21606 }
21607
21608
21609
21610 for b.Controls[0].Op == OpARMCMPconst {
21611 v_0 := b.Controls[0]
21612 if auxIntToInt32(v_0.AuxInt) != 0 {
21613 break
21614 }
21615 l := v_0.Args[0]
21616 if l.Op != OpARMXORshiftRA {
21617 break
21618 }
21619 c := auxIntToInt32(l.AuxInt)
21620 y := l.Args[1]
21621 x := l.Args[0]
21622 if !(l.Uses == 1) {
21623 break
21624 }
21625 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRA, types.TypeFlags)
21626 v0.AuxInt = int32ToAuxInt(c)
21627 v0.AddArg2(x, y)
21628 b.resetWithControl(BlockARMNE, v0)
21629 return true
21630 }
21631
21632
21633
21634 for b.Controls[0].Op == OpARMCMPconst {
21635 v_0 := b.Controls[0]
21636 if auxIntToInt32(v_0.AuxInt) != 0 {
21637 break
21638 }
21639 l := v_0.Args[0]
21640 if l.Op != OpARMXORshiftLLreg {
21641 break
21642 }
21643 z := l.Args[2]
21644 x := l.Args[0]
21645 y := l.Args[1]
21646 if !(l.Uses == 1) {
21647 break
21648 }
21649 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftLLreg, types.TypeFlags)
21650 v0.AddArg3(x, y, z)
21651 b.resetWithControl(BlockARMNE, v0)
21652 return true
21653 }
21654
21655
21656
21657 for b.Controls[0].Op == OpARMCMPconst {
21658 v_0 := b.Controls[0]
21659 if auxIntToInt32(v_0.AuxInt) != 0 {
21660 break
21661 }
21662 l := v_0.Args[0]
21663 if l.Op != OpARMXORshiftRLreg {
21664 break
21665 }
21666 z := l.Args[2]
21667 x := l.Args[0]
21668 y := l.Args[1]
21669 if !(l.Uses == 1) {
21670 break
21671 }
21672 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRLreg, types.TypeFlags)
21673 v0.AddArg3(x, y, z)
21674 b.resetWithControl(BlockARMNE, v0)
21675 return true
21676 }
21677
21678
21679
21680 for b.Controls[0].Op == OpARMCMPconst {
21681 v_0 := b.Controls[0]
21682 if auxIntToInt32(v_0.AuxInt) != 0 {
21683 break
21684 }
21685 l := v_0.Args[0]
21686 if l.Op != OpARMXORshiftRAreg {
21687 break
21688 }
21689 z := l.Args[2]
21690 x := l.Args[0]
21691 y := l.Args[1]
21692 if !(l.Uses == 1) {
21693 break
21694 }
21695 v0 := b.NewValue0(v_0.Pos, OpARMTEQshiftRAreg, types.TypeFlags)
21696 v0.AddArg3(x, y, z)
21697 b.resetWithControl(BlockARMNE, v0)
21698 return true
21699 }
21700 case BlockARMUGE:
21701
21702
21703
21704 for b.Controls[0].Op == OpARMFlagConstant {
21705 v_0 := b.Controls[0]
21706 fc := auxIntToFlagConstant(v_0.AuxInt)
21707 if !(fc.uge()) {
21708 break
21709 }
21710 b.Reset(BlockFirst)
21711 return true
21712 }
21713
21714
21715
21716 for b.Controls[0].Op == OpARMFlagConstant {
21717 v_0 := b.Controls[0]
21718 fc := auxIntToFlagConstant(v_0.AuxInt)
21719 if !(!fc.uge()) {
21720 break
21721 }
21722 b.Reset(BlockFirst)
21723 b.swapSuccessors()
21724 return true
21725 }
21726
21727
21728 for b.Controls[0].Op == OpARMInvertFlags {
21729 v_0 := b.Controls[0]
21730 cmp := v_0.Args[0]
21731 b.resetWithControl(BlockARMULE, cmp)
21732 return true
21733 }
21734 case BlockARMUGT:
21735
21736
21737
21738 for b.Controls[0].Op == OpARMFlagConstant {
21739 v_0 := b.Controls[0]
21740 fc := auxIntToFlagConstant(v_0.AuxInt)
21741 if !(fc.ugt()) {
21742 break
21743 }
21744 b.Reset(BlockFirst)
21745 return true
21746 }
21747
21748
21749
21750 for b.Controls[0].Op == OpARMFlagConstant {
21751 v_0 := b.Controls[0]
21752 fc := auxIntToFlagConstant(v_0.AuxInt)
21753 if !(!fc.ugt()) {
21754 break
21755 }
21756 b.Reset(BlockFirst)
21757 b.swapSuccessors()
21758 return true
21759 }
21760
21761
21762 for b.Controls[0].Op == OpARMInvertFlags {
21763 v_0 := b.Controls[0]
21764 cmp := v_0.Args[0]
21765 b.resetWithControl(BlockARMULT, cmp)
21766 return true
21767 }
21768 case BlockARMULE:
21769
21770
21771
21772 for b.Controls[0].Op == OpARMFlagConstant {
21773 v_0 := b.Controls[0]
21774 fc := auxIntToFlagConstant(v_0.AuxInt)
21775 if !(fc.ule()) {
21776 break
21777 }
21778 b.Reset(BlockFirst)
21779 return true
21780 }
21781
21782
21783
21784 for b.Controls[0].Op == OpARMFlagConstant {
21785 v_0 := b.Controls[0]
21786 fc := auxIntToFlagConstant(v_0.AuxInt)
21787 if !(!fc.ule()) {
21788 break
21789 }
21790 b.Reset(BlockFirst)
21791 b.swapSuccessors()
21792 return true
21793 }
21794
21795
21796 for b.Controls[0].Op == OpARMInvertFlags {
21797 v_0 := b.Controls[0]
21798 cmp := v_0.Args[0]
21799 b.resetWithControl(BlockARMUGE, cmp)
21800 return true
21801 }
21802 case BlockARMULT:
21803
21804
21805
21806 for b.Controls[0].Op == OpARMFlagConstant {
21807 v_0 := b.Controls[0]
21808 fc := auxIntToFlagConstant(v_0.AuxInt)
21809 if !(fc.ult()) {
21810 break
21811 }
21812 b.Reset(BlockFirst)
21813 return true
21814 }
21815
21816
21817
21818 for b.Controls[0].Op == OpARMFlagConstant {
21819 v_0 := b.Controls[0]
21820 fc := auxIntToFlagConstant(v_0.AuxInt)
21821 if !(!fc.ult()) {
21822 break
21823 }
21824 b.Reset(BlockFirst)
21825 b.swapSuccessors()
21826 return true
21827 }
21828
21829
21830 for b.Controls[0].Op == OpARMInvertFlags {
21831 v_0 := b.Controls[0]
21832 cmp := v_0.Args[0]
21833 b.resetWithControl(BlockARMUGT, cmp)
21834 return true
21835 }
21836 }
21837 return false
21838 }
21839
View as plain text