Source file src/pkg/cmd/compile/internal/ssa/rewritePPC64.go
1
2
3
4 package ssa
5
6 import "fmt"
7 import "math"
8 import "cmd/internal/obj"
9 import "cmd/internal/objabi"
10 import "cmd/compile/internal/types"
11
12 var _ = fmt.Println
13 var _ = math.MinInt8
14 var _ = obj.ANOP
15 var _ = objabi.GOROOT
16 var _ = types.TypeMem
17
18 func rewriteValuePPC64(v *Value) bool {
19 switch v.Op {
20 case OpAbs:
21 return rewriteValuePPC64_OpAbs_0(v)
22 case OpAdd16:
23 return rewriteValuePPC64_OpAdd16_0(v)
24 case OpAdd32:
25 return rewriteValuePPC64_OpAdd32_0(v)
26 case OpAdd32F:
27 return rewriteValuePPC64_OpAdd32F_0(v)
28 case OpAdd64:
29 return rewriteValuePPC64_OpAdd64_0(v)
30 case OpAdd64F:
31 return rewriteValuePPC64_OpAdd64F_0(v)
32 case OpAdd64carry:
33 return rewriteValuePPC64_OpAdd64carry_0(v)
34 case OpAdd8:
35 return rewriteValuePPC64_OpAdd8_0(v)
36 case OpAddPtr:
37 return rewriteValuePPC64_OpAddPtr_0(v)
38 case OpAddr:
39 return rewriteValuePPC64_OpAddr_0(v)
40 case OpAnd16:
41 return rewriteValuePPC64_OpAnd16_0(v)
42 case OpAnd32:
43 return rewriteValuePPC64_OpAnd32_0(v)
44 case OpAnd64:
45 return rewriteValuePPC64_OpAnd64_0(v)
46 case OpAnd8:
47 return rewriteValuePPC64_OpAnd8_0(v)
48 case OpAndB:
49 return rewriteValuePPC64_OpAndB_0(v)
50 case OpAtomicAdd32:
51 return rewriteValuePPC64_OpAtomicAdd32_0(v)
52 case OpAtomicAdd64:
53 return rewriteValuePPC64_OpAtomicAdd64_0(v)
54 case OpAtomicAnd8:
55 return rewriteValuePPC64_OpAtomicAnd8_0(v)
56 case OpAtomicCompareAndSwap32:
57 return rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v)
58 case OpAtomicCompareAndSwap64:
59 return rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v)
60 case OpAtomicCompareAndSwapRel32:
61 return rewriteValuePPC64_OpAtomicCompareAndSwapRel32_0(v)
62 case OpAtomicExchange32:
63 return rewriteValuePPC64_OpAtomicExchange32_0(v)
64 case OpAtomicExchange64:
65 return rewriteValuePPC64_OpAtomicExchange64_0(v)
66 case OpAtomicLoad32:
67 return rewriteValuePPC64_OpAtomicLoad32_0(v)
68 case OpAtomicLoad64:
69 return rewriteValuePPC64_OpAtomicLoad64_0(v)
70 case OpAtomicLoad8:
71 return rewriteValuePPC64_OpAtomicLoad8_0(v)
72 case OpAtomicLoadAcq32:
73 return rewriteValuePPC64_OpAtomicLoadAcq32_0(v)
74 case OpAtomicLoadPtr:
75 return rewriteValuePPC64_OpAtomicLoadPtr_0(v)
76 case OpAtomicOr8:
77 return rewriteValuePPC64_OpAtomicOr8_0(v)
78 case OpAtomicStore32:
79 return rewriteValuePPC64_OpAtomicStore32_0(v)
80 case OpAtomicStore64:
81 return rewriteValuePPC64_OpAtomicStore64_0(v)
82 case OpAtomicStoreRel32:
83 return rewriteValuePPC64_OpAtomicStoreRel32_0(v)
84 case OpAvg64u:
85 return rewriteValuePPC64_OpAvg64u_0(v)
86 case OpBitLen32:
87 return rewriteValuePPC64_OpBitLen32_0(v)
88 case OpBitLen64:
89 return rewriteValuePPC64_OpBitLen64_0(v)
90 case OpCeil:
91 return rewriteValuePPC64_OpCeil_0(v)
92 case OpClosureCall:
93 return rewriteValuePPC64_OpClosureCall_0(v)
94 case OpCom16:
95 return rewriteValuePPC64_OpCom16_0(v)
96 case OpCom32:
97 return rewriteValuePPC64_OpCom32_0(v)
98 case OpCom64:
99 return rewriteValuePPC64_OpCom64_0(v)
100 case OpCom8:
101 return rewriteValuePPC64_OpCom8_0(v)
102 case OpConst16:
103 return rewriteValuePPC64_OpConst16_0(v)
104 case OpConst32:
105 return rewriteValuePPC64_OpConst32_0(v)
106 case OpConst32F:
107 return rewriteValuePPC64_OpConst32F_0(v)
108 case OpConst64:
109 return rewriteValuePPC64_OpConst64_0(v)
110 case OpConst64F:
111 return rewriteValuePPC64_OpConst64F_0(v)
112 case OpConst8:
113 return rewriteValuePPC64_OpConst8_0(v)
114 case OpConstBool:
115 return rewriteValuePPC64_OpConstBool_0(v)
116 case OpConstNil:
117 return rewriteValuePPC64_OpConstNil_0(v)
118 case OpCopysign:
119 return rewriteValuePPC64_OpCopysign_0(v)
120 case OpCtz16:
121 return rewriteValuePPC64_OpCtz16_0(v)
122 case OpCtz32:
123 return rewriteValuePPC64_OpCtz32_0(v)
124 case OpCtz32NonZero:
125 return rewriteValuePPC64_OpCtz32NonZero_0(v)
126 case OpCtz64:
127 return rewriteValuePPC64_OpCtz64_0(v)
128 case OpCtz64NonZero:
129 return rewriteValuePPC64_OpCtz64NonZero_0(v)
130 case OpCtz8:
131 return rewriteValuePPC64_OpCtz8_0(v)
132 case OpCvt32Fto32:
133 return rewriteValuePPC64_OpCvt32Fto32_0(v)
134 case OpCvt32Fto64:
135 return rewriteValuePPC64_OpCvt32Fto64_0(v)
136 case OpCvt32Fto64F:
137 return rewriteValuePPC64_OpCvt32Fto64F_0(v)
138 case OpCvt32to32F:
139 return rewriteValuePPC64_OpCvt32to32F_0(v)
140 case OpCvt32to64F:
141 return rewriteValuePPC64_OpCvt32to64F_0(v)
142 case OpCvt64Fto32:
143 return rewriteValuePPC64_OpCvt64Fto32_0(v)
144 case OpCvt64Fto32F:
145 return rewriteValuePPC64_OpCvt64Fto32F_0(v)
146 case OpCvt64Fto64:
147 return rewriteValuePPC64_OpCvt64Fto64_0(v)
148 case OpCvt64to32F:
149 return rewriteValuePPC64_OpCvt64to32F_0(v)
150 case OpCvt64to64F:
151 return rewriteValuePPC64_OpCvt64to64F_0(v)
152 case OpDiv16:
153 return rewriteValuePPC64_OpDiv16_0(v)
154 case OpDiv16u:
155 return rewriteValuePPC64_OpDiv16u_0(v)
156 case OpDiv32:
157 return rewriteValuePPC64_OpDiv32_0(v)
158 case OpDiv32F:
159 return rewriteValuePPC64_OpDiv32F_0(v)
160 case OpDiv32u:
161 return rewriteValuePPC64_OpDiv32u_0(v)
162 case OpDiv64:
163 return rewriteValuePPC64_OpDiv64_0(v)
164 case OpDiv64F:
165 return rewriteValuePPC64_OpDiv64F_0(v)
166 case OpDiv64u:
167 return rewriteValuePPC64_OpDiv64u_0(v)
168 case OpDiv8:
169 return rewriteValuePPC64_OpDiv8_0(v)
170 case OpDiv8u:
171 return rewriteValuePPC64_OpDiv8u_0(v)
172 case OpEq16:
173 return rewriteValuePPC64_OpEq16_0(v)
174 case OpEq32:
175 return rewriteValuePPC64_OpEq32_0(v)
176 case OpEq32F:
177 return rewriteValuePPC64_OpEq32F_0(v)
178 case OpEq64:
179 return rewriteValuePPC64_OpEq64_0(v)
180 case OpEq64F:
181 return rewriteValuePPC64_OpEq64F_0(v)
182 case OpEq8:
183 return rewriteValuePPC64_OpEq8_0(v)
184 case OpEqB:
185 return rewriteValuePPC64_OpEqB_0(v)
186 case OpEqPtr:
187 return rewriteValuePPC64_OpEqPtr_0(v)
188 case OpFloor:
189 return rewriteValuePPC64_OpFloor_0(v)
190 case OpGeq16:
191 return rewriteValuePPC64_OpGeq16_0(v)
192 case OpGeq16U:
193 return rewriteValuePPC64_OpGeq16U_0(v)
194 case OpGeq32:
195 return rewriteValuePPC64_OpGeq32_0(v)
196 case OpGeq32F:
197 return rewriteValuePPC64_OpGeq32F_0(v)
198 case OpGeq32U:
199 return rewriteValuePPC64_OpGeq32U_0(v)
200 case OpGeq64:
201 return rewriteValuePPC64_OpGeq64_0(v)
202 case OpGeq64F:
203 return rewriteValuePPC64_OpGeq64F_0(v)
204 case OpGeq64U:
205 return rewriteValuePPC64_OpGeq64U_0(v)
206 case OpGeq8:
207 return rewriteValuePPC64_OpGeq8_0(v)
208 case OpGeq8U:
209 return rewriteValuePPC64_OpGeq8U_0(v)
210 case OpGetCallerPC:
211 return rewriteValuePPC64_OpGetCallerPC_0(v)
212 case OpGetCallerSP:
213 return rewriteValuePPC64_OpGetCallerSP_0(v)
214 case OpGetClosurePtr:
215 return rewriteValuePPC64_OpGetClosurePtr_0(v)
216 case OpGreater16:
217 return rewriteValuePPC64_OpGreater16_0(v)
218 case OpGreater16U:
219 return rewriteValuePPC64_OpGreater16U_0(v)
220 case OpGreater32:
221 return rewriteValuePPC64_OpGreater32_0(v)
222 case OpGreater32F:
223 return rewriteValuePPC64_OpGreater32F_0(v)
224 case OpGreater32U:
225 return rewriteValuePPC64_OpGreater32U_0(v)
226 case OpGreater64:
227 return rewriteValuePPC64_OpGreater64_0(v)
228 case OpGreater64F:
229 return rewriteValuePPC64_OpGreater64F_0(v)
230 case OpGreater64U:
231 return rewriteValuePPC64_OpGreater64U_0(v)
232 case OpGreater8:
233 return rewriteValuePPC64_OpGreater8_0(v)
234 case OpGreater8U:
235 return rewriteValuePPC64_OpGreater8U_0(v)
236 case OpHmul32:
237 return rewriteValuePPC64_OpHmul32_0(v)
238 case OpHmul32u:
239 return rewriteValuePPC64_OpHmul32u_0(v)
240 case OpHmul64:
241 return rewriteValuePPC64_OpHmul64_0(v)
242 case OpHmul64u:
243 return rewriteValuePPC64_OpHmul64u_0(v)
244 case OpInterCall:
245 return rewriteValuePPC64_OpInterCall_0(v)
246 case OpIsInBounds:
247 return rewriteValuePPC64_OpIsInBounds_0(v)
248 case OpIsNonNil:
249 return rewriteValuePPC64_OpIsNonNil_0(v)
250 case OpIsSliceInBounds:
251 return rewriteValuePPC64_OpIsSliceInBounds_0(v)
252 case OpLeq16:
253 return rewriteValuePPC64_OpLeq16_0(v)
254 case OpLeq16U:
255 return rewriteValuePPC64_OpLeq16U_0(v)
256 case OpLeq32:
257 return rewriteValuePPC64_OpLeq32_0(v)
258 case OpLeq32F:
259 return rewriteValuePPC64_OpLeq32F_0(v)
260 case OpLeq32U:
261 return rewriteValuePPC64_OpLeq32U_0(v)
262 case OpLeq64:
263 return rewriteValuePPC64_OpLeq64_0(v)
264 case OpLeq64F:
265 return rewriteValuePPC64_OpLeq64F_0(v)
266 case OpLeq64U:
267 return rewriteValuePPC64_OpLeq64U_0(v)
268 case OpLeq8:
269 return rewriteValuePPC64_OpLeq8_0(v)
270 case OpLeq8U:
271 return rewriteValuePPC64_OpLeq8U_0(v)
272 case OpLess16:
273 return rewriteValuePPC64_OpLess16_0(v)
274 case OpLess16U:
275 return rewriteValuePPC64_OpLess16U_0(v)
276 case OpLess32:
277 return rewriteValuePPC64_OpLess32_0(v)
278 case OpLess32F:
279 return rewriteValuePPC64_OpLess32F_0(v)
280 case OpLess32U:
281 return rewriteValuePPC64_OpLess32U_0(v)
282 case OpLess64:
283 return rewriteValuePPC64_OpLess64_0(v)
284 case OpLess64F:
285 return rewriteValuePPC64_OpLess64F_0(v)
286 case OpLess64U:
287 return rewriteValuePPC64_OpLess64U_0(v)
288 case OpLess8:
289 return rewriteValuePPC64_OpLess8_0(v)
290 case OpLess8U:
291 return rewriteValuePPC64_OpLess8U_0(v)
292 case OpLoad:
293 return rewriteValuePPC64_OpLoad_0(v)
294 case OpLocalAddr:
295 return rewriteValuePPC64_OpLocalAddr_0(v)
296 case OpLsh16x16:
297 return rewriteValuePPC64_OpLsh16x16_0(v)
298 case OpLsh16x32:
299 return rewriteValuePPC64_OpLsh16x32_0(v)
300 case OpLsh16x64:
301 return rewriteValuePPC64_OpLsh16x64_0(v)
302 case OpLsh16x8:
303 return rewriteValuePPC64_OpLsh16x8_0(v)
304 case OpLsh32x16:
305 return rewriteValuePPC64_OpLsh32x16_0(v)
306 case OpLsh32x32:
307 return rewriteValuePPC64_OpLsh32x32_0(v)
308 case OpLsh32x64:
309 return rewriteValuePPC64_OpLsh32x64_0(v)
310 case OpLsh32x8:
311 return rewriteValuePPC64_OpLsh32x8_0(v)
312 case OpLsh64x16:
313 return rewriteValuePPC64_OpLsh64x16_0(v)
314 case OpLsh64x32:
315 return rewriteValuePPC64_OpLsh64x32_0(v)
316 case OpLsh64x64:
317 return rewriteValuePPC64_OpLsh64x64_0(v)
318 case OpLsh64x8:
319 return rewriteValuePPC64_OpLsh64x8_0(v)
320 case OpLsh8x16:
321 return rewriteValuePPC64_OpLsh8x16_0(v)
322 case OpLsh8x32:
323 return rewriteValuePPC64_OpLsh8x32_0(v)
324 case OpLsh8x64:
325 return rewriteValuePPC64_OpLsh8x64_0(v)
326 case OpLsh8x8:
327 return rewriteValuePPC64_OpLsh8x8_0(v)
328 case OpMod16:
329 return rewriteValuePPC64_OpMod16_0(v)
330 case OpMod16u:
331 return rewriteValuePPC64_OpMod16u_0(v)
332 case OpMod32:
333 return rewriteValuePPC64_OpMod32_0(v)
334 case OpMod32u:
335 return rewriteValuePPC64_OpMod32u_0(v)
336 case OpMod64:
337 return rewriteValuePPC64_OpMod64_0(v)
338 case OpMod64u:
339 return rewriteValuePPC64_OpMod64u_0(v)
340 case OpMod8:
341 return rewriteValuePPC64_OpMod8_0(v)
342 case OpMod8u:
343 return rewriteValuePPC64_OpMod8u_0(v)
344 case OpMove:
345 return rewriteValuePPC64_OpMove_0(v) || rewriteValuePPC64_OpMove_10(v)
346 case OpMul16:
347 return rewriteValuePPC64_OpMul16_0(v)
348 case OpMul32:
349 return rewriteValuePPC64_OpMul32_0(v)
350 case OpMul32F:
351 return rewriteValuePPC64_OpMul32F_0(v)
352 case OpMul64:
353 return rewriteValuePPC64_OpMul64_0(v)
354 case OpMul64F:
355 return rewriteValuePPC64_OpMul64F_0(v)
356 case OpMul64uhilo:
357 return rewriteValuePPC64_OpMul64uhilo_0(v)
358 case OpMul8:
359 return rewriteValuePPC64_OpMul8_0(v)
360 case OpNeg16:
361 return rewriteValuePPC64_OpNeg16_0(v)
362 case OpNeg32:
363 return rewriteValuePPC64_OpNeg32_0(v)
364 case OpNeg32F:
365 return rewriteValuePPC64_OpNeg32F_0(v)
366 case OpNeg64:
367 return rewriteValuePPC64_OpNeg64_0(v)
368 case OpNeg64F:
369 return rewriteValuePPC64_OpNeg64F_0(v)
370 case OpNeg8:
371 return rewriteValuePPC64_OpNeg8_0(v)
372 case OpNeq16:
373 return rewriteValuePPC64_OpNeq16_0(v)
374 case OpNeq32:
375 return rewriteValuePPC64_OpNeq32_0(v)
376 case OpNeq32F:
377 return rewriteValuePPC64_OpNeq32F_0(v)
378 case OpNeq64:
379 return rewriteValuePPC64_OpNeq64_0(v)
380 case OpNeq64F:
381 return rewriteValuePPC64_OpNeq64F_0(v)
382 case OpNeq8:
383 return rewriteValuePPC64_OpNeq8_0(v)
384 case OpNeqB:
385 return rewriteValuePPC64_OpNeqB_0(v)
386 case OpNeqPtr:
387 return rewriteValuePPC64_OpNeqPtr_0(v)
388 case OpNilCheck:
389 return rewriteValuePPC64_OpNilCheck_0(v)
390 case OpNot:
391 return rewriteValuePPC64_OpNot_0(v)
392 case OpOffPtr:
393 return rewriteValuePPC64_OpOffPtr_0(v)
394 case OpOr16:
395 return rewriteValuePPC64_OpOr16_0(v)
396 case OpOr32:
397 return rewriteValuePPC64_OpOr32_0(v)
398 case OpOr64:
399 return rewriteValuePPC64_OpOr64_0(v)
400 case OpOr8:
401 return rewriteValuePPC64_OpOr8_0(v)
402 case OpOrB:
403 return rewriteValuePPC64_OpOrB_0(v)
404 case OpPPC64ADD:
405 return rewriteValuePPC64_OpPPC64ADD_0(v)
406 case OpPPC64ADDconst:
407 return rewriteValuePPC64_OpPPC64ADDconst_0(v)
408 case OpPPC64AND:
409 return rewriteValuePPC64_OpPPC64AND_0(v) || rewriteValuePPC64_OpPPC64AND_10(v)
410 case OpPPC64ANDconst:
411 return rewriteValuePPC64_OpPPC64ANDconst_0(v) || rewriteValuePPC64_OpPPC64ANDconst_10(v)
412 case OpPPC64CMP:
413 return rewriteValuePPC64_OpPPC64CMP_0(v)
414 case OpPPC64CMPU:
415 return rewriteValuePPC64_OpPPC64CMPU_0(v)
416 case OpPPC64CMPUconst:
417 return rewriteValuePPC64_OpPPC64CMPUconst_0(v)
418 case OpPPC64CMPW:
419 return rewriteValuePPC64_OpPPC64CMPW_0(v)
420 case OpPPC64CMPWU:
421 return rewriteValuePPC64_OpPPC64CMPWU_0(v)
422 case OpPPC64CMPWUconst:
423 return rewriteValuePPC64_OpPPC64CMPWUconst_0(v)
424 case OpPPC64CMPWconst:
425 return rewriteValuePPC64_OpPPC64CMPWconst_0(v)
426 case OpPPC64CMPconst:
427 return rewriteValuePPC64_OpPPC64CMPconst_0(v)
428 case OpPPC64Equal:
429 return rewriteValuePPC64_OpPPC64Equal_0(v)
430 case OpPPC64FABS:
431 return rewriteValuePPC64_OpPPC64FABS_0(v)
432 case OpPPC64FADD:
433 return rewriteValuePPC64_OpPPC64FADD_0(v)
434 case OpPPC64FADDS:
435 return rewriteValuePPC64_OpPPC64FADDS_0(v)
436 case OpPPC64FCEIL:
437 return rewriteValuePPC64_OpPPC64FCEIL_0(v)
438 case OpPPC64FFLOOR:
439 return rewriteValuePPC64_OpPPC64FFLOOR_0(v)
440 case OpPPC64FMOVDload:
441 return rewriteValuePPC64_OpPPC64FMOVDload_0(v)
442 case OpPPC64FMOVDstore:
443 return rewriteValuePPC64_OpPPC64FMOVDstore_0(v)
444 case OpPPC64FMOVSload:
445 return rewriteValuePPC64_OpPPC64FMOVSload_0(v)
446 case OpPPC64FMOVSstore:
447 return rewriteValuePPC64_OpPPC64FMOVSstore_0(v)
448 case OpPPC64FNEG:
449 return rewriteValuePPC64_OpPPC64FNEG_0(v)
450 case OpPPC64FSQRT:
451 return rewriteValuePPC64_OpPPC64FSQRT_0(v)
452 case OpPPC64FSUB:
453 return rewriteValuePPC64_OpPPC64FSUB_0(v)
454 case OpPPC64FSUBS:
455 return rewriteValuePPC64_OpPPC64FSUBS_0(v)
456 case OpPPC64FTRUNC:
457 return rewriteValuePPC64_OpPPC64FTRUNC_0(v)
458 case OpPPC64GreaterEqual:
459 return rewriteValuePPC64_OpPPC64GreaterEqual_0(v)
460 case OpPPC64GreaterThan:
461 return rewriteValuePPC64_OpPPC64GreaterThan_0(v)
462 case OpPPC64LessEqual:
463 return rewriteValuePPC64_OpPPC64LessEqual_0(v)
464 case OpPPC64LessThan:
465 return rewriteValuePPC64_OpPPC64LessThan_0(v)
466 case OpPPC64MFVSRD:
467 return rewriteValuePPC64_OpPPC64MFVSRD_0(v)
468 case OpPPC64MOVBZload:
469 return rewriteValuePPC64_OpPPC64MOVBZload_0(v)
470 case OpPPC64MOVBZloadidx:
471 return rewriteValuePPC64_OpPPC64MOVBZloadidx_0(v)
472 case OpPPC64MOVBZreg:
473 return rewriteValuePPC64_OpPPC64MOVBZreg_0(v) || rewriteValuePPC64_OpPPC64MOVBZreg_10(v)
474 case OpPPC64MOVBreg:
475 return rewriteValuePPC64_OpPPC64MOVBreg_0(v) || rewriteValuePPC64_OpPPC64MOVBreg_10(v)
476 case OpPPC64MOVBstore:
477 return rewriteValuePPC64_OpPPC64MOVBstore_0(v) || rewriteValuePPC64_OpPPC64MOVBstore_10(v) || rewriteValuePPC64_OpPPC64MOVBstore_20(v)
478 case OpPPC64MOVBstoreidx:
479 return rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v) || rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v)
480 case OpPPC64MOVBstorezero:
481 return rewriteValuePPC64_OpPPC64MOVBstorezero_0(v)
482 case OpPPC64MOVDload:
483 return rewriteValuePPC64_OpPPC64MOVDload_0(v)
484 case OpPPC64MOVDloadidx:
485 return rewriteValuePPC64_OpPPC64MOVDloadidx_0(v)
486 case OpPPC64MOVDstore:
487 return rewriteValuePPC64_OpPPC64MOVDstore_0(v)
488 case OpPPC64MOVDstoreidx:
489 return rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v)
490 case OpPPC64MOVDstorezero:
491 return rewriteValuePPC64_OpPPC64MOVDstorezero_0(v)
492 case OpPPC64MOVHBRstore:
493 return rewriteValuePPC64_OpPPC64MOVHBRstore_0(v)
494 case OpPPC64MOVHZload:
495 return rewriteValuePPC64_OpPPC64MOVHZload_0(v)
496 case OpPPC64MOVHZloadidx:
497 return rewriteValuePPC64_OpPPC64MOVHZloadidx_0(v)
498 case OpPPC64MOVHZreg:
499 return rewriteValuePPC64_OpPPC64MOVHZreg_0(v) || rewriteValuePPC64_OpPPC64MOVHZreg_10(v)
500 case OpPPC64MOVHload:
501 return rewriteValuePPC64_OpPPC64MOVHload_0(v)
502 case OpPPC64MOVHloadidx:
503 return rewriteValuePPC64_OpPPC64MOVHloadidx_0(v)
504 case OpPPC64MOVHreg:
505 return rewriteValuePPC64_OpPPC64MOVHreg_0(v) || rewriteValuePPC64_OpPPC64MOVHreg_10(v)
506 case OpPPC64MOVHstore:
507 return rewriteValuePPC64_OpPPC64MOVHstore_0(v)
508 case OpPPC64MOVHstoreidx:
509 return rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v)
510 case OpPPC64MOVHstorezero:
511 return rewriteValuePPC64_OpPPC64MOVHstorezero_0(v)
512 case OpPPC64MOVWBRstore:
513 return rewriteValuePPC64_OpPPC64MOVWBRstore_0(v)
514 case OpPPC64MOVWZload:
515 return rewriteValuePPC64_OpPPC64MOVWZload_0(v)
516 case OpPPC64MOVWZloadidx:
517 return rewriteValuePPC64_OpPPC64MOVWZloadidx_0(v)
518 case OpPPC64MOVWZreg:
519 return rewriteValuePPC64_OpPPC64MOVWZreg_0(v) || rewriteValuePPC64_OpPPC64MOVWZreg_10(v) || rewriteValuePPC64_OpPPC64MOVWZreg_20(v)
520 case OpPPC64MOVWload:
521 return rewriteValuePPC64_OpPPC64MOVWload_0(v)
522 case OpPPC64MOVWloadidx:
523 return rewriteValuePPC64_OpPPC64MOVWloadidx_0(v)
524 case OpPPC64MOVWreg:
525 return rewriteValuePPC64_OpPPC64MOVWreg_0(v) || rewriteValuePPC64_OpPPC64MOVWreg_10(v)
526 case OpPPC64MOVWstore:
527 return rewriteValuePPC64_OpPPC64MOVWstore_0(v)
528 case OpPPC64MOVWstoreidx:
529 return rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v)
530 case OpPPC64MOVWstorezero:
531 return rewriteValuePPC64_OpPPC64MOVWstorezero_0(v)
532 case OpPPC64MTVSRD:
533 return rewriteValuePPC64_OpPPC64MTVSRD_0(v)
534 case OpPPC64MaskIfNotCarry:
535 return rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v)
536 case OpPPC64NotEqual:
537 return rewriteValuePPC64_OpPPC64NotEqual_0(v)
538 case OpPPC64OR:
539 return rewriteValuePPC64_OpPPC64OR_0(v) || rewriteValuePPC64_OpPPC64OR_10(v) || rewriteValuePPC64_OpPPC64OR_20(v) || rewriteValuePPC64_OpPPC64OR_30(v) || rewriteValuePPC64_OpPPC64OR_40(v) || rewriteValuePPC64_OpPPC64OR_50(v) || rewriteValuePPC64_OpPPC64OR_60(v) || rewriteValuePPC64_OpPPC64OR_70(v) || rewriteValuePPC64_OpPPC64OR_80(v) || rewriteValuePPC64_OpPPC64OR_90(v) || rewriteValuePPC64_OpPPC64OR_100(v) || rewriteValuePPC64_OpPPC64OR_110(v)
540 case OpPPC64ORN:
541 return rewriteValuePPC64_OpPPC64ORN_0(v)
542 case OpPPC64ORconst:
543 return rewriteValuePPC64_OpPPC64ORconst_0(v)
544 case OpPPC64ROTL:
545 return rewriteValuePPC64_OpPPC64ROTL_0(v)
546 case OpPPC64ROTLW:
547 return rewriteValuePPC64_OpPPC64ROTLW_0(v)
548 case OpPPC64SUB:
549 return rewriteValuePPC64_OpPPC64SUB_0(v)
550 case OpPPC64XOR:
551 return rewriteValuePPC64_OpPPC64XOR_0(v) || rewriteValuePPC64_OpPPC64XOR_10(v)
552 case OpPPC64XORconst:
553 return rewriteValuePPC64_OpPPC64XORconst_0(v)
554 case OpPanicBounds:
555 return rewriteValuePPC64_OpPanicBounds_0(v)
556 case OpPopCount16:
557 return rewriteValuePPC64_OpPopCount16_0(v)
558 case OpPopCount32:
559 return rewriteValuePPC64_OpPopCount32_0(v)
560 case OpPopCount64:
561 return rewriteValuePPC64_OpPopCount64_0(v)
562 case OpPopCount8:
563 return rewriteValuePPC64_OpPopCount8_0(v)
564 case OpRotateLeft16:
565 return rewriteValuePPC64_OpRotateLeft16_0(v)
566 case OpRotateLeft32:
567 return rewriteValuePPC64_OpRotateLeft32_0(v)
568 case OpRotateLeft64:
569 return rewriteValuePPC64_OpRotateLeft64_0(v)
570 case OpRotateLeft8:
571 return rewriteValuePPC64_OpRotateLeft8_0(v)
572 case OpRound:
573 return rewriteValuePPC64_OpRound_0(v)
574 case OpRound32F:
575 return rewriteValuePPC64_OpRound32F_0(v)
576 case OpRound64F:
577 return rewriteValuePPC64_OpRound64F_0(v)
578 case OpRsh16Ux16:
579 return rewriteValuePPC64_OpRsh16Ux16_0(v)
580 case OpRsh16Ux32:
581 return rewriteValuePPC64_OpRsh16Ux32_0(v)
582 case OpRsh16Ux64:
583 return rewriteValuePPC64_OpRsh16Ux64_0(v)
584 case OpRsh16Ux8:
585 return rewriteValuePPC64_OpRsh16Ux8_0(v)
586 case OpRsh16x16:
587 return rewriteValuePPC64_OpRsh16x16_0(v)
588 case OpRsh16x32:
589 return rewriteValuePPC64_OpRsh16x32_0(v)
590 case OpRsh16x64:
591 return rewriteValuePPC64_OpRsh16x64_0(v)
592 case OpRsh16x8:
593 return rewriteValuePPC64_OpRsh16x8_0(v)
594 case OpRsh32Ux16:
595 return rewriteValuePPC64_OpRsh32Ux16_0(v)
596 case OpRsh32Ux32:
597 return rewriteValuePPC64_OpRsh32Ux32_0(v)
598 case OpRsh32Ux64:
599 return rewriteValuePPC64_OpRsh32Ux64_0(v) || rewriteValuePPC64_OpRsh32Ux64_10(v)
600 case OpRsh32Ux8:
601 return rewriteValuePPC64_OpRsh32Ux8_0(v)
602 case OpRsh32x16:
603 return rewriteValuePPC64_OpRsh32x16_0(v)
604 case OpRsh32x32:
605 return rewriteValuePPC64_OpRsh32x32_0(v)
606 case OpRsh32x64:
607 return rewriteValuePPC64_OpRsh32x64_0(v) || rewriteValuePPC64_OpRsh32x64_10(v)
608 case OpRsh32x8:
609 return rewriteValuePPC64_OpRsh32x8_0(v)
610 case OpRsh64Ux16:
611 return rewriteValuePPC64_OpRsh64Ux16_0(v)
612 case OpRsh64Ux32:
613 return rewriteValuePPC64_OpRsh64Ux32_0(v)
614 case OpRsh64Ux64:
615 return rewriteValuePPC64_OpRsh64Ux64_0(v) || rewriteValuePPC64_OpRsh64Ux64_10(v)
616 case OpRsh64Ux8:
617 return rewriteValuePPC64_OpRsh64Ux8_0(v)
618 case OpRsh64x16:
619 return rewriteValuePPC64_OpRsh64x16_0(v)
620 case OpRsh64x32:
621 return rewriteValuePPC64_OpRsh64x32_0(v)
622 case OpRsh64x64:
623 return rewriteValuePPC64_OpRsh64x64_0(v) || rewriteValuePPC64_OpRsh64x64_10(v)
624 case OpRsh64x8:
625 return rewriteValuePPC64_OpRsh64x8_0(v)
626 case OpRsh8Ux16:
627 return rewriteValuePPC64_OpRsh8Ux16_0(v)
628 case OpRsh8Ux32:
629 return rewriteValuePPC64_OpRsh8Ux32_0(v)
630 case OpRsh8Ux64:
631 return rewriteValuePPC64_OpRsh8Ux64_0(v)
632 case OpRsh8Ux8:
633 return rewriteValuePPC64_OpRsh8Ux8_0(v)
634 case OpRsh8x16:
635 return rewriteValuePPC64_OpRsh8x16_0(v)
636 case OpRsh8x32:
637 return rewriteValuePPC64_OpRsh8x32_0(v)
638 case OpRsh8x64:
639 return rewriteValuePPC64_OpRsh8x64_0(v)
640 case OpRsh8x8:
641 return rewriteValuePPC64_OpRsh8x8_0(v)
642 case OpSignExt16to32:
643 return rewriteValuePPC64_OpSignExt16to32_0(v)
644 case OpSignExt16to64:
645 return rewriteValuePPC64_OpSignExt16to64_0(v)
646 case OpSignExt32to64:
647 return rewriteValuePPC64_OpSignExt32to64_0(v)
648 case OpSignExt8to16:
649 return rewriteValuePPC64_OpSignExt8to16_0(v)
650 case OpSignExt8to32:
651 return rewriteValuePPC64_OpSignExt8to32_0(v)
652 case OpSignExt8to64:
653 return rewriteValuePPC64_OpSignExt8to64_0(v)
654 case OpSlicemask:
655 return rewriteValuePPC64_OpSlicemask_0(v)
656 case OpSqrt:
657 return rewriteValuePPC64_OpSqrt_0(v)
658 case OpStaticCall:
659 return rewriteValuePPC64_OpStaticCall_0(v)
660 case OpStore:
661 return rewriteValuePPC64_OpStore_0(v)
662 case OpSub16:
663 return rewriteValuePPC64_OpSub16_0(v)
664 case OpSub32:
665 return rewriteValuePPC64_OpSub32_0(v)
666 case OpSub32F:
667 return rewriteValuePPC64_OpSub32F_0(v)
668 case OpSub64:
669 return rewriteValuePPC64_OpSub64_0(v)
670 case OpSub64F:
671 return rewriteValuePPC64_OpSub64F_0(v)
672 case OpSub8:
673 return rewriteValuePPC64_OpSub8_0(v)
674 case OpSubPtr:
675 return rewriteValuePPC64_OpSubPtr_0(v)
676 case OpTrunc:
677 return rewriteValuePPC64_OpTrunc_0(v)
678 case OpTrunc16to8:
679 return rewriteValuePPC64_OpTrunc16to8_0(v)
680 case OpTrunc32to16:
681 return rewriteValuePPC64_OpTrunc32to16_0(v)
682 case OpTrunc32to8:
683 return rewriteValuePPC64_OpTrunc32to8_0(v)
684 case OpTrunc64to16:
685 return rewriteValuePPC64_OpTrunc64to16_0(v)
686 case OpTrunc64to32:
687 return rewriteValuePPC64_OpTrunc64to32_0(v)
688 case OpTrunc64to8:
689 return rewriteValuePPC64_OpTrunc64to8_0(v)
690 case OpWB:
691 return rewriteValuePPC64_OpWB_0(v)
692 case OpXor16:
693 return rewriteValuePPC64_OpXor16_0(v)
694 case OpXor32:
695 return rewriteValuePPC64_OpXor32_0(v)
696 case OpXor64:
697 return rewriteValuePPC64_OpXor64_0(v)
698 case OpXor8:
699 return rewriteValuePPC64_OpXor8_0(v)
700 case OpZero:
701 return rewriteValuePPC64_OpZero_0(v) || rewriteValuePPC64_OpZero_10(v)
702 case OpZeroExt16to32:
703 return rewriteValuePPC64_OpZeroExt16to32_0(v)
704 case OpZeroExt16to64:
705 return rewriteValuePPC64_OpZeroExt16to64_0(v)
706 case OpZeroExt32to64:
707 return rewriteValuePPC64_OpZeroExt32to64_0(v)
708 case OpZeroExt8to16:
709 return rewriteValuePPC64_OpZeroExt8to16_0(v)
710 case OpZeroExt8to32:
711 return rewriteValuePPC64_OpZeroExt8to32_0(v)
712 case OpZeroExt8to64:
713 return rewriteValuePPC64_OpZeroExt8to64_0(v)
714 }
715 return false
716 }
717 func rewriteValuePPC64_OpAbs_0(v *Value) bool {
718
719
720
721 for {
722 x := v.Args[0]
723 v.reset(OpPPC64FABS)
724 v.AddArg(x)
725 return true
726 }
727 }
728 func rewriteValuePPC64_OpAdd16_0(v *Value) bool {
729
730
731
732 for {
733 y := v.Args[1]
734 x := v.Args[0]
735 v.reset(OpPPC64ADD)
736 v.AddArg(x)
737 v.AddArg(y)
738 return true
739 }
740 }
741 func rewriteValuePPC64_OpAdd32_0(v *Value) bool {
742
743
744
745 for {
746 y := v.Args[1]
747 x := v.Args[0]
748 v.reset(OpPPC64ADD)
749 v.AddArg(x)
750 v.AddArg(y)
751 return true
752 }
753 }
754 func rewriteValuePPC64_OpAdd32F_0(v *Value) bool {
755
756
757
758 for {
759 y := v.Args[1]
760 x := v.Args[0]
761 v.reset(OpPPC64FADDS)
762 v.AddArg(x)
763 v.AddArg(y)
764 return true
765 }
766 }
767 func rewriteValuePPC64_OpAdd64_0(v *Value) bool {
768
769
770
771 for {
772 y := v.Args[1]
773 x := v.Args[0]
774 v.reset(OpPPC64ADD)
775 v.AddArg(x)
776 v.AddArg(y)
777 return true
778 }
779 }
780 func rewriteValuePPC64_OpAdd64F_0(v *Value) bool {
781
782
783
784 for {
785 y := v.Args[1]
786 x := v.Args[0]
787 v.reset(OpPPC64FADD)
788 v.AddArg(x)
789 v.AddArg(y)
790 return true
791 }
792 }
793 func rewriteValuePPC64_OpAdd64carry_0(v *Value) bool {
794
795
796
797 for {
798 c := v.Args[2]
799 x := v.Args[0]
800 y := v.Args[1]
801 v.reset(OpPPC64LoweredAdd64Carry)
802 v.AddArg(x)
803 v.AddArg(y)
804 v.AddArg(c)
805 return true
806 }
807 }
808 func rewriteValuePPC64_OpAdd8_0(v *Value) bool {
809
810
811
812 for {
813 y := v.Args[1]
814 x := v.Args[0]
815 v.reset(OpPPC64ADD)
816 v.AddArg(x)
817 v.AddArg(y)
818 return true
819 }
820 }
821 func rewriteValuePPC64_OpAddPtr_0(v *Value) bool {
822
823
824
825 for {
826 y := v.Args[1]
827 x := v.Args[0]
828 v.reset(OpPPC64ADD)
829 v.AddArg(x)
830 v.AddArg(y)
831 return true
832 }
833 }
834 func rewriteValuePPC64_OpAddr_0(v *Value) bool {
835
836
837
838 for {
839 sym := v.Aux
840 base := v.Args[0]
841 v.reset(OpPPC64MOVDaddr)
842 v.Aux = sym
843 v.AddArg(base)
844 return true
845 }
846 }
847 func rewriteValuePPC64_OpAnd16_0(v *Value) bool {
848
849
850
851 for {
852 y := v.Args[1]
853 x := v.Args[0]
854 v.reset(OpPPC64AND)
855 v.AddArg(x)
856 v.AddArg(y)
857 return true
858 }
859 }
860 func rewriteValuePPC64_OpAnd32_0(v *Value) bool {
861
862
863
864 for {
865 y := v.Args[1]
866 x := v.Args[0]
867 v.reset(OpPPC64AND)
868 v.AddArg(x)
869 v.AddArg(y)
870 return true
871 }
872 }
873 func rewriteValuePPC64_OpAnd64_0(v *Value) bool {
874
875
876
877 for {
878 y := v.Args[1]
879 x := v.Args[0]
880 v.reset(OpPPC64AND)
881 v.AddArg(x)
882 v.AddArg(y)
883 return true
884 }
885 }
886 func rewriteValuePPC64_OpAnd8_0(v *Value) bool {
887
888
889
890 for {
891 y := v.Args[1]
892 x := v.Args[0]
893 v.reset(OpPPC64AND)
894 v.AddArg(x)
895 v.AddArg(y)
896 return true
897 }
898 }
899 func rewriteValuePPC64_OpAndB_0(v *Value) bool {
900
901
902
903 for {
904 y := v.Args[1]
905 x := v.Args[0]
906 v.reset(OpPPC64AND)
907 v.AddArg(x)
908 v.AddArg(y)
909 return true
910 }
911 }
912 func rewriteValuePPC64_OpAtomicAdd32_0(v *Value) bool {
913
914
915
916 for {
917 mem := v.Args[2]
918 ptr := v.Args[0]
919 val := v.Args[1]
920 v.reset(OpPPC64LoweredAtomicAdd32)
921 v.AddArg(ptr)
922 v.AddArg(val)
923 v.AddArg(mem)
924 return true
925 }
926 }
927 func rewriteValuePPC64_OpAtomicAdd64_0(v *Value) bool {
928
929
930
931 for {
932 mem := v.Args[2]
933 ptr := v.Args[0]
934 val := v.Args[1]
935 v.reset(OpPPC64LoweredAtomicAdd64)
936 v.AddArg(ptr)
937 v.AddArg(val)
938 v.AddArg(mem)
939 return true
940 }
941 }
942 func rewriteValuePPC64_OpAtomicAnd8_0(v *Value) bool {
943
944
945
946 for {
947 mem := v.Args[2]
948 ptr := v.Args[0]
949 val := v.Args[1]
950 v.reset(OpPPC64LoweredAtomicAnd8)
951 v.AddArg(ptr)
952 v.AddArg(val)
953 v.AddArg(mem)
954 return true
955 }
956 }
957 func rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v *Value) bool {
958
959
960
961 for {
962 mem := v.Args[3]
963 ptr := v.Args[0]
964 old := v.Args[1]
965 new_ := v.Args[2]
966 v.reset(OpPPC64LoweredAtomicCas32)
967 v.AuxInt = 1
968 v.AddArg(ptr)
969 v.AddArg(old)
970 v.AddArg(new_)
971 v.AddArg(mem)
972 return true
973 }
974 }
975 func rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v *Value) bool {
976
977
978
979 for {
980 mem := v.Args[3]
981 ptr := v.Args[0]
982 old := v.Args[1]
983 new_ := v.Args[2]
984 v.reset(OpPPC64LoweredAtomicCas64)
985 v.AuxInt = 1
986 v.AddArg(ptr)
987 v.AddArg(old)
988 v.AddArg(new_)
989 v.AddArg(mem)
990 return true
991 }
992 }
993 func rewriteValuePPC64_OpAtomicCompareAndSwapRel32_0(v *Value) bool {
994
995
996
997 for {
998 mem := v.Args[3]
999 ptr := v.Args[0]
1000 old := v.Args[1]
1001 new_ := v.Args[2]
1002 v.reset(OpPPC64LoweredAtomicCas32)
1003 v.AuxInt = 0
1004 v.AddArg(ptr)
1005 v.AddArg(old)
1006 v.AddArg(new_)
1007 v.AddArg(mem)
1008 return true
1009 }
1010 }
1011 func rewriteValuePPC64_OpAtomicExchange32_0(v *Value) bool {
1012
1013
1014
1015 for {
1016 mem := v.Args[2]
1017 ptr := v.Args[0]
1018 val := v.Args[1]
1019 v.reset(OpPPC64LoweredAtomicExchange32)
1020 v.AddArg(ptr)
1021 v.AddArg(val)
1022 v.AddArg(mem)
1023 return true
1024 }
1025 }
1026 func rewriteValuePPC64_OpAtomicExchange64_0(v *Value) bool {
1027
1028
1029
1030 for {
1031 mem := v.Args[2]
1032 ptr := v.Args[0]
1033 val := v.Args[1]
1034 v.reset(OpPPC64LoweredAtomicExchange64)
1035 v.AddArg(ptr)
1036 v.AddArg(val)
1037 v.AddArg(mem)
1038 return true
1039 }
1040 }
1041 func rewriteValuePPC64_OpAtomicLoad32_0(v *Value) bool {
1042
1043
1044
1045 for {
1046 mem := v.Args[1]
1047 ptr := v.Args[0]
1048 v.reset(OpPPC64LoweredAtomicLoad32)
1049 v.AuxInt = 1
1050 v.AddArg(ptr)
1051 v.AddArg(mem)
1052 return true
1053 }
1054 }
1055 func rewriteValuePPC64_OpAtomicLoad64_0(v *Value) bool {
1056
1057
1058
1059 for {
1060 mem := v.Args[1]
1061 ptr := v.Args[0]
1062 v.reset(OpPPC64LoweredAtomicLoad64)
1063 v.AuxInt = 1
1064 v.AddArg(ptr)
1065 v.AddArg(mem)
1066 return true
1067 }
1068 }
1069 func rewriteValuePPC64_OpAtomicLoad8_0(v *Value) bool {
1070
1071
1072
1073 for {
1074 mem := v.Args[1]
1075 ptr := v.Args[0]
1076 v.reset(OpPPC64LoweredAtomicLoad8)
1077 v.AuxInt = 1
1078 v.AddArg(ptr)
1079 v.AddArg(mem)
1080 return true
1081 }
1082 }
1083 func rewriteValuePPC64_OpAtomicLoadAcq32_0(v *Value) bool {
1084
1085
1086
1087 for {
1088 mem := v.Args[1]
1089 ptr := v.Args[0]
1090 v.reset(OpPPC64LoweredAtomicLoad32)
1091 v.AuxInt = 0
1092 v.AddArg(ptr)
1093 v.AddArg(mem)
1094 return true
1095 }
1096 }
1097 func rewriteValuePPC64_OpAtomicLoadPtr_0(v *Value) bool {
1098
1099
1100
1101 for {
1102 mem := v.Args[1]
1103 ptr := v.Args[0]
1104 v.reset(OpPPC64LoweredAtomicLoadPtr)
1105 v.AuxInt = 1
1106 v.AddArg(ptr)
1107 v.AddArg(mem)
1108 return true
1109 }
1110 }
1111 func rewriteValuePPC64_OpAtomicOr8_0(v *Value) bool {
1112
1113
1114
1115 for {
1116 mem := v.Args[2]
1117 ptr := v.Args[0]
1118 val := v.Args[1]
1119 v.reset(OpPPC64LoweredAtomicOr8)
1120 v.AddArg(ptr)
1121 v.AddArg(val)
1122 v.AddArg(mem)
1123 return true
1124 }
1125 }
1126 func rewriteValuePPC64_OpAtomicStore32_0(v *Value) bool {
1127
1128
1129
1130 for {
1131 mem := v.Args[2]
1132 ptr := v.Args[0]
1133 val := v.Args[1]
1134 v.reset(OpPPC64LoweredAtomicStore32)
1135 v.AuxInt = 1
1136 v.AddArg(ptr)
1137 v.AddArg(val)
1138 v.AddArg(mem)
1139 return true
1140 }
1141 }
1142 func rewriteValuePPC64_OpAtomicStore64_0(v *Value) bool {
1143
1144
1145
1146 for {
1147 mem := v.Args[2]
1148 ptr := v.Args[0]
1149 val := v.Args[1]
1150 v.reset(OpPPC64LoweredAtomicStore64)
1151 v.AuxInt = 1
1152 v.AddArg(ptr)
1153 v.AddArg(val)
1154 v.AddArg(mem)
1155 return true
1156 }
1157 }
1158 func rewriteValuePPC64_OpAtomicStoreRel32_0(v *Value) bool {
1159
1160
1161
1162 for {
1163 mem := v.Args[2]
1164 ptr := v.Args[0]
1165 val := v.Args[1]
1166 v.reset(OpPPC64LoweredAtomicStore32)
1167 v.AuxInt = 0
1168 v.AddArg(ptr)
1169 v.AddArg(val)
1170 v.AddArg(mem)
1171 return true
1172 }
1173 }
1174 func rewriteValuePPC64_OpAvg64u_0(v *Value) bool {
1175 b := v.Block
1176
1177
1178
1179 for {
1180 t := v.Type
1181 y := v.Args[1]
1182 x := v.Args[0]
1183 v.reset(OpPPC64ADD)
1184 v0 := b.NewValue0(v.Pos, OpPPC64SRDconst, t)
1185 v0.AuxInt = 1
1186 v1 := b.NewValue0(v.Pos, OpPPC64SUB, t)
1187 v1.AddArg(x)
1188 v1.AddArg(y)
1189 v0.AddArg(v1)
1190 v.AddArg(v0)
1191 v.AddArg(y)
1192 return true
1193 }
1194 }
1195 func rewriteValuePPC64_OpBitLen32_0(v *Value) bool {
1196 b := v.Block
1197 typ := &b.Func.Config.Types
1198
1199
1200
1201 for {
1202 x := v.Args[0]
1203 v.reset(OpPPC64SUB)
1204 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
1205 v0.AuxInt = 32
1206 v.AddArg(v0)
1207 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZW, typ.Int)
1208 v1.AddArg(x)
1209 v.AddArg(v1)
1210 return true
1211 }
1212 }
1213 func rewriteValuePPC64_OpBitLen64_0(v *Value) bool {
1214 b := v.Block
1215 typ := &b.Func.Config.Types
1216
1217
1218
1219 for {
1220 x := v.Args[0]
1221 v.reset(OpPPC64SUB)
1222 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
1223 v0.AuxInt = 64
1224 v.AddArg(v0)
1225 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZD, typ.Int)
1226 v1.AddArg(x)
1227 v.AddArg(v1)
1228 return true
1229 }
1230 }
1231 func rewriteValuePPC64_OpCeil_0(v *Value) bool {
1232
1233
1234
1235 for {
1236 x := v.Args[0]
1237 v.reset(OpPPC64FCEIL)
1238 v.AddArg(x)
1239 return true
1240 }
1241 }
1242 func rewriteValuePPC64_OpClosureCall_0(v *Value) bool {
1243
1244
1245
1246 for {
1247 argwid := v.AuxInt
1248 mem := v.Args[2]
1249 entry := v.Args[0]
1250 closure := v.Args[1]
1251 v.reset(OpPPC64CALLclosure)
1252 v.AuxInt = argwid
1253 v.AddArg(entry)
1254 v.AddArg(closure)
1255 v.AddArg(mem)
1256 return true
1257 }
1258 }
1259 func rewriteValuePPC64_OpCom16_0(v *Value) bool {
1260
1261
1262
1263 for {
1264 x := v.Args[0]
1265 v.reset(OpPPC64NOR)
1266 v.AddArg(x)
1267 v.AddArg(x)
1268 return true
1269 }
1270 }
1271 func rewriteValuePPC64_OpCom32_0(v *Value) bool {
1272
1273
1274
1275 for {
1276 x := v.Args[0]
1277 v.reset(OpPPC64NOR)
1278 v.AddArg(x)
1279 v.AddArg(x)
1280 return true
1281 }
1282 }
1283 func rewriteValuePPC64_OpCom64_0(v *Value) bool {
1284
1285
1286
1287 for {
1288 x := v.Args[0]
1289 v.reset(OpPPC64NOR)
1290 v.AddArg(x)
1291 v.AddArg(x)
1292 return true
1293 }
1294 }
1295 func rewriteValuePPC64_OpCom8_0(v *Value) bool {
1296
1297
1298
1299 for {
1300 x := v.Args[0]
1301 v.reset(OpPPC64NOR)
1302 v.AddArg(x)
1303 v.AddArg(x)
1304 return true
1305 }
1306 }
1307 func rewriteValuePPC64_OpConst16_0(v *Value) bool {
1308
1309
1310
1311 for {
1312 val := v.AuxInt
1313 v.reset(OpPPC64MOVDconst)
1314 v.AuxInt = val
1315 return true
1316 }
1317 }
1318 func rewriteValuePPC64_OpConst32_0(v *Value) bool {
1319
1320
1321
1322 for {
1323 val := v.AuxInt
1324 v.reset(OpPPC64MOVDconst)
1325 v.AuxInt = val
1326 return true
1327 }
1328 }
1329 func rewriteValuePPC64_OpConst32F_0(v *Value) bool {
1330
1331
1332
1333 for {
1334 val := v.AuxInt
1335 v.reset(OpPPC64FMOVSconst)
1336 v.AuxInt = val
1337 return true
1338 }
1339 }
1340 func rewriteValuePPC64_OpConst64_0(v *Value) bool {
1341
1342
1343
1344 for {
1345 val := v.AuxInt
1346 v.reset(OpPPC64MOVDconst)
1347 v.AuxInt = val
1348 return true
1349 }
1350 }
1351 func rewriteValuePPC64_OpConst64F_0(v *Value) bool {
1352
1353
1354
1355 for {
1356 val := v.AuxInt
1357 v.reset(OpPPC64FMOVDconst)
1358 v.AuxInt = val
1359 return true
1360 }
1361 }
1362 func rewriteValuePPC64_OpConst8_0(v *Value) bool {
1363
1364
1365
1366 for {
1367 val := v.AuxInt
1368 v.reset(OpPPC64MOVDconst)
1369 v.AuxInt = val
1370 return true
1371 }
1372 }
1373 func rewriteValuePPC64_OpConstBool_0(v *Value) bool {
1374
1375
1376
1377 for {
1378 b := v.AuxInt
1379 v.reset(OpPPC64MOVDconst)
1380 v.AuxInt = b
1381 return true
1382 }
1383 }
1384 func rewriteValuePPC64_OpConstNil_0(v *Value) bool {
1385
1386
1387
1388 for {
1389 v.reset(OpPPC64MOVDconst)
1390 v.AuxInt = 0
1391 return true
1392 }
1393 }
1394 func rewriteValuePPC64_OpCopysign_0(v *Value) bool {
1395
1396
1397
1398 for {
1399 y := v.Args[1]
1400 x := v.Args[0]
1401 v.reset(OpPPC64FCPSGN)
1402 v.AddArg(y)
1403 v.AddArg(x)
1404 return true
1405 }
1406 }
1407 func rewriteValuePPC64_OpCtz16_0(v *Value) bool {
1408 b := v.Block
1409 typ := &b.Func.Config.Types
1410
1411
1412
1413 for {
1414 x := v.Args[0]
1415 v.reset(OpPPC64POPCNTW)
1416 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
1417 v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int16)
1418 v2 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int16)
1419 v2.AuxInt = -1
1420 v2.AddArg(x)
1421 v1.AddArg(v2)
1422 v1.AddArg(x)
1423 v0.AddArg(v1)
1424 v.AddArg(v0)
1425 return true
1426 }
1427 }
1428 func rewriteValuePPC64_OpCtz32_0(v *Value) bool {
1429 b := v.Block
1430 typ := &b.Func.Config.Types
1431
1432
1433
1434 for {
1435 x := v.Args[0]
1436 if !(objabi.GOPPC64 <= 8) {
1437 break
1438 }
1439 v.reset(OpPPC64POPCNTW)
1440 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64)
1441 v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int)
1442 v2 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int)
1443 v2.AuxInt = -1
1444 v2.AddArg(x)
1445 v1.AddArg(v2)
1446 v1.AddArg(x)
1447 v0.AddArg(v1)
1448 v.AddArg(v0)
1449 return true
1450 }
1451
1452
1453
1454 for {
1455 x := v.Args[0]
1456 v.reset(OpPPC64CNTTZW)
1457 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64)
1458 v0.AddArg(x)
1459 v.AddArg(v0)
1460 return true
1461 }
1462 }
1463 func rewriteValuePPC64_OpCtz32NonZero_0(v *Value) bool {
1464
1465
1466
1467 for {
1468 x := v.Args[0]
1469 v.reset(OpCtz32)
1470 v.AddArg(x)
1471 return true
1472 }
1473 }
1474 func rewriteValuePPC64_OpCtz64_0(v *Value) bool {
1475 b := v.Block
1476 typ := &b.Func.Config.Types
1477
1478
1479
1480 for {
1481 x := v.Args[0]
1482 if !(objabi.GOPPC64 <= 8) {
1483 break
1484 }
1485 v.reset(OpPPC64POPCNTD)
1486 v0 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int64)
1487 v1 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int64)
1488 v1.AuxInt = -1
1489 v1.AddArg(x)
1490 v0.AddArg(v1)
1491 v0.AddArg(x)
1492 v.AddArg(v0)
1493 return true
1494 }
1495
1496
1497
1498 for {
1499 x := v.Args[0]
1500 v.reset(OpPPC64CNTTZD)
1501 v.AddArg(x)
1502 return true
1503 }
1504 }
1505 func rewriteValuePPC64_OpCtz64NonZero_0(v *Value) bool {
1506
1507
1508
1509 for {
1510 x := v.Args[0]
1511 v.reset(OpCtz64)
1512 v.AddArg(x)
1513 return true
1514 }
1515 }
1516 func rewriteValuePPC64_OpCtz8_0(v *Value) bool {
1517 b := v.Block
1518 typ := &b.Func.Config.Types
1519
1520
1521
1522 for {
1523 x := v.Args[0]
1524 v.reset(OpPPC64POPCNTB)
1525 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
1526 v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.UInt8)
1527 v2 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.UInt8)
1528 v2.AuxInt = -1
1529 v2.AddArg(x)
1530 v1.AddArg(v2)
1531 v1.AddArg(x)
1532 v0.AddArg(v1)
1533 v.AddArg(v0)
1534 return true
1535 }
1536 }
1537 func rewriteValuePPC64_OpCvt32Fto32_0(v *Value) bool {
1538 b := v.Block
1539 typ := &b.Func.Config.Types
1540
1541
1542
1543 for {
1544 x := v.Args[0]
1545 v.reset(OpPPC64MFVSRD)
1546 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64)
1547 v0.AddArg(x)
1548 v.AddArg(v0)
1549 return true
1550 }
1551 }
1552 func rewriteValuePPC64_OpCvt32Fto64_0(v *Value) bool {
1553 b := v.Block
1554 typ := &b.Func.Config.Types
1555
1556
1557
1558 for {
1559 x := v.Args[0]
1560 v.reset(OpPPC64MFVSRD)
1561 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64)
1562 v0.AddArg(x)
1563 v.AddArg(v0)
1564 return true
1565 }
1566 }
1567 func rewriteValuePPC64_OpCvt32Fto64F_0(v *Value) bool {
1568
1569
1570
1571 for {
1572 x := v.Args[0]
1573 v.reset(OpCopy)
1574 v.Type = x.Type
1575 v.AddArg(x)
1576 return true
1577 }
1578 }
1579 func rewriteValuePPC64_OpCvt32to32F_0(v *Value) bool {
1580 b := v.Block
1581 typ := &b.Func.Config.Types
1582
1583
1584
1585 for {
1586 x := v.Args[0]
1587 v.reset(OpPPC64FCFIDS)
1588 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64)
1589 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1590 v1.AddArg(x)
1591 v0.AddArg(v1)
1592 v.AddArg(v0)
1593 return true
1594 }
1595 }
1596 func rewriteValuePPC64_OpCvt32to64F_0(v *Value) bool {
1597 b := v.Block
1598 typ := &b.Func.Config.Types
1599
1600
1601
1602 for {
1603 x := v.Args[0]
1604 v.reset(OpPPC64FCFID)
1605 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64)
1606 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1607 v1.AddArg(x)
1608 v0.AddArg(v1)
1609 v.AddArg(v0)
1610 return true
1611 }
1612 }
1613 func rewriteValuePPC64_OpCvt64Fto32_0(v *Value) bool {
1614 b := v.Block
1615 typ := &b.Func.Config.Types
1616
1617
1618
1619 for {
1620 x := v.Args[0]
1621 v.reset(OpPPC64MFVSRD)
1622 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64)
1623 v0.AddArg(x)
1624 v.AddArg(v0)
1625 return true
1626 }
1627 }
1628 func rewriteValuePPC64_OpCvt64Fto32F_0(v *Value) bool {
1629
1630
1631
1632 for {
1633 x := v.Args[0]
1634 v.reset(OpPPC64FRSP)
1635 v.AddArg(x)
1636 return true
1637 }
1638 }
1639 func rewriteValuePPC64_OpCvt64Fto64_0(v *Value) bool {
1640 b := v.Block
1641 typ := &b.Func.Config.Types
1642
1643
1644
1645 for {
1646 x := v.Args[0]
1647 v.reset(OpPPC64MFVSRD)
1648 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64)
1649 v0.AddArg(x)
1650 v.AddArg(v0)
1651 return true
1652 }
1653 }
1654 func rewriteValuePPC64_OpCvt64to32F_0(v *Value) bool {
1655 b := v.Block
1656 typ := &b.Func.Config.Types
1657
1658
1659
1660 for {
1661 x := v.Args[0]
1662 v.reset(OpPPC64FCFIDS)
1663 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64)
1664 v0.AddArg(x)
1665 v.AddArg(v0)
1666 return true
1667 }
1668 }
1669 func rewriteValuePPC64_OpCvt64to64F_0(v *Value) bool {
1670 b := v.Block
1671 typ := &b.Func.Config.Types
1672
1673
1674
1675 for {
1676 x := v.Args[0]
1677 v.reset(OpPPC64FCFID)
1678 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64)
1679 v0.AddArg(x)
1680 v.AddArg(v0)
1681 return true
1682 }
1683 }
1684 func rewriteValuePPC64_OpDiv16_0(v *Value) bool {
1685 b := v.Block
1686 typ := &b.Func.Config.Types
1687
1688
1689
1690 for {
1691 y := v.Args[1]
1692 x := v.Args[0]
1693 v.reset(OpPPC64DIVW)
1694 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
1695 v0.AddArg(x)
1696 v.AddArg(v0)
1697 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
1698 v1.AddArg(y)
1699 v.AddArg(v1)
1700 return true
1701 }
1702 }
1703 func rewriteValuePPC64_OpDiv16u_0(v *Value) bool {
1704 b := v.Block
1705 typ := &b.Func.Config.Types
1706
1707
1708
1709 for {
1710 y := v.Args[1]
1711 x := v.Args[0]
1712 v.reset(OpPPC64DIVWU)
1713 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
1714 v0.AddArg(x)
1715 v.AddArg(v0)
1716 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
1717 v1.AddArg(y)
1718 v.AddArg(v1)
1719 return true
1720 }
1721 }
1722 func rewriteValuePPC64_OpDiv32_0(v *Value) bool {
1723
1724
1725
1726 for {
1727 y := v.Args[1]
1728 x := v.Args[0]
1729 v.reset(OpPPC64DIVW)
1730 v.AddArg(x)
1731 v.AddArg(y)
1732 return true
1733 }
1734 }
1735 func rewriteValuePPC64_OpDiv32F_0(v *Value) bool {
1736
1737
1738
1739 for {
1740 y := v.Args[1]
1741 x := v.Args[0]
1742 v.reset(OpPPC64FDIVS)
1743 v.AddArg(x)
1744 v.AddArg(y)
1745 return true
1746 }
1747 }
1748 func rewriteValuePPC64_OpDiv32u_0(v *Value) bool {
1749
1750
1751
1752 for {
1753 y := v.Args[1]
1754 x := v.Args[0]
1755 v.reset(OpPPC64DIVWU)
1756 v.AddArg(x)
1757 v.AddArg(y)
1758 return true
1759 }
1760 }
1761 func rewriteValuePPC64_OpDiv64_0(v *Value) bool {
1762
1763
1764
1765 for {
1766 y := v.Args[1]
1767 x := v.Args[0]
1768 v.reset(OpPPC64DIVD)
1769 v.AddArg(x)
1770 v.AddArg(y)
1771 return true
1772 }
1773 }
1774 func rewriteValuePPC64_OpDiv64F_0(v *Value) bool {
1775
1776
1777
1778 for {
1779 y := v.Args[1]
1780 x := v.Args[0]
1781 v.reset(OpPPC64FDIV)
1782 v.AddArg(x)
1783 v.AddArg(y)
1784 return true
1785 }
1786 }
1787 func rewriteValuePPC64_OpDiv64u_0(v *Value) bool {
1788
1789
1790
1791 for {
1792 y := v.Args[1]
1793 x := v.Args[0]
1794 v.reset(OpPPC64DIVDU)
1795 v.AddArg(x)
1796 v.AddArg(y)
1797 return true
1798 }
1799 }
1800 func rewriteValuePPC64_OpDiv8_0(v *Value) bool {
1801 b := v.Block
1802 typ := &b.Func.Config.Types
1803
1804
1805
1806 for {
1807 y := v.Args[1]
1808 x := v.Args[0]
1809 v.reset(OpPPC64DIVW)
1810 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
1811 v0.AddArg(x)
1812 v.AddArg(v0)
1813 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
1814 v1.AddArg(y)
1815 v.AddArg(v1)
1816 return true
1817 }
1818 }
1819 func rewriteValuePPC64_OpDiv8u_0(v *Value) bool {
1820 b := v.Block
1821 typ := &b.Func.Config.Types
1822
1823
1824
1825 for {
1826 y := v.Args[1]
1827 x := v.Args[0]
1828 v.reset(OpPPC64DIVWU)
1829 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
1830 v0.AddArg(x)
1831 v.AddArg(v0)
1832 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
1833 v1.AddArg(y)
1834 v.AddArg(v1)
1835 return true
1836 }
1837 }
1838 func rewriteValuePPC64_OpEq16_0(v *Value) bool {
1839 b := v.Block
1840 typ := &b.Func.Config.Types
1841
1842
1843
1844 for {
1845 y := v.Args[1]
1846 x := v.Args[0]
1847 if !(isSigned(x.Type) && isSigned(y.Type)) {
1848 break
1849 }
1850 v.reset(OpPPC64Equal)
1851 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
1852 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
1853 v1.AddArg(x)
1854 v0.AddArg(v1)
1855 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
1856 v2.AddArg(y)
1857 v0.AddArg(v2)
1858 v.AddArg(v0)
1859 return true
1860 }
1861
1862
1863
1864 for {
1865 y := v.Args[1]
1866 x := v.Args[0]
1867 v.reset(OpPPC64Equal)
1868 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
1869 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
1870 v1.AddArg(x)
1871 v0.AddArg(v1)
1872 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
1873 v2.AddArg(y)
1874 v0.AddArg(v2)
1875 v.AddArg(v0)
1876 return true
1877 }
1878 }
1879 func rewriteValuePPC64_OpEq32_0(v *Value) bool {
1880 b := v.Block
1881
1882
1883
1884 for {
1885 y := v.Args[1]
1886 x := v.Args[0]
1887 v.reset(OpPPC64Equal)
1888 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
1889 v0.AddArg(x)
1890 v0.AddArg(y)
1891 v.AddArg(v0)
1892 return true
1893 }
1894 }
1895 func rewriteValuePPC64_OpEq32F_0(v *Value) bool {
1896 b := v.Block
1897
1898
1899
1900 for {
1901 y := v.Args[1]
1902 x := v.Args[0]
1903 v.reset(OpPPC64Equal)
1904 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
1905 v0.AddArg(x)
1906 v0.AddArg(y)
1907 v.AddArg(v0)
1908 return true
1909 }
1910 }
1911 func rewriteValuePPC64_OpEq64_0(v *Value) bool {
1912 b := v.Block
1913
1914
1915
1916 for {
1917 y := v.Args[1]
1918 x := v.Args[0]
1919 v.reset(OpPPC64Equal)
1920 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
1921 v0.AddArg(x)
1922 v0.AddArg(y)
1923 v.AddArg(v0)
1924 return true
1925 }
1926 }
1927 func rewriteValuePPC64_OpEq64F_0(v *Value) bool {
1928 b := v.Block
1929
1930
1931
1932 for {
1933 y := v.Args[1]
1934 x := v.Args[0]
1935 v.reset(OpPPC64Equal)
1936 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
1937 v0.AddArg(x)
1938 v0.AddArg(y)
1939 v.AddArg(v0)
1940 return true
1941 }
1942 }
1943 func rewriteValuePPC64_OpEq8_0(v *Value) bool {
1944 b := v.Block
1945 typ := &b.Func.Config.Types
1946
1947
1948
1949 for {
1950 y := v.Args[1]
1951 x := v.Args[0]
1952 if !(isSigned(x.Type) && isSigned(y.Type)) {
1953 break
1954 }
1955 v.reset(OpPPC64Equal)
1956 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
1957 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
1958 v1.AddArg(x)
1959 v0.AddArg(v1)
1960 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
1961 v2.AddArg(y)
1962 v0.AddArg(v2)
1963 v.AddArg(v0)
1964 return true
1965 }
1966
1967
1968
1969 for {
1970 y := v.Args[1]
1971 x := v.Args[0]
1972 v.reset(OpPPC64Equal)
1973 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
1974 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
1975 v1.AddArg(x)
1976 v0.AddArg(v1)
1977 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
1978 v2.AddArg(y)
1979 v0.AddArg(v2)
1980 v.AddArg(v0)
1981 return true
1982 }
1983 }
1984 func rewriteValuePPC64_OpEqB_0(v *Value) bool {
1985 b := v.Block
1986 typ := &b.Func.Config.Types
1987
1988
1989
1990 for {
1991 y := v.Args[1]
1992 x := v.Args[0]
1993 v.reset(OpPPC64ANDconst)
1994 v.AuxInt = 1
1995 v0 := b.NewValue0(v.Pos, OpPPC64EQV, typ.Int64)
1996 v0.AddArg(x)
1997 v0.AddArg(y)
1998 v.AddArg(v0)
1999 return true
2000 }
2001 }
2002 func rewriteValuePPC64_OpEqPtr_0(v *Value) bool {
2003 b := v.Block
2004
2005
2006
2007 for {
2008 y := v.Args[1]
2009 x := v.Args[0]
2010 v.reset(OpPPC64Equal)
2011 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
2012 v0.AddArg(x)
2013 v0.AddArg(y)
2014 v.AddArg(v0)
2015 return true
2016 }
2017 }
2018 func rewriteValuePPC64_OpFloor_0(v *Value) bool {
2019
2020
2021
2022 for {
2023 x := v.Args[0]
2024 v.reset(OpPPC64FFLOOR)
2025 v.AddArg(x)
2026 return true
2027 }
2028 }
2029 func rewriteValuePPC64_OpGeq16_0(v *Value) bool {
2030 b := v.Block
2031 typ := &b.Func.Config.Types
2032
2033
2034
2035 for {
2036 y := v.Args[1]
2037 x := v.Args[0]
2038 v.reset(OpPPC64GreaterEqual)
2039 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2040 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2041 v1.AddArg(x)
2042 v0.AddArg(v1)
2043 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2044 v2.AddArg(y)
2045 v0.AddArg(v2)
2046 v.AddArg(v0)
2047 return true
2048 }
2049 }
2050 func rewriteValuePPC64_OpGeq16U_0(v *Value) bool {
2051 b := v.Block
2052 typ := &b.Func.Config.Types
2053
2054
2055
2056 for {
2057 y := v.Args[1]
2058 x := v.Args[0]
2059 v.reset(OpPPC64GreaterEqual)
2060 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2061 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2062 v1.AddArg(x)
2063 v0.AddArg(v1)
2064 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2065 v2.AddArg(y)
2066 v0.AddArg(v2)
2067 v.AddArg(v0)
2068 return true
2069 }
2070 }
2071 func rewriteValuePPC64_OpGeq32_0(v *Value) bool {
2072 b := v.Block
2073
2074
2075
2076 for {
2077 y := v.Args[1]
2078 x := v.Args[0]
2079 v.reset(OpPPC64GreaterEqual)
2080 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2081 v0.AddArg(x)
2082 v0.AddArg(y)
2083 v.AddArg(v0)
2084 return true
2085 }
2086 }
2087 func rewriteValuePPC64_OpGeq32F_0(v *Value) bool {
2088 b := v.Block
2089
2090
2091
2092 for {
2093 y := v.Args[1]
2094 x := v.Args[0]
2095 v.reset(OpPPC64FGreaterEqual)
2096 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2097 v0.AddArg(x)
2098 v0.AddArg(y)
2099 v.AddArg(v0)
2100 return true
2101 }
2102 }
2103 func rewriteValuePPC64_OpGeq32U_0(v *Value) bool {
2104 b := v.Block
2105
2106
2107
2108 for {
2109 y := v.Args[1]
2110 x := v.Args[0]
2111 v.reset(OpPPC64GreaterEqual)
2112 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2113 v0.AddArg(x)
2114 v0.AddArg(y)
2115 v.AddArg(v0)
2116 return true
2117 }
2118 }
2119 func rewriteValuePPC64_OpGeq64_0(v *Value) bool {
2120 b := v.Block
2121
2122
2123
2124 for {
2125 y := v.Args[1]
2126 x := v.Args[0]
2127 v.reset(OpPPC64GreaterEqual)
2128 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
2129 v0.AddArg(x)
2130 v0.AddArg(y)
2131 v.AddArg(v0)
2132 return true
2133 }
2134 }
2135 func rewriteValuePPC64_OpGeq64F_0(v *Value) bool {
2136 b := v.Block
2137
2138
2139
2140 for {
2141 y := v.Args[1]
2142 x := v.Args[0]
2143 v.reset(OpPPC64FGreaterEqual)
2144 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2145 v0.AddArg(x)
2146 v0.AddArg(y)
2147 v.AddArg(v0)
2148 return true
2149 }
2150 }
2151 func rewriteValuePPC64_OpGeq64U_0(v *Value) bool {
2152 b := v.Block
2153
2154
2155
2156 for {
2157 y := v.Args[1]
2158 x := v.Args[0]
2159 v.reset(OpPPC64GreaterEqual)
2160 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2161 v0.AddArg(x)
2162 v0.AddArg(y)
2163 v.AddArg(v0)
2164 return true
2165 }
2166 }
2167 func rewriteValuePPC64_OpGeq8_0(v *Value) bool {
2168 b := v.Block
2169 typ := &b.Func.Config.Types
2170
2171
2172
2173 for {
2174 y := v.Args[1]
2175 x := v.Args[0]
2176 v.reset(OpPPC64GreaterEqual)
2177 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2178 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2179 v1.AddArg(x)
2180 v0.AddArg(v1)
2181 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2182 v2.AddArg(y)
2183 v0.AddArg(v2)
2184 v.AddArg(v0)
2185 return true
2186 }
2187 }
2188 func rewriteValuePPC64_OpGeq8U_0(v *Value) bool {
2189 b := v.Block
2190 typ := &b.Func.Config.Types
2191
2192
2193
2194 for {
2195 y := v.Args[1]
2196 x := v.Args[0]
2197 v.reset(OpPPC64GreaterEqual)
2198 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2199 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2200 v1.AddArg(x)
2201 v0.AddArg(v1)
2202 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2203 v2.AddArg(y)
2204 v0.AddArg(v2)
2205 v.AddArg(v0)
2206 return true
2207 }
2208 }
2209 func rewriteValuePPC64_OpGetCallerPC_0(v *Value) bool {
2210
2211
2212
2213 for {
2214 v.reset(OpPPC64LoweredGetCallerPC)
2215 return true
2216 }
2217 }
2218 func rewriteValuePPC64_OpGetCallerSP_0(v *Value) bool {
2219
2220
2221
2222 for {
2223 v.reset(OpPPC64LoweredGetCallerSP)
2224 return true
2225 }
2226 }
2227 func rewriteValuePPC64_OpGetClosurePtr_0(v *Value) bool {
2228
2229
2230
2231 for {
2232 v.reset(OpPPC64LoweredGetClosurePtr)
2233 return true
2234 }
2235 }
2236 func rewriteValuePPC64_OpGreater16_0(v *Value) bool {
2237 b := v.Block
2238 typ := &b.Func.Config.Types
2239
2240
2241
2242 for {
2243 y := v.Args[1]
2244 x := v.Args[0]
2245 v.reset(OpPPC64GreaterThan)
2246 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2247 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2248 v1.AddArg(x)
2249 v0.AddArg(v1)
2250 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2251 v2.AddArg(y)
2252 v0.AddArg(v2)
2253 v.AddArg(v0)
2254 return true
2255 }
2256 }
2257 func rewriteValuePPC64_OpGreater16U_0(v *Value) bool {
2258 b := v.Block
2259 typ := &b.Func.Config.Types
2260
2261
2262
2263 for {
2264 y := v.Args[1]
2265 x := v.Args[0]
2266 v.reset(OpPPC64GreaterThan)
2267 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2268 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2269 v1.AddArg(x)
2270 v0.AddArg(v1)
2271 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2272 v2.AddArg(y)
2273 v0.AddArg(v2)
2274 v.AddArg(v0)
2275 return true
2276 }
2277 }
2278 func rewriteValuePPC64_OpGreater32_0(v *Value) bool {
2279 b := v.Block
2280
2281
2282
2283 for {
2284 y := v.Args[1]
2285 x := v.Args[0]
2286 v.reset(OpPPC64GreaterThan)
2287 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2288 v0.AddArg(x)
2289 v0.AddArg(y)
2290 v.AddArg(v0)
2291 return true
2292 }
2293 }
2294 func rewriteValuePPC64_OpGreater32F_0(v *Value) bool {
2295 b := v.Block
2296
2297
2298
2299 for {
2300 y := v.Args[1]
2301 x := v.Args[0]
2302 v.reset(OpPPC64FGreaterThan)
2303 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2304 v0.AddArg(x)
2305 v0.AddArg(y)
2306 v.AddArg(v0)
2307 return true
2308 }
2309 }
2310 func rewriteValuePPC64_OpGreater32U_0(v *Value) bool {
2311 b := v.Block
2312
2313
2314
2315 for {
2316 y := v.Args[1]
2317 x := v.Args[0]
2318 v.reset(OpPPC64GreaterThan)
2319 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2320 v0.AddArg(x)
2321 v0.AddArg(y)
2322 v.AddArg(v0)
2323 return true
2324 }
2325 }
2326 func rewriteValuePPC64_OpGreater64_0(v *Value) bool {
2327 b := v.Block
2328
2329
2330
2331 for {
2332 y := v.Args[1]
2333 x := v.Args[0]
2334 v.reset(OpPPC64GreaterThan)
2335 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
2336 v0.AddArg(x)
2337 v0.AddArg(y)
2338 v.AddArg(v0)
2339 return true
2340 }
2341 }
2342 func rewriteValuePPC64_OpGreater64F_0(v *Value) bool {
2343 b := v.Block
2344
2345
2346
2347 for {
2348 y := v.Args[1]
2349 x := v.Args[0]
2350 v.reset(OpPPC64FGreaterThan)
2351 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2352 v0.AddArg(x)
2353 v0.AddArg(y)
2354 v.AddArg(v0)
2355 return true
2356 }
2357 }
2358 func rewriteValuePPC64_OpGreater64U_0(v *Value) bool {
2359 b := v.Block
2360
2361
2362
2363 for {
2364 y := v.Args[1]
2365 x := v.Args[0]
2366 v.reset(OpPPC64GreaterThan)
2367 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2368 v0.AddArg(x)
2369 v0.AddArg(y)
2370 v.AddArg(v0)
2371 return true
2372 }
2373 }
2374 func rewriteValuePPC64_OpGreater8_0(v *Value) bool {
2375 b := v.Block
2376 typ := &b.Func.Config.Types
2377
2378
2379
2380 for {
2381 y := v.Args[1]
2382 x := v.Args[0]
2383 v.reset(OpPPC64GreaterThan)
2384 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2385 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2386 v1.AddArg(x)
2387 v0.AddArg(v1)
2388 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2389 v2.AddArg(y)
2390 v0.AddArg(v2)
2391 v.AddArg(v0)
2392 return true
2393 }
2394 }
2395 func rewriteValuePPC64_OpGreater8U_0(v *Value) bool {
2396 b := v.Block
2397 typ := &b.Func.Config.Types
2398
2399
2400
2401 for {
2402 y := v.Args[1]
2403 x := v.Args[0]
2404 v.reset(OpPPC64GreaterThan)
2405 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2406 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2407 v1.AddArg(x)
2408 v0.AddArg(v1)
2409 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2410 v2.AddArg(y)
2411 v0.AddArg(v2)
2412 v.AddArg(v0)
2413 return true
2414 }
2415 }
2416 func rewriteValuePPC64_OpHmul32_0(v *Value) bool {
2417
2418
2419
2420 for {
2421 y := v.Args[1]
2422 x := v.Args[0]
2423 v.reset(OpPPC64MULHW)
2424 v.AddArg(x)
2425 v.AddArg(y)
2426 return true
2427 }
2428 }
2429 func rewriteValuePPC64_OpHmul32u_0(v *Value) bool {
2430
2431
2432
2433 for {
2434 y := v.Args[1]
2435 x := v.Args[0]
2436 v.reset(OpPPC64MULHWU)
2437 v.AddArg(x)
2438 v.AddArg(y)
2439 return true
2440 }
2441 }
2442 func rewriteValuePPC64_OpHmul64_0(v *Value) bool {
2443
2444
2445
2446 for {
2447 y := v.Args[1]
2448 x := v.Args[0]
2449 v.reset(OpPPC64MULHD)
2450 v.AddArg(x)
2451 v.AddArg(y)
2452 return true
2453 }
2454 }
2455 func rewriteValuePPC64_OpHmul64u_0(v *Value) bool {
2456
2457
2458
2459 for {
2460 y := v.Args[1]
2461 x := v.Args[0]
2462 v.reset(OpPPC64MULHDU)
2463 v.AddArg(x)
2464 v.AddArg(y)
2465 return true
2466 }
2467 }
2468 func rewriteValuePPC64_OpInterCall_0(v *Value) bool {
2469
2470
2471
2472 for {
2473 argwid := v.AuxInt
2474 mem := v.Args[1]
2475 entry := v.Args[0]
2476 v.reset(OpPPC64CALLinter)
2477 v.AuxInt = argwid
2478 v.AddArg(entry)
2479 v.AddArg(mem)
2480 return true
2481 }
2482 }
2483 func rewriteValuePPC64_OpIsInBounds_0(v *Value) bool {
2484 b := v.Block
2485
2486
2487
2488 for {
2489 len := v.Args[1]
2490 idx := v.Args[0]
2491 v.reset(OpPPC64LessThan)
2492 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2493 v0.AddArg(idx)
2494 v0.AddArg(len)
2495 v.AddArg(v0)
2496 return true
2497 }
2498 }
2499 func rewriteValuePPC64_OpIsNonNil_0(v *Value) bool {
2500 b := v.Block
2501
2502
2503
2504 for {
2505 ptr := v.Args[0]
2506 v.reset(OpPPC64NotEqual)
2507 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags)
2508 v0.AuxInt = 0
2509 v0.AddArg(ptr)
2510 v.AddArg(v0)
2511 return true
2512 }
2513 }
2514 func rewriteValuePPC64_OpIsSliceInBounds_0(v *Value) bool {
2515 b := v.Block
2516
2517
2518
2519 for {
2520 len := v.Args[1]
2521 idx := v.Args[0]
2522 v.reset(OpPPC64LessEqual)
2523 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2524 v0.AddArg(idx)
2525 v0.AddArg(len)
2526 v.AddArg(v0)
2527 return true
2528 }
2529 }
2530 func rewriteValuePPC64_OpLeq16_0(v *Value) bool {
2531 b := v.Block
2532 typ := &b.Func.Config.Types
2533
2534
2535
2536 for {
2537 y := v.Args[1]
2538 x := v.Args[0]
2539 v.reset(OpPPC64LessEqual)
2540 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2541 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2542 v1.AddArg(x)
2543 v0.AddArg(v1)
2544 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2545 v2.AddArg(y)
2546 v0.AddArg(v2)
2547 v.AddArg(v0)
2548 return true
2549 }
2550 }
2551 func rewriteValuePPC64_OpLeq16U_0(v *Value) bool {
2552 b := v.Block
2553 typ := &b.Func.Config.Types
2554
2555
2556
2557 for {
2558 y := v.Args[1]
2559 x := v.Args[0]
2560 v.reset(OpPPC64LessEqual)
2561 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2562 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2563 v1.AddArg(x)
2564 v0.AddArg(v1)
2565 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2566 v2.AddArg(y)
2567 v0.AddArg(v2)
2568 v.AddArg(v0)
2569 return true
2570 }
2571 }
2572 func rewriteValuePPC64_OpLeq32_0(v *Value) bool {
2573 b := v.Block
2574
2575
2576
2577 for {
2578 y := v.Args[1]
2579 x := v.Args[0]
2580 v.reset(OpPPC64LessEqual)
2581 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2582 v0.AddArg(x)
2583 v0.AddArg(y)
2584 v.AddArg(v0)
2585 return true
2586 }
2587 }
2588 func rewriteValuePPC64_OpLeq32F_0(v *Value) bool {
2589 b := v.Block
2590
2591
2592
2593 for {
2594 y := v.Args[1]
2595 x := v.Args[0]
2596 v.reset(OpPPC64FLessEqual)
2597 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2598 v0.AddArg(x)
2599 v0.AddArg(y)
2600 v.AddArg(v0)
2601 return true
2602 }
2603 }
2604 func rewriteValuePPC64_OpLeq32U_0(v *Value) bool {
2605 b := v.Block
2606
2607
2608
2609 for {
2610 y := v.Args[1]
2611 x := v.Args[0]
2612 v.reset(OpPPC64LessEqual)
2613 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2614 v0.AddArg(x)
2615 v0.AddArg(y)
2616 v.AddArg(v0)
2617 return true
2618 }
2619 }
2620 func rewriteValuePPC64_OpLeq64_0(v *Value) bool {
2621 b := v.Block
2622
2623
2624
2625 for {
2626 y := v.Args[1]
2627 x := v.Args[0]
2628 v.reset(OpPPC64LessEqual)
2629 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
2630 v0.AddArg(x)
2631 v0.AddArg(y)
2632 v.AddArg(v0)
2633 return true
2634 }
2635 }
2636 func rewriteValuePPC64_OpLeq64F_0(v *Value) bool {
2637 b := v.Block
2638
2639
2640
2641 for {
2642 y := v.Args[1]
2643 x := v.Args[0]
2644 v.reset(OpPPC64FLessEqual)
2645 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2646 v0.AddArg(x)
2647 v0.AddArg(y)
2648 v.AddArg(v0)
2649 return true
2650 }
2651 }
2652 func rewriteValuePPC64_OpLeq64U_0(v *Value) bool {
2653 b := v.Block
2654
2655
2656
2657 for {
2658 y := v.Args[1]
2659 x := v.Args[0]
2660 v.reset(OpPPC64LessEqual)
2661 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2662 v0.AddArg(x)
2663 v0.AddArg(y)
2664 v.AddArg(v0)
2665 return true
2666 }
2667 }
2668 func rewriteValuePPC64_OpLeq8_0(v *Value) bool {
2669 b := v.Block
2670 typ := &b.Func.Config.Types
2671
2672
2673
2674 for {
2675 y := v.Args[1]
2676 x := v.Args[0]
2677 v.reset(OpPPC64LessEqual)
2678 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2679 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2680 v1.AddArg(x)
2681 v0.AddArg(v1)
2682 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2683 v2.AddArg(y)
2684 v0.AddArg(v2)
2685 v.AddArg(v0)
2686 return true
2687 }
2688 }
2689 func rewriteValuePPC64_OpLeq8U_0(v *Value) bool {
2690 b := v.Block
2691 typ := &b.Func.Config.Types
2692
2693
2694
2695 for {
2696 y := v.Args[1]
2697 x := v.Args[0]
2698 v.reset(OpPPC64LessEqual)
2699 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2700 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2701 v1.AddArg(x)
2702 v0.AddArg(v1)
2703 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2704 v2.AddArg(y)
2705 v0.AddArg(v2)
2706 v.AddArg(v0)
2707 return true
2708 }
2709 }
2710 func rewriteValuePPC64_OpLess16_0(v *Value) bool {
2711 b := v.Block
2712 typ := &b.Func.Config.Types
2713
2714
2715
2716 for {
2717 y := v.Args[1]
2718 x := v.Args[0]
2719 v.reset(OpPPC64LessThan)
2720 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2721 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2722 v1.AddArg(x)
2723 v0.AddArg(v1)
2724 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
2725 v2.AddArg(y)
2726 v0.AddArg(v2)
2727 v.AddArg(v0)
2728 return true
2729 }
2730 }
2731 func rewriteValuePPC64_OpLess16U_0(v *Value) bool {
2732 b := v.Block
2733 typ := &b.Func.Config.Types
2734
2735
2736
2737 for {
2738 y := v.Args[1]
2739 x := v.Args[0]
2740 v.reset(OpPPC64LessThan)
2741 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2742 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2743 v1.AddArg(x)
2744 v0.AddArg(v1)
2745 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
2746 v2.AddArg(y)
2747 v0.AddArg(v2)
2748 v.AddArg(v0)
2749 return true
2750 }
2751 }
2752 func rewriteValuePPC64_OpLess32_0(v *Value) bool {
2753 b := v.Block
2754
2755
2756
2757 for {
2758 y := v.Args[1]
2759 x := v.Args[0]
2760 v.reset(OpPPC64LessThan)
2761 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2762 v0.AddArg(x)
2763 v0.AddArg(y)
2764 v.AddArg(v0)
2765 return true
2766 }
2767 }
2768 func rewriteValuePPC64_OpLess32F_0(v *Value) bool {
2769 b := v.Block
2770
2771
2772
2773 for {
2774 y := v.Args[1]
2775 x := v.Args[0]
2776 v.reset(OpPPC64FLessThan)
2777 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2778 v0.AddArg(x)
2779 v0.AddArg(y)
2780 v.AddArg(v0)
2781 return true
2782 }
2783 }
2784 func rewriteValuePPC64_OpLess32U_0(v *Value) bool {
2785 b := v.Block
2786
2787
2788
2789 for {
2790 y := v.Args[1]
2791 x := v.Args[0]
2792 v.reset(OpPPC64LessThan)
2793 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2794 v0.AddArg(x)
2795 v0.AddArg(y)
2796 v.AddArg(v0)
2797 return true
2798 }
2799 }
2800 func rewriteValuePPC64_OpLess64_0(v *Value) bool {
2801 b := v.Block
2802
2803
2804
2805 for {
2806 y := v.Args[1]
2807 x := v.Args[0]
2808 v.reset(OpPPC64LessThan)
2809 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
2810 v0.AddArg(x)
2811 v0.AddArg(y)
2812 v.AddArg(v0)
2813 return true
2814 }
2815 }
2816 func rewriteValuePPC64_OpLess64F_0(v *Value) bool {
2817 b := v.Block
2818
2819
2820
2821 for {
2822 y := v.Args[1]
2823 x := v.Args[0]
2824 v.reset(OpPPC64FLessThan)
2825 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
2826 v0.AddArg(x)
2827 v0.AddArg(y)
2828 v.AddArg(v0)
2829 return true
2830 }
2831 }
2832 func rewriteValuePPC64_OpLess64U_0(v *Value) bool {
2833 b := v.Block
2834
2835
2836
2837 for {
2838 y := v.Args[1]
2839 x := v.Args[0]
2840 v.reset(OpPPC64LessThan)
2841 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
2842 v0.AddArg(x)
2843 v0.AddArg(y)
2844 v.AddArg(v0)
2845 return true
2846 }
2847 }
2848 func rewriteValuePPC64_OpLess8_0(v *Value) bool {
2849 b := v.Block
2850 typ := &b.Func.Config.Types
2851
2852
2853
2854 for {
2855 y := v.Args[1]
2856 x := v.Args[0]
2857 v.reset(OpPPC64LessThan)
2858 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
2859 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2860 v1.AddArg(x)
2861 v0.AddArg(v1)
2862 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
2863 v2.AddArg(y)
2864 v0.AddArg(v2)
2865 v.AddArg(v0)
2866 return true
2867 }
2868 }
2869 func rewriteValuePPC64_OpLess8U_0(v *Value) bool {
2870 b := v.Block
2871 typ := &b.Func.Config.Types
2872
2873
2874
2875 for {
2876 y := v.Args[1]
2877 x := v.Args[0]
2878 v.reset(OpPPC64LessThan)
2879 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
2880 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2881 v1.AddArg(x)
2882 v0.AddArg(v1)
2883 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
2884 v2.AddArg(y)
2885 v0.AddArg(v2)
2886 v.AddArg(v0)
2887 return true
2888 }
2889 }
2890 func rewriteValuePPC64_OpLoad_0(v *Value) bool {
2891 b := v.Block
2892 typ := &b.Func.Config.Types
2893
2894
2895
2896 for {
2897 t := v.Type
2898 mem := v.Args[1]
2899 ptr := v.Args[0]
2900 if !(is64BitInt(t) || isPtr(t)) {
2901 break
2902 }
2903 v.reset(OpPPC64MOVDload)
2904 v.AddArg(ptr)
2905 v.AddArg(mem)
2906 return true
2907 }
2908
2909
2910
2911 for {
2912 t := v.Type
2913 mem := v.Args[1]
2914 ptr := v.Args[0]
2915 if !(is32BitInt(t) && isSigned(t)) {
2916 break
2917 }
2918 v.reset(OpPPC64MOVWload)
2919 v.AddArg(ptr)
2920 v.AddArg(mem)
2921 return true
2922 }
2923
2924
2925
2926 for {
2927 t := v.Type
2928 mem := v.Args[1]
2929 ptr := v.Args[0]
2930 if !(is32BitInt(t) && !isSigned(t)) {
2931 break
2932 }
2933 v.reset(OpPPC64MOVWZload)
2934 v.AddArg(ptr)
2935 v.AddArg(mem)
2936 return true
2937 }
2938
2939
2940
2941 for {
2942 t := v.Type
2943 mem := v.Args[1]
2944 ptr := v.Args[0]
2945 if !(is16BitInt(t) && isSigned(t)) {
2946 break
2947 }
2948 v.reset(OpPPC64MOVHload)
2949 v.AddArg(ptr)
2950 v.AddArg(mem)
2951 return true
2952 }
2953
2954
2955
2956 for {
2957 t := v.Type
2958 mem := v.Args[1]
2959 ptr := v.Args[0]
2960 if !(is16BitInt(t) && !isSigned(t)) {
2961 break
2962 }
2963 v.reset(OpPPC64MOVHZload)
2964 v.AddArg(ptr)
2965 v.AddArg(mem)
2966 return true
2967 }
2968
2969
2970
2971 for {
2972 t := v.Type
2973 mem := v.Args[1]
2974 ptr := v.Args[0]
2975 if !(t.IsBoolean()) {
2976 break
2977 }
2978 v.reset(OpPPC64MOVBZload)
2979 v.AddArg(ptr)
2980 v.AddArg(mem)
2981 return true
2982 }
2983
2984
2985
2986 for {
2987 t := v.Type
2988 mem := v.Args[1]
2989 ptr := v.Args[0]
2990 if !(is8BitInt(t) && isSigned(t)) {
2991 break
2992 }
2993 v.reset(OpPPC64MOVBreg)
2994 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8)
2995 v0.AddArg(ptr)
2996 v0.AddArg(mem)
2997 v.AddArg(v0)
2998 return true
2999 }
3000
3001
3002
3003 for {
3004 t := v.Type
3005 mem := v.Args[1]
3006 ptr := v.Args[0]
3007 if !(is8BitInt(t) && !isSigned(t)) {
3008 break
3009 }
3010 v.reset(OpPPC64MOVBZload)
3011 v.AddArg(ptr)
3012 v.AddArg(mem)
3013 return true
3014 }
3015
3016
3017
3018 for {
3019 t := v.Type
3020 mem := v.Args[1]
3021 ptr := v.Args[0]
3022 if !(is32BitFloat(t)) {
3023 break
3024 }
3025 v.reset(OpPPC64FMOVSload)
3026 v.AddArg(ptr)
3027 v.AddArg(mem)
3028 return true
3029 }
3030
3031
3032
3033 for {
3034 t := v.Type
3035 mem := v.Args[1]
3036 ptr := v.Args[0]
3037 if !(is64BitFloat(t)) {
3038 break
3039 }
3040 v.reset(OpPPC64FMOVDload)
3041 v.AddArg(ptr)
3042 v.AddArg(mem)
3043 return true
3044 }
3045 return false
3046 }
3047 func rewriteValuePPC64_OpLocalAddr_0(v *Value) bool {
3048
3049
3050
3051 for {
3052 sym := v.Aux
3053 _ = v.Args[1]
3054 base := v.Args[0]
3055 v.reset(OpPPC64MOVDaddr)
3056 v.Aux = sym
3057 v.AddArg(base)
3058 return true
3059 }
3060 }
3061 func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool {
3062 b := v.Block
3063 typ := &b.Func.Config.Types
3064
3065
3066
3067 for {
3068 y := v.Args[1]
3069 x := v.Args[0]
3070 if !(shiftIsBounded(v)) {
3071 break
3072 }
3073 v.reset(OpPPC64SLW)
3074 v.AddArg(x)
3075 v.AddArg(y)
3076 return true
3077 }
3078
3079
3080
3081 for {
3082 y := v.Args[1]
3083 x := v.Args[0]
3084 v.reset(OpPPC64SLW)
3085 v.AddArg(x)
3086 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3087 v0.AddArg(y)
3088 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3089 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3090 v2.AuxInt = -16
3091 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
3092 v3.AddArg(y)
3093 v2.AddArg(v3)
3094 v1.AddArg(v2)
3095 v0.AddArg(v1)
3096 v.AddArg(v0)
3097 return true
3098 }
3099 }
3100 func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool {
3101 b := v.Block
3102 typ := &b.Func.Config.Types
3103
3104
3105
3106 for {
3107 _ = v.Args[1]
3108 x := v.Args[0]
3109 v_1 := v.Args[1]
3110 if v_1.Op != OpConst64 {
3111 break
3112 }
3113 c := v_1.AuxInt
3114 if !(uint32(c) < 16) {
3115 break
3116 }
3117 v.reset(OpPPC64SLWconst)
3118 v.AuxInt = c
3119 v.AddArg(x)
3120 return true
3121 }
3122
3123
3124
3125 for {
3126 _ = v.Args[1]
3127 x := v.Args[0]
3128 v_1 := v.Args[1]
3129 if v_1.Op != OpPPC64MOVDconst {
3130 break
3131 }
3132 c := v_1.AuxInt
3133 if !(uint32(c) < 16) {
3134 break
3135 }
3136 v.reset(OpPPC64SLWconst)
3137 v.AuxInt = c
3138 v.AddArg(x)
3139 return true
3140 }
3141
3142
3143
3144 for {
3145 y := v.Args[1]
3146 x := v.Args[0]
3147 if !(shiftIsBounded(v)) {
3148 break
3149 }
3150 v.reset(OpPPC64SLW)
3151 v.AddArg(x)
3152 v.AddArg(y)
3153 return true
3154 }
3155
3156
3157
3158 for {
3159 y := v.Args[1]
3160 x := v.Args[0]
3161 v.reset(OpPPC64SLW)
3162 v.AddArg(x)
3163 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3164 v0.AddArg(y)
3165 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3166 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3167 v2.AuxInt = -16
3168 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
3169 v3.AddArg(y)
3170 v2.AddArg(v3)
3171 v1.AddArg(v2)
3172 v0.AddArg(v1)
3173 v.AddArg(v0)
3174 return true
3175 }
3176 }
3177 func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool {
3178 b := v.Block
3179 typ := &b.Func.Config.Types
3180
3181
3182
3183 for {
3184 _ = v.Args[1]
3185 x := v.Args[0]
3186 v_1 := v.Args[1]
3187 if v_1.Op != OpConst64 {
3188 break
3189 }
3190 c := v_1.AuxInt
3191 if !(uint64(c) < 16) {
3192 break
3193 }
3194 v.reset(OpPPC64SLWconst)
3195 v.AuxInt = c
3196 v.AddArg(x)
3197 return true
3198 }
3199
3200
3201
3202 for {
3203 _ = v.Args[1]
3204 v_1 := v.Args[1]
3205 if v_1.Op != OpConst64 {
3206 break
3207 }
3208 c := v_1.AuxInt
3209 if !(uint64(c) >= 16) {
3210 break
3211 }
3212 v.reset(OpPPC64MOVDconst)
3213 v.AuxInt = 0
3214 return true
3215 }
3216
3217
3218
3219 for {
3220 _ = v.Args[1]
3221 x := v.Args[0]
3222 v_1 := v.Args[1]
3223 if v_1.Op != OpPPC64MOVDconst {
3224 break
3225 }
3226 c := v_1.AuxInt
3227 if !(uint64(c) < 16) {
3228 break
3229 }
3230 v.reset(OpPPC64SLWconst)
3231 v.AuxInt = c
3232 v.AddArg(x)
3233 return true
3234 }
3235
3236
3237
3238 for {
3239 y := v.Args[1]
3240 x := v.Args[0]
3241 if !(shiftIsBounded(v)) {
3242 break
3243 }
3244 v.reset(OpPPC64SLW)
3245 v.AddArg(x)
3246 v.AddArg(y)
3247 return true
3248 }
3249
3250
3251
3252 for {
3253 y := v.Args[1]
3254 x := v.Args[0]
3255 v.reset(OpPPC64SLW)
3256 v.AddArg(x)
3257 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3258 v0.AddArg(y)
3259 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3260 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3261 v2.AuxInt = -16
3262 v2.AddArg(y)
3263 v1.AddArg(v2)
3264 v0.AddArg(v1)
3265 v.AddArg(v0)
3266 return true
3267 }
3268 }
3269 func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool {
3270 b := v.Block
3271 typ := &b.Func.Config.Types
3272
3273
3274
3275 for {
3276 y := v.Args[1]
3277 x := v.Args[0]
3278 if !(shiftIsBounded(v)) {
3279 break
3280 }
3281 v.reset(OpPPC64SLW)
3282 v.AddArg(x)
3283 v.AddArg(y)
3284 return true
3285 }
3286
3287
3288
3289 for {
3290 y := v.Args[1]
3291 x := v.Args[0]
3292 v.reset(OpPPC64SLW)
3293 v.AddArg(x)
3294 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3295 v0.AddArg(y)
3296 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3297 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3298 v2.AuxInt = -16
3299 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
3300 v3.AddArg(y)
3301 v2.AddArg(v3)
3302 v1.AddArg(v2)
3303 v0.AddArg(v1)
3304 v.AddArg(v0)
3305 return true
3306 }
3307 }
3308 func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool {
3309 b := v.Block
3310 typ := &b.Func.Config.Types
3311
3312
3313
3314 for {
3315 y := v.Args[1]
3316 x := v.Args[0]
3317 if !(shiftIsBounded(v)) {
3318 break
3319 }
3320 v.reset(OpPPC64SLW)
3321 v.AddArg(x)
3322 v.AddArg(y)
3323 return true
3324 }
3325
3326
3327
3328 for {
3329 y := v.Args[1]
3330 x := v.Args[0]
3331 v.reset(OpPPC64SLW)
3332 v.AddArg(x)
3333 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3334 v0.AddArg(y)
3335 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3336 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3337 v2.AuxInt = -32
3338 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
3339 v3.AddArg(y)
3340 v2.AddArg(v3)
3341 v1.AddArg(v2)
3342 v0.AddArg(v1)
3343 v.AddArg(v0)
3344 return true
3345 }
3346 }
3347 func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool {
3348 b := v.Block
3349 typ := &b.Func.Config.Types
3350
3351
3352
3353 for {
3354 _ = v.Args[1]
3355 x := v.Args[0]
3356 v_1 := v.Args[1]
3357 if v_1.Op != OpConst64 {
3358 break
3359 }
3360 c := v_1.AuxInt
3361 if !(uint32(c) < 32) {
3362 break
3363 }
3364 v.reset(OpPPC64SLWconst)
3365 v.AuxInt = c
3366 v.AddArg(x)
3367 return true
3368 }
3369
3370
3371
3372 for {
3373 _ = v.Args[1]
3374 x := v.Args[0]
3375 v_1 := v.Args[1]
3376 if v_1.Op != OpPPC64MOVDconst {
3377 break
3378 }
3379 c := v_1.AuxInt
3380 if !(uint32(c) < 32) {
3381 break
3382 }
3383 v.reset(OpPPC64SLWconst)
3384 v.AuxInt = c
3385 v.AddArg(x)
3386 return true
3387 }
3388
3389
3390
3391 for {
3392 y := v.Args[1]
3393 x := v.Args[0]
3394 if !(shiftIsBounded(v)) {
3395 break
3396 }
3397 v.reset(OpPPC64SLW)
3398 v.AddArg(x)
3399 v.AddArg(y)
3400 return true
3401 }
3402
3403
3404
3405 for {
3406 y := v.Args[1]
3407 x := v.Args[0]
3408 v.reset(OpPPC64SLW)
3409 v.AddArg(x)
3410 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3411 v0.AddArg(y)
3412 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3413 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3414 v2.AuxInt = -32
3415 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
3416 v3.AddArg(y)
3417 v2.AddArg(v3)
3418 v1.AddArg(v2)
3419 v0.AddArg(v1)
3420 v.AddArg(v0)
3421 return true
3422 }
3423 }
3424 func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool {
3425 b := v.Block
3426 typ := &b.Func.Config.Types
3427
3428
3429
3430 for {
3431 _ = v.Args[1]
3432 x := v.Args[0]
3433 v_1 := v.Args[1]
3434 if v_1.Op != OpConst64 {
3435 break
3436 }
3437 c := v_1.AuxInt
3438 if !(uint64(c) < 32) {
3439 break
3440 }
3441 v.reset(OpPPC64SLWconst)
3442 v.AuxInt = c
3443 v.AddArg(x)
3444 return true
3445 }
3446
3447
3448
3449 for {
3450 _ = v.Args[1]
3451 v_1 := v.Args[1]
3452 if v_1.Op != OpConst64 {
3453 break
3454 }
3455 c := v_1.AuxInt
3456 if !(uint64(c) >= 32) {
3457 break
3458 }
3459 v.reset(OpPPC64MOVDconst)
3460 v.AuxInt = 0
3461 return true
3462 }
3463
3464
3465
3466 for {
3467 _ = v.Args[1]
3468 x := v.Args[0]
3469 v_1 := v.Args[1]
3470 if v_1.Op != OpPPC64MOVDconst {
3471 break
3472 }
3473 c := v_1.AuxInt
3474 if !(uint64(c) < 32) {
3475 break
3476 }
3477 v.reset(OpPPC64SLWconst)
3478 v.AuxInt = c
3479 v.AddArg(x)
3480 return true
3481 }
3482
3483
3484
3485 for {
3486 y := v.Args[1]
3487 x := v.Args[0]
3488 if !(shiftIsBounded(v)) {
3489 break
3490 }
3491 v.reset(OpPPC64SLW)
3492 v.AddArg(x)
3493 v.AddArg(y)
3494 return true
3495 }
3496
3497
3498
3499 for {
3500 _ = v.Args[1]
3501 x := v.Args[0]
3502 v_1 := v.Args[1]
3503 if v_1.Op != OpPPC64AND {
3504 break
3505 }
3506 _ = v_1.Args[1]
3507 y := v_1.Args[0]
3508 v_1_1 := v_1.Args[1]
3509 if v_1_1.Op != OpPPC64MOVDconst {
3510 break
3511 }
3512 if v_1_1.AuxInt != 31 {
3513 break
3514 }
3515 v.reset(OpPPC64SLW)
3516 v.AddArg(x)
3517 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
3518 v0.AuxInt = 31
3519 v0.AddArg(y)
3520 v.AddArg(v0)
3521 return true
3522 }
3523
3524
3525
3526 for {
3527 _ = v.Args[1]
3528 x := v.Args[0]
3529 v_1 := v.Args[1]
3530 if v_1.Op != OpPPC64AND {
3531 break
3532 }
3533 y := v_1.Args[1]
3534 v_1_0 := v_1.Args[0]
3535 if v_1_0.Op != OpPPC64MOVDconst {
3536 break
3537 }
3538 if v_1_0.AuxInt != 31 {
3539 break
3540 }
3541 v.reset(OpPPC64SLW)
3542 v.AddArg(x)
3543 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
3544 v0.AuxInt = 31
3545 v0.AddArg(y)
3546 v.AddArg(v0)
3547 return true
3548 }
3549
3550
3551
3552 for {
3553 _ = v.Args[1]
3554 x := v.Args[0]
3555 v_1 := v.Args[1]
3556 if v_1.Op != OpPPC64ANDconst {
3557 break
3558 }
3559 if v_1.Type != typ.Int32 {
3560 break
3561 }
3562 if v_1.AuxInt != 31 {
3563 break
3564 }
3565 y := v_1.Args[0]
3566 v.reset(OpPPC64SLW)
3567 v.AddArg(x)
3568 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
3569 v0.AuxInt = 31
3570 v0.AddArg(y)
3571 v.AddArg(v0)
3572 return true
3573 }
3574
3575
3576
3577 for {
3578 y := v.Args[1]
3579 x := v.Args[0]
3580 v.reset(OpPPC64SLW)
3581 v.AddArg(x)
3582 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3583 v0.AddArg(y)
3584 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3585 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3586 v2.AuxInt = -32
3587 v2.AddArg(y)
3588 v1.AddArg(v2)
3589 v0.AddArg(v1)
3590 v.AddArg(v0)
3591 return true
3592 }
3593 }
3594 func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool {
3595 b := v.Block
3596 typ := &b.Func.Config.Types
3597
3598
3599
3600 for {
3601 y := v.Args[1]
3602 x := v.Args[0]
3603 if !(shiftIsBounded(v)) {
3604 break
3605 }
3606 v.reset(OpPPC64SLW)
3607 v.AddArg(x)
3608 v.AddArg(y)
3609 return true
3610 }
3611
3612
3613
3614 for {
3615 y := v.Args[1]
3616 x := v.Args[0]
3617 v.reset(OpPPC64SLW)
3618 v.AddArg(x)
3619 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3620 v0.AddArg(y)
3621 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3622 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3623 v2.AuxInt = -32
3624 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
3625 v3.AddArg(y)
3626 v2.AddArg(v3)
3627 v1.AddArg(v2)
3628 v0.AddArg(v1)
3629 v.AddArg(v0)
3630 return true
3631 }
3632 }
3633 func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool {
3634 b := v.Block
3635 typ := &b.Func.Config.Types
3636
3637
3638
3639 for {
3640 y := v.Args[1]
3641 x := v.Args[0]
3642 if !(shiftIsBounded(v)) {
3643 break
3644 }
3645 v.reset(OpPPC64SLD)
3646 v.AddArg(x)
3647 v.AddArg(y)
3648 return true
3649 }
3650
3651
3652
3653 for {
3654 y := v.Args[1]
3655 x := v.Args[0]
3656 v.reset(OpPPC64SLD)
3657 v.AddArg(x)
3658 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3659 v0.AddArg(y)
3660 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3661 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3662 v2.AuxInt = -64
3663 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
3664 v3.AddArg(y)
3665 v2.AddArg(v3)
3666 v1.AddArg(v2)
3667 v0.AddArg(v1)
3668 v.AddArg(v0)
3669 return true
3670 }
3671 }
3672 func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool {
3673 b := v.Block
3674 typ := &b.Func.Config.Types
3675
3676
3677
3678 for {
3679 _ = v.Args[1]
3680 x := v.Args[0]
3681 v_1 := v.Args[1]
3682 if v_1.Op != OpConst64 {
3683 break
3684 }
3685 c := v_1.AuxInt
3686 if !(uint32(c) < 64) {
3687 break
3688 }
3689 v.reset(OpPPC64SLDconst)
3690 v.AuxInt = c
3691 v.AddArg(x)
3692 return true
3693 }
3694
3695
3696
3697 for {
3698 _ = v.Args[1]
3699 x := v.Args[0]
3700 v_1 := v.Args[1]
3701 if v_1.Op != OpPPC64MOVDconst {
3702 break
3703 }
3704 c := v_1.AuxInt
3705 if !(uint32(c) < 64) {
3706 break
3707 }
3708 v.reset(OpPPC64SLDconst)
3709 v.AuxInt = c
3710 v.AddArg(x)
3711 return true
3712 }
3713
3714
3715
3716 for {
3717 y := v.Args[1]
3718 x := v.Args[0]
3719 if !(shiftIsBounded(v)) {
3720 break
3721 }
3722 v.reset(OpPPC64SLD)
3723 v.AddArg(x)
3724 v.AddArg(y)
3725 return true
3726 }
3727
3728
3729
3730 for {
3731 y := v.Args[1]
3732 x := v.Args[0]
3733 v.reset(OpPPC64SLD)
3734 v.AddArg(x)
3735 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3736 v0.AddArg(y)
3737 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3738 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3739 v2.AuxInt = -64
3740 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
3741 v3.AddArg(y)
3742 v2.AddArg(v3)
3743 v1.AddArg(v2)
3744 v0.AddArg(v1)
3745 v.AddArg(v0)
3746 return true
3747 }
3748 }
3749 func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool {
3750 b := v.Block
3751 typ := &b.Func.Config.Types
3752
3753
3754
3755 for {
3756 _ = v.Args[1]
3757 x := v.Args[0]
3758 v_1 := v.Args[1]
3759 if v_1.Op != OpConst64 {
3760 break
3761 }
3762 c := v_1.AuxInt
3763 if !(uint64(c) < 64) {
3764 break
3765 }
3766 v.reset(OpPPC64SLDconst)
3767 v.AuxInt = c
3768 v.AddArg(x)
3769 return true
3770 }
3771
3772
3773
3774 for {
3775 _ = v.Args[1]
3776 v_1 := v.Args[1]
3777 if v_1.Op != OpConst64 {
3778 break
3779 }
3780 c := v_1.AuxInt
3781 if !(uint64(c) >= 64) {
3782 break
3783 }
3784 v.reset(OpPPC64MOVDconst)
3785 v.AuxInt = 0
3786 return true
3787 }
3788
3789
3790
3791 for {
3792 _ = v.Args[1]
3793 x := v.Args[0]
3794 v_1 := v.Args[1]
3795 if v_1.Op != OpPPC64MOVDconst {
3796 break
3797 }
3798 c := v_1.AuxInt
3799 if !(uint64(c) < 64) {
3800 break
3801 }
3802 v.reset(OpPPC64SLDconst)
3803 v.AuxInt = c
3804 v.AddArg(x)
3805 return true
3806 }
3807
3808
3809
3810 for {
3811 y := v.Args[1]
3812 x := v.Args[0]
3813 if !(shiftIsBounded(v)) {
3814 break
3815 }
3816 v.reset(OpPPC64SLD)
3817 v.AddArg(x)
3818 v.AddArg(y)
3819 return true
3820 }
3821
3822
3823
3824 for {
3825 _ = v.Args[1]
3826 x := v.Args[0]
3827 v_1 := v.Args[1]
3828 if v_1.Op != OpPPC64AND {
3829 break
3830 }
3831 _ = v_1.Args[1]
3832 y := v_1.Args[0]
3833 v_1_1 := v_1.Args[1]
3834 if v_1_1.Op != OpPPC64MOVDconst {
3835 break
3836 }
3837 if v_1_1.AuxInt != 63 {
3838 break
3839 }
3840 v.reset(OpPPC64SLD)
3841 v.AddArg(x)
3842 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
3843 v0.AuxInt = 63
3844 v0.AddArg(y)
3845 v.AddArg(v0)
3846 return true
3847 }
3848
3849
3850
3851 for {
3852 _ = v.Args[1]
3853 x := v.Args[0]
3854 v_1 := v.Args[1]
3855 if v_1.Op != OpPPC64AND {
3856 break
3857 }
3858 y := v_1.Args[1]
3859 v_1_0 := v_1.Args[0]
3860 if v_1_0.Op != OpPPC64MOVDconst {
3861 break
3862 }
3863 if v_1_0.AuxInt != 63 {
3864 break
3865 }
3866 v.reset(OpPPC64SLD)
3867 v.AddArg(x)
3868 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
3869 v0.AuxInt = 63
3870 v0.AddArg(y)
3871 v.AddArg(v0)
3872 return true
3873 }
3874
3875
3876
3877 for {
3878 _ = v.Args[1]
3879 x := v.Args[0]
3880 v_1 := v.Args[1]
3881 if v_1.Op != OpPPC64ANDconst {
3882 break
3883 }
3884 if v_1.Type != typ.Int64 {
3885 break
3886 }
3887 if v_1.AuxInt != 63 {
3888 break
3889 }
3890 y := v_1.Args[0]
3891 v.reset(OpPPC64SLD)
3892 v.AddArg(x)
3893 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
3894 v0.AuxInt = 63
3895 v0.AddArg(y)
3896 v.AddArg(v0)
3897 return true
3898 }
3899
3900
3901
3902 for {
3903 y := v.Args[1]
3904 x := v.Args[0]
3905 v.reset(OpPPC64SLD)
3906 v.AddArg(x)
3907 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3908 v0.AddArg(y)
3909 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3910 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3911 v2.AuxInt = -64
3912 v2.AddArg(y)
3913 v1.AddArg(v2)
3914 v0.AddArg(v1)
3915 v.AddArg(v0)
3916 return true
3917 }
3918 }
3919 func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool {
3920 b := v.Block
3921 typ := &b.Func.Config.Types
3922
3923
3924
3925 for {
3926 y := v.Args[1]
3927 x := v.Args[0]
3928 if !(shiftIsBounded(v)) {
3929 break
3930 }
3931 v.reset(OpPPC64SLD)
3932 v.AddArg(x)
3933 v.AddArg(y)
3934 return true
3935 }
3936
3937
3938
3939 for {
3940 y := v.Args[1]
3941 x := v.Args[0]
3942 v.reset(OpPPC64SLD)
3943 v.AddArg(x)
3944 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3945 v0.AddArg(y)
3946 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3947 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3948 v2.AuxInt = -64
3949 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
3950 v3.AddArg(y)
3951 v2.AddArg(v3)
3952 v1.AddArg(v2)
3953 v0.AddArg(v1)
3954 v.AddArg(v0)
3955 return true
3956 }
3957 }
3958 func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool {
3959 b := v.Block
3960 typ := &b.Func.Config.Types
3961
3962
3963
3964 for {
3965 y := v.Args[1]
3966 x := v.Args[0]
3967 if !(shiftIsBounded(v)) {
3968 break
3969 }
3970 v.reset(OpPPC64SLW)
3971 v.AddArg(x)
3972 v.AddArg(y)
3973 return true
3974 }
3975
3976
3977
3978 for {
3979 y := v.Args[1]
3980 x := v.Args[0]
3981 v.reset(OpPPC64SLW)
3982 v.AddArg(x)
3983 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
3984 v0.AddArg(y)
3985 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
3986 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
3987 v2.AuxInt = -8
3988 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
3989 v3.AddArg(y)
3990 v2.AddArg(v3)
3991 v1.AddArg(v2)
3992 v0.AddArg(v1)
3993 v.AddArg(v0)
3994 return true
3995 }
3996 }
3997 func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool {
3998 b := v.Block
3999 typ := &b.Func.Config.Types
4000
4001
4002
4003 for {
4004 _ = v.Args[1]
4005 x := v.Args[0]
4006 v_1 := v.Args[1]
4007 if v_1.Op != OpConst64 {
4008 break
4009 }
4010 c := v_1.AuxInt
4011 if !(uint32(c) < 8) {
4012 break
4013 }
4014 v.reset(OpPPC64SLWconst)
4015 v.AuxInt = c
4016 v.AddArg(x)
4017 return true
4018 }
4019
4020
4021
4022 for {
4023 _ = v.Args[1]
4024 x := v.Args[0]
4025 v_1 := v.Args[1]
4026 if v_1.Op != OpPPC64MOVDconst {
4027 break
4028 }
4029 c := v_1.AuxInt
4030 if !(uint32(c) < 8) {
4031 break
4032 }
4033 v.reset(OpPPC64SLWconst)
4034 v.AuxInt = c
4035 v.AddArg(x)
4036 return true
4037 }
4038
4039
4040
4041 for {
4042 y := v.Args[1]
4043 x := v.Args[0]
4044 if !(shiftIsBounded(v)) {
4045 break
4046 }
4047 v.reset(OpPPC64SLW)
4048 v.AddArg(x)
4049 v.AddArg(y)
4050 return true
4051 }
4052
4053
4054
4055 for {
4056 y := v.Args[1]
4057 x := v.Args[0]
4058 v.reset(OpPPC64SLW)
4059 v.AddArg(x)
4060 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
4061 v0.AddArg(y)
4062 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
4063 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
4064 v2.AuxInt = -8
4065 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
4066 v3.AddArg(y)
4067 v2.AddArg(v3)
4068 v1.AddArg(v2)
4069 v0.AddArg(v1)
4070 v.AddArg(v0)
4071 return true
4072 }
4073 }
4074 func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool {
4075 b := v.Block
4076 typ := &b.Func.Config.Types
4077
4078
4079
4080 for {
4081 _ = v.Args[1]
4082 x := v.Args[0]
4083 v_1 := v.Args[1]
4084 if v_1.Op != OpConst64 {
4085 break
4086 }
4087 c := v_1.AuxInt
4088 if !(uint64(c) < 8) {
4089 break
4090 }
4091 v.reset(OpPPC64SLWconst)
4092 v.AuxInt = c
4093 v.AddArg(x)
4094 return true
4095 }
4096
4097
4098
4099 for {
4100 _ = v.Args[1]
4101 v_1 := v.Args[1]
4102 if v_1.Op != OpConst64 {
4103 break
4104 }
4105 c := v_1.AuxInt
4106 if !(uint64(c) >= 8) {
4107 break
4108 }
4109 v.reset(OpPPC64MOVDconst)
4110 v.AuxInt = 0
4111 return true
4112 }
4113
4114
4115
4116 for {
4117 _ = v.Args[1]
4118 x := v.Args[0]
4119 v_1 := v.Args[1]
4120 if v_1.Op != OpPPC64MOVDconst {
4121 break
4122 }
4123 c := v_1.AuxInt
4124 if !(uint64(c) < 8) {
4125 break
4126 }
4127 v.reset(OpPPC64SLWconst)
4128 v.AuxInt = c
4129 v.AddArg(x)
4130 return true
4131 }
4132
4133
4134
4135 for {
4136 y := v.Args[1]
4137 x := v.Args[0]
4138 if !(shiftIsBounded(v)) {
4139 break
4140 }
4141 v.reset(OpPPC64SLW)
4142 v.AddArg(x)
4143 v.AddArg(y)
4144 return true
4145 }
4146
4147
4148
4149 for {
4150 y := v.Args[1]
4151 x := v.Args[0]
4152 v.reset(OpPPC64SLW)
4153 v.AddArg(x)
4154 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
4155 v0.AddArg(y)
4156 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
4157 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
4158 v2.AuxInt = -8
4159 v2.AddArg(y)
4160 v1.AddArg(v2)
4161 v0.AddArg(v1)
4162 v.AddArg(v0)
4163 return true
4164 }
4165 }
4166 func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool {
4167 b := v.Block
4168 typ := &b.Func.Config.Types
4169
4170
4171
4172 for {
4173 y := v.Args[1]
4174 x := v.Args[0]
4175 if !(shiftIsBounded(v)) {
4176 break
4177 }
4178 v.reset(OpPPC64SLW)
4179 v.AddArg(x)
4180 v.AddArg(y)
4181 return true
4182 }
4183
4184
4185
4186 for {
4187 y := v.Args[1]
4188 x := v.Args[0]
4189 v.reset(OpPPC64SLW)
4190 v.AddArg(x)
4191 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
4192 v0.AddArg(y)
4193 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
4194 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
4195 v2.AuxInt = -8
4196 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
4197 v3.AddArg(y)
4198 v2.AddArg(v3)
4199 v1.AddArg(v2)
4200 v0.AddArg(v1)
4201 v.AddArg(v0)
4202 return true
4203 }
4204 }
4205 func rewriteValuePPC64_OpMod16_0(v *Value) bool {
4206 b := v.Block
4207 typ := &b.Func.Config.Types
4208
4209
4210
4211 for {
4212 y := v.Args[1]
4213 x := v.Args[0]
4214 v.reset(OpMod32)
4215 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
4216 v0.AddArg(x)
4217 v.AddArg(v0)
4218 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
4219 v1.AddArg(y)
4220 v.AddArg(v1)
4221 return true
4222 }
4223 }
4224 func rewriteValuePPC64_OpMod16u_0(v *Value) bool {
4225 b := v.Block
4226 typ := &b.Func.Config.Types
4227
4228
4229
4230 for {
4231 y := v.Args[1]
4232 x := v.Args[0]
4233 v.reset(OpMod32u)
4234 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
4235 v0.AddArg(x)
4236 v.AddArg(v0)
4237 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
4238 v1.AddArg(y)
4239 v.AddArg(v1)
4240 return true
4241 }
4242 }
4243 func rewriteValuePPC64_OpMod32_0(v *Value) bool {
4244 b := v.Block
4245 typ := &b.Func.Config.Types
4246
4247
4248
4249 for {
4250 y := v.Args[1]
4251 x := v.Args[0]
4252 v.reset(OpPPC64SUB)
4253 v.AddArg(x)
4254 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32)
4255 v0.AddArg(y)
4256 v1 := b.NewValue0(v.Pos, OpPPC64DIVW, typ.Int32)
4257 v1.AddArg(x)
4258 v1.AddArg(y)
4259 v0.AddArg(v1)
4260 v.AddArg(v0)
4261 return true
4262 }
4263 }
4264 func rewriteValuePPC64_OpMod32u_0(v *Value) bool {
4265 b := v.Block
4266 typ := &b.Func.Config.Types
4267
4268
4269
4270 for {
4271 y := v.Args[1]
4272 x := v.Args[0]
4273 v.reset(OpPPC64SUB)
4274 v.AddArg(x)
4275 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32)
4276 v0.AddArg(y)
4277 v1 := b.NewValue0(v.Pos, OpPPC64DIVWU, typ.Int32)
4278 v1.AddArg(x)
4279 v1.AddArg(y)
4280 v0.AddArg(v1)
4281 v.AddArg(v0)
4282 return true
4283 }
4284 }
4285 func rewriteValuePPC64_OpMod64_0(v *Value) bool {
4286 b := v.Block
4287 typ := &b.Func.Config.Types
4288
4289
4290
4291 for {
4292 y := v.Args[1]
4293 x := v.Args[0]
4294 v.reset(OpPPC64SUB)
4295 v.AddArg(x)
4296 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64)
4297 v0.AddArg(y)
4298 v1 := b.NewValue0(v.Pos, OpPPC64DIVD, typ.Int64)
4299 v1.AddArg(x)
4300 v1.AddArg(y)
4301 v0.AddArg(v1)
4302 v.AddArg(v0)
4303 return true
4304 }
4305 }
4306 func rewriteValuePPC64_OpMod64u_0(v *Value) bool {
4307 b := v.Block
4308 typ := &b.Func.Config.Types
4309
4310
4311
4312 for {
4313 y := v.Args[1]
4314 x := v.Args[0]
4315 v.reset(OpPPC64SUB)
4316 v.AddArg(x)
4317 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64)
4318 v0.AddArg(y)
4319 v1 := b.NewValue0(v.Pos, OpPPC64DIVDU, typ.Int64)
4320 v1.AddArg(x)
4321 v1.AddArg(y)
4322 v0.AddArg(v1)
4323 v.AddArg(v0)
4324 return true
4325 }
4326 }
4327 func rewriteValuePPC64_OpMod8_0(v *Value) bool {
4328 b := v.Block
4329 typ := &b.Func.Config.Types
4330
4331
4332
4333 for {
4334 y := v.Args[1]
4335 x := v.Args[0]
4336 v.reset(OpMod32)
4337 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
4338 v0.AddArg(x)
4339 v.AddArg(v0)
4340 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
4341 v1.AddArg(y)
4342 v.AddArg(v1)
4343 return true
4344 }
4345 }
4346 func rewriteValuePPC64_OpMod8u_0(v *Value) bool {
4347 b := v.Block
4348 typ := &b.Func.Config.Types
4349
4350
4351
4352 for {
4353 y := v.Args[1]
4354 x := v.Args[0]
4355 v.reset(OpMod32u)
4356 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
4357 v0.AddArg(x)
4358 v.AddArg(v0)
4359 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
4360 v1.AddArg(y)
4361 v.AddArg(v1)
4362 return true
4363 }
4364 }
4365 func rewriteValuePPC64_OpMove_0(v *Value) bool {
4366 b := v.Block
4367 typ := &b.Func.Config.Types
4368
4369
4370
4371 for {
4372 if v.AuxInt != 0 {
4373 break
4374 }
4375 mem := v.Args[2]
4376 v.reset(OpCopy)
4377 v.Type = mem.Type
4378 v.AddArg(mem)
4379 return true
4380 }
4381
4382
4383
4384 for {
4385 if v.AuxInt != 1 {
4386 break
4387 }
4388 mem := v.Args[2]
4389 dst := v.Args[0]
4390 src := v.Args[1]
4391 v.reset(OpPPC64MOVBstore)
4392 v.AddArg(dst)
4393 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8)
4394 v0.AddArg(src)
4395 v0.AddArg(mem)
4396 v.AddArg(v0)
4397 v.AddArg(mem)
4398 return true
4399 }
4400
4401
4402
4403 for {
4404 if v.AuxInt != 2 {
4405 break
4406 }
4407 mem := v.Args[2]
4408 dst := v.Args[0]
4409 src := v.Args[1]
4410 v.reset(OpPPC64MOVHstore)
4411 v.AddArg(dst)
4412 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16)
4413 v0.AddArg(src)
4414 v0.AddArg(mem)
4415 v.AddArg(v0)
4416 v.AddArg(mem)
4417 return true
4418 }
4419
4420
4421
4422 for {
4423 if v.AuxInt != 4 {
4424 break
4425 }
4426 mem := v.Args[2]
4427 dst := v.Args[0]
4428 src := v.Args[1]
4429 v.reset(OpPPC64MOVWstore)
4430 v.AddArg(dst)
4431 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4432 v0.AddArg(src)
4433 v0.AddArg(mem)
4434 v.AddArg(v0)
4435 v.AddArg(mem)
4436 return true
4437 }
4438
4439
4440
4441 for {
4442 if v.AuxInt != 8 {
4443 break
4444 }
4445 t := v.Aux
4446 mem := v.Args[2]
4447 dst := v.Args[0]
4448 src := v.Args[1]
4449 if !(t.(*types.Type).Alignment()%4 == 0) {
4450 break
4451 }
4452 v.reset(OpPPC64MOVDstore)
4453 v.AddArg(dst)
4454 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, typ.Int64)
4455 v0.AddArg(src)
4456 v0.AddArg(mem)
4457 v.AddArg(v0)
4458 v.AddArg(mem)
4459 return true
4460 }
4461
4462
4463
4464 for {
4465 if v.AuxInt != 8 {
4466 break
4467 }
4468 mem := v.Args[2]
4469 dst := v.Args[0]
4470 src := v.Args[1]
4471 v.reset(OpPPC64MOVWstore)
4472 v.AuxInt = 4
4473 v.AddArg(dst)
4474 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4475 v0.AuxInt = 4
4476 v0.AddArg(src)
4477 v0.AddArg(mem)
4478 v.AddArg(v0)
4479 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem)
4480 v1.AddArg(dst)
4481 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4482 v2.AddArg(src)
4483 v2.AddArg(mem)
4484 v1.AddArg(v2)
4485 v1.AddArg(mem)
4486 v.AddArg(v1)
4487 return true
4488 }
4489
4490
4491
4492 for {
4493 if v.AuxInt != 3 {
4494 break
4495 }
4496 mem := v.Args[2]
4497 dst := v.Args[0]
4498 src := v.Args[1]
4499 v.reset(OpPPC64MOVBstore)
4500 v.AuxInt = 2
4501 v.AddArg(dst)
4502 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8)
4503 v0.AuxInt = 2
4504 v0.AddArg(src)
4505 v0.AddArg(mem)
4506 v.AddArg(v0)
4507 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem)
4508 v1.AddArg(dst)
4509 v2 := b.NewValue0(v.Pos, OpPPC64MOVHload, typ.Int16)
4510 v2.AddArg(src)
4511 v2.AddArg(mem)
4512 v1.AddArg(v2)
4513 v1.AddArg(mem)
4514 v.AddArg(v1)
4515 return true
4516 }
4517
4518
4519
4520 for {
4521 if v.AuxInt != 5 {
4522 break
4523 }
4524 mem := v.Args[2]
4525 dst := v.Args[0]
4526 src := v.Args[1]
4527 v.reset(OpPPC64MOVBstore)
4528 v.AuxInt = 4
4529 v.AddArg(dst)
4530 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8)
4531 v0.AuxInt = 4
4532 v0.AddArg(src)
4533 v0.AddArg(mem)
4534 v.AddArg(v0)
4535 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem)
4536 v1.AddArg(dst)
4537 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4538 v2.AddArg(src)
4539 v2.AddArg(mem)
4540 v1.AddArg(v2)
4541 v1.AddArg(mem)
4542 v.AddArg(v1)
4543 return true
4544 }
4545
4546
4547
4548 for {
4549 if v.AuxInt != 6 {
4550 break
4551 }
4552 mem := v.Args[2]
4553 dst := v.Args[0]
4554 src := v.Args[1]
4555 v.reset(OpPPC64MOVHstore)
4556 v.AuxInt = 4
4557 v.AddArg(dst)
4558 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16)
4559 v0.AuxInt = 4
4560 v0.AddArg(src)
4561 v0.AddArg(mem)
4562 v.AddArg(v0)
4563 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem)
4564 v1.AddArg(dst)
4565 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4566 v2.AddArg(src)
4567 v2.AddArg(mem)
4568 v1.AddArg(v2)
4569 v1.AddArg(mem)
4570 v.AddArg(v1)
4571 return true
4572 }
4573
4574
4575
4576 for {
4577 if v.AuxInt != 7 {
4578 break
4579 }
4580 mem := v.Args[2]
4581 dst := v.Args[0]
4582 src := v.Args[1]
4583 v.reset(OpPPC64MOVBstore)
4584 v.AuxInt = 6
4585 v.AddArg(dst)
4586 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8)
4587 v0.AuxInt = 6
4588 v0.AddArg(src)
4589 v0.AddArg(mem)
4590 v.AddArg(v0)
4591 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem)
4592 v1.AuxInt = 4
4593 v1.AddArg(dst)
4594 v2 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16)
4595 v2.AuxInt = 4
4596 v2.AddArg(src)
4597 v2.AddArg(mem)
4598 v1.AddArg(v2)
4599 v3 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem)
4600 v3.AddArg(dst)
4601 v4 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32)
4602 v4.AddArg(src)
4603 v4.AddArg(mem)
4604 v3.AddArg(v4)
4605 v3.AddArg(mem)
4606 v1.AddArg(v3)
4607 v.AddArg(v1)
4608 return true
4609 }
4610 return false
4611 }
4612 func rewriteValuePPC64_OpMove_10(v *Value) bool {
4613
4614
4615
4616 for {
4617 s := v.AuxInt
4618 mem := v.Args[2]
4619 dst := v.Args[0]
4620 src := v.Args[1]
4621 if !(s > 8) {
4622 break
4623 }
4624 v.reset(OpPPC64LoweredMove)
4625 v.AuxInt = s
4626 v.AddArg(dst)
4627 v.AddArg(src)
4628 v.AddArg(mem)
4629 return true
4630 }
4631 return false
4632 }
4633 func rewriteValuePPC64_OpMul16_0(v *Value) bool {
4634
4635
4636
4637 for {
4638 y := v.Args[1]
4639 x := v.Args[0]
4640 v.reset(OpPPC64MULLW)
4641 v.AddArg(x)
4642 v.AddArg(y)
4643 return true
4644 }
4645 }
4646 func rewriteValuePPC64_OpMul32_0(v *Value) bool {
4647
4648
4649
4650 for {
4651 y := v.Args[1]
4652 x := v.Args[0]
4653 v.reset(OpPPC64MULLW)
4654 v.AddArg(x)
4655 v.AddArg(y)
4656 return true
4657 }
4658 }
4659 func rewriteValuePPC64_OpMul32F_0(v *Value) bool {
4660
4661
4662
4663 for {
4664 y := v.Args[1]
4665 x := v.Args[0]
4666 v.reset(OpPPC64FMULS)
4667 v.AddArg(x)
4668 v.AddArg(y)
4669 return true
4670 }
4671 }
4672 func rewriteValuePPC64_OpMul64_0(v *Value) bool {
4673
4674
4675
4676 for {
4677 y := v.Args[1]
4678 x := v.Args[0]
4679 v.reset(OpPPC64MULLD)
4680 v.AddArg(x)
4681 v.AddArg(y)
4682 return true
4683 }
4684 }
4685 func rewriteValuePPC64_OpMul64F_0(v *Value) bool {
4686
4687
4688
4689 for {
4690 y := v.Args[1]
4691 x := v.Args[0]
4692 v.reset(OpPPC64FMUL)
4693 v.AddArg(x)
4694 v.AddArg(y)
4695 return true
4696 }
4697 }
4698 func rewriteValuePPC64_OpMul64uhilo_0(v *Value) bool {
4699
4700
4701
4702 for {
4703 y := v.Args[1]
4704 x := v.Args[0]
4705 v.reset(OpPPC64LoweredMuluhilo)
4706 v.AddArg(x)
4707 v.AddArg(y)
4708 return true
4709 }
4710 }
4711 func rewriteValuePPC64_OpMul8_0(v *Value) bool {
4712
4713
4714
4715 for {
4716 y := v.Args[1]
4717 x := v.Args[0]
4718 v.reset(OpPPC64MULLW)
4719 v.AddArg(x)
4720 v.AddArg(y)
4721 return true
4722 }
4723 }
4724 func rewriteValuePPC64_OpNeg16_0(v *Value) bool {
4725
4726
4727
4728 for {
4729 x := v.Args[0]
4730 v.reset(OpPPC64NEG)
4731 v.AddArg(x)
4732 return true
4733 }
4734 }
4735 func rewriteValuePPC64_OpNeg32_0(v *Value) bool {
4736
4737
4738
4739 for {
4740 x := v.Args[0]
4741 v.reset(OpPPC64NEG)
4742 v.AddArg(x)
4743 return true
4744 }
4745 }
4746 func rewriteValuePPC64_OpNeg32F_0(v *Value) bool {
4747
4748
4749
4750 for {
4751 x := v.Args[0]
4752 v.reset(OpPPC64FNEG)
4753 v.AddArg(x)
4754 return true
4755 }
4756 }
4757 func rewriteValuePPC64_OpNeg64_0(v *Value) bool {
4758
4759
4760
4761 for {
4762 x := v.Args[0]
4763 v.reset(OpPPC64NEG)
4764 v.AddArg(x)
4765 return true
4766 }
4767 }
4768 func rewriteValuePPC64_OpNeg64F_0(v *Value) bool {
4769
4770
4771
4772 for {
4773 x := v.Args[0]
4774 v.reset(OpPPC64FNEG)
4775 v.AddArg(x)
4776 return true
4777 }
4778 }
4779 func rewriteValuePPC64_OpNeg8_0(v *Value) bool {
4780
4781
4782
4783 for {
4784 x := v.Args[0]
4785 v.reset(OpPPC64NEG)
4786 v.AddArg(x)
4787 return true
4788 }
4789 }
4790 func rewriteValuePPC64_OpNeq16_0(v *Value) bool {
4791 b := v.Block
4792 typ := &b.Func.Config.Types
4793
4794
4795
4796 for {
4797 y := v.Args[1]
4798 x := v.Args[0]
4799 if !(isSigned(x.Type) && isSigned(y.Type)) {
4800 break
4801 }
4802 v.reset(OpPPC64NotEqual)
4803 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
4804 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
4805 v1.AddArg(x)
4806 v0.AddArg(v1)
4807 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
4808 v2.AddArg(y)
4809 v0.AddArg(v2)
4810 v.AddArg(v0)
4811 return true
4812 }
4813
4814
4815
4816 for {
4817 y := v.Args[1]
4818 x := v.Args[0]
4819 v.reset(OpPPC64NotEqual)
4820 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
4821 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
4822 v1.AddArg(x)
4823 v0.AddArg(v1)
4824 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
4825 v2.AddArg(y)
4826 v0.AddArg(v2)
4827 v.AddArg(v0)
4828 return true
4829 }
4830 }
4831 func rewriteValuePPC64_OpNeq32_0(v *Value) bool {
4832 b := v.Block
4833
4834
4835
4836 for {
4837 y := v.Args[1]
4838 x := v.Args[0]
4839 v.reset(OpPPC64NotEqual)
4840 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
4841 v0.AddArg(x)
4842 v0.AddArg(y)
4843 v.AddArg(v0)
4844 return true
4845 }
4846 }
4847 func rewriteValuePPC64_OpNeq32F_0(v *Value) bool {
4848 b := v.Block
4849
4850
4851
4852 for {
4853 y := v.Args[1]
4854 x := v.Args[0]
4855 v.reset(OpPPC64NotEqual)
4856 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
4857 v0.AddArg(x)
4858 v0.AddArg(y)
4859 v.AddArg(v0)
4860 return true
4861 }
4862 }
4863 func rewriteValuePPC64_OpNeq64_0(v *Value) bool {
4864 b := v.Block
4865
4866
4867
4868 for {
4869 y := v.Args[1]
4870 x := v.Args[0]
4871 v.reset(OpPPC64NotEqual)
4872 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
4873 v0.AddArg(x)
4874 v0.AddArg(y)
4875 v.AddArg(v0)
4876 return true
4877 }
4878 }
4879 func rewriteValuePPC64_OpNeq64F_0(v *Value) bool {
4880 b := v.Block
4881
4882
4883
4884 for {
4885 y := v.Args[1]
4886 x := v.Args[0]
4887 v.reset(OpPPC64NotEqual)
4888 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags)
4889 v0.AddArg(x)
4890 v0.AddArg(y)
4891 v.AddArg(v0)
4892 return true
4893 }
4894 }
4895 func rewriteValuePPC64_OpNeq8_0(v *Value) bool {
4896 b := v.Block
4897 typ := &b.Func.Config.Types
4898
4899
4900
4901 for {
4902 y := v.Args[1]
4903 x := v.Args[0]
4904 if !(isSigned(x.Type) && isSigned(y.Type)) {
4905 break
4906 }
4907 v.reset(OpPPC64NotEqual)
4908 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
4909 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
4910 v1.AddArg(x)
4911 v0.AddArg(v1)
4912 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
4913 v2.AddArg(y)
4914 v0.AddArg(v2)
4915 v.AddArg(v0)
4916 return true
4917 }
4918
4919
4920
4921 for {
4922 y := v.Args[1]
4923 x := v.Args[0]
4924 v.reset(OpPPC64NotEqual)
4925 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
4926 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
4927 v1.AddArg(x)
4928 v0.AddArg(v1)
4929 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
4930 v2.AddArg(y)
4931 v0.AddArg(v2)
4932 v.AddArg(v0)
4933 return true
4934 }
4935 }
4936 func rewriteValuePPC64_OpNeqB_0(v *Value) bool {
4937
4938
4939
4940 for {
4941 y := v.Args[1]
4942 x := v.Args[0]
4943 v.reset(OpPPC64XOR)
4944 v.AddArg(x)
4945 v.AddArg(y)
4946 return true
4947 }
4948 }
4949 func rewriteValuePPC64_OpNeqPtr_0(v *Value) bool {
4950 b := v.Block
4951
4952
4953
4954 for {
4955 y := v.Args[1]
4956 x := v.Args[0]
4957 v.reset(OpPPC64NotEqual)
4958 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
4959 v0.AddArg(x)
4960 v0.AddArg(y)
4961 v.AddArg(v0)
4962 return true
4963 }
4964 }
4965 func rewriteValuePPC64_OpNilCheck_0(v *Value) bool {
4966
4967
4968
4969 for {
4970 mem := v.Args[1]
4971 ptr := v.Args[0]
4972 v.reset(OpPPC64LoweredNilCheck)
4973 v.AddArg(ptr)
4974 v.AddArg(mem)
4975 return true
4976 }
4977 }
4978 func rewriteValuePPC64_OpNot_0(v *Value) bool {
4979
4980
4981
4982 for {
4983 x := v.Args[0]
4984 v.reset(OpPPC64XORconst)
4985 v.AuxInt = 1
4986 v.AddArg(x)
4987 return true
4988 }
4989 }
4990 func rewriteValuePPC64_OpOffPtr_0(v *Value) bool {
4991 b := v.Block
4992 typ := &b.Func.Config.Types
4993
4994
4995
4996 for {
4997 off := v.AuxInt
4998 ptr := v.Args[0]
4999 v.reset(OpPPC64ADD)
5000 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
5001 v0.AuxInt = off
5002 v.AddArg(v0)
5003 v.AddArg(ptr)
5004 return true
5005 }
5006 }
5007 func rewriteValuePPC64_OpOr16_0(v *Value) bool {
5008
5009
5010
5011 for {
5012 y := v.Args[1]
5013 x := v.Args[0]
5014 v.reset(OpPPC64OR)
5015 v.AddArg(x)
5016 v.AddArg(y)
5017 return true
5018 }
5019 }
5020 func rewriteValuePPC64_OpOr32_0(v *Value) bool {
5021
5022
5023
5024 for {
5025 y := v.Args[1]
5026 x := v.Args[0]
5027 v.reset(OpPPC64OR)
5028 v.AddArg(x)
5029 v.AddArg(y)
5030 return true
5031 }
5032 }
5033 func rewriteValuePPC64_OpOr64_0(v *Value) bool {
5034
5035
5036
5037 for {
5038 y := v.Args[1]
5039 x := v.Args[0]
5040 v.reset(OpPPC64OR)
5041 v.AddArg(x)
5042 v.AddArg(y)
5043 return true
5044 }
5045 }
5046 func rewriteValuePPC64_OpOr8_0(v *Value) bool {
5047
5048
5049
5050 for {
5051 y := v.Args[1]
5052 x := v.Args[0]
5053 v.reset(OpPPC64OR)
5054 v.AddArg(x)
5055 v.AddArg(y)
5056 return true
5057 }
5058 }
5059 func rewriteValuePPC64_OpOrB_0(v *Value) bool {
5060
5061
5062
5063 for {
5064 y := v.Args[1]
5065 x := v.Args[0]
5066 v.reset(OpPPC64OR)
5067 v.AddArg(x)
5068 v.AddArg(y)
5069 return true
5070 }
5071 }
5072 func rewriteValuePPC64_OpPPC64ADD_0(v *Value) bool {
5073 b := v.Block
5074 typ := &b.Func.Config.Types
5075
5076
5077
5078 for {
5079 _ = v.Args[1]
5080 v_0 := v.Args[0]
5081 if v_0.Op != OpPPC64SLDconst {
5082 break
5083 }
5084 c := v_0.AuxInt
5085 x := v_0.Args[0]
5086 v_1 := v.Args[1]
5087 if v_1.Op != OpPPC64SRDconst {
5088 break
5089 }
5090 d := v_1.AuxInt
5091 if x != v_1.Args[0] {
5092 break
5093 }
5094 if !(d == 64-c) {
5095 break
5096 }
5097 v.reset(OpPPC64ROTLconst)
5098 v.AuxInt = c
5099 v.AddArg(x)
5100 return true
5101 }
5102
5103
5104
5105 for {
5106 _ = v.Args[1]
5107 v_0 := v.Args[0]
5108 if v_0.Op != OpPPC64SRDconst {
5109 break
5110 }
5111 d := v_0.AuxInt
5112 x := v_0.Args[0]
5113 v_1 := v.Args[1]
5114 if v_1.Op != OpPPC64SLDconst {
5115 break
5116 }
5117 c := v_1.AuxInt
5118 if x != v_1.Args[0] {
5119 break
5120 }
5121 if !(d == 64-c) {
5122 break
5123 }
5124 v.reset(OpPPC64ROTLconst)
5125 v.AuxInt = c
5126 v.AddArg(x)
5127 return true
5128 }
5129
5130
5131
5132 for {
5133 _ = v.Args[1]
5134 v_0 := v.Args[0]
5135 if v_0.Op != OpPPC64SLWconst {
5136 break
5137 }
5138 c := v_0.AuxInt
5139 x := v_0.Args[0]
5140 v_1 := v.Args[1]
5141 if v_1.Op != OpPPC64SRWconst {
5142 break
5143 }
5144 d := v_1.AuxInt
5145 if x != v_1.Args[0] {
5146 break
5147 }
5148 if !(d == 32-c) {
5149 break
5150 }
5151 v.reset(OpPPC64ROTLWconst)
5152 v.AuxInt = c
5153 v.AddArg(x)
5154 return true
5155 }
5156
5157
5158
5159 for {
5160 _ = v.Args[1]
5161 v_0 := v.Args[0]
5162 if v_0.Op != OpPPC64SRWconst {
5163 break
5164 }
5165 d := v_0.AuxInt
5166 x := v_0.Args[0]
5167 v_1 := v.Args[1]
5168 if v_1.Op != OpPPC64SLWconst {
5169 break
5170 }
5171 c := v_1.AuxInt
5172 if x != v_1.Args[0] {
5173 break
5174 }
5175 if !(d == 32-c) {
5176 break
5177 }
5178 v.reset(OpPPC64ROTLWconst)
5179 v.AuxInt = c
5180 v.AddArg(x)
5181 return true
5182 }
5183
5184
5185
5186 for {
5187 _ = v.Args[1]
5188 v_0 := v.Args[0]
5189 if v_0.Op != OpPPC64SLD {
5190 break
5191 }
5192 _ = v_0.Args[1]
5193 x := v_0.Args[0]
5194 v_0_1 := v_0.Args[1]
5195 if v_0_1.Op != OpPPC64ANDconst {
5196 break
5197 }
5198 if v_0_1.Type != typ.Int64 {
5199 break
5200 }
5201 if v_0_1.AuxInt != 63 {
5202 break
5203 }
5204 y := v_0_1.Args[0]
5205 v_1 := v.Args[1]
5206 if v_1.Op != OpPPC64SRD {
5207 break
5208 }
5209 _ = v_1.Args[1]
5210 if x != v_1.Args[0] {
5211 break
5212 }
5213 v_1_1 := v_1.Args[1]
5214 if v_1_1.Op != OpPPC64SUB {
5215 break
5216 }
5217 if v_1_1.Type != typ.UInt {
5218 break
5219 }
5220 _ = v_1_1.Args[1]
5221 v_1_1_0 := v_1_1.Args[0]
5222 if v_1_1_0.Op != OpPPC64MOVDconst {
5223 break
5224 }
5225 if v_1_1_0.AuxInt != 64 {
5226 break
5227 }
5228 v_1_1_1 := v_1_1.Args[1]
5229 if v_1_1_1.Op != OpPPC64ANDconst {
5230 break
5231 }
5232 if v_1_1_1.Type != typ.UInt {
5233 break
5234 }
5235 if v_1_1_1.AuxInt != 63 {
5236 break
5237 }
5238 if y != v_1_1_1.Args[0] {
5239 break
5240 }
5241 v.reset(OpPPC64ROTL)
5242 v.AddArg(x)
5243 v.AddArg(y)
5244 return true
5245 }
5246
5247
5248
5249 for {
5250 _ = v.Args[1]
5251 v_0 := v.Args[0]
5252 if v_0.Op != OpPPC64SRD {
5253 break
5254 }
5255 _ = v_0.Args[1]
5256 x := v_0.Args[0]
5257 v_0_1 := v_0.Args[1]
5258 if v_0_1.Op != OpPPC64SUB {
5259 break
5260 }
5261 if v_0_1.Type != typ.UInt {
5262 break
5263 }
5264 _ = v_0_1.Args[1]
5265 v_0_1_0 := v_0_1.Args[0]
5266 if v_0_1_0.Op != OpPPC64MOVDconst {
5267 break
5268 }
5269 if v_0_1_0.AuxInt != 64 {
5270 break
5271 }
5272 v_0_1_1 := v_0_1.Args[1]
5273 if v_0_1_1.Op != OpPPC64ANDconst {
5274 break
5275 }
5276 if v_0_1_1.Type != typ.UInt {
5277 break
5278 }
5279 if v_0_1_1.AuxInt != 63 {
5280 break
5281 }
5282 y := v_0_1_1.Args[0]
5283 v_1 := v.Args[1]
5284 if v_1.Op != OpPPC64SLD {
5285 break
5286 }
5287 _ = v_1.Args[1]
5288 if x != v_1.Args[0] {
5289 break
5290 }
5291 v_1_1 := v_1.Args[1]
5292 if v_1_1.Op != OpPPC64ANDconst {
5293 break
5294 }
5295 if v_1_1.Type != typ.Int64 {
5296 break
5297 }
5298 if v_1_1.AuxInt != 63 {
5299 break
5300 }
5301 if y != v_1_1.Args[0] {
5302 break
5303 }
5304 v.reset(OpPPC64ROTL)
5305 v.AddArg(x)
5306 v.AddArg(y)
5307 return true
5308 }
5309
5310
5311
5312 for {
5313 _ = v.Args[1]
5314 v_0 := v.Args[0]
5315 if v_0.Op != OpPPC64SLW {
5316 break
5317 }
5318 _ = v_0.Args[1]
5319 x := v_0.Args[0]
5320 v_0_1 := v_0.Args[1]
5321 if v_0_1.Op != OpPPC64ANDconst {
5322 break
5323 }
5324 if v_0_1.Type != typ.Int32 {
5325 break
5326 }
5327 if v_0_1.AuxInt != 31 {
5328 break
5329 }
5330 y := v_0_1.Args[0]
5331 v_1 := v.Args[1]
5332 if v_1.Op != OpPPC64SRW {
5333 break
5334 }
5335 _ = v_1.Args[1]
5336 if x != v_1.Args[0] {
5337 break
5338 }
5339 v_1_1 := v_1.Args[1]
5340 if v_1_1.Op != OpPPC64SUB {
5341 break
5342 }
5343 if v_1_1.Type != typ.UInt {
5344 break
5345 }
5346 _ = v_1_1.Args[1]
5347 v_1_1_0 := v_1_1.Args[0]
5348 if v_1_1_0.Op != OpPPC64MOVDconst {
5349 break
5350 }
5351 if v_1_1_0.AuxInt != 32 {
5352 break
5353 }
5354 v_1_1_1 := v_1_1.Args[1]
5355 if v_1_1_1.Op != OpPPC64ANDconst {
5356 break
5357 }
5358 if v_1_1_1.Type != typ.UInt {
5359 break
5360 }
5361 if v_1_1_1.AuxInt != 31 {
5362 break
5363 }
5364 if y != v_1_1_1.Args[0] {
5365 break
5366 }
5367 v.reset(OpPPC64ROTLW)
5368 v.AddArg(x)
5369 v.AddArg(y)
5370 return true
5371 }
5372
5373
5374
5375 for {
5376 _ = v.Args[1]
5377 v_0 := v.Args[0]
5378 if v_0.Op != OpPPC64SRW {
5379 break
5380 }
5381 _ = v_0.Args[1]
5382 x := v_0.Args[0]
5383 v_0_1 := v_0.Args[1]
5384 if v_0_1.Op != OpPPC64SUB {
5385 break
5386 }
5387 if v_0_1.Type != typ.UInt {
5388 break
5389 }
5390 _ = v_0_1.Args[1]
5391 v_0_1_0 := v_0_1.Args[0]
5392 if v_0_1_0.Op != OpPPC64MOVDconst {
5393 break
5394 }
5395 if v_0_1_0.AuxInt != 32 {
5396 break
5397 }
5398 v_0_1_1 := v_0_1.Args[1]
5399 if v_0_1_1.Op != OpPPC64ANDconst {
5400 break
5401 }
5402 if v_0_1_1.Type != typ.UInt {
5403 break
5404 }
5405 if v_0_1_1.AuxInt != 31 {
5406 break
5407 }
5408 y := v_0_1_1.Args[0]
5409 v_1 := v.Args[1]
5410 if v_1.Op != OpPPC64SLW {
5411 break
5412 }
5413 _ = v_1.Args[1]
5414 if x != v_1.Args[0] {
5415 break
5416 }
5417 v_1_1 := v_1.Args[1]
5418 if v_1_1.Op != OpPPC64ANDconst {
5419 break
5420 }
5421 if v_1_1.Type != typ.Int32 {
5422 break
5423 }
5424 if v_1_1.AuxInt != 31 {
5425 break
5426 }
5427 if y != v_1_1.Args[0] {
5428 break
5429 }
5430 v.reset(OpPPC64ROTLW)
5431 v.AddArg(x)
5432 v.AddArg(y)
5433 return true
5434 }
5435
5436
5437
5438 for {
5439 _ = v.Args[1]
5440 x := v.Args[0]
5441 v_1 := v.Args[1]
5442 if v_1.Op != OpPPC64MOVDconst {
5443 break
5444 }
5445 c := v_1.AuxInt
5446 if !(is32Bit(c)) {
5447 break
5448 }
5449 v.reset(OpPPC64ADDconst)
5450 v.AuxInt = c
5451 v.AddArg(x)
5452 return true
5453 }
5454
5455
5456
5457 for {
5458 x := v.Args[1]
5459 v_0 := v.Args[0]
5460 if v_0.Op != OpPPC64MOVDconst {
5461 break
5462 }
5463 c := v_0.AuxInt
5464 if !(is32Bit(c)) {
5465 break
5466 }
5467 v.reset(OpPPC64ADDconst)
5468 v.AuxInt = c
5469 v.AddArg(x)
5470 return true
5471 }
5472 return false
5473 }
5474 func rewriteValuePPC64_OpPPC64ADDconst_0(v *Value) bool {
5475
5476
5477
5478 for {
5479 c := v.AuxInt
5480 v_0 := v.Args[0]
5481 if v_0.Op != OpPPC64ADDconst {
5482 break
5483 }
5484 d := v_0.AuxInt
5485 x := v_0.Args[0]
5486 if !(is32Bit(c + d)) {
5487 break
5488 }
5489 v.reset(OpPPC64ADDconst)
5490 v.AuxInt = c + d
5491 v.AddArg(x)
5492 return true
5493 }
5494
5495
5496
5497 for {
5498 if v.AuxInt != 0 {
5499 break
5500 }
5501 x := v.Args[0]
5502 v.reset(OpCopy)
5503 v.Type = x.Type
5504 v.AddArg(x)
5505 return true
5506 }
5507
5508
5509
5510 for {
5511 c := v.AuxInt
5512 v_0 := v.Args[0]
5513 if v_0.Op != OpPPC64MOVDaddr {
5514 break
5515 }
5516 d := v_0.AuxInt
5517 sym := v_0.Aux
5518 x := v_0.Args[0]
5519 v.reset(OpPPC64MOVDaddr)
5520 v.AuxInt = c + d
5521 v.Aux = sym
5522 v.AddArg(x)
5523 return true
5524 }
5525 return false
5526 }
5527 func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool {
5528
5529
5530
5531 for {
5532 _ = v.Args[1]
5533 x := v.Args[0]
5534 v_1 := v.Args[1]
5535 if v_1.Op != OpPPC64NOR {
5536 break
5537 }
5538 y := v_1.Args[1]
5539 if y != v_1.Args[0] {
5540 break
5541 }
5542 v.reset(OpPPC64ANDN)
5543 v.AddArg(x)
5544 v.AddArg(y)
5545 return true
5546 }
5547
5548
5549
5550 for {
5551 x := v.Args[1]
5552 v_0 := v.Args[0]
5553 if v_0.Op != OpPPC64NOR {
5554 break
5555 }
5556 y := v_0.Args[1]
5557 if y != v_0.Args[0] {
5558 break
5559 }
5560 v.reset(OpPPC64ANDN)
5561 v.AddArg(x)
5562 v.AddArg(y)
5563 return true
5564 }
5565
5566
5567
5568 for {
5569 _ = v.Args[1]
5570 v_0 := v.Args[0]
5571 if v_0.Op != OpPPC64MOVDconst {
5572 break
5573 }
5574 c := v_0.AuxInt
5575 v_1 := v.Args[1]
5576 if v_1.Op != OpPPC64MOVDconst {
5577 break
5578 }
5579 d := v_1.AuxInt
5580 v.reset(OpPPC64MOVDconst)
5581 v.AuxInt = c & d
5582 return true
5583 }
5584
5585
5586
5587 for {
5588 _ = v.Args[1]
5589 v_0 := v.Args[0]
5590 if v_0.Op != OpPPC64MOVDconst {
5591 break
5592 }
5593 d := v_0.AuxInt
5594 v_1 := v.Args[1]
5595 if v_1.Op != OpPPC64MOVDconst {
5596 break
5597 }
5598 c := v_1.AuxInt
5599 v.reset(OpPPC64MOVDconst)
5600 v.AuxInt = c & d
5601 return true
5602 }
5603
5604
5605
5606 for {
5607 _ = v.Args[1]
5608 x := v.Args[0]
5609 v_1 := v.Args[1]
5610 if v_1.Op != OpPPC64MOVDconst {
5611 break
5612 }
5613 c := v_1.AuxInt
5614 if !(isU16Bit(c)) {
5615 break
5616 }
5617 v.reset(OpPPC64ANDconst)
5618 v.AuxInt = c
5619 v.AddArg(x)
5620 return true
5621 }
5622
5623
5624
5625 for {
5626 x := v.Args[1]
5627 v_0 := v.Args[0]
5628 if v_0.Op != OpPPC64MOVDconst {
5629 break
5630 }
5631 c := v_0.AuxInt
5632 if !(isU16Bit(c)) {
5633 break
5634 }
5635 v.reset(OpPPC64ANDconst)
5636 v.AuxInt = c
5637 v.AddArg(x)
5638 return true
5639 }
5640
5641
5642
5643 for {
5644 _ = v.Args[1]
5645 v_0 := v.Args[0]
5646 if v_0.Op != OpPPC64MOVDconst {
5647 break
5648 }
5649 c := v_0.AuxInt
5650 y := v.Args[1]
5651 if y.Op != OpPPC64MOVWZreg {
5652 break
5653 }
5654 if !(c&0xFFFFFFFF == 0xFFFFFFFF) {
5655 break
5656 }
5657 v.reset(OpCopy)
5658 v.Type = y.Type
5659 v.AddArg(y)
5660 return true
5661 }
5662
5663
5664
5665 for {
5666 _ = v.Args[1]
5667 y := v.Args[0]
5668 if y.Op != OpPPC64MOVWZreg {
5669 break
5670 }
5671 v_1 := v.Args[1]
5672 if v_1.Op != OpPPC64MOVDconst {
5673 break
5674 }
5675 c := v_1.AuxInt
5676 if !(c&0xFFFFFFFF == 0xFFFFFFFF) {
5677 break
5678 }
5679 v.reset(OpCopy)
5680 v.Type = y.Type
5681 v.AddArg(y)
5682 return true
5683 }
5684
5685
5686
5687 for {
5688 _ = v.Args[1]
5689 v_0 := v.Args[0]
5690 if v_0.Op != OpPPC64MOVDconst {
5691 break
5692 }
5693 if v_0.AuxInt != 0xFFFFFFFF {
5694 break
5695 }
5696 y := v.Args[1]
5697 if y.Op != OpPPC64MOVWreg {
5698 break
5699 }
5700 x := y.Args[0]
5701 v.reset(OpPPC64MOVWZreg)
5702 v.AddArg(x)
5703 return true
5704 }
5705
5706
5707
5708 for {
5709 _ = v.Args[1]
5710 y := v.Args[0]
5711 if y.Op != OpPPC64MOVWreg {
5712 break
5713 }
5714 x := y.Args[0]
5715 v_1 := v.Args[1]
5716 if v_1.Op != OpPPC64MOVDconst {
5717 break
5718 }
5719 if v_1.AuxInt != 0xFFFFFFFF {
5720 break
5721 }
5722 v.reset(OpPPC64MOVWZreg)
5723 v.AddArg(x)
5724 return true
5725 }
5726 return false
5727 }
5728 func rewriteValuePPC64_OpPPC64AND_10(v *Value) bool {
5729
5730
5731
5732 for {
5733 _ = v.Args[1]
5734 v_0 := v.Args[0]
5735 if v_0.Op != OpPPC64MOVDconst {
5736 break
5737 }
5738 c := v_0.AuxInt
5739 x := v.Args[1]
5740 if x.Op != OpPPC64MOVBZload {
5741 break
5742 }
5743 _ = x.Args[1]
5744 v.reset(OpPPC64ANDconst)
5745 v.AuxInt = c & 0xFF
5746 v.AddArg(x)
5747 return true
5748 }
5749
5750
5751
5752 for {
5753 _ = v.Args[1]
5754 x := v.Args[0]
5755 if x.Op != OpPPC64MOVBZload {
5756 break
5757 }
5758 _ = x.Args[1]
5759 v_1 := v.Args[1]
5760 if v_1.Op != OpPPC64MOVDconst {
5761 break
5762 }
5763 c := v_1.AuxInt
5764 v.reset(OpPPC64ANDconst)
5765 v.AuxInt = c & 0xFF
5766 v.AddArg(x)
5767 return true
5768 }
5769
5770
5771
5772 for {
5773 _ = v.Args[1]
5774 x := v.Args[0]
5775 if x.Op != OpPPC64MOVBZload {
5776 break
5777 }
5778 _ = x.Args[1]
5779 v_1 := v.Args[1]
5780 if v_1.Op != OpPPC64MOVDconst {
5781 break
5782 }
5783 c := v_1.AuxInt
5784 v.reset(OpPPC64ANDconst)
5785 v.AuxInt = c & 0xFF
5786 v.AddArg(x)
5787 return true
5788 }
5789
5790
5791
5792 for {
5793 _ = v.Args[1]
5794 v_0 := v.Args[0]
5795 if v_0.Op != OpPPC64MOVDconst {
5796 break
5797 }
5798 c := v_0.AuxInt
5799 x := v.Args[1]
5800 if x.Op != OpPPC64MOVBZload {
5801 break
5802 }
5803 _ = x.Args[1]
5804 v.reset(OpPPC64ANDconst)
5805 v.AuxInt = c & 0xFF
5806 v.AddArg(x)
5807 return true
5808 }
5809 return false
5810 }
5811 func rewriteValuePPC64_OpPPC64ANDconst_0(v *Value) bool {
5812
5813
5814
5815 for {
5816 c := v.AuxInt
5817 v_0 := v.Args[0]
5818 if v_0.Op != OpPPC64ANDconst {
5819 break
5820 }
5821 d := v_0.AuxInt
5822 x := v_0.Args[0]
5823 v.reset(OpPPC64ANDconst)
5824 v.AuxInt = c & d
5825 v.AddArg(x)
5826 return true
5827 }
5828
5829
5830
5831 for {
5832 if v.AuxInt != -1 {
5833 break
5834 }
5835 x := v.Args[0]
5836 v.reset(OpCopy)
5837 v.Type = x.Type
5838 v.AddArg(x)
5839 return true
5840 }
5841
5842
5843
5844 for {
5845 if v.AuxInt != 0 {
5846 break
5847 }
5848 v.reset(OpPPC64MOVDconst)
5849 v.AuxInt = 0
5850 return true
5851 }
5852
5853
5854
5855 for {
5856 c := v.AuxInt
5857 y := v.Args[0]
5858 if y.Op != OpPPC64MOVBZreg {
5859 break
5860 }
5861 if !(c&0xFF == 0xFF) {
5862 break
5863 }
5864 v.reset(OpCopy)
5865 v.Type = y.Type
5866 v.AddArg(y)
5867 return true
5868 }
5869
5870
5871
5872 for {
5873 if v.AuxInt != 0xFF {
5874 break
5875 }
5876 y := v.Args[0]
5877 if y.Op != OpPPC64MOVBreg {
5878 break
5879 }
5880 v.reset(OpCopy)
5881 v.Type = y.Type
5882 v.AddArg(y)
5883 return true
5884 }
5885
5886
5887
5888 for {
5889 c := v.AuxInt
5890 y := v.Args[0]
5891 if y.Op != OpPPC64MOVHZreg {
5892 break
5893 }
5894 if !(c&0xFFFF == 0xFFFF) {
5895 break
5896 }
5897 v.reset(OpCopy)
5898 v.Type = y.Type
5899 v.AddArg(y)
5900 return true
5901 }
5902
5903
5904
5905 for {
5906 if v.AuxInt != 0xFFFF {
5907 break
5908 }
5909 y := v.Args[0]
5910 if y.Op != OpPPC64MOVHreg {
5911 break
5912 }
5913 v.reset(OpCopy)
5914 v.Type = y.Type
5915 v.AddArg(y)
5916 return true
5917 }
5918
5919
5920
5921 for {
5922 c := v.AuxInt
5923 v_0 := v.Args[0]
5924 if v_0.Op != OpPPC64MOVBreg {
5925 break
5926 }
5927 x := v_0.Args[0]
5928 v.reset(OpPPC64ANDconst)
5929 v.AuxInt = c & 0xFF
5930 v.AddArg(x)
5931 return true
5932 }
5933
5934
5935
5936 for {
5937 c := v.AuxInt
5938 v_0 := v.Args[0]
5939 if v_0.Op != OpPPC64MOVBZreg {
5940 break
5941 }
5942 x := v_0.Args[0]
5943 v.reset(OpPPC64ANDconst)
5944 v.AuxInt = c & 0xFF
5945 v.AddArg(x)
5946 return true
5947 }
5948
5949
5950
5951 for {
5952 c := v.AuxInt
5953 v_0 := v.Args[0]
5954 if v_0.Op != OpPPC64MOVHreg {
5955 break
5956 }
5957 x := v_0.Args[0]
5958 v.reset(OpPPC64ANDconst)
5959 v.AuxInt = c & 0xFFFF
5960 v.AddArg(x)
5961 return true
5962 }
5963 return false
5964 }
5965 func rewriteValuePPC64_OpPPC64ANDconst_10(v *Value) bool {
5966
5967
5968
5969 for {
5970 c := v.AuxInt
5971 v_0 := v.Args[0]
5972 if v_0.Op != OpPPC64MOVHZreg {
5973 break
5974 }
5975 x := v_0.Args[0]
5976 v.reset(OpPPC64ANDconst)
5977 v.AuxInt = c & 0xFFFF
5978 v.AddArg(x)
5979 return true
5980 }
5981
5982
5983
5984 for {
5985 c := v.AuxInt
5986 v_0 := v.Args[0]
5987 if v_0.Op != OpPPC64MOVWreg {
5988 break
5989 }
5990 x := v_0.Args[0]
5991 v.reset(OpPPC64ANDconst)
5992 v.AuxInt = c & 0xFFFFFFFF
5993 v.AddArg(x)
5994 return true
5995 }
5996
5997
5998
5999 for {
6000 c := v.AuxInt
6001 v_0 := v.Args[0]
6002 if v_0.Op != OpPPC64MOVWZreg {
6003 break
6004 }
6005 x := v_0.Args[0]
6006 v.reset(OpPPC64ANDconst)
6007 v.AuxInt = c & 0xFFFFFFFF
6008 v.AddArg(x)
6009 return true
6010 }
6011 return false
6012 }
6013 func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool {
6014 b := v.Block
6015
6016
6017
6018 for {
6019 _ = v.Args[1]
6020 x := v.Args[0]
6021 v_1 := v.Args[1]
6022 if v_1.Op != OpPPC64MOVDconst {
6023 break
6024 }
6025 c := v_1.AuxInt
6026 if !(is16Bit(c)) {
6027 break
6028 }
6029 v.reset(OpPPC64CMPconst)
6030 v.AuxInt = c
6031 v.AddArg(x)
6032 return true
6033 }
6034
6035
6036
6037 for {
6038 y := v.Args[1]
6039 v_0 := v.Args[0]
6040 if v_0.Op != OpPPC64MOVDconst {
6041 break
6042 }
6043 c := v_0.AuxInt
6044 if !(is16Bit(c)) {
6045 break
6046 }
6047 v.reset(OpPPC64InvertFlags)
6048 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags)
6049 v0.AuxInt = c
6050 v0.AddArg(y)
6051 v.AddArg(v0)
6052 return true
6053 }
6054 return false
6055 }
6056 func rewriteValuePPC64_OpPPC64CMPU_0(v *Value) bool {
6057 b := v.Block
6058
6059
6060
6061 for {
6062 _ = v.Args[1]
6063 x := v.Args[0]
6064 v_1 := v.Args[1]
6065 if v_1.Op != OpPPC64MOVDconst {
6066 break
6067 }
6068 c := v_1.AuxInt
6069 if !(isU16Bit(c)) {
6070 break
6071 }
6072 v.reset(OpPPC64CMPUconst)
6073 v.AuxInt = c
6074 v.AddArg(x)
6075 return true
6076 }
6077
6078
6079
6080 for {
6081 y := v.Args[1]
6082 v_0 := v.Args[0]
6083 if v_0.Op != OpPPC64MOVDconst {
6084 break
6085 }
6086 c := v_0.AuxInt
6087 if !(isU16Bit(c)) {
6088 break
6089 }
6090 v.reset(OpPPC64InvertFlags)
6091 v0 := b.NewValue0(v.Pos, OpPPC64CMPUconst, types.TypeFlags)
6092 v0.AuxInt = c
6093 v0.AddArg(y)
6094 v.AddArg(v0)
6095 return true
6096 }
6097 return false
6098 }
6099 func rewriteValuePPC64_OpPPC64CMPUconst_0(v *Value) bool {
6100
6101
6102
6103 for {
6104 y := v.AuxInt
6105 v_0 := v.Args[0]
6106 if v_0.Op != OpPPC64MOVDconst {
6107 break
6108 }
6109 x := v_0.AuxInt
6110 if !(x == y) {
6111 break
6112 }
6113 v.reset(OpPPC64FlagEQ)
6114 return true
6115 }
6116
6117
6118
6119 for {
6120 y := v.AuxInt
6121 v_0 := v.Args[0]
6122 if v_0.Op != OpPPC64MOVDconst {
6123 break
6124 }
6125 x := v_0.AuxInt
6126 if !(uint64(x) < uint64(y)) {
6127 break
6128 }
6129 v.reset(OpPPC64FlagLT)
6130 return true
6131 }
6132
6133
6134
6135 for {
6136 y := v.AuxInt
6137 v_0 := v.Args[0]
6138 if v_0.Op != OpPPC64MOVDconst {
6139 break
6140 }
6141 x := v_0.AuxInt
6142 if !(uint64(x) > uint64(y)) {
6143 break
6144 }
6145 v.reset(OpPPC64FlagGT)
6146 return true
6147 }
6148 return false
6149 }
6150 func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool {
6151 b := v.Block
6152
6153
6154
6155 for {
6156 _ = v.Args[1]
6157 x := v.Args[0]
6158 v_1 := v.Args[1]
6159 if v_1.Op != OpPPC64MOVWreg {
6160 break
6161 }
6162 y := v_1.Args[0]
6163 v.reset(OpPPC64CMPW)
6164 v.AddArg(x)
6165 v.AddArg(y)
6166 return true
6167 }
6168
6169
6170
6171 for {
6172 y := v.Args[1]
6173 v_0 := v.Args[0]
6174 if v_0.Op != OpPPC64MOVWreg {
6175 break
6176 }
6177 x := v_0.Args[0]
6178 v.reset(OpPPC64CMPW)
6179 v.AddArg(x)
6180 v.AddArg(y)
6181 return true
6182 }
6183
6184
6185
6186 for {
6187 _ = v.Args[1]
6188 x := v.Args[0]
6189 v_1 := v.Args[1]
6190 if v_1.Op != OpPPC64MOVDconst {
6191 break
6192 }
6193 c := v_1.AuxInt
6194 if !(is16Bit(c)) {
6195 break
6196 }
6197 v.reset(OpPPC64CMPWconst)
6198 v.AuxInt = c
6199 v.AddArg(x)
6200 return true
6201 }
6202
6203
6204
6205 for {
6206 y := v.Args[1]
6207 v_0 := v.Args[0]
6208 if v_0.Op != OpPPC64MOVDconst {
6209 break
6210 }
6211 c := v_0.AuxInt
6212 if !(is16Bit(c)) {
6213 break
6214 }
6215 v.reset(OpPPC64InvertFlags)
6216 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags)
6217 v0.AuxInt = c
6218 v0.AddArg(y)
6219 v.AddArg(v0)
6220 return true
6221 }
6222 return false
6223 }
6224 func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool {
6225 b := v.Block
6226
6227
6228
6229 for {
6230 _ = v.Args[1]
6231 x := v.Args[0]
6232 v_1 := v.Args[1]
6233 if v_1.Op != OpPPC64MOVWZreg {
6234 break
6235 }
6236 y := v_1.Args[0]
6237 v.reset(OpPPC64CMPWU)
6238 v.AddArg(x)
6239 v.AddArg(y)
6240 return true
6241 }
6242
6243
6244
6245 for {
6246 y := v.Args[1]
6247 v_0 := v.Args[0]
6248 if v_0.Op != OpPPC64MOVWZreg {
6249 break
6250 }
6251 x := v_0.Args[0]
6252 v.reset(OpPPC64CMPWU)
6253 v.AddArg(x)
6254 v.AddArg(y)
6255 return true
6256 }
6257
6258
6259
6260 for {
6261 _ = v.Args[1]
6262 x := v.Args[0]
6263 v_1 := v.Args[1]
6264 if v_1.Op != OpPPC64MOVDconst {
6265 break
6266 }
6267 c := v_1.AuxInt
6268 if !(isU16Bit(c)) {
6269 break
6270 }
6271 v.reset(OpPPC64CMPWUconst)
6272 v.AuxInt = c
6273 v.AddArg(x)
6274 return true
6275 }
6276
6277
6278
6279 for {
6280 y := v.Args[1]
6281 v_0 := v.Args[0]
6282 if v_0.Op != OpPPC64MOVDconst {
6283 break
6284 }
6285 c := v_0.AuxInt
6286 if !(isU16Bit(c)) {
6287 break
6288 }
6289 v.reset(OpPPC64InvertFlags)
6290 v0 := b.NewValue0(v.Pos, OpPPC64CMPWUconst, types.TypeFlags)
6291 v0.AuxInt = c
6292 v0.AddArg(y)
6293 v.AddArg(v0)
6294 return true
6295 }
6296 return false
6297 }
6298 func rewriteValuePPC64_OpPPC64CMPWUconst_0(v *Value) bool {
6299
6300
6301
6302 for {
6303 y := v.AuxInt
6304 v_0 := v.Args[0]
6305 if v_0.Op != OpPPC64MOVDconst {
6306 break
6307 }
6308 x := v_0.AuxInt
6309 if !(int32(x) == int32(y)) {
6310 break
6311 }
6312 v.reset(OpPPC64FlagEQ)
6313 return true
6314 }
6315
6316
6317
6318 for {
6319 y := v.AuxInt
6320 v_0 := v.Args[0]
6321 if v_0.Op != OpPPC64MOVDconst {
6322 break
6323 }
6324 x := v_0.AuxInt
6325 if !(uint32(x) < uint32(y)) {
6326 break
6327 }
6328 v.reset(OpPPC64FlagLT)
6329 return true
6330 }
6331
6332
6333
6334 for {
6335 y := v.AuxInt
6336 v_0 := v.Args[0]
6337 if v_0.Op != OpPPC64MOVDconst {
6338 break
6339 }
6340 x := v_0.AuxInt
6341 if !(uint32(x) > uint32(y)) {
6342 break
6343 }
6344 v.reset(OpPPC64FlagGT)
6345 return true
6346 }
6347 return false
6348 }
6349 func rewriteValuePPC64_OpPPC64CMPWconst_0(v *Value) bool {
6350
6351
6352
6353 for {
6354 y := v.AuxInt
6355 v_0 := v.Args[0]
6356 if v_0.Op != OpPPC64MOVDconst {
6357 break
6358 }
6359 x := v_0.AuxInt
6360 if !(int32(x) == int32(y)) {
6361 break
6362 }
6363 v.reset(OpPPC64FlagEQ)
6364 return true
6365 }
6366
6367
6368
6369 for {
6370 y := v.AuxInt
6371 v_0 := v.Args[0]
6372 if v_0.Op != OpPPC64MOVDconst {
6373 break
6374 }
6375 x := v_0.AuxInt
6376 if !(int32(x) < int32(y)) {
6377 break
6378 }
6379 v.reset(OpPPC64FlagLT)
6380 return true
6381 }
6382
6383
6384
6385 for {
6386 y := v.AuxInt
6387 v_0 := v.Args[0]
6388 if v_0.Op != OpPPC64MOVDconst {
6389 break
6390 }
6391 x := v_0.AuxInt
6392 if !(int32(x) > int32(y)) {
6393 break
6394 }
6395 v.reset(OpPPC64FlagGT)
6396 return true
6397 }
6398 return false
6399 }
6400 func rewriteValuePPC64_OpPPC64CMPconst_0(v *Value) bool {
6401
6402
6403
6404 for {
6405 y := v.AuxInt
6406 v_0 := v.Args[0]
6407 if v_0.Op != OpPPC64MOVDconst {
6408 break
6409 }
6410 x := v_0.AuxInt
6411 if !(x == y) {
6412 break
6413 }
6414 v.reset(OpPPC64FlagEQ)
6415 return true
6416 }
6417
6418
6419
6420 for {
6421 y := v.AuxInt
6422 v_0 := v.Args[0]
6423 if v_0.Op != OpPPC64MOVDconst {
6424 break
6425 }
6426 x := v_0.AuxInt
6427 if !(x < y) {
6428 break
6429 }
6430 v.reset(OpPPC64FlagLT)
6431 return true
6432 }
6433
6434
6435
6436 for {
6437 y := v.AuxInt
6438 v_0 := v.Args[0]
6439 if v_0.Op != OpPPC64MOVDconst {
6440 break
6441 }
6442 x := v_0.AuxInt
6443 if !(x > y) {
6444 break
6445 }
6446 v.reset(OpPPC64FlagGT)
6447 return true
6448 }
6449 return false
6450 }
6451 func rewriteValuePPC64_OpPPC64Equal_0(v *Value) bool {
6452
6453
6454
6455 for {
6456 v_0 := v.Args[0]
6457 if v_0.Op != OpPPC64FlagEQ {
6458 break
6459 }
6460 v.reset(OpPPC64MOVDconst)
6461 v.AuxInt = 1
6462 return true
6463 }
6464
6465
6466
6467 for {
6468 v_0 := v.Args[0]
6469 if v_0.Op != OpPPC64FlagLT {
6470 break
6471 }
6472 v.reset(OpPPC64MOVDconst)
6473 v.AuxInt = 0
6474 return true
6475 }
6476
6477
6478
6479 for {
6480 v_0 := v.Args[0]
6481 if v_0.Op != OpPPC64FlagGT {
6482 break
6483 }
6484 v.reset(OpPPC64MOVDconst)
6485 v.AuxInt = 0
6486 return true
6487 }
6488
6489
6490
6491 for {
6492 v_0 := v.Args[0]
6493 if v_0.Op != OpPPC64InvertFlags {
6494 break
6495 }
6496 x := v_0.Args[0]
6497 v.reset(OpPPC64Equal)
6498 v.AddArg(x)
6499 return true
6500 }
6501 return false
6502 }
6503 func rewriteValuePPC64_OpPPC64FABS_0(v *Value) bool {
6504
6505
6506
6507 for {
6508 v_0 := v.Args[0]
6509 if v_0.Op != OpPPC64FMOVDconst {
6510 break
6511 }
6512 x := v_0.AuxInt
6513 v.reset(OpPPC64FMOVDconst)
6514 v.AuxInt = auxFrom64F(math.Abs(auxTo64F(x)))
6515 return true
6516 }
6517 return false
6518 }
6519 func rewriteValuePPC64_OpPPC64FADD_0(v *Value) bool {
6520
6521
6522
6523 for {
6524 z := v.Args[1]
6525 v_0 := v.Args[0]
6526 if v_0.Op != OpPPC64FMUL {
6527 break
6528 }
6529 y := v_0.Args[1]
6530 x := v_0.Args[0]
6531 v.reset(OpPPC64FMADD)
6532 v.AddArg(x)
6533 v.AddArg(y)
6534 v.AddArg(z)
6535 return true
6536 }
6537
6538
6539
6540 for {
6541 _ = v.Args[1]
6542 z := v.Args[0]
6543 v_1 := v.Args[1]
6544 if v_1.Op != OpPPC64FMUL {
6545 break
6546 }
6547 y := v_1.Args[1]
6548 x := v_1.Args[0]
6549 v.reset(OpPPC64FMADD)
6550 v.AddArg(x)
6551 v.AddArg(y)
6552 v.AddArg(z)
6553 return true
6554 }
6555 return false
6556 }
6557 func rewriteValuePPC64_OpPPC64FADDS_0(v *Value) bool {
6558
6559
6560
6561 for {
6562 z := v.Args[1]
6563 v_0 := v.Args[0]
6564 if v_0.Op != OpPPC64FMULS {
6565 break
6566 }
6567 y := v_0.Args[1]
6568 x := v_0.Args[0]
6569 v.reset(OpPPC64FMADDS)
6570 v.AddArg(x)
6571 v.AddArg(y)
6572 v.AddArg(z)
6573 return true
6574 }
6575
6576
6577
6578 for {
6579 _ = v.Args[1]
6580 z := v.Args[0]
6581 v_1 := v.Args[1]
6582 if v_1.Op != OpPPC64FMULS {
6583 break
6584 }
6585 y := v_1.Args[1]
6586 x := v_1.Args[0]
6587 v.reset(OpPPC64FMADDS)
6588 v.AddArg(x)
6589 v.AddArg(y)
6590 v.AddArg(z)
6591 return true
6592 }
6593 return false
6594 }
6595 func rewriteValuePPC64_OpPPC64FCEIL_0(v *Value) bool {
6596
6597
6598
6599 for {
6600 v_0 := v.Args[0]
6601 if v_0.Op != OpPPC64FMOVDconst {
6602 break
6603 }
6604 x := v_0.AuxInt
6605 v.reset(OpPPC64FMOVDconst)
6606 v.AuxInt = auxFrom64F(math.Ceil(auxTo64F(x)))
6607 return true
6608 }
6609 return false
6610 }
6611 func rewriteValuePPC64_OpPPC64FFLOOR_0(v *Value) bool {
6612
6613
6614
6615 for {
6616 v_0 := v.Args[0]
6617 if v_0.Op != OpPPC64FMOVDconst {
6618 break
6619 }
6620 x := v_0.AuxInt
6621 v.reset(OpPPC64FMOVDconst)
6622 v.AuxInt = auxFrom64F(math.Floor(auxTo64F(x)))
6623 return true
6624 }
6625 return false
6626 }
6627 func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool {
6628
6629
6630
6631 for {
6632 off := v.AuxInt
6633 sym := v.Aux
6634 _ = v.Args[1]
6635 ptr := v.Args[0]
6636 v_1 := v.Args[1]
6637 if v_1.Op != OpPPC64MOVDstore {
6638 break
6639 }
6640 if v_1.AuxInt != off {
6641 break
6642 }
6643 if v_1.Aux != sym {
6644 break
6645 }
6646 _ = v_1.Args[2]
6647 if ptr != v_1.Args[0] {
6648 break
6649 }
6650 x := v_1.Args[1]
6651 v.reset(OpPPC64MTVSRD)
6652 v.AddArg(x)
6653 return true
6654 }
6655
6656
6657
6658 for {
6659 off1 := v.AuxInt
6660 sym1 := v.Aux
6661 mem := v.Args[1]
6662 p := v.Args[0]
6663 if p.Op != OpPPC64MOVDaddr {
6664 break
6665 }
6666 off2 := p.AuxInt
6667 sym2 := p.Aux
6668 ptr := p.Args[0]
6669 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
6670 break
6671 }
6672 v.reset(OpPPC64FMOVDload)
6673 v.AuxInt = off1 + off2
6674 v.Aux = mergeSym(sym1, sym2)
6675 v.AddArg(ptr)
6676 v.AddArg(mem)
6677 return true
6678 }
6679
6680
6681
6682 for {
6683 off1 := v.AuxInt
6684 sym := v.Aux
6685 mem := v.Args[1]
6686 v_0 := v.Args[0]
6687 if v_0.Op != OpPPC64ADDconst {
6688 break
6689 }
6690 off2 := v_0.AuxInt
6691 ptr := v_0.Args[0]
6692 if !(is16Bit(off1 + off2)) {
6693 break
6694 }
6695 v.reset(OpPPC64FMOVDload)
6696 v.AuxInt = off1 + off2
6697 v.Aux = sym
6698 v.AddArg(ptr)
6699 v.AddArg(mem)
6700 return true
6701 }
6702 return false
6703 }
6704 func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool {
6705
6706
6707
6708 for {
6709 off := v.AuxInt
6710 sym := v.Aux
6711 mem := v.Args[2]
6712 ptr := v.Args[0]
6713 v_1 := v.Args[1]
6714 if v_1.Op != OpPPC64MTVSRD {
6715 break
6716 }
6717 x := v_1.Args[0]
6718 v.reset(OpPPC64MOVDstore)
6719 v.AuxInt = off
6720 v.Aux = sym
6721 v.AddArg(ptr)
6722 v.AddArg(x)
6723 v.AddArg(mem)
6724 return true
6725 }
6726
6727
6728
6729 for {
6730 off1 := v.AuxInt
6731 sym := v.Aux
6732 mem := v.Args[2]
6733 v_0 := v.Args[0]
6734 if v_0.Op != OpPPC64ADDconst {
6735 break
6736 }
6737 off2 := v_0.AuxInt
6738 ptr := v_0.Args[0]
6739 val := v.Args[1]
6740 if !(is16Bit(off1 + off2)) {
6741 break
6742 }
6743 v.reset(OpPPC64FMOVDstore)
6744 v.AuxInt = off1 + off2
6745 v.Aux = sym
6746 v.AddArg(ptr)
6747 v.AddArg(val)
6748 v.AddArg(mem)
6749 return true
6750 }
6751
6752
6753
6754 for {
6755 off1 := v.AuxInt
6756 sym1 := v.Aux
6757 mem := v.Args[2]
6758 p := v.Args[0]
6759 if p.Op != OpPPC64MOVDaddr {
6760 break
6761 }
6762 off2 := p.AuxInt
6763 sym2 := p.Aux
6764 ptr := p.Args[0]
6765 val := v.Args[1]
6766 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
6767 break
6768 }
6769 v.reset(OpPPC64FMOVDstore)
6770 v.AuxInt = off1 + off2
6771 v.Aux = mergeSym(sym1, sym2)
6772 v.AddArg(ptr)
6773 v.AddArg(val)
6774 v.AddArg(mem)
6775 return true
6776 }
6777 return false
6778 }
6779 func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool {
6780
6781
6782
6783 for {
6784 off1 := v.AuxInt
6785 sym1 := v.Aux
6786 mem := v.Args[1]
6787 p := v.Args[0]
6788 if p.Op != OpPPC64MOVDaddr {
6789 break
6790 }
6791 off2 := p.AuxInt
6792 sym2 := p.Aux
6793 ptr := p.Args[0]
6794 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
6795 break
6796 }
6797 v.reset(OpPPC64FMOVSload)
6798 v.AuxInt = off1 + off2
6799 v.Aux = mergeSym(sym1, sym2)
6800 v.AddArg(ptr)
6801 v.AddArg(mem)
6802 return true
6803 }
6804
6805
6806
6807 for {
6808 off1 := v.AuxInt
6809 sym := v.Aux
6810 mem := v.Args[1]
6811 v_0 := v.Args[0]
6812 if v_0.Op != OpPPC64ADDconst {
6813 break
6814 }
6815 off2 := v_0.AuxInt
6816 ptr := v_0.Args[0]
6817 if !(is16Bit(off1 + off2)) {
6818 break
6819 }
6820 v.reset(OpPPC64FMOVSload)
6821 v.AuxInt = off1 + off2
6822 v.Aux = sym
6823 v.AddArg(ptr)
6824 v.AddArg(mem)
6825 return true
6826 }
6827 return false
6828 }
6829 func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool {
6830
6831
6832
6833 for {
6834 off1 := v.AuxInt
6835 sym := v.Aux
6836 mem := v.Args[2]
6837 v_0 := v.Args[0]
6838 if v_0.Op != OpPPC64ADDconst {
6839 break
6840 }
6841 off2 := v_0.AuxInt
6842 ptr := v_0.Args[0]
6843 val := v.Args[1]
6844 if !(is16Bit(off1 + off2)) {
6845 break
6846 }
6847 v.reset(OpPPC64FMOVSstore)
6848 v.AuxInt = off1 + off2
6849 v.Aux = sym
6850 v.AddArg(ptr)
6851 v.AddArg(val)
6852 v.AddArg(mem)
6853 return true
6854 }
6855
6856
6857
6858 for {
6859 off1 := v.AuxInt
6860 sym1 := v.Aux
6861 mem := v.Args[2]
6862 p := v.Args[0]
6863 if p.Op != OpPPC64MOVDaddr {
6864 break
6865 }
6866 off2 := p.AuxInt
6867 sym2 := p.Aux
6868 ptr := p.Args[0]
6869 val := v.Args[1]
6870 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
6871 break
6872 }
6873 v.reset(OpPPC64FMOVSstore)
6874 v.AuxInt = off1 + off2
6875 v.Aux = mergeSym(sym1, sym2)
6876 v.AddArg(ptr)
6877 v.AddArg(val)
6878 v.AddArg(mem)
6879 return true
6880 }
6881 return false
6882 }
6883 func rewriteValuePPC64_OpPPC64FNEG_0(v *Value) bool {
6884
6885
6886
6887 for {
6888 v_0 := v.Args[0]
6889 if v_0.Op != OpPPC64FABS {
6890 break
6891 }
6892 x := v_0.Args[0]
6893 v.reset(OpPPC64FNABS)
6894 v.AddArg(x)
6895 return true
6896 }
6897
6898
6899
6900 for {
6901 v_0 := v.Args[0]
6902 if v_0.Op != OpPPC64FNABS {
6903 break
6904 }
6905 x := v_0.Args[0]
6906 v.reset(OpPPC64FABS)
6907 v.AddArg(x)
6908 return true
6909 }
6910 return false
6911 }
6912 func rewriteValuePPC64_OpPPC64FSQRT_0(v *Value) bool {
6913
6914
6915
6916 for {
6917 v_0 := v.Args[0]
6918 if v_0.Op != OpPPC64FMOVDconst {
6919 break
6920 }
6921 x := v_0.AuxInt
6922 v.reset(OpPPC64FMOVDconst)
6923 v.AuxInt = auxFrom64F(math.Sqrt(auxTo64F(x)))
6924 return true
6925 }
6926 return false
6927 }
6928 func rewriteValuePPC64_OpPPC64FSUB_0(v *Value) bool {
6929
6930
6931
6932 for {
6933 z := v.Args[1]
6934 v_0 := v.Args[0]
6935 if v_0.Op != OpPPC64FMUL {
6936 break
6937 }
6938 y := v_0.Args[1]
6939 x := v_0.Args[0]
6940 v.reset(OpPPC64FMSUB)
6941 v.AddArg(x)
6942 v.AddArg(y)
6943 v.AddArg(z)
6944 return true
6945 }
6946 return false
6947 }
6948 func rewriteValuePPC64_OpPPC64FSUBS_0(v *Value) bool {
6949
6950
6951
6952 for {
6953 z := v.Args[1]
6954 v_0 := v.Args[0]
6955 if v_0.Op != OpPPC64FMULS {
6956 break
6957 }
6958 y := v_0.Args[1]
6959 x := v_0.Args[0]
6960 v.reset(OpPPC64FMSUBS)
6961 v.AddArg(x)
6962 v.AddArg(y)
6963 v.AddArg(z)
6964 return true
6965 }
6966 return false
6967 }
6968 func rewriteValuePPC64_OpPPC64FTRUNC_0(v *Value) bool {
6969
6970
6971
6972 for {
6973 v_0 := v.Args[0]
6974 if v_0.Op != OpPPC64FMOVDconst {
6975 break
6976 }
6977 x := v_0.AuxInt
6978 v.reset(OpPPC64FMOVDconst)
6979 v.AuxInt = auxFrom64F(math.Trunc(auxTo64F(x)))
6980 return true
6981 }
6982 return false
6983 }
6984 func rewriteValuePPC64_OpPPC64GreaterEqual_0(v *Value) bool {
6985
6986
6987
6988 for {
6989 v_0 := v.Args[0]
6990 if v_0.Op != OpPPC64FlagEQ {
6991 break
6992 }
6993 v.reset(OpPPC64MOVDconst)
6994 v.AuxInt = 1
6995 return true
6996 }
6997
6998
6999
7000 for {
7001 v_0 := v.Args[0]
7002 if v_0.Op != OpPPC64FlagLT {
7003 break
7004 }
7005 v.reset(OpPPC64MOVDconst)
7006 v.AuxInt = 0
7007 return true
7008 }
7009
7010
7011
7012 for {
7013 v_0 := v.Args[0]
7014 if v_0.Op != OpPPC64FlagGT {
7015 break
7016 }
7017 v.reset(OpPPC64MOVDconst)
7018 v.AuxInt = 1
7019 return true
7020 }
7021
7022
7023
7024 for {
7025 v_0 := v.Args[0]
7026 if v_0.Op != OpPPC64InvertFlags {
7027 break
7028 }
7029 x := v_0.Args[0]
7030 v.reset(OpPPC64LessEqual)
7031 v.AddArg(x)
7032 return true
7033 }
7034 return false
7035 }
7036 func rewriteValuePPC64_OpPPC64GreaterThan_0(v *Value) bool {
7037
7038
7039
7040 for {
7041 v_0 := v.Args[0]
7042 if v_0.Op != OpPPC64FlagEQ {
7043 break
7044 }
7045 v.reset(OpPPC64MOVDconst)
7046 v.AuxInt = 0
7047 return true
7048 }
7049
7050
7051
7052 for {
7053 v_0 := v.Args[0]
7054 if v_0.Op != OpPPC64FlagLT {
7055 break
7056 }
7057 v.reset(OpPPC64MOVDconst)
7058 v.AuxInt = 0
7059 return true
7060 }
7061
7062
7063
7064 for {
7065 v_0 := v.Args[0]
7066 if v_0.Op != OpPPC64FlagGT {
7067 break
7068 }
7069 v.reset(OpPPC64MOVDconst)
7070 v.AuxInt = 1
7071 return true
7072 }
7073
7074
7075
7076 for {
7077 v_0 := v.Args[0]
7078 if v_0.Op != OpPPC64InvertFlags {
7079 break
7080 }
7081 x := v_0.Args[0]
7082 v.reset(OpPPC64LessThan)
7083 v.AddArg(x)
7084 return true
7085 }
7086 return false
7087 }
7088 func rewriteValuePPC64_OpPPC64LessEqual_0(v *Value) bool {
7089
7090
7091
7092 for {
7093 v_0 := v.Args[0]
7094 if v_0.Op != OpPPC64FlagEQ {
7095 break
7096 }
7097 v.reset(OpPPC64MOVDconst)
7098 v.AuxInt = 1
7099 return true
7100 }
7101
7102
7103
7104 for {
7105 v_0 := v.Args[0]
7106 if v_0.Op != OpPPC64FlagLT {
7107 break
7108 }
7109 v.reset(OpPPC64MOVDconst)
7110 v.AuxInt = 1
7111 return true
7112 }
7113
7114
7115
7116 for {
7117 v_0 := v.Args[0]
7118 if v_0.Op != OpPPC64FlagGT {
7119 break
7120 }
7121 v.reset(OpPPC64MOVDconst)
7122 v.AuxInt = 0
7123 return true
7124 }
7125
7126
7127
7128 for {
7129 v_0 := v.Args[0]
7130 if v_0.Op != OpPPC64InvertFlags {
7131 break
7132 }
7133 x := v_0.Args[0]
7134 v.reset(OpPPC64GreaterEqual)
7135 v.AddArg(x)
7136 return true
7137 }
7138 return false
7139 }
7140 func rewriteValuePPC64_OpPPC64LessThan_0(v *Value) bool {
7141
7142
7143
7144 for {
7145 v_0 := v.Args[0]
7146 if v_0.Op != OpPPC64FlagEQ {
7147 break
7148 }
7149 v.reset(OpPPC64MOVDconst)
7150 v.AuxInt = 0
7151 return true
7152 }
7153
7154
7155
7156 for {
7157 v_0 := v.Args[0]
7158 if v_0.Op != OpPPC64FlagLT {
7159 break
7160 }
7161 v.reset(OpPPC64MOVDconst)
7162 v.AuxInt = 1
7163 return true
7164 }
7165
7166
7167
7168 for {
7169 v_0 := v.Args[0]
7170 if v_0.Op != OpPPC64FlagGT {
7171 break
7172 }
7173 v.reset(OpPPC64MOVDconst)
7174 v.AuxInt = 0
7175 return true
7176 }
7177
7178
7179
7180 for {
7181 v_0 := v.Args[0]
7182 if v_0.Op != OpPPC64InvertFlags {
7183 break
7184 }
7185 x := v_0.Args[0]
7186 v.reset(OpPPC64GreaterThan)
7187 v.AddArg(x)
7188 return true
7189 }
7190 return false
7191 }
7192 func rewriteValuePPC64_OpPPC64MFVSRD_0(v *Value) bool {
7193 b := v.Block
7194 typ := &b.Func.Config.Types
7195
7196
7197
7198 for {
7199 v_0 := v.Args[0]
7200 if v_0.Op != OpPPC64FMOVDconst {
7201 break
7202 }
7203 c := v_0.AuxInt
7204 v.reset(OpPPC64MOVDconst)
7205 v.AuxInt = c
7206 return true
7207 }
7208
7209
7210
7211 for {
7212 x := v.Args[0]
7213 if x.Op != OpPPC64FMOVDload {
7214 break
7215 }
7216 off := x.AuxInt
7217 sym := x.Aux
7218 mem := x.Args[1]
7219 ptr := x.Args[0]
7220 if !(x.Uses == 1 && clobber(x)) {
7221 break
7222 }
7223 b = x.Block
7224 v0 := b.NewValue0(x.Pos, OpPPC64MOVDload, typ.Int64)
7225 v.reset(OpCopy)
7226 v.AddArg(v0)
7227 v0.AuxInt = off
7228 v0.Aux = sym
7229 v0.AddArg(ptr)
7230 v0.AddArg(mem)
7231 return true
7232 }
7233 return false
7234 }
7235 func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool {
7236
7237
7238
7239 for {
7240 off1 := v.AuxInt
7241 sym1 := v.Aux
7242 mem := v.Args[1]
7243 p := v.Args[0]
7244 if p.Op != OpPPC64MOVDaddr {
7245 break
7246 }
7247 off2 := p.AuxInt
7248 sym2 := p.Aux
7249 ptr := p.Args[0]
7250 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
7251 break
7252 }
7253 v.reset(OpPPC64MOVBZload)
7254 v.AuxInt = off1 + off2
7255 v.Aux = mergeSym(sym1, sym2)
7256 v.AddArg(ptr)
7257 v.AddArg(mem)
7258 return true
7259 }
7260
7261
7262
7263 for {
7264 off1 := v.AuxInt
7265 sym := v.Aux
7266 mem := v.Args[1]
7267 v_0 := v.Args[0]
7268 if v_0.Op != OpPPC64ADDconst {
7269 break
7270 }
7271 off2 := v_0.AuxInt
7272 x := v_0.Args[0]
7273 if !(is16Bit(off1 + off2)) {
7274 break
7275 }
7276 v.reset(OpPPC64MOVBZload)
7277 v.AuxInt = off1 + off2
7278 v.Aux = sym
7279 v.AddArg(x)
7280 v.AddArg(mem)
7281 return true
7282 }
7283
7284
7285
7286 for {
7287 if v.AuxInt != 0 {
7288 break
7289 }
7290 sym := v.Aux
7291 mem := v.Args[1]
7292 p := v.Args[0]
7293 if p.Op != OpPPC64ADD {
7294 break
7295 }
7296 idx := p.Args[1]
7297 ptr := p.Args[0]
7298 if !(sym == nil && p.Uses == 1) {
7299 break
7300 }
7301 v.reset(OpPPC64MOVBZloadidx)
7302 v.AddArg(ptr)
7303 v.AddArg(idx)
7304 v.AddArg(mem)
7305 return true
7306 }
7307 return false
7308 }
7309 func rewriteValuePPC64_OpPPC64MOVBZloadidx_0(v *Value) bool {
7310
7311
7312
7313 for {
7314 mem := v.Args[2]
7315 ptr := v.Args[0]
7316 v_1 := v.Args[1]
7317 if v_1.Op != OpPPC64MOVDconst {
7318 break
7319 }
7320 c := v_1.AuxInt
7321 if !(is16Bit(c)) {
7322 break
7323 }
7324 v.reset(OpPPC64MOVBZload)
7325 v.AuxInt = c
7326 v.AddArg(ptr)
7327 v.AddArg(mem)
7328 return true
7329 }
7330
7331
7332
7333 for {
7334 mem := v.Args[2]
7335 v_0 := v.Args[0]
7336 if v_0.Op != OpPPC64MOVDconst {
7337 break
7338 }
7339 c := v_0.AuxInt
7340 ptr := v.Args[1]
7341 if !(is16Bit(c)) {
7342 break
7343 }
7344 v.reset(OpPPC64MOVBZload)
7345 v.AuxInt = c
7346 v.AddArg(ptr)
7347 v.AddArg(mem)
7348 return true
7349 }
7350 return false
7351 }
7352 func rewriteValuePPC64_OpPPC64MOVBZreg_0(v *Value) bool {
7353 b := v.Block
7354 typ := &b.Func.Config.Types
7355
7356
7357
7358 for {
7359 y := v.Args[0]
7360 if y.Op != OpPPC64ANDconst {
7361 break
7362 }
7363 c := y.AuxInt
7364 if !(uint64(c) <= 0xFF) {
7365 break
7366 }
7367 v.reset(OpCopy)
7368 v.Type = y.Type
7369 v.AddArg(y)
7370 return true
7371 }
7372
7373
7374
7375 for {
7376 v_0 := v.Args[0]
7377 if v_0.Op != OpPPC64SRWconst {
7378 break
7379 }
7380 c := v_0.AuxInt
7381 v_0_0 := v_0.Args[0]
7382 if v_0_0.Op != OpPPC64MOVBZreg {
7383 break
7384 }
7385 x := v_0_0.Args[0]
7386 v.reset(OpPPC64SRWconst)
7387 v.AuxInt = c
7388 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
7389 v0.AddArg(x)
7390 v.AddArg(v0)
7391 return true
7392 }
7393
7394
7395
7396 for {
7397 v_0 := v.Args[0]
7398 if v_0.Op != OpPPC64SRWconst {
7399 break
7400 }
7401 c := v_0.AuxInt
7402 x := v_0.Args[0]
7403 if !(sizeof(x.Type) == 8) {
7404 break
7405 }
7406 v.reset(OpPPC64SRWconst)
7407 v.AuxInt = c
7408 v.AddArg(x)
7409 return true
7410 }
7411
7412
7413
7414 for {
7415 v_0 := v.Args[0]
7416 if v_0.Op != OpPPC64SRDconst {
7417 break
7418 }
7419 c := v_0.AuxInt
7420 x := v_0.Args[0]
7421 if !(c >= 56) {
7422 break
7423 }
7424 v.reset(OpPPC64SRDconst)
7425 v.AuxInt = c
7426 v.AddArg(x)
7427 return true
7428 }
7429
7430
7431
7432 for {
7433 v_0 := v.Args[0]
7434 if v_0.Op != OpPPC64SRWconst {
7435 break
7436 }
7437 c := v_0.AuxInt
7438 x := v_0.Args[0]
7439 if !(c >= 24) {
7440 break
7441 }
7442 v.reset(OpPPC64SRWconst)
7443 v.AuxInt = c
7444 v.AddArg(x)
7445 return true
7446 }
7447
7448
7449
7450 for {
7451 y := v.Args[0]
7452 if y.Op != OpPPC64MOVBZreg {
7453 break
7454 }
7455 v.reset(OpCopy)
7456 v.Type = y.Type
7457 v.AddArg(y)
7458 return true
7459 }
7460
7461
7462
7463 for {
7464 v_0 := v.Args[0]
7465 if v_0.Op != OpPPC64MOVBreg {
7466 break
7467 }
7468 x := v_0.Args[0]
7469 v.reset(OpPPC64MOVBZreg)
7470 v.AddArg(x)
7471 return true
7472 }
7473
7474
7475
7476 for {
7477 x := v.Args[0]
7478 if x.Op != OpPPC64MOVBZload {
7479 break
7480 }
7481 _ = x.Args[1]
7482 v.reset(OpCopy)
7483 v.Type = x.Type
7484 v.AddArg(x)
7485 return true
7486 }
7487
7488
7489
7490 for {
7491 x := v.Args[0]
7492 if x.Op != OpPPC64MOVBZloadidx {
7493 break
7494 }
7495 _ = x.Args[2]
7496 v.reset(OpCopy)
7497 v.Type = x.Type
7498 v.AddArg(x)
7499 return true
7500 }
7501
7502
7503
7504 for {
7505 x := v.Args[0]
7506 if x.Op != OpArg {
7507 break
7508 }
7509 t := x.Type
7510 if !(is8BitInt(t) && !isSigned(t)) {
7511 break
7512 }
7513 v.reset(OpCopy)
7514 v.Type = x.Type
7515 v.AddArg(x)
7516 return true
7517 }
7518 return false
7519 }
7520 func rewriteValuePPC64_OpPPC64MOVBZreg_10(v *Value) bool {
7521
7522
7523
7524 for {
7525 v_0 := v.Args[0]
7526 if v_0.Op != OpPPC64MOVDconst {
7527 break
7528 }
7529 c := v_0.AuxInt
7530 v.reset(OpPPC64MOVDconst)
7531 v.AuxInt = int64(uint8(c))
7532 return true
7533 }
7534 return false
7535 }
7536 func rewriteValuePPC64_OpPPC64MOVBreg_0(v *Value) bool {
7537 b := v.Block
7538 typ := &b.Func.Config.Types
7539
7540
7541
7542 for {
7543 y := v.Args[0]
7544 if y.Op != OpPPC64ANDconst {
7545 break
7546 }
7547 c := y.AuxInt
7548 if !(uint64(c) <= 0x7F) {
7549 break
7550 }
7551 v.reset(OpCopy)
7552 v.Type = y.Type
7553 v.AddArg(y)
7554 return true
7555 }
7556
7557
7558
7559 for {
7560 v_0 := v.Args[0]
7561 if v_0.Op != OpPPC64SRAWconst {
7562 break
7563 }
7564 c := v_0.AuxInt
7565 v_0_0 := v_0.Args[0]
7566 if v_0_0.Op != OpPPC64MOVBreg {
7567 break
7568 }
7569 x := v_0_0.Args[0]
7570 v.reset(OpPPC64SRAWconst)
7571 v.AuxInt = c
7572 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
7573 v0.AddArg(x)
7574 v.AddArg(v0)
7575 return true
7576 }
7577
7578
7579
7580 for {
7581 v_0 := v.Args[0]
7582 if v_0.Op != OpPPC64SRAWconst {
7583 break
7584 }
7585 c := v_0.AuxInt
7586 x := v_0.Args[0]
7587 if !(sizeof(x.Type) == 8) {
7588 break
7589 }
7590 v.reset(OpPPC64SRAWconst)
7591 v.AuxInt = c
7592 v.AddArg(x)
7593 return true
7594 }
7595
7596
7597
7598 for {
7599 v_0 := v.Args[0]
7600 if v_0.Op != OpPPC64SRDconst {
7601 break
7602 }
7603 c := v_0.AuxInt
7604 x := v_0.Args[0]
7605 if !(c > 56) {
7606 break
7607 }
7608 v.reset(OpPPC64SRDconst)
7609 v.AuxInt = c
7610 v.AddArg(x)
7611 return true
7612 }
7613
7614
7615
7616 for {
7617 v_0 := v.Args[0]
7618 if v_0.Op != OpPPC64SRDconst {
7619 break
7620 }
7621 c := v_0.AuxInt
7622 x := v_0.Args[0]
7623 if !(c == 56) {
7624 break
7625 }
7626 v.reset(OpPPC64SRADconst)
7627 v.AuxInt = c
7628 v.AddArg(x)
7629 return true
7630 }
7631
7632
7633
7634 for {
7635 v_0 := v.Args[0]
7636 if v_0.Op != OpPPC64SRWconst {
7637 break
7638 }
7639 c := v_0.AuxInt
7640 x := v_0.Args[0]
7641 if !(c > 24) {
7642 break
7643 }
7644 v.reset(OpPPC64SRWconst)
7645 v.AuxInt = c
7646 v.AddArg(x)
7647 return true
7648 }
7649
7650
7651
7652 for {
7653 v_0 := v.Args[0]
7654 if v_0.Op != OpPPC64SRWconst {
7655 break
7656 }
7657 c := v_0.AuxInt
7658 x := v_0.Args[0]
7659 if !(c == 24) {
7660 break
7661 }
7662 v.reset(OpPPC64SRAWconst)
7663 v.AuxInt = c
7664 v.AddArg(x)
7665 return true
7666 }
7667
7668
7669
7670 for {
7671 y := v.Args[0]
7672 if y.Op != OpPPC64MOVBreg {
7673 break
7674 }
7675 v.reset(OpCopy)
7676 v.Type = y.Type
7677 v.AddArg(y)
7678 return true
7679 }
7680
7681
7682
7683 for {
7684 v_0 := v.Args[0]
7685 if v_0.Op != OpPPC64MOVBZreg {
7686 break
7687 }
7688 x := v_0.Args[0]
7689 v.reset(OpPPC64MOVBreg)
7690 v.AddArg(x)
7691 return true
7692 }
7693
7694
7695
7696 for {
7697 x := v.Args[0]
7698 if x.Op != OpArg {
7699 break
7700 }
7701 t := x.Type
7702 if !(is8BitInt(t) && isSigned(t)) {
7703 break
7704 }
7705 v.reset(OpCopy)
7706 v.Type = x.Type
7707 v.AddArg(x)
7708 return true
7709 }
7710 return false
7711 }
7712 func rewriteValuePPC64_OpPPC64MOVBreg_10(v *Value) bool {
7713
7714
7715
7716 for {
7717 v_0 := v.Args[0]
7718 if v_0.Op != OpPPC64MOVDconst {
7719 break
7720 }
7721 c := v_0.AuxInt
7722 v.reset(OpPPC64MOVDconst)
7723 v.AuxInt = int64(int8(c))
7724 return true
7725 }
7726 return false
7727 }
7728 func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool {
7729
7730
7731
7732 for {
7733 off1 := v.AuxInt
7734 sym := v.Aux
7735 mem := v.Args[2]
7736 v_0 := v.Args[0]
7737 if v_0.Op != OpPPC64ADDconst {
7738 break
7739 }
7740 off2 := v_0.AuxInt
7741 x := v_0.Args[0]
7742 val := v.Args[1]
7743 if !(is16Bit(off1 + off2)) {
7744 break
7745 }
7746 v.reset(OpPPC64MOVBstore)
7747 v.AuxInt = off1 + off2
7748 v.Aux = sym
7749 v.AddArg(x)
7750 v.AddArg(val)
7751 v.AddArg(mem)
7752 return true
7753 }
7754
7755
7756
7757 for {
7758 off1 := v.AuxInt
7759 sym1 := v.Aux
7760 mem := v.Args[2]
7761 p := v.Args[0]
7762 if p.Op != OpPPC64MOVDaddr {
7763 break
7764 }
7765 off2 := p.AuxInt
7766 sym2 := p.Aux
7767 ptr := p.Args[0]
7768 val := v.Args[1]
7769 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
7770 break
7771 }
7772 v.reset(OpPPC64MOVBstore)
7773 v.AuxInt = off1 + off2
7774 v.Aux = mergeSym(sym1, sym2)
7775 v.AddArg(ptr)
7776 v.AddArg(val)
7777 v.AddArg(mem)
7778 return true
7779 }
7780
7781
7782
7783 for {
7784 off := v.AuxInt
7785 sym := v.Aux
7786 mem := v.Args[2]
7787 ptr := v.Args[0]
7788 v_1 := v.Args[1]
7789 if v_1.Op != OpPPC64MOVDconst {
7790 break
7791 }
7792 if v_1.AuxInt != 0 {
7793 break
7794 }
7795 v.reset(OpPPC64MOVBstorezero)
7796 v.AuxInt = off
7797 v.Aux = sym
7798 v.AddArg(ptr)
7799 v.AddArg(mem)
7800 return true
7801 }
7802
7803
7804
7805 for {
7806 off := v.AuxInt
7807 sym := v.Aux
7808 mem := v.Args[2]
7809 p := v.Args[0]
7810 if p.Op != OpPPC64ADD {
7811 break
7812 }
7813 idx := p.Args[1]
7814 ptr := p.Args[0]
7815 val := v.Args[1]
7816 if !(off == 0 && sym == nil && p.Uses == 1) {
7817 break
7818 }
7819 v.reset(OpPPC64MOVBstoreidx)
7820 v.AddArg(ptr)
7821 v.AddArg(idx)
7822 v.AddArg(val)
7823 v.AddArg(mem)
7824 return true
7825 }
7826
7827
7828
7829 for {
7830 off := v.AuxInt
7831 sym := v.Aux
7832 mem := v.Args[2]
7833 ptr := v.Args[0]
7834 v_1 := v.Args[1]
7835 if v_1.Op != OpPPC64MOVBreg {
7836 break
7837 }
7838 x := v_1.Args[0]
7839 v.reset(OpPPC64MOVBstore)
7840 v.AuxInt = off
7841 v.Aux = sym
7842 v.AddArg(ptr)
7843 v.AddArg(x)
7844 v.AddArg(mem)
7845 return true
7846 }
7847
7848
7849
7850 for {
7851 off := v.AuxInt
7852 sym := v.Aux
7853 mem := v.Args[2]
7854 ptr := v.Args[0]
7855 v_1 := v.Args[1]
7856 if v_1.Op != OpPPC64MOVBZreg {
7857 break
7858 }
7859 x := v_1.Args[0]
7860 v.reset(OpPPC64MOVBstore)
7861 v.AuxInt = off
7862 v.Aux = sym
7863 v.AddArg(ptr)
7864 v.AddArg(x)
7865 v.AddArg(mem)
7866 return true
7867 }
7868
7869
7870
7871 for {
7872 off := v.AuxInt
7873 sym := v.Aux
7874 mem := v.Args[2]
7875 ptr := v.Args[0]
7876 v_1 := v.Args[1]
7877 if v_1.Op != OpPPC64MOVHreg {
7878 break
7879 }
7880 x := v_1.Args[0]
7881 v.reset(OpPPC64MOVBstore)
7882 v.AuxInt = off
7883 v.Aux = sym
7884 v.AddArg(ptr)
7885 v.AddArg(x)
7886 v.AddArg(mem)
7887 return true
7888 }
7889
7890
7891
7892 for {
7893 off := v.AuxInt
7894 sym := v.Aux
7895 mem := v.Args[2]
7896 ptr := v.Args[0]
7897 v_1 := v.Args[1]
7898 if v_1.Op != OpPPC64MOVHZreg {
7899 break
7900 }
7901 x := v_1.Args[0]
7902 v.reset(OpPPC64MOVBstore)
7903 v.AuxInt = off
7904 v.Aux = sym
7905 v.AddArg(ptr)
7906 v.AddArg(x)
7907 v.AddArg(mem)
7908 return true
7909 }
7910
7911
7912
7913 for {
7914 off := v.AuxInt
7915 sym := v.Aux
7916 mem := v.Args[2]
7917 ptr := v.Args[0]
7918 v_1 := v.Args[1]
7919 if v_1.Op != OpPPC64MOVWreg {
7920 break
7921 }
7922 x := v_1.Args[0]
7923 v.reset(OpPPC64MOVBstore)
7924 v.AuxInt = off
7925 v.Aux = sym
7926 v.AddArg(ptr)
7927 v.AddArg(x)
7928 v.AddArg(mem)
7929 return true
7930 }
7931
7932
7933
7934 for {
7935 off := v.AuxInt
7936 sym := v.Aux
7937 mem := v.Args[2]
7938 ptr := v.Args[0]
7939 v_1 := v.Args[1]
7940 if v_1.Op != OpPPC64MOVWZreg {
7941 break
7942 }
7943 x := v_1.Args[0]
7944 v.reset(OpPPC64MOVBstore)
7945 v.AuxInt = off
7946 v.Aux = sym
7947 v.AddArg(ptr)
7948 v.AddArg(x)
7949 v.AddArg(mem)
7950 return true
7951 }
7952 return false
7953 }
7954 func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool {
7955 b := v.Block
7956 config := b.Func.Config
7957 typ := &b.Func.Config.Types
7958
7959
7960
7961 for {
7962 off := v.AuxInt
7963 sym := v.Aux
7964 mem := v.Args[2]
7965 ptr := v.Args[0]
7966 v_1 := v.Args[1]
7967 if v_1.Op != OpPPC64SRWconst {
7968 break
7969 }
7970 c := v_1.AuxInt
7971 v_1_0 := v_1.Args[0]
7972 if v_1_0.Op != OpPPC64MOVHreg {
7973 break
7974 }
7975 x := v_1_0.Args[0]
7976 if !(c <= 8) {
7977 break
7978 }
7979 v.reset(OpPPC64MOVBstore)
7980 v.AuxInt = off
7981 v.Aux = sym
7982 v.AddArg(ptr)
7983 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
7984 v0.AuxInt = c
7985 v0.AddArg(x)
7986 v.AddArg(v0)
7987 v.AddArg(mem)
7988 return true
7989 }
7990
7991
7992
7993 for {
7994 off := v.AuxInt
7995 sym := v.Aux
7996 mem := v.Args[2]
7997 ptr := v.Args[0]
7998 v_1 := v.Args[1]
7999 if v_1.Op != OpPPC64SRWconst {
8000 break
8001 }
8002 c := v_1.AuxInt
8003 v_1_0 := v_1.Args[0]
8004 if v_1_0.Op != OpPPC64MOVHZreg {
8005 break
8006 }
8007 x := v_1_0.Args[0]
8008 if !(c <= 8) {
8009 break
8010 }
8011 v.reset(OpPPC64MOVBstore)
8012 v.AuxInt = off
8013 v.Aux = sym
8014 v.AddArg(ptr)
8015 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8016 v0.AuxInt = c
8017 v0.AddArg(x)
8018 v.AddArg(v0)
8019 v.AddArg(mem)
8020 return true
8021 }
8022
8023
8024
8025 for {
8026 off := v.AuxInt
8027 sym := v.Aux
8028 mem := v.Args[2]
8029 ptr := v.Args[0]
8030 v_1 := v.Args[1]
8031 if v_1.Op != OpPPC64SRWconst {
8032 break
8033 }
8034 c := v_1.AuxInt
8035 v_1_0 := v_1.Args[0]
8036 if v_1_0.Op != OpPPC64MOVWreg {
8037 break
8038 }
8039 x := v_1_0.Args[0]
8040 if !(c <= 24) {
8041 break
8042 }
8043 v.reset(OpPPC64MOVBstore)
8044 v.AuxInt = off
8045 v.Aux = sym
8046 v.AddArg(ptr)
8047 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8048 v0.AuxInt = c
8049 v0.AddArg(x)
8050 v.AddArg(v0)
8051 v.AddArg(mem)
8052 return true
8053 }
8054
8055
8056
8057 for {
8058 off := v.AuxInt
8059 sym := v.Aux
8060 mem := v.Args[2]
8061 ptr := v.Args[0]
8062 v_1 := v.Args[1]
8063 if v_1.Op != OpPPC64SRWconst {
8064 break
8065 }
8066 c := v_1.AuxInt
8067 v_1_0 := v_1.Args[0]
8068 if v_1_0.Op != OpPPC64MOVWZreg {
8069 break
8070 }
8071 x := v_1_0.Args[0]
8072 if !(c <= 24) {
8073 break
8074 }
8075 v.reset(OpPPC64MOVBstore)
8076 v.AuxInt = off
8077 v.Aux = sym
8078 v.AddArg(ptr)
8079 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8080 v0.AuxInt = c
8081 v0.AddArg(x)
8082 v.AddArg(v0)
8083 v.AddArg(mem)
8084 return true
8085 }
8086
8087
8088
8089 for {
8090 i1 := v.AuxInt
8091 s := v.Aux
8092 _ = v.Args[2]
8093 p := v.Args[0]
8094 v_1 := v.Args[1]
8095 if v_1.Op != OpPPC64SRWconst {
8096 break
8097 }
8098 if v_1.AuxInt != 24 {
8099 break
8100 }
8101 w := v_1.Args[0]
8102 x0 := v.Args[2]
8103 if x0.Op != OpPPC64MOVBstore {
8104 break
8105 }
8106 i0 := x0.AuxInt
8107 if x0.Aux != s {
8108 break
8109 }
8110 mem := x0.Args[2]
8111 if p != x0.Args[0] {
8112 break
8113 }
8114 x0_1 := x0.Args[1]
8115 if x0_1.Op != OpPPC64SRWconst {
8116 break
8117 }
8118 if x0_1.AuxInt != 16 {
8119 break
8120 }
8121 if w != x0_1.Args[0] {
8122 break
8123 }
8124 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
8125 break
8126 }
8127 v.reset(OpPPC64MOVHstore)
8128 v.AuxInt = i0
8129 v.Aux = s
8130 v.AddArg(p)
8131 v0 := b.NewValue0(x0.Pos, OpPPC64SRWconst, typ.UInt16)
8132 v0.AuxInt = 16
8133 v0.AddArg(w)
8134 v.AddArg(v0)
8135 v.AddArg(mem)
8136 return true
8137 }
8138
8139
8140
8141 for {
8142 i1 := v.AuxInt
8143 s := v.Aux
8144 _ = v.Args[2]
8145 p := v.Args[0]
8146 v_1 := v.Args[1]
8147 if v_1.Op != OpPPC64SRDconst {
8148 break
8149 }
8150 if v_1.AuxInt != 24 {
8151 break
8152 }
8153 w := v_1.Args[0]
8154 x0 := v.Args[2]
8155 if x0.Op != OpPPC64MOVBstore {
8156 break
8157 }
8158 i0 := x0.AuxInt
8159 if x0.Aux != s {
8160 break
8161 }
8162 mem := x0.Args[2]
8163 if p != x0.Args[0] {
8164 break
8165 }
8166 x0_1 := x0.Args[1]
8167 if x0_1.Op != OpPPC64SRDconst {
8168 break
8169 }
8170 if x0_1.AuxInt != 16 {
8171 break
8172 }
8173 if w != x0_1.Args[0] {
8174 break
8175 }
8176 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
8177 break
8178 }
8179 v.reset(OpPPC64MOVHstore)
8180 v.AuxInt = i0
8181 v.Aux = s
8182 v.AddArg(p)
8183 v0 := b.NewValue0(x0.Pos, OpPPC64SRWconst, typ.UInt16)
8184 v0.AuxInt = 16
8185 v0.AddArg(w)
8186 v.AddArg(v0)
8187 v.AddArg(mem)
8188 return true
8189 }
8190
8191
8192
8193 for {
8194 i1 := v.AuxInt
8195 s := v.Aux
8196 _ = v.Args[2]
8197 p := v.Args[0]
8198 v_1 := v.Args[1]
8199 if v_1.Op != OpPPC64SRWconst {
8200 break
8201 }
8202 if v_1.AuxInt != 8 {
8203 break
8204 }
8205 w := v_1.Args[0]
8206 x0 := v.Args[2]
8207 if x0.Op != OpPPC64MOVBstore {
8208 break
8209 }
8210 i0 := x0.AuxInt
8211 if x0.Aux != s {
8212 break
8213 }
8214 mem := x0.Args[2]
8215 if p != x0.Args[0] {
8216 break
8217 }
8218 if w != x0.Args[1] {
8219 break
8220 }
8221 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
8222 break
8223 }
8224 v.reset(OpPPC64MOVHstore)
8225 v.AuxInt = i0
8226 v.Aux = s
8227 v.AddArg(p)
8228 v.AddArg(w)
8229 v.AddArg(mem)
8230 return true
8231 }
8232
8233
8234
8235 for {
8236 i1 := v.AuxInt
8237 s := v.Aux
8238 _ = v.Args[2]
8239 p := v.Args[0]
8240 v_1 := v.Args[1]
8241 if v_1.Op != OpPPC64SRDconst {
8242 break
8243 }
8244 if v_1.AuxInt != 8 {
8245 break
8246 }
8247 w := v_1.Args[0]
8248 x0 := v.Args[2]
8249 if x0.Op != OpPPC64MOVBstore {
8250 break
8251 }
8252 i0 := x0.AuxInt
8253 if x0.Aux != s {
8254 break
8255 }
8256 mem := x0.Args[2]
8257 if p != x0.Args[0] {
8258 break
8259 }
8260 if w != x0.Args[1] {
8261 break
8262 }
8263 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
8264 break
8265 }
8266 v.reset(OpPPC64MOVHstore)
8267 v.AuxInt = i0
8268 v.Aux = s
8269 v.AddArg(p)
8270 v.AddArg(w)
8271 v.AddArg(mem)
8272 return true
8273 }
8274
8275
8276
8277 for {
8278 i3 := v.AuxInt
8279 s := v.Aux
8280 _ = v.Args[2]
8281 p := v.Args[0]
8282 w := v.Args[1]
8283 x0 := v.Args[2]
8284 if x0.Op != OpPPC64MOVBstore {
8285 break
8286 }
8287 i2 := x0.AuxInt
8288 if x0.Aux != s {
8289 break
8290 }
8291 _ = x0.Args[2]
8292 if p != x0.Args[0] {
8293 break
8294 }
8295 x0_1 := x0.Args[1]
8296 if x0_1.Op != OpPPC64SRWconst {
8297 break
8298 }
8299 if x0_1.AuxInt != 8 {
8300 break
8301 }
8302 if w != x0_1.Args[0] {
8303 break
8304 }
8305 x1 := x0.Args[2]
8306 if x1.Op != OpPPC64MOVBstore {
8307 break
8308 }
8309 i1 := x1.AuxInt
8310 if x1.Aux != s {
8311 break
8312 }
8313 _ = x1.Args[2]
8314 if p != x1.Args[0] {
8315 break
8316 }
8317 x1_1 := x1.Args[1]
8318 if x1_1.Op != OpPPC64SRWconst {
8319 break
8320 }
8321 if x1_1.AuxInt != 16 {
8322 break
8323 }
8324 if w != x1_1.Args[0] {
8325 break
8326 }
8327 x2 := x1.Args[2]
8328 if x2.Op != OpPPC64MOVBstore {
8329 break
8330 }
8331 i0 := x2.AuxInt
8332 if x2.Aux != s {
8333 break
8334 }
8335 mem := x2.Args[2]
8336 if p != x2.Args[0] {
8337 break
8338 }
8339 x2_1 := x2.Args[1]
8340 if x2_1.Op != OpPPC64SRWconst {
8341 break
8342 }
8343 if x2_1.AuxInt != 24 {
8344 break
8345 }
8346 if w != x2_1.Args[0] {
8347 break
8348 }
8349 if !(!config.BigEndian && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && clobber(x0) && clobber(x1) && clobber(x2)) {
8350 break
8351 }
8352 v.reset(OpPPC64MOVWBRstore)
8353 v0 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
8354 v0.AuxInt = i0
8355 v0.Aux = s
8356 v0.AddArg(p)
8357 v.AddArg(v0)
8358 v.AddArg(w)
8359 v.AddArg(mem)
8360 return true
8361 }
8362
8363
8364
8365 for {
8366 i1 := v.AuxInt
8367 s := v.Aux
8368 _ = v.Args[2]
8369 p := v.Args[0]
8370 w := v.Args[1]
8371 x0 := v.Args[2]
8372 if x0.Op != OpPPC64MOVBstore {
8373 break
8374 }
8375 i0 := x0.AuxInt
8376 if x0.Aux != s {
8377 break
8378 }
8379 mem := x0.Args[2]
8380 if p != x0.Args[0] {
8381 break
8382 }
8383 x0_1 := x0.Args[1]
8384 if x0_1.Op != OpPPC64SRWconst {
8385 break
8386 }
8387 if x0_1.AuxInt != 8 {
8388 break
8389 }
8390 if w != x0_1.Args[0] {
8391 break
8392 }
8393 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
8394 break
8395 }
8396 v.reset(OpPPC64MOVHBRstore)
8397 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
8398 v0.AuxInt = i0
8399 v0.Aux = s
8400 v0.AddArg(p)
8401 v.AddArg(v0)
8402 v.AddArg(w)
8403 v.AddArg(mem)
8404 return true
8405 }
8406 return false
8407 }
8408 func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool {
8409 b := v.Block
8410 config := b.Func.Config
8411 typ := &b.Func.Config.Types
8412
8413
8414
8415 for {
8416 i7 := v.AuxInt
8417 s := v.Aux
8418 _ = v.Args[2]
8419 p := v.Args[0]
8420 v_1 := v.Args[1]
8421 if v_1.Op != OpPPC64SRDconst {
8422 break
8423 }
8424 if v_1.AuxInt != 56 {
8425 break
8426 }
8427 w := v_1.Args[0]
8428 x0 := v.Args[2]
8429 if x0.Op != OpPPC64MOVBstore {
8430 break
8431 }
8432 i6 := x0.AuxInt
8433 if x0.Aux != s {
8434 break
8435 }
8436 _ = x0.Args[2]
8437 if p != x0.Args[0] {
8438 break
8439 }
8440 x0_1 := x0.Args[1]
8441 if x0_1.Op != OpPPC64SRDconst {
8442 break
8443 }
8444 if x0_1.AuxInt != 48 {
8445 break
8446 }
8447 if w != x0_1.Args[0] {
8448 break
8449 }
8450 x1 := x0.Args[2]
8451 if x1.Op != OpPPC64MOVBstore {
8452 break
8453 }
8454 i5 := x1.AuxInt
8455 if x1.Aux != s {
8456 break
8457 }
8458 _ = x1.Args[2]
8459 if p != x1.Args[0] {
8460 break
8461 }
8462 x1_1 := x1.Args[1]
8463 if x1_1.Op != OpPPC64SRDconst {
8464 break
8465 }
8466 if x1_1.AuxInt != 40 {
8467 break
8468 }
8469 if w != x1_1.Args[0] {
8470 break
8471 }
8472 x2 := x1.Args[2]
8473 if x2.Op != OpPPC64MOVBstore {
8474 break
8475 }
8476 i4 := x2.AuxInt
8477 if x2.Aux != s {
8478 break
8479 }
8480 _ = x2.Args[2]
8481 if p != x2.Args[0] {
8482 break
8483 }
8484 x2_1 := x2.Args[1]
8485 if x2_1.Op != OpPPC64SRDconst {
8486 break
8487 }
8488 if x2_1.AuxInt != 32 {
8489 break
8490 }
8491 if w != x2_1.Args[0] {
8492 break
8493 }
8494 x3 := x2.Args[2]
8495 if x3.Op != OpPPC64MOVWstore {
8496 break
8497 }
8498 i0 := x3.AuxInt
8499 if x3.Aux != s {
8500 break
8501 }
8502 mem := x3.Args[2]
8503 if p != x3.Args[0] {
8504 break
8505 }
8506 if w != x3.Args[1] {
8507 break
8508 }
8509 if !(!config.BigEndian && i0%4 == 0 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3)) {
8510 break
8511 }
8512 v.reset(OpPPC64MOVDstore)
8513 v.AuxInt = i0
8514 v.Aux = s
8515 v.AddArg(p)
8516 v.AddArg(w)
8517 v.AddArg(mem)
8518 return true
8519 }
8520
8521
8522
8523 for {
8524 i7 := v.AuxInt
8525 s := v.Aux
8526 _ = v.Args[2]
8527 p := v.Args[0]
8528 w := v.Args[1]
8529 x0 := v.Args[2]
8530 if x0.Op != OpPPC64MOVBstore {
8531 break
8532 }
8533 i6 := x0.AuxInt
8534 if x0.Aux != s {
8535 break
8536 }
8537 _ = x0.Args[2]
8538 if p != x0.Args[0] {
8539 break
8540 }
8541 x0_1 := x0.Args[1]
8542 if x0_1.Op != OpPPC64SRDconst {
8543 break
8544 }
8545 if x0_1.AuxInt != 8 {
8546 break
8547 }
8548 if w != x0_1.Args[0] {
8549 break
8550 }
8551 x1 := x0.Args[2]
8552 if x1.Op != OpPPC64MOVBstore {
8553 break
8554 }
8555 i5 := x1.AuxInt
8556 if x1.Aux != s {
8557 break
8558 }
8559 _ = x1.Args[2]
8560 if p != x1.Args[0] {
8561 break
8562 }
8563 x1_1 := x1.Args[1]
8564 if x1_1.Op != OpPPC64SRDconst {
8565 break
8566 }
8567 if x1_1.AuxInt != 16 {
8568 break
8569 }
8570 if w != x1_1.Args[0] {
8571 break
8572 }
8573 x2 := x1.Args[2]
8574 if x2.Op != OpPPC64MOVBstore {
8575 break
8576 }
8577 i4 := x2.AuxInt
8578 if x2.Aux != s {
8579 break
8580 }
8581 _ = x2.Args[2]
8582 if p != x2.Args[0] {
8583 break
8584 }
8585 x2_1 := x2.Args[1]
8586 if x2_1.Op != OpPPC64SRDconst {
8587 break
8588 }
8589 if x2_1.AuxInt != 24 {
8590 break
8591 }
8592 if w != x2_1.Args[0] {
8593 break
8594 }
8595 x3 := x2.Args[2]
8596 if x3.Op != OpPPC64MOVBstore {
8597 break
8598 }
8599 i3 := x3.AuxInt
8600 if x3.Aux != s {
8601 break
8602 }
8603 _ = x3.Args[2]
8604 if p != x3.Args[0] {
8605 break
8606 }
8607 x3_1 := x3.Args[1]
8608 if x3_1.Op != OpPPC64SRDconst {
8609 break
8610 }
8611 if x3_1.AuxInt != 32 {
8612 break
8613 }
8614 if w != x3_1.Args[0] {
8615 break
8616 }
8617 x4 := x3.Args[2]
8618 if x4.Op != OpPPC64MOVBstore {
8619 break
8620 }
8621 i2 := x4.AuxInt
8622 if x4.Aux != s {
8623 break
8624 }
8625 _ = x4.Args[2]
8626 if p != x4.Args[0] {
8627 break
8628 }
8629 x4_1 := x4.Args[1]
8630 if x4_1.Op != OpPPC64SRDconst {
8631 break
8632 }
8633 if x4_1.AuxInt != 40 {
8634 break
8635 }
8636 if w != x4_1.Args[0] {
8637 break
8638 }
8639 x5 := x4.Args[2]
8640 if x5.Op != OpPPC64MOVBstore {
8641 break
8642 }
8643 i1 := x5.AuxInt
8644 if x5.Aux != s {
8645 break
8646 }
8647 _ = x5.Args[2]
8648 if p != x5.Args[0] {
8649 break
8650 }
8651 x5_1 := x5.Args[1]
8652 if x5_1.Op != OpPPC64SRDconst {
8653 break
8654 }
8655 if x5_1.AuxInt != 48 {
8656 break
8657 }
8658 if w != x5_1.Args[0] {
8659 break
8660 }
8661 x6 := x5.Args[2]
8662 if x6.Op != OpPPC64MOVBstore {
8663 break
8664 }
8665 i0 := x6.AuxInt
8666 if x6.Aux != s {
8667 break
8668 }
8669 mem := x6.Args[2]
8670 if p != x6.Args[0] {
8671 break
8672 }
8673 x6_1 := x6.Args[1]
8674 if x6_1.Op != OpPPC64SRDconst {
8675 break
8676 }
8677 if x6_1.AuxInt != 56 {
8678 break
8679 }
8680 if w != x6_1.Args[0] {
8681 break
8682 }
8683 if !(!config.BigEndian && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) {
8684 break
8685 }
8686 v.reset(OpPPC64MOVDBRstore)
8687 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
8688 v0.AuxInt = i0
8689 v0.Aux = s
8690 v0.AddArg(p)
8691 v.AddArg(v0)
8692 v.AddArg(w)
8693 v.AddArg(mem)
8694 return true
8695 }
8696 return false
8697 }
8698 func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool {
8699 b := v.Block
8700 typ := &b.Func.Config.Types
8701
8702
8703
8704 for {
8705 mem := v.Args[3]
8706 ptr := v.Args[0]
8707 v_1 := v.Args[1]
8708 if v_1.Op != OpPPC64MOVDconst {
8709 break
8710 }
8711 c := v_1.AuxInt
8712 val := v.Args[2]
8713 if !(is16Bit(c)) {
8714 break
8715 }
8716 v.reset(OpPPC64MOVBstore)
8717 v.AuxInt = c
8718 v.AddArg(ptr)
8719 v.AddArg(val)
8720 v.AddArg(mem)
8721 return true
8722 }
8723
8724
8725
8726 for {
8727 mem := v.Args[3]
8728 v_0 := v.Args[0]
8729 if v_0.Op != OpPPC64MOVDconst {
8730 break
8731 }
8732 c := v_0.AuxInt
8733 ptr := v.Args[1]
8734 val := v.Args[2]
8735 if !(is16Bit(c)) {
8736 break
8737 }
8738 v.reset(OpPPC64MOVBstore)
8739 v.AuxInt = c
8740 v.AddArg(ptr)
8741 v.AddArg(val)
8742 v.AddArg(mem)
8743 return true
8744 }
8745
8746
8747
8748 for {
8749 off := v.AuxInt
8750 sym := v.Aux
8751 mem := v.Args[3]
8752 ptr := v.Args[0]
8753 idx := v.Args[1]
8754 v_2 := v.Args[2]
8755 if v_2.Op != OpPPC64MOVBreg {
8756 break
8757 }
8758 x := v_2.Args[0]
8759 v.reset(OpPPC64MOVBstoreidx)
8760 v.AuxInt = off
8761 v.Aux = sym
8762 v.AddArg(ptr)
8763 v.AddArg(idx)
8764 v.AddArg(x)
8765 v.AddArg(mem)
8766 return true
8767 }
8768
8769
8770
8771 for {
8772 off := v.AuxInt
8773 sym := v.Aux
8774 mem := v.Args[3]
8775 ptr := v.Args[0]
8776 idx := v.Args[1]
8777 v_2 := v.Args[2]
8778 if v_2.Op != OpPPC64MOVBZreg {
8779 break
8780 }
8781 x := v_2.Args[0]
8782 v.reset(OpPPC64MOVBstoreidx)
8783 v.AuxInt = off
8784 v.Aux = sym
8785 v.AddArg(ptr)
8786 v.AddArg(idx)
8787 v.AddArg(x)
8788 v.AddArg(mem)
8789 return true
8790 }
8791
8792
8793
8794 for {
8795 off := v.AuxInt
8796 sym := v.Aux
8797 mem := v.Args[3]
8798 ptr := v.Args[0]
8799 idx := v.Args[1]
8800 v_2 := v.Args[2]
8801 if v_2.Op != OpPPC64MOVHreg {
8802 break
8803 }
8804 x := v_2.Args[0]
8805 v.reset(OpPPC64MOVBstoreidx)
8806 v.AuxInt = off
8807 v.Aux = sym
8808 v.AddArg(ptr)
8809 v.AddArg(idx)
8810 v.AddArg(x)
8811 v.AddArg(mem)
8812 return true
8813 }
8814
8815
8816
8817 for {
8818 off := v.AuxInt
8819 sym := v.Aux
8820 mem := v.Args[3]
8821 ptr := v.Args[0]
8822 idx := v.Args[1]
8823 v_2 := v.Args[2]
8824 if v_2.Op != OpPPC64MOVHZreg {
8825 break
8826 }
8827 x := v_2.Args[0]
8828 v.reset(OpPPC64MOVBstoreidx)
8829 v.AuxInt = off
8830 v.Aux = sym
8831 v.AddArg(ptr)
8832 v.AddArg(idx)
8833 v.AddArg(x)
8834 v.AddArg(mem)
8835 return true
8836 }
8837
8838
8839
8840 for {
8841 off := v.AuxInt
8842 sym := v.Aux
8843 mem := v.Args[3]
8844 ptr := v.Args[0]
8845 idx := v.Args[1]
8846 v_2 := v.Args[2]
8847 if v_2.Op != OpPPC64MOVWreg {
8848 break
8849 }
8850 x := v_2.Args[0]
8851 v.reset(OpPPC64MOVBstoreidx)
8852 v.AuxInt = off
8853 v.Aux = sym
8854 v.AddArg(ptr)
8855 v.AddArg(idx)
8856 v.AddArg(x)
8857 v.AddArg(mem)
8858 return true
8859 }
8860
8861
8862
8863 for {
8864 off := v.AuxInt
8865 sym := v.Aux
8866 mem := v.Args[3]
8867 ptr := v.Args[0]
8868 idx := v.Args[1]
8869 v_2 := v.Args[2]
8870 if v_2.Op != OpPPC64MOVWZreg {
8871 break
8872 }
8873 x := v_2.Args[0]
8874 v.reset(OpPPC64MOVBstoreidx)
8875 v.AuxInt = off
8876 v.Aux = sym
8877 v.AddArg(ptr)
8878 v.AddArg(idx)
8879 v.AddArg(x)
8880 v.AddArg(mem)
8881 return true
8882 }
8883
8884
8885
8886 for {
8887 off := v.AuxInt
8888 sym := v.Aux
8889 mem := v.Args[3]
8890 ptr := v.Args[0]
8891 idx := v.Args[1]
8892 v_2 := v.Args[2]
8893 if v_2.Op != OpPPC64SRWconst {
8894 break
8895 }
8896 c := v_2.AuxInt
8897 v_2_0 := v_2.Args[0]
8898 if v_2_0.Op != OpPPC64MOVHreg {
8899 break
8900 }
8901 x := v_2_0.Args[0]
8902 if !(c <= 8) {
8903 break
8904 }
8905 v.reset(OpPPC64MOVBstoreidx)
8906 v.AuxInt = off
8907 v.Aux = sym
8908 v.AddArg(ptr)
8909 v.AddArg(idx)
8910 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8911 v0.AuxInt = c
8912 v0.AddArg(x)
8913 v.AddArg(v0)
8914 v.AddArg(mem)
8915 return true
8916 }
8917
8918
8919
8920 for {
8921 off := v.AuxInt
8922 sym := v.Aux
8923 mem := v.Args[3]
8924 ptr := v.Args[0]
8925 idx := v.Args[1]
8926 v_2 := v.Args[2]
8927 if v_2.Op != OpPPC64SRWconst {
8928 break
8929 }
8930 c := v_2.AuxInt
8931 v_2_0 := v_2.Args[0]
8932 if v_2_0.Op != OpPPC64MOVHZreg {
8933 break
8934 }
8935 x := v_2_0.Args[0]
8936 if !(c <= 8) {
8937 break
8938 }
8939 v.reset(OpPPC64MOVBstoreidx)
8940 v.AuxInt = off
8941 v.Aux = sym
8942 v.AddArg(ptr)
8943 v.AddArg(idx)
8944 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8945 v0.AuxInt = c
8946 v0.AddArg(x)
8947 v.AddArg(v0)
8948 v.AddArg(mem)
8949 return true
8950 }
8951 return false
8952 }
8953 func rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v *Value) bool {
8954 b := v.Block
8955 typ := &b.Func.Config.Types
8956
8957
8958
8959 for {
8960 off := v.AuxInt
8961 sym := v.Aux
8962 mem := v.Args[3]
8963 ptr := v.Args[0]
8964 idx := v.Args[1]
8965 v_2 := v.Args[2]
8966 if v_2.Op != OpPPC64SRWconst {
8967 break
8968 }
8969 c := v_2.AuxInt
8970 v_2_0 := v_2.Args[0]
8971 if v_2_0.Op != OpPPC64MOVWreg {
8972 break
8973 }
8974 x := v_2_0.Args[0]
8975 if !(c <= 24) {
8976 break
8977 }
8978 v.reset(OpPPC64MOVBstoreidx)
8979 v.AuxInt = off
8980 v.Aux = sym
8981 v.AddArg(ptr)
8982 v.AddArg(idx)
8983 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
8984 v0.AuxInt = c
8985 v0.AddArg(x)
8986 v.AddArg(v0)
8987 v.AddArg(mem)
8988 return true
8989 }
8990
8991
8992
8993 for {
8994 off := v.AuxInt
8995 sym := v.Aux
8996 mem := v.Args[3]
8997 ptr := v.Args[0]
8998 idx := v.Args[1]
8999 v_2 := v.Args[2]
9000 if v_2.Op != OpPPC64SRWconst {
9001 break
9002 }
9003 c := v_2.AuxInt
9004 v_2_0 := v_2.Args[0]
9005 if v_2_0.Op != OpPPC64MOVWZreg {
9006 break
9007 }
9008 x := v_2_0.Args[0]
9009 if !(c <= 24) {
9010 break
9011 }
9012 v.reset(OpPPC64MOVBstoreidx)
9013 v.AuxInt = off
9014 v.Aux = sym
9015 v.AddArg(ptr)
9016 v.AddArg(idx)
9017 v0 := b.NewValue0(v.Pos, OpPPC64SRWconst, typ.UInt32)
9018 v0.AuxInt = c
9019 v0.AddArg(x)
9020 v.AddArg(v0)
9021 v.AddArg(mem)
9022 return true
9023 }
9024 return false
9025 }
9026 func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool {
9027
9028
9029
9030 for {
9031 off1 := v.AuxInt
9032 sym := v.Aux
9033 mem := v.Args[1]
9034 v_0 := v.Args[0]
9035 if v_0.Op != OpPPC64ADDconst {
9036 break
9037 }
9038 off2 := v_0.AuxInt
9039 x := v_0.Args[0]
9040 if !(is16Bit(off1 + off2)) {
9041 break
9042 }
9043 v.reset(OpPPC64MOVBstorezero)
9044 v.AuxInt = off1 + off2
9045 v.Aux = sym
9046 v.AddArg(x)
9047 v.AddArg(mem)
9048 return true
9049 }
9050
9051
9052
9053 for {
9054 off1 := v.AuxInt
9055 sym1 := v.Aux
9056 mem := v.Args[1]
9057 p := v.Args[0]
9058 if p.Op != OpPPC64MOVDaddr {
9059 break
9060 }
9061 off2 := p.AuxInt
9062 sym2 := p.Aux
9063 x := p.Args[0]
9064 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) {
9065 break
9066 }
9067 v.reset(OpPPC64MOVBstorezero)
9068 v.AuxInt = off1 + off2
9069 v.Aux = mergeSym(sym1, sym2)
9070 v.AddArg(x)
9071 v.AddArg(mem)
9072 return true
9073 }
9074 return false
9075 }
9076 func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool {
9077
9078
9079
9080 for {
9081 off := v.AuxInt
9082 sym := v.Aux
9083 _ = v.Args[1]
9084 ptr := v.Args[0]
9085 v_1 := v.Args[1]
9086 if v_1.Op != OpPPC64FMOVDstore {
9087 break
9088 }
9089 if v_1.AuxInt != off {
9090 break
9091 }
9092 if v_1.Aux != sym {
9093 break
9094 }
9095 _ = v_1.Args[2]
9096 if ptr != v_1.Args[0] {
9097 break
9098 }
9099 x := v_1.Args[1]
9100 v.reset(OpPPC64MFVSRD)
9101 v.AddArg(x)
9102 return true
9103 }
9104
9105
9106
9107 for {
9108 off1 := v.AuxInt
9109 sym1 := v.Aux
9110 mem := v.Args[1]
9111 p := v.Args[0]
9112 if p.Op != OpPPC64MOVDaddr {
9113 break
9114 }
9115 off2 := p.AuxInt
9116 sym2 := p.Aux
9117 ptr := p.Args[0]
9118 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
9119 break
9120 }
9121 v.reset(OpPPC64MOVDload)
9122 v.AuxInt = off1 + off2
9123 v.Aux = mergeSym(sym1, sym2)
9124 v.AddArg(ptr)
9125 v.AddArg(mem)
9126 return true
9127 }
9128
9129
9130
9131 for {
9132 off1 := v.AuxInt
9133 sym := v.Aux
9134 mem := v.Args[1]
9135 v_0 := v.Args[0]
9136 if v_0.Op != OpPPC64ADDconst {
9137 break
9138 }
9139 off2 := v_0.AuxInt
9140 x := v_0.Args[0]
9141 if !(is16Bit(off1 + off2)) {
9142 break
9143 }
9144 v.reset(OpPPC64MOVDload)
9145 v.AuxInt = off1 + off2
9146 v.Aux = sym
9147 v.AddArg(x)
9148 v.AddArg(mem)
9149 return true
9150 }
9151
9152
9153
9154 for {
9155 if v.AuxInt != 0 {
9156 break
9157 }
9158 sym := v.Aux
9159 mem := v.Args[1]
9160 p := v.Args[0]
9161 if p.Op != OpPPC64ADD {
9162 break
9163 }
9164 idx := p.Args[1]
9165 ptr := p.Args[0]
9166 if !(sym == nil && p.Uses == 1) {
9167 break
9168 }
9169 v.reset(OpPPC64MOVDloadidx)
9170 v.AddArg(ptr)
9171 v.AddArg(idx)
9172 v.AddArg(mem)
9173 return true
9174 }
9175 return false
9176 }
9177 func rewriteValuePPC64_OpPPC64MOVDloadidx_0(v *Value) bool {
9178
9179
9180
9181 for {
9182 mem := v.Args[2]
9183 ptr := v.Args[0]
9184 v_1 := v.Args[1]
9185 if v_1.Op != OpPPC64MOVDconst {
9186 break
9187 }
9188 c := v_1.AuxInt
9189 if !(is16Bit(c)) {
9190 break
9191 }
9192 v.reset(OpPPC64MOVDload)
9193 v.AuxInt = c
9194 v.AddArg(ptr)
9195 v.AddArg(mem)
9196 return true
9197 }
9198
9199
9200
9201 for {
9202 mem := v.Args[2]
9203 v_0 := v.Args[0]
9204 if v_0.Op != OpPPC64MOVDconst {
9205 break
9206 }
9207 c := v_0.AuxInt
9208 ptr := v.Args[1]
9209 if !(is16Bit(c)) {
9210 break
9211 }
9212 v.reset(OpPPC64MOVDload)
9213 v.AuxInt = c
9214 v.AddArg(ptr)
9215 v.AddArg(mem)
9216 return true
9217 }
9218 return false
9219 }
9220 func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool {
9221
9222
9223
9224 for {
9225 off := v.AuxInt
9226 sym := v.Aux
9227 mem := v.Args[2]
9228 ptr := v.Args[0]
9229 v_1 := v.Args[1]
9230 if v_1.Op != OpPPC64MFVSRD {
9231 break
9232 }
9233 x := v_1.Args[0]
9234 v.reset(OpPPC64FMOVDstore)
9235 v.AuxInt = off
9236 v.Aux = sym
9237 v.AddArg(ptr)
9238 v.AddArg(x)
9239 v.AddArg(mem)
9240 return true
9241 }
9242
9243
9244
9245 for {
9246 off1 := v.AuxInt
9247 sym := v.Aux
9248 mem := v.Args[2]
9249 v_0 := v.Args[0]
9250 if v_0.Op != OpPPC64ADDconst {
9251 break
9252 }
9253 off2 := v_0.AuxInt
9254 x := v_0.Args[0]
9255 val := v.Args[1]
9256 if !(is16Bit(off1 + off2)) {
9257 break
9258 }
9259 v.reset(OpPPC64MOVDstore)
9260 v.AuxInt = off1 + off2
9261 v.Aux = sym
9262 v.AddArg(x)
9263 v.AddArg(val)
9264 v.AddArg(mem)
9265 return true
9266 }
9267
9268
9269
9270 for {
9271 off1 := v.AuxInt
9272 sym1 := v.Aux
9273 mem := v.Args[2]
9274 p := v.Args[0]
9275 if p.Op != OpPPC64MOVDaddr {
9276 break
9277 }
9278 off2 := p.AuxInt
9279 sym2 := p.Aux
9280 ptr := p.Args[0]
9281 val := v.Args[1]
9282 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
9283 break
9284 }
9285 v.reset(OpPPC64MOVDstore)
9286 v.AuxInt = off1 + off2
9287 v.Aux = mergeSym(sym1, sym2)
9288 v.AddArg(ptr)
9289 v.AddArg(val)
9290 v.AddArg(mem)
9291 return true
9292 }
9293
9294
9295
9296 for {
9297 off := v.AuxInt
9298 sym := v.Aux
9299 mem := v.Args[2]
9300 ptr := v.Args[0]
9301 v_1 := v.Args[1]
9302 if v_1.Op != OpPPC64MOVDconst {
9303 break
9304 }
9305 if v_1.AuxInt != 0 {
9306 break
9307 }
9308 v.reset(OpPPC64MOVDstorezero)
9309 v.AuxInt = off
9310 v.Aux = sym
9311 v.AddArg(ptr)
9312 v.AddArg(mem)
9313 return true
9314 }
9315
9316
9317
9318 for {
9319 off := v.AuxInt
9320 sym := v.Aux
9321 mem := v.Args[2]
9322 p := v.Args[0]
9323 if p.Op != OpPPC64ADD {
9324 break
9325 }
9326 idx := p.Args[1]
9327 ptr := p.Args[0]
9328 val := v.Args[1]
9329 if !(off == 0 && sym == nil && p.Uses == 1) {
9330 break
9331 }
9332 v.reset(OpPPC64MOVDstoreidx)
9333 v.AddArg(ptr)
9334 v.AddArg(idx)
9335 v.AddArg(val)
9336 v.AddArg(mem)
9337 return true
9338 }
9339 return false
9340 }
9341 func rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v *Value) bool {
9342
9343
9344
9345 for {
9346 mem := v.Args[3]
9347 ptr := v.Args[0]
9348 v_1 := v.Args[1]
9349 if v_1.Op != OpPPC64MOVDconst {
9350 break
9351 }
9352 c := v_1.AuxInt
9353 val := v.Args[2]
9354 if !(is16Bit(c)) {
9355 break
9356 }
9357 v.reset(OpPPC64MOVDstore)
9358 v.AuxInt = c
9359 v.AddArg(ptr)
9360 v.AddArg(val)
9361 v.AddArg(mem)
9362 return true
9363 }
9364
9365
9366
9367 for {
9368 mem := v.Args[3]
9369 v_0 := v.Args[0]
9370 if v_0.Op != OpPPC64MOVDconst {
9371 break
9372 }
9373 c := v_0.AuxInt
9374 ptr := v.Args[1]
9375 val := v.Args[2]
9376 if !(is16Bit(c)) {
9377 break
9378 }
9379 v.reset(OpPPC64MOVDstore)
9380 v.AuxInt = c
9381 v.AddArg(ptr)
9382 v.AddArg(val)
9383 v.AddArg(mem)
9384 return true
9385 }
9386 return false
9387 }
9388 func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool {
9389
9390
9391
9392 for {
9393 off1 := v.AuxInt
9394 sym := v.Aux
9395 mem := v.Args[1]
9396 v_0 := v.Args[0]
9397 if v_0.Op != OpPPC64ADDconst {
9398 break
9399 }
9400 off2 := v_0.AuxInt
9401 x := v_0.Args[0]
9402 if !(is16Bit(off1 + off2)) {
9403 break
9404 }
9405 v.reset(OpPPC64MOVDstorezero)
9406 v.AuxInt = off1 + off2
9407 v.Aux = sym
9408 v.AddArg(x)
9409 v.AddArg(mem)
9410 return true
9411 }
9412
9413
9414
9415 for {
9416 off1 := v.AuxInt
9417 sym1 := v.Aux
9418 mem := v.Args[1]
9419 p := v.Args[0]
9420 if p.Op != OpPPC64MOVDaddr {
9421 break
9422 }
9423 off2 := p.AuxInt
9424 sym2 := p.Aux
9425 x := p.Args[0]
9426 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) {
9427 break
9428 }
9429 v.reset(OpPPC64MOVDstorezero)
9430 v.AuxInt = off1 + off2
9431 v.Aux = mergeSym(sym1, sym2)
9432 v.AddArg(x)
9433 v.AddArg(mem)
9434 return true
9435 }
9436 return false
9437 }
9438 func rewriteValuePPC64_OpPPC64MOVHBRstore_0(v *Value) bool {
9439
9440
9441
9442 for {
9443 sym := v.Aux
9444 mem := v.Args[2]
9445 ptr := v.Args[0]
9446 v_1 := v.Args[1]
9447 if v_1.Op != OpPPC64MOVHreg {
9448 break
9449 }
9450 x := v_1.Args[0]
9451 v.reset(OpPPC64MOVHBRstore)
9452 v.Aux = sym
9453 v.AddArg(ptr)
9454 v.AddArg(x)
9455 v.AddArg(mem)
9456 return true
9457 }
9458
9459
9460
9461 for {
9462 sym := v.Aux
9463 mem := v.Args[2]
9464 ptr := v.Args[0]
9465 v_1 := v.Args[1]
9466 if v_1.Op != OpPPC64MOVHZreg {
9467 break
9468 }
9469 x := v_1.Args[0]
9470 v.reset(OpPPC64MOVHBRstore)
9471 v.Aux = sym
9472 v.AddArg(ptr)
9473 v.AddArg(x)
9474 v.AddArg(mem)
9475 return true
9476 }
9477
9478
9479
9480 for {
9481 sym := v.Aux
9482 mem := v.Args[2]
9483 ptr := v.Args[0]
9484 v_1 := v.Args[1]
9485 if v_1.Op != OpPPC64MOVWreg {
9486 break
9487 }
9488 x := v_1.Args[0]
9489 v.reset(OpPPC64MOVHBRstore)
9490 v.Aux = sym
9491 v.AddArg(ptr)
9492 v.AddArg(x)
9493 v.AddArg(mem)
9494 return true
9495 }
9496
9497
9498
9499 for {
9500 sym := v.Aux
9501 mem := v.Args[2]
9502 ptr := v.Args[0]
9503 v_1 := v.Args[1]
9504 if v_1.Op != OpPPC64MOVWZreg {
9505 break
9506 }
9507 x := v_1.Args[0]
9508 v.reset(OpPPC64MOVHBRstore)
9509 v.Aux = sym
9510 v.AddArg(ptr)
9511 v.AddArg(x)
9512 v.AddArg(mem)
9513 return true
9514 }
9515 return false
9516 }
9517 func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool {
9518
9519
9520
9521 for {
9522 off1 := v.AuxInt
9523 sym1 := v.Aux
9524 mem := v.Args[1]
9525 p := v.Args[0]
9526 if p.Op != OpPPC64MOVDaddr {
9527 break
9528 }
9529 off2 := p.AuxInt
9530 sym2 := p.Aux
9531 ptr := p.Args[0]
9532 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
9533 break
9534 }
9535 v.reset(OpPPC64MOVHZload)
9536 v.AuxInt = off1 + off2
9537 v.Aux = mergeSym(sym1, sym2)
9538 v.AddArg(ptr)
9539 v.AddArg(mem)
9540 return true
9541 }
9542
9543
9544
9545 for {
9546 off1 := v.AuxInt
9547 sym := v.Aux
9548 mem := v.Args[1]
9549 v_0 := v.Args[0]
9550 if v_0.Op != OpPPC64ADDconst {
9551 break
9552 }
9553 off2 := v_0.AuxInt
9554 x := v_0.Args[0]
9555 if !(is16Bit(off1 + off2)) {
9556 break
9557 }
9558 v.reset(OpPPC64MOVHZload)
9559 v.AuxInt = off1 + off2
9560 v.Aux = sym
9561 v.AddArg(x)
9562 v.AddArg(mem)
9563 return true
9564 }
9565
9566
9567
9568 for {
9569 if v.AuxInt != 0 {
9570 break
9571 }
9572 sym := v.Aux
9573 mem := v.Args[1]
9574 p := v.Args[0]
9575 if p.Op != OpPPC64ADD {
9576 break
9577 }
9578 idx := p.Args[1]
9579 ptr := p.Args[0]
9580 if !(sym == nil && p.Uses == 1) {
9581 break
9582 }
9583 v.reset(OpPPC64MOVHZloadidx)
9584 v.AddArg(ptr)
9585 v.AddArg(idx)
9586 v.AddArg(mem)
9587 return true
9588 }
9589 return false
9590 }
9591 func rewriteValuePPC64_OpPPC64MOVHZloadidx_0(v *Value) bool {
9592
9593
9594
9595 for {
9596 mem := v.Args[2]
9597 ptr := v.Args[0]
9598 v_1 := v.Args[1]
9599 if v_1.Op != OpPPC64MOVDconst {
9600 break
9601 }
9602 c := v_1.AuxInt
9603 if !(is16Bit(c)) {
9604 break
9605 }
9606 v.reset(OpPPC64MOVHZload)
9607 v.AuxInt = c
9608 v.AddArg(ptr)
9609 v.AddArg(mem)
9610 return true
9611 }
9612
9613
9614
9615 for {
9616 mem := v.Args[2]
9617 v_0 := v.Args[0]
9618 if v_0.Op != OpPPC64MOVDconst {
9619 break
9620 }
9621 c := v_0.AuxInt
9622 ptr := v.Args[1]
9623 if !(is16Bit(c)) {
9624 break
9625 }
9626 v.reset(OpPPC64MOVHZload)
9627 v.AuxInt = c
9628 v.AddArg(ptr)
9629 v.AddArg(mem)
9630 return true
9631 }
9632 return false
9633 }
9634 func rewriteValuePPC64_OpPPC64MOVHZreg_0(v *Value) bool {
9635 b := v.Block
9636 typ := &b.Func.Config.Types
9637
9638
9639
9640 for {
9641 y := v.Args[0]
9642 if y.Op != OpPPC64ANDconst {
9643 break
9644 }
9645 c := y.AuxInt
9646 if !(uint64(c) <= 0xFFFF) {
9647 break
9648 }
9649 v.reset(OpCopy)
9650 v.Type = y.Type
9651 v.AddArg(y)
9652 return true
9653 }
9654
9655
9656
9657 for {
9658 v_0 := v.Args[0]
9659 if v_0.Op != OpPPC64SRWconst {
9660 break
9661 }
9662 c := v_0.AuxInt
9663 v_0_0 := v_0.Args[0]
9664 if v_0_0.Op != OpPPC64MOVBZreg {
9665 break
9666 }
9667 x := v_0_0.Args[0]
9668 v.reset(OpPPC64SRWconst)
9669 v.AuxInt = c
9670 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
9671 v0.AddArg(x)
9672 v.AddArg(v0)
9673 return true
9674 }
9675
9676
9677
9678 for {
9679 v_0 := v.Args[0]
9680 if v_0.Op != OpPPC64SRWconst {
9681 break
9682 }
9683 c := v_0.AuxInt
9684 v_0_0 := v_0.Args[0]
9685 if v_0_0.Op != OpPPC64MOVHZreg {
9686 break
9687 }
9688 x := v_0_0.Args[0]
9689 v.reset(OpPPC64SRWconst)
9690 v.AuxInt = c
9691 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
9692 v0.AddArg(x)
9693 v.AddArg(v0)
9694 return true
9695 }
9696
9697
9698
9699 for {
9700 v_0 := v.Args[0]
9701 if v_0.Op != OpPPC64SRWconst {
9702 break
9703 }
9704 c := v_0.AuxInt
9705 x := v_0.Args[0]
9706 if !(sizeof(x.Type) <= 16) {
9707 break
9708 }
9709 v.reset(OpPPC64SRWconst)
9710 v.AuxInt = c
9711 v.AddArg(x)
9712 return true
9713 }
9714
9715
9716
9717 for {
9718 v_0 := v.Args[0]
9719 if v_0.Op != OpPPC64SRDconst {
9720 break
9721 }
9722 c := v_0.AuxInt
9723 x := v_0.Args[0]
9724 if !(c >= 48) {
9725 break
9726 }
9727 v.reset(OpPPC64SRDconst)
9728 v.AuxInt = c
9729 v.AddArg(x)
9730 return true
9731 }
9732
9733
9734
9735 for {
9736 v_0 := v.Args[0]
9737 if v_0.Op != OpPPC64SRWconst {
9738 break
9739 }
9740 c := v_0.AuxInt
9741 x := v_0.Args[0]
9742 if !(c >= 16) {
9743 break
9744 }
9745 v.reset(OpPPC64SRWconst)
9746 v.AuxInt = c
9747 v.AddArg(x)
9748 return true
9749 }
9750
9751
9752
9753 for {
9754 y := v.Args[0]
9755 if y.Op != OpPPC64MOVHZreg {
9756 break
9757 }
9758 v.reset(OpCopy)
9759 v.Type = y.Type
9760 v.AddArg(y)
9761 return true
9762 }
9763
9764
9765
9766 for {
9767 y := v.Args[0]
9768 if y.Op != OpPPC64MOVBZreg {
9769 break
9770 }
9771 v.reset(OpCopy)
9772 v.Type = y.Type
9773 v.AddArg(y)
9774 return true
9775 }
9776
9777
9778
9779 for {
9780 y := v.Args[0]
9781 if y.Op != OpPPC64MOVHBRload {
9782 break
9783 }
9784 _ = y.Args[1]
9785 v.reset(OpCopy)
9786 v.Type = y.Type
9787 v.AddArg(y)
9788 return true
9789 }
9790
9791
9792
9793 for {
9794 y := v.Args[0]
9795 if y.Op != OpPPC64MOVHreg {
9796 break
9797 }
9798 x := y.Args[0]
9799 v.reset(OpPPC64MOVHZreg)
9800 v.AddArg(x)
9801 return true
9802 }
9803 return false
9804 }
9805 func rewriteValuePPC64_OpPPC64MOVHZreg_10(v *Value) bool {
9806
9807
9808
9809 for {
9810 x := v.Args[0]
9811 if x.Op != OpPPC64MOVBZload {
9812 break
9813 }
9814 _ = x.Args[1]
9815 v.reset(OpCopy)
9816 v.Type = x.Type
9817 v.AddArg(x)
9818 return true
9819 }
9820
9821
9822
9823 for {
9824 x := v.Args[0]
9825 if x.Op != OpPPC64MOVBZloadidx {
9826 break
9827 }
9828 _ = x.Args[2]
9829 v.reset(OpCopy)
9830 v.Type = x.Type
9831 v.AddArg(x)
9832 return true
9833 }
9834
9835
9836
9837 for {
9838 x := v.Args[0]
9839 if x.Op != OpPPC64MOVHZload {
9840 break
9841 }
9842 _ = x.Args[1]
9843 v.reset(OpCopy)
9844 v.Type = x.Type
9845 v.AddArg(x)
9846 return true
9847 }
9848
9849
9850
9851 for {
9852 x := v.Args[0]
9853 if x.Op != OpPPC64MOVHZloadidx {
9854 break
9855 }
9856 _ = x.Args[2]
9857 v.reset(OpCopy)
9858 v.Type = x.Type
9859 v.AddArg(x)
9860 return true
9861 }
9862
9863
9864
9865 for {
9866 x := v.Args[0]
9867 if x.Op != OpArg {
9868 break
9869 }
9870 t := x.Type
9871 if !((is8BitInt(t) || is16BitInt(t)) && !isSigned(t)) {
9872 break
9873 }
9874 v.reset(OpCopy)
9875 v.Type = x.Type
9876 v.AddArg(x)
9877 return true
9878 }
9879
9880
9881
9882 for {
9883 v_0 := v.Args[0]
9884 if v_0.Op != OpPPC64MOVDconst {
9885 break
9886 }
9887 c := v_0.AuxInt
9888 v.reset(OpPPC64MOVDconst)
9889 v.AuxInt = int64(uint16(c))
9890 return true
9891 }
9892 return false
9893 }
9894 func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool {
9895
9896
9897
9898 for {
9899 off1 := v.AuxInt
9900 sym1 := v.Aux
9901 mem := v.Args[1]
9902 p := v.Args[0]
9903 if p.Op != OpPPC64MOVDaddr {
9904 break
9905 }
9906 off2 := p.AuxInt
9907 sym2 := p.Aux
9908 ptr := p.Args[0]
9909 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
9910 break
9911 }
9912 v.reset(OpPPC64MOVHload)
9913 v.AuxInt = off1 + off2
9914 v.Aux = mergeSym(sym1, sym2)
9915 v.AddArg(ptr)
9916 v.AddArg(mem)
9917 return true
9918 }
9919
9920
9921
9922 for {
9923 off1 := v.AuxInt
9924 sym := v.Aux
9925 mem := v.Args[1]
9926 v_0 := v.Args[0]
9927 if v_0.Op != OpPPC64ADDconst {
9928 break
9929 }
9930 off2 := v_0.AuxInt
9931 x := v_0.Args[0]
9932 if !(is16Bit(off1 + off2)) {
9933 break
9934 }
9935 v.reset(OpPPC64MOVHload)
9936 v.AuxInt = off1 + off2
9937 v.Aux = sym
9938 v.AddArg(x)
9939 v.AddArg(mem)
9940 return true
9941 }
9942
9943
9944
9945 for {
9946 if v.AuxInt != 0 {
9947 break
9948 }
9949 sym := v.Aux
9950 mem := v.Args[1]
9951 p := v.Args[0]
9952 if p.Op != OpPPC64ADD {
9953 break
9954 }
9955 idx := p.Args[1]
9956 ptr := p.Args[0]
9957 if !(sym == nil && p.Uses == 1) {
9958 break
9959 }
9960 v.reset(OpPPC64MOVHloadidx)
9961 v.AddArg(ptr)
9962 v.AddArg(idx)
9963 v.AddArg(mem)
9964 return true
9965 }
9966 return false
9967 }
9968 func rewriteValuePPC64_OpPPC64MOVHloadidx_0(v *Value) bool {
9969
9970
9971
9972 for {
9973 mem := v.Args[2]
9974 ptr := v.Args[0]
9975 v_1 := v.Args[1]
9976 if v_1.Op != OpPPC64MOVDconst {
9977 break
9978 }
9979 c := v_1.AuxInt
9980 if !(is16Bit(c)) {
9981 break
9982 }
9983 v.reset(OpPPC64MOVHload)
9984 v.AuxInt = c
9985 v.AddArg(ptr)
9986 v.AddArg(mem)
9987 return true
9988 }
9989
9990
9991
9992 for {
9993 mem := v.Args[2]
9994 v_0 := v.Args[0]
9995 if v_0.Op != OpPPC64MOVDconst {
9996 break
9997 }
9998 c := v_0.AuxInt
9999 ptr := v.Args[1]
10000 if !(is16Bit(c)) {
10001 break
10002 }
10003 v.reset(OpPPC64MOVHload)
10004 v.AuxInt = c
10005 v.AddArg(ptr)
10006 v.AddArg(mem)
10007 return true
10008 }
10009 return false
10010 }
10011 func rewriteValuePPC64_OpPPC64MOVHreg_0(v *Value) bool {
10012 b := v.Block
10013 typ := &b.Func.Config.Types
10014
10015
10016
10017 for {
10018 y := v.Args[0]
10019 if y.Op != OpPPC64ANDconst {
10020 break
10021 }
10022 c := y.AuxInt
10023 if !(uint64(c) <= 0x7FFF) {
10024 break
10025 }
10026 v.reset(OpCopy)
10027 v.Type = y.Type
10028 v.AddArg(y)
10029 return true
10030 }
10031
10032
10033
10034 for {
10035 v_0 := v.Args[0]
10036 if v_0.Op != OpPPC64SRAWconst {
10037 break
10038 }
10039 c := v_0.AuxInt
10040 v_0_0 := v_0.Args[0]
10041 if v_0_0.Op != OpPPC64MOVBreg {
10042 break
10043 }
10044 x := v_0_0.Args[0]
10045 v.reset(OpPPC64SRAWconst)
10046 v.AuxInt = c
10047 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
10048 v0.AddArg(x)
10049 v.AddArg(v0)
10050 return true
10051 }
10052
10053
10054
10055 for {
10056 v_0 := v.Args[0]
10057 if v_0.Op != OpPPC64SRAWconst {
10058 break
10059 }
10060 c := v_0.AuxInt
10061 v_0_0 := v_0.Args[0]
10062 if v_0_0.Op != OpPPC64MOVHreg {
10063 break
10064 }
10065 x := v_0_0.Args[0]
10066 v.reset(OpPPC64SRAWconst)
10067 v.AuxInt = c
10068 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
10069 v0.AddArg(x)
10070 v.AddArg(v0)
10071 return true
10072 }
10073
10074
10075
10076 for {
10077 v_0 := v.Args[0]
10078 if v_0.Op != OpPPC64SRAWconst {
10079 break
10080 }
10081 c := v_0.AuxInt
10082 x := v_0.Args[0]
10083 if !(sizeof(x.Type) <= 16) {
10084 break
10085 }
10086 v.reset(OpPPC64SRAWconst)
10087 v.AuxInt = c
10088 v.AddArg(x)
10089 return true
10090 }
10091
10092
10093
10094 for {
10095 v_0 := v.Args[0]
10096 if v_0.Op != OpPPC64SRDconst {
10097 break
10098 }
10099 c := v_0.AuxInt
10100 x := v_0.Args[0]
10101 if !(c > 48) {
10102 break
10103 }
10104 v.reset(OpPPC64SRDconst)
10105 v.AuxInt = c
10106 v.AddArg(x)
10107 return true
10108 }
10109
10110
10111
10112 for {
10113 v_0 := v.Args[0]
10114 if v_0.Op != OpPPC64SRDconst {
10115 break
10116 }
10117 c := v_0.AuxInt
10118 x := v_0.Args[0]
10119 if !(c == 48) {
10120 break
10121 }
10122 v.reset(OpPPC64SRADconst)
10123 v.AuxInt = c
10124 v.AddArg(x)
10125 return true
10126 }
10127
10128
10129
10130 for {
10131 v_0 := v.Args[0]
10132 if v_0.Op != OpPPC64SRWconst {
10133 break
10134 }
10135 c := v_0.AuxInt
10136 x := v_0.Args[0]
10137 if !(c > 16) {
10138 break
10139 }
10140 v.reset(OpPPC64SRWconst)
10141 v.AuxInt = c
10142 v.AddArg(x)
10143 return true
10144 }
10145
10146
10147
10148 for {
10149 v_0 := v.Args[0]
10150 if v_0.Op != OpPPC64SRWconst {
10151 break
10152 }
10153 c := v_0.AuxInt
10154 x := v_0.Args[0]
10155 if !(c == 16) {
10156 break
10157 }
10158 v.reset(OpPPC64SRAWconst)
10159 v.AuxInt = c
10160 v.AddArg(x)
10161 return true
10162 }
10163
10164
10165
10166 for {
10167 y := v.Args[0]
10168 if y.Op != OpPPC64MOVHreg {
10169 break
10170 }
10171 v.reset(OpCopy)
10172 v.Type = y.Type
10173 v.AddArg(y)
10174 return true
10175 }
10176
10177
10178
10179 for {
10180 y := v.Args[0]
10181 if y.Op != OpPPC64MOVBreg {
10182 break
10183 }
10184 v.reset(OpCopy)
10185 v.Type = y.Type
10186 v.AddArg(y)
10187 return true
10188 }
10189 return false
10190 }
10191 func rewriteValuePPC64_OpPPC64MOVHreg_10(v *Value) bool {
10192
10193
10194
10195 for {
10196 y := v.Args[0]
10197 if y.Op != OpPPC64MOVHZreg {
10198 break
10199 }
10200 x := y.Args[0]
10201 v.reset(OpPPC64MOVHreg)
10202 v.AddArg(x)
10203 return true
10204 }
10205
10206
10207
10208 for {
10209 x := v.Args[0]
10210 if x.Op != OpPPC64MOVHload {
10211 break
10212 }
10213 _ = x.Args[1]
10214 v.reset(OpCopy)
10215 v.Type = x.Type
10216 v.AddArg(x)
10217 return true
10218 }
10219
10220
10221
10222 for {
10223 x := v.Args[0]
10224 if x.Op != OpPPC64MOVHloadidx {
10225 break
10226 }
10227 _ = x.Args[2]
10228 v.reset(OpCopy)
10229 v.Type = x.Type
10230 v.AddArg(x)
10231 return true
10232 }
10233
10234
10235
10236 for {
10237 x := v.Args[0]
10238 if x.Op != OpArg {
10239 break
10240 }
10241 t := x.Type
10242 if !((is8BitInt(t) || is16BitInt(t)) && isSigned(t)) {
10243 break
10244 }
10245 v.reset(OpCopy)
10246 v.Type = x.Type
10247 v.AddArg(x)
10248 return true
10249 }
10250
10251
10252
10253 for {
10254 v_0 := v.Args[0]
10255 if v_0.Op != OpPPC64MOVDconst {
10256 break
10257 }
10258 c := v_0.AuxInt
10259 v.reset(OpPPC64MOVDconst)
10260 v.AuxInt = int64(int16(c))
10261 return true
10262 }
10263 return false
10264 }
10265 func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool {
10266 b := v.Block
10267 config := b.Func.Config
10268
10269
10270
10271 for {
10272 off1 := v.AuxInt
10273 sym := v.Aux
10274 mem := v.Args[2]
10275 v_0 := v.Args[0]
10276 if v_0.Op != OpPPC64ADDconst {
10277 break
10278 }
10279 off2 := v_0.AuxInt
10280 x := v_0.Args[0]
10281 val := v.Args[1]
10282 if !(is16Bit(off1 + off2)) {
10283 break
10284 }
10285 v.reset(OpPPC64MOVHstore)
10286 v.AuxInt = off1 + off2
10287 v.Aux = sym
10288 v.AddArg(x)
10289 v.AddArg(val)
10290 v.AddArg(mem)
10291 return true
10292 }
10293
10294
10295
10296 for {
10297 off1 := v.AuxInt
10298 sym1 := v.Aux
10299 mem := v.Args[2]
10300 p := v.Args[0]
10301 if p.Op != OpPPC64MOVDaddr {
10302 break
10303 }
10304 off2 := p.AuxInt
10305 sym2 := p.Aux
10306 ptr := p.Args[0]
10307 val := v.Args[1]
10308 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
10309 break
10310 }
10311 v.reset(OpPPC64MOVHstore)
10312 v.AuxInt = off1 + off2
10313 v.Aux = mergeSym(sym1, sym2)
10314 v.AddArg(ptr)
10315 v.AddArg(val)
10316 v.AddArg(mem)
10317 return true
10318 }
10319
10320
10321
10322 for {
10323 off := v.AuxInt
10324 sym := v.Aux
10325 mem := v.Args[2]
10326 ptr := v.Args[0]
10327 v_1 := v.Args[1]
10328 if v_1.Op != OpPPC64MOVDconst {
10329 break
10330 }
10331 if v_1.AuxInt != 0 {
10332 break
10333 }
10334 v.reset(OpPPC64MOVHstorezero)
10335 v.AuxInt = off
10336 v.Aux = sym
10337 v.AddArg(ptr)
10338 v.AddArg(mem)
10339 return true
10340 }
10341
10342
10343
10344 for {
10345 off := v.AuxInt
10346 sym := v.Aux
10347 mem := v.Args[2]
10348 p := v.Args[0]
10349 if p.Op != OpPPC64ADD {
10350 break
10351 }
10352 idx := p.Args[1]
10353 ptr := p.Args[0]
10354 val := v.Args[1]
10355 if !(off == 0 && sym == nil && p.Uses == 1) {
10356 break
10357 }
10358 v.reset(OpPPC64MOVHstoreidx)
10359 v.AddArg(ptr)
10360 v.AddArg(idx)
10361 v.AddArg(val)
10362 v.AddArg(mem)
10363 return true
10364 }
10365
10366
10367
10368 for {
10369 off := v.AuxInt
10370 sym := v.Aux
10371 mem := v.Args[2]
10372 ptr := v.Args[0]
10373 v_1 := v.Args[1]
10374 if v_1.Op != OpPPC64MOVHreg {
10375 break
10376 }
10377 x := v_1.Args[0]
10378 v.reset(OpPPC64MOVHstore)
10379 v.AuxInt = off
10380 v.Aux = sym
10381 v.AddArg(ptr)
10382 v.AddArg(x)
10383 v.AddArg(mem)
10384 return true
10385 }
10386
10387
10388
10389 for {
10390 off := v.AuxInt
10391 sym := v.Aux
10392 mem := v.Args[2]
10393 ptr := v.Args[0]
10394 v_1 := v.Args[1]
10395 if v_1.Op != OpPPC64MOVHZreg {
10396 break
10397 }
10398 x := v_1.Args[0]
10399 v.reset(OpPPC64MOVHstore)
10400 v.AuxInt = off
10401 v.Aux = sym
10402 v.AddArg(ptr)
10403 v.AddArg(x)
10404 v.AddArg(mem)
10405 return true
10406 }
10407
10408
10409
10410 for {
10411 off := v.AuxInt
10412 sym := v.Aux
10413 mem := v.Args[2]
10414 ptr := v.Args[0]
10415 v_1 := v.Args[1]
10416 if v_1.Op != OpPPC64MOVWreg {
10417 break
10418 }
10419 x := v_1.Args[0]
10420 v.reset(OpPPC64MOVHstore)
10421 v.AuxInt = off
10422 v.Aux = sym
10423 v.AddArg(ptr)
10424 v.AddArg(x)
10425 v.AddArg(mem)
10426 return true
10427 }
10428
10429
10430
10431 for {
10432 off := v.AuxInt
10433 sym := v.Aux
10434 mem := v.Args[2]
10435 ptr := v.Args[0]
10436 v_1 := v.Args[1]
10437 if v_1.Op != OpPPC64MOVWZreg {
10438 break
10439 }
10440 x := v_1.Args[0]
10441 v.reset(OpPPC64MOVHstore)
10442 v.AuxInt = off
10443 v.Aux = sym
10444 v.AddArg(ptr)
10445 v.AddArg(x)
10446 v.AddArg(mem)
10447 return true
10448 }
10449
10450
10451
10452 for {
10453 i1 := v.AuxInt
10454 s := v.Aux
10455 _ = v.Args[2]
10456 p := v.Args[0]
10457 v_1 := v.Args[1]
10458 if v_1.Op != OpPPC64SRWconst {
10459 break
10460 }
10461 if v_1.AuxInt != 16 {
10462 break
10463 }
10464 w := v_1.Args[0]
10465 x0 := v.Args[2]
10466 if x0.Op != OpPPC64MOVHstore {
10467 break
10468 }
10469 i0 := x0.AuxInt
10470 if x0.Aux != s {
10471 break
10472 }
10473 mem := x0.Args[2]
10474 if p != x0.Args[0] {
10475 break
10476 }
10477 if w != x0.Args[1] {
10478 break
10479 }
10480 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+2 && clobber(x0)) {
10481 break
10482 }
10483 v.reset(OpPPC64MOVWstore)
10484 v.AuxInt = i0
10485 v.Aux = s
10486 v.AddArg(p)
10487 v.AddArg(w)
10488 v.AddArg(mem)
10489 return true
10490 }
10491
10492
10493
10494 for {
10495 i1 := v.AuxInt
10496 s := v.Aux
10497 _ = v.Args[2]
10498 p := v.Args[0]
10499 v_1 := v.Args[1]
10500 if v_1.Op != OpPPC64SRDconst {
10501 break
10502 }
10503 if v_1.AuxInt != 16 {
10504 break
10505 }
10506 w := v_1.Args[0]
10507 x0 := v.Args[2]
10508 if x0.Op != OpPPC64MOVHstore {
10509 break
10510 }
10511 i0 := x0.AuxInt
10512 if x0.Aux != s {
10513 break
10514 }
10515 mem := x0.Args[2]
10516 if p != x0.Args[0] {
10517 break
10518 }
10519 if w != x0.Args[1] {
10520 break
10521 }
10522 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+2 && clobber(x0)) {
10523 break
10524 }
10525 v.reset(OpPPC64MOVWstore)
10526 v.AuxInt = i0
10527 v.Aux = s
10528 v.AddArg(p)
10529 v.AddArg(w)
10530 v.AddArg(mem)
10531 return true
10532 }
10533 return false
10534 }
10535 func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool {
10536
10537
10538
10539 for {
10540 mem := v.Args[3]
10541 ptr := v.Args[0]
10542 v_1 := v.Args[1]
10543 if v_1.Op != OpPPC64MOVDconst {
10544 break
10545 }
10546 c := v_1.AuxInt
10547 val := v.Args[2]
10548 if !(is16Bit(c)) {
10549 break
10550 }
10551 v.reset(OpPPC64MOVHstore)
10552 v.AuxInt = c
10553 v.AddArg(ptr)
10554 v.AddArg(val)
10555 v.AddArg(mem)
10556 return true
10557 }
10558
10559
10560
10561 for {
10562 mem := v.Args[3]
10563 v_0 := v.Args[0]
10564 if v_0.Op != OpPPC64MOVDconst {
10565 break
10566 }
10567 c := v_0.AuxInt
10568 ptr := v.Args[1]
10569 val := v.Args[2]
10570 if !(is16Bit(c)) {
10571 break
10572 }
10573 v.reset(OpPPC64MOVHstore)
10574 v.AuxInt = c
10575 v.AddArg(ptr)
10576 v.AddArg(val)
10577 v.AddArg(mem)
10578 return true
10579 }
10580
10581
10582
10583 for {
10584 off := v.AuxInt
10585 sym := v.Aux
10586 mem := v.Args[3]
10587 ptr := v.Args[0]
10588 idx := v.Args[1]
10589 v_2 := v.Args[2]
10590 if v_2.Op != OpPPC64MOVHreg {
10591 break
10592 }
10593 x := v_2.Args[0]
10594 v.reset(OpPPC64MOVHstoreidx)
10595 v.AuxInt = off
10596 v.Aux = sym
10597 v.AddArg(ptr)
10598 v.AddArg(idx)
10599 v.AddArg(x)
10600 v.AddArg(mem)
10601 return true
10602 }
10603
10604
10605
10606 for {
10607 off := v.AuxInt
10608 sym := v.Aux
10609 mem := v.Args[3]
10610 ptr := v.Args[0]
10611 idx := v.Args[1]
10612 v_2 := v.Args[2]
10613 if v_2.Op != OpPPC64MOVHZreg {
10614 break
10615 }
10616 x := v_2.Args[0]
10617 v.reset(OpPPC64MOVHstoreidx)
10618 v.AuxInt = off
10619 v.Aux = sym
10620 v.AddArg(ptr)
10621 v.AddArg(idx)
10622 v.AddArg(x)
10623 v.AddArg(mem)
10624 return true
10625 }
10626
10627
10628
10629 for {
10630 off := v.AuxInt
10631 sym := v.Aux
10632 mem := v.Args[3]
10633 ptr := v.Args[0]
10634 idx := v.Args[1]
10635 v_2 := v.Args[2]
10636 if v_2.Op != OpPPC64MOVWreg {
10637 break
10638 }
10639 x := v_2.Args[0]
10640 v.reset(OpPPC64MOVHstoreidx)
10641 v.AuxInt = off
10642 v.Aux = sym
10643 v.AddArg(ptr)
10644 v.AddArg(idx)
10645 v.AddArg(x)
10646 v.AddArg(mem)
10647 return true
10648 }
10649
10650
10651
10652 for {
10653 off := v.AuxInt
10654 sym := v.Aux
10655 mem := v.Args[3]
10656 ptr := v.Args[0]
10657 idx := v.Args[1]
10658 v_2 := v.Args[2]
10659 if v_2.Op != OpPPC64MOVWZreg {
10660 break
10661 }
10662 x := v_2.Args[0]
10663 v.reset(OpPPC64MOVHstoreidx)
10664 v.AuxInt = off
10665 v.Aux = sym
10666 v.AddArg(ptr)
10667 v.AddArg(idx)
10668 v.AddArg(x)
10669 v.AddArg(mem)
10670 return true
10671 }
10672 return false
10673 }
10674 func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool {
10675
10676
10677
10678 for {
10679 off1 := v.AuxInt
10680 sym := v.Aux
10681 mem := v.Args[1]
10682 v_0 := v.Args[0]
10683 if v_0.Op != OpPPC64ADDconst {
10684 break
10685 }
10686 off2 := v_0.AuxInt
10687 x := v_0.Args[0]
10688 if !(is16Bit(off1 + off2)) {
10689 break
10690 }
10691 v.reset(OpPPC64MOVHstorezero)
10692 v.AuxInt = off1 + off2
10693 v.Aux = sym
10694 v.AddArg(x)
10695 v.AddArg(mem)
10696 return true
10697 }
10698
10699
10700
10701 for {
10702 off1 := v.AuxInt
10703 sym1 := v.Aux
10704 mem := v.Args[1]
10705 p := v.Args[0]
10706 if p.Op != OpPPC64MOVDaddr {
10707 break
10708 }
10709 off2 := p.AuxInt
10710 sym2 := p.Aux
10711 x := p.Args[0]
10712 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) {
10713 break
10714 }
10715 v.reset(OpPPC64MOVHstorezero)
10716 v.AuxInt = off1 + off2
10717 v.Aux = mergeSym(sym1, sym2)
10718 v.AddArg(x)
10719 v.AddArg(mem)
10720 return true
10721 }
10722 return false
10723 }
10724 func rewriteValuePPC64_OpPPC64MOVWBRstore_0(v *Value) bool {
10725
10726
10727
10728 for {
10729 sym := v.Aux
10730 mem := v.Args[2]
10731 ptr := v.Args[0]
10732 v_1 := v.Args[1]
10733 if v_1.Op != OpPPC64MOVWreg {
10734 break
10735 }
10736 x := v_1.Args[0]
10737 v.reset(OpPPC64MOVWBRstore)
10738 v.Aux = sym
10739 v.AddArg(ptr)
10740 v.AddArg(x)
10741 v.AddArg(mem)
10742 return true
10743 }
10744
10745
10746
10747 for {
10748 sym := v.Aux
10749 mem := v.Args[2]
10750 ptr := v.Args[0]
10751 v_1 := v.Args[1]
10752 if v_1.Op != OpPPC64MOVWZreg {
10753 break
10754 }
10755 x := v_1.Args[0]
10756 v.reset(OpPPC64MOVWBRstore)
10757 v.Aux = sym
10758 v.AddArg(ptr)
10759 v.AddArg(x)
10760 v.AddArg(mem)
10761 return true
10762 }
10763 return false
10764 }
10765 func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool {
10766
10767
10768
10769 for {
10770 off1 := v.AuxInt
10771 sym1 := v.Aux
10772 mem := v.Args[1]
10773 p := v.Args[0]
10774 if p.Op != OpPPC64MOVDaddr {
10775 break
10776 }
10777 off2 := p.AuxInt
10778 sym2 := p.Aux
10779 ptr := p.Args[0]
10780 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
10781 break
10782 }
10783 v.reset(OpPPC64MOVWZload)
10784 v.AuxInt = off1 + off2
10785 v.Aux = mergeSym(sym1, sym2)
10786 v.AddArg(ptr)
10787 v.AddArg(mem)
10788 return true
10789 }
10790
10791
10792
10793 for {
10794 off1 := v.AuxInt
10795 sym := v.Aux
10796 mem := v.Args[1]
10797 v_0 := v.Args[0]
10798 if v_0.Op != OpPPC64ADDconst {
10799 break
10800 }
10801 off2 := v_0.AuxInt
10802 x := v_0.Args[0]
10803 if !(is16Bit(off1 + off2)) {
10804 break
10805 }
10806 v.reset(OpPPC64MOVWZload)
10807 v.AuxInt = off1 + off2
10808 v.Aux = sym
10809 v.AddArg(x)
10810 v.AddArg(mem)
10811 return true
10812 }
10813
10814
10815
10816 for {
10817 if v.AuxInt != 0 {
10818 break
10819 }
10820 sym := v.Aux
10821 mem := v.Args[1]
10822 p := v.Args[0]
10823 if p.Op != OpPPC64ADD {
10824 break
10825 }
10826 idx := p.Args[1]
10827 ptr := p.Args[0]
10828 if !(sym == nil && p.Uses == 1) {
10829 break
10830 }
10831 v.reset(OpPPC64MOVWZloadidx)
10832 v.AddArg(ptr)
10833 v.AddArg(idx)
10834 v.AddArg(mem)
10835 return true
10836 }
10837 return false
10838 }
10839 func rewriteValuePPC64_OpPPC64MOVWZloadidx_0(v *Value) bool {
10840
10841
10842
10843 for {
10844 mem := v.Args[2]
10845 ptr := v.Args[0]
10846 v_1 := v.Args[1]
10847 if v_1.Op != OpPPC64MOVDconst {
10848 break
10849 }
10850 c := v_1.AuxInt
10851 if !(is16Bit(c)) {
10852 break
10853 }
10854 v.reset(OpPPC64MOVWZload)
10855 v.AuxInt = c
10856 v.AddArg(ptr)
10857 v.AddArg(mem)
10858 return true
10859 }
10860
10861
10862
10863 for {
10864 mem := v.Args[2]
10865 v_0 := v.Args[0]
10866 if v_0.Op != OpPPC64MOVDconst {
10867 break
10868 }
10869 c := v_0.AuxInt
10870 ptr := v.Args[1]
10871 if !(is16Bit(c)) {
10872 break
10873 }
10874 v.reset(OpPPC64MOVWZload)
10875 v.AuxInt = c
10876 v.AddArg(ptr)
10877 v.AddArg(mem)
10878 return true
10879 }
10880 return false
10881 }
10882 func rewriteValuePPC64_OpPPC64MOVWZreg_0(v *Value) bool {
10883 b := v.Block
10884 typ := &b.Func.Config.Types
10885
10886
10887
10888 for {
10889 y := v.Args[0]
10890 if y.Op != OpPPC64ANDconst {
10891 break
10892 }
10893 c := y.AuxInt
10894 if !(uint64(c) <= 0xFFFFFFFF) {
10895 break
10896 }
10897 v.reset(OpCopy)
10898 v.Type = y.Type
10899 v.AddArg(y)
10900 return true
10901 }
10902
10903
10904
10905 for {
10906 y := v.Args[0]
10907 if y.Op != OpPPC64AND {
10908 break
10909 }
10910 _ = y.Args[1]
10911 y_0 := y.Args[0]
10912 if y_0.Op != OpPPC64MOVDconst {
10913 break
10914 }
10915 c := y_0.AuxInt
10916 if !(uint64(c) <= 0xFFFFFFFF) {
10917 break
10918 }
10919 v.reset(OpCopy)
10920 v.Type = y.Type
10921 v.AddArg(y)
10922 return true
10923 }
10924
10925
10926
10927 for {
10928 y := v.Args[0]
10929 if y.Op != OpPPC64AND {
10930 break
10931 }
10932 _ = y.Args[1]
10933 y_1 := y.Args[1]
10934 if y_1.Op != OpPPC64MOVDconst {
10935 break
10936 }
10937 c := y_1.AuxInt
10938 if !(uint64(c) <= 0xFFFFFFFF) {
10939 break
10940 }
10941 v.reset(OpCopy)
10942 v.Type = y.Type
10943 v.AddArg(y)
10944 return true
10945 }
10946
10947
10948
10949 for {
10950 v_0 := v.Args[0]
10951 if v_0.Op != OpPPC64SRWconst {
10952 break
10953 }
10954 c := v_0.AuxInt
10955 v_0_0 := v_0.Args[0]
10956 if v_0_0.Op != OpPPC64MOVBZreg {
10957 break
10958 }
10959 x := v_0_0.Args[0]
10960 v.reset(OpPPC64SRWconst)
10961 v.AuxInt = c
10962 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
10963 v0.AddArg(x)
10964 v.AddArg(v0)
10965 return true
10966 }
10967
10968
10969
10970 for {
10971 v_0 := v.Args[0]
10972 if v_0.Op != OpPPC64SRWconst {
10973 break
10974 }
10975 c := v_0.AuxInt
10976 v_0_0 := v_0.Args[0]
10977 if v_0_0.Op != OpPPC64MOVHZreg {
10978 break
10979 }
10980 x := v_0_0.Args[0]
10981 v.reset(OpPPC64SRWconst)
10982 v.AuxInt = c
10983 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
10984 v0.AddArg(x)
10985 v.AddArg(v0)
10986 return true
10987 }
10988
10989
10990
10991 for {
10992 v_0 := v.Args[0]
10993 if v_0.Op != OpPPC64SRWconst {
10994 break
10995 }
10996 c := v_0.AuxInt
10997 v_0_0 := v_0.Args[0]
10998 if v_0_0.Op != OpPPC64MOVWZreg {
10999 break
11000 }
11001 x := v_0_0.Args[0]
11002 v.reset(OpPPC64SRWconst)
11003 v.AuxInt = c
11004 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64)
11005 v0.AddArg(x)
11006 v.AddArg(v0)
11007 return true
11008 }
11009
11010
11011
11012 for {
11013 v_0 := v.Args[0]
11014 if v_0.Op != OpPPC64SRWconst {
11015 break
11016 }
11017 c := v_0.AuxInt
11018 x := v_0.Args[0]
11019 if !(sizeof(x.Type) <= 32) {
11020 break
11021 }
11022 v.reset(OpPPC64SRWconst)
11023 v.AuxInt = c
11024 v.AddArg(x)
11025 return true
11026 }
11027
11028
11029
11030 for {
11031 v_0 := v.Args[0]
11032 if v_0.Op != OpPPC64SRDconst {
11033 break
11034 }
11035 c := v_0.AuxInt
11036 x := v_0.Args[0]
11037 if !(c >= 32) {
11038 break
11039 }
11040 v.reset(OpPPC64SRDconst)
11041 v.AuxInt = c
11042 v.AddArg(x)
11043 return true
11044 }
11045
11046
11047
11048 for {
11049 y := v.Args[0]
11050 if y.Op != OpPPC64MOVWZreg {
11051 break
11052 }
11053 v.reset(OpCopy)
11054 v.Type = y.Type
11055 v.AddArg(y)
11056 return true
11057 }
11058
11059
11060
11061 for {
11062 y := v.Args[0]
11063 if y.Op != OpPPC64MOVHZreg {
11064 break
11065 }
11066 v.reset(OpCopy)
11067 v.Type = y.Type
11068 v.AddArg(y)
11069 return true
11070 }
11071 return false
11072 }
11073 func rewriteValuePPC64_OpPPC64MOVWZreg_10(v *Value) bool {
11074
11075
11076
11077 for {
11078 y := v.Args[0]
11079 if y.Op != OpPPC64MOVBZreg {
11080 break
11081 }
11082 v.reset(OpCopy)
11083 v.Type = y.Type
11084 v.AddArg(y)
11085 return true
11086 }
11087
11088
11089
11090 for {
11091 y := v.Args[0]
11092 if y.Op != OpPPC64MOVHBRload {
11093 break
11094 }
11095 _ = y.Args[1]
11096 v.reset(OpCopy)
11097 v.Type = y.Type
11098 v.AddArg(y)
11099 return true
11100 }
11101
11102
11103
11104 for {
11105 y := v.Args[0]
11106 if y.Op != OpPPC64MOVWBRload {
11107 break
11108 }
11109 _ = y.Args[1]
11110 v.reset(OpCopy)
11111 v.Type = y.Type
11112 v.AddArg(y)
11113 return true
11114 }
11115
11116
11117
11118 for {
11119 y := v.Args[0]
11120 if y.Op != OpPPC64MOVWreg {
11121 break
11122 }
11123 x := y.Args[0]
11124 v.reset(OpPPC64MOVWZreg)
11125 v.AddArg(x)
11126 return true
11127 }
11128
11129
11130
11131 for {
11132 x := v.Args[0]
11133 if x.Op != OpPPC64MOVBZload {
11134 break
11135 }
11136 _ = x.Args[1]
11137 v.reset(OpCopy)
11138 v.Type = x.Type
11139 v.AddArg(x)
11140 return true
11141 }
11142
11143
11144
11145 for {
11146 x := v.Args[0]
11147 if x.Op != OpPPC64MOVBZloadidx {
11148 break
11149 }
11150 _ = x.Args[2]
11151 v.reset(OpCopy)
11152 v.Type = x.Type
11153 v.AddArg(x)
11154 return true
11155 }
11156
11157
11158
11159 for {
11160 x := v.Args[0]
11161 if x.Op != OpPPC64MOVHZload {
11162 break
11163 }
11164 _ = x.Args[1]
11165 v.reset(OpCopy)
11166 v.Type = x.Type
11167 v.AddArg(x)
11168 return true
11169 }
11170
11171
11172
11173 for {
11174 x := v.Args[0]
11175 if x.Op != OpPPC64MOVHZloadidx {
11176 break
11177 }
11178 _ = x.Args[2]
11179 v.reset(OpCopy)
11180 v.Type = x.Type
11181 v.AddArg(x)
11182 return true
11183 }
11184
11185
11186
11187 for {
11188 x := v.Args[0]
11189 if x.Op != OpPPC64MOVWZload {
11190 break
11191 }
11192 _ = x.Args[1]
11193 v.reset(OpCopy)
11194 v.Type = x.Type
11195 v.AddArg(x)
11196 return true
11197 }
11198
11199
11200
11201 for {
11202 x := v.Args[0]
11203 if x.Op != OpPPC64MOVWZloadidx {
11204 break
11205 }
11206 _ = x.Args[2]
11207 v.reset(OpCopy)
11208 v.Type = x.Type
11209 v.AddArg(x)
11210 return true
11211 }
11212 return false
11213 }
11214 func rewriteValuePPC64_OpPPC64MOVWZreg_20(v *Value) bool {
11215
11216
11217
11218 for {
11219 x := v.Args[0]
11220 if x.Op != OpArg {
11221 break
11222 }
11223 t := x.Type
11224 if !((is8BitInt(t) || is16BitInt(t) || is32BitInt(t)) && !isSigned(t)) {
11225 break
11226 }
11227 v.reset(OpCopy)
11228 v.Type = x.Type
11229 v.AddArg(x)
11230 return true
11231 }
11232
11233
11234
11235 for {
11236 v_0 := v.Args[0]
11237 if v_0.Op != OpPPC64MOVDconst {
11238 break
11239 }
11240 c := v_0.AuxInt
11241 v.reset(OpPPC64MOVDconst)
11242 v.AuxInt = int64(uint32(c))
11243 return true
11244 }
11245 return false
11246 }
11247 func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool {
11248
11249
11250
11251 for {
11252 off1 := v.AuxInt
11253 sym1 := v.Aux
11254 mem := v.Args[1]
11255 p := v.Args[0]
11256 if p.Op != OpPPC64MOVDaddr {
11257 break
11258 }
11259 off2 := p.AuxInt
11260 sym2 := p.Aux
11261 ptr := p.Args[0]
11262 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
11263 break
11264 }
11265 v.reset(OpPPC64MOVWload)
11266 v.AuxInt = off1 + off2
11267 v.Aux = mergeSym(sym1, sym2)
11268 v.AddArg(ptr)
11269 v.AddArg(mem)
11270 return true
11271 }
11272
11273
11274
11275 for {
11276 off1 := v.AuxInt
11277 sym := v.Aux
11278 mem := v.Args[1]
11279 v_0 := v.Args[0]
11280 if v_0.Op != OpPPC64ADDconst {
11281 break
11282 }
11283 off2 := v_0.AuxInt
11284 x := v_0.Args[0]
11285 if !(is16Bit(off1 + off2)) {
11286 break
11287 }
11288 v.reset(OpPPC64MOVWload)
11289 v.AuxInt = off1 + off2
11290 v.Aux = sym
11291 v.AddArg(x)
11292 v.AddArg(mem)
11293 return true
11294 }
11295
11296
11297
11298 for {
11299 if v.AuxInt != 0 {
11300 break
11301 }
11302 sym := v.Aux
11303 mem := v.Args[1]
11304 p := v.Args[0]
11305 if p.Op != OpPPC64ADD {
11306 break
11307 }
11308 idx := p.Args[1]
11309 ptr := p.Args[0]
11310 if !(sym == nil && p.Uses == 1) {
11311 break
11312 }
11313 v.reset(OpPPC64MOVWloadidx)
11314 v.AddArg(ptr)
11315 v.AddArg(idx)
11316 v.AddArg(mem)
11317 return true
11318 }
11319 return false
11320 }
11321 func rewriteValuePPC64_OpPPC64MOVWloadidx_0(v *Value) bool {
11322
11323
11324
11325 for {
11326 mem := v.Args[2]
11327 ptr := v.Args[0]
11328 v_1 := v.Args[1]
11329 if v_1.Op != OpPPC64MOVDconst {
11330 break
11331 }
11332 c := v_1.AuxInt
11333 if !(is16Bit(c)) {
11334 break
11335 }
11336 v.reset(OpPPC64MOVWload)
11337 v.AuxInt = c
11338 v.AddArg(ptr)
11339 v.AddArg(mem)
11340 return true
11341 }
11342
11343
11344
11345 for {
11346 mem := v.Args[2]
11347 v_0 := v.Args[0]
11348 if v_0.Op != OpPPC64MOVDconst {
11349 break
11350 }
11351 c := v_0.AuxInt
11352 ptr := v.Args[1]
11353 if !(is16Bit(c)) {
11354 break
11355 }
11356 v.reset(OpPPC64MOVWload)
11357 v.AuxInt = c
11358 v.AddArg(ptr)
11359 v.AddArg(mem)
11360 return true
11361 }
11362 return false
11363 }
11364 func rewriteValuePPC64_OpPPC64MOVWreg_0(v *Value) bool {
11365 b := v.Block
11366 typ := &b.Func.Config.Types
11367
11368
11369
11370 for {
11371 y := v.Args[0]
11372 if y.Op != OpPPC64ANDconst {
11373 break
11374 }
11375 c := y.AuxInt
11376 if !(uint64(c) <= 0xFFFF) {
11377 break
11378 }
11379 v.reset(OpCopy)
11380 v.Type = y.Type
11381 v.AddArg(y)
11382 return true
11383 }
11384
11385
11386
11387 for {
11388 y := v.Args[0]
11389 if y.Op != OpPPC64AND {
11390 break
11391 }
11392 _ = y.Args[1]
11393 y_0 := y.Args[0]
11394 if y_0.Op != OpPPC64MOVDconst {
11395 break
11396 }
11397 c := y_0.AuxInt
11398 if !(uint64(c) <= 0x7FFFFFFF) {
11399 break
11400 }
11401 v.reset(OpCopy)
11402 v.Type = y.Type
11403 v.AddArg(y)
11404 return true
11405 }
11406
11407
11408
11409 for {
11410 y := v.Args[0]
11411 if y.Op != OpPPC64AND {
11412 break
11413 }
11414 _ = y.Args[1]
11415 y_1 := y.Args[1]
11416 if y_1.Op != OpPPC64MOVDconst {
11417 break
11418 }
11419 c := y_1.AuxInt
11420 if !(uint64(c) <= 0x7FFFFFFF) {
11421 break
11422 }
11423 v.reset(OpCopy)
11424 v.Type = y.Type
11425 v.AddArg(y)
11426 return true
11427 }
11428
11429
11430
11431 for {
11432 v_0 := v.Args[0]
11433 if v_0.Op != OpPPC64SRAWconst {
11434 break
11435 }
11436 c := v_0.AuxInt
11437 v_0_0 := v_0.Args[0]
11438 if v_0_0.Op != OpPPC64MOVBreg {
11439 break
11440 }
11441 x := v_0_0.Args[0]
11442 v.reset(OpPPC64SRAWconst)
11443 v.AuxInt = c
11444 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
11445 v0.AddArg(x)
11446 v.AddArg(v0)
11447 return true
11448 }
11449
11450
11451
11452 for {
11453 v_0 := v.Args[0]
11454 if v_0.Op != OpPPC64SRAWconst {
11455 break
11456 }
11457 c := v_0.AuxInt
11458 v_0_0 := v_0.Args[0]
11459 if v_0_0.Op != OpPPC64MOVHreg {
11460 break
11461 }
11462 x := v_0_0.Args[0]
11463 v.reset(OpPPC64SRAWconst)
11464 v.AuxInt = c
11465 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
11466 v0.AddArg(x)
11467 v.AddArg(v0)
11468 return true
11469 }
11470
11471
11472
11473 for {
11474 v_0 := v.Args[0]
11475 if v_0.Op != OpPPC64SRAWconst {
11476 break
11477 }
11478 c := v_0.AuxInt
11479 v_0_0 := v_0.Args[0]
11480 if v_0_0.Op != OpPPC64MOVWreg {
11481 break
11482 }
11483 x := v_0_0.Args[0]
11484 v.reset(OpPPC64SRAWconst)
11485 v.AuxInt = c
11486 v0 := b.NewValue0(v.Pos, OpPPC64MOVWreg, typ.Int64)
11487 v0.AddArg(x)
11488 v.AddArg(v0)
11489 return true
11490 }
11491
11492
11493
11494 for {
11495 v_0 := v.Args[0]
11496 if v_0.Op != OpPPC64SRAWconst {
11497 break
11498 }
11499 c := v_0.AuxInt
11500 x := v_0.Args[0]
11501 if !(sizeof(x.Type) <= 32) {
11502 break
11503 }
11504 v.reset(OpPPC64SRAWconst)
11505 v.AuxInt = c
11506 v.AddArg(x)
11507 return true
11508 }
11509
11510
11511
11512 for {
11513 v_0 := v.Args[0]
11514 if v_0.Op != OpPPC64SRDconst {
11515 break
11516 }
11517 c := v_0.AuxInt
11518 x := v_0.Args[0]
11519 if !(c > 32) {
11520 break
11521 }
11522 v.reset(OpPPC64SRDconst)
11523 v.AuxInt = c
11524 v.AddArg(x)
11525 return true
11526 }
11527
11528
11529
11530 for {
11531 v_0 := v.Args[0]
11532 if v_0.Op != OpPPC64SRDconst {
11533 break
11534 }
11535 c := v_0.AuxInt
11536 x := v_0.Args[0]
11537 if !(c == 32) {
11538 break
11539 }
11540 v.reset(OpPPC64SRADconst)
11541 v.AuxInt = c
11542 v.AddArg(x)
11543 return true
11544 }
11545
11546
11547
11548 for {
11549 y := v.Args[0]
11550 if y.Op != OpPPC64MOVWreg {
11551 break
11552 }
11553 v.reset(OpCopy)
11554 v.Type = y.Type
11555 v.AddArg(y)
11556 return true
11557 }
11558 return false
11559 }
11560 func rewriteValuePPC64_OpPPC64MOVWreg_10(v *Value) bool {
11561
11562
11563
11564 for {
11565 y := v.Args[0]
11566 if y.Op != OpPPC64MOVHreg {
11567 break
11568 }
11569 v.reset(OpCopy)
11570 v.Type = y.Type
11571 v.AddArg(y)
11572 return true
11573 }
11574
11575
11576
11577 for {
11578 y := v.Args[0]
11579 if y.Op != OpPPC64MOVBreg {
11580 break
11581 }
11582 v.reset(OpCopy)
11583 v.Type = y.Type
11584 v.AddArg(y)
11585 return true
11586 }
11587
11588
11589
11590 for {
11591 y := v.Args[0]
11592 if y.Op != OpPPC64MOVWZreg {
11593 break
11594 }
11595 x := y.Args[0]
11596 v.reset(OpPPC64MOVWreg)
11597 v.AddArg(x)
11598 return true
11599 }
11600
11601
11602
11603 for {
11604 x := v.Args[0]
11605 if x.Op != OpPPC64MOVHload {
11606 break
11607 }
11608 _ = x.Args[1]
11609 v.reset(OpCopy)
11610 v.Type = x.Type
11611 v.AddArg(x)
11612 return true
11613 }
11614
11615
11616
11617 for {
11618 x := v.Args[0]
11619 if x.Op != OpPPC64MOVHloadidx {
11620 break
11621 }
11622 _ = x.Args[2]
11623 v.reset(OpCopy)
11624 v.Type = x.Type
11625 v.AddArg(x)
11626 return true
11627 }
11628
11629
11630
11631 for {
11632 x := v.Args[0]
11633 if x.Op != OpPPC64MOVWload {
11634 break
11635 }
11636 _ = x.Args[1]
11637 v.reset(OpCopy)
11638 v.Type = x.Type
11639 v.AddArg(x)
11640 return true
11641 }
11642
11643
11644
11645 for {
11646 x := v.Args[0]
11647 if x.Op != OpPPC64MOVWloadidx {
11648 break
11649 }
11650 _ = x.Args[2]
11651 v.reset(OpCopy)
11652 v.Type = x.Type
11653 v.AddArg(x)
11654 return true
11655 }
11656
11657
11658
11659 for {
11660 x := v.Args[0]
11661 if x.Op != OpArg {
11662 break
11663 }
11664 t := x.Type
11665 if !((is8BitInt(t) || is16BitInt(t) || is32BitInt(t)) && isSigned(t)) {
11666 break
11667 }
11668 v.reset(OpCopy)
11669 v.Type = x.Type
11670 v.AddArg(x)
11671 return true
11672 }
11673
11674
11675
11676 for {
11677 v_0 := v.Args[0]
11678 if v_0.Op != OpPPC64MOVDconst {
11679 break
11680 }
11681 c := v_0.AuxInt
11682 v.reset(OpPPC64MOVDconst)
11683 v.AuxInt = int64(int32(c))
11684 return true
11685 }
11686 return false
11687 }
11688 func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool {
11689
11690
11691
11692 for {
11693 off1 := v.AuxInt
11694 sym := v.Aux
11695 mem := v.Args[2]
11696 v_0 := v.Args[0]
11697 if v_0.Op != OpPPC64ADDconst {
11698 break
11699 }
11700 off2 := v_0.AuxInt
11701 x := v_0.Args[0]
11702 val := v.Args[1]
11703 if !(is16Bit(off1 + off2)) {
11704 break
11705 }
11706 v.reset(OpPPC64MOVWstore)
11707 v.AuxInt = off1 + off2
11708 v.Aux = sym
11709 v.AddArg(x)
11710 v.AddArg(val)
11711 v.AddArg(mem)
11712 return true
11713 }
11714
11715
11716
11717 for {
11718 off1 := v.AuxInt
11719 sym1 := v.Aux
11720 mem := v.Args[2]
11721 p := v.Args[0]
11722 if p.Op != OpPPC64MOVDaddr {
11723 break
11724 }
11725 off2 := p.AuxInt
11726 sym2 := p.Aux
11727 ptr := p.Args[0]
11728 val := v.Args[1]
11729 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) {
11730 break
11731 }
11732 v.reset(OpPPC64MOVWstore)
11733 v.AuxInt = off1 + off2
11734 v.Aux = mergeSym(sym1, sym2)
11735 v.AddArg(ptr)
11736 v.AddArg(val)
11737 v.AddArg(mem)
11738 return true
11739 }
11740
11741
11742
11743 for {
11744 off := v.AuxInt
11745 sym := v.Aux
11746 mem := v.Args[2]
11747 ptr := v.Args[0]
11748 v_1 := v.Args[1]
11749 if v_1.Op != OpPPC64MOVDconst {
11750 break
11751 }
11752 if v_1.AuxInt != 0 {
11753 break
11754 }
11755 v.reset(OpPPC64MOVWstorezero)
11756 v.AuxInt = off
11757 v.Aux = sym
11758 v.AddArg(ptr)
11759 v.AddArg(mem)
11760 return true
11761 }
11762
11763
11764
11765 for {
11766 off := v.AuxInt
11767 sym := v.Aux
11768 mem := v.Args[2]
11769 p := v.Args[0]
11770 if p.Op != OpPPC64ADD {
11771 break
11772 }
11773 idx := p.Args[1]
11774 ptr := p.Args[0]
11775 val := v.Args[1]
11776 if !(off == 0 && sym == nil && p.Uses == 1) {
11777 break
11778 }
11779 v.reset(OpPPC64MOVWstoreidx)
11780 v.AddArg(ptr)
11781 v.AddArg(idx)
11782 v.AddArg(val)
11783 v.AddArg(mem)
11784 return true
11785 }
11786
11787
11788
11789 for {
11790 off := v.AuxInt
11791 sym := v.Aux
11792 mem := v.Args[2]
11793 ptr := v.Args[0]
11794 v_1 := v.Args[1]
11795 if v_1.Op != OpPPC64MOVWreg {
11796 break
11797 }
11798 x := v_1.Args[0]
11799 v.reset(OpPPC64MOVWstore)
11800 v.AuxInt = off
11801 v.Aux = sym
11802 v.AddArg(ptr)
11803 v.AddArg(x)
11804 v.AddArg(mem)
11805 return true
11806 }
11807
11808
11809
11810 for {
11811 off := v.AuxInt
11812 sym := v.Aux
11813 mem := v.Args[2]
11814 ptr := v.Args[0]
11815 v_1 := v.Args[1]
11816 if v_1.Op != OpPPC64MOVWZreg {
11817 break
11818 }
11819 x := v_1.Args[0]
11820 v.reset(OpPPC64MOVWstore)
11821 v.AuxInt = off
11822 v.Aux = sym
11823 v.AddArg(ptr)
11824 v.AddArg(x)
11825 v.AddArg(mem)
11826 return true
11827 }
11828 return false
11829 }
11830 func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool {
11831
11832
11833
11834 for {
11835 mem := v.Args[3]
11836 ptr := v.Args[0]
11837 v_1 := v.Args[1]
11838 if v_1.Op != OpPPC64MOVDconst {
11839 break
11840 }
11841 c := v_1.AuxInt
11842 val := v.Args[2]
11843 if !(is16Bit(c)) {
11844 break
11845 }
11846 v.reset(OpPPC64MOVWstore)
11847 v.AuxInt = c
11848 v.AddArg(ptr)
11849 v.AddArg(val)
11850 v.AddArg(mem)
11851 return true
11852 }
11853
11854
11855
11856 for {
11857 mem := v.Args[3]
11858 v_0 := v.Args[0]
11859 if v_0.Op != OpPPC64MOVDconst {
11860 break
11861 }
11862 c := v_0.AuxInt
11863 ptr := v.Args[1]
11864 val := v.Args[2]
11865 if !(is16Bit(c)) {
11866 break
11867 }
11868 v.reset(OpPPC64MOVWstore)
11869 v.AuxInt = c
11870 v.AddArg(ptr)
11871 v.AddArg(val)
11872 v.AddArg(mem)
11873 return true
11874 }
11875
11876
11877
11878 for {
11879 off := v.AuxInt
11880 sym := v.Aux
11881 mem := v.Args[3]
11882 ptr := v.Args[0]
11883 idx := v.Args[1]
11884 v_2 := v.Args[2]
11885 if v_2.Op != OpPPC64MOVWreg {
11886 break
11887 }
11888 x := v_2.Args[0]
11889 v.reset(OpPPC64MOVWstoreidx)
11890 v.AuxInt = off
11891 v.Aux = sym
11892 v.AddArg(ptr)
11893 v.AddArg(idx)
11894 v.AddArg(x)
11895 v.AddArg(mem)
11896 return true
11897 }
11898
11899
11900
11901 for {
11902 off := v.AuxInt
11903 sym := v.Aux
11904 mem := v.Args[3]
11905 ptr := v.Args[0]
11906 idx := v.Args[1]
11907 v_2 := v.Args[2]
11908 if v_2.Op != OpPPC64MOVWZreg {
11909 break
11910 }
11911 x := v_2.Args[0]
11912 v.reset(OpPPC64MOVWstoreidx)
11913 v.AuxInt = off
11914 v.Aux = sym
11915 v.AddArg(ptr)
11916 v.AddArg(idx)
11917 v.AddArg(x)
11918 v.AddArg(mem)
11919 return true
11920 }
11921 return false
11922 }
11923 func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool {
11924
11925
11926
11927 for {
11928 off1 := v.AuxInt
11929 sym := v.Aux
11930 mem := v.Args[1]
11931 v_0 := v.Args[0]
11932 if v_0.Op != OpPPC64ADDconst {
11933 break
11934 }
11935 off2 := v_0.AuxInt
11936 x := v_0.Args[0]
11937 if !(is16Bit(off1 + off2)) {
11938 break
11939 }
11940 v.reset(OpPPC64MOVWstorezero)
11941 v.AuxInt = off1 + off2
11942 v.Aux = sym
11943 v.AddArg(x)
11944 v.AddArg(mem)
11945 return true
11946 }
11947
11948
11949
11950 for {
11951 off1 := v.AuxInt
11952 sym1 := v.Aux
11953 mem := v.Args[1]
11954 p := v.Args[0]
11955 if p.Op != OpPPC64MOVDaddr {
11956 break
11957 }
11958 off2 := p.AuxInt
11959 sym2 := p.Aux
11960 x := p.Args[0]
11961 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) {
11962 break
11963 }
11964 v.reset(OpPPC64MOVWstorezero)
11965 v.AuxInt = off1 + off2
11966 v.Aux = mergeSym(sym1, sym2)
11967 v.AddArg(x)
11968 v.AddArg(mem)
11969 return true
11970 }
11971 return false
11972 }
11973 func rewriteValuePPC64_OpPPC64MTVSRD_0(v *Value) bool {
11974 b := v.Block
11975 typ := &b.Func.Config.Types
11976
11977
11978
11979 for {
11980 v_0 := v.Args[0]
11981 if v_0.Op != OpPPC64MOVDconst {
11982 break
11983 }
11984 c := v_0.AuxInt
11985 v.reset(OpPPC64FMOVDconst)
11986 v.AuxInt = c
11987 return true
11988 }
11989
11990
11991
11992 for {
11993 x := v.Args[0]
11994 if x.Op != OpPPC64MOVDload {
11995 break
11996 }
11997 off := x.AuxInt
11998 sym := x.Aux
11999 mem := x.Args[1]
12000 ptr := x.Args[0]
12001 if !(x.Uses == 1 && clobber(x)) {
12002 break
12003 }
12004 b = x.Block
12005 v0 := b.NewValue0(x.Pos, OpPPC64FMOVDload, typ.Float64)
12006 v.reset(OpCopy)
12007 v.AddArg(v0)
12008 v0.AuxInt = off
12009 v0.Aux = sym
12010 v0.AddArg(ptr)
12011 v0.AddArg(mem)
12012 return true
12013 }
12014 return false
12015 }
12016 func rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v *Value) bool {
12017
12018
12019
12020 for {
12021 v_0 := v.Args[0]
12022 if v_0.Op != OpPPC64ADDconstForCarry {
12023 break
12024 }
12025 c := v_0.AuxInt
12026 v_0_0 := v_0.Args[0]
12027 if v_0_0.Op != OpPPC64ANDconst {
12028 break
12029 }
12030 d := v_0_0.AuxInt
12031 if !(c < 0 && d > 0 && c+d < 0) {
12032 break
12033 }
12034 v.reset(OpPPC64MOVDconst)
12035 v.AuxInt = -1
12036 return true
12037 }
12038 return false
12039 }
12040 func rewriteValuePPC64_OpPPC64NotEqual_0(v *Value) bool {
12041
12042
12043
12044 for {
12045 v_0 := v.Args[0]
12046 if v_0.Op != OpPPC64FlagEQ {
12047 break
12048 }
12049 v.reset(OpPPC64MOVDconst)
12050 v.AuxInt = 0
12051 return true
12052 }
12053
12054
12055
12056 for {
12057 v_0 := v.Args[0]
12058 if v_0.Op != OpPPC64FlagLT {
12059 break
12060 }
12061 v.reset(OpPPC64MOVDconst)
12062 v.AuxInt = 1
12063 return true
12064 }
12065
12066
12067
12068 for {
12069 v_0 := v.Args[0]
12070 if v_0.Op != OpPPC64FlagGT {
12071 break
12072 }
12073 v.reset(OpPPC64MOVDconst)
12074 v.AuxInt = 1
12075 return true
12076 }
12077
12078
12079
12080 for {
12081 v_0 := v.Args[0]
12082 if v_0.Op != OpPPC64InvertFlags {
12083 break
12084 }
12085 x := v_0.Args[0]
12086 v.reset(OpPPC64NotEqual)
12087 v.AddArg(x)
12088 return true
12089 }
12090 return false
12091 }
12092 func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool {
12093 b := v.Block
12094 typ := &b.Func.Config.Types
12095
12096
12097
12098 for {
12099 _ = v.Args[1]
12100 v_0 := v.Args[0]
12101 if v_0.Op != OpPPC64SLDconst {
12102 break
12103 }
12104 c := v_0.AuxInt
12105 x := v_0.Args[0]
12106 v_1 := v.Args[1]
12107 if v_1.Op != OpPPC64SRDconst {
12108 break
12109 }
12110 d := v_1.AuxInt
12111 if x != v_1.Args[0] {
12112 break
12113 }
12114 if !(d == 64-c) {
12115 break
12116 }
12117 v.reset(OpPPC64ROTLconst)
12118 v.AuxInt = c
12119 v.AddArg(x)
12120 return true
12121 }
12122
12123
12124
12125 for {
12126 _ = v.Args[1]
12127 v_0 := v.Args[0]
12128 if v_0.Op != OpPPC64SRDconst {
12129 break
12130 }
12131 d := v_0.AuxInt
12132 x := v_0.Args[0]
12133 v_1 := v.Args[1]
12134 if v_1.Op != OpPPC64SLDconst {
12135 break
12136 }
12137 c := v_1.AuxInt
12138 if x != v_1.Args[0] {
12139 break
12140 }
12141 if !(d == 64-c) {
12142 break
12143 }
12144 v.reset(OpPPC64ROTLconst)
12145 v.AuxInt = c
12146 v.AddArg(x)
12147 return true
12148 }
12149
12150
12151
12152 for {
12153 _ = v.Args[1]
12154 v_0 := v.Args[0]
12155 if v_0.Op != OpPPC64SLWconst {
12156 break
12157 }
12158 c := v_0.AuxInt
12159 x := v_0.Args[0]
12160 v_1 := v.Args[1]
12161 if v_1.Op != OpPPC64SRWconst {
12162 break
12163 }
12164 d := v_1.AuxInt
12165 if x != v_1.Args[0] {
12166 break
12167 }
12168 if !(d == 32-c) {
12169 break
12170 }
12171 v.reset(OpPPC64ROTLWconst)
12172 v.AuxInt = c
12173 v.AddArg(x)
12174 return true
12175 }
12176
12177
12178
12179 for {
12180 _ = v.Args[1]
12181 v_0 := v.Args[0]
12182 if v_0.Op != OpPPC64SRWconst {
12183 break
12184 }
12185 d := v_0.AuxInt
12186 x := v_0.Args[0]
12187 v_1 := v.Args[1]
12188 if v_1.Op != OpPPC64SLWconst {
12189 break
12190 }
12191 c := v_1.AuxInt
12192 if x != v_1.Args[0] {
12193 break
12194 }
12195 if !(d == 32-c) {
12196 break
12197 }
12198 v.reset(OpPPC64ROTLWconst)
12199 v.AuxInt = c
12200 v.AddArg(x)
12201 return true
12202 }
12203
12204
12205
12206 for {
12207 _ = v.Args[1]
12208 v_0 := v.Args[0]
12209 if v_0.Op != OpPPC64SLD {
12210 break
12211 }
12212 _ = v_0.Args[1]
12213 x := v_0.Args[0]
12214 v_0_1 := v_0.Args[1]
12215 if v_0_1.Op != OpPPC64ANDconst {
12216 break
12217 }
12218 if v_0_1.Type != typ.Int64 {
12219 break
12220 }
12221 if v_0_1.AuxInt != 63 {
12222 break
12223 }
12224 y := v_0_1.Args[0]
12225 v_1 := v.Args[1]
12226 if v_1.Op != OpPPC64SRD {
12227 break
12228 }
12229 _ = v_1.Args[1]
12230 if x != v_1.Args[0] {
12231 break
12232 }
12233 v_1_1 := v_1.Args[1]
12234 if v_1_1.Op != OpPPC64SUB {
12235 break
12236 }
12237 if v_1_1.Type != typ.UInt {
12238 break
12239 }
12240 _ = v_1_1.Args[1]
12241 v_1_1_0 := v_1_1.Args[0]
12242 if v_1_1_0.Op != OpPPC64MOVDconst {
12243 break
12244 }
12245 if v_1_1_0.AuxInt != 64 {
12246 break
12247 }
12248 v_1_1_1 := v_1_1.Args[1]
12249 if v_1_1_1.Op != OpPPC64ANDconst {
12250 break
12251 }
12252 if v_1_1_1.Type != typ.UInt {
12253 break
12254 }
12255 if v_1_1_1.AuxInt != 63 {
12256 break
12257 }
12258 if y != v_1_1_1.Args[0] {
12259 break
12260 }
12261 v.reset(OpPPC64ROTL)
12262 v.AddArg(x)
12263 v.AddArg(y)
12264 return true
12265 }
12266
12267
12268
12269 for {
12270 _ = v.Args[1]
12271 v_0 := v.Args[0]
12272 if v_0.Op != OpPPC64SRD {
12273 break
12274 }
12275 _ = v_0.Args[1]
12276 x := v_0.Args[0]
12277 v_0_1 := v_0.Args[1]
12278 if v_0_1.Op != OpPPC64SUB {
12279 break
12280 }
12281 if v_0_1.Type != typ.UInt {
12282 break
12283 }
12284 _ = v_0_1.Args[1]
12285 v_0_1_0 := v_0_1.Args[0]
12286 if v_0_1_0.Op != OpPPC64MOVDconst {
12287 break
12288 }
12289 if v_0_1_0.AuxInt != 64 {
12290 break
12291 }
12292 v_0_1_1 := v_0_1.Args[1]
12293 if v_0_1_1.Op != OpPPC64ANDconst {
12294 break
12295 }
12296 if v_0_1_1.Type != typ.UInt {
12297 break
12298 }
12299 if v_0_1_1.AuxInt != 63 {
12300 break
12301 }
12302 y := v_0_1_1.Args[0]
12303 v_1 := v.Args[1]
12304 if v_1.Op != OpPPC64SLD {
12305 break
12306 }
12307 _ = v_1.Args[1]
12308 if x != v_1.Args[0] {
12309 break
12310 }
12311 v_1_1 := v_1.Args[1]
12312 if v_1_1.Op != OpPPC64ANDconst {
12313 break
12314 }
12315 if v_1_1.Type != typ.Int64 {
12316 break
12317 }
12318 if v_1_1.AuxInt != 63 {
12319 break
12320 }
12321 if y != v_1_1.Args[0] {
12322 break
12323 }
12324 v.reset(OpPPC64ROTL)
12325 v.AddArg(x)
12326 v.AddArg(y)
12327 return true
12328 }
12329
12330
12331
12332 for {
12333 _ = v.Args[1]
12334 v_0 := v.Args[0]
12335 if v_0.Op != OpPPC64SLW {
12336 break
12337 }
12338 _ = v_0.Args[1]
12339 x := v_0.Args[0]
12340 v_0_1 := v_0.Args[1]
12341 if v_0_1.Op != OpPPC64ANDconst {
12342 break
12343 }
12344 if v_0_1.Type != typ.Int32 {
12345 break
12346 }
12347 if v_0_1.AuxInt != 31 {
12348 break
12349 }
12350 y := v_0_1.Args[0]
12351 v_1 := v.Args[1]
12352 if v_1.Op != OpPPC64SRW {
12353 break
12354 }
12355 _ = v_1.Args[1]
12356 if x != v_1.Args[0] {
12357 break
12358 }
12359 v_1_1 := v_1.Args[1]
12360 if v_1_1.Op != OpPPC64SUB {
12361 break
12362 }
12363 if v_1_1.Type != typ.UInt {
12364 break
12365 }
12366 _ = v_1_1.Args[1]
12367 v_1_1_0 := v_1_1.Args[0]
12368 if v_1_1_0.Op != OpPPC64MOVDconst {
12369 break
12370 }
12371 if v_1_1_0.AuxInt != 32 {
12372 break
12373 }
12374 v_1_1_1 := v_1_1.Args[1]
12375 if v_1_1_1.Op != OpPPC64ANDconst {
12376 break
12377 }
12378 if v_1_1_1.Type != typ.UInt {
12379 break
12380 }
12381 if v_1_1_1.AuxInt != 31 {
12382 break
12383 }
12384 if y != v_1_1_1.Args[0] {
12385 break
12386 }
12387 v.reset(OpPPC64ROTLW)
12388 v.AddArg(x)
12389 v.AddArg(y)
12390 return true
12391 }
12392
12393
12394
12395 for {
12396 _ = v.Args[1]
12397 v_0 := v.Args[0]
12398 if v_0.Op != OpPPC64SRW {
12399 break
12400 }
12401 _ = v_0.Args[1]
12402 x := v_0.Args[0]
12403 v_0_1 := v_0.Args[1]
12404 if v_0_1.Op != OpPPC64SUB {
12405 break
12406 }
12407 if v_0_1.Type != typ.UInt {
12408 break
12409 }
12410 _ = v_0_1.Args[1]
12411 v_0_1_0 := v_0_1.Args[0]
12412 if v_0_1_0.Op != OpPPC64MOVDconst {
12413 break
12414 }
12415 if v_0_1_0.AuxInt != 32 {
12416 break
12417 }
12418 v_0_1_1 := v_0_1.Args[1]
12419 if v_0_1_1.Op != OpPPC64ANDconst {
12420 break
12421 }
12422 if v_0_1_1.Type != typ.UInt {
12423 break
12424 }
12425 if v_0_1_1.AuxInt != 31 {
12426 break
12427 }
12428 y := v_0_1_1.Args[0]
12429 v_1 := v.Args[1]
12430 if v_1.Op != OpPPC64SLW {
12431 break
12432 }
12433 _ = v_1.Args[1]
12434 if x != v_1.Args[0] {
12435 break
12436 }
12437 v_1_1 := v_1.Args[1]
12438 if v_1_1.Op != OpPPC64ANDconst {
12439 break
12440 }
12441 if v_1_1.Type != typ.Int32 {
12442 break
12443 }
12444 if v_1_1.AuxInt != 31 {
12445 break
12446 }
12447 if y != v_1_1.Args[0] {
12448 break
12449 }
12450 v.reset(OpPPC64ROTLW)
12451 v.AddArg(x)
12452 v.AddArg(y)
12453 return true
12454 }
12455
12456
12457
12458 for {
12459 _ = v.Args[1]
12460 v_0 := v.Args[0]
12461 if v_0.Op != OpPPC64MOVDconst {
12462 break
12463 }
12464 c := v_0.AuxInt
12465 v_1 := v.Args[1]
12466 if v_1.Op != OpPPC64MOVDconst {
12467 break
12468 }
12469 d := v_1.AuxInt
12470 v.reset(OpPPC64MOVDconst)
12471 v.AuxInt = c | d
12472 return true
12473 }
12474
12475
12476
12477 for {
12478 _ = v.Args[1]
12479 v_0 := v.Args[0]
12480 if v_0.Op != OpPPC64MOVDconst {
12481 break
12482 }
12483 d := v_0.AuxInt
12484 v_1 := v.Args[1]
12485 if v_1.Op != OpPPC64MOVDconst {
12486 break
12487 }
12488 c := v_1.AuxInt
12489 v.reset(OpPPC64MOVDconst)
12490 v.AuxInt = c | d
12491 return true
12492 }
12493 return false
12494 }
12495 func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool {
12496 b := v.Block
12497 config := b.Func.Config
12498 typ := &b.Func.Config.Types
12499
12500
12501
12502 for {
12503 _ = v.Args[1]
12504 x := v.Args[0]
12505 v_1 := v.Args[1]
12506 if v_1.Op != OpPPC64MOVDconst {
12507 break
12508 }
12509 c := v_1.AuxInt
12510 if !(isU32Bit(c)) {
12511 break
12512 }
12513 v.reset(OpPPC64ORconst)
12514 v.AuxInt = c
12515 v.AddArg(x)
12516 return true
12517 }
12518
12519
12520
12521 for {
12522 x := v.Args[1]
12523 v_0 := v.Args[0]
12524 if v_0.Op != OpPPC64MOVDconst {
12525 break
12526 }
12527 c := v_0.AuxInt
12528 if !(isU32Bit(c)) {
12529 break
12530 }
12531 v.reset(OpPPC64ORconst)
12532 v.AuxInt = c
12533 v.AddArg(x)
12534 return true
12535 }
12536
12537
12538
12539 for {
12540 t := v.Type
12541 _ = v.Args[1]
12542 x0 := v.Args[0]
12543 if x0.Op != OpPPC64MOVBZload {
12544 break
12545 }
12546 i0 := x0.AuxInt
12547 s := x0.Aux
12548 mem := x0.Args[1]
12549 p := x0.Args[0]
12550 o1 := v.Args[1]
12551 if o1.Op != OpPPC64SLWconst {
12552 break
12553 }
12554 if o1.AuxInt != 8 {
12555 break
12556 }
12557 x1 := o1.Args[0]
12558 if x1.Op != OpPPC64MOVBZload {
12559 break
12560 }
12561 i1 := x1.AuxInt
12562 if x1.Aux != s {
12563 break
12564 }
12565 _ = x1.Args[1]
12566 if p != x1.Args[0] {
12567 break
12568 }
12569 if mem != x1.Args[1] {
12570 break
12571 }
12572 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12573 break
12574 }
12575 b = mergePoint(b, x0, x1)
12576 v0 := b.NewValue0(x1.Pos, OpPPC64MOVHZload, t)
12577 v.reset(OpCopy)
12578 v.AddArg(v0)
12579 v0.AuxInt = i0
12580 v0.Aux = s
12581 v0.AddArg(p)
12582 v0.AddArg(mem)
12583 return true
12584 }
12585
12586
12587
12588 for {
12589 t := v.Type
12590 _ = v.Args[1]
12591 o1 := v.Args[0]
12592 if o1.Op != OpPPC64SLWconst {
12593 break
12594 }
12595 if o1.AuxInt != 8 {
12596 break
12597 }
12598 x1 := o1.Args[0]
12599 if x1.Op != OpPPC64MOVBZload {
12600 break
12601 }
12602 i1 := x1.AuxInt
12603 s := x1.Aux
12604 mem := x1.Args[1]
12605 p := x1.Args[0]
12606 x0 := v.Args[1]
12607 if x0.Op != OpPPC64MOVBZload {
12608 break
12609 }
12610 i0 := x0.AuxInt
12611 if x0.Aux != s {
12612 break
12613 }
12614 _ = x0.Args[1]
12615 if p != x0.Args[0] {
12616 break
12617 }
12618 if mem != x0.Args[1] {
12619 break
12620 }
12621 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12622 break
12623 }
12624 b = mergePoint(b, x0, x1)
12625 v0 := b.NewValue0(x0.Pos, OpPPC64MOVHZload, t)
12626 v.reset(OpCopy)
12627 v.AddArg(v0)
12628 v0.AuxInt = i0
12629 v0.Aux = s
12630 v0.AddArg(p)
12631 v0.AddArg(mem)
12632 return true
12633 }
12634
12635
12636
12637 for {
12638 t := v.Type
12639 _ = v.Args[1]
12640 x0 := v.Args[0]
12641 if x0.Op != OpPPC64MOVBZload {
12642 break
12643 }
12644 i0 := x0.AuxInt
12645 s := x0.Aux
12646 mem := x0.Args[1]
12647 p := x0.Args[0]
12648 o1 := v.Args[1]
12649 if o1.Op != OpPPC64SLDconst {
12650 break
12651 }
12652 if o1.AuxInt != 8 {
12653 break
12654 }
12655 x1 := o1.Args[0]
12656 if x1.Op != OpPPC64MOVBZload {
12657 break
12658 }
12659 i1 := x1.AuxInt
12660 if x1.Aux != s {
12661 break
12662 }
12663 _ = x1.Args[1]
12664 if p != x1.Args[0] {
12665 break
12666 }
12667 if mem != x1.Args[1] {
12668 break
12669 }
12670 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12671 break
12672 }
12673 b = mergePoint(b, x0, x1)
12674 v0 := b.NewValue0(x1.Pos, OpPPC64MOVHZload, t)
12675 v.reset(OpCopy)
12676 v.AddArg(v0)
12677 v0.AuxInt = i0
12678 v0.Aux = s
12679 v0.AddArg(p)
12680 v0.AddArg(mem)
12681 return true
12682 }
12683
12684
12685
12686 for {
12687 t := v.Type
12688 _ = v.Args[1]
12689 o1 := v.Args[0]
12690 if o1.Op != OpPPC64SLDconst {
12691 break
12692 }
12693 if o1.AuxInt != 8 {
12694 break
12695 }
12696 x1 := o1.Args[0]
12697 if x1.Op != OpPPC64MOVBZload {
12698 break
12699 }
12700 i1 := x1.AuxInt
12701 s := x1.Aux
12702 mem := x1.Args[1]
12703 p := x1.Args[0]
12704 x0 := v.Args[1]
12705 if x0.Op != OpPPC64MOVBZload {
12706 break
12707 }
12708 i0 := x0.AuxInt
12709 if x0.Aux != s {
12710 break
12711 }
12712 _ = x0.Args[1]
12713 if p != x0.Args[0] {
12714 break
12715 }
12716 if mem != x0.Args[1] {
12717 break
12718 }
12719 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12720 break
12721 }
12722 b = mergePoint(b, x0, x1)
12723 v0 := b.NewValue0(x0.Pos, OpPPC64MOVHZload, t)
12724 v.reset(OpCopy)
12725 v.AddArg(v0)
12726 v0.AuxInt = i0
12727 v0.Aux = s
12728 v0.AddArg(p)
12729 v0.AddArg(mem)
12730 return true
12731 }
12732
12733
12734
12735 for {
12736 t := v.Type
12737 _ = v.Args[1]
12738 x0 := v.Args[0]
12739 if x0.Op != OpPPC64MOVBZload {
12740 break
12741 }
12742 i1 := x0.AuxInt
12743 s := x0.Aux
12744 mem := x0.Args[1]
12745 p := x0.Args[0]
12746 o1 := v.Args[1]
12747 if o1.Op != OpPPC64SLWconst {
12748 break
12749 }
12750 if o1.AuxInt != 8 {
12751 break
12752 }
12753 x1 := o1.Args[0]
12754 if x1.Op != OpPPC64MOVBZload {
12755 break
12756 }
12757 i0 := x1.AuxInt
12758 if x1.Aux != s {
12759 break
12760 }
12761 _ = x1.Args[1]
12762 if p != x1.Args[0] {
12763 break
12764 }
12765 if mem != x1.Args[1] {
12766 break
12767 }
12768 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12769 break
12770 }
12771 b = mergePoint(b, x0, x1)
12772 v0 := b.NewValue0(x1.Pos, OpPPC64MOVHBRload, t)
12773 v.reset(OpCopy)
12774 v.AddArg(v0)
12775 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
12776 v1.AuxInt = i0
12777 v1.Aux = s
12778 v1.AddArg(p)
12779 v0.AddArg(v1)
12780 v0.AddArg(mem)
12781 return true
12782 }
12783
12784
12785
12786 for {
12787 t := v.Type
12788 _ = v.Args[1]
12789 o1 := v.Args[0]
12790 if o1.Op != OpPPC64SLWconst {
12791 break
12792 }
12793 if o1.AuxInt != 8 {
12794 break
12795 }
12796 x1 := o1.Args[0]
12797 if x1.Op != OpPPC64MOVBZload {
12798 break
12799 }
12800 i0 := x1.AuxInt
12801 s := x1.Aux
12802 mem := x1.Args[1]
12803 p := x1.Args[0]
12804 x0 := v.Args[1]
12805 if x0.Op != OpPPC64MOVBZload {
12806 break
12807 }
12808 i1 := x0.AuxInt
12809 if x0.Aux != s {
12810 break
12811 }
12812 _ = x0.Args[1]
12813 if p != x0.Args[0] {
12814 break
12815 }
12816 if mem != x0.Args[1] {
12817 break
12818 }
12819 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12820 break
12821 }
12822 b = mergePoint(b, x0, x1)
12823 v0 := b.NewValue0(x0.Pos, OpPPC64MOVHBRload, t)
12824 v.reset(OpCopy)
12825 v.AddArg(v0)
12826 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
12827 v1.AuxInt = i0
12828 v1.Aux = s
12829 v1.AddArg(p)
12830 v0.AddArg(v1)
12831 v0.AddArg(mem)
12832 return true
12833 }
12834
12835
12836
12837 for {
12838 t := v.Type
12839 _ = v.Args[1]
12840 x0 := v.Args[0]
12841 if x0.Op != OpPPC64MOVBZload {
12842 break
12843 }
12844 i1 := x0.AuxInt
12845 s := x0.Aux
12846 mem := x0.Args[1]
12847 p := x0.Args[0]
12848 o1 := v.Args[1]
12849 if o1.Op != OpPPC64SLDconst {
12850 break
12851 }
12852 if o1.AuxInt != 8 {
12853 break
12854 }
12855 x1 := o1.Args[0]
12856 if x1.Op != OpPPC64MOVBZload {
12857 break
12858 }
12859 i0 := x1.AuxInt
12860 if x1.Aux != s {
12861 break
12862 }
12863 _ = x1.Args[1]
12864 if p != x1.Args[0] {
12865 break
12866 }
12867 if mem != x1.Args[1] {
12868 break
12869 }
12870 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12871 break
12872 }
12873 b = mergePoint(b, x0, x1)
12874 v0 := b.NewValue0(x1.Pos, OpPPC64MOVHBRload, t)
12875 v.reset(OpCopy)
12876 v.AddArg(v0)
12877 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
12878 v1.AuxInt = i0
12879 v1.Aux = s
12880 v1.AddArg(p)
12881 v0.AddArg(v1)
12882 v0.AddArg(mem)
12883 return true
12884 }
12885
12886
12887
12888 for {
12889 t := v.Type
12890 _ = v.Args[1]
12891 o1 := v.Args[0]
12892 if o1.Op != OpPPC64SLDconst {
12893 break
12894 }
12895 if o1.AuxInt != 8 {
12896 break
12897 }
12898 x1 := o1.Args[0]
12899 if x1.Op != OpPPC64MOVBZload {
12900 break
12901 }
12902 i0 := x1.AuxInt
12903 s := x1.Aux
12904 mem := x1.Args[1]
12905 p := x1.Args[0]
12906 x0 := v.Args[1]
12907 if x0.Op != OpPPC64MOVBZload {
12908 break
12909 }
12910 i1 := x0.AuxInt
12911 if x0.Aux != s {
12912 break
12913 }
12914 _ = x0.Args[1]
12915 if p != x0.Args[0] {
12916 break
12917 }
12918 if mem != x0.Args[1] {
12919 break
12920 }
12921 if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
12922 break
12923 }
12924 b = mergePoint(b, x0, x1)
12925 v0 := b.NewValue0(x0.Pos, OpPPC64MOVHBRload, t)
12926 v.reset(OpCopy)
12927 v.AddArg(v0)
12928 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
12929 v1.AuxInt = i0
12930 v1.Aux = s
12931 v1.AddArg(p)
12932 v0.AddArg(v1)
12933 v0.AddArg(mem)
12934 return true
12935 }
12936 return false
12937 }
12938 func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool {
12939 b := v.Block
12940 config := b.Func.Config
12941 typ := &b.Func.Config.Types
12942
12943
12944
12945 for {
12946 t := v.Type
12947 _ = v.Args[1]
12948 s0 := v.Args[0]
12949 if s0.Op != OpPPC64SLWconst {
12950 break
12951 }
12952 n1 := s0.AuxInt
12953 x0 := s0.Args[0]
12954 if x0.Op != OpPPC64MOVBZload {
12955 break
12956 }
12957 i1 := x0.AuxInt
12958 s := x0.Aux
12959 mem := x0.Args[1]
12960 p := x0.Args[0]
12961 s1 := v.Args[1]
12962 if s1.Op != OpPPC64SLWconst {
12963 break
12964 }
12965 n2 := s1.AuxInt
12966 x1 := s1.Args[0]
12967 if x1.Op != OpPPC64MOVBZload {
12968 break
12969 }
12970 i0 := x1.AuxInt
12971 if x1.Aux != s {
12972 break
12973 }
12974 _ = x1.Args[1]
12975 if p != x1.Args[0] {
12976 break
12977 }
12978 if mem != x1.Args[1] {
12979 break
12980 }
12981 if !(!config.BigEndian && i1 == i0+1 && n1%8 == 0 && n2 == n1+8 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1)) {
12982 break
12983 }
12984 b = mergePoint(b, x0, x1)
12985 v0 := b.NewValue0(x1.Pos, OpPPC64SLDconst, t)
12986 v.reset(OpCopy)
12987 v.AddArg(v0)
12988 v0.AuxInt = n1
12989 v1 := b.NewValue0(x1.Pos, OpPPC64MOVHBRload, t)
12990 v2 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
12991 v2.AuxInt = i0
12992 v2.Aux = s
12993 v2.AddArg(p)
12994 v1.AddArg(v2)
12995 v1.AddArg(mem)
12996 v0.AddArg(v1)
12997 return true
12998 }
12999
13000
13001
13002 for {
13003 t := v.Type
13004 _ = v.Args[1]
13005 s1 := v.Args[0]
13006 if s1.Op != OpPPC64SLWconst {
13007 break
13008 }
13009 n2 := s1.AuxInt
13010 x1 := s1.Args[0]
13011 if x1.Op != OpPPC64MOVBZload {
13012 break
13013 }
13014 i0 := x1.AuxInt
13015 s := x1.Aux
13016 mem := x1.Args[1]
13017 p := x1.Args[0]
13018 s0 := v.Args[1]
13019 if s0.Op != OpPPC64SLWconst {
13020 break
13021 }
13022 n1 := s0.AuxInt
13023 x0 := s0.Args[0]
13024 if x0.Op != OpPPC64MOVBZload {
13025 break
13026 }
13027 i1 := x0.AuxInt
13028 if x0.Aux != s {
13029 break
13030 }
13031 _ = x0.Args[1]
13032 if p != x0.Args[0] {
13033 break
13034 }
13035 if mem != x0.Args[1] {
13036 break
13037 }
13038 if !(!config.BigEndian && i1 == i0+1 && n1%8 == 0 && n2 == n1+8 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1)) {
13039 break
13040 }
13041 b = mergePoint(b, x0, x1)
13042 v0 := b.NewValue0(x0.Pos, OpPPC64SLDconst, t)
13043 v.reset(OpCopy)
13044 v.AddArg(v0)
13045 v0.AuxInt = n1
13046 v1 := b.NewValue0(x0.Pos, OpPPC64MOVHBRload, t)
13047 v2 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
13048 v2.AuxInt = i0
13049 v2.Aux = s
13050 v2.AddArg(p)
13051 v1.AddArg(v2)
13052 v1.AddArg(mem)
13053 v0.AddArg(v1)
13054 return true
13055 }
13056
13057
13058
13059 for {
13060 t := v.Type
13061 _ = v.Args[1]
13062 s0 := v.Args[0]
13063 if s0.Op != OpPPC64SLDconst {
13064 break
13065 }
13066 n1 := s0.AuxInt
13067 x0 := s0.Args[0]
13068 if x0.Op != OpPPC64MOVBZload {
13069 break
13070 }
13071 i1 := x0.AuxInt
13072 s := x0.Aux
13073 mem := x0.Args[1]
13074 p := x0.Args[0]
13075 s1 := v.Args[1]
13076 if s1.Op != OpPPC64SLDconst {
13077 break
13078 }
13079 n2 := s1.AuxInt
13080 x1 := s1.Args[0]
13081 if x1.Op != OpPPC64MOVBZload {
13082 break
13083 }
13084 i0 := x1.AuxInt
13085 if x1.Aux != s {
13086 break
13087 }
13088 _ = x1.Args[1]
13089 if p != x1.Args[0] {
13090 break
13091 }
13092 if mem != x1.Args[1] {
13093 break
13094 }
13095 if !(!config.BigEndian && i1 == i0+1 && n1%8 == 0 && n2 == n1+8 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1)) {
13096 break
13097 }
13098 b = mergePoint(b, x0, x1)
13099 v0 := b.NewValue0(x1.Pos, OpPPC64SLDconst, t)
13100 v.reset(OpCopy)
13101 v.AddArg(v0)
13102 v0.AuxInt = n1
13103 v1 := b.NewValue0(x1.Pos, OpPPC64MOVHBRload, t)
13104 v2 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
13105 v2.AuxInt = i0
13106 v2.Aux = s
13107 v2.AddArg(p)
13108 v1.AddArg(v2)
13109 v1.AddArg(mem)
13110 v0.AddArg(v1)
13111 return true
13112 }
13113
13114
13115
13116 for {
13117 t := v.Type
13118 _ = v.Args[1]
13119 s1 := v.Args[0]
13120 if s1.Op != OpPPC64SLDconst {
13121 break
13122 }
13123 n2 := s1.AuxInt
13124 x1 := s1.Args[0]
13125 if x1.Op != OpPPC64MOVBZload {
13126 break
13127 }
13128 i0 := x1.AuxInt
13129 s := x1.Aux
13130 mem := x1.Args[1]
13131 p := x1.Args[0]
13132 s0 := v.Args[1]
13133 if s0.Op != OpPPC64SLDconst {
13134 break
13135 }
13136 n1 := s0.AuxInt
13137 x0 := s0.Args[0]
13138 if x0.Op != OpPPC64MOVBZload {
13139 break
13140 }
13141 i1 := x0.AuxInt
13142 if x0.Aux != s {
13143 break
13144 }
13145 _ = x0.Args[1]
13146 if p != x0.Args[0] {
13147 break
13148 }
13149 if mem != x0.Args[1] {
13150 break
13151 }
13152 if !(!config.BigEndian && i1 == i0+1 && n1%8 == 0 && n2 == n1+8 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1)) {
13153 break
13154 }
13155 b = mergePoint(b, x0, x1)
13156 v0 := b.NewValue0(x0.Pos, OpPPC64SLDconst, t)
13157 v.reset(OpCopy)
13158 v.AddArg(v0)
13159 v0.AuxInt = n1
13160 v1 := b.NewValue0(x0.Pos, OpPPC64MOVHBRload, t)
13161 v2 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
13162 v2.AuxInt = i0
13163 v2.Aux = s
13164 v2.AddArg(p)
13165 v1.AddArg(v2)
13166 v1.AddArg(mem)
13167 v0.AddArg(v1)
13168 return true
13169 }
13170
13171
13172
13173 for {
13174 t := v.Type
13175 _ = v.Args[1]
13176 s1 := v.Args[0]
13177 if s1.Op != OpPPC64SLWconst {
13178 break
13179 }
13180 if s1.AuxInt != 24 {
13181 break
13182 }
13183 x2 := s1.Args[0]
13184 if x2.Op != OpPPC64MOVBZload {
13185 break
13186 }
13187 i3 := x2.AuxInt
13188 s := x2.Aux
13189 mem := x2.Args[1]
13190 p := x2.Args[0]
13191 o0 := v.Args[1]
13192 if o0.Op != OpPPC64OR {
13193 break
13194 }
13195 if o0.Type != t {
13196 break
13197 }
13198 _ = o0.Args[1]
13199 s0 := o0.Args[0]
13200 if s0.Op != OpPPC64SLWconst {
13201 break
13202 }
13203 if s0.AuxInt != 16 {
13204 break
13205 }
13206 x1 := s0.Args[0]
13207 if x1.Op != OpPPC64MOVBZload {
13208 break
13209 }
13210 i2 := x1.AuxInt
13211 if x1.Aux != s {
13212 break
13213 }
13214 _ = x1.Args[1]
13215 if p != x1.Args[0] {
13216 break
13217 }
13218 if mem != x1.Args[1] {
13219 break
13220 }
13221 x0 := o0.Args[1]
13222 if x0.Op != OpPPC64MOVHZload {
13223 break
13224 }
13225 i0 := x0.AuxInt
13226 if x0.Aux != s {
13227 break
13228 }
13229 _ = x0.Args[1]
13230 if p != x0.Args[0] {
13231 break
13232 }
13233 if mem != x0.Args[1] {
13234 break
13235 }
13236 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13237 break
13238 }
13239 b = mergePoint(b, x0, x1, x2)
13240 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWZload, t)
13241 v.reset(OpCopy)
13242 v.AddArg(v0)
13243 v0.AuxInt = i0
13244 v0.Aux = s
13245 v0.AddArg(p)
13246 v0.AddArg(mem)
13247 return true
13248 }
13249
13250
13251
13252 for {
13253 t := v.Type
13254 _ = v.Args[1]
13255 s1 := v.Args[0]
13256 if s1.Op != OpPPC64SLWconst {
13257 break
13258 }
13259 if s1.AuxInt != 24 {
13260 break
13261 }
13262 x2 := s1.Args[0]
13263 if x2.Op != OpPPC64MOVBZload {
13264 break
13265 }
13266 i3 := x2.AuxInt
13267 s := x2.Aux
13268 mem := x2.Args[1]
13269 p := x2.Args[0]
13270 o0 := v.Args[1]
13271 if o0.Op != OpPPC64OR {
13272 break
13273 }
13274 if o0.Type != t {
13275 break
13276 }
13277 _ = o0.Args[1]
13278 x0 := o0.Args[0]
13279 if x0.Op != OpPPC64MOVHZload {
13280 break
13281 }
13282 i0 := x0.AuxInt
13283 if x0.Aux != s {
13284 break
13285 }
13286 _ = x0.Args[1]
13287 if p != x0.Args[0] {
13288 break
13289 }
13290 if mem != x0.Args[1] {
13291 break
13292 }
13293 s0 := o0.Args[1]
13294 if s0.Op != OpPPC64SLWconst {
13295 break
13296 }
13297 if s0.AuxInt != 16 {
13298 break
13299 }
13300 x1 := s0.Args[0]
13301 if x1.Op != OpPPC64MOVBZload {
13302 break
13303 }
13304 i2 := x1.AuxInt
13305 if x1.Aux != s {
13306 break
13307 }
13308 _ = x1.Args[1]
13309 if p != x1.Args[0] {
13310 break
13311 }
13312 if mem != x1.Args[1] {
13313 break
13314 }
13315 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13316 break
13317 }
13318 b = mergePoint(b, x0, x1, x2)
13319 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWZload, t)
13320 v.reset(OpCopy)
13321 v.AddArg(v0)
13322 v0.AuxInt = i0
13323 v0.Aux = s
13324 v0.AddArg(p)
13325 v0.AddArg(mem)
13326 return true
13327 }
13328
13329
13330
13331 for {
13332 t := v.Type
13333 _ = v.Args[1]
13334 o0 := v.Args[0]
13335 if o0.Op != OpPPC64OR {
13336 break
13337 }
13338 if o0.Type != t {
13339 break
13340 }
13341 _ = o0.Args[1]
13342 s0 := o0.Args[0]
13343 if s0.Op != OpPPC64SLWconst {
13344 break
13345 }
13346 if s0.AuxInt != 16 {
13347 break
13348 }
13349 x1 := s0.Args[0]
13350 if x1.Op != OpPPC64MOVBZload {
13351 break
13352 }
13353 i2 := x1.AuxInt
13354 s := x1.Aux
13355 mem := x1.Args[1]
13356 p := x1.Args[0]
13357 x0 := o0.Args[1]
13358 if x0.Op != OpPPC64MOVHZload {
13359 break
13360 }
13361 i0 := x0.AuxInt
13362 if x0.Aux != s {
13363 break
13364 }
13365 _ = x0.Args[1]
13366 if p != x0.Args[0] {
13367 break
13368 }
13369 if mem != x0.Args[1] {
13370 break
13371 }
13372 s1 := v.Args[1]
13373 if s1.Op != OpPPC64SLWconst {
13374 break
13375 }
13376 if s1.AuxInt != 24 {
13377 break
13378 }
13379 x2 := s1.Args[0]
13380 if x2.Op != OpPPC64MOVBZload {
13381 break
13382 }
13383 i3 := x2.AuxInt
13384 if x2.Aux != s {
13385 break
13386 }
13387 _ = x2.Args[1]
13388 if p != x2.Args[0] {
13389 break
13390 }
13391 if mem != x2.Args[1] {
13392 break
13393 }
13394 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13395 break
13396 }
13397 b = mergePoint(b, x0, x1, x2)
13398 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWZload, t)
13399 v.reset(OpCopy)
13400 v.AddArg(v0)
13401 v0.AuxInt = i0
13402 v0.Aux = s
13403 v0.AddArg(p)
13404 v0.AddArg(mem)
13405 return true
13406 }
13407
13408
13409
13410 for {
13411 t := v.Type
13412 _ = v.Args[1]
13413 o0 := v.Args[0]
13414 if o0.Op != OpPPC64OR {
13415 break
13416 }
13417 if o0.Type != t {
13418 break
13419 }
13420 _ = o0.Args[1]
13421 x0 := o0.Args[0]
13422 if x0.Op != OpPPC64MOVHZload {
13423 break
13424 }
13425 i0 := x0.AuxInt
13426 s := x0.Aux
13427 mem := x0.Args[1]
13428 p := x0.Args[0]
13429 s0 := o0.Args[1]
13430 if s0.Op != OpPPC64SLWconst {
13431 break
13432 }
13433 if s0.AuxInt != 16 {
13434 break
13435 }
13436 x1 := s0.Args[0]
13437 if x1.Op != OpPPC64MOVBZload {
13438 break
13439 }
13440 i2 := x1.AuxInt
13441 if x1.Aux != s {
13442 break
13443 }
13444 _ = x1.Args[1]
13445 if p != x1.Args[0] {
13446 break
13447 }
13448 if mem != x1.Args[1] {
13449 break
13450 }
13451 s1 := v.Args[1]
13452 if s1.Op != OpPPC64SLWconst {
13453 break
13454 }
13455 if s1.AuxInt != 24 {
13456 break
13457 }
13458 x2 := s1.Args[0]
13459 if x2.Op != OpPPC64MOVBZload {
13460 break
13461 }
13462 i3 := x2.AuxInt
13463 if x2.Aux != s {
13464 break
13465 }
13466 _ = x2.Args[1]
13467 if p != x2.Args[0] {
13468 break
13469 }
13470 if mem != x2.Args[1] {
13471 break
13472 }
13473 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13474 break
13475 }
13476 b = mergePoint(b, x0, x1, x2)
13477 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWZload, t)
13478 v.reset(OpCopy)
13479 v.AddArg(v0)
13480 v0.AuxInt = i0
13481 v0.Aux = s
13482 v0.AddArg(p)
13483 v0.AddArg(mem)
13484 return true
13485 }
13486
13487
13488
13489 for {
13490 t := v.Type
13491 _ = v.Args[1]
13492 s1 := v.Args[0]
13493 if s1.Op != OpPPC64SLDconst {
13494 break
13495 }
13496 if s1.AuxInt != 24 {
13497 break
13498 }
13499 x2 := s1.Args[0]
13500 if x2.Op != OpPPC64MOVBZload {
13501 break
13502 }
13503 i3 := x2.AuxInt
13504 s := x2.Aux
13505 mem := x2.Args[1]
13506 p := x2.Args[0]
13507 o0 := v.Args[1]
13508 if o0.Op != OpPPC64OR {
13509 break
13510 }
13511 if o0.Type != t {
13512 break
13513 }
13514 _ = o0.Args[1]
13515 s0 := o0.Args[0]
13516 if s0.Op != OpPPC64SLDconst {
13517 break
13518 }
13519 if s0.AuxInt != 16 {
13520 break
13521 }
13522 x1 := s0.Args[0]
13523 if x1.Op != OpPPC64MOVBZload {
13524 break
13525 }
13526 i2 := x1.AuxInt
13527 if x1.Aux != s {
13528 break
13529 }
13530 _ = x1.Args[1]
13531 if p != x1.Args[0] {
13532 break
13533 }
13534 if mem != x1.Args[1] {
13535 break
13536 }
13537 x0 := o0.Args[1]
13538 if x0.Op != OpPPC64MOVHZload {
13539 break
13540 }
13541 i0 := x0.AuxInt
13542 if x0.Aux != s {
13543 break
13544 }
13545 _ = x0.Args[1]
13546 if p != x0.Args[0] {
13547 break
13548 }
13549 if mem != x0.Args[1] {
13550 break
13551 }
13552 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13553 break
13554 }
13555 b = mergePoint(b, x0, x1, x2)
13556 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWZload, t)
13557 v.reset(OpCopy)
13558 v.AddArg(v0)
13559 v0.AuxInt = i0
13560 v0.Aux = s
13561 v0.AddArg(p)
13562 v0.AddArg(mem)
13563 return true
13564 }
13565
13566
13567
13568 for {
13569 t := v.Type
13570 _ = v.Args[1]
13571 s1 := v.Args[0]
13572 if s1.Op != OpPPC64SLDconst {
13573 break
13574 }
13575 if s1.AuxInt != 24 {
13576 break
13577 }
13578 x2 := s1.Args[0]
13579 if x2.Op != OpPPC64MOVBZload {
13580 break
13581 }
13582 i3 := x2.AuxInt
13583 s := x2.Aux
13584 mem := x2.Args[1]
13585 p := x2.Args[0]
13586 o0 := v.Args[1]
13587 if o0.Op != OpPPC64OR {
13588 break
13589 }
13590 if o0.Type != t {
13591 break
13592 }
13593 _ = o0.Args[1]
13594 x0 := o0.Args[0]
13595 if x0.Op != OpPPC64MOVHZload {
13596 break
13597 }
13598 i0 := x0.AuxInt
13599 if x0.Aux != s {
13600 break
13601 }
13602 _ = x0.Args[1]
13603 if p != x0.Args[0] {
13604 break
13605 }
13606 if mem != x0.Args[1] {
13607 break
13608 }
13609 s0 := o0.Args[1]
13610 if s0.Op != OpPPC64SLDconst {
13611 break
13612 }
13613 if s0.AuxInt != 16 {
13614 break
13615 }
13616 x1 := s0.Args[0]
13617 if x1.Op != OpPPC64MOVBZload {
13618 break
13619 }
13620 i2 := x1.AuxInt
13621 if x1.Aux != s {
13622 break
13623 }
13624 _ = x1.Args[1]
13625 if p != x1.Args[0] {
13626 break
13627 }
13628 if mem != x1.Args[1] {
13629 break
13630 }
13631 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13632 break
13633 }
13634 b = mergePoint(b, x0, x1, x2)
13635 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWZload, t)
13636 v.reset(OpCopy)
13637 v.AddArg(v0)
13638 v0.AuxInt = i0
13639 v0.Aux = s
13640 v0.AddArg(p)
13641 v0.AddArg(mem)
13642 return true
13643 }
13644 return false
13645 }
13646 func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool {
13647 b := v.Block
13648 config := b.Func.Config
13649 typ := &b.Func.Config.Types
13650
13651
13652
13653 for {
13654 t := v.Type
13655 _ = v.Args[1]
13656 o0 := v.Args[0]
13657 if o0.Op != OpPPC64OR {
13658 break
13659 }
13660 if o0.Type != t {
13661 break
13662 }
13663 _ = o0.Args[1]
13664 s0 := o0.Args[0]
13665 if s0.Op != OpPPC64SLDconst {
13666 break
13667 }
13668 if s0.AuxInt != 16 {
13669 break
13670 }
13671 x1 := s0.Args[0]
13672 if x1.Op != OpPPC64MOVBZload {
13673 break
13674 }
13675 i2 := x1.AuxInt
13676 s := x1.Aux
13677 mem := x1.Args[1]
13678 p := x1.Args[0]
13679 x0 := o0.Args[1]
13680 if x0.Op != OpPPC64MOVHZload {
13681 break
13682 }
13683 i0 := x0.AuxInt
13684 if x0.Aux != s {
13685 break
13686 }
13687 _ = x0.Args[1]
13688 if p != x0.Args[0] {
13689 break
13690 }
13691 if mem != x0.Args[1] {
13692 break
13693 }
13694 s1 := v.Args[1]
13695 if s1.Op != OpPPC64SLDconst {
13696 break
13697 }
13698 if s1.AuxInt != 24 {
13699 break
13700 }
13701 x2 := s1.Args[0]
13702 if x2.Op != OpPPC64MOVBZload {
13703 break
13704 }
13705 i3 := x2.AuxInt
13706 if x2.Aux != s {
13707 break
13708 }
13709 _ = x2.Args[1]
13710 if p != x2.Args[0] {
13711 break
13712 }
13713 if mem != x2.Args[1] {
13714 break
13715 }
13716 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13717 break
13718 }
13719 b = mergePoint(b, x0, x1, x2)
13720 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWZload, t)
13721 v.reset(OpCopy)
13722 v.AddArg(v0)
13723 v0.AuxInt = i0
13724 v0.Aux = s
13725 v0.AddArg(p)
13726 v0.AddArg(mem)
13727 return true
13728 }
13729
13730
13731
13732 for {
13733 t := v.Type
13734 _ = v.Args[1]
13735 o0 := v.Args[0]
13736 if o0.Op != OpPPC64OR {
13737 break
13738 }
13739 if o0.Type != t {
13740 break
13741 }
13742 _ = o0.Args[1]
13743 x0 := o0.Args[0]
13744 if x0.Op != OpPPC64MOVHZload {
13745 break
13746 }
13747 i0 := x0.AuxInt
13748 s := x0.Aux
13749 mem := x0.Args[1]
13750 p := x0.Args[0]
13751 s0 := o0.Args[1]
13752 if s0.Op != OpPPC64SLDconst {
13753 break
13754 }
13755 if s0.AuxInt != 16 {
13756 break
13757 }
13758 x1 := s0.Args[0]
13759 if x1.Op != OpPPC64MOVBZload {
13760 break
13761 }
13762 i2 := x1.AuxInt
13763 if x1.Aux != s {
13764 break
13765 }
13766 _ = x1.Args[1]
13767 if p != x1.Args[0] {
13768 break
13769 }
13770 if mem != x1.Args[1] {
13771 break
13772 }
13773 s1 := v.Args[1]
13774 if s1.Op != OpPPC64SLDconst {
13775 break
13776 }
13777 if s1.AuxInt != 24 {
13778 break
13779 }
13780 x2 := s1.Args[0]
13781 if x2.Op != OpPPC64MOVBZload {
13782 break
13783 }
13784 i3 := x2.AuxInt
13785 if x2.Aux != s {
13786 break
13787 }
13788 _ = x2.Args[1]
13789 if p != x2.Args[0] {
13790 break
13791 }
13792 if mem != x2.Args[1] {
13793 break
13794 }
13795 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13796 break
13797 }
13798 b = mergePoint(b, x0, x1, x2)
13799 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWZload, t)
13800 v.reset(OpCopy)
13801 v.AddArg(v0)
13802 v0.AuxInt = i0
13803 v0.Aux = s
13804 v0.AddArg(p)
13805 v0.AddArg(mem)
13806 return true
13807 }
13808
13809
13810
13811 for {
13812 t := v.Type
13813 _ = v.Args[1]
13814 s1 := v.Args[0]
13815 if s1.Op != OpPPC64SLWconst {
13816 break
13817 }
13818 if s1.AuxInt != 24 {
13819 break
13820 }
13821 x2 := s1.Args[0]
13822 if x2.Op != OpPPC64MOVBZload {
13823 break
13824 }
13825 i0 := x2.AuxInt
13826 s := x2.Aux
13827 mem := x2.Args[1]
13828 p := x2.Args[0]
13829 o0 := v.Args[1]
13830 if o0.Op != OpPPC64OR {
13831 break
13832 }
13833 if o0.Type != t {
13834 break
13835 }
13836 _ = o0.Args[1]
13837 s0 := o0.Args[0]
13838 if s0.Op != OpPPC64SLWconst {
13839 break
13840 }
13841 if s0.AuxInt != 16 {
13842 break
13843 }
13844 x1 := s0.Args[0]
13845 if x1.Op != OpPPC64MOVBZload {
13846 break
13847 }
13848 i1 := x1.AuxInt
13849 if x1.Aux != s {
13850 break
13851 }
13852 _ = x1.Args[1]
13853 if p != x1.Args[0] {
13854 break
13855 }
13856 if mem != x1.Args[1] {
13857 break
13858 }
13859 x0 := o0.Args[1]
13860 if x0.Op != OpPPC64MOVHBRload {
13861 break
13862 }
13863 if x0.Type != t {
13864 break
13865 }
13866 _ = x0.Args[1]
13867 x0_0 := x0.Args[0]
13868 if x0_0.Op != OpPPC64MOVDaddr {
13869 break
13870 }
13871 if x0_0.Type != typ.Uintptr {
13872 break
13873 }
13874 i2 := x0_0.AuxInt
13875 if x0_0.Aux != s {
13876 break
13877 }
13878 if p != x0_0.Args[0] {
13879 break
13880 }
13881 if mem != x0.Args[1] {
13882 break
13883 }
13884 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13885 break
13886 }
13887 b = mergePoint(b, x0, x1, x2)
13888 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
13889 v.reset(OpCopy)
13890 v.AddArg(v0)
13891 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
13892 v1.AuxInt = i0
13893 v1.Aux = s
13894 v1.AddArg(p)
13895 v0.AddArg(v1)
13896 v0.AddArg(mem)
13897 return true
13898 }
13899
13900
13901
13902 for {
13903 t := v.Type
13904 _ = v.Args[1]
13905 s1 := v.Args[0]
13906 if s1.Op != OpPPC64SLWconst {
13907 break
13908 }
13909 if s1.AuxInt != 24 {
13910 break
13911 }
13912 x2 := s1.Args[0]
13913 if x2.Op != OpPPC64MOVBZload {
13914 break
13915 }
13916 i0 := x2.AuxInt
13917 s := x2.Aux
13918 mem := x2.Args[1]
13919 p := x2.Args[0]
13920 o0 := v.Args[1]
13921 if o0.Op != OpPPC64OR {
13922 break
13923 }
13924 if o0.Type != t {
13925 break
13926 }
13927 _ = o0.Args[1]
13928 x0 := o0.Args[0]
13929 if x0.Op != OpPPC64MOVHBRload {
13930 break
13931 }
13932 if x0.Type != t {
13933 break
13934 }
13935 _ = x0.Args[1]
13936 x0_0 := x0.Args[0]
13937 if x0_0.Op != OpPPC64MOVDaddr {
13938 break
13939 }
13940 if x0_0.Type != typ.Uintptr {
13941 break
13942 }
13943 i2 := x0_0.AuxInt
13944 if x0_0.Aux != s {
13945 break
13946 }
13947 if p != x0_0.Args[0] {
13948 break
13949 }
13950 if mem != x0.Args[1] {
13951 break
13952 }
13953 s0 := o0.Args[1]
13954 if s0.Op != OpPPC64SLWconst {
13955 break
13956 }
13957 if s0.AuxInt != 16 {
13958 break
13959 }
13960 x1 := s0.Args[0]
13961 if x1.Op != OpPPC64MOVBZload {
13962 break
13963 }
13964 i1 := x1.AuxInt
13965 if x1.Aux != s {
13966 break
13967 }
13968 _ = x1.Args[1]
13969 if p != x1.Args[0] {
13970 break
13971 }
13972 if mem != x1.Args[1] {
13973 break
13974 }
13975 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
13976 break
13977 }
13978 b = mergePoint(b, x0, x1, x2)
13979 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
13980 v.reset(OpCopy)
13981 v.AddArg(v0)
13982 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
13983 v1.AuxInt = i0
13984 v1.Aux = s
13985 v1.AddArg(p)
13986 v0.AddArg(v1)
13987 v0.AddArg(mem)
13988 return true
13989 }
13990
13991
13992
13993 for {
13994 t := v.Type
13995 _ = v.Args[1]
13996 o0 := v.Args[0]
13997 if o0.Op != OpPPC64OR {
13998 break
13999 }
14000 if o0.Type != t {
14001 break
14002 }
14003 _ = o0.Args[1]
14004 s0 := o0.Args[0]
14005 if s0.Op != OpPPC64SLWconst {
14006 break
14007 }
14008 if s0.AuxInt != 16 {
14009 break
14010 }
14011 x1 := s0.Args[0]
14012 if x1.Op != OpPPC64MOVBZload {
14013 break
14014 }
14015 i1 := x1.AuxInt
14016 s := x1.Aux
14017 mem := x1.Args[1]
14018 p := x1.Args[0]
14019 x0 := o0.Args[1]
14020 if x0.Op != OpPPC64MOVHBRload {
14021 break
14022 }
14023 if x0.Type != t {
14024 break
14025 }
14026 _ = x0.Args[1]
14027 x0_0 := x0.Args[0]
14028 if x0_0.Op != OpPPC64MOVDaddr {
14029 break
14030 }
14031 if x0_0.Type != typ.Uintptr {
14032 break
14033 }
14034 i2 := x0_0.AuxInt
14035 if x0_0.Aux != s {
14036 break
14037 }
14038 if p != x0_0.Args[0] {
14039 break
14040 }
14041 if mem != x0.Args[1] {
14042 break
14043 }
14044 s1 := v.Args[1]
14045 if s1.Op != OpPPC64SLWconst {
14046 break
14047 }
14048 if s1.AuxInt != 24 {
14049 break
14050 }
14051 x2 := s1.Args[0]
14052 if x2.Op != OpPPC64MOVBZload {
14053 break
14054 }
14055 i0 := x2.AuxInt
14056 if x2.Aux != s {
14057 break
14058 }
14059 _ = x2.Args[1]
14060 if p != x2.Args[0] {
14061 break
14062 }
14063 if mem != x2.Args[1] {
14064 break
14065 }
14066 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14067 break
14068 }
14069 b = mergePoint(b, x0, x1, x2)
14070 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14071 v.reset(OpCopy)
14072 v.AddArg(v0)
14073 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14074 v1.AuxInt = i0
14075 v1.Aux = s
14076 v1.AddArg(p)
14077 v0.AddArg(v1)
14078 v0.AddArg(mem)
14079 return true
14080 }
14081
14082
14083
14084 for {
14085 t := v.Type
14086 _ = v.Args[1]
14087 o0 := v.Args[0]
14088 if o0.Op != OpPPC64OR {
14089 break
14090 }
14091 if o0.Type != t {
14092 break
14093 }
14094 _ = o0.Args[1]
14095 x0 := o0.Args[0]
14096 if x0.Op != OpPPC64MOVHBRload {
14097 break
14098 }
14099 if x0.Type != t {
14100 break
14101 }
14102 mem := x0.Args[1]
14103 x0_0 := x0.Args[0]
14104 if x0_0.Op != OpPPC64MOVDaddr {
14105 break
14106 }
14107 if x0_0.Type != typ.Uintptr {
14108 break
14109 }
14110 i2 := x0_0.AuxInt
14111 s := x0_0.Aux
14112 p := x0_0.Args[0]
14113 s0 := o0.Args[1]
14114 if s0.Op != OpPPC64SLWconst {
14115 break
14116 }
14117 if s0.AuxInt != 16 {
14118 break
14119 }
14120 x1 := s0.Args[0]
14121 if x1.Op != OpPPC64MOVBZload {
14122 break
14123 }
14124 i1 := x1.AuxInt
14125 if x1.Aux != s {
14126 break
14127 }
14128 _ = x1.Args[1]
14129 if p != x1.Args[0] {
14130 break
14131 }
14132 if mem != x1.Args[1] {
14133 break
14134 }
14135 s1 := v.Args[1]
14136 if s1.Op != OpPPC64SLWconst {
14137 break
14138 }
14139 if s1.AuxInt != 24 {
14140 break
14141 }
14142 x2 := s1.Args[0]
14143 if x2.Op != OpPPC64MOVBZload {
14144 break
14145 }
14146 i0 := x2.AuxInt
14147 if x2.Aux != s {
14148 break
14149 }
14150 _ = x2.Args[1]
14151 if p != x2.Args[0] {
14152 break
14153 }
14154 if mem != x2.Args[1] {
14155 break
14156 }
14157 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14158 break
14159 }
14160 b = mergePoint(b, x0, x1, x2)
14161 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14162 v.reset(OpCopy)
14163 v.AddArg(v0)
14164 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14165 v1.AuxInt = i0
14166 v1.Aux = s
14167 v1.AddArg(p)
14168 v0.AddArg(v1)
14169 v0.AddArg(mem)
14170 return true
14171 }
14172
14173
14174
14175 for {
14176 t := v.Type
14177 _ = v.Args[1]
14178 s1 := v.Args[0]
14179 if s1.Op != OpPPC64SLDconst {
14180 break
14181 }
14182 if s1.AuxInt != 24 {
14183 break
14184 }
14185 x2 := s1.Args[0]
14186 if x2.Op != OpPPC64MOVBZload {
14187 break
14188 }
14189 i0 := x2.AuxInt
14190 s := x2.Aux
14191 mem := x2.Args[1]
14192 p := x2.Args[0]
14193 o0 := v.Args[1]
14194 if o0.Op != OpPPC64OR {
14195 break
14196 }
14197 if o0.Type != t {
14198 break
14199 }
14200 _ = o0.Args[1]
14201 s0 := o0.Args[0]
14202 if s0.Op != OpPPC64SLDconst {
14203 break
14204 }
14205 if s0.AuxInt != 16 {
14206 break
14207 }
14208 x1 := s0.Args[0]
14209 if x1.Op != OpPPC64MOVBZload {
14210 break
14211 }
14212 i1 := x1.AuxInt
14213 if x1.Aux != s {
14214 break
14215 }
14216 _ = x1.Args[1]
14217 if p != x1.Args[0] {
14218 break
14219 }
14220 if mem != x1.Args[1] {
14221 break
14222 }
14223 x0 := o0.Args[1]
14224 if x0.Op != OpPPC64MOVHBRload {
14225 break
14226 }
14227 if x0.Type != t {
14228 break
14229 }
14230 _ = x0.Args[1]
14231 x0_0 := x0.Args[0]
14232 if x0_0.Op != OpPPC64MOVDaddr {
14233 break
14234 }
14235 if x0_0.Type != typ.Uintptr {
14236 break
14237 }
14238 i2 := x0_0.AuxInt
14239 if x0_0.Aux != s {
14240 break
14241 }
14242 if p != x0_0.Args[0] {
14243 break
14244 }
14245 if mem != x0.Args[1] {
14246 break
14247 }
14248 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14249 break
14250 }
14251 b = mergePoint(b, x0, x1, x2)
14252 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
14253 v.reset(OpCopy)
14254 v.AddArg(v0)
14255 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14256 v1.AuxInt = i0
14257 v1.Aux = s
14258 v1.AddArg(p)
14259 v0.AddArg(v1)
14260 v0.AddArg(mem)
14261 return true
14262 }
14263
14264
14265
14266 for {
14267 t := v.Type
14268 _ = v.Args[1]
14269 s1 := v.Args[0]
14270 if s1.Op != OpPPC64SLDconst {
14271 break
14272 }
14273 if s1.AuxInt != 24 {
14274 break
14275 }
14276 x2 := s1.Args[0]
14277 if x2.Op != OpPPC64MOVBZload {
14278 break
14279 }
14280 i0 := x2.AuxInt
14281 s := x2.Aux
14282 mem := x2.Args[1]
14283 p := x2.Args[0]
14284 o0 := v.Args[1]
14285 if o0.Op != OpPPC64OR {
14286 break
14287 }
14288 if o0.Type != t {
14289 break
14290 }
14291 _ = o0.Args[1]
14292 x0 := o0.Args[0]
14293 if x0.Op != OpPPC64MOVHBRload {
14294 break
14295 }
14296 if x0.Type != t {
14297 break
14298 }
14299 _ = x0.Args[1]
14300 x0_0 := x0.Args[0]
14301 if x0_0.Op != OpPPC64MOVDaddr {
14302 break
14303 }
14304 if x0_0.Type != typ.Uintptr {
14305 break
14306 }
14307 i2 := x0_0.AuxInt
14308 if x0_0.Aux != s {
14309 break
14310 }
14311 if p != x0_0.Args[0] {
14312 break
14313 }
14314 if mem != x0.Args[1] {
14315 break
14316 }
14317 s0 := o0.Args[1]
14318 if s0.Op != OpPPC64SLDconst {
14319 break
14320 }
14321 if s0.AuxInt != 16 {
14322 break
14323 }
14324 x1 := s0.Args[0]
14325 if x1.Op != OpPPC64MOVBZload {
14326 break
14327 }
14328 i1 := x1.AuxInt
14329 if x1.Aux != s {
14330 break
14331 }
14332 _ = x1.Args[1]
14333 if p != x1.Args[0] {
14334 break
14335 }
14336 if mem != x1.Args[1] {
14337 break
14338 }
14339 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14340 break
14341 }
14342 b = mergePoint(b, x0, x1, x2)
14343 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
14344 v.reset(OpCopy)
14345 v.AddArg(v0)
14346 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14347 v1.AuxInt = i0
14348 v1.Aux = s
14349 v1.AddArg(p)
14350 v0.AddArg(v1)
14351 v0.AddArg(mem)
14352 return true
14353 }
14354
14355
14356
14357 for {
14358 t := v.Type
14359 _ = v.Args[1]
14360 o0 := v.Args[0]
14361 if o0.Op != OpPPC64OR {
14362 break
14363 }
14364 if o0.Type != t {
14365 break
14366 }
14367 _ = o0.Args[1]
14368 s0 := o0.Args[0]
14369 if s0.Op != OpPPC64SLDconst {
14370 break
14371 }
14372 if s0.AuxInt != 16 {
14373 break
14374 }
14375 x1 := s0.Args[0]
14376 if x1.Op != OpPPC64MOVBZload {
14377 break
14378 }
14379 i1 := x1.AuxInt
14380 s := x1.Aux
14381 mem := x1.Args[1]
14382 p := x1.Args[0]
14383 x0 := o0.Args[1]
14384 if x0.Op != OpPPC64MOVHBRload {
14385 break
14386 }
14387 if x0.Type != t {
14388 break
14389 }
14390 _ = x0.Args[1]
14391 x0_0 := x0.Args[0]
14392 if x0_0.Op != OpPPC64MOVDaddr {
14393 break
14394 }
14395 if x0_0.Type != typ.Uintptr {
14396 break
14397 }
14398 i2 := x0_0.AuxInt
14399 if x0_0.Aux != s {
14400 break
14401 }
14402 if p != x0_0.Args[0] {
14403 break
14404 }
14405 if mem != x0.Args[1] {
14406 break
14407 }
14408 s1 := v.Args[1]
14409 if s1.Op != OpPPC64SLDconst {
14410 break
14411 }
14412 if s1.AuxInt != 24 {
14413 break
14414 }
14415 x2 := s1.Args[0]
14416 if x2.Op != OpPPC64MOVBZload {
14417 break
14418 }
14419 i0 := x2.AuxInt
14420 if x2.Aux != s {
14421 break
14422 }
14423 _ = x2.Args[1]
14424 if p != x2.Args[0] {
14425 break
14426 }
14427 if mem != x2.Args[1] {
14428 break
14429 }
14430 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14431 break
14432 }
14433 b = mergePoint(b, x0, x1, x2)
14434 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14435 v.reset(OpCopy)
14436 v.AddArg(v0)
14437 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14438 v1.AuxInt = i0
14439 v1.Aux = s
14440 v1.AddArg(p)
14441 v0.AddArg(v1)
14442 v0.AddArg(mem)
14443 return true
14444 }
14445
14446
14447
14448 for {
14449 t := v.Type
14450 _ = v.Args[1]
14451 o0 := v.Args[0]
14452 if o0.Op != OpPPC64OR {
14453 break
14454 }
14455 if o0.Type != t {
14456 break
14457 }
14458 _ = o0.Args[1]
14459 x0 := o0.Args[0]
14460 if x0.Op != OpPPC64MOVHBRload {
14461 break
14462 }
14463 if x0.Type != t {
14464 break
14465 }
14466 mem := x0.Args[1]
14467 x0_0 := x0.Args[0]
14468 if x0_0.Op != OpPPC64MOVDaddr {
14469 break
14470 }
14471 if x0_0.Type != typ.Uintptr {
14472 break
14473 }
14474 i2 := x0_0.AuxInt
14475 s := x0_0.Aux
14476 p := x0_0.Args[0]
14477 s0 := o0.Args[1]
14478 if s0.Op != OpPPC64SLDconst {
14479 break
14480 }
14481 if s0.AuxInt != 16 {
14482 break
14483 }
14484 x1 := s0.Args[0]
14485 if x1.Op != OpPPC64MOVBZload {
14486 break
14487 }
14488 i1 := x1.AuxInt
14489 if x1.Aux != s {
14490 break
14491 }
14492 _ = x1.Args[1]
14493 if p != x1.Args[0] {
14494 break
14495 }
14496 if mem != x1.Args[1] {
14497 break
14498 }
14499 s1 := v.Args[1]
14500 if s1.Op != OpPPC64SLDconst {
14501 break
14502 }
14503 if s1.AuxInt != 24 {
14504 break
14505 }
14506 x2 := s1.Args[0]
14507 if x2.Op != OpPPC64MOVBZload {
14508 break
14509 }
14510 i0 := x2.AuxInt
14511 if x2.Aux != s {
14512 break
14513 }
14514 _ = x2.Args[1]
14515 if p != x2.Args[0] {
14516 break
14517 }
14518 if mem != x2.Args[1] {
14519 break
14520 }
14521 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14522 break
14523 }
14524 b = mergePoint(b, x0, x1, x2)
14525 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14526 v.reset(OpCopy)
14527 v.AddArg(v0)
14528 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14529 v1.AuxInt = i0
14530 v1.Aux = s
14531 v1.AddArg(p)
14532 v0.AddArg(v1)
14533 v0.AddArg(mem)
14534 return true
14535 }
14536 return false
14537 }
14538 func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool {
14539 b := v.Block
14540 config := b.Func.Config
14541 typ := &b.Func.Config.Types
14542
14543
14544
14545 for {
14546 t := v.Type
14547 _ = v.Args[1]
14548 x0 := v.Args[0]
14549 if x0.Op != OpPPC64MOVBZload {
14550 break
14551 }
14552 i3 := x0.AuxInt
14553 s := x0.Aux
14554 mem := x0.Args[1]
14555 p := x0.Args[0]
14556 o0 := v.Args[1]
14557 if o0.Op != OpPPC64OR {
14558 break
14559 }
14560 if o0.Type != t {
14561 break
14562 }
14563 _ = o0.Args[1]
14564 s0 := o0.Args[0]
14565 if s0.Op != OpPPC64SLWconst {
14566 break
14567 }
14568 if s0.AuxInt != 8 {
14569 break
14570 }
14571 x1 := s0.Args[0]
14572 if x1.Op != OpPPC64MOVBZload {
14573 break
14574 }
14575 i2 := x1.AuxInt
14576 if x1.Aux != s {
14577 break
14578 }
14579 _ = x1.Args[1]
14580 if p != x1.Args[0] {
14581 break
14582 }
14583 if mem != x1.Args[1] {
14584 break
14585 }
14586 s1 := o0.Args[1]
14587 if s1.Op != OpPPC64SLWconst {
14588 break
14589 }
14590 if s1.AuxInt != 16 {
14591 break
14592 }
14593 x2 := s1.Args[0]
14594 if x2.Op != OpPPC64MOVHBRload {
14595 break
14596 }
14597 if x2.Type != t {
14598 break
14599 }
14600 _ = x2.Args[1]
14601 x2_0 := x2.Args[0]
14602 if x2_0.Op != OpPPC64MOVDaddr {
14603 break
14604 }
14605 if x2_0.Type != typ.Uintptr {
14606 break
14607 }
14608 i0 := x2_0.AuxInt
14609 if x2_0.Aux != s {
14610 break
14611 }
14612 if p != x2_0.Args[0] {
14613 break
14614 }
14615 if mem != x2.Args[1] {
14616 break
14617 }
14618 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14619 break
14620 }
14621 b = mergePoint(b, x0, x1, x2)
14622 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14623 v.reset(OpCopy)
14624 v.AddArg(v0)
14625 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14626 v1.AuxInt = i0
14627 v1.Aux = s
14628 v1.AddArg(p)
14629 v0.AddArg(v1)
14630 v0.AddArg(mem)
14631 return true
14632 }
14633
14634
14635
14636 for {
14637 t := v.Type
14638 _ = v.Args[1]
14639 x0 := v.Args[0]
14640 if x0.Op != OpPPC64MOVBZload {
14641 break
14642 }
14643 i3 := x0.AuxInt
14644 s := x0.Aux
14645 mem := x0.Args[1]
14646 p := x0.Args[0]
14647 o0 := v.Args[1]
14648 if o0.Op != OpPPC64OR {
14649 break
14650 }
14651 if o0.Type != t {
14652 break
14653 }
14654 _ = o0.Args[1]
14655 s1 := o0.Args[0]
14656 if s1.Op != OpPPC64SLWconst {
14657 break
14658 }
14659 if s1.AuxInt != 16 {
14660 break
14661 }
14662 x2 := s1.Args[0]
14663 if x2.Op != OpPPC64MOVHBRload {
14664 break
14665 }
14666 if x2.Type != t {
14667 break
14668 }
14669 _ = x2.Args[1]
14670 x2_0 := x2.Args[0]
14671 if x2_0.Op != OpPPC64MOVDaddr {
14672 break
14673 }
14674 if x2_0.Type != typ.Uintptr {
14675 break
14676 }
14677 i0 := x2_0.AuxInt
14678 if x2_0.Aux != s {
14679 break
14680 }
14681 if p != x2_0.Args[0] {
14682 break
14683 }
14684 if mem != x2.Args[1] {
14685 break
14686 }
14687 s0 := o0.Args[1]
14688 if s0.Op != OpPPC64SLWconst {
14689 break
14690 }
14691 if s0.AuxInt != 8 {
14692 break
14693 }
14694 x1 := s0.Args[0]
14695 if x1.Op != OpPPC64MOVBZload {
14696 break
14697 }
14698 i2 := x1.AuxInt
14699 if x1.Aux != s {
14700 break
14701 }
14702 _ = x1.Args[1]
14703 if p != x1.Args[0] {
14704 break
14705 }
14706 if mem != x1.Args[1] {
14707 break
14708 }
14709 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14710 break
14711 }
14712 b = mergePoint(b, x0, x1, x2)
14713 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
14714 v.reset(OpCopy)
14715 v.AddArg(v0)
14716 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14717 v1.AuxInt = i0
14718 v1.Aux = s
14719 v1.AddArg(p)
14720 v0.AddArg(v1)
14721 v0.AddArg(mem)
14722 return true
14723 }
14724
14725
14726
14727 for {
14728 t := v.Type
14729 _ = v.Args[1]
14730 o0 := v.Args[0]
14731 if o0.Op != OpPPC64OR {
14732 break
14733 }
14734 if o0.Type != t {
14735 break
14736 }
14737 _ = o0.Args[1]
14738 s0 := o0.Args[0]
14739 if s0.Op != OpPPC64SLWconst {
14740 break
14741 }
14742 if s0.AuxInt != 8 {
14743 break
14744 }
14745 x1 := s0.Args[0]
14746 if x1.Op != OpPPC64MOVBZload {
14747 break
14748 }
14749 i2 := x1.AuxInt
14750 s := x1.Aux
14751 mem := x1.Args[1]
14752 p := x1.Args[0]
14753 s1 := o0.Args[1]
14754 if s1.Op != OpPPC64SLWconst {
14755 break
14756 }
14757 if s1.AuxInt != 16 {
14758 break
14759 }
14760 x2 := s1.Args[0]
14761 if x2.Op != OpPPC64MOVHBRload {
14762 break
14763 }
14764 if x2.Type != t {
14765 break
14766 }
14767 _ = x2.Args[1]
14768 x2_0 := x2.Args[0]
14769 if x2_0.Op != OpPPC64MOVDaddr {
14770 break
14771 }
14772 if x2_0.Type != typ.Uintptr {
14773 break
14774 }
14775 i0 := x2_0.AuxInt
14776 if x2_0.Aux != s {
14777 break
14778 }
14779 if p != x2_0.Args[0] {
14780 break
14781 }
14782 if mem != x2.Args[1] {
14783 break
14784 }
14785 x0 := v.Args[1]
14786 if x0.Op != OpPPC64MOVBZload {
14787 break
14788 }
14789 i3 := x0.AuxInt
14790 if x0.Aux != s {
14791 break
14792 }
14793 _ = x0.Args[1]
14794 if p != x0.Args[0] {
14795 break
14796 }
14797 if mem != x0.Args[1] {
14798 break
14799 }
14800 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14801 break
14802 }
14803 b = mergePoint(b, x0, x1, x2)
14804 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
14805 v.reset(OpCopy)
14806 v.AddArg(v0)
14807 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14808 v1.AuxInt = i0
14809 v1.Aux = s
14810 v1.AddArg(p)
14811 v0.AddArg(v1)
14812 v0.AddArg(mem)
14813 return true
14814 }
14815
14816
14817
14818 for {
14819 t := v.Type
14820 _ = v.Args[1]
14821 o0 := v.Args[0]
14822 if o0.Op != OpPPC64OR {
14823 break
14824 }
14825 if o0.Type != t {
14826 break
14827 }
14828 _ = o0.Args[1]
14829 s1 := o0.Args[0]
14830 if s1.Op != OpPPC64SLWconst {
14831 break
14832 }
14833 if s1.AuxInt != 16 {
14834 break
14835 }
14836 x2 := s1.Args[0]
14837 if x2.Op != OpPPC64MOVHBRload {
14838 break
14839 }
14840 if x2.Type != t {
14841 break
14842 }
14843 mem := x2.Args[1]
14844 x2_0 := x2.Args[0]
14845 if x2_0.Op != OpPPC64MOVDaddr {
14846 break
14847 }
14848 if x2_0.Type != typ.Uintptr {
14849 break
14850 }
14851 i0 := x2_0.AuxInt
14852 s := x2_0.Aux
14853 p := x2_0.Args[0]
14854 s0 := o0.Args[1]
14855 if s0.Op != OpPPC64SLWconst {
14856 break
14857 }
14858 if s0.AuxInt != 8 {
14859 break
14860 }
14861 x1 := s0.Args[0]
14862 if x1.Op != OpPPC64MOVBZload {
14863 break
14864 }
14865 i2 := x1.AuxInt
14866 if x1.Aux != s {
14867 break
14868 }
14869 _ = x1.Args[1]
14870 if p != x1.Args[0] {
14871 break
14872 }
14873 if mem != x1.Args[1] {
14874 break
14875 }
14876 x0 := v.Args[1]
14877 if x0.Op != OpPPC64MOVBZload {
14878 break
14879 }
14880 i3 := x0.AuxInt
14881 if x0.Aux != s {
14882 break
14883 }
14884 _ = x0.Args[1]
14885 if p != x0.Args[0] {
14886 break
14887 }
14888 if mem != x0.Args[1] {
14889 break
14890 }
14891 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14892 break
14893 }
14894 b = mergePoint(b, x0, x1, x2)
14895 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
14896 v.reset(OpCopy)
14897 v.AddArg(v0)
14898 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14899 v1.AuxInt = i0
14900 v1.Aux = s
14901 v1.AddArg(p)
14902 v0.AddArg(v1)
14903 v0.AddArg(mem)
14904 return true
14905 }
14906
14907
14908
14909 for {
14910 t := v.Type
14911 _ = v.Args[1]
14912 x0 := v.Args[0]
14913 if x0.Op != OpPPC64MOVBZload {
14914 break
14915 }
14916 i3 := x0.AuxInt
14917 s := x0.Aux
14918 mem := x0.Args[1]
14919 p := x0.Args[0]
14920 o0 := v.Args[1]
14921 if o0.Op != OpPPC64OR {
14922 break
14923 }
14924 if o0.Type != t {
14925 break
14926 }
14927 _ = o0.Args[1]
14928 s0 := o0.Args[0]
14929 if s0.Op != OpPPC64SLDconst {
14930 break
14931 }
14932 if s0.AuxInt != 8 {
14933 break
14934 }
14935 x1 := s0.Args[0]
14936 if x1.Op != OpPPC64MOVBZload {
14937 break
14938 }
14939 i2 := x1.AuxInt
14940 if x1.Aux != s {
14941 break
14942 }
14943 _ = x1.Args[1]
14944 if p != x1.Args[0] {
14945 break
14946 }
14947 if mem != x1.Args[1] {
14948 break
14949 }
14950 s1 := o0.Args[1]
14951 if s1.Op != OpPPC64SLDconst {
14952 break
14953 }
14954 if s1.AuxInt != 16 {
14955 break
14956 }
14957 x2 := s1.Args[0]
14958 if x2.Op != OpPPC64MOVHBRload {
14959 break
14960 }
14961 if x2.Type != t {
14962 break
14963 }
14964 _ = x2.Args[1]
14965 x2_0 := x2.Args[0]
14966 if x2_0.Op != OpPPC64MOVDaddr {
14967 break
14968 }
14969 if x2_0.Type != typ.Uintptr {
14970 break
14971 }
14972 i0 := x2_0.AuxInt
14973 if x2_0.Aux != s {
14974 break
14975 }
14976 if p != x2_0.Args[0] {
14977 break
14978 }
14979 if mem != x2.Args[1] {
14980 break
14981 }
14982 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
14983 break
14984 }
14985 b = mergePoint(b, x0, x1, x2)
14986 v0 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
14987 v.reset(OpCopy)
14988 v.AddArg(v0)
14989 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
14990 v1.AuxInt = i0
14991 v1.Aux = s
14992 v1.AddArg(p)
14993 v0.AddArg(v1)
14994 v0.AddArg(mem)
14995 return true
14996 }
14997
14998
14999
15000 for {
15001 t := v.Type
15002 _ = v.Args[1]
15003 x0 := v.Args[0]
15004 if x0.Op != OpPPC64MOVBZload {
15005 break
15006 }
15007 i3 := x0.AuxInt
15008 s := x0.Aux
15009 mem := x0.Args[1]
15010 p := x0.Args[0]
15011 o0 := v.Args[1]
15012 if o0.Op != OpPPC64OR {
15013 break
15014 }
15015 if o0.Type != t {
15016 break
15017 }
15018 _ = o0.Args[1]
15019 s1 := o0.Args[0]
15020 if s1.Op != OpPPC64SLDconst {
15021 break
15022 }
15023 if s1.AuxInt != 16 {
15024 break
15025 }
15026 x2 := s1.Args[0]
15027 if x2.Op != OpPPC64MOVHBRload {
15028 break
15029 }
15030 if x2.Type != t {
15031 break
15032 }
15033 _ = x2.Args[1]
15034 x2_0 := x2.Args[0]
15035 if x2_0.Op != OpPPC64MOVDaddr {
15036 break
15037 }
15038 if x2_0.Type != typ.Uintptr {
15039 break
15040 }
15041 i0 := x2_0.AuxInt
15042 if x2_0.Aux != s {
15043 break
15044 }
15045 if p != x2_0.Args[0] {
15046 break
15047 }
15048 if mem != x2.Args[1] {
15049 break
15050 }
15051 s0 := o0.Args[1]
15052 if s0.Op != OpPPC64SLDconst {
15053 break
15054 }
15055 if s0.AuxInt != 8 {
15056 break
15057 }
15058 x1 := s0.Args[0]
15059 if x1.Op != OpPPC64MOVBZload {
15060 break
15061 }
15062 i2 := x1.AuxInt
15063 if x1.Aux != s {
15064 break
15065 }
15066 _ = x1.Args[1]
15067 if p != x1.Args[0] {
15068 break
15069 }
15070 if mem != x1.Args[1] {
15071 break
15072 }
15073 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
15074 break
15075 }
15076 b = mergePoint(b, x0, x1, x2)
15077 v0 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
15078 v.reset(OpCopy)
15079 v.AddArg(v0)
15080 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15081 v1.AuxInt = i0
15082 v1.Aux = s
15083 v1.AddArg(p)
15084 v0.AddArg(v1)
15085 v0.AddArg(mem)
15086 return true
15087 }
15088
15089
15090
15091 for {
15092 t := v.Type
15093 _ = v.Args[1]
15094 o0 := v.Args[0]
15095 if o0.Op != OpPPC64OR {
15096 break
15097 }
15098 if o0.Type != t {
15099 break
15100 }
15101 _ = o0.Args[1]
15102 s0 := o0.Args[0]
15103 if s0.Op != OpPPC64SLDconst {
15104 break
15105 }
15106 if s0.AuxInt != 8 {
15107 break
15108 }
15109 x1 := s0.Args[0]
15110 if x1.Op != OpPPC64MOVBZload {
15111 break
15112 }
15113 i2 := x1.AuxInt
15114 s := x1.Aux
15115 mem := x1.Args[1]
15116 p := x1.Args[0]
15117 s1 := o0.Args[1]
15118 if s1.Op != OpPPC64SLDconst {
15119 break
15120 }
15121 if s1.AuxInt != 16 {
15122 break
15123 }
15124 x2 := s1.Args[0]
15125 if x2.Op != OpPPC64MOVHBRload {
15126 break
15127 }
15128 if x2.Type != t {
15129 break
15130 }
15131 _ = x2.Args[1]
15132 x2_0 := x2.Args[0]
15133 if x2_0.Op != OpPPC64MOVDaddr {
15134 break
15135 }
15136 if x2_0.Type != typ.Uintptr {
15137 break
15138 }
15139 i0 := x2_0.AuxInt
15140 if x2_0.Aux != s {
15141 break
15142 }
15143 if p != x2_0.Args[0] {
15144 break
15145 }
15146 if mem != x2.Args[1] {
15147 break
15148 }
15149 x0 := v.Args[1]
15150 if x0.Op != OpPPC64MOVBZload {
15151 break
15152 }
15153 i3 := x0.AuxInt
15154 if x0.Aux != s {
15155 break
15156 }
15157 _ = x0.Args[1]
15158 if p != x0.Args[0] {
15159 break
15160 }
15161 if mem != x0.Args[1] {
15162 break
15163 }
15164 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
15165 break
15166 }
15167 b = mergePoint(b, x0, x1, x2)
15168 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
15169 v.reset(OpCopy)
15170 v.AddArg(v0)
15171 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15172 v1.AuxInt = i0
15173 v1.Aux = s
15174 v1.AddArg(p)
15175 v0.AddArg(v1)
15176 v0.AddArg(mem)
15177 return true
15178 }
15179
15180
15181
15182 for {
15183 t := v.Type
15184 _ = v.Args[1]
15185 o0 := v.Args[0]
15186 if o0.Op != OpPPC64OR {
15187 break
15188 }
15189 if o0.Type != t {
15190 break
15191 }
15192 _ = o0.Args[1]
15193 s1 := o0.Args[0]
15194 if s1.Op != OpPPC64SLDconst {
15195 break
15196 }
15197 if s1.AuxInt != 16 {
15198 break
15199 }
15200 x2 := s1.Args[0]
15201 if x2.Op != OpPPC64MOVHBRload {
15202 break
15203 }
15204 if x2.Type != t {
15205 break
15206 }
15207 mem := x2.Args[1]
15208 x2_0 := x2.Args[0]
15209 if x2_0.Op != OpPPC64MOVDaddr {
15210 break
15211 }
15212 if x2_0.Type != typ.Uintptr {
15213 break
15214 }
15215 i0 := x2_0.AuxInt
15216 s := x2_0.Aux
15217 p := x2_0.Args[0]
15218 s0 := o0.Args[1]
15219 if s0.Op != OpPPC64SLDconst {
15220 break
15221 }
15222 if s0.AuxInt != 8 {
15223 break
15224 }
15225 x1 := s0.Args[0]
15226 if x1.Op != OpPPC64MOVBZload {
15227 break
15228 }
15229 i2 := x1.AuxInt
15230 if x1.Aux != s {
15231 break
15232 }
15233 _ = x1.Args[1]
15234 if p != x1.Args[0] {
15235 break
15236 }
15237 if mem != x1.Args[1] {
15238 break
15239 }
15240 x0 := v.Args[1]
15241 if x0.Op != OpPPC64MOVBZload {
15242 break
15243 }
15244 i3 := x0.AuxInt
15245 if x0.Aux != s {
15246 break
15247 }
15248 _ = x0.Args[1]
15249 if p != x0.Args[0] {
15250 break
15251 }
15252 if mem != x0.Args[1] {
15253 break
15254 }
15255 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
15256 break
15257 }
15258 b = mergePoint(b, x0, x1, x2)
15259 v0 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
15260 v.reset(OpCopy)
15261 v.AddArg(v0)
15262 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15263 v1.AuxInt = i0
15264 v1.Aux = s
15265 v1.AddArg(p)
15266 v0.AddArg(v1)
15267 v0.AddArg(mem)
15268 return true
15269 }
15270
15271
15272
15273 for {
15274 t := v.Type
15275 _ = v.Args[1]
15276 s2 := v.Args[0]
15277 if s2.Op != OpPPC64SLDconst {
15278 break
15279 }
15280 if s2.AuxInt != 32 {
15281 break
15282 }
15283 x2 := s2.Args[0]
15284 if x2.Op != OpPPC64MOVBZload {
15285 break
15286 }
15287 i3 := x2.AuxInt
15288 s := x2.Aux
15289 mem := x2.Args[1]
15290 p := x2.Args[0]
15291 o0 := v.Args[1]
15292 if o0.Op != OpPPC64OR {
15293 break
15294 }
15295 if o0.Type != t {
15296 break
15297 }
15298 _ = o0.Args[1]
15299 s1 := o0.Args[0]
15300 if s1.Op != OpPPC64SLDconst {
15301 break
15302 }
15303 if s1.AuxInt != 40 {
15304 break
15305 }
15306 x1 := s1.Args[0]
15307 if x1.Op != OpPPC64MOVBZload {
15308 break
15309 }
15310 i2 := x1.AuxInt
15311 if x1.Aux != s {
15312 break
15313 }
15314 _ = x1.Args[1]
15315 if p != x1.Args[0] {
15316 break
15317 }
15318 if mem != x1.Args[1] {
15319 break
15320 }
15321 s0 := o0.Args[1]
15322 if s0.Op != OpPPC64SLDconst {
15323 break
15324 }
15325 if s0.AuxInt != 48 {
15326 break
15327 }
15328 x0 := s0.Args[0]
15329 if x0.Op != OpPPC64MOVHBRload {
15330 break
15331 }
15332 if x0.Type != t {
15333 break
15334 }
15335 _ = x0.Args[1]
15336 x0_0 := x0.Args[0]
15337 if x0_0.Op != OpPPC64MOVDaddr {
15338 break
15339 }
15340 if x0_0.Type != typ.Uintptr {
15341 break
15342 }
15343 i0 := x0_0.AuxInt
15344 if x0_0.Aux != s {
15345 break
15346 }
15347 if p != x0_0.Args[0] {
15348 break
15349 }
15350 if mem != x0.Args[1] {
15351 break
15352 }
15353 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15354 break
15355 }
15356 b = mergePoint(b, x0, x1, x2)
15357 v0 := b.NewValue0(x0.Pos, OpPPC64SLDconst, t)
15358 v.reset(OpCopy)
15359 v.AddArg(v0)
15360 v0.AuxInt = 32
15361 v1 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
15362 v2 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15363 v2.AuxInt = i0
15364 v2.Aux = s
15365 v2.AddArg(p)
15366 v1.AddArg(v2)
15367 v1.AddArg(mem)
15368 v0.AddArg(v1)
15369 return true
15370 }
15371
15372
15373
15374 for {
15375 t := v.Type
15376 _ = v.Args[1]
15377 s2 := v.Args[0]
15378 if s2.Op != OpPPC64SLDconst {
15379 break
15380 }
15381 if s2.AuxInt != 32 {
15382 break
15383 }
15384 x2 := s2.Args[0]
15385 if x2.Op != OpPPC64MOVBZload {
15386 break
15387 }
15388 i3 := x2.AuxInt
15389 s := x2.Aux
15390 mem := x2.Args[1]
15391 p := x2.Args[0]
15392 o0 := v.Args[1]
15393 if o0.Op != OpPPC64OR {
15394 break
15395 }
15396 if o0.Type != t {
15397 break
15398 }
15399 _ = o0.Args[1]
15400 s0 := o0.Args[0]
15401 if s0.Op != OpPPC64SLDconst {
15402 break
15403 }
15404 if s0.AuxInt != 48 {
15405 break
15406 }
15407 x0 := s0.Args[0]
15408 if x0.Op != OpPPC64MOVHBRload {
15409 break
15410 }
15411 if x0.Type != t {
15412 break
15413 }
15414 _ = x0.Args[1]
15415 x0_0 := x0.Args[0]
15416 if x0_0.Op != OpPPC64MOVDaddr {
15417 break
15418 }
15419 if x0_0.Type != typ.Uintptr {
15420 break
15421 }
15422 i0 := x0_0.AuxInt
15423 if x0_0.Aux != s {
15424 break
15425 }
15426 if p != x0_0.Args[0] {
15427 break
15428 }
15429 if mem != x0.Args[1] {
15430 break
15431 }
15432 s1 := o0.Args[1]
15433 if s1.Op != OpPPC64SLDconst {
15434 break
15435 }
15436 if s1.AuxInt != 40 {
15437 break
15438 }
15439 x1 := s1.Args[0]
15440 if x1.Op != OpPPC64MOVBZload {
15441 break
15442 }
15443 i2 := x1.AuxInt
15444 if x1.Aux != s {
15445 break
15446 }
15447 _ = x1.Args[1]
15448 if p != x1.Args[0] {
15449 break
15450 }
15451 if mem != x1.Args[1] {
15452 break
15453 }
15454 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15455 break
15456 }
15457 b = mergePoint(b, x0, x1, x2)
15458 v0 := b.NewValue0(x1.Pos, OpPPC64SLDconst, t)
15459 v.reset(OpCopy)
15460 v.AddArg(v0)
15461 v0.AuxInt = 32
15462 v1 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
15463 v2 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15464 v2.AuxInt = i0
15465 v2.Aux = s
15466 v2.AddArg(p)
15467 v1.AddArg(v2)
15468 v1.AddArg(mem)
15469 v0.AddArg(v1)
15470 return true
15471 }
15472 return false
15473 }
15474 func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool {
15475 b := v.Block
15476 config := b.Func.Config
15477 typ := &b.Func.Config.Types
15478
15479
15480
15481 for {
15482 t := v.Type
15483 _ = v.Args[1]
15484 o0 := v.Args[0]
15485 if o0.Op != OpPPC64OR {
15486 break
15487 }
15488 if o0.Type != t {
15489 break
15490 }
15491 _ = o0.Args[1]
15492 s1 := o0.Args[0]
15493 if s1.Op != OpPPC64SLDconst {
15494 break
15495 }
15496 if s1.AuxInt != 40 {
15497 break
15498 }
15499 x1 := s1.Args[0]
15500 if x1.Op != OpPPC64MOVBZload {
15501 break
15502 }
15503 i2 := x1.AuxInt
15504 s := x1.Aux
15505 mem := x1.Args[1]
15506 p := x1.Args[0]
15507 s0 := o0.Args[1]
15508 if s0.Op != OpPPC64SLDconst {
15509 break
15510 }
15511 if s0.AuxInt != 48 {
15512 break
15513 }
15514 x0 := s0.Args[0]
15515 if x0.Op != OpPPC64MOVHBRload {
15516 break
15517 }
15518 if x0.Type != t {
15519 break
15520 }
15521 _ = x0.Args[1]
15522 x0_0 := x0.Args[0]
15523 if x0_0.Op != OpPPC64MOVDaddr {
15524 break
15525 }
15526 if x0_0.Type != typ.Uintptr {
15527 break
15528 }
15529 i0 := x0_0.AuxInt
15530 if x0_0.Aux != s {
15531 break
15532 }
15533 if p != x0_0.Args[0] {
15534 break
15535 }
15536 if mem != x0.Args[1] {
15537 break
15538 }
15539 s2 := v.Args[1]
15540 if s2.Op != OpPPC64SLDconst {
15541 break
15542 }
15543 if s2.AuxInt != 32 {
15544 break
15545 }
15546 x2 := s2.Args[0]
15547 if x2.Op != OpPPC64MOVBZload {
15548 break
15549 }
15550 i3 := x2.AuxInt
15551 if x2.Aux != s {
15552 break
15553 }
15554 _ = x2.Args[1]
15555 if p != x2.Args[0] {
15556 break
15557 }
15558 if mem != x2.Args[1] {
15559 break
15560 }
15561 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15562 break
15563 }
15564 b = mergePoint(b, x0, x1, x2)
15565 v0 := b.NewValue0(x2.Pos, OpPPC64SLDconst, t)
15566 v.reset(OpCopy)
15567 v.AddArg(v0)
15568 v0.AuxInt = 32
15569 v1 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
15570 v2 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15571 v2.AuxInt = i0
15572 v2.Aux = s
15573 v2.AddArg(p)
15574 v1.AddArg(v2)
15575 v1.AddArg(mem)
15576 v0.AddArg(v1)
15577 return true
15578 }
15579
15580
15581
15582 for {
15583 t := v.Type
15584 _ = v.Args[1]
15585 o0 := v.Args[0]
15586 if o0.Op != OpPPC64OR {
15587 break
15588 }
15589 if o0.Type != t {
15590 break
15591 }
15592 _ = o0.Args[1]
15593 s0 := o0.Args[0]
15594 if s0.Op != OpPPC64SLDconst {
15595 break
15596 }
15597 if s0.AuxInt != 48 {
15598 break
15599 }
15600 x0 := s0.Args[0]
15601 if x0.Op != OpPPC64MOVHBRload {
15602 break
15603 }
15604 if x0.Type != t {
15605 break
15606 }
15607 mem := x0.Args[1]
15608 x0_0 := x0.Args[0]
15609 if x0_0.Op != OpPPC64MOVDaddr {
15610 break
15611 }
15612 if x0_0.Type != typ.Uintptr {
15613 break
15614 }
15615 i0 := x0_0.AuxInt
15616 s := x0_0.Aux
15617 p := x0_0.Args[0]
15618 s1 := o0.Args[1]
15619 if s1.Op != OpPPC64SLDconst {
15620 break
15621 }
15622 if s1.AuxInt != 40 {
15623 break
15624 }
15625 x1 := s1.Args[0]
15626 if x1.Op != OpPPC64MOVBZload {
15627 break
15628 }
15629 i2 := x1.AuxInt
15630 if x1.Aux != s {
15631 break
15632 }
15633 _ = x1.Args[1]
15634 if p != x1.Args[0] {
15635 break
15636 }
15637 if mem != x1.Args[1] {
15638 break
15639 }
15640 s2 := v.Args[1]
15641 if s2.Op != OpPPC64SLDconst {
15642 break
15643 }
15644 if s2.AuxInt != 32 {
15645 break
15646 }
15647 x2 := s2.Args[0]
15648 if x2.Op != OpPPC64MOVBZload {
15649 break
15650 }
15651 i3 := x2.AuxInt
15652 if x2.Aux != s {
15653 break
15654 }
15655 _ = x2.Args[1]
15656 if p != x2.Args[0] {
15657 break
15658 }
15659 if mem != x2.Args[1] {
15660 break
15661 }
15662 if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15663 break
15664 }
15665 b = mergePoint(b, x0, x1, x2)
15666 v0 := b.NewValue0(x2.Pos, OpPPC64SLDconst, t)
15667 v.reset(OpCopy)
15668 v.AddArg(v0)
15669 v0.AuxInt = 32
15670 v1 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
15671 v2 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15672 v2.AuxInt = i0
15673 v2.Aux = s
15674 v2.AddArg(p)
15675 v1.AddArg(v2)
15676 v1.AddArg(mem)
15677 v0.AddArg(v1)
15678 return true
15679 }
15680
15681
15682
15683 for {
15684 t := v.Type
15685 _ = v.Args[1]
15686 s2 := v.Args[0]
15687 if s2.Op != OpPPC64SLDconst {
15688 break
15689 }
15690 if s2.AuxInt != 56 {
15691 break
15692 }
15693 x2 := s2.Args[0]
15694 if x2.Op != OpPPC64MOVBZload {
15695 break
15696 }
15697 i0 := x2.AuxInt
15698 s := x2.Aux
15699 mem := x2.Args[1]
15700 p := x2.Args[0]
15701 o0 := v.Args[1]
15702 if o0.Op != OpPPC64OR {
15703 break
15704 }
15705 if o0.Type != t {
15706 break
15707 }
15708 _ = o0.Args[1]
15709 s1 := o0.Args[0]
15710 if s1.Op != OpPPC64SLDconst {
15711 break
15712 }
15713 if s1.AuxInt != 48 {
15714 break
15715 }
15716 x1 := s1.Args[0]
15717 if x1.Op != OpPPC64MOVBZload {
15718 break
15719 }
15720 i1 := x1.AuxInt
15721 if x1.Aux != s {
15722 break
15723 }
15724 _ = x1.Args[1]
15725 if p != x1.Args[0] {
15726 break
15727 }
15728 if mem != x1.Args[1] {
15729 break
15730 }
15731 s0 := o0.Args[1]
15732 if s0.Op != OpPPC64SLDconst {
15733 break
15734 }
15735 if s0.AuxInt != 32 {
15736 break
15737 }
15738 x0 := s0.Args[0]
15739 if x0.Op != OpPPC64MOVHBRload {
15740 break
15741 }
15742 if x0.Type != t {
15743 break
15744 }
15745 _ = x0.Args[1]
15746 x0_0 := x0.Args[0]
15747 if x0_0.Op != OpPPC64MOVDaddr {
15748 break
15749 }
15750 if x0_0.Type != typ.Uintptr {
15751 break
15752 }
15753 i2 := x0_0.AuxInt
15754 if x0_0.Aux != s {
15755 break
15756 }
15757 if p != x0_0.Args[0] {
15758 break
15759 }
15760 if mem != x0.Args[1] {
15761 break
15762 }
15763 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15764 break
15765 }
15766 b = mergePoint(b, x0, x1, x2)
15767 v0 := b.NewValue0(x0.Pos, OpPPC64SLDconst, t)
15768 v.reset(OpCopy)
15769 v.AddArg(v0)
15770 v0.AuxInt = 32
15771 v1 := b.NewValue0(x0.Pos, OpPPC64MOVWBRload, t)
15772 v2 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15773 v2.AuxInt = i0
15774 v2.Aux = s
15775 v2.AddArg(p)
15776 v1.AddArg(v2)
15777 v1.AddArg(mem)
15778 v0.AddArg(v1)
15779 return true
15780 }
15781
15782
15783
15784 for {
15785 t := v.Type
15786 _ = v.Args[1]
15787 s2 := v.Args[0]
15788 if s2.Op != OpPPC64SLDconst {
15789 break
15790 }
15791 if s2.AuxInt != 56 {
15792 break
15793 }
15794 x2 := s2.Args[0]
15795 if x2.Op != OpPPC64MOVBZload {
15796 break
15797 }
15798 i0 := x2.AuxInt
15799 s := x2.Aux
15800 mem := x2.Args[1]
15801 p := x2.Args[0]
15802 o0 := v.Args[1]
15803 if o0.Op != OpPPC64OR {
15804 break
15805 }
15806 if o0.Type != t {
15807 break
15808 }
15809 _ = o0.Args[1]
15810 s0 := o0.Args[0]
15811 if s0.Op != OpPPC64SLDconst {
15812 break
15813 }
15814 if s0.AuxInt != 32 {
15815 break
15816 }
15817 x0 := s0.Args[0]
15818 if x0.Op != OpPPC64MOVHBRload {
15819 break
15820 }
15821 if x0.Type != t {
15822 break
15823 }
15824 _ = x0.Args[1]
15825 x0_0 := x0.Args[0]
15826 if x0_0.Op != OpPPC64MOVDaddr {
15827 break
15828 }
15829 if x0_0.Type != typ.Uintptr {
15830 break
15831 }
15832 i2 := x0_0.AuxInt
15833 if x0_0.Aux != s {
15834 break
15835 }
15836 if p != x0_0.Args[0] {
15837 break
15838 }
15839 if mem != x0.Args[1] {
15840 break
15841 }
15842 s1 := o0.Args[1]
15843 if s1.Op != OpPPC64SLDconst {
15844 break
15845 }
15846 if s1.AuxInt != 48 {
15847 break
15848 }
15849 x1 := s1.Args[0]
15850 if x1.Op != OpPPC64MOVBZload {
15851 break
15852 }
15853 i1 := x1.AuxInt
15854 if x1.Aux != s {
15855 break
15856 }
15857 _ = x1.Args[1]
15858 if p != x1.Args[0] {
15859 break
15860 }
15861 if mem != x1.Args[1] {
15862 break
15863 }
15864 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15865 break
15866 }
15867 b = mergePoint(b, x0, x1, x2)
15868 v0 := b.NewValue0(x1.Pos, OpPPC64SLDconst, t)
15869 v.reset(OpCopy)
15870 v.AddArg(v0)
15871 v0.AuxInt = 32
15872 v1 := b.NewValue0(x1.Pos, OpPPC64MOVWBRload, t)
15873 v2 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15874 v2.AuxInt = i0
15875 v2.Aux = s
15876 v2.AddArg(p)
15877 v1.AddArg(v2)
15878 v1.AddArg(mem)
15879 v0.AddArg(v1)
15880 return true
15881 }
15882
15883
15884
15885 for {
15886 t := v.Type
15887 _ = v.Args[1]
15888 o0 := v.Args[0]
15889 if o0.Op != OpPPC64OR {
15890 break
15891 }
15892 if o0.Type != t {
15893 break
15894 }
15895 _ = o0.Args[1]
15896 s1 := o0.Args[0]
15897 if s1.Op != OpPPC64SLDconst {
15898 break
15899 }
15900 if s1.AuxInt != 48 {
15901 break
15902 }
15903 x1 := s1.Args[0]
15904 if x1.Op != OpPPC64MOVBZload {
15905 break
15906 }
15907 i1 := x1.AuxInt
15908 s := x1.Aux
15909 mem := x1.Args[1]
15910 p := x1.Args[0]
15911 s0 := o0.Args[1]
15912 if s0.Op != OpPPC64SLDconst {
15913 break
15914 }
15915 if s0.AuxInt != 32 {
15916 break
15917 }
15918 x0 := s0.Args[0]
15919 if x0.Op != OpPPC64MOVHBRload {
15920 break
15921 }
15922 if x0.Type != t {
15923 break
15924 }
15925 _ = x0.Args[1]
15926 x0_0 := x0.Args[0]
15927 if x0_0.Op != OpPPC64MOVDaddr {
15928 break
15929 }
15930 if x0_0.Type != typ.Uintptr {
15931 break
15932 }
15933 i2 := x0_0.AuxInt
15934 if x0_0.Aux != s {
15935 break
15936 }
15937 if p != x0_0.Args[0] {
15938 break
15939 }
15940 if mem != x0.Args[1] {
15941 break
15942 }
15943 s2 := v.Args[1]
15944 if s2.Op != OpPPC64SLDconst {
15945 break
15946 }
15947 if s2.AuxInt != 56 {
15948 break
15949 }
15950 x2 := s2.Args[0]
15951 if x2.Op != OpPPC64MOVBZload {
15952 break
15953 }
15954 i0 := x2.AuxInt
15955 if x2.Aux != s {
15956 break
15957 }
15958 _ = x2.Args[1]
15959 if p != x2.Args[0] {
15960 break
15961 }
15962 if mem != x2.Args[1] {
15963 break
15964 }
15965 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
15966 break
15967 }
15968 b = mergePoint(b, x0, x1, x2)
15969 v0 := b.NewValue0(x2.Pos, OpPPC64SLDconst, t)
15970 v.reset(OpCopy)
15971 v.AddArg(v0)
15972 v0.AuxInt = 32
15973 v1 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
15974 v2 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
15975 v2.AuxInt = i0
15976 v2.Aux = s
15977 v2.AddArg(p)
15978 v1.AddArg(v2)
15979 v1.AddArg(mem)
15980 v0.AddArg(v1)
15981 return true
15982 }
15983
15984
15985
15986 for {
15987 t := v.Type
15988 _ = v.Args[1]
15989 o0 := v.Args[0]
15990 if o0.Op != OpPPC64OR {
15991 break
15992 }
15993 if o0.Type != t {
15994 break
15995 }
15996 _ = o0.Args[1]
15997 s0 := o0.Args[0]
15998 if s0.Op != OpPPC64SLDconst {
15999 break
16000 }
16001 if s0.AuxInt != 32 {
16002 break
16003 }
16004 x0 := s0.Args[0]
16005 if x0.Op != OpPPC64MOVHBRload {
16006 break
16007 }
16008 if x0.Type != t {
16009 break
16010 }
16011 mem := x0.Args[1]
16012 x0_0 := x0.Args[0]
16013 if x0_0.Op != OpPPC64MOVDaddr {
16014 break
16015 }
16016 if x0_0.Type != typ.Uintptr {
16017 break
16018 }
16019 i2 := x0_0.AuxInt
16020 s := x0_0.Aux
16021 p := x0_0.Args[0]
16022 s1 := o0.Args[1]
16023 if s1.Op != OpPPC64SLDconst {
16024 break
16025 }
16026 if s1.AuxInt != 48 {
16027 break
16028 }
16029 x1 := s1.Args[0]
16030 if x1.Op != OpPPC64MOVBZload {
16031 break
16032 }
16033 i1 := x1.AuxInt
16034 if x1.Aux != s {
16035 break
16036 }
16037 _ = x1.Args[1]
16038 if p != x1.Args[0] {
16039 break
16040 }
16041 if mem != x1.Args[1] {
16042 break
16043 }
16044 s2 := v.Args[1]
16045 if s2.Op != OpPPC64SLDconst {
16046 break
16047 }
16048 if s2.AuxInt != 56 {
16049 break
16050 }
16051 x2 := s2.Args[0]
16052 if x2.Op != OpPPC64MOVBZload {
16053 break
16054 }
16055 i0 := x2.AuxInt
16056 if x2.Aux != s {
16057 break
16058 }
16059 _ = x2.Args[1]
16060 if p != x2.Args[0] {
16061 break
16062 }
16063 if mem != x2.Args[1] {
16064 break
16065 }
16066 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0)) {
16067 break
16068 }
16069 b = mergePoint(b, x0, x1, x2)
16070 v0 := b.NewValue0(x2.Pos, OpPPC64SLDconst, t)
16071 v.reset(OpCopy)
16072 v.AddArg(v0)
16073 v0.AuxInt = 32
16074 v1 := b.NewValue0(x2.Pos, OpPPC64MOVWBRload, t)
16075 v2 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
16076 v2.AuxInt = i0
16077 v2.Aux = s
16078 v2.AddArg(p)
16079 v1.AddArg(v2)
16080 v1.AddArg(mem)
16081 v0.AddArg(v1)
16082 return true
16083 }
16084
16085
16086
16087 for {
16088 t := v.Type
16089 _ = v.Args[1]
16090 s6 := v.Args[0]
16091 if s6.Op != OpPPC64SLDconst {
16092 break
16093 }
16094 if s6.AuxInt != 56 {
16095 break
16096 }
16097 x7 := s6.Args[0]
16098 if x7.Op != OpPPC64MOVBZload {
16099 break
16100 }
16101 i7 := x7.AuxInt
16102 s := x7.Aux
16103 mem := x7.Args[1]
16104 p := x7.Args[0]
16105 o5 := v.Args[1]
16106 if o5.Op != OpPPC64OR {
16107 break
16108 }
16109 if o5.Type != t {
16110 break
16111 }
16112 _ = o5.Args[1]
16113 s5 := o5.Args[0]
16114 if s5.Op != OpPPC64SLDconst {
16115 break
16116 }
16117 if s5.AuxInt != 48 {
16118 break
16119 }
16120 x6 := s5.Args[0]
16121 if x6.Op != OpPPC64MOVBZload {
16122 break
16123 }
16124 i6 := x6.AuxInt
16125 if x6.Aux != s {
16126 break
16127 }
16128 _ = x6.Args[1]
16129 if p != x6.Args[0] {
16130 break
16131 }
16132 if mem != x6.Args[1] {
16133 break
16134 }
16135 o4 := o5.Args[1]
16136 if o4.Op != OpPPC64OR {
16137 break
16138 }
16139 if o4.Type != t {
16140 break
16141 }
16142 _ = o4.Args[1]
16143 s4 := o4.Args[0]
16144 if s4.Op != OpPPC64SLDconst {
16145 break
16146 }
16147 if s4.AuxInt != 40 {
16148 break
16149 }
16150 x5 := s4.Args[0]
16151 if x5.Op != OpPPC64MOVBZload {
16152 break
16153 }
16154 i5 := x5.AuxInt
16155 if x5.Aux != s {
16156 break
16157 }
16158 _ = x5.Args[1]
16159 if p != x5.Args[0] {
16160 break
16161 }
16162 if mem != x5.Args[1] {
16163 break
16164 }
16165 o3 := o4.Args[1]
16166 if o3.Op != OpPPC64OR {
16167 break
16168 }
16169 if o3.Type != t {
16170 break
16171 }
16172 _ = o3.Args[1]
16173 s3 := o3.Args[0]
16174 if s3.Op != OpPPC64SLDconst {
16175 break
16176 }
16177 if s3.AuxInt != 32 {
16178 break
16179 }
16180 x4 := s3.Args[0]
16181 if x4.Op != OpPPC64MOVBZload {
16182 break
16183 }
16184 i4 := x4.AuxInt
16185 if x4.Aux != s {
16186 break
16187 }
16188 _ = x4.Args[1]
16189 if p != x4.Args[0] {
16190 break
16191 }
16192 if mem != x4.Args[1] {
16193 break
16194 }
16195 x0 := o3.Args[1]
16196 if x0.Op != OpPPC64MOVWZload {
16197 break
16198 }
16199 i0 := x0.AuxInt
16200 if x0.Aux != s {
16201 break
16202 }
16203 _ = x0.Args[1]
16204 if p != x0.Args[0] {
16205 break
16206 }
16207 if mem != x0.Args[1] {
16208 break
16209 }
16210 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16211 break
16212 }
16213 b = mergePoint(b, x0, x4, x5, x6, x7)
16214 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDload, t)
16215 v.reset(OpCopy)
16216 v.AddArg(v0)
16217 v0.AuxInt = i0
16218 v0.Aux = s
16219 v0.AddArg(p)
16220 v0.AddArg(mem)
16221 return true
16222 }
16223
16224
16225
16226 for {
16227 t := v.Type
16228 _ = v.Args[1]
16229 s6 := v.Args[0]
16230 if s6.Op != OpPPC64SLDconst {
16231 break
16232 }
16233 if s6.AuxInt != 56 {
16234 break
16235 }
16236 x7 := s6.Args[0]
16237 if x7.Op != OpPPC64MOVBZload {
16238 break
16239 }
16240 i7 := x7.AuxInt
16241 s := x7.Aux
16242 mem := x7.Args[1]
16243 p := x7.Args[0]
16244 o5 := v.Args[1]
16245 if o5.Op != OpPPC64OR {
16246 break
16247 }
16248 if o5.Type != t {
16249 break
16250 }
16251 _ = o5.Args[1]
16252 s5 := o5.Args[0]
16253 if s5.Op != OpPPC64SLDconst {
16254 break
16255 }
16256 if s5.AuxInt != 48 {
16257 break
16258 }
16259 x6 := s5.Args[0]
16260 if x6.Op != OpPPC64MOVBZload {
16261 break
16262 }
16263 i6 := x6.AuxInt
16264 if x6.Aux != s {
16265 break
16266 }
16267 _ = x6.Args[1]
16268 if p != x6.Args[0] {
16269 break
16270 }
16271 if mem != x6.Args[1] {
16272 break
16273 }
16274 o4 := o5.Args[1]
16275 if o4.Op != OpPPC64OR {
16276 break
16277 }
16278 if o4.Type != t {
16279 break
16280 }
16281 _ = o4.Args[1]
16282 s4 := o4.Args[0]
16283 if s4.Op != OpPPC64SLDconst {
16284 break
16285 }
16286 if s4.AuxInt != 40 {
16287 break
16288 }
16289 x5 := s4.Args[0]
16290 if x5.Op != OpPPC64MOVBZload {
16291 break
16292 }
16293 i5 := x5.AuxInt
16294 if x5.Aux != s {
16295 break
16296 }
16297 _ = x5.Args[1]
16298 if p != x5.Args[0] {
16299 break
16300 }
16301 if mem != x5.Args[1] {
16302 break
16303 }
16304 o3 := o4.Args[1]
16305 if o3.Op != OpPPC64OR {
16306 break
16307 }
16308 if o3.Type != t {
16309 break
16310 }
16311 _ = o3.Args[1]
16312 x0 := o3.Args[0]
16313 if x0.Op != OpPPC64MOVWZload {
16314 break
16315 }
16316 i0 := x0.AuxInt
16317 if x0.Aux != s {
16318 break
16319 }
16320 _ = x0.Args[1]
16321 if p != x0.Args[0] {
16322 break
16323 }
16324 if mem != x0.Args[1] {
16325 break
16326 }
16327 s3 := o3.Args[1]
16328 if s3.Op != OpPPC64SLDconst {
16329 break
16330 }
16331 if s3.AuxInt != 32 {
16332 break
16333 }
16334 x4 := s3.Args[0]
16335 if x4.Op != OpPPC64MOVBZload {
16336 break
16337 }
16338 i4 := x4.AuxInt
16339 if x4.Aux != s {
16340 break
16341 }
16342 _ = x4.Args[1]
16343 if p != x4.Args[0] {
16344 break
16345 }
16346 if mem != x4.Args[1] {
16347 break
16348 }
16349 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16350 break
16351 }
16352 b = mergePoint(b, x0, x4, x5, x6, x7)
16353 v0 := b.NewValue0(x4.Pos, OpPPC64MOVDload, t)
16354 v.reset(OpCopy)
16355 v.AddArg(v0)
16356 v0.AuxInt = i0
16357 v0.Aux = s
16358 v0.AddArg(p)
16359 v0.AddArg(mem)
16360 return true
16361 }
16362
16363
16364
16365 for {
16366 t := v.Type
16367 _ = v.Args[1]
16368 s6 := v.Args[0]
16369 if s6.Op != OpPPC64SLDconst {
16370 break
16371 }
16372 if s6.AuxInt != 56 {
16373 break
16374 }
16375 x7 := s6.Args[0]
16376 if x7.Op != OpPPC64MOVBZload {
16377 break
16378 }
16379 i7 := x7.AuxInt
16380 s := x7.Aux
16381 mem := x7.Args[1]
16382 p := x7.Args[0]
16383 o5 := v.Args[1]
16384 if o5.Op != OpPPC64OR {
16385 break
16386 }
16387 if o5.Type != t {
16388 break
16389 }
16390 _ = o5.Args[1]
16391 s5 := o5.Args[0]
16392 if s5.Op != OpPPC64SLDconst {
16393 break
16394 }
16395 if s5.AuxInt != 48 {
16396 break
16397 }
16398 x6 := s5.Args[0]
16399 if x6.Op != OpPPC64MOVBZload {
16400 break
16401 }
16402 i6 := x6.AuxInt
16403 if x6.Aux != s {
16404 break
16405 }
16406 _ = x6.Args[1]
16407 if p != x6.Args[0] {
16408 break
16409 }
16410 if mem != x6.Args[1] {
16411 break
16412 }
16413 o4 := o5.Args[1]
16414 if o4.Op != OpPPC64OR {
16415 break
16416 }
16417 if o4.Type != t {
16418 break
16419 }
16420 _ = o4.Args[1]
16421 o3 := o4.Args[0]
16422 if o3.Op != OpPPC64OR {
16423 break
16424 }
16425 if o3.Type != t {
16426 break
16427 }
16428 _ = o3.Args[1]
16429 s3 := o3.Args[0]
16430 if s3.Op != OpPPC64SLDconst {
16431 break
16432 }
16433 if s3.AuxInt != 32 {
16434 break
16435 }
16436 x4 := s3.Args[0]
16437 if x4.Op != OpPPC64MOVBZload {
16438 break
16439 }
16440 i4 := x4.AuxInt
16441 if x4.Aux != s {
16442 break
16443 }
16444 _ = x4.Args[1]
16445 if p != x4.Args[0] {
16446 break
16447 }
16448 if mem != x4.Args[1] {
16449 break
16450 }
16451 x0 := o3.Args[1]
16452 if x0.Op != OpPPC64MOVWZload {
16453 break
16454 }
16455 i0 := x0.AuxInt
16456 if x0.Aux != s {
16457 break
16458 }
16459 _ = x0.Args[1]
16460 if p != x0.Args[0] {
16461 break
16462 }
16463 if mem != x0.Args[1] {
16464 break
16465 }
16466 s4 := o4.Args[1]
16467 if s4.Op != OpPPC64SLDconst {
16468 break
16469 }
16470 if s4.AuxInt != 40 {
16471 break
16472 }
16473 x5 := s4.Args[0]
16474 if x5.Op != OpPPC64MOVBZload {
16475 break
16476 }
16477 i5 := x5.AuxInt
16478 if x5.Aux != s {
16479 break
16480 }
16481 _ = x5.Args[1]
16482 if p != x5.Args[0] {
16483 break
16484 }
16485 if mem != x5.Args[1] {
16486 break
16487 }
16488 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16489 break
16490 }
16491 b = mergePoint(b, x0, x4, x5, x6, x7)
16492 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDload, t)
16493 v.reset(OpCopy)
16494 v.AddArg(v0)
16495 v0.AuxInt = i0
16496 v0.Aux = s
16497 v0.AddArg(p)
16498 v0.AddArg(mem)
16499 return true
16500 }
16501
16502
16503
16504 for {
16505 t := v.Type
16506 _ = v.Args[1]
16507 s6 := v.Args[0]
16508 if s6.Op != OpPPC64SLDconst {
16509 break
16510 }
16511 if s6.AuxInt != 56 {
16512 break
16513 }
16514 x7 := s6.Args[0]
16515 if x7.Op != OpPPC64MOVBZload {
16516 break
16517 }
16518 i7 := x7.AuxInt
16519 s := x7.Aux
16520 mem := x7.Args[1]
16521 p := x7.Args[0]
16522 o5 := v.Args[1]
16523 if o5.Op != OpPPC64OR {
16524 break
16525 }
16526 if o5.Type != t {
16527 break
16528 }
16529 _ = o5.Args[1]
16530 s5 := o5.Args[0]
16531 if s5.Op != OpPPC64SLDconst {
16532 break
16533 }
16534 if s5.AuxInt != 48 {
16535 break
16536 }
16537 x6 := s5.Args[0]
16538 if x6.Op != OpPPC64MOVBZload {
16539 break
16540 }
16541 i6 := x6.AuxInt
16542 if x6.Aux != s {
16543 break
16544 }
16545 _ = x6.Args[1]
16546 if p != x6.Args[0] {
16547 break
16548 }
16549 if mem != x6.Args[1] {
16550 break
16551 }
16552 o4 := o5.Args[1]
16553 if o4.Op != OpPPC64OR {
16554 break
16555 }
16556 if o4.Type != t {
16557 break
16558 }
16559 _ = o4.Args[1]
16560 o3 := o4.Args[0]
16561 if o3.Op != OpPPC64OR {
16562 break
16563 }
16564 if o3.Type != t {
16565 break
16566 }
16567 _ = o3.Args[1]
16568 x0 := o3.Args[0]
16569 if x0.Op != OpPPC64MOVWZload {
16570 break
16571 }
16572 i0 := x0.AuxInt
16573 if x0.Aux != s {
16574 break
16575 }
16576 _ = x0.Args[1]
16577 if p != x0.Args[0] {
16578 break
16579 }
16580 if mem != x0.Args[1] {
16581 break
16582 }
16583 s3 := o3.Args[1]
16584 if s3.Op != OpPPC64SLDconst {
16585 break
16586 }
16587 if s3.AuxInt != 32 {
16588 break
16589 }
16590 x4 := s3.Args[0]
16591 if x4.Op != OpPPC64MOVBZload {
16592 break
16593 }
16594 i4 := x4.AuxInt
16595 if x4.Aux != s {
16596 break
16597 }
16598 _ = x4.Args[1]
16599 if p != x4.Args[0] {
16600 break
16601 }
16602 if mem != x4.Args[1] {
16603 break
16604 }
16605 s4 := o4.Args[1]
16606 if s4.Op != OpPPC64SLDconst {
16607 break
16608 }
16609 if s4.AuxInt != 40 {
16610 break
16611 }
16612 x5 := s4.Args[0]
16613 if x5.Op != OpPPC64MOVBZload {
16614 break
16615 }
16616 i5 := x5.AuxInt
16617 if x5.Aux != s {
16618 break
16619 }
16620 _ = x5.Args[1]
16621 if p != x5.Args[0] {
16622 break
16623 }
16624 if mem != x5.Args[1] {
16625 break
16626 }
16627 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16628 break
16629 }
16630 b = mergePoint(b, x0, x4, x5, x6, x7)
16631 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDload, t)
16632 v.reset(OpCopy)
16633 v.AddArg(v0)
16634 v0.AuxInt = i0
16635 v0.Aux = s
16636 v0.AddArg(p)
16637 v0.AddArg(mem)
16638 return true
16639 }
16640 return false
16641 }
16642 func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool {
16643 b := v.Block
16644 config := b.Func.Config
16645
16646
16647
16648 for {
16649 t := v.Type
16650 _ = v.Args[1]
16651 s6 := v.Args[0]
16652 if s6.Op != OpPPC64SLDconst {
16653 break
16654 }
16655 if s6.AuxInt != 56 {
16656 break
16657 }
16658 x7 := s6.Args[0]
16659 if x7.Op != OpPPC64MOVBZload {
16660 break
16661 }
16662 i7 := x7.AuxInt
16663 s := x7.Aux
16664 mem := x7.Args[1]
16665 p := x7.Args[0]
16666 o5 := v.Args[1]
16667 if o5.Op != OpPPC64OR {
16668 break
16669 }
16670 if o5.Type != t {
16671 break
16672 }
16673 _ = o5.Args[1]
16674 o4 := o5.Args[0]
16675 if o4.Op != OpPPC64OR {
16676 break
16677 }
16678 if o4.Type != t {
16679 break
16680 }
16681 _ = o4.Args[1]
16682 s4 := o4.Args[0]
16683 if s4.Op != OpPPC64SLDconst {
16684 break
16685 }
16686 if s4.AuxInt != 40 {
16687 break
16688 }
16689 x5 := s4.Args[0]
16690 if x5.Op != OpPPC64MOVBZload {
16691 break
16692 }
16693 i5 := x5.AuxInt
16694 if x5.Aux != s {
16695 break
16696 }
16697 _ = x5.Args[1]
16698 if p != x5.Args[0] {
16699 break
16700 }
16701 if mem != x5.Args[1] {
16702 break
16703 }
16704 o3 := o4.Args[1]
16705 if o3.Op != OpPPC64OR {
16706 break
16707 }
16708 if o3.Type != t {
16709 break
16710 }
16711 _ = o3.Args[1]
16712 s3 := o3.Args[0]
16713 if s3.Op != OpPPC64SLDconst {
16714 break
16715 }
16716 if s3.AuxInt != 32 {
16717 break
16718 }
16719 x4 := s3.Args[0]
16720 if x4.Op != OpPPC64MOVBZload {
16721 break
16722 }
16723 i4 := x4.AuxInt
16724 if x4.Aux != s {
16725 break
16726 }
16727 _ = x4.Args[1]
16728 if p != x4.Args[0] {
16729 break
16730 }
16731 if mem != x4.Args[1] {
16732 break
16733 }
16734 x0 := o3.Args[1]
16735 if x0.Op != OpPPC64MOVWZload {
16736 break
16737 }
16738 i0 := x0.AuxInt
16739 if x0.Aux != s {
16740 break
16741 }
16742 _ = x0.Args[1]
16743 if p != x0.Args[0] {
16744 break
16745 }
16746 if mem != x0.Args[1] {
16747 break
16748 }
16749 s5 := o5.Args[1]
16750 if s5.Op != OpPPC64SLDconst {
16751 break
16752 }
16753 if s5.AuxInt != 48 {
16754 break
16755 }
16756 x6 := s5.Args[0]
16757 if x6.Op != OpPPC64MOVBZload {
16758 break
16759 }
16760 i6 := x6.AuxInt
16761 if x6.Aux != s {
16762 break
16763 }
16764 _ = x6.Args[1]
16765 if p != x6.Args[0] {
16766 break
16767 }
16768 if mem != x6.Args[1] {
16769 break
16770 }
16771 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16772 break
16773 }
16774 b = mergePoint(b, x0, x4, x5, x6, x7)
16775 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDload, t)
16776 v.reset(OpCopy)
16777 v.AddArg(v0)
16778 v0.AuxInt = i0
16779 v0.Aux = s
16780 v0.AddArg(p)
16781 v0.AddArg(mem)
16782 return true
16783 }
16784
16785
16786
16787 for {
16788 t := v.Type
16789 _ = v.Args[1]
16790 s6 := v.Args[0]
16791 if s6.Op != OpPPC64SLDconst {
16792 break
16793 }
16794 if s6.AuxInt != 56 {
16795 break
16796 }
16797 x7 := s6.Args[0]
16798 if x7.Op != OpPPC64MOVBZload {
16799 break
16800 }
16801 i7 := x7.AuxInt
16802 s := x7.Aux
16803 mem := x7.Args[1]
16804 p := x7.Args[0]
16805 o5 := v.Args[1]
16806 if o5.Op != OpPPC64OR {
16807 break
16808 }
16809 if o5.Type != t {
16810 break
16811 }
16812 _ = o5.Args[1]
16813 o4 := o5.Args[0]
16814 if o4.Op != OpPPC64OR {
16815 break
16816 }
16817 if o4.Type != t {
16818 break
16819 }
16820 _ = o4.Args[1]
16821 s4 := o4.Args[0]
16822 if s4.Op != OpPPC64SLDconst {
16823 break
16824 }
16825 if s4.AuxInt != 40 {
16826 break
16827 }
16828 x5 := s4.Args[0]
16829 if x5.Op != OpPPC64MOVBZload {
16830 break
16831 }
16832 i5 := x5.AuxInt
16833 if x5.Aux != s {
16834 break
16835 }
16836 _ = x5.Args[1]
16837 if p != x5.Args[0] {
16838 break
16839 }
16840 if mem != x5.Args[1] {
16841 break
16842 }
16843 o3 := o4.Args[1]
16844 if o3.Op != OpPPC64OR {
16845 break
16846 }
16847 if o3.Type != t {
16848 break
16849 }
16850 _ = o3.Args[1]
16851 x0 := o3.Args[0]
16852 if x0.Op != OpPPC64MOVWZload {
16853 break
16854 }
16855 i0 := x0.AuxInt
16856 if x0.Aux != s {
16857 break
16858 }
16859 _ = x0.Args[1]
16860 if p != x0.Args[0] {
16861 break
16862 }
16863 if mem != x0.Args[1] {
16864 break
16865 }
16866 s3 := o3.Args[1]
16867 if s3.Op != OpPPC64SLDconst {
16868 break
16869 }
16870 if s3.AuxInt != 32 {
16871 break
16872 }
16873 x4 := s3.Args[0]
16874 if x4.Op != OpPPC64MOVBZload {
16875 break
16876 }
16877 i4 := x4.AuxInt
16878 if x4.Aux != s {
16879 break
16880 }
16881 _ = x4.Args[1]
16882 if p != x4.Args[0] {
16883 break
16884 }
16885 if mem != x4.Args[1] {
16886 break
16887 }
16888 s5 := o5.Args[1]
16889 if s5.Op != OpPPC64SLDconst {
16890 break
16891 }
16892 if s5.AuxInt != 48 {
16893 break
16894 }
16895 x6 := s5.Args[0]
16896 if x6.Op != OpPPC64MOVBZload {
16897 break
16898 }
16899 i6 := x6.AuxInt
16900 if x6.Aux != s {
16901 break
16902 }
16903 _ = x6.Args[1]
16904 if p != x6.Args[0] {
16905 break
16906 }
16907 if mem != x6.Args[1] {
16908 break
16909 }
16910 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
16911 break
16912 }
16913 b = mergePoint(b, x0, x4, x5, x6, x7)
16914 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDload, t)
16915 v.reset(OpCopy)
16916 v.AddArg(v0)
16917 v0.AuxInt = i0
16918 v0.Aux = s
16919 v0.AddArg(p)
16920 v0.AddArg(mem)
16921 return true
16922 }
16923
16924
16925
16926 for {
16927 t := v.Type
16928 _ = v.Args[1]
16929 s6 := v.Args[0]
16930 if s6.Op != OpPPC64SLDconst {
16931 break
16932 }
16933 if s6.AuxInt != 56 {
16934 break
16935 }
16936 x7 := s6.Args[0]
16937 if x7.Op != OpPPC64MOVBZload {
16938 break
16939 }
16940 i7 := x7.AuxInt
16941 s := x7.Aux
16942 mem := x7.Args[1]
16943 p := x7.Args[0]
16944 o5 := v.Args[1]
16945 if o5.Op != OpPPC64OR {
16946 break
16947 }
16948 if o5.Type != t {
16949 break
16950 }
16951 _ = o5.Args[1]
16952 o4 := o5.Args[0]
16953 if o4.Op != OpPPC64OR {
16954 break
16955 }
16956 if o4.Type != t {
16957 break
16958 }
16959 _ = o4.Args[1]
16960 o3 := o4.Args[0]
16961 if o3.Op != OpPPC64OR {
16962 break
16963 }
16964 if o3.Type != t {
16965 break
16966 }
16967 _ = o3.Args[1]
16968 s3 := o3.Args[0]
16969 if s3.Op != OpPPC64SLDconst {
16970 break
16971 }
16972 if s3.AuxInt != 32 {
16973 break
16974 }
16975 x4 := s3.Args[0]
16976 if x4.Op != OpPPC64MOVBZload {
16977 break
16978 }
16979 i4 := x4.AuxInt
16980 if x4.Aux != s {
16981 break
16982 }
16983 _ = x4.Args[1]
16984 if p != x4.Args[0] {
16985 break
16986 }
16987 if mem != x4.Args[1] {
16988 break
16989 }
16990 x0 := o3.Args[1]
16991 if x0.Op != OpPPC64MOVWZload {
16992 break
16993 }
16994 i0 := x0.AuxInt
16995 if x0.Aux != s {
16996 break
16997 }
16998 _ = x0.Args[1]
16999 if p != x0.Args[0] {
17000 break
17001 }
17002 if mem != x0.Args[1] {
17003 break
17004 }
17005 s4 := o4.Args[1]
17006 if s4.Op != OpPPC64SLDconst {
17007 break
17008 }
17009 if s4.AuxInt != 40 {
17010 break
17011 }
17012 x5 := s4.Args[0]
17013 if x5.Op != OpPPC64MOVBZload {
17014 break
17015 }
17016 i5 := x5.AuxInt
17017 if x5.Aux != s {
17018 break
17019 }
17020 _ = x5.Args[1]
17021 if p != x5.Args[0] {
17022 break
17023 }
17024 if mem != x5.Args[1] {
17025 break
17026 }
17027 s5 := o5.Args[1]
17028 if s5.Op != OpPPC64SLDconst {
17029 break
17030 }
17031 if s5.AuxInt != 48 {
17032 break
17033 }
17034 x6 := s5.Args[0]
17035 if x6.Op != OpPPC64MOVBZload {
17036 break
17037 }
17038 i6 := x6.AuxInt
17039 if x6.Aux != s {
17040 break
17041 }
17042 _ = x6.Args[1]
17043 if p != x6.Args[0] {
17044 break
17045 }
17046 if mem != x6.Args[1] {
17047 break
17048 }
17049 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17050 break
17051 }
17052 b = mergePoint(b, x0, x4, x5, x6, x7)
17053 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDload, t)
17054 v.reset(OpCopy)
17055 v.AddArg(v0)
17056 v0.AuxInt = i0
17057 v0.Aux = s
17058 v0.AddArg(p)
17059 v0.AddArg(mem)
17060 return true
17061 }
17062
17063
17064
17065 for {
17066 t := v.Type
17067 _ = v.Args[1]
17068 s6 := v.Args[0]
17069 if s6.Op != OpPPC64SLDconst {
17070 break
17071 }
17072 if s6.AuxInt != 56 {
17073 break
17074 }
17075 x7 := s6.Args[0]
17076 if x7.Op != OpPPC64MOVBZload {
17077 break
17078 }
17079 i7 := x7.AuxInt
17080 s := x7.Aux
17081 mem := x7.Args[1]
17082 p := x7.Args[0]
17083 o5 := v.Args[1]
17084 if o5.Op != OpPPC64OR {
17085 break
17086 }
17087 if o5.Type != t {
17088 break
17089 }
17090 _ = o5.Args[1]
17091 o4 := o5.Args[0]
17092 if o4.Op != OpPPC64OR {
17093 break
17094 }
17095 if o4.Type != t {
17096 break
17097 }
17098 _ = o4.Args[1]
17099 o3 := o4.Args[0]
17100 if o3.Op != OpPPC64OR {
17101 break
17102 }
17103 if o3.Type != t {
17104 break
17105 }
17106 _ = o3.Args[1]
17107 x0 := o3.Args[0]
17108 if x0.Op != OpPPC64MOVWZload {
17109 break
17110 }
17111 i0 := x0.AuxInt
17112 if x0.Aux != s {
17113 break
17114 }
17115 _ = x0.Args[1]
17116 if p != x0.Args[0] {
17117 break
17118 }
17119 if mem != x0.Args[1] {
17120 break
17121 }
17122 s3 := o3.Args[1]
17123 if s3.Op != OpPPC64SLDconst {
17124 break
17125 }
17126 if s3.AuxInt != 32 {
17127 break
17128 }
17129 x4 := s3.Args[0]
17130 if x4.Op != OpPPC64MOVBZload {
17131 break
17132 }
17133 i4 := x4.AuxInt
17134 if x4.Aux != s {
17135 break
17136 }
17137 _ = x4.Args[1]
17138 if p != x4.Args[0] {
17139 break
17140 }
17141 if mem != x4.Args[1] {
17142 break
17143 }
17144 s4 := o4.Args[1]
17145 if s4.Op != OpPPC64SLDconst {
17146 break
17147 }
17148 if s4.AuxInt != 40 {
17149 break
17150 }
17151 x5 := s4.Args[0]
17152 if x5.Op != OpPPC64MOVBZload {
17153 break
17154 }
17155 i5 := x5.AuxInt
17156 if x5.Aux != s {
17157 break
17158 }
17159 _ = x5.Args[1]
17160 if p != x5.Args[0] {
17161 break
17162 }
17163 if mem != x5.Args[1] {
17164 break
17165 }
17166 s5 := o5.Args[1]
17167 if s5.Op != OpPPC64SLDconst {
17168 break
17169 }
17170 if s5.AuxInt != 48 {
17171 break
17172 }
17173 x6 := s5.Args[0]
17174 if x6.Op != OpPPC64MOVBZload {
17175 break
17176 }
17177 i6 := x6.AuxInt
17178 if x6.Aux != s {
17179 break
17180 }
17181 _ = x6.Args[1]
17182 if p != x6.Args[0] {
17183 break
17184 }
17185 if mem != x6.Args[1] {
17186 break
17187 }
17188 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17189 break
17190 }
17191 b = mergePoint(b, x0, x4, x5, x6, x7)
17192 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDload, t)
17193 v.reset(OpCopy)
17194 v.AddArg(v0)
17195 v0.AuxInt = i0
17196 v0.Aux = s
17197 v0.AddArg(p)
17198 v0.AddArg(mem)
17199 return true
17200 }
17201
17202
17203
17204 for {
17205 t := v.Type
17206 _ = v.Args[1]
17207 o5 := v.Args[0]
17208 if o5.Op != OpPPC64OR {
17209 break
17210 }
17211 if o5.Type != t {
17212 break
17213 }
17214 _ = o5.Args[1]
17215 s5 := o5.Args[0]
17216 if s5.Op != OpPPC64SLDconst {
17217 break
17218 }
17219 if s5.AuxInt != 48 {
17220 break
17221 }
17222 x6 := s5.Args[0]
17223 if x6.Op != OpPPC64MOVBZload {
17224 break
17225 }
17226 i6 := x6.AuxInt
17227 s := x6.Aux
17228 mem := x6.Args[1]
17229 p := x6.Args[0]
17230 o4 := o5.Args[1]
17231 if o4.Op != OpPPC64OR {
17232 break
17233 }
17234 if o4.Type != t {
17235 break
17236 }
17237 _ = o4.Args[1]
17238 s4 := o4.Args[0]
17239 if s4.Op != OpPPC64SLDconst {
17240 break
17241 }
17242 if s4.AuxInt != 40 {
17243 break
17244 }
17245 x5 := s4.Args[0]
17246 if x5.Op != OpPPC64MOVBZload {
17247 break
17248 }
17249 i5 := x5.AuxInt
17250 if x5.Aux != s {
17251 break
17252 }
17253 _ = x5.Args[1]
17254 if p != x5.Args[0] {
17255 break
17256 }
17257 if mem != x5.Args[1] {
17258 break
17259 }
17260 o3 := o4.Args[1]
17261 if o3.Op != OpPPC64OR {
17262 break
17263 }
17264 if o3.Type != t {
17265 break
17266 }
17267 _ = o3.Args[1]
17268 s3 := o3.Args[0]
17269 if s3.Op != OpPPC64SLDconst {
17270 break
17271 }
17272 if s3.AuxInt != 32 {
17273 break
17274 }
17275 x4 := s3.Args[0]
17276 if x4.Op != OpPPC64MOVBZload {
17277 break
17278 }
17279 i4 := x4.AuxInt
17280 if x4.Aux != s {
17281 break
17282 }
17283 _ = x4.Args[1]
17284 if p != x4.Args[0] {
17285 break
17286 }
17287 if mem != x4.Args[1] {
17288 break
17289 }
17290 x0 := o3.Args[1]
17291 if x0.Op != OpPPC64MOVWZload {
17292 break
17293 }
17294 i0 := x0.AuxInt
17295 if x0.Aux != s {
17296 break
17297 }
17298 _ = x0.Args[1]
17299 if p != x0.Args[0] {
17300 break
17301 }
17302 if mem != x0.Args[1] {
17303 break
17304 }
17305 s6 := v.Args[1]
17306 if s6.Op != OpPPC64SLDconst {
17307 break
17308 }
17309 if s6.AuxInt != 56 {
17310 break
17311 }
17312 x7 := s6.Args[0]
17313 if x7.Op != OpPPC64MOVBZload {
17314 break
17315 }
17316 i7 := x7.AuxInt
17317 if x7.Aux != s {
17318 break
17319 }
17320 _ = x7.Args[1]
17321 if p != x7.Args[0] {
17322 break
17323 }
17324 if mem != x7.Args[1] {
17325 break
17326 }
17327 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17328 break
17329 }
17330 b = mergePoint(b, x0, x4, x5, x6, x7)
17331 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
17332 v.reset(OpCopy)
17333 v.AddArg(v0)
17334 v0.AuxInt = i0
17335 v0.Aux = s
17336 v0.AddArg(p)
17337 v0.AddArg(mem)
17338 return true
17339 }
17340
17341
17342
17343 for {
17344 t := v.Type
17345 _ = v.Args[1]
17346 o5 := v.Args[0]
17347 if o5.Op != OpPPC64OR {
17348 break
17349 }
17350 if o5.Type != t {
17351 break
17352 }
17353 _ = o5.Args[1]
17354 s5 := o5.Args[0]
17355 if s5.Op != OpPPC64SLDconst {
17356 break
17357 }
17358 if s5.AuxInt != 48 {
17359 break
17360 }
17361 x6 := s5.Args[0]
17362 if x6.Op != OpPPC64MOVBZload {
17363 break
17364 }
17365 i6 := x6.AuxInt
17366 s := x6.Aux
17367 mem := x6.Args[1]
17368 p := x6.Args[0]
17369 o4 := o5.Args[1]
17370 if o4.Op != OpPPC64OR {
17371 break
17372 }
17373 if o4.Type != t {
17374 break
17375 }
17376 _ = o4.Args[1]
17377 s4 := o4.Args[0]
17378 if s4.Op != OpPPC64SLDconst {
17379 break
17380 }
17381 if s4.AuxInt != 40 {
17382 break
17383 }
17384 x5 := s4.Args[0]
17385 if x5.Op != OpPPC64MOVBZload {
17386 break
17387 }
17388 i5 := x5.AuxInt
17389 if x5.Aux != s {
17390 break
17391 }
17392 _ = x5.Args[1]
17393 if p != x5.Args[0] {
17394 break
17395 }
17396 if mem != x5.Args[1] {
17397 break
17398 }
17399 o3 := o4.Args[1]
17400 if o3.Op != OpPPC64OR {
17401 break
17402 }
17403 if o3.Type != t {
17404 break
17405 }
17406 _ = o3.Args[1]
17407 x0 := o3.Args[0]
17408 if x0.Op != OpPPC64MOVWZload {
17409 break
17410 }
17411 i0 := x0.AuxInt
17412 if x0.Aux != s {
17413 break
17414 }
17415 _ = x0.Args[1]
17416 if p != x0.Args[0] {
17417 break
17418 }
17419 if mem != x0.Args[1] {
17420 break
17421 }
17422 s3 := o3.Args[1]
17423 if s3.Op != OpPPC64SLDconst {
17424 break
17425 }
17426 if s3.AuxInt != 32 {
17427 break
17428 }
17429 x4 := s3.Args[0]
17430 if x4.Op != OpPPC64MOVBZload {
17431 break
17432 }
17433 i4 := x4.AuxInt
17434 if x4.Aux != s {
17435 break
17436 }
17437 _ = x4.Args[1]
17438 if p != x4.Args[0] {
17439 break
17440 }
17441 if mem != x4.Args[1] {
17442 break
17443 }
17444 s6 := v.Args[1]
17445 if s6.Op != OpPPC64SLDconst {
17446 break
17447 }
17448 if s6.AuxInt != 56 {
17449 break
17450 }
17451 x7 := s6.Args[0]
17452 if x7.Op != OpPPC64MOVBZload {
17453 break
17454 }
17455 i7 := x7.AuxInt
17456 if x7.Aux != s {
17457 break
17458 }
17459 _ = x7.Args[1]
17460 if p != x7.Args[0] {
17461 break
17462 }
17463 if mem != x7.Args[1] {
17464 break
17465 }
17466 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17467 break
17468 }
17469 b = mergePoint(b, x0, x4, x5, x6, x7)
17470 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
17471 v.reset(OpCopy)
17472 v.AddArg(v0)
17473 v0.AuxInt = i0
17474 v0.Aux = s
17475 v0.AddArg(p)
17476 v0.AddArg(mem)
17477 return true
17478 }
17479
17480
17481
17482 for {
17483 t := v.Type
17484 _ = v.Args[1]
17485 o5 := v.Args[0]
17486 if o5.Op != OpPPC64OR {
17487 break
17488 }
17489 if o5.Type != t {
17490 break
17491 }
17492 _ = o5.Args[1]
17493 s5 := o5.Args[0]
17494 if s5.Op != OpPPC64SLDconst {
17495 break
17496 }
17497 if s5.AuxInt != 48 {
17498 break
17499 }
17500 x6 := s5.Args[0]
17501 if x6.Op != OpPPC64MOVBZload {
17502 break
17503 }
17504 i6 := x6.AuxInt
17505 s := x6.Aux
17506 mem := x6.Args[1]
17507 p := x6.Args[0]
17508 o4 := o5.Args[1]
17509 if o4.Op != OpPPC64OR {
17510 break
17511 }
17512 if o4.Type != t {
17513 break
17514 }
17515 _ = o4.Args[1]
17516 o3 := o4.Args[0]
17517 if o3.Op != OpPPC64OR {
17518 break
17519 }
17520 if o3.Type != t {
17521 break
17522 }
17523 _ = o3.Args[1]
17524 s3 := o3.Args[0]
17525 if s3.Op != OpPPC64SLDconst {
17526 break
17527 }
17528 if s3.AuxInt != 32 {
17529 break
17530 }
17531 x4 := s3.Args[0]
17532 if x4.Op != OpPPC64MOVBZload {
17533 break
17534 }
17535 i4 := x4.AuxInt
17536 if x4.Aux != s {
17537 break
17538 }
17539 _ = x4.Args[1]
17540 if p != x4.Args[0] {
17541 break
17542 }
17543 if mem != x4.Args[1] {
17544 break
17545 }
17546 x0 := o3.Args[1]
17547 if x0.Op != OpPPC64MOVWZload {
17548 break
17549 }
17550 i0 := x0.AuxInt
17551 if x0.Aux != s {
17552 break
17553 }
17554 _ = x0.Args[1]
17555 if p != x0.Args[0] {
17556 break
17557 }
17558 if mem != x0.Args[1] {
17559 break
17560 }
17561 s4 := o4.Args[1]
17562 if s4.Op != OpPPC64SLDconst {
17563 break
17564 }
17565 if s4.AuxInt != 40 {
17566 break
17567 }
17568 x5 := s4.Args[0]
17569 if x5.Op != OpPPC64MOVBZload {
17570 break
17571 }
17572 i5 := x5.AuxInt
17573 if x5.Aux != s {
17574 break
17575 }
17576 _ = x5.Args[1]
17577 if p != x5.Args[0] {
17578 break
17579 }
17580 if mem != x5.Args[1] {
17581 break
17582 }
17583 s6 := v.Args[1]
17584 if s6.Op != OpPPC64SLDconst {
17585 break
17586 }
17587 if s6.AuxInt != 56 {
17588 break
17589 }
17590 x7 := s6.Args[0]
17591 if x7.Op != OpPPC64MOVBZload {
17592 break
17593 }
17594 i7 := x7.AuxInt
17595 if x7.Aux != s {
17596 break
17597 }
17598 _ = x7.Args[1]
17599 if p != x7.Args[0] {
17600 break
17601 }
17602 if mem != x7.Args[1] {
17603 break
17604 }
17605 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17606 break
17607 }
17608 b = mergePoint(b, x0, x4, x5, x6, x7)
17609 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
17610 v.reset(OpCopy)
17611 v.AddArg(v0)
17612 v0.AuxInt = i0
17613 v0.Aux = s
17614 v0.AddArg(p)
17615 v0.AddArg(mem)
17616 return true
17617 }
17618
17619
17620
17621 for {
17622 t := v.Type
17623 _ = v.Args[1]
17624 o5 := v.Args[0]
17625 if o5.Op != OpPPC64OR {
17626 break
17627 }
17628 if o5.Type != t {
17629 break
17630 }
17631 _ = o5.Args[1]
17632 s5 := o5.Args[0]
17633 if s5.Op != OpPPC64SLDconst {
17634 break
17635 }
17636 if s5.AuxInt != 48 {
17637 break
17638 }
17639 x6 := s5.Args[0]
17640 if x6.Op != OpPPC64MOVBZload {
17641 break
17642 }
17643 i6 := x6.AuxInt
17644 s := x6.Aux
17645 mem := x6.Args[1]
17646 p := x6.Args[0]
17647 o4 := o5.Args[1]
17648 if o4.Op != OpPPC64OR {
17649 break
17650 }
17651 if o4.Type != t {
17652 break
17653 }
17654 _ = o4.Args[1]
17655 o3 := o4.Args[0]
17656 if o3.Op != OpPPC64OR {
17657 break
17658 }
17659 if o3.Type != t {
17660 break
17661 }
17662 _ = o3.Args[1]
17663 x0 := o3.Args[0]
17664 if x0.Op != OpPPC64MOVWZload {
17665 break
17666 }
17667 i0 := x0.AuxInt
17668 if x0.Aux != s {
17669 break
17670 }
17671 _ = x0.Args[1]
17672 if p != x0.Args[0] {
17673 break
17674 }
17675 if mem != x0.Args[1] {
17676 break
17677 }
17678 s3 := o3.Args[1]
17679 if s3.Op != OpPPC64SLDconst {
17680 break
17681 }
17682 if s3.AuxInt != 32 {
17683 break
17684 }
17685 x4 := s3.Args[0]
17686 if x4.Op != OpPPC64MOVBZload {
17687 break
17688 }
17689 i4 := x4.AuxInt
17690 if x4.Aux != s {
17691 break
17692 }
17693 _ = x4.Args[1]
17694 if p != x4.Args[0] {
17695 break
17696 }
17697 if mem != x4.Args[1] {
17698 break
17699 }
17700 s4 := o4.Args[1]
17701 if s4.Op != OpPPC64SLDconst {
17702 break
17703 }
17704 if s4.AuxInt != 40 {
17705 break
17706 }
17707 x5 := s4.Args[0]
17708 if x5.Op != OpPPC64MOVBZload {
17709 break
17710 }
17711 i5 := x5.AuxInt
17712 if x5.Aux != s {
17713 break
17714 }
17715 _ = x5.Args[1]
17716 if p != x5.Args[0] {
17717 break
17718 }
17719 if mem != x5.Args[1] {
17720 break
17721 }
17722 s6 := v.Args[1]
17723 if s6.Op != OpPPC64SLDconst {
17724 break
17725 }
17726 if s6.AuxInt != 56 {
17727 break
17728 }
17729 x7 := s6.Args[0]
17730 if x7.Op != OpPPC64MOVBZload {
17731 break
17732 }
17733 i7 := x7.AuxInt
17734 if x7.Aux != s {
17735 break
17736 }
17737 _ = x7.Args[1]
17738 if p != x7.Args[0] {
17739 break
17740 }
17741 if mem != x7.Args[1] {
17742 break
17743 }
17744 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17745 break
17746 }
17747 b = mergePoint(b, x0, x4, x5, x6, x7)
17748 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
17749 v.reset(OpCopy)
17750 v.AddArg(v0)
17751 v0.AuxInt = i0
17752 v0.Aux = s
17753 v0.AddArg(p)
17754 v0.AddArg(mem)
17755 return true
17756 }
17757
17758
17759
17760 for {
17761 t := v.Type
17762 _ = v.Args[1]
17763 o5 := v.Args[0]
17764 if o5.Op != OpPPC64OR {
17765 break
17766 }
17767 if o5.Type != t {
17768 break
17769 }
17770 _ = o5.Args[1]
17771 o4 := o5.Args[0]
17772 if o4.Op != OpPPC64OR {
17773 break
17774 }
17775 if o4.Type != t {
17776 break
17777 }
17778 _ = o4.Args[1]
17779 s4 := o4.Args[0]
17780 if s4.Op != OpPPC64SLDconst {
17781 break
17782 }
17783 if s4.AuxInt != 40 {
17784 break
17785 }
17786 x5 := s4.Args[0]
17787 if x5.Op != OpPPC64MOVBZload {
17788 break
17789 }
17790 i5 := x5.AuxInt
17791 s := x5.Aux
17792 mem := x5.Args[1]
17793 p := x5.Args[0]
17794 o3 := o4.Args[1]
17795 if o3.Op != OpPPC64OR {
17796 break
17797 }
17798 if o3.Type != t {
17799 break
17800 }
17801 _ = o3.Args[1]
17802 s3 := o3.Args[0]
17803 if s3.Op != OpPPC64SLDconst {
17804 break
17805 }
17806 if s3.AuxInt != 32 {
17807 break
17808 }
17809 x4 := s3.Args[0]
17810 if x4.Op != OpPPC64MOVBZload {
17811 break
17812 }
17813 i4 := x4.AuxInt
17814 if x4.Aux != s {
17815 break
17816 }
17817 _ = x4.Args[1]
17818 if p != x4.Args[0] {
17819 break
17820 }
17821 if mem != x4.Args[1] {
17822 break
17823 }
17824 x0 := o3.Args[1]
17825 if x0.Op != OpPPC64MOVWZload {
17826 break
17827 }
17828 i0 := x0.AuxInt
17829 if x0.Aux != s {
17830 break
17831 }
17832 _ = x0.Args[1]
17833 if p != x0.Args[0] {
17834 break
17835 }
17836 if mem != x0.Args[1] {
17837 break
17838 }
17839 s5 := o5.Args[1]
17840 if s5.Op != OpPPC64SLDconst {
17841 break
17842 }
17843 if s5.AuxInt != 48 {
17844 break
17845 }
17846 x6 := s5.Args[0]
17847 if x6.Op != OpPPC64MOVBZload {
17848 break
17849 }
17850 i6 := x6.AuxInt
17851 if x6.Aux != s {
17852 break
17853 }
17854 _ = x6.Args[1]
17855 if p != x6.Args[0] {
17856 break
17857 }
17858 if mem != x6.Args[1] {
17859 break
17860 }
17861 s6 := v.Args[1]
17862 if s6.Op != OpPPC64SLDconst {
17863 break
17864 }
17865 if s6.AuxInt != 56 {
17866 break
17867 }
17868 x7 := s6.Args[0]
17869 if x7.Op != OpPPC64MOVBZload {
17870 break
17871 }
17872 i7 := x7.AuxInt
17873 if x7.Aux != s {
17874 break
17875 }
17876 _ = x7.Args[1]
17877 if p != x7.Args[0] {
17878 break
17879 }
17880 if mem != x7.Args[1] {
17881 break
17882 }
17883 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
17884 break
17885 }
17886 b = mergePoint(b, x0, x4, x5, x6, x7)
17887 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
17888 v.reset(OpCopy)
17889 v.AddArg(v0)
17890 v0.AuxInt = i0
17891 v0.Aux = s
17892 v0.AddArg(p)
17893 v0.AddArg(mem)
17894 return true
17895 }
17896
17897
17898
17899 for {
17900 t := v.Type
17901 _ = v.Args[1]
17902 o5 := v.Args[0]
17903 if o5.Op != OpPPC64OR {
17904 break
17905 }
17906 if o5.Type != t {
17907 break
17908 }
17909 _ = o5.Args[1]
17910 o4 := o5.Args[0]
17911 if o4.Op != OpPPC64OR {
17912 break
17913 }
17914 if o4.Type != t {
17915 break
17916 }
17917 _ = o4.Args[1]
17918 s4 := o4.Args[0]
17919 if s4.Op != OpPPC64SLDconst {
17920 break
17921 }
17922 if s4.AuxInt != 40 {
17923 break
17924 }
17925 x5 := s4.Args[0]
17926 if x5.Op != OpPPC64MOVBZload {
17927 break
17928 }
17929 i5 := x5.AuxInt
17930 s := x5.Aux
17931 mem := x5.Args[1]
17932 p := x5.Args[0]
17933 o3 := o4.Args[1]
17934 if o3.Op != OpPPC64OR {
17935 break
17936 }
17937 if o3.Type != t {
17938 break
17939 }
17940 _ = o3.Args[1]
17941 x0 := o3.Args[0]
17942 if x0.Op != OpPPC64MOVWZload {
17943 break
17944 }
17945 i0 := x0.AuxInt
17946 if x0.Aux != s {
17947 break
17948 }
17949 _ = x0.Args[1]
17950 if p != x0.Args[0] {
17951 break
17952 }
17953 if mem != x0.Args[1] {
17954 break
17955 }
17956 s3 := o3.Args[1]
17957 if s3.Op != OpPPC64SLDconst {
17958 break
17959 }
17960 if s3.AuxInt != 32 {
17961 break
17962 }
17963 x4 := s3.Args[0]
17964 if x4.Op != OpPPC64MOVBZload {
17965 break
17966 }
17967 i4 := x4.AuxInt
17968 if x4.Aux != s {
17969 break
17970 }
17971 _ = x4.Args[1]
17972 if p != x4.Args[0] {
17973 break
17974 }
17975 if mem != x4.Args[1] {
17976 break
17977 }
17978 s5 := o5.Args[1]
17979 if s5.Op != OpPPC64SLDconst {
17980 break
17981 }
17982 if s5.AuxInt != 48 {
17983 break
17984 }
17985 x6 := s5.Args[0]
17986 if x6.Op != OpPPC64MOVBZload {
17987 break
17988 }
17989 i6 := x6.AuxInt
17990 if x6.Aux != s {
17991 break
17992 }
17993 _ = x6.Args[1]
17994 if p != x6.Args[0] {
17995 break
17996 }
17997 if mem != x6.Args[1] {
17998 break
17999 }
18000 s6 := v.Args[1]
18001 if s6.Op != OpPPC64SLDconst {
18002 break
18003 }
18004 if s6.AuxInt != 56 {
18005 break
18006 }
18007 x7 := s6.Args[0]
18008 if x7.Op != OpPPC64MOVBZload {
18009 break
18010 }
18011 i7 := x7.AuxInt
18012 if x7.Aux != s {
18013 break
18014 }
18015 _ = x7.Args[1]
18016 if p != x7.Args[0] {
18017 break
18018 }
18019 if mem != x7.Args[1] {
18020 break
18021 }
18022 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
18023 break
18024 }
18025 b = mergePoint(b, x0, x4, x5, x6, x7)
18026 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
18027 v.reset(OpCopy)
18028 v.AddArg(v0)
18029 v0.AuxInt = i0
18030 v0.Aux = s
18031 v0.AddArg(p)
18032 v0.AddArg(mem)
18033 return true
18034 }
18035 return false
18036 }
18037 func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool {
18038 b := v.Block
18039 config := b.Func.Config
18040 typ := &b.Func.Config.Types
18041
18042
18043
18044 for {
18045 t := v.Type
18046 _ = v.Args[1]
18047 o5 := v.Args[0]
18048 if o5.Op != OpPPC64OR {
18049 break
18050 }
18051 if o5.Type != t {
18052 break
18053 }
18054 _ = o5.Args[1]
18055 o4 := o5.Args[0]
18056 if o4.Op != OpPPC64OR {
18057 break
18058 }
18059 if o4.Type != t {
18060 break
18061 }
18062 _ = o4.Args[1]
18063 o3 := o4.Args[0]
18064 if o3.Op != OpPPC64OR {
18065 break
18066 }
18067 if o3.Type != t {
18068 break
18069 }
18070 _ = o3.Args[1]
18071 s3 := o3.Args[0]
18072 if s3.Op != OpPPC64SLDconst {
18073 break
18074 }
18075 if s3.AuxInt != 32 {
18076 break
18077 }
18078 x4 := s3.Args[0]
18079 if x4.Op != OpPPC64MOVBZload {
18080 break
18081 }
18082 i4 := x4.AuxInt
18083 s := x4.Aux
18084 mem := x4.Args[1]
18085 p := x4.Args[0]
18086 x0 := o3.Args[1]
18087 if x0.Op != OpPPC64MOVWZload {
18088 break
18089 }
18090 i0 := x0.AuxInt
18091 if x0.Aux != s {
18092 break
18093 }
18094 _ = x0.Args[1]
18095 if p != x0.Args[0] {
18096 break
18097 }
18098 if mem != x0.Args[1] {
18099 break
18100 }
18101 s4 := o4.Args[1]
18102 if s4.Op != OpPPC64SLDconst {
18103 break
18104 }
18105 if s4.AuxInt != 40 {
18106 break
18107 }
18108 x5 := s4.Args[0]
18109 if x5.Op != OpPPC64MOVBZload {
18110 break
18111 }
18112 i5 := x5.AuxInt
18113 if x5.Aux != s {
18114 break
18115 }
18116 _ = x5.Args[1]
18117 if p != x5.Args[0] {
18118 break
18119 }
18120 if mem != x5.Args[1] {
18121 break
18122 }
18123 s5 := o5.Args[1]
18124 if s5.Op != OpPPC64SLDconst {
18125 break
18126 }
18127 if s5.AuxInt != 48 {
18128 break
18129 }
18130 x6 := s5.Args[0]
18131 if x6.Op != OpPPC64MOVBZload {
18132 break
18133 }
18134 i6 := x6.AuxInt
18135 if x6.Aux != s {
18136 break
18137 }
18138 _ = x6.Args[1]
18139 if p != x6.Args[0] {
18140 break
18141 }
18142 if mem != x6.Args[1] {
18143 break
18144 }
18145 s6 := v.Args[1]
18146 if s6.Op != OpPPC64SLDconst {
18147 break
18148 }
18149 if s6.AuxInt != 56 {
18150 break
18151 }
18152 x7 := s6.Args[0]
18153 if x7.Op != OpPPC64MOVBZload {
18154 break
18155 }
18156 i7 := x7.AuxInt
18157 if x7.Aux != s {
18158 break
18159 }
18160 _ = x7.Args[1]
18161 if p != x7.Args[0] {
18162 break
18163 }
18164 if mem != x7.Args[1] {
18165 break
18166 }
18167 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
18168 break
18169 }
18170 b = mergePoint(b, x0, x4, x5, x6, x7)
18171 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
18172 v.reset(OpCopy)
18173 v.AddArg(v0)
18174 v0.AuxInt = i0
18175 v0.Aux = s
18176 v0.AddArg(p)
18177 v0.AddArg(mem)
18178 return true
18179 }
18180
18181
18182
18183 for {
18184 t := v.Type
18185 _ = v.Args[1]
18186 o5 := v.Args[0]
18187 if o5.Op != OpPPC64OR {
18188 break
18189 }
18190 if o5.Type != t {
18191 break
18192 }
18193 _ = o5.Args[1]
18194 o4 := o5.Args[0]
18195 if o4.Op != OpPPC64OR {
18196 break
18197 }
18198 if o4.Type != t {
18199 break
18200 }
18201 _ = o4.Args[1]
18202 o3 := o4.Args[0]
18203 if o3.Op != OpPPC64OR {
18204 break
18205 }
18206 if o3.Type != t {
18207 break
18208 }
18209 _ = o3.Args[1]
18210 x0 := o3.Args[0]
18211 if x0.Op != OpPPC64MOVWZload {
18212 break
18213 }
18214 i0 := x0.AuxInt
18215 s := x0.Aux
18216 mem := x0.Args[1]
18217 p := x0.Args[0]
18218 s3 := o3.Args[1]
18219 if s3.Op != OpPPC64SLDconst {
18220 break
18221 }
18222 if s3.AuxInt != 32 {
18223 break
18224 }
18225 x4 := s3.Args[0]
18226 if x4.Op != OpPPC64MOVBZload {
18227 break
18228 }
18229 i4 := x4.AuxInt
18230 if x4.Aux != s {
18231 break
18232 }
18233 _ = x4.Args[1]
18234 if p != x4.Args[0] {
18235 break
18236 }
18237 if mem != x4.Args[1] {
18238 break
18239 }
18240 s4 := o4.Args[1]
18241 if s4.Op != OpPPC64SLDconst {
18242 break
18243 }
18244 if s4.AuxInt != 40 {
18245 break
18246 }
18247 x5 := s4.Args[0]
18248 if x5.Op != OpPPC64MOVBZload {
18249 break
18250 }
18251 i5 := x5.AuxInt
18252 if x5.Aux != s {
18253 break
18254 }
18255 _ = x5.Args[1]
18256 if p != x5.Args[0] {
18257 break
18258 }
18259 if mem != x5.Args[1] {
18260 break
18261 }
18262 s5 := o5.Args[1]
18263 if s5.Op != OpPPC64SLDconst {
18264 break
18265 }
18266 if s5.AuxInt != 48 {
18267 break
18268 }
18269 x6 := s5.Args[0]
18270 if x6.Op != OpPPC64MOVBZload {
18271 break
18272 }
18273 i6 := x6.AuxInt
18274 if x6.Aux != s {
18275 break
18276 }
18277 _ = x6.Args[1]
18278 if p != x6.Args[0] {
18279 break
18280 }
18281 if mem != x6.Args[1] {
18282 break
18283 }
18284 s6 := v.Args[1]
18285 if s6.Op != OpPPC64SLDconst {
18286 break
18287 }
18288 if s6.AuxInt != 56 {
18289 break
18290 }
18291 x7 := s6.Args[0]
18292 if x7.Op != OpPPC64MOVBZload {
18293 break
18294 }
18295 i7 := x7.AuxInt
18296 if x7.Aux != s {
18297 break
18298 }
18299 _ = x7.Args[1]
18300 if p != x7.Args[0] {
18301 break
18302 }
18303 if mem != x7.Args[1] {
18304 break
18305 }
18306 if !(!config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o3) && clobber(o4) && clobber(o5)) {
18307 break
18308 }
18309 b = mergePoint(b, x0, x4, x5, x6, x7)
18310 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDload, t)
18311 v.reset(OpCopy)
18312 v.AddArg(v0)
18313 v0.AuxInt = i0
18314 v0.Aux = s
18315 v0.AddArg(p)
18316 v0.AddArg(mem)
18317 return true
18318 }
18319
18320
18321
18322 for {
18323 t := v.Type
18324 _ = v.Args[1]
18325 s0 := v.Args[0]
18326 if s0.Op != OpPPC64SLDconst {
18327 break
18328 }
18329 if s0.AuxInt != 56 {
18330 break
18331 }
18332 x0 := s0.Args[0]
18333 if x0.Op != OpPPC64MOVBZload {
18334 break
18335 }
18336 i0 := x0.AuxInt
18337 s := x0.Aux
18338 mem := x0.Args[1]
18339 p := x0.Args[0]
18340 o0 := v.Args[1]
18341 if o0.Op != OpPPC64OR {
18342 break
18343 }
18344 if o0.Type != t {
18345 break
18346 }
18347 _ = o0.Args[1]
18348 s1 := o0.Args[0]
18349 if s1.Op != OpPPC64SLDconst {
18350 break
18351 }
18352 if s1.AuxInt != 48 {
18353 break
18354 }
18355 x1 := s1.Args[0]
18356 if x1.Op != OpPPC64MOVBZload {
18357 break
18358 }
18359 i1 := x1.AuxInt
18360 if x1.Aux != s {
18361 break
18362 }
18363 _ = x1.Args[1]
18364 if p != x1.Args[0] {
18365 break
18366 }
18367 if mem != x1.Args[1] {
18368 break
18369 }
18370 o1 := o0.Args[1]
18371 if o1.Op != OpPPC64OR {
18372 break
18373 }
18374 if o1.Type != t {
18375 break
18376 }
18377 _ = o1.Args[1]
18378 s2 := o1.Args[0]
18379 if s2.Op != OpPPC64SLDconst {
18380 break
18381 }
18382 if s2.AuxInt != 40 {
18383 break
18384 }
18385 x2 := s2.Args[0]
18386 if x2.Op != OpPPC64MOVBZload {
18387 break
18388 }
18389 i2 := x2.AuxInt
18390 if x2.Aux != s {
18391 break
18392 }
18393 _ = x2.Args[1]
18394 if p != x2.Args[0] {
18395 break
18396 }
18397 if mem != x2.Args[1] {
18398 break
18399 }
18400 o2 := o1.Args[1]
18401 if o2.Op != OpPPC64OR {
18402 break
18403 }
18404 if o2.Type != t {
18405 break
18406 }
18407 _ = o2.Args[1]
18408 s3 := o2.Args[0]
18409 if s3.Op != OpPPC64SLDconst {
18410 break
18411 }
18412 if s3.AuxInt != 32 {
18413 break
18414 }
18415 x3 := s3.Args[0]
18416 if x3.Op != OpPPC64MOVBZload {
18417 break
18418 }
18419 i3 := x3.AuxInt
18420 if x3.Aux != s {
18421 break
18422 }
18423 _ = x3.Args[1]
18424 if p != x3.Args[0] {
18425 break
18426 }
18427 if mem != x3.Args[1] {
18428 break
18429 }
18430 x4 := o2.Args[1]
18431 if x4.Op != OpPPC64MOVWBRload {
18432 break
18433 }
18434 if x4.Type != t {
18435 break
18436 }
18437 _ = x4.Args[1]
18438 x4_0 := x4.Args[0]
18439 if x4_0.Op != OpPPC64MOVDaddr {
18440 break
18441 }
18442 if x4_0.Type != typ.Uintptr {
18443 break
18444 }
18445 i4 := x4_0.AuxInt
18446 if p != x4_0.Args[0] {
18447 break
18448 }
18449 if mem != x4.Args[1] {
18450 break
18451 }
18452 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
18453 break
18454 }
18455 b = mergePoint(b, x0, x1, x2, x3, x4)
18456 v0 := b.NewValue0(x4.Pos, OpPPC64MOVDBRload, t)
18457 v.reset(OpCopy)
18458 v.AddArg(v0)
18459 v1 := b.NewValue0(x4.Pos, OpPPC64MOVDaddr, typ.Uintptr)
18460 v1.AuxInt = i0
18461 v1.Aux = s
18462 v1.AddArg(p)
18463 v0.AddArg(v1)
18464 v0.AddArg(mem)
18465 return true
18466 }
18467
18468
18469
18470 for {
18471 t := v.Type
18472 _ = v.Args[1]
18473 s0 := v.Args[0]
18474 if s0.Op != OpPPC64SLDconst {
18475 break
18476 }
18477 if s0.AuxInt != 56 {
18478 break
18479 }
18480 x0 := s0.Args[0]
18481 if x0.Op != OpPPC64MOVBZload {
18482 break
18483 }
18484 i0 := x0.AuxInt
18485 s := x0.Aux
18486 mem := x0.Args[1]
18487 p := x0.Args[0]
18488 o0 := v.Args[1]
18489 if o0.Op != OpPPC64OR {
18490 break
18491 }
18492 if o0.Type != t {
18493 break
18494 }
18495 _ = o0.Args[1]
18496 s1 := o0.Args[0]
18497 if s1.Op != OpPPC64SLDconst {
18498 break
18499 }
18500 if s1.AuxInt != 48 {
18501 break
18502 }
18503 x1 := s1.Args[0]
18504 if x1.Op != OpPPC64MOVBZload {
18505 break
18506 }
18507 i1 := x1.AuxInt
18508 if x1.Aux != s {
18509 break
18510 }
18511 _ = x1.Args[1]
18512 if p != x1.Args[0] {
18513 break
18514 }
18515 if mem != x1.Args[1] {
18516 break
18517 }
18518 o1 := o0.Args[1]
18519 if o1.Op != OpPPC64OR {
18520 break
18521 }
18522 if o1.Type != t {
18523 break
18524 }
18525 _ = o1.Args[1]
18526 s2 := o1.Args[0]
18527 if s2.Op != OpPPC64SLDconst {
18528 break
18529 }
18530 if s2.AuxInt != 40 {
18531 break
18532 }
18533 x2 := s2.Args[0]
18534 if x2.Op != OpPPC64MOVBZload {
18535 break
18536 }
18537 i2 := x2.AuxInt
18538 if x2.Aux != s {
18539 break
18540 }
18541 _ = x2.Args[1]
18542 if p != x2.Args[0] {
18543 break
18544 }
18545 if mem != x2.Args[1] {
18546 break
18547 }
18548 o2 := o1.Args[1]
18549 if o2.Op != OpPPC64OR {
18550 break
18551 }
18552 if o2.Type != t {
18553 break
18554 }
18555 _ = o2.Args[1]
18556 x4 := o2.Args[0]
18557 if x4.Op != OpPPC64MOVWBRload {
18558 break
18559 }
18560 if x4.Type != t {
18561 break
18562 }
18563 _ = x4.Args[1]
18564 x4_0 := x4.Args[0]
18565 if x4_0.Op != OpPPC64MOVDaddr {
18566 break
18567 }
18568 if x4_0.Type != typ.Uintptr {
18569 break
18570 }
18571 i4 := x4_0.AuxInt
18572 if p != x4_0.Args[0] {
18573 break
18574 }
18575 if mem != x4.Args[1] {
18576 break
18577 }
18578 s3 := o2.Args[1]
18579 if s3.Op != OpPPC64SLDconst {
18580 break
18581 }
18582 if s3.AuxInt != 32 {
18583 break
18584 }
18585 x3 := s3.Args[0]
18586 if x3.Op != OpPPC64MOVBZload {
18587 break
18588 }
18589 i3 := x3.AuxInt
18590 if x3.Aux != s {
18591 break
18592 }
18593 _ = x3.Args[1]
18594 if p != x3.Args[0] {
18595 break
18596 }
18597 if mem != x3.Args[1] {
18598 break
18599 }
18600 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
18601 break
18602 }
18603 b = mergePoint(b, x0, x1, x2, x3, x4)
18604 v0 := b.NewValue0(x3.Pos, OpPPC64MOVDBRload, t)
18605 v.reset(OpCopy)
18606 v.AddArg(v0)
18607 v1 := b.NewValue0(x3.Pos, OpPPC64MOVDaddr, typ.Uintptr)
18608 v1.AuxInt = i0
18609 v1.Aux = s
18610 v1.AddArg(p)
18611 v0.AddArg(v1)
18612 v0.AddArg(mem)
18613 return true
18614 }
18615
18616
18617
18618 for {
18619 t := v.Type
18620 _ = v.Args[1]
18621 s0 := v.Args[0]
18622 if s0.Op != OpPPC64SLDconst {
18623 break
18624 }
18625 if s0.AuxInt != 56 {
18626 break
18627 }
18628 x0 := s0.Args[0]
18629 if x0.Op != OpPPC64MOVBZload {
18630 break
18631 }
18632 i0 := x0.AuxInt
18633 s := x0.Aux
18634 mem := x0.Args[1]
18635 p := x0.Args[0]
18636 o0 := v.Args[1]
18637 if o0.Op != OpPPC64OR {
18638 break
18639 }
18640 if o0.Type != t {
18641 break
18642 }
18643 _ = o0.Args[1]
18644 s1 := o0.Args[0]
18645 if s1.Op != OpPPC64SLDconst {
18646 break
18647 }
18648 if s1.AuxInt != 48 {
18649 break
18650 }
18651 x1 := s1.Args[0]
18652 if x1.Op != OpPPC64MOVBZload {
18653 break
18654 }
18655 i1 := x1.AuxInt
18656 if x1.Aux != s {
18657 break
18658 }
18659 _ = x1.Args[1]
18660 if p != x1.Args[0] {
18661 break
18662 }
18663 if mem != x1.Args[1] {
18664 break
18665 }
18666 o1 := o0.Args[1]
18667 if o1.Op != OpPPC64OR {
18668 break
18669 }
18670 if o1.Type != t {
18671 break
18672 }
18673 _ = o1.Args[1]
18674 o2 := o1.Args[0]
18675 if o2.Op != OpPPC64OR {
18676 break
18677 }
18678 if o2.Type != t {
18679 break
18680 }
18681 _ = o2.Args[1]
18682 s3 := o2.Args[0]
18683 if s3.Op != OpPPC64SLDconst {
18684 break
18685 }
18686 if s3.AuxInt != 32 {
18687 break
18688 }
18689 x3 := s3.Args[0]
18690 if x3.Op != OpPPC64MOVBZload {
18691 break
18692 }
18693 i3 := x3.AuxInt
18694 if x3.Aux != s {
18695 break
18696 }
18697 _ = x3.Args[1]
18698 if p != x3.Args[0] {
18699 break
18700 }
18701 if mem != x3.Args[1] {
18702 break
18703 }
18704 x4 := o2.Args[1]
18705 if x4.Op != OpPPC64MOVWBRload {
18706 break
18707 }
18708 if x4.Type != t {
18709 break
18710 }
18711 _ = x4.Args[1]
18712 x4_0 := x4.Args[0]
18713 if x4_0.Op != OpPPC64MOVDaddr {
18714 break
18715 }
18716 if x4_0.Type != typ.Uintptr {
18717 break
18718 }
18719 i4 := x4_0.AuxInt
18720 if p != x4_0.Args[0] {
18721 break
18722 }
18723 if mem != x4.Args[1] {
18724 break
18725 }
18726 s2 := o1.Args[1]
18727 if s2.Op != OpPPC64SLDconst {
18728 break
18729 }
18730 if s2.AuxInt != 40 {
18731 break
18732 }
18733 x2 := s2.Args[0]
18734 if x2.Op != OpPPC64MOVBZload {
18735 break
18736 }
18737 i2 := x2.AuxInt
18738 if x2.Aux != s {
18739 break
18740 }
18741 _ = x2.Args[1]
18742 if p != x2.Args[0] {
18743 break
18744 }
18745 if mem != x2.Args[1] {
18746 break
18747 }
18748 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
18749 break
18750 }
18751 b = mergePoint(b, x0, x1, x2, x3, x4)
18752 v0 := b.NewValue0(x2.Pos, OpPPC64MOVDBRload, t)
18753 v.reset(OpCopy)
18754 v.AddArg(v0)
18755 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
18756 v1.AuxInt = i0
18757 v1.Aux = s
18758 v1.AddArg(p)
18759 v0.AddArg(v1)
18760 v0.AddArg(mem)
18761 return true
18762 }
18763
18764
18765
18766 for {
18767 t := v.Type
18768 _ = v.Args[1]
18769 s0 := v.Args[0]
18770 if s0.Op != OpPPC64SLDconst {
18771 break
18772 }
18773 if s0.AuxInt != 56 {
18774 break
18775 }
18776 x0 := s0.Args[0]
18777 if x0.Op != OpPPC64MOVBZload {
18778 break
18779 }
18780 i0 := x0.AuxInt
18781 s := x0.Aux
18782 mem := x0.Args[1]
18783 p := x0.Args[0]
18784 o0 := v.Args[1]
18785 if o0.Op != OpPPC64OR {
18786 break
18787 }
18788 if o0.Type != t {
18789 break
18790 }
18791 _ = o0.Args[1]
18792 s1 := o0.Args[0]
18793 if s1.Op != OpPPC64SLDconst {
18794 break
18795 }
18796 if s1.AuxInt != 48 {
18797 break
18798 }
18799 x1 := s1.Args[0]
18800 if x1.Op != OpPPC64MOVBZload {
18801 break
18802 }
18803 i1 := x1.AuxInt
18804 if x1.Aux != s {
18805 break
18806 }
18807 _ = x1.Args[1]
18808 if p != x1.Args[0] {
18809 break
18810 }
18811 if mem != x1.Args[1] {
18812 break
18813 }
18814 o1 := o0.Args[1]
18815 if o1.Op != OpPPC64OR {
18816 break
18817 }
18818 if o1.Type != t {
18819 break
18820 }
18821 _ = o1.Args[1]
18822 o2 := o1.Args[0]
18823 if o2.Op != OpPPC64OR {
18824 break
18825 }
18826 if o2.Type != t {
18827 break
18828 }
18829 _ = o2.Args[1]
18830 x4 := o2.Args[0]
18831 if x4.Op != OpPPC64MOVWBRload {
18832 break
18833 }
18834 if x4.Type != t {
18835 break
18836 }
18837 _ = x4.Args[1]
18838 x4_0 := x4.Args[0]
18839 if x4_0.Op != OpPPC64MOVDaddr {
18840 break
18841 }
18842 if x4_0.Type != typ.Uintptr {
18843 break
18844 }
18845 i4 := x4_0.AuxInt
18846 if p != x4_0.Args[0] {
18847 break
18848 }
18849 if mem != x4.Args[1] {
18850 break
18851 }
18852 s3 := o2.Args[1]
18853 if s3.Op != OpPPC64SLDconst {
18854 break
18855 }
18856 if s3.AuxInt != 32 {
18857 break
18858 }
18859 x3 := s3.Args[0]
18860 if x3.Op != OpPPC64MOVBZload {
18861 break
18862 }
18863 i3 := x3.AuxInt
18864 if x3.Aux != s {
18865 break
18866 }
18867 _ = x3.Args[1]
18868 if p != x3.Args[0] {
18869 break
18870 }
18871 if mem != x3.Args[1] {
18872 break
18873 }
18874 s2 := o1.Args[1]
18875 if s2.Op != OpPPC64SLDconst {
18876 break
18877 }
18878 if s2.AuxInt != 40 {
18879 break
18880 }
18881 x2 := s2.Args[0]
18882 if x2.Op != OpPPC64MOVBZload {
18883 break
18884 }
18885 i2 := x2.AuxInt
18886 if x2.Aux != s {
18887 break
18888 }
18889 _ = x2.Args[1]
18890 if p != x2.Args[0] {
18891 break
18892 }
18893 if mem != x2.Args[1] {
18894 break
18895 }
18896 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
18897 break
18898 }
18899 b = mergePoint(b, x0, x1, x2, x3, x4)
18900 v0 := b.NewValue0(x2.Pos, OpPPC64MOVDBRload, t)
18901 v.reset(OpCopy)
18902 v.AddArg(v0)
18903 v1 := b.NewValue0(x2.Pos, OpPPC64MOVDaddr, typ.Uintptr)
18904 v1.AuxInt = i0
18905 v1.Aux = s
18906 v1.AddArg(p)
18907 v0.AddArg(v1)
18908 v0.AddArg(mem)
18909 return true
18910 }
18911
18912
18913
18914 for {
18915 t := v.Type
18916 _ = v.Args[1]
18917 s0 := v.Args[0]
18918 if s0.Op != OpPPC64SLDconst {
18919 break
18920 }
18921 if s0.AuxInt != 56 {
18922 break
18923 }
18924 x0 := s0.Args[0]
18925 if x0.Op != OpPPC64MOVBZload {
18926 break
18927 }
18928 i0 := x0.AuxInt
18929 s := x0.Aux
18930 mem := x0.Args[1]
18931 p := x0.Args[0]
18932 o0 := v.Args[1]
18933 if o0.Op != OpPPC64OR {
18934 break
18935 }
18936 if o0.Type != t {
18937 break
18938 }
18939 _ = o0.Args[1]
18940 o1 := o0.Args[0]
18941 if o1.Op != OpPPC64OR {
18942 break
18943 }
18944 if o1.Type != t {
18945 break
18946 }
18947 _ = o1.Args[1]
18948 s2 := o1.Args[0]
18949 if s2.Op != OpPPC64SLDconst {
18950 break
18951 }
18952 if s2.AuxInt != 40 {
18953 break
18954 }
18955 x2 := s2.Args[0]
18956 if x2.Op != OpPPC64MOVBZload {
18957 break
18958 }
18959 i2 := x2.AuxInt
18960 if x2.Aux != s {
18961 break
18962 }
18963 _ = x2.Args[1]
18964 if p != x2.Args[0] {
18965 break
18966 }
18967 if mem != x2.Args[1] {
18968 break
18969 }
18970 o2 := o1.Args[1]
18971 if o2.Op != OpPPC64OR {
18972 break
18973 }
18974 if o2.Type != t {
18975 break
18976 }
18977 _ = o2.Args[1]
18978 s3 := o2.Args[0]
18979 if s3.Op != OpPPC64SLDconst {
18980 break
18981 }
18982 if s3.AuxInt != 32 {
18983 break
18984 }
18985 x3 := s3.Args[0]
18986 if x3.Op != OpPPC64MOVBZload {
18987 break
18988 }
18989 i3 := x3.AuxInt
18990 if x3.Aux != s {
18991 break
18992 }
18993 _ = x3.Args[1]
18994 if p != x3.Args[0] {
18995 break
18996 }
18997 if mem != x3.Args[1] {
18998 break
18999 }
19000 x4 := o2.Args[1]
19001 if x4.Op != OpPPC64MOVWBRload {
19002 break
19003 }
19004 if x4.Type != t {
19005 break
19006 }
19007 _ = x4.Args[1]
19008 x4_0 := x4.Args[0]
19009 if x4_0.Op != OpPPC64MOVDaddr {
19010 break
19011 }
19012 if x4_0.Type != typ.Uintptr {
19013 break
19014 }
19015 i4 := x4_0.AuxInt
19016 if p != x4_0.Args[0] {
19017 break
19018 }
19019 if mem != x4.Args[1] {
19020 break
19021 }
19022 s1 := o0.Args[1]
19023 if s1.Op != OpPPC64SLDconst {
19024 break
19025 }
19026 if s1.AuxInt != 48 {
19027 break
19028 }
19029 x1 := s1.Args[0]
19030 if x1.Op != OpPPC64MOVBZload {
19031 break
19032 }
19033 i1 := x1.AuxInt
19034 if x1.Aux != s {
19035 break
19036 }
19037 _ = x1.Args[1]
19038 if p != x1.Args[0] {
19039 break
19040 }
19041 if mem != x1.Args[1] {
19042 break
19043 }
19044 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19045 break
19046 }
19047 b = mergePoint(b, x0, x1, x2, x3, x4)
19048 v0 := b.NewValue0(x1.Pos, OpPPC64MOVDBRload, t)
19049 v.reset(OpCopy)
19050 v.AddArg(v0)
19051 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19052 v1.AuxInt = i0
19053 v1.Aux = s
19054 v1.AddArg(p)
19055 v0.AddArg(v1)
19056 v0.AddArg(mem)
19057 return true
19058 }
19059
19060
19061
19062 for {
19063 t := v.Type
19064 _ = v.Args[1]
19065 s0 := v.Args[0]
19066 if s0.Op != OpPPC64SLDconst {
19067 break
19068 }
19069 if s0.AuxInt != 56 {
19070 break
19071 }
19072 x0 := s0.Args[0]
19073 if x0.Op != OpPPC64MOVBZload {
19074 break
19075 }
19076 i0 := x0.AuxInt
19077 s := x0.Aux
19078 mem := x0.Args[1]
19079 p := x0.Args[0]
19080 o0 := v.Args[1]
19081 if o0.Op != OpPPC64OR {
19082 break
19083 }
19084 if o0.Type != t {
19085 break
19086 }
19087 _ = o0.Args[1]
19088 o1 := o0.Args[0]
19089 if o1.Op != OpPPC64OR {
19090 break
19091 }
19092 if o1.Type != t {
19093 break
19094 }
19095 _ = o1.Args[1]
19096 s2 := o1.Args[0]
19097 if s2.Op != OpPPC64SLDconst {
19098 break
19099 }
19100 if s2.AuxInt != 40 {
19101 break
19102 }
19103 x2 := s2.Args[0]
19104 if x2.Op != OpPPC64MOVBZload {
19105 break
19106 }
19107 i2 := x2.AuxInt
19108 if x2.Aux != s {
19109 break
19110 }
19111 _ = x2.Args[1]
19112 if p != x2.Args[0] {
19113 break
19114 }
19115 if mem != x2.Args[1] {
19116 break
19117 }
19118 o2 := o1.Args[1]
19119 if o2.Op != OpPPC64OR {
19120 break
19121 }
19122 if o2.Type != t {
19123 break
19124 }
19125 _ = o2.Args[1]
19126 x4 := o2.Args[0]
19127 if x4.Op != OpPPC64MOVWBRload {
19128 break
19129 }
19130 if x4.Type != t {
19131 break
19132 }
19133 _ = x4.Args[1]
19134 x4_0 := x4.Args[0]
19135 if x4_0.Op != OpPPC64MOVDaddr {
19136 break
19137 }
19138 if x4_0.Type != typ.Uintptr {
19139 break
19140 }
19141 i4 := x4_0.AuxInt
19142 if p != x4_0.Args[0] {
19143 break
19144 }
19145 if mem != x4.Args[1] {
19146 break
19147 }
19148 s3 := o2.Args[1]
19149 if s3.Op != OpPPC64SLDconst {
19150 break
19151 }
19152 if s3.AuxInt != 32 {
19153 break
19154 }
19155 x3 := s3.Args[0]
19156 if x3.Op != OpPPC64MOVBZload {
19157 break
19158 }
19159 i3 := x3.AuxInt
19160 if x3.Aux != s {
19161 break
19162 }
19163 _ = x3.Args[1]
19164 if p != x3.Args[0] {
19165 break
19166 }
19167 if mem != x3.Args[1] {
19168 break
19169 }
19170 s1 := o0.Args[1]
19171 if s1.Op != OpPPC64SLDconst {
19172 break
19173 }
19174 if s1.AuxInt != 48 {
19175 break
19176 }
19177 x1 := s1.Args[0]
19178 if x1.Op != OpPPC64MOVBZload {
19179 break
19180 }
19181 i1 := x1.AuxInt
19182 if x1.Aux != s {
19183 break
19184 }
19185 _ = x1.Args[1]
19186 if p != x1.Args[0] {
19187 break
19188 }
19189 if mem != x1.Args[1] {
19190 break
19191 }
19192 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19193 break
19194 }
19195 b = mergePoint(b, x0, x1, x2, x3, x4)
19196 v0 := b.NewValue0(x1.Pos, OpPPC64MOVDBRload, t)
19197 v.reset(OpCopy)
19198 v.AddArg(v0)
19199 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19200 v1.AuxInt = i0
19201 v1.Aux = s
19202 v1.AddArg(p)
19203 v0.AddArg(v1)
19204 v0.AddArg(mem)
19205 return true
19206 }
19207
19208
19209
19210 for {
19211 t := v.Type
19212 _ = v.Args[1]
19213 s0 := v.Args[0]
19214 if s0.Op != OpPPC64SLDconst {
19215 break
19216 }
19217 if s0.AuxInt != 56 {
19218 break
19219 }
19220 x0 := s0.Args[0]
19221 if x0.Op != OpPPC64MOVBZload {
19222 break
19223 }
19224 i0 := x0.AuxInt
19225 s := x0.Aux
19226 mem := x0.Args[1]
19227 p := x0.Args[0]
19228 o0 := v.Args[1]
19229 if o0.Op != OpPPC64OR {
19230 break
19231 }
19232 if o0.Type != t {
19233 break
19234 }
19235 _ = o0.Args[1]
19236 o1 := o0.Args[0]
19237 if o1.Op != OpPPC64OR {
19238 break
19239 }
19240 if o1.Type != t {
19241 break
19242 }
19243 _ = o1.Args[1]
19244 o2 := o1.Args[0]
19245 if o2.Op != OpPPC64OR {
19246 break
19247 }
19248 if o2.Type != t {
19249 break
19250 }
19251 _ = o2.Args[1]
19252 s3 := o2.Args[0]
19253 if s3.Op != OpPPC64SLDconst {
19254 break
19255 }
19256 if s3.AuxInt != 32 {
19257 break
19258 }
19259 x3 := s3.Args[0]
19260 if x3.Op != OpPPC64MOVBZload {
19261 break
19262 }
19263 i3 := x3.AuxInt
19264 if x3.Aux != s {
19265 break
19266 }
19267 _ = x3.Args[1]
19268 if p != x3.Args[0] {
19269 break
19270 }
19271 if mem != x3.Args[1] {
19272 break
19273 }
19274 x4 := o2.Args[1]
19275 if x4.Op != OpPPC64MOVWBRload {
19276 break
19277 }
19278 if x4.Type != t {
19279 break
19280 }
19281 _ = x4.Args[1]
19282 x4_0 := x4.Args[0]
19283 if x4_0.Op != OpPPC64MOVDaddr {
19284 break
19285 }
19286 if x4_0.Type != typ.Uintptr {
19287 break
19288 }
19289 i4 := x4_0.AuxInt
19290 if p != x4_0.Args[0] {
19291 break
19292 }
19293 if mem != x4.Args[1] {
19294 break
19295 }
19296 s2 := o1.Args[1]
19297 if s2.Op != OpPPC64SLDconst {
19298 break
19299 }
19300 if s2.AuxInt != 40 {
19301 break
19302 }
19303 x2 := s2.Args[0]
19304 if x2.Op != OpPPC64MOVBZload {
19305 break
19306 }
19307 i2 := x2.AuxInt
19308 if x2.Aux != s {
19309 break
19310 }
19311 _ = x2.Args[1]
19312 if p != x2.Args[0] {
19313 break
19314 }
19315 if mem != x2.Args[1] {
19316 break
19317 }
19318 s1 := o0.Args[1]
19319 if s1.Op != OpPPC64SLDconst {
19320 break
19321 }
19322 if s1.AuxInt != 48 {
19323 break
19324 }
19325 x1 := s1.Args[0]
19326 if x1.Op != OpPPC64MOVBZload {
19327 break
19328 }
19329 i1 := x1.AuxInt
19330 if x1.Aux != s {
19331 break
19332 }
19333 _ = x1.Args[1]
19334 if p != x1.Args[0] {
19335 break
19336 }
19337 if mem != x1.Args[1] {
19338 break
19339 }
19340 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19341 break
19342 }
19343 b = mergePoint(b, x0, x1, x2, x3, x4)
19344 v0 := b.NewValue0(x1.Pos, OpPPC64MOVDBRload, t)
19345 v.reset(OpCopy)
19346 v.AddArg(v0)
19347 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19348 v1.AuxInt = i0
19349 v1.Aux = s
19350 v1.AddArg(p)
19351 v0.AddArg(v1)
19352 v0.AddArg(mem)
19353 return true
19354 }
19355
19356
19357
19358 for {
19359 t := v.Type
19360 _ = v.Args[1]
19361 s0 := v.Args[0]
19362 if s0.Op != OpPPC64SLDconst {
19363 break
19364 }
19365 if s0.AuxInt != 56 {
19366 break
19367 }
19368 x0 := s0.Args[0]
19369 if x0.Op != OpPPC64MOVBZload {
19370 break
19371 }
19372 i0 := x0.AuxInt
19373 s := x0.Aux
19374 mem := x0.Args[1]
19375 p := x0.Args[0]
19376 o0 := v.Args[1]
19377 if o0.Op != OpPPC64OR {
19378 break
19379 }
19380 if o0.Type != t {
19381 break
19382 }
19383 _ = o0.Args[1]
19384 o1 := o0.Args[0]
19385 if o1.Op != OpPPC64OR {
19386 break
19387 }
19388 if o1.Type != t {
19389 break
19390 }
19391 _ = o1.Args[1]
19392 o2 := o1.Args[0]
19393 if o2.Op != OpPPC64OR {
19394 break
19395 }
19396 if o2.Type != t {
19397 break
19398 }
19399 _ = o2.Args[1]
19400 x4 := o2.Args[0]
19401 if x4.Op != OpPPC64MOVWBRload {
19402 break
19403 }
19404 if x4.Type != t {
19405 break
19406 }
19407 _ = x4.Args[1]
19408 x4_0 := x4.Args[0]
19409 if x4_0.Op != OpPPC64MOVDaddr {
19410 break
19411 }
19412 if x4_0.Type != typ.Uintptr {
19413 break
19414 }
19415 i4 := x4_0.AuxInt
19416 if p != x4_0.Args[0] {
19417 break
19418 }
19419 if mem != x4.Args[1] {
19420 break
19421 }
19422 s3 := o2.Args[1]
19423 if s3.Op != OpPPC64SLDconst {
19424 break
19425 }
19426 if s3.AuxInt != 32 {
19427 break
19428 }
19429 x3 := s3.Args[0]
19430 if x3.Op != OpPPC64MOVBZload {
19431 break
19432 }
19433 i3 := x3.AuxInt
19434 if x3.Aux != s {
19435 break
19436 }
19437 _ = x3.Args[1]
19438 if p != x3.Args[0] {
19439 break
19440 }
19441 if mem != x3.Args[1] {
19442 break
19443 }
19444 s2 := o1.Args[1]
19445 if s2.Op != OpPPC64SLDconst {
19446 break
19447 }
19448 if s2.AuxInt != 40 {
19449 break
19450 }
19451 x2 := s2.Args[0]
19452 if x2.Op != OpPPC64MOVBZload {
19453 break
19454 }
19455 i2 := x2.AuxInt
19456 if x2.Aux != s {
19457 break
19458 }
19459 _ = x2.Args[1]
19460 if p != x2.Args[0] {
19461 break
19462 }
19463 if mem != x2.Args[1] {
19464 break
19465 }
19466 s1 := o0.Args[1]
19467 if s1.Op != OpPPC64SLDconst {
19468 break
19469 }
19470 if s1.AuxInt != 48 {
19471 break
19472 }
19473 x1 := s1.Args[0]
19474 if x1.Op != OpPPC64MOVBZload {
19475 break
19476 }
19477 i1 := x1.AuxInt
19478 if x1.Aux != s {
19479 break
19480 }
19481 _ = x1.Args[1]
19482 if p != x1.Args[0] {
19483 break
19484 }
19485 if mem != x1.Args[1] {
19486 break
19487 }
19488 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19489 break
19490 }
19491 b = mergePoint(b, x0, x1, x2, x3, x4)
19492 v0 := b.NewValue0(x1.Pos, OpPPC64MOVDBRload, t)
19493 v.reset(OpCopy)
19494 v.AddArg(v0)
19495 v1 := b.NewValue0(x1.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19496 v1.AuxInt = i0
19497 v1.Aux = s
19498 v1.AddArg(p)
19499 v0.AddArg(v1)
19500 v0.AddArg(mem)
19501 return true
19502 }
19503 return false
19504 }
19505 func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool {
19506 b := v.Block
19507 config := b.Func.Config
19508 typ := &b.Func.Config.Types
19509
19510
19511
19512 for {
19513 t := v.Type
19514 _ = v.Args[1]
19515 o0 := v.Args[0]
19516 if o0.Op != OpPPC64OR {
19517 break
19518 }
19519 if o0.Type != t {
19520 break
19521 }
19522 _ = o0.Args[1]
19523 s1 := o0.Args[0]
19524 if s1.Op != OpPPC64SLDconst {
19525 break
19526 }
19527 if s1.AuxInt != 48 {
19528 break
19529 }
19530 x1 := s1.Args[0]
19531 if x1.Op != OpPPC64MOVBZload {
19532 break
19533 }
19534 i1 := x1.AuxInt
19535 s := x1.Aux
19536 mem := x1.Args[1]
19537 p := x1.Args[0]
19538 o1 := o0.Args[1]
19539 if o1.Op != OpPPC64OR {
19540 break
19541 }
19542 if o1.Type != t {
19543 break
19544 }
19545 _ = o1.Args[1]
19546 s2 := o1.Args[0]
19547 if s2.Op != OpPPC64SLDconst {
19548 break
19549 }
19550 if s2.AuxInt != 40 {
19551 break
19552 }
19553 x2 := s2.Args[0]
19554 if x2.Op != OpPPC64MOVBZload {
19555 break
19556 }
19557 i2 := x2.AuxInt
19558 if x2.Aux != s {
19559 break
19560 }
19561 _ = x2.Args[1]
19562 if p != x2.Args[0] {
19563 break
19564 }
19565 if mem != x2.Args[1] {
19566 break
19567 }
19568 o2 := o1.Args[1]
19569 if o2.Op != OpPPC64OR {
19570 break
19571 }
19572 if o2.Type != t {
19573 break
19574 }
19575 _ = o2.Args[1]
19576 s3 := o2.Args[0]
19577 if s3.Op != OpPPC64SLDconst {
19578 break
19579 }
19580 if s3.AuxInt != 32 {
19581 break
19582 }
19583 x3 := s3.Args[0]
19584 if x3.Op != OpPPC64MOVBZload {
19585 break
19586 }
19587 i3 := x3.AuxInt
19588 if x3.Aux != s {
19589 break
19590 }
19591 _ = x3.Args[1]
19592 if p != x3.Args[0] {
19593 break
19594 }
19595 if mem != x3.Args[1] {
19596 break
19597 }
19598 x4 := o2.Args[1]
19599 if x4.Op != OpPPC64MOVWBRload {
19600 break
19601 }
19602 if x4.Type != t {
19603 break
19604 }
19605 _ = x4.Args[1]
19606 x4_0 := x4.Args[0]
19607 if x4_0.Op != OpPPC64MOVDaddr {
19608 break
19609 }
19610 if x4_0.Type != typ.Uintptr {
19611 break
19612 }
19613 i4 := x4_0.AuxInt
19614 if p != x4_0.Args[0] {
19615 break
19616 }
19617 if mem != x4.Args[1] {
19618 break
19619 }
19620 s0 := v.Args[1]
19621 if s0.Op != OpPPC64SLDconst {
19622 break
19623 }
19624 if s0.AuxInt != 56 {
19625 break
19626 }
19627 x0 := s0.Args[0]
19628 if x0.Op != OpPPC64MOVBZload {
19629 break
19630 }
19631 i0 := x0.AuxInt
19632 if x0.Aux != s {
19633 break
19634 }
19635 _ = x0.Args[1]
19636 if p != x0.Args[0] {
19637 break
19638 }
19639 if mem != x0.Args[1] {
19640 break
19641 }
19642 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19643 break
19644 }
19645 b = mergePoint(b, x0, x1, x2, x3, x4)
19646 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
19647 v.reset(OpCopy)
19648 v.AddArg(v0)
19649 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19650 v1.AuxInt = i0
19651 v1.Aux = s
19652 v1.AddArg(p)
19653 v0.AddArg(v1)
19654 v0.AddArg(mem)
19655 return true
19656 }
19657
19658
19659
19660 for {
19661 t := v.Type
19662 _ = v.Args[1]
19663 o0 := v.Args[0]
19664 if o0.Op != OpPPC64OR {
19665 break
19666 }
19667 if o0.Type != t {
19668 break
19669 }
19670 _ = o0.Args[1]
19671 s1 := o0.Args[0]
19672 if s1.Op != OpPPC64SLDconst {
19673 break
19674 }
19675 if s1.AuxInt != 48 {
19676 break
19677 }
19678 x1 := s1.Args[0]
19679 if x1.Op != OpPPC64MOVBZload {
19680 break
19681 }
19682 i1 := x1.AuxInt
19683 s := x1.Aux
19684 mem := x1.Args[1]
19685 p := x1.Args[0]
19686 o1 := o0.Args[1]
19687 if o1.Op != OpPPC64OR {
19688 break
19689 }
19690 if o1.Type != t {
19691 break
19692 }
19693 _ = o1.Args[1]
19694 s2 := o1.Args[0]
19695 if s2.Op != OpPPC64SLDconst {
19696 break
19697 }
19698 if s2.AuxInt != 40 {
19699 break
19700 }
19701 x2 := s2.Args[0]
19702 if x2.Op != OpPPC64MOVBZload {
19703 break
19704 }
19705 i2 := x2.AuxInt
19706 if x2.Aux != s {
19707 break
19708 }
19709 _ = x2.Args[1]
19710 if p != x2.Args[0] {
19711 break
19712 }
19713 if mem != x2.Args[1] {
19714 break
19715 }
19716 o2 := o1.Args[1]
19717 if o2.Op != OpPPC64OR {
19718 break
19719 }
19720 if o2.Type != t {
19721 break
19722 }
19723 _ = o2.Args[1]
19724 x4 := o2.Args[0]
19725 if x4.Op != OpPPC64MOVWBRload {
19726 break
19727 }
19728 if x4.Type != t {
19729 break
19730 }
19731 _ = x4.Args[1]
19732 x4_0 := x4.Args[0]
19733 if x4_0.Op != OpPPC64MOVDaddr {
19734 break
19735 }
19736 if x4_0.Type != typ.Uintptr {
19737 break
19738 }
19739 i4 := x4_0.AuxInt
19740 if p != x4_0.Args[0] {
19741 break
19742 }
19743 if mem != x4.Args[1] {
19744 break
19745 }
19746 s3 := o2.Args[1]
19747 if s3.Op != OpPPC64SLDconst {
19748 break
19749 }
19750 if s3.AuxInt != 32 {
19751 break
19752 }
19753 x3 := s3.Args[0]
19754 if x3.Op != OpPPC64MOVBZload {
19755 break
19756 }
19757 i3 := x3.AuxInt
19758 if x3.Aux != s {
19759 break
19760 }
19761 _ = x3.Args[1]
19762 if p != x3.Args[0] {
19763 break
19764 }
19765 if mem != x3.Args[1] {
19766 break
19767 }
19768 s0 := v.Args[1]
19769 if s0.Op != OpPPC64SLDconst {
19770 break
19771 }
19772 if s0.AuxInt != 56 {
19773 break
19774 }
19775 x0 := s0.Args[0]
19776 if x0.Op != OpPPC64MOVBZload {
19777 break
19778 }
19779 i0 := x0.AuxInt
19780 if x0.Aux != s {
19781 break
19782 }
19783 _ = x0.Args[1]
19784 if p != x0.Args[0] {
19785 break
19786 }
19787 if mem != x0.Args[1] {
19788 break
19789 }
19790 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19791 break
19792 }
19793 b = mergePoint(b, x0, x1, x2, x3, x4)
19794 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
19795 v.reset(OpCopy)
19796 v.AddArg(v0)
19797 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19798 v1.AuxInt = i0
19799 v1.Aux = s
19800 v1.AddArg(p)
19801 v0.AddArg(v1)
19802 v0.AddArg(mem)
19803 return true
19804 }
19805
19806
19807
19808 for {
19809 t := v.Type
19810 _ = v.Args[1]
19811 o0 := v.Args[0]
19812 if o0.Op != OpPPC64OR {
19813 break
19814 }
19815 if o0.Type != t {
19816 break
19817 }
19818 _ = o0.Args[1]
19819 s1 := o0.Args[0]
19820 if s1.Op != OpPPC64SLDconst {
19821 break
19822 }
19823 if s1.AuxInt != 48 {
19824 break
19825 }
19826 x1 := s1.Args[0]
19827 if x1.Op != OpPPC64MOVBZload {
19828 break
19829 }
19830 i1 := x1.AuxInt
19831 s := x1.Aux
19832 mem := x1.Args[1]
19833 p := x1.Args[0]
19834 o1 := o0.Args[1]
19835 if o1.Op != OpPPC64OR {
19836 break
19837 }
19838 if o1.Type != t {
19839 break
19840 }
19841 _ = o1.Args[1]
19842 o2 := o1.Args[0]
19843 if o2.Op != OpPPC64OR {
19844 break
19845 }
19846 if o2.Type != t {
19847 break
19848 }
19849 _ = o2.Args[1]
19850 s3 := o2.Args[0]
19851 if s3.Op != OpPPC64SLDconst {
19852 break
19853 }
19854 if s3.AuxInt != 32 {
19855 break
19856 }
19857 x3 := s3.Args[0]
19858 if x3.Op != OpPPC64MOVBZload {
19859 break
19860 }
19861 i3 := x3.AuxInt
19862 if x3.Aux != s {
19863 break
19864 }
19865 _ = x3.Args[1]
19866 if p != x3.Args[0] {
19867 break
19868 }
19869 if mem != x3.Args[1] {
19870 break
19871 }
19872 x4 := o2.Args[1]
19873 if x4.Op != OpPPC64MOVWBRload {
19874 break
19875 }
19876 if x4.Type != t {
19877 break
19878 }
19879 _ = x4.Args[1]
19880 x4_0 := x4.Args[0]
19881 if x4_0.Op != OpPPC64MOVDaddr {
19882 break
19883 }
19884 if x4_0.Type != typ.Uintptr {
19885 break
19886 }
19887 i4 := x4_0.AuxInt
19888 if p != x4_0.Args[0] {
19889 break
19890 }
19891 if mem != x4.Args[1] {
19892 break
19893 }
19894 s2 := o1.Args[1]
19895 if s2.Op != OpPPC64SLDconst {
19896 break
19897 }
19898 if s2.AuxInt != 40 {
19899 break
19900 }
19901 x2 := s2.Args[0]
19902 if x2.Op != OpPPC64MOVBZload {
19903 break
19904 }
19905 i2 := x2.AuxInt
19906 if x2.Aux != s {
19907 break
19908 }
19909 _ = x2.Args[1]
19910 if p != x2.Args[0] {
19911 break
19912 }
19913 if mem != x2.Args[1] {
19914 break
19915 }
19916 s0 := v.Args[1]
19917 if s0.Op != OpPPC64SLDconst {
19918 break
19919 }
19920 if s0.AuxInt != 56 {
19921 break
19922 }
19923 x0 := s0.Args[0]
19924 if x0.Op != OpPPC64MOVBZload {
19925 break
19926 }
19927 i0 := x0.AuxInt
19928 if x0.Aux != s {
19929 break
19930 }
19931 _ = x0.Args[1]
19932 if p != x0.Args[0] {
19933 break
19934 }
19935 if mem != x0.Args[1] {
19936 break
19937 }
19938 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
19939 break
19940 }
19941 b = mergePoint(b, x0, x1, x2, x3, x4)
19942 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
19943 v.reset(OpCopy)
19944 v.AddArg(v0)
19945 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
19946 v1.AuxInt = i0
19947 v1.Aux = s
19948 v1.AddArg(p)
19949 v0.AddArg(v1)
19950 v0.AddArg(mem)
19951 return true
19952 }
19953
19954
19955
19956 for {
19957 t := v.Type
19958 _ = v.Args[1]
19959 o0 := v.Args[0]
19960 if o0.Op != OpPPC64OR {
19961 break
19962 }
19963 if o0.Type != t {
19964 break
19965 }
19966 _ = o0.Args[1]
19967 s1 := o0.Args[0]
19968 if s1.Op != OpPPC64SLDconst {
19969 break
19970 }
19971 if s1.AuxInt != 48 {
19972 break
19973 }
19974 x1 := s1.Args[0]
19975 if x1.Op != OpPPC64MOVBZload {
19976 break
19977 }
19978 i1 := x1.AuxInt
19979 s := x1.Aux
19980 mem := x1.Args[1]
19981 p := x1.Args[0]
19982 o1 := o0.Args[1]
19983 if o1.Op != OpPPC64OR {
19984 break
19985 }
19986 if o1.Type != t {
19987 break
19988 }
19989 _ = o1.Args[1]
19990 o2 := o1.Args[0]
19991 if o2.Op != OpPPC64OR {
19992 break
19993 }
19994 if o2.Type != t {
19995 break
19996 }
19997 _ = o2.Args[1]
19998 x4 := o2.Args[0]
19999 if x4.Op != OpPPC64MOVWBRload {
20000 break
20001 }
20002 if x4.Type != t {
20003 break
20004 }
20005 _ = x4.Args[1]
20006 x4_0 := x4.Args[0]
20007 if x4_0.Op != OpPPC64MOVDaddr {
20008 break
20009 }
20010 if x4_0.Type != typ.Uintptr {
20011 break
20012 }
20013 i4 := x4_0.AuxInt
20014 if p != x4_0.Args[0] {
20015 break
20016 }
20017 if mem != x4.Args[1] {
20018 break
20019 }
20020 s3 := o2.Args[1]
20021 if s3.Op != OpPPC64SLDconst {
20022 break
20023 }
20024 if s3.AuxInt != 32 {
20025 break
20026 }
20027 x3 := s3.Args[0]
20028 if x3.Op != OpPPC64MOVBZload {
20029 break
20030 }
20031 i3 := x3.AuxInt
20032 if x3.Aux != s {
20033 break
20034 }
20035 _ = x3.Args[1]
20036 if p != x3.Args[0] {
20037 break
20038 }
20039 if mem != x3.Args[1] {
20040 break
20041 }
20042 s2 := o1.Args[1]
20043 if s2.Op != OpPPC64SLDconst {
20044 break
20045 }
20046 if s2.AuxInt != 40 {
20047 break
20048 }
20049 x2 := s2.Args[0]
20050 if x2.Op != OpPPC64MOVBZload {
20051 break
20052 }
20053 i2 := x2.AuxInt
20054 if x2.Aux != s {
20055 break
20056 }
20057 _ = x2.Args[1]
20058 if p != x2.Args[0] {
20059 break
20060 }
20061 if mem != x2.Args[1] {
20062 break
20063 }
20064 s0 := v.Args[1]
20065 if s0.Op != OpPPC64SLDconst {
20066 break
20067 }
20068 if s0.AuxInt != 56 {
20069 break
20070 }
20071 x0 := s0.Args[0]
20072 if x0.Op != OpPPC64MOVBZload {
20073 break
20074 }
20075 i0 := x0.AuxInt
20076 if x0.Aux != s {
20077 break
20078 }
20079 _ = x0.Args[1]
20080 if p != x0.Args[0] {
20081 break
20082 }
20083 if mem != x0.Args[1] {
20084 break
20085 }
20086 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
20087 break
20088 }
20089 b = mergePoint(b, x0, x1, x2, x3, x4)
20090 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
20091 v.reset(OpCopy)
20092 v.AddArg(v0)
20093 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20094 v1.AuxInt = i0
20095 v1.Aux = s
20096 v1.AddArg(p)
20097 v0.AddArg(v1)
20098 v0.AddArg(mem)
20099 return true
20100 }
20101
20102
20103
20104 for {
20105 t := v.Type
20106 _ = v.Args[1]
20107 o0 := v.Args[0]
20108 if o0.Op != OpPPC64OR {
20109 break
20110 }
20111 if o0.Type != t {
20112 break
20113 }
20114 _ = o0.Args[1]
20115 o1 := o0.Args[0]
20116 if o1.Op != OpPPC64OR {
20117 break
20118 }
20119 if o1.Type != t {
20120 break
20121 }
20122 _ = o1.Args[1]
20123 s2 := o1.Args[0]
20124 if s2.Op != OpPPC64SLDconst {
20125 break
20126 }
20127 if s2.AuxInt != 40 {
20128 break
20129 }
20130 x2 := s2.Args[0]
20131 if x2.Op != OpPPC64MOVBZload {
20132 break
20133 }
20134 i2 := x2.AuxInt
20135 s := x2.Aux
20136 mem := x2.Args[1]
20137 p := x2.Args[0]
20138 o2 := o1.Args[1]
20139 if o2.Op != OpPPC64OR {
20140 break
20141 }
20142 if o2.Type != t {
20143 break
20144 }
20145 _ = o2.Args[1]
20146 s3 := o2.Args[0]
20147 if s3.Op != OpPPC64SLDconst {
20148 break
20149 }
20150 if s3.AuxInt != 32 {
20151 break
20152 }
20153 x3 := s3.Args[0]
20154 if x3.Op != OpPPC64MOVBZload {
20155 break
20156 }
20157 i3 := x3.AuxInt
20158 if x3.Aux != s {
20159 break
20160 }
20161 _ = x3.Args[1]
20162 if p != x3.Args[0] {
20163 break
20164 }
20165 if mem != x3.Args[1] {
20166 break
20167 }
20168 x4 := o2.Args[1]
20169 if x4.Op != OpPPC64MOVWBRload {
20170 break
20171 }
20172 if x4.Type != t {
20173 break
20174 }
20175 _ = x4.Args[1]
20176 x4_0 := x4.Args[0]
20177 if x4_0.Op != OpPPC64MOVDaddr {
20178 break
20179 }
20180 if x4_0.Type != typ.Uintptr {
20181 break
20182 }
20183 i4 := x4_0.AuxInt
20184 if p != x4_0.Args[0] {
20185 break
20186 }
20187 if mem != x4.Args[1] {
20188 break
20189 }
20190 s1 := o0.Args[1]
20191 if s1.Op != OpPPC64SLDconst {
20192 break
20193 }
20194 if s1.AuxInt != 48 {
20195 break
20196 }
20197 x1 := s1.Args[0]
20198 if x1.Op != OpPPC64MOVBZload {
20199 break
20200 }
20201 i1 := x1.AuxInt
20202 if x1.Aux != s {
20203 break
20204 }
20205 _ = x1.Args[1]
20206 if p != x1.Args[0] {
20207 break
20208 }
20209 if mem != x1.Args[1] {
20210 break
20211 }
20212 s0 := v.Args[1]
20213 if s0.Op != OpPPC64SLDconst {
20214 break
20215 }
20216 if s0.AuxInt != 56 {
20217 break
20218 }
20219 x0 := s0.Args[0]
20220 if x0.Op != OpPPC64MOVBZload {
20221 break
20222 }
20223 i0 := x0.AuxInt
20224 if x0.Aux != s {
20225 break
20226 }
20227 _ = x0.Args[1]
20228 if p != x0.Args[0] {
20229 break
20230 }
20231 if mem != x0.Args[1] {
20232 break
20233 }
20234 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
20235 break
20236 }
20237 b = mergePoint(b, x0, x1, x2, x3, x4)
20238 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
20239 v.reset(OpCopy)
20240 v.AddArg(v0)
20241 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20242 v1.AuxInt = i0
20243 v1.Aux = s
20244 v1.AddArg(p)
20245 v0.AddArg(v1)
20246 v0.AddArg(mem)
20247 return true
20248 }
20249
20250
20251
20252 for {
20253 t := v.Type
20254 _ = v.Args[1]
20255 o0 := v.Args[0]
20256 if o0.Op != OpPPC64OR {
20257 break
20258 }
20259 if o0.Type != t {
20260 break
20261 }
20262 _ = o0.Args[1]
20263 o1 := o0.Args[0]
20264 if o1.Op != OpPPC64OR {
20265 break
20266 }
20267 if o1.Type != t {
20268 break
20269 }
20270 _ = o1.Args[1]
20271 s2 := o1.Args[0]
20272 if s2.Op != OpPPC64SLDconst {
20273 break
20274 }
20275 if s2.AuxInt != 40 {
20276 break
20277 }
20278 x2 := s2.Args[0]
20279 if x2.Op != OpPPC64MOVBZload {
20280 break
20281 }
20282 i2 := x2.AuxInt
20283 s := x2.Aux
20284 mem := x2.Args[1]
20285 p := x2.Args[0]
20286 o2 := o1.Args[1]
20287 if o2.Op != OpPPC64OR {
20288 break
20289 }
20290 if o2.Type != t {
20291 break
20292 }
20293 _ = o2.Args[1]
20294 x4 := o2.Args[0]
20295 if x4.Op != OpPPC64MOVWBRload {
20296 break
20297 }
20298 if x4.Type != t {
20299 break
20300 }
20301 _ = x4.Args[1]
20302 x4_0 := x4.Args[0]
20303 if x4_0.Op != OpPPC64MOVDaddr {
20304 break
20305 }
20306 if x4_0.Type != typ.Uintptr {
20307 break
20308 }
20309 i4 := x4_0.AuxInt
20310 if p != x4_0.Args[0] {
20311 break
20312 }
20313 if mem != x4.Args[1] {
20314 break
20315 }
20316 s3 := o2.Args[1]
20317 if s3.Op != OpPPC64SLDconst {
20318 break
20319 }
20320 if s3.AuxInt != 32 {
20321 break
20322 }
20323 x3 := s3.Args[0]
20324 if x3.Op != OpPPC64MOVBZload {
20325 break
20326 }
20327 i3 := x3.AuxInt
20328 if x3.Aux != s {
20329 break
20330 }
20331 _ = x3.Args[1]
20332 if p != x3.Args[0] {
20333 break
20334 }
20335 if mem != x3.Args[1] {
20336 break
20337 }
20338 s1 := o0.Args[1]
20339 if s1.Op != OpPPC64SLDconst {
20340 break
20341 }
20342 if s1.AuxInt != 48 {
20343 break
20344 }
20345 x1 := s1.Args[0]
20346 if x1.Op != OpPPC64MOVBZload {
20347 break
20348 }
20349 i1 := x1.AuxInt
20350 if x1.Aux != s {
20351 break
20352 }
20353 _ = x1.Args[1]
20354 if p != x1.Args[0] {
20355 break
20356 }
20357 if mem != x1.Args[1] {
20358 break
20359 }
20360 s0 := v.Args[1]
20361 if s0.Op != OpPPC64SLDconst {
20362 break
20363 }
20364 if s0.AuxInt != 56 {
20365 break
20366 }
20367 x0 := s0.Args[0]
20368 if x0.Op != OpPPC64MOVBZload {
20369 break
20370 }
20371 i0 := x0.AuxInt
20372 if x0.Aux != s {
20373 break
20374 }
20375 _ = x0.Args[1]
20376 if p != x0.Args[0] {
20377 break
20378 }
20379 if mem != x0.Args[1] {
20380 break
20381 }
20382 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
20383 break
20384 }
20385 b = mergePoint(b, x0, x1, x2, x3, x4)
20386 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
20387 v.reset(OpCopy)
20388 v.AddArg(v0)
20389 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20390 v1.AuxInt = i0
20391 v1.Aux = s
20392 v1.AddArg(p)
20393 v0.AddArg(v1)
20394 v0.AddArg(mem)
20395 return true
20396 }
20397
20398
20399
20400 for {
20401 t := v.Type
20402 _ = v.Args[1]
20403 o0 := v.Args[0]
20404 if o0.Op != OpPPC64OR {
20405 break
20406 }
20407 if o0.Type != t {
20408 break
20409 }
20410 _ = o0.Args[1]
20411 o1 := o0.Args[0]
20412 if o1.Op != OpPPC64OR {
20413 break
20414 }
20415 if o1.Type != t {
20416 break
20417 }
20418 _ = o1.Args[1]
20419 o2 := o1.Args[0]
20420 if o2.Op != OpPPC64OR {
20421 break
20422 }
20423 if o2.Type != t {
20424 break
20425 }
20426 _ = o2.Args[1]
20427 s3 := o2.Args[0]
20428 if s3.Op != OpPPC64SLDconst {
20429 break
20430 }
20431 if s3.AuxInt != 32 {
20432 break
20433 }
20434 x3 := s3.Args[0]
20435 if x3.Op != OpPPC64MOVBZload {
20436 break
20437 }
20438 i3 := x3.AuxInt
20439 s := x3.Aux
20440 mem := x3.Args[1]
20441 p := x3.Args[0]
20442 x4 := o2.Args[1]
20443 if x4.Op != OpPPC64MOVWBRload {
20444 break
20445 }
20446 if x4.Type != t {
20447 break
20448 }
20449 _ = x4.Args[1]
20450 x4_0 := x4.Args[0]
20451 if x4_0.Op != OpPPC64MOVDaddr {
20452 break
20453 }
20454 if x4_0.Type != typ.Uintptr {
20455 break
20456 }
20457 i4 := x4_0.AuxInt
20458 if p != x4_0.Args[0] {
20459 break
20460 }
20461 if mem != x4.Args[1] {
20462 break
20463 }
20464 s2 := o1.Args[1]
20465 if s2.Op != OpPPC64SLDconst {
20466 break
20467 }
20468 if s2.AuxInt != 40 {
20469 break
20470 }
20471 x2 := s2.Args[0]
20472 if x2.Op != OpPPC64MOVBZload {
20473 break
20474 }
20475 i2 := x2.AuxInt
20476 if x2.Aux != s {
20477 break
20478 }
20479 _ = x2.Args[1]
20480 if p != x2.Args[0] {
20481 break
20482 }
20483 if mem != x2.Args[1] {
20484 break
20485 }
20486 s1 := o0.Args[1]
20487 if s1.Op != OpPPC64SLDconst {
20488 break
20489 }
20490 if s1.AuxInt != 48 {
20491 break
20492 }
20493 x1 := s1.Args[0]
20494 if x1.Op != OpPPC64MOVBZload {
20495 break
20496 }
20497 i1 := x1.AuxInt
20498 if x1.Aux != s {
20499 break
20500 }
20501 _ = x1.Args[1]
20502 if p != x1.Args[0] {
20503 break
20504 }
20505 if mem != x1.Args[1] {
20506 break
20507 }
20508 s0 := v.Args[1]
20509 if s0.Op != OpPPC64SLDconst {
20510 break
20511 }
20512 if s0.AuxInt != 56 {
20513 break
20514 }
20515 x0 := s0.Args[0]
20516 if x0.Op != OpPPC64MOVBZload {
20517 break
20518 }
20519 i0 := x0.AuxInt
20520 if x0.Aux != s {
20521 break
20522 }
20523 _ = x0.Args[1]
20524 if p != x0.Args[0] {
20525 break
20526 }
20527 if mem != x0.Args[1] {
20528 break
20529 }
20530 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
20531 break
20532 }
20533 b = mergePoint(b, x0, x1, x2, x3, x4)
20534 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
20535 v.reset(OpCopy)
20536 v.AddArg(v0)
20537 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20538 v1.AuxInt = i0
20539 v1.Aux = s
20540 v1.AddArg(p)
20541 v0.AddArg(v1)
20542 v0.AddArg(mem)
20543 return true
20544 }
20545
20546
20547
20548 for {
20549 t := v.Type
20550 _ = v.Args[1]
20551 o0 := v.Args[0]
20552 if o0.Op != OpPPC64OR {
20553 break
20554 }
20555 if o0.Type != t {
20556 break
20557 }
20558 _ = o0.Args[1]
20559 o1 := o0.Args[0]
20560 if o1.Op != OpPPC64OR {
20561 break
20562 }
20563 if o1.Type != t {
20564 break
20565 }
20566 _ = o1.Args[1]
20567 o2 := o1.Args[0]
20568 if o2.Op != OpPPC64OR {
20569 break
20570 }
20571 if o2.Type != t {
20572 break
20573 }
20574 _ = o2.Args[1]
20575 x4 := o2.Args[0]
20576 if x4.Op != OpPPC64MOVWBRload {
20577 break
20578 }
20579 if x4.Type != t {
20580 break
20581 }
20582 mem := x4.Args[1]
20583 x4_0 := x4.Args[0]
20584 if x4_0.Op != OpPPC64MOVDaddr {
20585 break
20586 }
20587 if x4_0.Type != typ.Uintptr {
20588 break
20589 }
20590 i4 := x4_0.AuxInt
20591 p := x4_0.Args[0]
20592 s3 := o2.Args[1]
20593 if s3.Op != OpPPC64SLDconst {
20594 break
20595 }
20596 if s3.AuxInt != 32 {
20597 break
20598 }
20599 x3 := s3.Args[0]
20600 if x3.Op != OpPPC64MOVBZload {
20601 break
20602 }
20603 i3 := x3.AuxInt
20604 s := x3.Aux
20605 _ = x3.Args[1]
20606 if p != x3.Args[0] {
20607 break
20608 }
20609 if mem != x3.Args[1] {
20610 break
20611 }
20612 s2 := o1.Args[1]
20613 if s2.Op != OpPPC64SLDconst {
20614 break
20615 }
20616 if s2.AuxInt != 40 {
20617 break
20618 }
20619 x2 := s2.Args[0]
20620 if x2.Op != OpPPC64MOVBZload {
20621 break
20622 }
20623 i2 := x2.AuxInt
20624 if x2.Aux != s {
20625 break
20626 }
20627 _ = x2.Args[1]
20628 if p != x2.Args[0] {
20629 break
20630 }
20631 if mem != x2.Args[1] {
20632 break
20633 }
20634 s1 := o0.Args[1]
20635 if s1.Op != OpPPC64SLDconst {
20636 break
20637 }
20638 if s1.AuxInt != 48 {
20639 break
20640 }
20641 x1 := s1.Args[0]
20642 if x1.Op != OpPPC64MOVBZload {
20643 break
20644 }
20645 i1 := x1.AuxInt
20646 if x1.Aux != s {
20647 break
20648 }
20649 _ = x1.Args[1]
20650 if p != x1.Args[0] {
20651 break
20652 }
20653 if mem != x1.Args[1] {
20654 break
20655 }
20656 s0 := v.Args[1]
20657 if s0.Op != OpPPC64SLDconst {
20658 break
20659 }
20660 if s0.AuxInt != 56 {
20661 break
20662 }
20663 x0 := s0.Args[0]
20664 if x0.Op != OpPPC64MOVBZload {
20665 break
20666 }
20667 i0 := x0.AuxInt
20668 if x0.Aux != s {
20669 break
20670 }
20671 _ = x0.Args[1]
20672 if p != x0.Args[0] {
20673 break
20674 }
20675 if mem != x0.Args[1] {
20676 break
20677 }
20678 if !(!config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3)) {
20679 break
20680 }
20681 b = mergePoint(b, x0, x1, x2, x3, x4)
20682 v0 := b.NewValue0(x0.Pos, OpPPC64MOVDBRload, t)
20683 v.reset(OpCopy)
20684 v.AddArg(v0)
20685 v1 := b.NewValue0(x0.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20686 v1.AuxInt = i0
20687 v1.Aux = s
20688 v1.AddArg(p)
20689 v0.AddArg(v1)
20690 v0.AddArg(mem)
20691 return true
20692 }
20693
20694
20695
20696 for {
20697 t := v.Type
20698 _ = v.Args[1]
20699 x7 := v.Args[0]
20700 if x7.Op != OpPPC64MOVBZload {
20701 break
20702 }
20703 i7 := x7.AuxInt
20704 s := x7.Aux
20705 mem := x7.Args[1]
20706 p := x7.Args[0]
20707 o5 := v.Args[1]
20708 if o5.Op != OpPPC64OR {
20709 break
20710 }
20711 if o5.Type != t {
20712 break
20713 }
20714 _ = o5.Args[1]
20715 s6 := o5.Args[0]
20716 if s6.Op != OpPPC64SLDconst {
20717 break
20718 }
20719 if s6.AuxInt != 8 {
20720 break
20721 }
20722 x6 := s6.Args[0]
20723 if x6.Op != OpPPC64MOVBZload {
20724 break
20725 }
20726 i6 := x6.AuxInt
20727 if x6.Aux != s {
20728 break
20729 }
20730 _ = x6.Args[1]
20731 if p != x6.Args[0] {
20732 break
20733 }
20734 if mem != x6.Args[1] {
20735 break
20736 }
20737 o4 := o5.Args[1]
20738 if o4.Op != OpPPC64OR {
20739 break
20740 }
20741 if o4.Type != t {
20742 break
20743 }
20744 _ = o4.Args[1]
20745 s5 := o4.Args[0]
20746 if s5.Op != OpPPC64SLDconst {
20747 break
20748 }
20749 if s5.AuxInt != 16 {
20750 break
20751 }
20752 x5 := s5.Args[0]
20753 if x5.Op != OpPPC64MOVBZload {
20754 break
20755 }
20756 i5 := x5.AuxInt
20757 if x5.Aux != s {
20758 break
20759 }
20760 _ = x5.Args[1]
20761 if p != x5.Args[0] {
20762 break
20763 }
20764 if mem != x5.Args[1] {
20765 break
20766 }
20767 o3 := o4.Args[1]
20768 if o3.Op != OpPPC64OR {
20769 break
20770 }
20771 if o3.Type != t {
20772 break
20773 }
20774 _ = o3.Args[1]
20775 s4 := o3.Args[0]
20776 if s4.Op != OpPPC64SLDconst {
20777 break
20778 }
20779 if s4.AuxInt != 24 {
20780 break
20781 }
20782 x4 := s4.Args[0]
20783 if x4.Op != OpPPC64MOVBZload {
20784 break
20785 }
20786 i4 := x4.AuxInt
20787 if x4.Aux != s {
20788 break
20789 }
20790 _ = x4.Args[1]
20791 if p != x4.Args[0] {
20792 break
20793 }
20794 if mem != x4.Args[1] {
20795 break
20796 }
20797 s0 := o3.Args[1]
20798 if s0.Op != OpPPC64SLWconst {
20799 break
20800 }
20801 if s0.AuxInt != 32 {
20802 break
20803 }
20804 x3 := s0.Args[0]
20805 if x3.Op != OpPPC64MOVWBRload {
20806 break
20807 }
20808 if x3.Type != t {
20809 break
20810 }
20811 _ = x3.Args[1]
20812 x3_0 := x3.Args[0]
20813 if x3_0.Op != OpPPC64MOVDaddr {
20814 break
20815 }
20816 if x3_0.Type != typ.Uintptr {
20817 break
20818 }
20819 i0 := x3_0.AuxInt
20820 if x3_0.Aux != s {
20821 break
20822 }
20823 if p != x3_0.Args[0] {
20824 break
20825 }
20826 if mem != x3.Args[1] {
20827 break
20828 }
20829 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
20830 break
20831 }
20832 b = mergePoint(b, x3, x4, x5, x6, x7)
20833 v0 := b.NewValue0(x3.Pos, OpPPC64MOVDBRload, t)
20834 v.reset(OpCopy)
20835 v.AddArg(v0)
20836 v1 := b.NewValue0(x3.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20837 v1.AuxInt = i0
20838 v1.Aux = s
20839 v1.AddArg(p)
20840 v0.AddArg(v1)
20841 v0.AddArg(mem)
20842 return true
20843 }
20844
20845
20846
20847 for {
20848 t := v.Type
20849 _ = v.Args[1]
20850 x7 := v.Args[0]
20851 if x7.Op != OpPPC64MOVBZload {
20852 break
20853 }
20854 i7 := x7.AuxInt
20855 s := x7.Aux
20856 mem := x7.Args[1]
20857 p := x7.Args[0]
20858 o5 := v.Args[1]
20859 if o5.Op != OpPPC64OR {
20860 break
20861 }
20862 if o5.Type != t {
20863 break
20864 }
20865 _ = o5.Args[1]
20866 s6 := o5.Args[0]
20867 if s6.Op != OpPPC64SLDconst {
20868 break
20869 }
20870 if s6.AuxInt != 8 {
20871 break
20872 }
20873 x6 := s6.Args[0]
20874 if x6.Op != OpPPC64MOVBZload {
20875 break
20876 }
20877 i6 := x6.AuxInt
20878 if x6.Aux != s {
20879 break
20880 }
20881 _ = x6.Args[1]
20882 if p != x6.Args[0] {
20883 break
20884 }
20885 if mem != x6.Args[1] {
20886 break
20887 }
20888 o4 := o5.Args[1]
20889 if o4.Op != OpPPC64OR {
20890 break
20891 }
20892 if o4.Type != t {
20893 break
20894 }
20895 _ = o4.Args[1]
20896 s5 := o4.Args[0]
20897 if s5.Op != OpPPC64SLDconst {
20898 break
20899 }
20900 if s5.AuxInt != 16 {
20901 break
20902 }
20903 x5 := s5.Args[0]
20904 if x5.Op != OpPPC64MOVBZload {
20905 break
20906 }
20907 i5 := x5.AuxInt
20908 if x5.Aux != s {
20909 break
20910 }
20911 _ = x5.Args[1]
20912 if p != x5.Args[0] {
20913 break
20914 }
20915 if mem != x5.Args[1] {
20916 break
20917 }
20918 o3 := o4.Args[1]
20919 if o3.Op != OpPPC64OR {
20920 break
20921 }
20922 if o3.Type != t {
20923 break
20924 }
20925 _ = o3.Args[1]
20926 s0 := o3.Args[0]
20927 if s0.Op != OpPPC64SLWconst {
20928 break
20929 }
20930 if s0.AuxInt != 32 {
20931 break
20932 }
20933 x3 := s0.Args[0]
20934 if x3.Op != OpPPC64MOVWBRload {
20935 break
20936 }
20937 if x3.Type != t {
20938 break
20939 }
20940 _ = x3.Args[1]
20941 x3_0 := x3.Args[0]
20942 if x3_0.Op != OpPPC64MOVDaddr {
20943 break
20944 }
20945 if x3_0.Type != typ.Uintptr {
20946 break
20947 }
20948 i0 := x3_0.AuxInt
20949 if x3_0.Aux != s {
20950 break
20951 }
20952 if p != x3_0.Args[0] {
20953 break
20954 }
20955 if mem != x3.Args[1] {
20956 break
20957 }
20958 s4 := o3.Args[1]
20959 if s4.Op != OpPPC64SLDconst {
20960 break
20961 }
20962 if s4.AuxInt != 24 {
20963 break
20964 }
20965 x4 := s4.Args[0]
20966 if x4.Op != OpPPC64MOVBZload {
20967 break
20968 }
20969 i4 := x4.AuxInt
20970 if x4.Aux != s {
20971 break
20972 }
20973 _ = x4.Args[1]
20974 if p != x4.Args[0] {
20975 break
20976 }
20977 if mem != x4.Args[1] {
20978 break
20979 }
20980 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
20981 break
20982 }
20983 b = mergePoint(b, x3, x4, x5, x6, x7)
20984 v0 := b.NewValue0(x4.Pos, OpPPC64MOVDBRload, t)
20985 v.reset(OpCopy)
20986 v.AddArg(v0)
20987 v1 := b.NewValue0(x4.Pos, OpPPC64MOVDaddr, typ.Uintptr)
20988 v1.AuxInt = i0
20989 v1.Aux = s
20990 v1.AddArg(p)
20991 v0.AddArg(v1)
20992 v0.AddArg(mem)
20993 return true
20994 }
20995 return false
20996 }
20997 func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool {
20998 b := v.Block
20999 config := b.Func.Config
21000 typ := &b.Func.Config.Types
21001
21002
21003
21004 for {
21005 t := v.Type
21006 _ = v.Args[1]
21007 x7 := v.Args[0]
21008 if x7.Op != OpPPC64MOVBZload {
21009 break
21010 }
21011 i7 := x7.AuxInt
21012 s := x7.Aux
21013 mem := x7.Args[1]
21014 p := x7.Args[0]
21015 o5 := v.Args[1]
21016 if o5.Op != OpPPC64OR {
21017 break
21018 }
21019 if o5.Type != t {
21020 break
21021 }
21022 _ = o5.Args[1]
21023 s6 := o5.Args[0]
21024 if s6.Op != OpPPC64SLDconst {
21025 break
21026 }
21027 if s6.AuxInt != 8 {
21028 break
21029 }
21030 x6 := s6.Args[0]
21031 if x6.Op != OpPPC64MOVBZload {
21032 break
21033 }
21034 i6 := x6.AuxInt
21035 if x6.Aux != s {
21036 break
21037 }
21038 _ = x6.Args[1]
21039 if p != x6.Args[0] {
21040 break
21041 }
21042 if mem != x6.Args[1] {
21043 break
21044 }
21045 o4 := o5.Args[1]
21046 if o4.Op != OpPPC64OR {
21047 break
21048 }
21049 if o4.Type != t {
21050 break
21051 }
21052 _ = o4.Args[1]
21053 o3 := o4.Args[0]
21054 if o3.Op != OpPPC64OR {
21055 break
21056 }
21057 if o3.Type != t {
21058 break
21059 }
21060 _ = o3.Args[1]
21061 s4 := o3.Args[0]
21062 if s4.Op != OpPPC64SLDconst {
21063 break
21064 }
21065 if s4.AuxInt != 24 {
21066 break
21067 }
21068 x4 := s4.Args[0]
21069 if x4.Op != OpPPC64MOVBZload {
21070 break
21071 }
21072 i4 := x4.AuxInt
21073 if x4.Aux != s {
21074 break
21075 }
21076 _ = x4.Args[1]
21077 if p != x4.Args[0] {
21078 break
21079 }
21080 if mem != x4.Args[1] {
21081 break
21082 }
21083 s0 := o3.Args[1]
21084 if s0.Op != OpPPC64SLWconst {
21085 break
21086 }
21087 if s0.AuxInt != 32 {
21088 break
21089 }
21090 x3 := s0.Args[0]
21091 if x3.Op != OpPPC64MOVWBRload {
21092 break
21093 }
21094 if x3.Type != t {
21095 break
21096 }
21097 _ = x3.Args[1]
21098 x3_0 := x3.Args[0]
21099 if x3_0.Op != OpPPC64MOVDaddr {
21100 break
21101 }
21102 if x3_0.Type != typ.Uintptr {
21103 break
21104 }
21105 i0 := x3_0.AuxInt
21106 if x3_0.Aux != s {
21107 break
21108 }
21109 if p != x3_0.Args[0] {
21110 break
21111 }
21112 if mem != x3.Args[1] {
21113 break
21114 }
21115 s5 := o4.Args[1]
21116 if s5.Op != OpPPC64SLDconst {
21117 break
21118 }
21119 if s5.AuxInt != 16 {
21120 break
21121 }
21122 x5 := s5.Args[0]
21123 if x5.Op != OpPPC64MOVBZload {
21124 break
21125 }
21126 i5 := x5.AuxInt
21127 if x5.Aux != s {
21128 break
21129 }
21130 _ = x5.Args[1]
21131 if p != x5.Args[0] {
21132 break
21133 }
21134 if mem != x5.Args[1] {
21135 break
21136 }
21137 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21138 break
21139 }
21140 b = mergePoint(b, x3, x4, x5, x6, x7)
21141 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDBRload, t)
21142 v.reset(OpCopy)
21143 v.AddArg(v0)
21144 v1 := b.NewValue0(x5.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21145 v1.AuxInt = i0
21146 v1.Aux = s
21147 v1.AddArg(p)
21148 v0.AddArg(v1)
21149 v0.AddArg(mem)
21150 return true
21151 }
21152
21153
21154
21155 for {
21156 t := v.Type
21157 _ = v.Args[1]
21158 x7 := v.Args[0]
21159 if x7.Op != OpPPC64MOVBZload {
21160 break
21161 }
21162 i7 := x7.AuxInt
21163 s := x7.Aux
21164 mem := x7.Args[1]
21165 p := x7.Args[0]
21166 o5 := v.Args[1]
21167 if o5.Op != OpPPC64OR {
21168 break
21169 }
21170 if o5.Type != t {
21171 break
21172 }
21173 _ = o5.Args[1]
21174 s6 := o5.Args[0]
21175 if s6.Op != OpPPC64SLDconst {
21176 break
21177 }
21178 if s6.AuxInt != 8 {
21179 break
21180 }
21181 x6 := s6.Args[0]
21182 if x6.Op != OpPPC64MOVBZload {
21183 break
21184 }
21185 i6 := x6.AuxInt
21186 if x6.Aux != s {
21187 break
21188 }
21189 _ = x6.Args[1]
21190 if p != x6.Args[0] {
21191 break
21192 }
21193 if mem != x6.Args[1] {
21194 break
21195 }
21196 o4 := o5.Args[1]
21197 if o4.Op != OpPPC64OR {
21198 break
21199 }
21200 if o4.Type != t {
21201 break
21202 }
21203 _ = o4.Args[1]
21204 o3 := o4.Args[0]
21205 if o3.Op != OpPPC64OR {
21206 break
21207 }
21208 if o3.Type != t {
21209 break
21210 }
21211 _ = o3.Args[1]
21212 s0 := o3.Args[0]
21213 if s0.Op != OpPPC64SLWconst {
21214 break
21215 }
21216 if s0.AuxInt != 32 {
21217 break
21218 }
21219 x3 := s0.Args[0]
21220 if x3.Op != OpPPC64MOVWBRload {
21221 break
21222 }
21223 if x3.Type != t {
21224 break
21225 }
21226 _ = x3.Args[1]
21227 x3_0 := x3.Args[0]
21228 if x3_0.Op != OpPPC64MOVDaddr {
21229 break
21230 }
21231 if x3_0.Type != typ.Uintptr {
21232 break
21233 }
21234 i0 := x3_0.AuxInt
21235 if x3_0.Aux != s {
21236 break
21237 }
21238 if p != x3_0.Args[0] {
21239 break
21240 }
21241 if mem != x3.Args[1] {
21242 break
21243 }
21244 s4 := o3.Args[1]
21245 if s4.Op != OpPPC64SLDconst {
21246 break
21247 }
21248 if s4.AuxInt != 24 {
21249 break
21250 }
21251 x4 := s4.Args[0]
21252 if x4.Op != OpPPC64MOVBZload {
21253 break
21254 }
21255 i4 := x4.AuxInt
21256 if x4.Aux != s {
21257 break
21258 }
21259 _ = x4.Args[1]
21260 if p != x4.Args[0] {
21261 break
21262 }
21263 if mem != x4.Args[1] {
21264 break
21265 }
21266 s5 := o4.Args[1]
21267 if s5.Op != OpPPC64SLDconst {
21268 break
21269 }
21270 if s5.AuxInt != 16 {
21271 break
21272 }
21273 x5 := s5.Args[0]
21274 if x5.Op != OpPPC64MOVBZload {
21275 break
21276 }
21277 i5 := x5.AuxInt
21278 if x5.Aux != s {
21279 break
21280 }
21281 _ = x5.Args[1]
21282 if p != x5.Args[0] {
21283 break
21284 }
21285 if mem != x5.Args[1] {
21286 break
21287 }
21288 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21289 break
21290 }
21291 b = mergePoint(b, x3, x4, x5, x6, x7)
21292 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDBRload, t)
21293 v.reset(OpCopy)
21294 v.AddArg(v0)
21295 v1 := b.NewValue0(x5.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21296 v1.AuxInt = i0
21297 v1.Aux = s
21298 v1.AddArg(p)
21299 v0.AddArg(v1)
21300 v0.AddArg(mem)
21301 return true
21302 }
21303
21304
21305
21306 for {
21307 t := v.Type
21308 _ = v.Args[1]
21309 x7 := v.Args[0]
21310 if x7.Op != OpPPC64MOVBZload {
21311 break
21312 }
21313 i7 := x7.AuxInt
21314 s := x7.Aux
21315 mem := x7.Args[1]
21316 p := x7.Args[0]
21317 o5 := v.Args[1]
21318 if o5.Op != OpPPC64OR {
21319 break
21320 }
21321 if o5.Type != t {
21322 break
21323 }
21324 _ = o5.Args[1]
21325 o4 := o5.Args[0]
21326 if o4.Op != OpPPC64OR {
21327 break
21328 }
21329 if o4.Type != t {
21330 break
21331 }
21332 _ = o4.Args[1]
21333 s5 := o4.Args[0]
21334 if s5.Op != OpPPC64SLDconst {
21335 break
21336 }
21337 if s5.AuxInt != 16 {
21338 break
21339 }
21340 x5 := s5.Args[0]
21341 if x5.Op != OpPPC64MOVBZload {
21342 break
21343 }
21344 i5 := x5.AuxInt
21345 if x5.Aux != s {
21346 break
21347 }
21348 _ = x5.Args[1]
21349 if p != x5.Args[0] {
21350 break
21351 }
21352 if mem != x5.Args[1] {
21353 break
21354 }
21355 o3 := o4.Args[1]
21356 if o3.Op != OpPPC64OR {
21357 break
21358 }
21359 if o3.Type != t {
21360 break
21361 }
21362 _ = o3.Args[1]
21363 s4 := o3.Args[0]
21364 if s4.Op != OpPPC64SLDconst {
21365 break
21366 }
21367 if s4.AuxInt != 24 {
21368 break
21369 }
21370 x4 := s4.Args[0]
21371 if x4.Op != OpPPC64MOVBZload {
21372 break
21373 }
21374 i4 := x4.AuxInt
21375 if x4.Aux != s {
21376 break
21377 }
21378 _ = x4.Args[1]
21379 if p != x4.Args[0] {
21380 break
21381 }
21382 if mem != x4.Args[1] {
21383 break
21384 }
21385 s0 := o3.Args[1]
21386 if s0.Op != OpPPC64SLWconst {
21387 break
21388 }
21389 if s0.AuxInt != 32 {
21390 break
21391 }
21392 x3 := s0.Args[0]
21393 if x3.Op != OpPPC64MOVWBRload {
21394 break
21395 }
21396 if x3.Type != t {
21397 break
21398 }
21399 _ = x3.Args[1]
21400 x3_0 := x3.Args[0]
21401 if x3_0.Op != OpPPC64MOVDaddr {
21402 break
21403 }
21404 if x3_0.Type != typ.Uintptr {
21405 break
21406 }
21407 i0 := x3_0.AuxInt
21408 if x3_0.Aux != s {
21409 break
21410 }
21411 if p != x3_0.Args[0] {
21412 break
21413 }
21414 if mem != x3.Args[1] {
21415 break
21416 }
21417 s6 := o5.Args[1]
21418 if s6.Op != OpPPC64SLDconst {
21419 break
21420 }
21421 if s6.AuxInt != 8 {
21422 break
21423 }
21424 x6 := s6.Args[0]
21425 if x6.Op != OpPPC64MOVBZload {
21426 break
21427 }
21428 i6 := x6.AuxInt
21429 if x6.Aux != s {
21430 break
21431 }
21432 _ = x6.Args[1]
21433 if p != x6.Args[0] {
21434 break
21435 }
21436 if mem != x6.Args[1] {
21437 break
21438 }
21439 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21440 break
21441 }
21442 b = mergePoint(b, x3, x4, x5, x6, x7)
21443 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
21444 v.reset(OpCopy)
21445 v.AddArg(v0)
21446 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21447 v1.AuxInt = i0
21448 v1.Aux = s
21449 v1.AddArg(p)
21450 v0.AddArg(v1)
21451 v0.AddArg(mem)
21452 return true
21453 }
21454
21455
21456
21457 for {
21458 t := v.Type
21459 _ = v.Args[1]
21460 x7 := v.Args[0]
21461 if x7.Op != OpPPC64MOVBZload {
21462 break
21463 }
21464 i7 := x7.AuxInt
21465 s := x7.Aux
21466 mem := x7.Args[1]
21467 p := x7.Args[0]
21468 o5 := v.Args[1]
21469 if o5.Op != OpPPC64OR {
21470 break
21471 }
21472 if o5.Type != t {
21473 break
21474 }
21475 _ = o5.Args[1]
21476 o4 := o5.Args[0]
21477 if o4.Op != OpPPC64OR {
21478 break
21479 }
21480 if o4.Type != t {
21481 break
21482 }
21483 _ = o4.Args[1]
21484 s5 := o4.Args[0]
21485 if s5.Op != OpPPC64SLDconst {
21486 break
21487 }
21488 if s5.AuxInt != 16 {
21489 break
21490 }
21491 x5 := s5.Args[0]
21492 if x5.Op != OpPPC64MOVBZload {
21493 break
21494 }
21495 i5 := x5.AuxInt
21496 if x5.Aux != s {
21497 break
21498 }
21499 _ = x5.Args[1]
21500 if p != x5.Args[0] {
21501 break
21502 }
21503 if mem != x5.Args[1] {
21504 break
21505 }
21506 o3 := o4.Args[1]
21507 if o3.Op != OpPPC64OR {
21508 break
21509 }
21510 if o3.Type != t {
21511 break
21512 }
21513 _ = o3.Args[1]
21514 s0 := o3.Args[0]
21515 if s0.Op != OpPPC64SLWconst {
21516 break
21517 }
21518 if s0.AuxInt != 32 {
21519 break
21520 }
21521 x3 := s0.Args[0]
21522 if x3.Op != OpPPC64MOVWBRload {
21523 break
21524 }
21525 if x3.Type != t {
21526 break
21527 }
21528 _ = x3.Args[1]
21529 x3_0 := x3.Args[0]
21530 if x3_0.Op != OpPPC64MOVDaddr {
21531 break
21532 }
21533 if x3_0.Type != typ.Uintptr {
21534 break
21535 }
21536 i0 := x3_0.AuxInt
21537 if x3_0.Aux != s {
21538 break
21539 }
21540 if p != x3_0.Args[0] {
21541 break
21542 }
21543 if mem != x3.Args[1] {
21544 break
21545 }
21546 s4 := o3.Args[1]
21547 if s4.Op != OpPPC64SLDconst {
21548 break
21549 }
21550 if s4.AuxInt != 24 {
21551 break
21552 }
21553 x4 := s4.Args[0]
21554 if x4.Op != OpPPC64MOVBZload {
21555 break
21556 }
21557 i4 := x4.AuxInt
21558 if x4.Aux != s {
21559 break
21560 }
21561 _ = x4.Args[1]
21562 if p != x4.Args[0] {
21563 break
21564 }
21565 if mem != x4.Args[1] {
21566 break
21567 }
21568 s6 := o5.Args[1]
21569 if s6.Op != OpPPC64SLDconst {
21570 break
21571 }
21572 if s6.AuxInt != 8 {
21573 break
21574 }
21575 x6 := s6.Args[0]
21576 if x6.Op != OpPPC64MOVBZload {
21577 break
21578 }
21579 i6 := x6.AuxInt
21580 if x6.Aux != s {
21581 break
21582 }
21583 _ = x6.Args[1]
21584 if p != x6.Args[0] {
21585 break
21586 }
21587 if mem != x6.Args[1] {
21588 break
21589 }
21590 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21591 break
21592 }
21593 b = mergePoint(b, x3, x4, x5, x6, x7)
21594 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
21595 v.reset(OpCopy)
21596 v.AddArg(v0)
21597 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21598 v1.AuxInt = i0
21599 v1.Aux = s
21600 v1.AddArg(p)
21601 v0.AddArg(v1)
21602 v0.AddArg(mem)
21603 return true
21604 }
21605
21606
21607
21608 for {
21609 t := v.Type
21610 _ = v.Args[1]
21611 x7 := v.Args[0]
21612 if x7.Op != OpPPC64MOVBZload {
21613 break
21614 }
21615 i7 := x7.AuxInt
21616 s := x7.Aux
21617 mem := x7.Args[1]
21618 p := x7.Args[0]
21619 o5 := v.Args[1]
21620 if o5.Op != OpPPC64OR {
21621 break
21622 }
21623 if o5.Type != t {
21624 break
21625 }
21626 _ = o5.Args[1]
21627 o4 := o5.Args[0]
21628 if o4.Op != OpPPC64OR {
21629 break
21630 }
21631 if o4.Type != t {
21632 break
21633 }
21634 _ = o4.Args[1]
21635 o3 := o4.Args[0]
21636 if o3.Op != OpPPC64OR {
21637 break
21638 }
21639 if o3.Type != t {
21640 break
21641 }
21642 _ = o3.Args[1]
21643 s4 := o3.Args[0]
21644 if s4.Op != OpPPC64SLDconst {
21645 break
21646 }
21647 if s4.AuxInt != 24 {
21648 break
21649 }
21650 x4 := s4.Args[0]
21651 if x4.Op != OpPPC64MOVBZload {
21652 break
21653 }
21654 i4 := x4.AuxInt
21655 if x4.Aux != s {
21656 break
21657 }
21658 _ = x4.Args[1]
21659 if p != x4.Args[0] {
21660 break
21661 }
21662 if mem != x4.Args[1] {
21663 break
21664 }
21665 s0 := o3.Args[1]
21666 if s0.Op != OpPPC64SLWconst {
21667 break
21668 }
21669 if s0.AuxInt != 32 {
21670 break
21671 }
21672 x3 := s0.Args[0]
21673 if x3.Op != OpPPC64MOVWBRload {
21674 break
21675 }
21676 if x3.Type != t {
21677 break
21678 }
21679 _ = x3.Args[1]
21680 x3_0 := x3.Args[0]
21681 if x3_0.Op != OpPPC64MOVDaddr {
21682 break
21683 }
21684 if x3_0.Type != typ.Uintptr {
21685 break
21686 }
21687 i0 := x3_0.AuxInt
21688 if x3_0.Aux != s {
21689 break
21690 }
21691 if p != x3_0.Args[0] {
21692 break
21693 }
21694 if mem != x3.Args[1] {
21695 break
21696 }
21697 s5 := o4.Args[1]
21698 if s5.Op != OpPPC64SLDconst {
21699 break
21700 }
21701 if s5.AuxInt != 16 {
21702 break
21703 }
21704 x5 := s5.Args[0]
21705 if x5.Op != OpPPC64MOVBZload {
21706 break
21707 }
21708 i5 := x5.AuxInt
21709 if x5.Aux != s {
21710 break
21711 }
21712 _ = x5.Args[1]
21713 if p != x5.Args[0] {
21714 break
21715 }
21716 if mem != x5.Args[1] {
21717 break
21718 }
21719 s6 := o5.Args[1]
21720 if s6.Op != OpPPC64SLDconst {
21721 break
21722 }
21723 if s6.AuxInt != 8 {
21724 break
21725 }
21726 x6 := s6.Args[0]
21727 if x6.Op != OpPPC64MOVBZload {
21728 break
21729 }
21730 i6 := x6.AuxInt
21731 if x6.Aux != s {
21732 break
21733 }
21734 _ = x6.Args[1]
21735 if p != x6.Args[0] {
21736 break
21737 }
21738 if mem != x6.Args[1] {
21739 break
21740 }
21741 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21742 break
21743 }
21744 b = mergePoint(b, x3, x4, x5, x6, x7)
21745 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
21746 v.reset(OpCopy)
21747 v.AddArg(v0)
21748 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21749 v1.AuxInt = i0
21750 v1.Aux = s
21751 v1.AddArg(p)
21752 v0.AddArg(v1)
21753 v0.AddArg(mem)
21754 return true
21755 }
21756
21757
21758
21759 for {
21760 t := v.Type
21761 _ = v.Args[1]
21762 x7 := v.Args[0]
21763 if x7.Op != OpPPC64MOVBZload {
21764 break
21765 }
21766 i7 := x7.AuxInt
21767 s := x7.Aux
21768 mem := x7.Args[1]
21769 p := x7.Args[0]
21770 o5 := v.Args[1]
21771 if o5.Op != OpPPC64OR {
21772 break
21773 }
21774 if o5.Type != t {
21775 break
21776 }
21777 _ = o5.Args[1]
21778 o4 := o5.Args[0]
21779 if o4.Op != OpPPC64OR {
21780 break
21781 }
21782 if o4.Type != t {
21783 break
21784 }
21785 _ = o4.Args[1]
21786 o3 := o4.Args[0]
21787 if o3.Op != OpPPC64OR {
21788 break
21789 }
21790 if o3.Type != t {
21791 break
21792 }
21793 _ = o3.Args[1]
21794 s0 := o3.Args[0]
21795 if s0.Op != OpPPC64SLWconst {
21796 break
21797 }
21798 if s0.AuxInt != 32 {
21799 break
21800 }
21801 x3 := s0.Args[0]
21802 if x3.Op != OpPPC64MOVWBRload {
21803 break
21804 }
21805 if x3.Type != t {
21806 break
21807 }
21808 _ = x3.Args[1]
21809 x3_0 := x3.Args[0]
21810 if x3_0.Op != OpPPC64MOVDaddr {
21811 break
21812 }
21813 if x3_0.Type != typ.Uintptr {
21814 break
21815 }
21816 i0 := x3_0.AuxInt
21817 if x3_0.Aux != s {
21818 break
21819 }
21820 if p != x3_0.Args[0] {
21821 break
21822 }
21823 if mem != x3.Args[1] {
21824 break
21825 }
21826 s4 := o3.Args[1]
21827 if s4.Op != OpPPC64SLDconst {
21828 break
21829 }
21830 if s4.AuxInt != 24 {
21831 break
21832 }
21833 x4 := s4.Args[0]
21834 if x4.Op != OpPPC64MOVBZload {
21835 break
21836 }
21837 i4 := x4.AuxInt
21838 if x4.Aux != s {
21839 break
21840 }
21841 _ = x4.Args[1]
21842 if p != x4.Args[0] {
21843 break
21844 }
21845 if mem != x4.Args[1] {
21846 break
21847 }
21848 s5 := o4.Args[1]
21849 if s5.Op != OpPPC64SLDconst {
21850 break
21851 }
21852 if s5.AuxInt != 16 {
21853 break
21854 }
21855 x5 := s5.Args[0]
21856 if x5.Op != OpPPC64MOVBZload {
21857 break
21858 }
21859 i5 := x5.AuxInt
21860 if x5.Aux != s {
21861 break
21862 }
21863 _ = x5.Args[1]
21864 if p != x5.Args[0] {
21865 break
21866 }
21867 if mem != x5.Args[1] {
21868 break
21869 }
21870 s6 := o5.Args[1]
21871 if s6.Op != OpPPC64SLDconst {
21872 break
21873 }
21874 if s6.AuxInt != 8 {
21875 break
21876 }
21877 x6 := s6.Args[0]
21878 if x6.Op != OpPPC64MOVBZload {
21879 break
21880 }
21881 i6 := x6.AuxInt
21882 if x6.Aux != s {
21883 break
21884 }
21885 _ = x6.Args[1]
21886 if p != x6.Args[0] {
21887 break
21888 }
21889 if mem != x6.Args[1] {
21890 break
21891 }
21892 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
21893 break
21894 }
21895 b = mergePoint(b, x3, x4, x5, x6, x7)
21896 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
21897 v.reset(OpCopy)
21898 v.AddArg(v0)
21899 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
21900 v1.AuxInt = i0
21901 v1.Aux = s
21902 v1.AddArg(p)
21903 v0.AddArg(v1)
21904 v0.AddArg(mem)
21905 return true
21906 }
21907
21908
21909
21910 for {
21911 t := v.Type
21912 _ = v.Args[1]
21913 o5 := v.Args[0]
21914 if o5.Op != OpPPC64OR {
21915 break
21916 }
21917 if o5.Type != t {
21918 break
21919 }
21920 _ = o5.Args[1]
21921 s6 := o5.Args[0]
21922 if s6.Op != OpPPC64SLDconst {
21923 break
21924 }
21925 if s6.AuxInt != 8 {
21926 break
21927 }
21928 x6 := s6.Args[0]
21929 if x6.Op != OpPPC64MOVBZload {
21930 break
21931 }
21932 i6 := x6.AuxInt
21933 s := x6.Aux
21934 mem := x6.Args[1]
21935 p := x6.Args[0]
21936 o4 := o5.Args[1]
21937 if o4.Op != OpPPC64OR {
21938 break
21939 }
21940 if o4.Type != t {
21941 break
21942 }
21943 _ = o4.Args[1]
21944 s5 := o4.Args[0]
21945 if s5.Op != OpPPC64SLDconst {
21946 break
21947 }
21948 if s5.AuxInt != 16 {
21949 break
21950 }
21951 x5 := s5.Args[0]
21952 if x5.Op != OpPPC64MOVBZload {
21953 break
21954 }
21955 i5 := x5.AuxInt
21956 if x5.Aux != s {
21957 break
21958 }
21959 _ = x5.Args[1]
21960 if p != x5.Args[0] {
21961 break
21962 }
21963 if mem != x5.Args[1] {
21964 break
21965 }
21966 o3 := o4.Args[1]
21967 if o3.Op != OpPPC64OR {
21968 break
21969 }
21970 if o3.Type != t {
21971 break
21972 }
21973 _ = o3.Args[1]
21974 s4 := o3.Args[0]
21975 if s4.Op != OpPPC64SLDconst {
21976 break
21977 }
21978 if s4.AuxInt != 24 {
21979 break
21980 }
21981 x4 := s4.Args[0]
21982 if x4.Op != OpPPC64MOVBZload {
21983 break
21984 }
21985 i4 := x4.AuxInt
21986 if x4.Aux != s {
21987 break
21988 }
21989 _ = x4.Args[1]
21990 if p != x4.Args[0] {
21991 break
21992 }
21993 if mem != x4.Args[1] {
21994 break
21995 }
21996 s0 := o3.Args[1]
21997 if s0.Op != OpPPC64SLWconst {
21998 break
21999 }
22000 if s0.AuxInt != 32 {
22001 break
22002 }
22003 x3 := s0.Args[0]
22004 if x3.Op != OpPPC64MOVWBRload {
22005 break
22006 }
22007 if x3.Type != t {
22008 break
22009 }
22010 _ = x3.Args[1]
22011 x3_0 := x3.Args[0]
22012 if x3_0.Op != OpPPC64MOVDaddr {
22013 break
22014 }
22015 if x3_0.Type != typ.Uintptr {
22016 break
22017 }
22018 i0 := x3_0.AuxInt
22019 if x3_0.Aux != s {
22020 break
22021 }
22022 if p != x3_0.Args[0] {
22023 break
22024 }
22025 if mem != x3.Args[1] {
22026 break
22027 }
22028 x7 := v.Args[1]
22029 if x7.Op != OpPPC64MOVBZload {
22030 break
22031 }
22032 i7 := x7.AuxInt
22033 if x7.Aux != s {
22034 break
22035 }
22036 _ = x7.Args[1]
22037 if p != x7.Args[0] {
22038 break
22039 }
22040 if mem != x7.Args[1] {
22041 break
22042 }
22043 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22044 break
22045 }
22046 b = mergePoint(b, x3, x4, x5, x6, x7)
22047 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22048 v.reset(OpCopy)
22049 v.AddArg(v0)
22050 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22051 v1.AuxInt = i0
22052 v1.Aux = s
22053 v1.AddArg(p)
22054 v0.AddArg(v1)
22055 v0.AddArg(mem)
22056 return true
22057 }
22058
22059
22060
22061 for {
22062 t := v.Type
22063 _ = v.Args[1]
22064 o5 := v.Args[0]
22065 if o5.Op != OpPPC64OR {
22066 break
22067 }
22068 if o5.Type != t {
22069 break
22070 }
22071 _ = o5.Args[1]
22072 s6 := o5.Args[0]
22073 if s6.Op != OpPPC64SLDconst {
22074 break
22075 }
22076 if s6.AuxInt != 8 {
22077 break
22078 }
22079 x6 := s6.Args[0]
22080 if x6.Op != OpPPC64MOVBZload {
22081 break
22082 }
22083 i6 := x6.AuxInt
22084 s := x6.Aux
22085 mem := x6.Args[1]
22086 p := x6.Args[0]
22087 o4 := o5.Args[1]
22088 if o4.Op != OpPPC64OR {
22089 break
22090 }
22091 if o4.Type != t {
22092 break
22093 }
22094 _ = o4.Args[1]
22095 s5 := o4.Args[0]
22096 if s5.Op != OpPPC64SLDconst {
22097 break
22098 }
22099 if s5.AuxInt != 16 {
22100 break
22101 }
22102 x5 := s5.Args[0]
22103 if x5.Op != OpPPC64MOVBZload {
22104 break
22105 }
22106 i5 := x5.AuxInt
22107 if x5.Aux != s {
22108 break
22109 }
22110 _ = x5.Args[1]
22111 if p != x5.Args[0] {
22112 break
22113 }
22114 if mem != x5.Args[1] {
22115 break
22116 }
22117 o3 := o4.Args[1]
22118 if o3.Op != OpPPC64OR {
22119 break
22120 }
22121 if o3.Type != t {
22122 break
22123 }
22124 _ = o3.Args[1]
22125 s0 := o3.Args[0]
22126 if s0.Op != OpPPC64SLWconst {
22127 break
22128 }
22129 if s0.AuxInt != 32 {
22130 break
22131 }
22132 x3 := s0.Args[0]
22133 if x3.Op != OpPPC64MOVWBRload {
22134 break
22135 }
22136 if x3.Type != t {
22137 break
22138 }
22139 _ = x3.Args[1]
22140 x3_0 := x3.Args[0]
22141 if x3_0.Op != OpPPC64MOVDaddr {
22142 break
22143 }
22144 if x3_0.Type != typ.Uintptr {
22145 break
22146 }
22147 i0 := x3_0.AuxInt
22148 if x3_0.Aux != s {
22149 break
22150 }
22151 if p != x3_0.Args[0] {
22152 break
22153 }
22154 if mem != x3.Args[1] {
22155 break
22156 }
22157 s4 := o3.Args[1]
22158 if s4.Op != OpPPC64SLDconst {
22159 break
22160 }
22161 if s4.AuxInt != 24 {
22162 break
22163 }
22164 x4 := s4.Args[0]
22165 if x4.Op != OpPPC64MOVBZload {
22166 break
22167 }
22168 i4 := x4.AuxInt
22169 if x4.Aux != s {
22170 break
22171 }
22172 _ = x4.Args[1]
22173 if p != x4.Args[0] {
22174 break
22175 }
22176 if mem != x4.Args[1] {
22177 break
22178 }
22179 x7 := v.Args[1]
22180 if x7.Op != OpPPC64MOVBZload {
22181 break
22182 }
22183 i7 := x7.AuxInt
22184 if x7.Aux != s {
22185 break
22186 }
22187 _ = x7.Args[1]
22188 if p != x7.Args[0] {
22189 break
22190 }
22191 if mem != x7.Args[1] {
22192 break
22193 }
22194 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22195 break
22196 }
22197 b = mergePoint(b, x3, x4, x5, x6, x7)
22198 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22199 v.reset(OpCopy)
22200 v.AddArg(v0)
22201 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22202 v1.AuxInt = i0
22203 v1.Aux = s
22204 v1.AddArg(p)
22205 v0.AddArg(v1)
22206 v0.AddArg(mem)
22207 return true
22208 }
22209
22210
22211
22212 for {
22213 t := v.Type
22214 _ = v.Args[1]
22215 o5 := v.Args[0]
22216 if o5.Op != OpPPC64OR {
22217 break
22218 }
22219 if o5.Type != t {
22220 break
22221 }
22222 _ = o5.Args[1]
22223 s6 := o5.Args[0]
22224 if s6.Op != OpPPC64SLDconst {
22225 break
22226 }
22227 if s6.AuxInt != 8 {
22228 break
22229 }
22230 x6 := s6.Args[0]
22231 if x6.Op != OpPPC64MOVBZload {
22232 break
22233 }
22234 i6 := x6.AuxInt
22235 s := x6.Aux
22236 mem := x6.Args[1]
22237 p := x6.Args[0]
22238 o4 := o5.Args[1]
22239 if o4.Op != OpPPC64OR {
22240 break
22241 }
22242 if o4.Type != t {
22243 break
22244 }
22245 _ = o4.Args[1]
22246 o3 := o4.Args[0]
22247 if o3.Op != OpPPC64OR {
22248 break
22249 }
22250 if o3.Type != t {
22251 break
22252 }
22253 _ = o3.Args[1]
22254 s4 := o3.Args[0]
22255 if s4.Op != OpPPC64SLDconst {
22256 break
22257 }
22258 if s4.AuxInt != 24 {
22259 break
22260 }
22261 x4 := s4.Args[0]
22262 if x4.Op != OpPPC64MOVBZload {
22263 break
22264 }
22265 i4 := x4.AuxInt
22266 if x4.Aux != s {
22267 break
22268 }
22269 _ = x4.Args[1]
22270 if p != x4.Args[0] {
22271 break
22272 }
22273 if mem != x4.Args[1] {
22274 break
22275 }
22276 s0 := o3.Args[1]
22277 if s0.Op != OpPPC64SLWconst {
22278 break
22279 }
22280 if s0.AuxInt != 32 {
22281 break
22282 }
22283 x3 := s0.Args[0]
22284 if x3.Op != OpPPC64MOVWBRload {
22285 break
22286 }
22287 if x3.Type != t {
22288 break
22289 }
22290 _ = x3.Args[1]
22291 x3_0 := x3.Args[0]
22292 if x3_0.Op != OpPPC64MOVDaddr {
22293 break
22294 }
22295 if x3_0.Type != typ.Uintptr {
22296 break
22297 }
22298 i0 := x3_0.AuxInt
22299 if x3_0.Aux != s {
22300 break
22301 }
22302 if p != x3_0.Args[0] {
22303 break
22304 }
22305 if mem != x3.Args[1] {
22306 break
22307 }
22308 s5 := o4.Args[1]
22309 if s5.Op != OpPPC64SLDconst {
22310 break
22311 }
22312 if s5.AuxInt != 16 {
22313 break
22314 }
22315 x5 := s5.Args[0]
22316 if x5.Op != OpPPC64MOVBZload {
22317 break
22318 }
22319 i5 := x5.AuxInt
22320 if x5.Aux != s {
22321 break
22322 }
22323 _ = x5.Args[1]
22324 if p != x5.Args[0] {
22325 break
22326 }
22327 if mem != x5.Args[1] {
22328 break
22329 }
22330 x7 := v.Args[1]
22331 if x7.Op != OpPPC64MOVBZload {
22332 break
22333 }
22334 i7 := x7.AuxInt
22335 if x7.Aux != s {
22336 break
22337 }
22338 _ = x7.Args[1]
22339 if p != x7.Args[0] {
22340 break
22341 }
22342 if mem != x7.Args[1] {
22343 break
22344 }
22345 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22346 break
22347 }
22348 b = mergePoint(b, x3, x4, x5, x6, x7)
22349 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22350 v.reset(OpCopy)
22351 v.AddArg(v0)
22352 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22353 v1.AuxInt = i0
22354 v1.Aux = s
22355 v1.AddArg(p)
22356 v0.AddArg(v1)
22357 v0.AddArg(mem)
22358 return true
22359 }
22360
22361
22362
22363 for {
22364 t := v.Type
22365 _ = v.Args[1]
22366 o5 := v.Args[0]
22367 if o5.Op != OpPPC64OR {
22368 break
22369 }
22370 if o5.Type != t {
22371 break
22372 }
22373 _ = o5.Args[1]
22374 s6 := o5.Args[0]
22375 if s6.Op != OpPPC64SLDconst {
22376 break
22377 }
22378 if s6.AuxInt != 8 {
22379 break
22380 }
22381 x6 := s6.Args[0]
22382 if x6.Op != OpPPC64MOVBZload {
22383 break
22384 }
22385 i6 := x6.AuxInt
22386 s := x6.Aux
22387 mem := x6.Args[1]
22388 p := x6.Args[0]
22389 o4 := o5.Args[1]
22390 if o4.Op != OpPPC64OR {
22391 break
22392 }
22393 if o4.Type != t {
22394 break
22395 }
22396 _ = o4.Args[1]
22397 o3 := o4.Args[0]
22398 if o3.Op != OpPPC64OR {
22399 break
22400 }
22401 if o3.Type != t {
22402 break
22403 }
22404 _ = o3.Args[1]
22405 s0 := o3.Args[0]
22406 if s0.Op != OpPPC64SLWconst {
22407 break
22408 }
22409 if s0.AuxInt != 32 {
22410 break
22411 }
22412 x3 := s0.Args[0]
22413 if x3.Op != OpPPC64MOVWBRload {
22414 break
22415 }
22416 if x3.Type != t {
22417 break
22418 }
22419 _ = x3.Args[1]
22420 x3_0 := x3.Args[0]
22421 if x3_0.Op != OpPPC64MOVDaddr {
22422 break
22423 }
22424 if x3_0.Type != typ.Uintptr {
22425 break
22426 }
22427 i0 := x3_0.AuxInt
22428 if x3_0.Aux != s {
22429 break
22430 }
22431 if p != x3_0.Args[0] {
22432 break
22433 }
22434 if mem != x3.Args[1] {
22435 break
22436 }
22437 s4 := o3.Args[1]
22438 if s4.Op != OpPPC64SLDconst {
22439 break
22440 }
22441 if s4.AuxInt != 24 {
22442 break
22443 }
22444 x4 := s4.Args[0]
22445 if x4.Op != OpPPC64MOVBZload {
22446 break
22447 }
22448 i4 := x4.AuxInt
22449 if x4.Aux != s {
22450 break
22451 }
22452 _ = x4.Args[1]
22453 if p != x4.Args[0] {
22454 break
22455 }
22456 if mem != x4.Args[1] {
22457 break
22458 }
22459 s5 := o4.Args[1]
22460 if s5.Op != OpPPC64SLDconst {
22461 break
22462 }
22463 if s5.AuxInt != 16 {
22464 break
22465 }
22466 x5 := s5.Args[0]
22467 if x5.Op != OpPPC64MOVBZload {
22468 break
22469 }
22470 i5 := x5.AuxInt
22471 if x5.Aux != s {
22472 break
22473 }
22474 _ = x5.Args[1]
22475 if p != x5.Args[0] {
22476 break
22477 }
22478 if mem != x5.Args[1] {
22479 break
22480 }
22481 x7 := v.Args[1]
22482 if x7.Op != OpPPC64MOVBZload {
22483 break
22484 }
22485 i7 := x7.AuxInt
22486 if x7.Aux != s {
22487 break
22488 }
22489 _ = x7.Args[1]
22490 if p != x7.Args[0] {
22491 break
22492 }
22493 if mem != x7.Args[1] {
22494 break
22495 }
22496 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22497 break
22498 }
22499 b = mergePoint(b, x3, x4, x5, x6, x7)
22500 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22501 v.reset(OpCopy)
22502 v.AddArg(v0)
22503 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22504 v1.AuxInt = i0
22505 v1.Aux = s
22506 v1.AddArg(p)
22507 v0.AddArg(v1)
22508 v0.AddArg(mem)
22509 return true
22510 }
22511 return false
22512 }
22513 func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool {
22514 b := v.Block
22515 config := b.Func.Config
22516 typ := &b.Func.Config.Types
22517
22518
22519
22520 for {
22521 t := v.Type
22522 _ = v.Args[1]
22523 o5 := v.Args[0]
22524 if o5.Op != OpPPC64OR {
22525 break
22526 }
22527 if o5.Type != t {
22528 break
22529 }
22530 _ = o5.Args[1]
22531 o4 := o5.Args[0]
22532 if o4.Op != OpPPC64OR {
22533 break
22534 }
22535 if o4.Type != t {
22536 break
22537 }
22538 _ = o4.Args[1]
22539 s5 := o4.Args[0]
22540 if s5.Op != OpPPC64SLDconst {
22541 break
22542 }
22543 if s5.AuxInt != 16 {
22544 break
22545 }
22546 x5 := s5.Args[0]
22547 if x5.Op != OpPPC64MOVBZload {
22548 break
22549 }
22550 i5 := x5.AuxInt
22551 s := x5.Aux
22552 mem := x5.Args[1]
22553 p := x5.Args[0]
22554 o3 := o4.Args[1]
22555 if o3.Op != OpPPC64OR {
22556 break
22557 }
22558 if o3.Type != t {
22559 break
22560 }
22561 _ = o3.Args[1]
22562 s4 := o3.Args[0]
22563 if s4.Op != OpPPC64SLDconst {
22564 break
22565 }
22566 if s4.AuxInt != 24 {
22567 break
22568 }
22569 x4 := s4.Args[0]
22570 if x4.Op != OpPPC64MOVBZload {
22571 break
22572 }
22573 i4 := x4.AuxInt
22574 if x4.Aux != s {
22575 break
22576 }
22577 _ = x4.Args[1]
22578 if p != x4.Args[0] {
22579 break
22580 }
22581 if mem != x4.Args[1] {
22582 break
22583 }
22584 s0 := o3.Args[1]
22585 if s0.Op != OpPPC64SLWconst {
22586 break
22587 }
22588 if s0.AuxInt != 32 {
22589 break
22590 }
22591 x3 := s0.Args[0]
22592 if x3.Op != OpPPC64MOVWBRload {
22593 break
22594 }
22595 if x3.Type != t {
22596 break
22597 }
22598 _ = x3.Args[1]
22599 x3_0 := x3.Args[0]
22600 if x3_0.Op != OpPPC64MOVDaddr {
22601 break
22602 }
22603 if x3_0.Type != typ.Uintptr {
22604 break
22605 }
22606 i0 := x3_0.AuxInt
22607 if x3_0.Aux != s {
22608 break
22609 }
22610 if p != x3_0.Args[0] {
22611 break
22612 }
22613 if mem != x3.Args[1] {
22614 break
22615 }
22616 s6 := o5.Args[1]
22617 if s6.Op != OpPPC64SLDconst {
22618 break
22619 }
22620 if s6.AuxInt != 8 {
22621 break
22622 }
22623 x6 := s6.Args[0]
22624 if x6.Op != OpPPC64MOVBZload {
22625 break
22626 }
22627 i6 := x6.AuxInt
22628 if x6.Aux != s {
22629 break
22630 }
22631 _ = x6.Args[1]
22632 if p != x6.Args[0] {
22633 break
22634 }
22635 if mem != x6.Args[1] {
22636 break
22637 }
22638 x7 := v.Args[1]
22639 if x7.Op != OpPPC64MOVBZload {
22640 break
22641 }
22642 i7 := x7.AuxInt
22643 if x7.Aux != s {
22644 break
22645 }
22646 _ = x7.Args[1]
22647 if p != x7.Args[0] {
22648 break
22649 }
22650 if mem != x7.Args[1] {
22651 break
22652 }
22653 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22654 break
22655 }
22656 b = mergePoint(b, x3, x4, x5, x6, x7)
22657 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22658 v.reset(OpCopy)
22659 v.AddArg(v0)
22660 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22661 v1.AuxInt = i0
22662 v1.Aux = s
22663 v1.AddArg(p)
22664 v0.AddArg(v1)
22665 v0.AddArg(mem)
22666 return true
22667 }
22668
22669
22670
22671 for {
22672 t := v.Type
22673 _ = v.Args[1]
22674 o5 := v.Args[0]
22675 if o5.Op != OpPPC64OR {
22676 break
22677 }
22678 if o5.Type != t {
22679 break
22680 }
22681 _ = o5.Args[1]
22682 o4 := o5.Args[0]
22683 if o4.Op != OpPPC64OR {
22684 break
22685 }
22686 if o4.Type != t {
22687 break
22688 }
22689 _ = o4.Args[1]
22690 s5 := o4.Args[0]
22691 if s5.Op != OpPPC64SLDconst {
22692 break
22693 }
22694 if s5.AuxInt != 16 {
22695 break
22696 }
22697 x5 := s5.Args[0]
22698 if x5.Op != OpPPC64MOVBZload {
22699 break
22700 }
22701 i5 := x5.AuxInt
22702 s := x5.Aux
22703 mem := x5.Args[1]
22704 p := x5.Args[0]
22705 o3 := o4.Args[1]
22706 if o3.Op != OpPPC64OR {
22707 break
22708 }
22709 if o3.Type != t {
22710 break
22711 }
22712 _ = o3.Args[1]
22713 s0 := o3.Args[0]
22714 if s0.Op != OpPPC64SLWconst {
22715 break
22716 }
22717 if s0.AuxInt != 32 {
22718 break
22719 }
22720 x3 := s0.Args[0]
22721 if x3.Op != OpPPC64MOVWBRload {
22722 break
22723 }
22724 if x3.Type != t {
22725 break
22726 }
22727 _ = x3.Args[1]
22728 x3_0 := x3.Args[0]
22729 if x3_0.Op != OpPPC64MOVDaddr {
22730 break
22731 }
22732 if x3_0.Type != typ.Uintptr {
22733 break
22734 }
22735 i0 := x3_0.AuxInt
22736 if x3_0.Aux != s {
22737 break
22738 }
22739 if p != x3_0.Args[0] {
22740 break
22741 }
22742 if mem != x3.Args[1] {
22743 break
22744 }
22745 s4 := o3.Args[1]
22746 if s4.Op != OpPPC64SLDconst {
22747 break
22748 }
22749 if s4.AuxInt != 24 {
22750 break
22751 }
22752 x4 := s4.Args[0]
22753 if x4.Op != OpPPC64MOVBZload {
22754 break
22755 }
22756 i4 := x4.AuxInt
22757 if x4.Aux != s {
22758 break
22759 }
22760 _ = x4.Args[1]
22761 if p != x4.Args[0] {
22762 break
22763 }
22764 if mem != x4.Args[1] {
22765 break
22766 }
22767 s6 := o5.Args[1]
22768 if s6.Op != OpPPC64SLDconst {
22769 break
22770 }
22771 if s6.AuxInt != 8 {
22772 break
22773 }
22774 x6 := s6.Args[0]
22775 if x6.Op != OpPPC64MOVBZload {
22776 break
22777 }
22778 i6 := x6.AuxInt
22779 if x6.Aux != s {
22780 break
22781 }
22782 _ = x6.Args[1]
22783 if p != x6.Args[0] {
22784 break
22785 }
22786 if mem != x6.Args[1] {
22787 break
22788 }
22789 x7 := v.Args[1]
22790 if x7.Op != OpPPC64MOVBZload {
22791 break
22792 }
22793 i7 := x7.AuxInt
22794 if x7.Aux != s {
22795 break
22796 }
22797 _ = x7.Args[1]
22798 if p != x7.Args[0] {
22799 break
22800 }
22801 if mem != x7.Args[1] {
22802 break
22803 }
22804 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22805 break
22806 }
22807 b = mergePoint(b, x3, x4, x5, x6, x7)
22808 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22809 v.reset(OpCopy)
22810 v.AddArg(v0)
22811 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22812 v1.AuxInt = i0
22813 v1.Aux = s
22814 v1.AddArg(p)
22815 v0.AddArg(v1)
22816 v0.AddArg(mem)
22817 return true
22818 }
22819
22820
22821
22822 for {
22823 t := v.Type
22824 _ = v.Args[1]
22825 o5 := v.Args[0]
22826 if o5.Op != OpPPC64OR {
22827 break
22828 }
22829 if o5.Type != t {
22830 break
22831 }
22832 _ = o5.Args[1]
22833 o4 := o5.Args[0]
22834 if o4.Op != OpPPC64OR {
22835 break
22836 }
22837 if o4.Type != t {
22838 break
22839 }
22840 _ = o4.Args[1]
22841 o3 := o4.Args[0]
22842 if o3.Op != OpPPC64OR {
22843 break
22844 }
22845 if o3.Type != t {
22846 break
22847 }
22848 _ = o3.Args[1]
22849 s4 := o3.Args[0]
22850 if s4.Op != OpPPC64SLDconst {
22851 break
22852 }
22853 if s4.AuxInt != 24 {
22854 break
22855 }
22856 x4 := s4.Args[0]
22857 if x4.Op != OpPPC64MOVBZload {
22858 break
22859 }
22860 i4 := x4.AuxInt
22861 s := x4.Aux
22862 mem := x4.Args[1]
22863 p := x4.Args[0]
22864 s0 := o3.Args[1]
22865 if s0.Op != OpPPC64SLWconst {
22866 break
22867 }
22868 if s0.AuxInt != 32 {
22869 break
22870 }
22871 x3 := s0.Args[0]
22872 if x3.Op != OpPPC64MOVWBRload {
22873 break
22874 }
22875 if x3.Type != t {
22876 break
22877 }
22878 _ = x3.Args[1]
22879 x3_0 := x3.Args[0]
22880 if x3_0.Op != OpPPC64MOVDaddr {
22881 break
22882 }
22883 if x3_0.Type != typ.Uintptr {
22884 break
22885 }
22886 i0 := x3_0.AuxInt
22887 if x3_0.Aux != s {
22888 break
22889 }
22890 if p != x3_0.Args[0] {
22891 break
22892 }
22893 if mem != x3.Args[1] {
22894 break
22895 }
22896 s5 := o4.Args[1]
22897 if s5.Op != OpPPC64SLDconst {
22898 break
22899 }
22900 if s5.AuxInt != 16 {
22901 break
22902 }
22903 x5 := s5.Args[0]
22904 if x5.Op != OpPPC64MOVBZload {
22905 break
22906 }
22907 i5 := x5.AuxInt
22908 if x5.Aux != s {
22909 break
22910 }
22911 _ = x5.Args[1]
22912 if p != x5.Args[0] {
22913 break
22914 }
22915 if mem != x5.Args[1] {
22916 break
22917 }
22918 s6 := o5.Args[1]
22919 if s6.Op != OpPPC64SLDconst {
22920 break
22921 }
22922 if s6.AuxInt != 8 {
22923 break
22924 }
22925 x6 := s6.Args[0]
22926 if x6.Op != OpPPC64MOVBZload {
22927 break
22928 }
22929 i6 := x6.AuxInt
22930 if x6.Aux != s {
22931 break
22932 }
22933 _ = x6.Args[1]
22934 if p != x6.Args[0] {
22935 break
22936 }
22937 if mem != x6.Args[1] {
22938 break
22939 }
22940 x7 := v.Args[1]
22941 if x7.Op != OpPPC64MOVBZload {
22942 break
22943 }
22944 i7 := x7.AuxInt
22945 if x7.Aux != s {
22946 break
22947 }
22948 _ = x7.Args[1]
22949 if p != x7.Args[0] {
22950 break
22951 }
22952 if mem != x7.Args[1] {
22953 break
22954 }
22955 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
22956 break
22957 }
22958 b = mergePoint(b, x3, x4, x5, x6, x7)
22959 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
22960 v.reset(OpCopy)
22961 v.AddArg(v0)
22962 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
22963 v1.AuxInt = i0
22964 v1.Aux = s
22965 v1.AddArg(p)
22966 v0.AddArg(v1)
22967 v0.AddArg(mem)
22968 return true
22969 }
22970
22971
22972
22973 for {
22974 t := v.Type
22975 _ = v.Args[1]
22976 o5 := v.Args[0]
22977 if o5.Op != OpPPC64OR {
22978 break
22979 }
22980 if o5.Type != t {
22981 break
22982 }
22983 _ = o5.Args[1]
22984 o4 := o5.Args[0]
22985 if o4.Op != OpPPC64OR {
22986 break
22987 }
22988 if o4.Type != t {
22989 break
22990 }
22991 _ = o4.Args[1]
22992 o3 := o4.Args[0]
22993 if o3.Op != OpPPC64OR {
22994 break
22995 }
22996 if o3.Type != t {
22997 break
22998 }
22999 _ = o3.Args[1]
23000 s0 := o3.Args[0]
23001 if s0.Op != OpPPC64SLWconst {
23002 break
23003 }
23004 if s0.AuxInt != 32 {
23005 break
23006 }
23007 x3 := s0.Args[0]
23008 if x3.Op != OpPPC64MOVWBRload {
23009 break
23010 }
23011 if x3.Type != t {
23012 break
23013 }
23014 mem := x3.Args[1]
23015 x3_0 := x3.Args[0]
23016 if x3_0.Op != OpPPC64MOVDaddr {
23017 break
23018 }
23019 if x3_0.Type != typ.Uintptr {
23020 break
23021 }
23022 i0 := x3_0.AuxInt
23023 s := x3_0.Aux
23024 p := x3_0.Args[0]
23025 s4 := o3.Args[1]
23026 if s4.Op != OpPPC64SLDconst {
23027 break
23028 }
23029 if s4.AuxInt != 24 {
23030 break
23031 }
23032 x4 := s4.Args[0]
23033 if x4.Op != OpPPC64MOVBZload {
23034 break
23035 }
23036 i4 := x4.AuxInt
23037 if x4.Aux != s {
23038 break
23039 }
23040 _ = x4.Args[1]
23041 if p != x4.Args[0] {
23042 break
23043 }
23044 if mem != x4.Args[1] {
23045 break
23046 }
23047 s5 := o4.Args[1]
23048 if s5.Op != OpPPC64SLDconst {
23049 break
23050 }
23051 if s5.AuxInt != 16 {
23052 break
23053 }
23054 x5 := s5.Args[0]
23055 if x5.Op != OpPPC64MOVBZload {
23056 break
23057 }
23058 i5 := x5.AuxInt
23059 if x5.Aux != s {
23060 break
23061 }
23062 _ = x5.Args[1]
23063 if p != x5.Args[0] {
23064 break
23065 }
23066 if mem != x5.Args[1] {
23067 break
23068 }
23069 s6 := o5.Args[1]
23070 if s6.Op != OpPPC64SLDconst {
23071 break
23072 }
23073 if s6.AuxInt != 8 {
23074 break
23075 }
23076 x6 := s6.Args[0]
23077 if x6.Op != OpPPC64MOVBZload {
23078 break
23079 }
23080 i6 := x6.AuxInt
23081 if x6.Aux != s {
23082 break
23083 }
23084 _ = x6.Args[1]
23085 if p != x6.Args[0] {
23086 break
23087 }
23088 if mem != x6.Args[1] {
23089 break
23090 }
23091 x7 := v.Args[1]
23092 if x7.Op != OpPPC64MOVBZload {
23093 break
23094 }
23095 i7 := x7.AuxInt
23096 if x7.Aux != s {
23097 break
23098 }
23099 _ = x7.Args[1]
23100 if p != x7.Args[0] {
23101 break
23102 }
23103 if mem != x7.Args[1] {
23104 break
23105 }
23106 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23107 break
23108 }
23109 b = mergePoint(b, x3, x4, x5, x6, x7)
23110 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
23111 v.reset(OpCopy)
23112 v.AddArg(v0)
23113 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23114 v1.AuxInt = i0
23115 v1.Aux = s
23116 v1.AddArg(p)
23117 v0.AddArg(v1)
23118 v0.AddArg(mem)
23119 return true
23120 }
23121
23122
23123
23124 for {
23125 t := v.Type
23126 _ = v.Args[1]
23127 x7 := v.Args[0]
23128 if x7.Op != OpPPC64MOVBZload {
23129 break
23130 }
23131 i7 := x7.AuxInt
23132 s := x7.Aux
23133 mem := x7.Args[1]
23134 p := x7.Args[0]
23135 o5 := v.Args[1]
23136 if o5.Op != OpPPC64OR {
23137 break
23138 }
23139 if o5.Type != t {
23140 break
23141 }
23142 _ = o5.Args[1]
23143 s6 := o5.Args[0]
23144 if s6.Op != OpPPC64SLDconst {
23145 break
23146 }
23147 if s6.AuxInt != 8 {
23148 break
23149 }
23150 x6 := s6.Args[0]
23151 if x6.Op != OpPPC64MOVBZload {
23152 break
23153 }
23154 i6 := x6.AuxInt
23155 if x6.Aux != s {
23156 break
23157 }
23158 _ = x6.Args[1]
23159 if p != x6.Args[0] {
23160 break
23161 }
23162 if mem != x6.Args[1] {
23163 break
23164 }
23165 o4 := o5.Args[1]
23166 if o4.Op != OpPPC64OR {
23167 break
23168 }
23169 if o4.Type != t {
23170 break
23171 }
23172 _ = o4.Args[1]
23173 s5 := o4.Args[0]
23174 if s5.Op != OpPPC64SLDconst {
23175 break
23176 }
23177 if s5.AuxInt != 16 {
23178 break
23179 }
23180 x5 := s5.Args[0]
23181 if x5.Op != OpPPC64MOVBZload {
23182 break
23183 }
23184 i5 := x5.AuxInt
23185 if x5.Aux != s {
23186 break
23187 }
23188 _ = x5.Args[1]
23189 if p != x5.Args[0] {
23190 break
23191 }
23192 if mem != x5.Args[1] {
23193 break
23194 }
23195 o3 := o4.Args[1]
23196 if o3.Op != OpPPC64OR {
23197 break
23198 }
23199 if o3.Type != t {
23200 break
23201 }
23202 _ = o3.Args[1]
23203 s4 := o3.Args[0]
23204 if s4.Op != OpPPC64SLDconst {
23205 break
23206 }
23207 if s4.AuxInt != 24 {
23208 break
23209 }
23210 x4 := s4.Args[0]
23211 if x4.Op != OpPPC64MOVBZload {
23212 break
23213 }
23214 i4 := x4.AuxInt
23215 if x4.Aux != s {
23216 break
23217 }
23218 _ = x4.Args[1]
23219 if p != x4.Args[0] {
23220 break
23221 }
23222 if mem != x4.Args[1] {
23223 break
23224 }
23225 s0 := o3.Args[1]
23226 if s0.Op != OpPPC64SLDconst {
23227 break
23228 }
23229 if s0.AuxInt != 32 {
23230 break
23231 }
23232 x3 := s0.Args[0]
23233 if x3.Op != OpPPC64MOVWBRload {
23234 break
23235 }
23236 if x3.Type != t {
23237 break
23238 }
23239 _ = x3.Args[1]
23240 x3_0 := x3.Args[0]
23241 if x3_0.Op != OpPPC64MOVDaddr {
23242 break
23243 }
23244 if x3_0.Type != typ.Uintptr {
23245 break
23246 }
23247 i0 := x3_0.AuxInt
23248 if x3_0.Aux != s {
23249 break
23250 }
23251 if p != x3_0.Args[0] {
23252 break
23253 }
23254 if mem != x3.Args[1] {
23255 break
23256 }
23257 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23258 break
23259 }
23260 b = mergePoint(b, x3, x4, x5, x6, x7)
23261 v0 := b.NewValue0(x3.Pos, OpPPC64MOVDBRload, t)
23262 v.reset(OpCopy)
23263 v.AddArg(v0)
23264 v1 := b.NewValue0(x3.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23265 v1.AuxInt = i0
23266 v1.Aux = s
23267 v1.AddArg(p)
23268 v0.AddArg(v1)
23269 v0.AddArg(mem)
23270 return true
23271 }
23272
23273
23274
23275 for {
23276 t := v.Type
23277 _ = v.Args[1]
23278 x7 := v.Args[0]
23279 if x7.Op != OpPPC64MOVBZload {
23280 break
23281 }
23282 i7 := x7.AuxInt
23283 s := x7.Aux
23284 mem := x7.Args[1]
23285 p := x7.Args[0]
23286 o5 := v.Args[1]
23287 if o5.Op != OpPPC64OR {
23288 break
23289 }
23290 if o5.Type != t {
23291 break
23292 }
23293 _ = o5.Args[1]
23294 s6 := o5.Args[0]
23295 if s6.Op != OpPPC64SLDconst {
23296 break
23297 }
23298 if s6.AuxInt != 8 {
23299 break
23300 }
23301 x6 := s6.Args[0]
23302 if x6.Op != OpPPC64MOVBZload {
23303 break
23304 }
23305 i6 := x6.AuxInt
23306 if x6.Aux != s {
23307 break
23308 }
23309 _ = x6.Args[1]
23310 if p != x6.Args[0] {
23311 break
23312 }
23313 if mem != x6.Args[1] {
23314 break
23315 }
23316 o4 := o5.Args[1]
23317 if o4.Op != OpPPC64OR {
23318 break
23319 }
23320 if o4.Type != t {
23321 break
23322 }
23323 _ = o4.Args[1]
23324 s5 := o4.Args[0]
23325 if s5.Op != OpPPC64SLDconst {
23326 break
23327 }
23328 if s5.AuxInt != 16 {
23329 break
23330 }
23331 x5 := s5.Args[0]
23332 if x5.Op != OpPPC64MOVBZload {
23333 break
23334 }
23335 i5 := x5.AuxInt
23336 if x5.Aux != s {
23337 break
23338 }
23339 _ = x5.Args[1]
23340 if p != x5.Args[0] {
23341 break
23342 }
23343 if mem != x5.Args[1] {
23344 break
23345 }
23346 o3 := o4.Args[1]
23347 if o3.Op != OpPPC64OR {
23348 break
23349 }
23350 if o3.Type != t {
23351 break
23352 }
23353 _ = o3.Args[1]
23354 s0 := o3.Args[0]
23355 if s0.Op != OpPPC64SLDconst {
23356 break
23357 }
23358 if s0.AuxInt != 32 {
23359 break
23360 }
23361 x3 := s0.Args[0]
23362 if x3.Op != OpPPC64MOVWBRload {
23363 break
23364 }
23365 if x3.Type != t {
23366 break
23367 }
23368 _ = x3.Args[1]
23369 x3_0 := x3.Args[0]
23370 if x3_0.Op != OpPPC64MOVDaddr {
23371 break
23372 }
23373 if x3_0.Type != typ.Uintptr {
23374 break
23375 }
23376 i0 := x3_0.AuxInt
23377 if x3_0.Aux != s {
23378 break
23379 }
23380 if p != x3_0.Args[0] {
23381 break
23382 }
23383 if mem != x3.Args[1] {
23384 break
23385 }
23386 s4 := o3.Args[1]
23387 if s4.Op != OpPPC64SLDconst {
23388 break
23389 }
23390 if s4.AuxInt != 24 {
23391 break
23392 }
23393 x4 := s4.Args[0]
23394 if x4.Op != OpPPC64MOVBZload {
23395 break
23396 }
23397 i4 := x4.AuxInt
23398 if x4.Aux != s {
23399 break
23400 }
23401 _ = x4.Args[1]
23402 if p != x4.Args[0] {
23403 break
23404 }
23405 if mem != x4.Args[1] {
23406 break
23407 }
23408 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23409 break
23410 }
23411 b = mergePoint(b, x3, x4, x5, x6, x7)
23412 v0 := b.NewValue0(x4.Pos, OpPPC64MOVDBRload, t)
23413 v.reset(OpCopy)
23414 v.AddArg(v0)
23415 v1 := b.NewValue0(x4.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23416 v1.AuxInt = i0
23417 v1.Aux = s
23418 v1.AddArg(p)
23419 v0.AddArg(v1)
23420 v0.AddArg(mem)
23421 return true
23422 }
23423
23424
23425
23426 for {
23427 t := v.Type
23428 _ = v.Args[1]
23429 x7 := v.Args[0]
23430 if x7.Op != OpPPC64MOVBZload {
23431 break
23432 }
23433 i7 := x7.AuxInt
23434 s := x7.Aux
23435 mem := x7.Args[1]
23436 p := x7.Args[0]
23437 o5 := v.Args[1]
23438 if o5.Op != OpPPC64OR {
23439 break
23440 }
23441 if o5.Type != t {
23442 break
23443 }
23444 _ = o5.Args[1]
23445 s6 := o5.Args[0]
23446 if s6.Op != OpPPC64SLDconst {
23447 break
23448 }
23449 if s6.AuxInt != 8 {
23450 break
23451 }
23452 x6 := s6.Args[0]
23453 if x6.Op != OpPPC64MOVBZload {
23454 break
23455 }
23456 i6 := x6.AuxInt
23457 if x6.Aux != s {
23458 break
23459 }
23460 _ = x6.Args[1]
23461 if p != x6.Args[0] {
23462 break
23463 }
23464 if mem != x6.Args[1] {
23465 break
23466 }
23467 o4 := o5.Args[1]
23468 if o4.Op != OpPPC64OR {
23469 break
23470 }
23471 if o4.Type != t {
23472 break
23473 }
23474 _ = o4.Args[1]
23475 o3 := o4.Args[0]
23476 if o3.Op != OpPPC64OR {
23477 break
23478 }
23479 if o3.Type != t {
23480 break
23481 }
23482 _ = o3.Args[1]
23483 s4 := o3.Args[0]
23484 if s4.Op != OpPPC64SLDconst {
23485 break
23486 }
23487 if s4.AuxInt != 24 {
23488 break
23489 }
23490 x4 := s4.Args[0]
23491 if x4.Op != OpPPC64MOVBZload {
23492 break
23493 }
23494 i4 := x4.AuxInt
23495 if x4.Aux != s {
23496 break
23497 }
23498 _ = x4.Args[1]
23499 if p != x4.Args[0] {
23500 break
23501 }
23502 if mem != x4.Args[1] {
23503 break
23504 }
23505 s0 := o3.Args[1]
23506 if s0.Op != OpPPC64SLDconst {
23507 break
23508 }
23509 if s0.AuxInt != 32 {
23510 break
23511 }
23512 x3 := s0.Args[0]
23513 if x3.Op != OpPPC64MOVWBRload {
23514 break
23515 }
23516 if x3.Type != t {
23517 break
23518 }
23519 _ = x3.Args[1]
23520 x3_0 := x3.Args[0]
23521 if x3_0.Op != OpPPC64MOVDaddr {
23522 break
23523 }
23524 if x3_0.Type != typ.Uintptr {
23525 break
23526 }
23527 i0 := x3_0.AuxInt
23528 if x3_0.Aux != s {
23529 break
23530 }
23531 if p != x3_0.Args[0] {
23532 break
23533 }
23534 if mem != x3.Args[1] {
23535 break
23536 }
23537 s5 := o4.Args[1]
23538 if s5.Op != OpPPC64SLDconst {
23539 break
23540 }
23541 if s5.AuxInt != 16 {
23542 break
23543 }
23544 x5 := s5.Args[0]
23545 if x5.Op != OpPPC64MOVBZload {
23546 break
23547 }
23548 i5 := x5.AuxInt
23549 if x5.Aux != s {
23550 break
23551 }
23552 _ = x5.Args[1]
23553 if p != x5.Args[0] {
23554 break
23555 }
23556 if mem != x5.Args[1] {
23557 break
23558 }
23559 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23560 break
23561 }
23562 b = mergePoint(b, x3, x4, x5, x6, x7)
23563 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDBRload, t)
23564 v.reset(OpCopy)
23565 v.AddArg(v0)
23566 v1 := b.NewValue0(x5.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23567 v1.AuxInt = i0
23568 v1.Aux = s
23569 v1.AddArg(p)
23570 v0.AddArg(v1)
23571 v0.AddArg(mem)
23572 return true
23573 }
23574
23575
23576
23577 for {
23578 t := v.Type
23579 _ = v.Args[1]
23580 x7 := v.Args[0]
23581 if x7.Op != OpPPC64MOVBZload {
23582 break
23583 }
23584 i7 := x7.AuxInt
23585 s := x7.Aux
23586 mem := x7.Args[1]
23587 p := x7.Args[0]
23588 o5 := v.Args[1]
23589 if o5.Op != OpPPC64OR {
23590 break
23591 }
23592 if o5.Type != t {
23593 break
23594 }
23595 _ = o5.Args[1]
23596 s6 := o5.Args[0]
23597 if s6.Op != OpPPC64SLDconst {
23598 break
23599 }
23600 if s6.AuxInt != 8 {
23601 break
23602 }
23603 x6 := s6.Args[0]
23604 if x6.Op != OpPPC64MOVBZload {
23605 break
23606 }
23607 i6 := x6.AuxInt
23608 if x6.Aux != s {
23609 break
23610 }
23611 _ = x6.Args[1]
23612 if p != x6.Args[0] {
23613 break
23614 }
23615 if mem != x6.Args[1] {
23616 break
23617 }
23618 o4 := o5.Args[1]
23619 if o4.Op != OpPPC64OR {
23620 break
23621 }
23622 if o4.Type != t {
23623 break
23624 }
23625 _ = o4.Args[1]
23626 o3 := o4.Args[0]
23627 if o3.Op != OpPPC64OR {
23628 break
23629 }
23630 if o3.Type != t {
23631 break
23632 }
23633 _ = o3.Args[1]
23634 s0 := o3.Args[0]
23635 if s0.Op != OpPPC64SLDconst {
23636 break
23637 }
23638 if s0.AuxInt != 32 {
23639 break
23640 }
23641 x3 := s0.Args[0]
23642 if x3.Op != OpPPC64MOVWBRload {
23643 break
23644 }
23645 if x3.Type != t {
23646 break
23647 }
23648 _ = x3.Args[1]
23649 x3_0 := x3.Args[0]
23650 if x3_0.Op != OpPPC64MOVDaddr {
23651 break
23652 }
23653 if x3_0.Type != typ.Uintptr {
23654 break
23655 }
23656 i0 := x3_0.AuxInt
23657 if x3_0.Aux != s {
23658 break
23659 }
23660 if p != x3_0.Args[0] {
23661 break
23662 }
23663 if mem != x3.Args[1] {
23664 break
23665 }
23666 s4 := o3.Args[1]
23667 if s4.Op != OpPPC64SLDconst {
23668 break
23669 }
23670 if s4.AuxInt != 24 {
23671 break
23672 }
23673 x4 := s4.Args[0]
23674 if x4.Op != OpPPC64MOVBZload {
23675 break
23676 }
23677 i4 := x4.AuxInt
23678 if x4.Aux != s {
23679 break
23680 }
23681 _ = x4.Args[1]
23682 if p != x4.Args[0] {
23683 break
23684 }
23685 if mem != x4.Args[1] {
23686 break
23687 }
23688 s5 := o4.Args[1]
23689 if s5.Op != OpPPC64SLDconst {
23690 break
23691 }
23692 if s5.AuxInt != 16 {
23693 break
23694 }
23695 x5 := s5.Args[0]
23696 if x5.Op != OpPPC64MOVBZload {
23697 break
23698 }
23699 i5 := x5.AuxInt
23700 if x5.Aux != s {
23701 break
23702 }
23703 _ = x5.Args[1]
23704 if p != x5.Args[0] {
23705 break
23706 }
23707 if mem != x5.Args[1] {
23708 break
23709 }
23710 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23711 break
23712 }
23713 b = mergePoint(b, x3, x4, x5, x6, x7)
23714 v0 := b.NewValue0(x5.Pos, OpPPC64MOVDBRload, t)
23715 v.reset(OpCopy)
23716 v.AddArg(v0)
23717 v1 := b.NewValue0(x5.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23718 v1.AuxInt = i0
23719 v1.Aux = s
23720 v1.AddArg(p)
23721 v0.AddArg(v1)
23722 v0.AddArg(mem)
23723 return true
23724 }
23725
23726
23727
23728 for {
23729 t := v.Type
23730 _ = v.Args[1]
23731 x7 := v.Args[0]
23732 if x7.Op != OpPPC64MOVBZload {
23733 break
23734 }
23735 i7 := x7.AuxInt
23736 s := x7.Aux
23737 mem := x7.Args[1]
23738 p := x7.Args[0]
23739 o5 := v.Args[1]
23740 if o5.Op != OpPPC64OR {
23741 break
23742 }
23743 if o5.Type != t {
23744 break
23745 }
23746 _ = o5.Args[1]
23747 o4 := o5.Args[0]
23748 if o4.Op != OpPPC64OR {
23749 break
23750 }
23751 if o4.Type != t {
23752 break
23753 }
23754 _ = o4.Args[1]
23755 s5 := o4.Args[0]
23756 if s5.Op != OpPPC64SLDconst {
23757 break
23758 }
23759 if s5.AuxInt != 16 {
23760 break
23761 }
23762 x5 := s5.Args[0]
23763 if x5.Op != OpPPC64MOVBZload {
23764 break
23765 }
23766 i5 := x5.AuxInt
23767 if x5.Aux != s {
23768 break
23769 }
23770 _ = x5.Args[1]
23771 if p != x5.Args[0] {
23772 break
23773 }
23774 if mem != x5.Args[1] {
23775 break
23776 }
23777 o3 := o4.Args[1]
23778 if o3.Op != OpPPC64OR {
23779 break
23780 }
23781 if o3.Type != t {
23782 break
23783 }
23784 _ = o3.Args[1]
23785 s4 := o3.Args[0]
23786 if s4.Op != OpPPC64SLDconst {
23787 break
23788 }
23789 if s4.AuxInt != 24 {
23790 break
23791 }
23792 x4 := s4.Args[0]
23793 if x4.Op != OpPPC64MOVBZload {
23794 break
23795 }
23796 i4 := x4.AuxInt
23797 if x4.Aux != s {
23798 break
23799 }
23800 _ = x4.Args[1]
23801 if p != x4.Args[0] {
23802 break
23803 }
23804 if mem != x4.Args[1] {
23805 break
23806 }
23807 s0 := o3.Args[1]
23808 if s0.Op != OpPPC64SLDconst {
23809 break
23810 }
23811 if s0.AuxInt != 32 {
23812 break
23813 }
23814 x3 := s0.Args[0]
23815 if x3.Op != OpPPC64MOVWBRload {
23816 break
23817 }
23818 if x3.Type != t {
23819 break
23820 }
23821 _ = x3.Args[1]
23822 x3_0 := x3.Args[0]
23823 if x3_0.Op != OpPPC64MOVDaddr {
23824 break
23825 }
23826 if x3_0.Type != typ.Uintptr {
23827 break
23828 }
23829 i0 := x3_0.AuxInt
23830 if x3_0.Aux != s {
23831 break
23832 }
23833 if p != x3_0.Args[0] {
23834 break
23835 }
23836 if mem != x3.Args[1] {
23837 break
23838 }
23839 s6 := o5.Args[1]
23840 if s6.Op != OpPPC64SLDconst {
23841 break
23842 }
23843 if s6.AuxInt != 8 {
23844 break
23845 }
23846 x6 := s6.Args[0]
23847 if x6.Op != OpPPC64MOVBZload {
23848 break
23849 }
23850 i6 := x6.AuxInt
23851 if x6.Aux != s {
23852 break
23853 }
23854 _ = x6.Args[1]
23855 if p != x6.Args[0] {
23856 break
23857 }
23858 if mem != x6.Args[1] {
23859 break
23860 }
23861 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
23862 break
23863 }
23864 b = mergePoint(b, x3, x4, x5, x6, x7)
23865 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
23866 v.reset(OpCopy)
23867 v.AddArg(v0)
23868 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
23869 v1.AuxInt = i0
23870 v1.Aux = s
23871 v1.AddArg(p)
23872 v0.AddArg(v1)
23873 v0.AddArg(mem)
23874 return true
23875 }
23876
23877
23878
23879 for {
23880 t := v.Type
23881 _ = v.Args[1]
23882 x7 := v.Args[0]
23883 if x7.Op != OpPPC64MOVBZload {
23884 break
23885 }
23886 i7 := x7.AuxInt
23887 s := x7.Aux
23888 mem := x7.Args[1]
23889 p := x7.Args[0]
23890 o5 := v.Args[1]
23891 if o5.Op != OpPPC64OR {
23892 break
23893 }
23894 if o5.Type != t {
23895 break
23896 }
23897 _ = o5.Args[1]
23898 o4 := o5.Args[0]
23899 if o4.Op != OpPPC64OR {
23900 break
23901 }
23902 if o4.Type != t {
23903 break
23904 }
23905 _ = o4.Args[1]
23906 s5 := o4.Args[0]
23907 if s5.Op != OpPPC64SLDconst {
23908 break
23909 }
23910 if s5.AuxInt != 16 {
23911 break
23912 }
23913 x5 := s5.Args[0]
23914 if x5.Op != OpPPC64MOVBZload {
23915 break
23916 }
23917 i5 := x5.AuxInt
23918 if x5.Aux != s {
23919 break
23920 }
23921 _ = x5.Args[1]
23922 if p != x5.Args[0] {
23923 break
23924 }
23925 if mem != x5.Args[1] {
23926 break
23927 }
23928 o3 := o4.Args[1]
23929 if o3.Op != OpPPC64OR {
23930 break
23931 }
23932 if o3.Type != t {
23933 break
23934 }
23935 _ = o3.Args[1]
23936 s0 := o3.Args[0]
23937 if s0.Op != OpPPC64SLDconst {
23938 break
23939 }
23940 if s0.AuxInt != 32 {
23941 break
23942 }
23943 x3 := s0.Args[0]
23944 if x3.Op != OpPPC64MOVWBRload {
23945 break
23946 }
23947 if x3.Type != t {
23948 break
23949 }
23950 _ = x3.Args[1]
23951 x3_0 := x3.Args[0]
23952 if x3_0.Op != OpPPC64MOVDaddr {
23953 break
23954 }
23955 if x3_0.Type != typ.Uintptr {
23956 break
23957 }
23958 i0 := x3_0.AuxInt
23959 if x3_0.Aux != s {
23960 break
23961 }
23962 if p != x3_0.Args[0] {
23963 break
23964 }
23965 if mem != x3.Args[1] {
23966 break
23967 }
23968 s4 := o3.Args[1]
23969 if s4.Op != OpPPC64SLDconst {
23970 break
23971 }
23972 if s4.AuxInt != 24 {
23973 break
23974 }
23975 x4 := s4.Args[0]
23976 if x4.Op != OpPPC64MOVBZload {
23977 break
23978 }
23979 i4 := x4.AuxInt
23980 if x4.Aux != s {
23981 break
23982 }
23983 _ = x4.Args[1]
23984 if p != x4.Args[0] {
23985 break
23986 }
23987 if mem != x4.Args[1] {
23988 break
23989 }
23990 s6 := o5.Args[1]
23991 if s6.Op != OpPPC64SLDconst {
23992 break
23993 }
23994 if s6.AuxInt != 8 {
23995 break
23996 }
23997 x6 := s6.Args[0]
23998 if x6.Op != OpPPC64MOVBZload {
23999 break
24000 }
24001 i6 := x6.AuxInt
24002 if x6.Aux != s {
24003 break
24004 }
24005 _ = x6.Args[1]
24006 if p != x6.Args[0] {
24007 break
24008 }
24009 if mem != x6.Args[1] {
24010 break
24011 }
24012 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24013 break
24014 }
24015 b = mergePoint(b, x3, x4, x5, x6, x7)
24016 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
24017 v.reset(OpCopy)
24018 v.AddArg(v0)
24019 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24020 v1.AuxInt = i0
24021 v1.Aux = s
24022 v1.AddArg(p)
24023 v0.AddArg(v1)
24024 v0.AddArg(mem)
24025 return true
24026 }
24027 return false
24028 }
24029 func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool {
24030 b := v.Block
24031 config := b.Func.Config
24032 typ := &b.Func.Config.Types
24033
24034
24035
24036 for {
24037 t := v.Type
24038 _ = v.Args[1]
24039 x7 := v.Args[0]
24040 if x7.Op != OpPPC64MOVBZload {
24041 break
24042 }
24043 i7 := x7.AuxInt
24044 s := x7.Aux
24045 mem := x7.Args[1]
24046 p := x7.Args[0]
24047 o5 := v.Args[1]
24048 if o5.Op != OpPPC64OR {
24049 break
24050 }
24051 if o5.Type != t {
24052 break
24053 }
24054 _ = o5.Args[1]
24055 o4 := o5.Args[0]
24056 if o4.Op != OpPPC64OR {
24057 break
24058 }
24059 if o4.Type != t {
24060 break
24061 }
24062 _ = o4.Args[1]
24063 o3 := o4.Args[0]
24064 if o3.Op != OpPPC64OR {
24065 break
24066 }
24067 if o3.Type != t {
24068 break
24069 }
24070 _ = o3.Args[1]
24071 s4 := o3.Args[0]
24072 if s4.Op != OpPPC64SLDconst {
24073 break
24074 }
24075 if s4.AuxInt != 24 {
24076 break
24077 }
24078 x4 := s4.Args[0]
24079 if x4.Op != OpPPC64MOVBZload {
24080 break
24081 }
24082 i4 := x4.AuxInt
24083 if x4.Aux != s {
24084 break
24085 }
24086 _ = x4.Args[1]
24087 if p != x4.Args[0] {
24088 break
24089 }
24090 if mem != x4.Args[1] {
24091 break
24092 }
24093 s0 := o3.Args[1]
24094 if s0.Op != OpPPC64SLDconst {
24095 break
24096 }
24097 if s0.AuxInt != 32 {
24098 break
24099 }
24100 x3 := s0.Args[0]
24101 if x3.Op != OpPPC64MOVWBRload {
24102 break
24103 }
24104 if x3.Type != t {
24105 break
24106 }
24107 _ = x3.Args[1]
24108 x3_0 := x3.Args[0]
24109 if x3_0.Op != OpPPC64MOVDaddr {
24110 break
24111 }
24112 if x3_0.Type != typ.Uintptr {
24113 break
24114 }
24115 i0 := x3_0.AuxInt
24116 if x3_0.Aux != s {
24117 break
24118 }
24119 if p != x3_0.Args[0] {
24120 break
24121 }
24122 if mem != x3.Args[1] {
24123 break
24124 }
24125 s5 := o4.Args[1]
24126 if s5.Op != OpPPC64SLDconst {
24127 break
24128 }
24129 if s5.AuxInt != 16 {
24130 break
24131 }
24132 x5 := s5.Args[0]
24133 if x5.Op != OpPPC64MOVBZload {
24134 break
24135 }
24136 i5 := x5.AuxInt
24137 if x5.Aux != s {
24138 break
24139 }
24140 _ = x5.Args[1]
24141 if p != x5.Args[0] {
24142 break
24143 }
24144 if mem != x5.Args[1] {
24145 break
24146 }
24147 s6 := o5.Args[1]
24148 if s6.Op != OpPPC64SLDconst {
24149 break
24150 }
24151 if s6.AuxInt != 8 {
24152 break
24153 }
24154 x6 := s6.Args[0]
24155 if x6.Op != OpPPC64MOVBZload {
24156 break
24157 }
24158 i6 := x6.AuxInt
24159 if x6.Aux != s {
24160 break
24161 }
24162 _ = x6.Args[1]
24163 if p != x6.Args[0] {
24164 break
24165 }
24166 if mem != x6.Args[1] {
24167 break
24168 }
24169 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24170 break
24171 }
24172 b = mergePoint(b, x3, x4, x5, x6, x7)
24173 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
24174 v.reset(OpCopy)
24175 v.AddArg(v0)
24176 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24177 v1.AuxInt = i0
24178 v1.Aux = s
24179 v1.AddArg(p)
24180 v0.AddArg(v1)
24181 v0.AddArg(mem)
24182 return true
24183 }
24184
24185
24186
24187 for {
24188 t := v.Type
24189 _ = v.Args[1]
24190 x7 := v.Args[0]
24191 if x7.Op != OpPPC64MOVBZload {
24192 break
24193 }
24194 i7 := x7.AuxInt
24195 s := x7.Aux
24196 mem := x7.Args[1]
24197 p := x7.Args[0]
24198 o5 := v.Args[1]
24199 if o5.Op != OpPPC64OR {
24200 break
24201 }
24202 if o5.Type != t {
24203 break
24204 }
24205 _ = o5.Args[1]
24206 o4 := o5.Args[0]
24207 if o4.Op != OpPPC64OR {
24208 break
24209 }
24210 if o4.Type != t {
24211 break
24212 }
24213 _ = o4.Args[1]
24214 o3 := o4.Args[0]
24215 if o3.Op != OpPPC64OR {
24216 break
24217 }
24218 if o3.Type != t {
24219 break
24220 }
24221 _ = o3.Args[1]
24222 s0 := o3.Args[0]
24223 if s0.Op != OpPPC64SLDconst {
24224 break
24225 }
24226 if s0.AuxInt != 32 {
24227 break
24228 }
24229 x3 := s0.Args[0]
24230 if x3.Op != OpPPC64MOVWBRload {
24231 break
24232 }
24233 if x3.Type != t {
24234 break
24235 }
24236 _ = x3.Args[1]
24237 x3_0 := x3.Args[0]
24238 if x3_0.Op != OpPPC64MOVDaddr {
24239 break
24240 }
24241 if x3_0.Type != typ.Uintptr {
24242 break
24243 }
24244 i0 := x3_0.AuxInt
24245 if x3_0.Aux != s {
24246 break
24247 }
24248 if p != x3_0.Args[0] {
24249 break
24250 }
24251 if mem != x3.Args[1] {
24252 break
24253 }
24254 s4 := o3.Args[1]
24255 if s4.Op != OpPPC64SLDconst {
24256 break
24257 }
24258 if s4.AuxInt != 24 {
24259 break
24260 }
24261 x4 := s4.Args[0]
24262 if x4.Op != OpPPC64MOVBZload {
24263 break
24264 }
24265 i4 := x4.AuxInt
24266 if x4.Aux != s {
24267 break
24268 }
24269 _ = x4.Args[1]
24270 if p != x4.Args[0] {
24271 break
24272 }
24273 if mem != x4.Args[1] {
24274 break
24275 }
24276 s5 := o4.Args[1]
24277 if s5.Op != OpPPC64SLDconst {
24278 break
24279 }
24280 if s5.AuxInt != 16 {
24281 break
24282 }
24283 x5 := s5.Args[0]
24284 if x5.Op != OpPPC64MOVBZload {
24285 break
24286 }
24287 i5 := x5.AuxInt
24288 if x5.Aux != s {
24289 break
24290 }
24291 _ = x5.Args[1]
24292 if p != x5.Args[0] {
24293 break
24294 }
24295 if mem != x5.Args[1] {
24296 break
24297 }
24298 s6 := o5.Args[1]
24299 if s6.Op != OpPPC64SLDconst {
24300 break
24301 }
24302 if s6.AuxInt != 8 {
24303 break
24304 }
24305 x6 := s6.Args[0]
24306 if x6.Op != OpPPC64MOVBZload {
24307 break
24308 }
24309 i6 := x6.AuxInt
24310 if x6.Aux != s {
24311 break
24312 }
24313 _ = x6.Args[1]
24314 if p != x6.Args[0] {
24315 break
24316 }
24317 if mem != x6.Args[1] {
24318 break
24319 }
24320 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24321 break
24322 }
24323 b = mergePoint(b, x3, x4, x5, x6, x7)
24324 v0 := b.NewValue0(x6.Pos, OpPPC64MOVDBRload, t)
24325 v.reset(OpCopy)
24326 v.AddArg(v0)
24327 v1 := b.NewValue0(x6.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24328 v1.AuxInt = i0
24329 v1.Aux = s
24330 v1.AddArg(p)
24331 v0.AddArg(v1)
24332 v0.AddArg(mem)
24333 return true
24334 }
24335
24336
24337
24338 for {
24339 t := v.Type
24340 _ = v.Args[1]
24341 o5 := v.Args[0]
24342 if o5.Op != OpPPC64OR {
24343 break
24344 }
24345 if o5.Type != t {
24346 break
24347 }
24348 _ = o5.Args[1]
24349 s6 := o5.Args[0]
24350 if s6.Op != OpPPC64SLDconst {
24351 break
24352 }
24353 if s6.AuxInt != 8 {
24354 break
24355 }
24356 x6 := s6.Args[0]
24357 if x6.Op != OpPPC64MOVBZload {
24358 break
24359 }
24360 i6 := x6.AuxInt
24361 s := x6.Aux
24362 mem := x6.Args[1]
24363 p := x6.Args[0]
24364 o4 := o5.Args[1]
24365 if o4.Op != OpPPC64OR {
24366 break
24367 }
24368 if o4.Type != t {
24369 break
24370 }
24371 _ = o4.Args[1]
24372 s5 := o4.Args[0]
24373 if s5.Op != OpPPC64SLDconst {
24374 break
24375 }
24376 if s5.AuxInt != 16 {
24377 break
24378 }
24379 x5 := s5.Args[0]
24380 if x5.Op != OpPPC64MOVBZload {
24381 break
24382 }
24383 i5 := x5.AuxInt
24384 if x5.Aux != s {
24385 break
24386 }
24387 _ = x5.Args[1]
24388 if p != x5.Args[0] {
24389 break
24390 }
24391 if mem != x5.Args[1] {
24392 break
24393 }
24394 o3 := o4.Args[1]
24395 if o3.Op != OpPPC64OR {
24396 break
24397 }
24398 if o3.Type != t {
24399 break
24400 }
24401 _ = o3.Args[1]
24402 s4 := o3.Args[0]
24403 if s4.Op != OpPPC64SLDconst {
24404 break
24405 }
24406 if s4.AuxInt != 24 {
24407 break
24408 }
24409 x4 := s4.Args[0]
24410 if x4.Op != OpPPC64MOVBZload {
24411 break
24412 }
24413 i4 := x4.AuxInt
24414 if x4.Aux != s {
24415 break
24416 }
24417 _ = x4.Args[1]
24418 if p != x4.Args[0] {
24419 break
24420 }
24421 if mem != x4.Args[1] {
24422 break
24423 }
24424 s0 := o3.Args[1]
24425 if s0.Op != OpPPC64SLDconst {
24426 break
24427 }
24428 if s0.AuxInt != 32 {
24429 break
24430 }
24431 x3 := s0.Args[0]
24432 if x3.Op != OpPPC64MOVWBRload {
24433 break
24434 }
24435 if x3.Type != t {
24436 break
24437 }
24438 _ = x3.Args[1]
24439 x3_0 := x3.Args[0]
24440 if x3_0.Op != OpPPC64MOVDaddr {
24441 break
24442 }
24443 if x3_0.Type != typ.Uintptr {
24444 break
24445 }
24446 i0 := x3_0.AuxInt
24447 if x3_0.Aux != s {
24448 break
24449 }
24450 if p != x3_0.Args[0] {
24451 break
24452 }
24453 if mem != x3.Args[1] {
24454 break
24455 }
24456 x7 := v.Args[1]
24457 if x7.Op != OpPPC64MOVBZload {
24458 break
24459 }
24460 i7 := x7.AuxInt
24461 if x7.Aux != s {
24462 break
24463 }
24464 _ = x7.Args[1]
24465 if p != x7.Args[0] {
24466 break
24467 }
24468 if mem != x7.Args[1] {
24469 break
24470 }
24471 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24472 break
24473 }
24474 b = mergePoint(b, x3, x4, x5, x6, x7)
24475 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
24476 v.reset(OpCopy)
24477 v.AddArg(v0)
24478 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24479 v1.AuxInt = i0
24480 v1.Aux = s
24481 v1.AddArg(p)
24482 v0.AddArg(v1)
24483 v0.AddArg(mem)
24484 return true
24485 }
24486
24487
24488
24489 for {
24490 t := v.Type
24491 _ = v.Args[1]
24492 o5 := v.Args[0]
24493 if o5.Op != OpPPC64OR {
24494 break
24495 }
24496 if o5.Type != t {
24497 break
24498 }
24499 _ = o5.Args[1]
24500 s6 := o5.Args[0]
24501 if s6.Op != OpPPC64SLDconst {
24502 break
24503 }
24504 if s6.AuxInt != 8 {
24505 break
24506 }
24507 x6 := s6.Args[0]
24508 if x6.Op != OpPPC64MOVBZload {
24509 break
24510 }
24511 i6 := x6.AuxInt
24512 s := x6.Aux
24513 mem := x6.Args[1]
24514 p := x6.Args[0]
24515 o4 := o5.Args[1]
24516 if o4.Op != OpPPC64OR {
24517 break
24518 }
24519 if o4.Type != t {
24520 break
24521 }
24522 _ = o4.Args[1]
24523 s5 := o4.Args[0]
24524 if s5.Op != OpPPC64SLDconst {
24525 break
24526 }
24527 if s5.AuxInt != 16 {
24528 break
24529 }
24530 x5 := s5.Args[0]
24531 if x5.Op != OpPPC64MOVBZload {
24532 break
24533 }
24534 i5 := x5.AuxInt
24535 if x5.Aux != s {
24536 break
24537 }
24538 _ = x5.Args[1]
24539 if p != x5.Args[0] {
24540 break
24541 }
24542 if mem != x5.Args[1] {
24543 break
24544 }
24545 o3 := o4.Args[1]
24546 if o3.Op != OpPPC64OR {
24547 break
24548 }
24549 if o3.Type != t {
24550 break
24551 }
24552 _ = o3.Args[1]
24553 s0 := o3.Args[0]
24554 if s0.Op != OpPPC64SLDconst {
24555 break
24556 }
24557 if s0.AuxInt != 32 {
24558 break
24559 }
24560 x3 := s0.Args[0]
24561 if x3.Op != OpPPC64MOVWBRload {
24562 break
24563 }
24564 if x3.Type != t {
24565 break
24566 }
24567 _ = x3.Args[1]
24568 x3_0 := x3.Args[0]
24569 if x3_0.Op != OpPPC64MOVDaddr {
24570 break
24571 }
24572 if x3_0.Type != typ.Uintptr {
24573 break
24574 }
24575 i0 := x3_0.AuxInt
24576 if x3_0.Aux != s {
24577 break
24578 }
24579 if p != x3_0.Args[0] {
24580 break
24581 }
24582 if mem != x3.Args[1] {
24583 break
24584 }
24585 s4 := o3.Args[1]
24586 if s4.Op != OpPPC64SLDconst {
24587 break
24588 }
24589 if s4.AuxInt != 24 {
24590 break
24591 }
24592 x4 := s4.Args[0]
24593 if x4.Op != OpPPC64MOVBZload {
24594 break
24595 }
24596 i4 := x4.AuxInt
24597 if x4.Aux != s {
24598 break
24599 }
24600 _ = x4.Args[1]
24601 if p != x4.Args[0] {
24602 break
24603 }
24604 if mem != x4.Args[1] {
24605 break
24606 }
24607 x7 := v.Args[1]
24608 if x7.Op != OpPPC64MOVBZload {
24609 break
24610 }
24611 i7 := x7.AuxInt
24612 if x7.Aux != s {
24613 break
24614 }
24615 _ = x7.Args[1]
24616 if p != x7.Args[0] {
24617 break
24618 }
24619 if mem != x7.Args[1] {
24620 break
24621 }
24622 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24623 break
24624 }
24625 b = mergePoint(b, x3, x4, x5, x6, x7)
24626 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
24627 v.reset(OpCopy)
24628 v.AddArg(v0)
24629 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24630 v1.AuxInt = i0
24631 v1.Aux = s
24632 v1.AddArg(p)
24633 v0.AddArg(v1)
24634 v0.AddArg(mem)
24635 return true
24636 }
24637
24638
24639
24640 for {
24641 t := v.Type
24642 _ = v.Args[1]
24643 o5 := v.Args[0]
24644 if o5.Op != OpPPC64OR {
24645 break
24646 }
24647 if o5.Type != t {
24648 break
24649 }
24650 _ = o5.Args[1]
24651 s6 := o5.Args[0]
24652 if s6.Op != OpPPC64SLDconst {
24653 break
24654 }
24655 if s6.AuxInt != 8 {
24656 break
24657 }
24658 x6 := s6.Args[0]
24659 if x6.Op != OpPPC64MOVBZload {
24660 break
24661 }
24662 i6 := x6.AuxInt
24663 s := x6.Aux
24664 mem := x6.Args[1]
24665 p := x6.Args[0]
24666 o4 := o5.Args[1]
24667 if o4.Op != OpPPC64OR {
24668 break
24669 }
24670 if o4.Type != t {
24671 break
24672 }
24673 _ = o4.Args[1]
24674 o3 := o4.Args[0]
24675 if o3.Op != OpPPC64OR {
24676 break
24677 }
24678 if o3.Type != t {
24679 break
24680 }
24681 _ = o3.Args[1]
24682 s4 := o3.Args[0]
24683 if s4.Op != OpPPC64SLDconst {
24684 break
24685 }
24686 if s4.AuxInt != 24 {
24687 break
24688 }
24689 x4 := s4.Args[0]
24690 if x4.Op != OpPPC64MOVBZload {
24691 break
24692 }
24693 i4 := x4.AuxInt
24694 if x4.Aux != s {
24695 break
24696 }
24697 _ = x4.Args[1]
24698 if p != x4.Args[0] {
24699 break
24700 }
24701 if mem != x4.Args[1] {
24702 break
24703 }
24704 s0 := o3.Args[1]
24705 if s0.Op != OpPPC64SLDconst {
24706 break
24707 }
24708 if s0.AuxInt != 32 {
24709 break
24710 }
24711 x3 := s0.Args[0]
24712 if x3.Op != OpPPC64MOVWBRload {
24713 break
24714 }
24715 if x3.Type != t {
24716 break
24717 }
24718 _ = x3.Args[1]
24719 x3_0 := x3.Args[0]
24720 if x3_0.Op != OpPPC64MOVDaddr {
24721 break
24722 }
24723 if x3_0.Type != typ.Uintptr {
24724 break
24725 }
24726 i0 := x3_0.AuxInt
24727 if x3_0.Aux != s {
24728 break
24729 }
24730 if p != x3_0.Args[0] {
24731 break
24732 }
24733 if mem != x3.Args[1] {
24734 break
24735 }
24736 s5 := o4.Args[1]
24737 if s5.Op != OpPPC64SLDconst {
24738 break
24739 }
24740 if s5.AuxInt != 16 {
24741 break
24742 }
24743 x5 := s5.Args[0]
24744 if x5.Op != OpPPC64MOVBZload {
24745 break
24746 }
24747 i5 := x5.AuxInt
24748 if x5.Aux != s {
24749 break
24750 }
24751 _ = x5.Args[1]
24752 if p != x5.Args[0] {
24753 break
24754 }
24755 if mem != x5.Args[1] {
24756 break
24757 }
24758 x7 := v.Args[1]
24759 if x7.Op != OpPPC64MOVBZload {
24760 break
24761 }
24762 i7 := x7.AuxInt
24763 if x7.Aux != s {
24764 break
24765 }
24766 _ = x7.Args[1]
24767 if p != x7.Args[0] {
24768 break
24769 }
24770 if mem != x7.Args[1] {
24771 break
24772 }
24773 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24774 break
24775 }
24776 b = mergePoint(b, x3, x4, x5, x6, x7)
24777 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
24778 v.reset(OpCopy)
24779 v.AddArg(v0)
24780 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24781 v1.AuxInt = i0
24782 v1.Aux = s
24783 v1.AddArg(p)
24784 v0.AddArg(v1)
24785 v0.AddArg(mem)
24786 return true
24787 }
24788
24789
24790
24791 for {
24792 t := v.Type
24793 _ = v.Args[1]
24794 o5 := v.Args[0]
24795 if o5.Op != OpPPC64OR {
24796 break
24797 }
24798 if o5.Type != t {
24799 break
24800 }
24801 _ = o5.Args[1]
24802 s6 := o5.Args[0]
24803 if s6.Op != OpPPC64SLDconst {
24804 break
24805 }
24806 if s6.AuxInt != 8 {
24807 break
24808 }
24809 x6 := s6.Args[0]
24810 if x6.Op != OpPPC64MOVBZload {
24811 break
24812 }
24813 i6 := x6.AuxInt
24814 s := x6.Aux
24815 mem := x6.Args[1]
24816 p := x6.Args[0]
24817 o4 := o5.Args[1]
24818 if o4.Op != OpPPC64OR {
24819 break
24820 }
24821 if o4.Type != t {
24822 break
24823 }
24824 _ = o4.Args[1]
24825 o3 := o4.Args[0]
24826 if o3.Op != OpPPC64OR {
24827 break
24828 }
24829 if o3.Type != t {
24830 break
24831 }
24832 _ = o3.Args[1]
24833 s0 := o3.Args[0]
24834 if s0.Op != OpPPC64SLDconst {
24835 break
24836 }
24837 if s0.AuxInt != 32 {
24838 break
24839 }
24840 x3 := s0.Args[0]
24841 if x3.Op != OpPPC64MOVWBRload {
24842 break
24843 }
24844 if x3.Type != t {
24845 break
24846 }
24847 _ = x3.Args[1]
24848 x3_0 := x3.Args[0]
24849 if x3_0.Op != OpPPC64MOVDaddr {
24850 break
24851 }
24852 if x3_0.Type != typ.Uintptr {
24853 break
24854 }
24855 i0 := x3_0.AuxInt
24856 if x3_0.Aux != s {
24857 break
24858 }
24859 if p != x3_0.Args[0] {
24860 break
24861 }
24862 if mem != x3.Args[1] {
24863 break
24864 }
24865 s4 := o3.Args[1]
24866 if s4.Op != OpPPC64SLDconst {
24867 break
24868 }
24869 if s4.AuxInt != 24 {
24870 break
24871 }
24872 x4 := s4.Args[0]
24873 if x4.Op != OpPPC64MOVBZload {
24874 break
24875 }
24876 i4 := x4.AuxInt
24877 if x4.Aux != s {
24878 break
24879 }
24880 _ = x4.Args[1]
24881 if p != x4.Args[0] {
24882 break
24883 }
24884 if mem != x4.Args[1] {
24885 break
24886 }
24887 s5 := o4.Args[1]
24888 if s5.Op != OpPPC64SLDconst {
24889 break
24890 }
24891 if s5.AuxInt != 16 {
24892 break
24893 }
24894 x5 := s5.Args[0]
24895 if x5.Op != OpPPC64MOVBZload {
24896 break
24897 }
24898 i5 := x5.AuxInt
24899 if x5.Aux != s {
24900 break
24901 }
24902 _ = x5.Args[1]
24903 if p != x5.Args[0] {
24904 break
24905 }
24906 if mem != x5.Args[1] {
24907 break
24908 }
24909 x7 := v.Args[1]
24910 if x7.Op != OpPPC64MOVBZload {
24911 break
24912 }
24913 i7 := x7.AuxInt
24914 if x7.Aux != s {
24915 break
24916 }
24917 _ = x7.Args[1]
24918 if p != x7.Args[0] {
24919 break
24920 }
24921 if mem != x7.Args[1] {
24922 break
24923 }
24924 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
24925 break
24926 }
24927 b = mergePoint(b, x3, x4, x5, x6, x7)
24928 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
24929 v.reset(OpCopy)
24930 v.AddArg(v0)
24931 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
24932 v1.AuxInt = i0
24933 v1.Aux = s
24934 v1.AddArg(p)
24935 v0.AddArg(v1)
24936 v0.AddArg(mem)
24937 return true
24938 }
24939
24940
24941
24942 for {
24943 t := v.Type
24944 _ = v.Args[1]
24945 o5 := v.Args[0]
24946 if o5.Op != OpPPC64OR {
24947 break
24948 }
24949 if o5.Type != t {
24950 break
24951 }
24952 _ = o5.Args[1]
24953 o4 := o5.Args[0]
24954 if o4.Op != OpPPC64OR {
24955 break
24956 }
24957 if o4.Type != t {
24958 break
24959 }
24960 _ = o4.Args[1]
24961 s5 := o4.Args[0]
24962 if s5.Op != OpPPC64SLDconst {
24963 break
24964 }
24965 if s5.AuxInt != 16 {
24966 break
24967 }
24968 x5 := s5.Args[0]
24969 if x5.Op != OpPPC64MOVBZload {
24970 break
24971 }
24972 i5 := x5.AuxInt
24973 s := x5.Aux
24974 mem := x5.Args[1]
24975 p := x5.Args[0]
24976 o3 := o4.Args[1]
24977 if o3.Op != OpPPC64OR {
24978 break
24979 }
24980 if o3.Type != t {
24981 break
24982 }
24983 _ = o3.Args[1]
24984 s4 := o3.Args[0]
24985 if s4.Op != OpPPC64SLDconst {
24986 break
24987 }
24988 if s4.AuxInt != 24 {
24989 break
24990 }
24991 x4 := s4.Args[0]
24992 if x4.Op != OpPPC64MOVBZload {
24993 break
24994 }
24995 i4 := x4.AuxInt
24996 if x4.Aux != s {
24997 break
24998 }
24999 _ = x4.Args[1]
25000 if p != x4.Args[0] {
25001 break
25002 }
25003 if mem != x4.Args[1] {
25004 break
25005 }
25006 s0 := o3.Args[1]
25007 if s0.Op != OpPPC64SLDconst {
25008 break
25009 }
25010 if s0.AuxInt != 32 {
25011 break
25012 }
25013 x3 := s0.Args[0]
25014 if x3.Op != OpPPC64MOVWBRload {
25015 break
25016 }
25017 if x3.Type != t {
25018 break
25019 }
25020 _ = x3.Args[1]
25021 x3_0 := x3.Args[0]
25022 if x3_0.Op != OpPPC64MOVDaddr {
25023 break
25024 }
25025 if x3_0.Type != typ.Uintptr {
25026 break
25027 }
25028 i0 := x3_0.AuxInt
25029 if x3_0.Aux != s {
25030 break
25031 }
25032 if p != x3_0.Args[0] {
25033 break
25034 }
25035 if mem != x3.Args[1] {
25036 break
25037 }
25038 s6 := o5.Args[1]
25039 if s6.Op != OpPPC64SLDconst {
25040 break
25041 }
25042 if s6.AuxInt != 8 {
25043 break
25044 }
25045 x6 := s6.Args[0]
25046 if x6.Op != OpPPC64MOVBZload {
25047 break
25048 }
25049 i6 := x6.AuxInt
25050 if x6.Aux != s {
25051 break
25052 }
25053 _ = x6.Args[1]
25054 if p != x6.Args[0] {
25055 break
25056 }
25057 if mem != x6.Args[1] {
25058 break
25059 }
25060 x7 := v.Args[1]
25061 if x7.Op != OpPPC64MOVBZload {
25062 break
25063 }
25064 i7 := x7.AuxInt
25065 if x7.Aux != s {
25066 break
25067 }
25068 _ = x7.Args[1]
25069 if p != x7.Args[0] {
25070 break
25071 }
25072 if mem != x7.Args[1] {
25073 break
25074 }
25075 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
25076 break
25077 }
25078 b = mergePoint(b, x3, x4, x5, x6, x7)
25079 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
25080 v.reset(OpCopy)
25081 v.AddArg(v0)
25082 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
25083 v1.AuxInt = i0
25084 v1.Aux = s
25085 v1.AddArg(p)
25086 v0.AddArg(v1)
25087 v0.AddArg(mem)
25088 return true
25089 }
25090
25091
25092
25093 for {
25094 t := v.Type
25095 _ = v.Args[1]
25096 o5 := v.Args[0]
25097 if o5.Op != OpPPC64OR {
25098 break
25099 }
25100 if o5.Type != t {
25101 break
25102 }
25103 _ = o5.Args[1]
25104 o4 := o5.Args[0]
25105 if o4.Op != OpPPC64OR {
25106 break
25107 }
25108 if o4.Type != t {
25109 break
25110 }
25111 _ = o4.Args[1]
25112 s5 := o4.Args[0]
25113 if s5.Op != OpPPC64SLDconst {
25114 break
25115 }
25116 if s5.AuxInt != 16 {
25117 break
25118 }
25119 x5 := s5.Args[0]
25120 if x5.Op != OpPPC64MOVBZload {
25121 break
25122 }
25123 i5 := x5.AuxInt
25124 s := x5.Aux
25125 mem := x5.Args[1]
25126 p := x5.Args[0]
25127 o3 := o4.Args[1]
25128 if o3.Op != OpPPC64OR {
25129 break
25130 }
25131 if o3.Type != t {
25132 break
25133 }
25134 _ = o3.Args[1]
25135 s0 := o3.Args[0]
25136 if s0.Op != OpPPC64SLDconst {
25137 break
25138 }
25139 if s0.AuxInt != 32 {
25140 break
25141 }
25142 x3 := s0.Args[0]
25143 if x3.Op != OpPPC64MOVWBRload {
25144 break
25145 }
25146 if x3.Type != t {
25147 break
25148 }
25149 _ = x3.Args[1]
25150 x3_0 := x3.Args[0]
25151 if x3_0.Op != OpPPC64MOVDaddr {
25152 break
25153 }
25154 if x3_0.Type != typ.Uintptr {
25155 break
25156 }
25157 i0 := x3_0.AuxInt
25158 if x3_0.Aux != s {
25159 break
25160 }
25161 if p != x3_0.Args[0] {
25162 break
25163 }
25164 if mem != x3.Args[1] {
25165 break
25166 }
25167 s4 := o3.Args[1]
25168 if s4.Op != OpPPC64SLDconst {
25169 break
25170 }
25171 if s4.AuxInt != 24 {
25172 break
25173 }
25174 x4 := s4.Args[0]
25175 if x4.Op != OpPPC64MOVBZload {
25176 break
25177 }
25178 i4 := x4.AuxInt
25179 if x4.Aux != s {
25180 break
25181 }
25182 _ = x4.Args[1]
25183 if p != x4.Args[0] {
25184 break
25185 }
25186 if mem != x4.Args[1] {
25187 break
25188 }
25189 s6 := o5.Args[1]
25190 if s6.Op != OpPPC64SLDconst {
25191 break
25192 }
25193 if s6.AuxInt != 8 {
25194 break
25195 }
25196 x6 := s6.Args[0]
25197 if x6.Op != OpPPC64MOVBZload {
25198 break
25199 }
25200 i6 := x6.AuxInt
25201 if x6.Aux != s {
25202 break
25203 }
25204 _ = x6.Args[1]
25205 if p != x6.Args[0] {
25206 break
25207 }
25208 if mem != x6.Args[1] {
25209 break
25210 }
25211 x7 := v.Args[1]
25212 if x7.Op != OpPPC64MOVBZload {
25213 break
25214 }
25215 i7 := x7.AuxInt
25216 if x7.Aux != s {
25217 break
25218 }
25219 _ = x7.Args[1]
25220 if p != x7.Args[0] {
25221 break
25222 }
25223 if mem != x7.Args[1] {
25224 break
25225 }
25226 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
25227 break
25228 }
25229 b = mergePoint(b, x3, x4, x5, x6, x7)
25230 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
25231 v.reset(OpCopy)
25232 v.AddArg(v0)
25233 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
25234 v1.AuxInt = i0
25235 v1.Aux = s
25236 v1.AddArg(p)
25237 v0.AddArg(v1)
25238 v0.AddArg(mem)
25239 return true
25240 }
25241
25242
25243
25244 for {
25245 t := v.Type
25246 _ = v.Args[1]
25247 o5 := v.Args[0]
25248 if o5.Op != OpPPC64OR {
25249 break
25250 }
25251 if o5.Type != t {
25252 break
25253 }
25254 _ = o5.Args[1]
25255 o4 := o5.Args[0]
25256 if o4.Op != OpPPC64OR {
25257 break
25258 }
25259 if o4.Type != t {
25260 break
25261 }
25262 _ = o4.Args[1]
25263 o3 := o4.Args[0]
25264 if o3.Op != OpPPC64OR {
25265 break
25266 }
25267 if o3.Type != t {
25268 break
25269 }
25270 _ = o3.Args[1]
25271 s4 := o3.Args[0]
25272 if s4.Op != OpPPC64SLDconst {
25273 break
25274 }
25275 if s4.AuxInt != 24 {
25276 break
25277 }
25278 x4 := s4.Args[0]
25279 if x4.Op != OpPPC64MOVBZload {
25280 break
25281 }
25282 i4 := x4.AuxInt
25283 s := x4.Aux
25284 mem := x4.Args[1]
25285 p := x4.Args[0]
25286 s0 := o3.Args[1]
25287 if s0.Op != OpPPC64SLDconst {
25288 break
25289 }
25290 if s0.AuxInt != 32 {
25291 break
25292 }
25293 x3 := s0.Args[0]
25294 if x3.Op != OpPPC64MOVWBRload {
25295 break
25296 }
25297 if x3.Type != t {
25298 break
25299 }
25300 _ = x3.Args[1]
25301 x3_0 := x3.Args[0]
25302 if x3_0.Op != OpPPC64MOVDaddr {
25303 break
25304 }
25305 if x3_0.Type != typ.Uintptr {
25306 break
25307 }
25308 i0 := x3_0.AuxInt
25309 if x3_0.Aux != s {
25310 break
25311 }
25312 if p != x3_0.Args[0] {
25313 break
25314 }
25315 if mem != x3.Args[1] {
25316 break
25317 }
25318 s5 := o4.Args[1]
25319 if s5.Op != OpPPC64SLDconst {
25320 break
25321 }
25322 if s5.AuxInt != 16 {
25323 break
25324 }
25325 x5 := s5.Args[0]
25326 if x5.Op != OpPPC64MOVBZload {
25327 break
25328 }
25329 i5 := x5.AuxInt
25330 if x5.Aux != s {
25331 break
25332 }
25333 _ = x5.Args[1]
25334 if p != x5.Args[0] {
25335 break
25336 }
25337 if mem != x5.Args[1] {
25338 break
25339 }
25340 s6 := o5.Args[1]
25341 if s6.Op != OpPPC64SLDconst {
25342 break
25343 }
25344 if s6.AuxInt != 8 {
25345 break
25346 }
25347 x6 := s6.Args[0]
25348 if x6.Op != OpPPC64MOVBZload {
25349 break
25350 }
25351 i6 := x6.AuxInt
25352 if x6.Aux != s {
25353 break
25354 }
25355 _ = x6.Args[1]
25356 if p != x6.Args[0] {
25357 break
25358 }
25359 if mem != x6.Args[1] {
25360 break
25361 }
25362 x7 := v.Args[1]
25363 if x7.Op != OpPPC64MOVBZload {
25364 break
25365 }
25366 i7 := x7.AuxInt
25367 if x7.Aux != s {
25368 break
25369 }
25370 _ = x7.Args[1]
25371 if p != x7.Args[0] {
25372 break
25373 }
25374 if mem != x7.Args[1] {
25375 break
25376 }
25377 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
25378 break
25379 }
25380 b = mergePoint(b, x3, x4, x5, x6, x7)
25381 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
25382 v.reset(OpCopy)
25383 v.AddArg(v0)
25384 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
25385 v1.AuxInt = i0
25386 v1.Aux = s
25387 v1.AddArg(p)
25388 v0.AddArg(v1)
25389 v0.AddArg(mem)
25390 return true
25391 }
25392
25393
25394
25395 for {
25396 t := v.Type
25397 _ = v.Args[1]
25398 o5 := v.Args[0]
25399 if o5.Op != OpPPC64OR {
25400 break
25401 }
25402 if o5.Type != t {
25403 break
25404 }
25405 _ = o5.Args[1]
25406 o4 := o5.Args[0]
25407 if o4.Op != OpPPC64OR {
25408 break
25409 }
25410 if o4.Type != t {
25411 break
25412 }
25413 _ = o4.Args[1]
25414 o3 := o4.Args[0]
25415 if o3.Op != OpPPC64OR {
25416 break
25417 }
25418 if o3.Type != t {
25419 break
25420 }
25421 _ = o3.Args[1]
25422 s0 := o3.Args[0]
25423 if s0.Op != OpPPC64SLDconst {
25424 break
25425 }
25426 if s0.AuxInt != 32 {
25427 break
25428 }
25429 x3 := s0.Args[0]
25430 if x3.Op != OpPPC64MOVWBRload {
25431 break
25432 }
25433 if x3.Type != t {
25434 break
25435 }
25436 mem := x3.Args[1]
25437 x3_0 := x3.Args[0]
25438 if x3_0.Op != OpPPC64MOVDaddr {
25439 break
25440 }
25441 if x3_0.Type != typ.Uintptr {
25442 break
25443 }
25444 i0 := x3_0.AuxInt
25445 s := x3_0.Aux
25446 p := x3_0.Args[0]
25447 s4 := o3.Args[1]
25448 if s4.Op != OpPPC64SLDconst {
25449 break
25450 }
25451 if s4.AuxInt != 24 {
25452 break
25453 }
25454 x4 := s4.Args[0]
25455 if x4.Op != OpPPC64MOVBZload {
25456 break
25457 }
25458 i4 := x4.AuxInt
25459 if x4.Aux != s {
25460 break
25461 }
25462 _ = x4.Args[1]
25463 if p != x4.Args[0] {
25464 break
25465 }
25466 if mem != x4.Args[1] {
25467 break
25468 }
25469 s5 := o4.Args[1]
25470 if s5.Op != OpPPC64SLDconst {
25471 break
25472 }
25473 if s5.AuxInt != 16 {
25474 break
25475 }
25476 x5 := s5.Args[0]
25477 if x5.Op != OpPPC64MOVBZload {
25478 break
25479 }
25480 i5 := x5.AuxInt
25481 if x5.Aux != s {
25482 break
25483 }
25484 _ = x5.Args[1]
25485 if p != x5.Args[0] {
25486 break
25487 }
25488 if mem != x5.Args[1] {
25489 break
25490 }
25491 s6 := o5.Args[1]
25492 if s6.Op != OpPPC64SLDconst {
25493 break
25494 }
25495 if s6.AuxInt != 8 {
25496 break
25497 }
25498 x6 := s6.Args[0]
25499 if x6.Op != OpPPC64MOVBZload {
25500 break
25501 }
25502 i6 := x6.AuxInt
25503 if x6.Aux != s {
25504 break
25505 }
25506 _ = x6.Args[1]
25507 if p != x6.Args[0] {
25508 break
25509 }
25510 if mem != x6.Args[1] {
25511 break
25512 }
25513 x7 := v.Args[1]
25514 if x7.Op != OpPPC64MOVBZload {
25515 break
25516 }
25517 i7 := x7.AuxInt
25518 if x7.Aux != s {
25519 break
25520 }
25521 _ = x7.Args[1]
25522 if p != x7.Args[0] {
25523 break
25524 }
25525 if mem != x7.Args[1] {
25526 break
25527 }
25528 if !(!config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6)) {
25529 break
25530 }
25531 b = mergePoint(b, x3, x4, x5, x6, x7)
25532 v0 := b.NewValue0(x7.Pos, OpPPC64MOVDBRload, t)
25533 v.reset(OpCopy)
25534 v.AddArg(v0)
25535 v1 := b.NewValue0(x7.Pos, OpPPC64MOVDaddr, typ.Uintptr)
25536 v1.AuxInt = i0
25537 v1.Aux = s
25538 v1.AddArg(p)
25539 v0.AddArg(v1)
25540 v0.AddArg(mem)
25541 return true
25542 }
25543 return false
25544 }
25545 func rewriteValuePPC64_OpPPC64ORN_0(v *Value) bool {
25546
25547
25548
25549 for {
25550 _ = v.Args[1]
25551 x := v.Args[0]
25552 v_1 := v.Args[1]
25553 if v_1.Op != OpPPC64MOVDconst {
25554 break
25555 }
25556 if v_1.AuxInt != -1 {
25557 break
25558 }
25559 v.reset(OpCopy)
25560 v.Type = x.Type
25561 v.AddArg(x)
25562 return true
25563 }
25564 return false
25565 }
25566 func rewriteValuePPC64_OpPPC64ORconst_0(v *Value) bool {
25567
25568
25569
25570 for {
25571 c := v.AuxInt
25572 v_0 := v.Args[0]
25573 if v_0.Op != OpPPC64ORconst {
25574 break
25575 }
25576 d := v_0.AuxInt
25577 x := v_0.Args[0]
25578 v.reset(OpPPC64ORconst)
25579 v.AuxInt = c | d
25580 v.AddArg(x)
25581 return true
25582 }
25583
25584
25585
25586 for {
25587 if v.AuxInt != -1 {
25588 break
25589 }
25590 v.reset(OpPPC64MOVDconst)
25591 v.AuxInt = -1
25592 return true
25593 }
25594
25595
25596
25597 for {
25598 if v.AuxInt != 0 {
25599 break
25600 }
25601 x := v.Args[0]
25602 v.reset(OpCopy)
25603 v.Type = x.Type
25604 v.AddArg(x)
25605 return true
25606 }
25607 return false
25608 }
25609 func rewriteValuePPC64_OpPPC64ROTL_0(v *Value) bool {
25610
25611
25612
25613 for {
25614 _ = v.Args[1]
25615 x := v.Args[0]
25616 v_1 := v.Args[1]
25617 if v_1.Op != OpPPC64MOVDconst {
25618 break
25619 }
25620 c := v_1.AuxInt
25621 v.reset(OpPPC64ROTLconst)
25622 v.AuxInt = c & 63
25623 v.AddArg(x)
25624 return true
25625 }
25626 return false
25627 }
25628 func rewriteValuePPC64_OpPPC64ROTLW_0(v *Value) bool {
25629
25630
25631
25632 for {
25633 _ = v.Args[1]
25634 x := v.Args[0]
25635 v_1 := v.Args[1]
25636 if v_1.Op != OpPPC64MOVDconst {
25637 break
25638 }
25639 c := v_1.AuxInt
25640 v.reset(OpPPC64ROTLWconst)
25641 v.AuxInt = c & 31
25642 v.AddArg(x)
25643 return true
25644 }
25645 return false
25646 }
25647 func rewriteValuePPC64_OpPPC64SUB_0(v *Value) bool {
25648
25649
25650
25651 for {
25652 _ = v.Args[1]
25653 x := v.Args[0]
25654 v_1 := v.Args[1]
25655 if v_1.Op != OpPPC64MOVDconst {
25656 break
25657 }
25658 c := v_1.AuxInt
25659 if !(is32Bit(-c)) {
25660 break
25661 }
25662 v.reset(OpPPC64ADDconst)
25663 v.AuxInt = -c
25664 v.AddArg(x)
25665 return true
25666 }
25667 return false
25668 }
25669 func rewriteValuePPC64_OpPPC64XOR_0(v *Value) bool {
25670 b := v.Block
25671 typ := &b.Func.Config.Types
25672
25673
25674
25675 for {
25676 _ = v.Args[1]
25677 v_0 := v.Args[0]
25678 if v_0.Op != OpPPC64SLDconst {
25679 break
25680 }
25681 c := v_0.AuxInt
25682 x := v_0.Args[0]
25683 v_1 := v.Args[1]
25684 if v_1.Op != OpPPC64SRDconst {
25685 break
25686 }
25687 d := v_1.AuxInt
25688 if x != v_1.Args[0] {
25689 break
25690 }
25691 if !(d == 64-c) {
25692 break
25693 }
25694 v.reset(OpPPC64ROTLconst)
25695 v.AuxInt = c
25696 v.AddArg(x)
25697 return true
25698 }
25699
25700
25701
25702 for {
25703 _ = v.Args[1]
25704 v_0 := v.Args[0]
25705 if v_0.Op != OpPPC64SRDconst {
25706 break
25707 }
25708 d := v_0.AuxInt
25709 x := v_0.Args[0]
25710 v_1 := v.Args[1]
25711 if v_1.Op != OpPPC64SLDconst {
25712 break
25713 }
25714 c := v_1.AuxInt
25715 if x != v_1.Args[0] {
25716 break
25717 }
25718 if !(d == 64-c) {
25719 break
25720 }
25721 v.reset(OpPPC64ROTLconst)
25722 v.AuxInt = c
25723 v.AddArg(x)
25724 return true
25725 }
25726
25727
25728
25729 for {
25730 _ = v.Args[1]
25731 v_0 := v.Args[0]
25732 if v_0.Op != OpPPC64SLWconst {
25733 break
25734 }
25735 c := v_0.AuxInt
25736 x := v_0.Args[0]
25737 v_1 := v.Args[1]
25738 if v_1.Op != OpPPC64SRWconst {
25739 break
25740 }
25741 d := v_1.AuxInt
25742 if x != v_1.Args[0] {
25743 break
25744 }
25745 if !(d == 32-c) {
25746 break
25747 }
25748 v.reset(OpPPC64ROTLWconst)
25749 v.AuxInt = c
25750 v.AddArg(x)
25751 return true
25752 }
25753
25754
25755
25756 for {
25757 _ = v.Args[1]
25758 v_0 := v.Args[0]
25759 if v_0.Op != OpPPC64SRWconst {
25760 break
25761 }
25762 d := v_0.AuxInt
25763 x := v_0.Args[0]
25764 v_1 := v.Args[1]
25765 if v_1.Op != OpPPC64SLWconst {
25766 break
25767 }
25768 c := v_1.AuxInt
25769 if x != v_1.Args[0] {
25770 break
25771 }
25772 if !(d == 32-c) {
25773 break
25774 }
25775 v.reset(OpPPC64ROTLWconst)
25776 v.AuxInt = c
25777 v.AddArg(x)
25778 return true
25779 }
25780
25781
25782
25783 for {
25784 _ = v.Args[1]
25785 v_0 := v.Args[0]
25786 if v_0.Op != OpPPC64SLD {
25787 break
25788 }
25789 _ = v_0.Args[1]
25790 x := v_0.Args[0]
25791 v_0_1 := v_0.Args[1]
25792 if v_0_1.Op != OpPPC64ANDconst {
25793 break
25794 }
25795 if v_0_1.Type != typ.Int64 {
25796 break
25797 }
25798 if v_0_1.AuxInt != 63 {
25799 break
25800 }
25801 y := v_0_1.Args[0]
25802 v_1 := v.Args[1]
25803 if v_1.Op != OpPPC64SRD {
25804 break
25805 }
25806 _ = v_1.Args[1]
25807 if x != v_1.Args[0] {
25808 break
25809 }
25810 v_1_1 := v_1.Args[1]
25811 if v_1_1.Op != OpPPC64SUB {
25812 break
25813 }
25814 if v_1_1.Type != typ.UInt {
25815 break
25816 }
25817 _ = v_1_1.Args[1]
25818 v_1_1_0 := v_1_1.Args[0]
25819 if v_1_1_0.Op != OpPPC64MOVDconst {
25820 break
25821 }
25822 if v_1_1_0.AuxInt != 64 {
25823 break
25824 }
25825 v_1_1_1 := v_1_1.Args[1]
25826 if v_1_1_1.Op != OpPPC64ANDconst {
25827 break
25828 }
25829 if v_1_1_1.Type != typ.UInt {
25830 break
25831 }
25832 if v_1_1_1.AuxInt != 63 {
25833 break
25834 }
25835 if y != v_1_1_1.Args[0] {
25836 break
25837 }
25838 v.reset(OpPPC64ROTL)
25839 v.AddArg(x)
25840 v.AddArg(y)
25841 return true
25842 }
25843
25844
25845
25846 for {
25847 _ = v.Args[1]
25848 v_0 := v.Args[0]
25849 if v_0.Op != OpPPC64SRD {
25850 break
25851 }
25852 _ = v_0.Args[1]
25853 x := v_0.Args[0]
25854 v_0_1 := v_0.Args[1]
25855 if v_0_1.Op != OpPPC64SUB {
25856 break
25857 }
25858 if v_0_1.Type != typ.UInt {
25859 break
25860 }
25861 _ = v_0_1.Args[1]
25862 v_0_1_0 := v_0_1.Args[0]
25863 if v_0_1_0.Op != OpPPC64MOVDconst {
25864 break
25865 }
25866 if v_0_1_0.AuxInt != 64 {
25867 break
25868 }
25869 v_0_1_1 := v_0_1.Args[1]
25870 if v_0_1_1.Op != OpPPC64ANDconst {
25871 break
25872 }
25873 if v_0_1_1.Type != typ.UInt {
25874 break
25875 }
25876 if v_0_1_1.AuxInt != 63 {
25877 break
25878 }
25879 y := v_0_1_1.Args[0]
25880 v_1 := v.Args[1]
25881 if v_1.Op != OpPPC64SLD {
25882 break
25883 }
25884 _ = v_1.Args[1]
25885 if x != v_1.Args[0] {
25886 break
25887 }
25888 v_1_1 := v_1.Args[1]
25889 if v_1_1.Op != OpPPC64ANDconst {
25890 break
25891 }
25892 if v_1_1.Type != typ.Int64 {
25893 break
25894 }
25895 if v_1_1.AuxInt != 63 {
25896 break
25897 }
25898 if y != v_1_1.Args[0] {
25899 break
25900 }
25901 v.reset(OpPPC64ROTL)
25902 v.AddArg(x)
25903 v.AddArg(y)
25904 return true
25905 }
25906
25907
25908
25909 for {
25910 _ = v.Args[1]
25911 v_0 := v.Args[0]
25912 if v_0.Op != OpPPC64SLW {
25913 break
25914 }
25915 _ = v_0.Args[1]
25916 x := v_0.Args[0]
25917 v_0_1 := v_0.Args[1]
25918 if v_0_1.Op != OpPPC64ANDconst {
25919 break
25920 }
25921 if v_0_1.Type != typ.Int32 {
25922 break
25923 }
25924 if v_0_1.AuxInt != 31 {
25925 break
25926 }
25927 y := v_0_1.Args[0]
25928 v_1 := v.Args[1]
25929 if v_1.Op != OpPPC64SRW {
25930 break
25931 }
25932 _ = v_1.Args[1]
25933 if x != v_1.Args[0] {
25934 break
25935 }
25936 v_1_1 := v_1.Args[1]
25937 if v_1_1.Op != OpPPC64SUB {
25938 break
25939 }
25940 if v_1_1.Type != typ.UInt {
25941 break
25942 }
25943 _ = v_1_1.Args[1]
25944 v_1_1_0 := v_1_1.Args[0]
25945 if v_1_1_0.Op != OpPPC64MOVDconst {
25946 break
25947 }
25948 if v_1_1_0.AuxInt != 32 {
25949 break
25950 }
25951 v_1_1_1 := v_1_1.Args[1]
25952 if v_1_1_1.Op != OpPPC64ANDconst {
25953 break
25954 }
25955 if v_1_1_1.Type != typ.UInt {
25956 break
25957 }
25958 if v_1_1_1.AuxInt != 31 {
25959 break
25960 }
25961 if y != v_1_1_1.Args[0] {
25962 break
25963 }
25964 v.reset(OpPPC64ROTLW)
25965 v.AddArg(x)
25966 v.AddArg(y)
25967 return true
25968 }
25969
25970
25971
25972 for {
25973 _ = v.Args[1]
25974 v_0 := v.Args[0]
25975 if v_0.Op != OpPPC64SRW {
25976 break
25977 }
25978 _ = v_0.Args[1]
25979 x := v_0.Args[0]
25980 v_0_1 := v_0.Args[1]
25981 if v_0_1.Op != OpPPC64SUB {
25982 break
25983 }
25984 if v_0_1.Type != typ.UInt {
25985 break
25986 }
25987 _ = v_0_1.Args[1]
25988 v_0_1_0 := v_0_1.Args[0]
25989 if v_0_1_0.Op != OpPPC64MOVDconst {
25990 break
25991 }
25992 if v_0_1_0.AuxInt != 32 {
25993 break
25994 }
25995 v_0_1_1 := v_0_1.Args[1]
25996 if v_0_1_1.Op != OpPPC64ANDconst {
25997 break
25998 }
25999 if v_0_1_1.Type != typ.UInt {
26000 break
26001 }
26002 if v_0_1_1.AuxInt != 31 {
26003 break
26004 }
26005 y := v_0_1_1.Args[0]
26006 v_1 := v.Args[1]
26007 if v_1.Op != OpPPC64SLW {
26008 break
26009 }
26010 _ = v_1.Args[1]
26011 if x != v_1.Args[0] {
26012 break
26013 }
26014 v_1_1 := v_1.Args[1]
26015 if v_1_1.Op != OpPPC64ANDconst {
26016 break
26017 }
26018 if v_1_1.Type != typ.Int32 {
26019 break
26020 }
26021 if v_1_1.AuxInt != 31 {
26022 break
26023 }
26024 if y != v_1_1.Args[0] {
26025 break
26026 }
26027 v.reset(OpPPC64ROTLW)
26028 v.AddArg(x)
26029 v.AddArg(y)
26030 return true
26031 }
26032
26033
26034
26035 for {
26036 _ = v.Args[1]
26037 v_0 := v.Args[0]
26038 if v_0.Op != OpPPC64MOVDconst {
26039 break
26040 }
26041 c := v_0.AuxInt
26042 v_1 := v.Args[1]
26043 if v_1.Op != OpPPC64MOVDconst {
26044 break
26045 }
26046 d := v_1.AuxInt
26047 v.reset(OpPPC64MOVDconst)
26048 v.AuxInt = c ^ d
26049 return true
26050 }
26051
26052
26053
26054 for {
26055 _ = v.Args[1]
26056 v_0 := v.Args[0]
26057 if v_0.Op != OpPPC64MOVDconst {
26058 break
26059 }
26060 d := v_0.AuxInt
26061 v_1 := v.Args[1]
26062 if v_1.Op != OpPPC64MOVDconst {
26063 break
26064 }
26065 c := v_1.AuxInt
26066 v.reset(OpPPC64MOVDconst)
26067 v.AuxInt = c ^ d
26068 return true
26069 }
26070 return false
26071 }
26072 func rewriteValuePPC64_OpPPC64XOR_10(v *Value) bool {
26073
26074
26075
26076 for {
26077 _ = v.Args[1]
26078 x := v.Args[0]
26079 v_1 := v.Args[1]
26080 if v_1.Op != OpPPC64MOVDconst {
26081 break
26082 }
26083 c := v_1.AuxInt
26084 if !(isU32Bit(c)) {
26085 break
26086 }
26087 v.reset(OpPPC64XORconst)
26088 v.AuxInt = c
26089 v.AddArg(x)
26090 return true
26091 }
26092
26093
26094
26095 for {
26096 x := v.Args[1]
26097 v_0 := v.Args[0]
26098 if v_0.Op != OpPPC64MOVDconst {
26099 break
26100 }
26101 c := v_0.AuxInt
26102 if !(isU32Bit(c)) {
26103 break
26104 }
26105 v.reset(OpPPC64XORconst)
26106 v.AuxInt = c
26107 v.AddArg(x)
26108 return true
26109 }
26110 return false
26111 }
26112 func rewriteValuePPC64_OpPPC64XORconst_0(v *Value) bool {
26113
26114
26115
26116 for {
26117 c := v.AuxInt
26118 v_0 := v.Args[0]
26119 if v_0.Op != OpPPC64XORconst {
26120 break
26121 }
26122 d := v_0.AuxInt
26123 x := v_0.Args[0]
26124 v.reset(OpPPC64XORconst)
26125 v.AuxInt = c ^ d
26126 v.AddArg(x)
26127 return true
26128 }
26129
26130
26131
26132 for {
26133 if v.AuxInt != 0 {
26134 break
26135 }
26136 x := v.Args[0]
26137 v.reset(OpCopy)
26138 v.Type = x.Type
26139 v.AddArg(x)
26140 return true
26141 }
26142 return false
26143 }
26144 func rewriteValuePPC64_OpPanicBounds_0(v *Value) bool {
26145
26146
26147
26148 for {
26149 kind := v.AuxInt
26150 mem := v.Args[2]
26151 x := v.Args[0]
26152 y := v.Args[1]
26153 if !(boundsABI(kind) == 0) {
26154 break
26155 }
26156 v.reset(OpPPC64LoweredPanicBoundsA)
26157 v.AuxInt = kind
26158 v.AddArg(x)
26159 v.AddArg(y)
26160 v.AddArg(mem)
26161 return true
26162 }
26163
26164
26165
26166 for {
26167 kind := v.AuxInt
26168 mem := v.Args[2]
26169 x := v.Args[0]
26170 y := v.Args[1]
26171 if !(boundsABI(kind) == 1) {
26172 break
26173 }
26174 v.reset(OpPPC64LoweredPanicBoundsB)
26175 v.AuxInt = kind
26176 v.AddArg(x)
26177 v.AddArg(y)
26178 v.AddArg(mem)
26179 return true
26180 }
26181
26182
26183
26184 for {
26185 kind := v.AuxInt
26186 mem := v.Args[2]
26187 x := v.Args[0]
26188 y := v.Args[1]
26189 if !(boundsABI(kind) == 2) {
26190 break
26191 }
26192 v.reset(OpPPC64LoweredPanicBoundsC)
26193 v.AuxInt = kind
26194 v.AddArg(x)
26195 v.AddArg(y)
26196 v.AddArg(mem)
26197 return true
26198 }
26199 return false
26200 }
26201 func rewriteValuePPC64_OpPopCount16_0(v *Value) bool {
26202 b := v.Block
26203 typ := &b.Func.Config.Types
26204
26205
26206
26207 for {
26208 x := v.Args[0]
26209 v.reset(OpPPC64POPCNTW)
26210 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
26211 v0.AddArg(x)
26212 v.AddArg(v0)
26213 return true
26214 }
26215 }
26216 func rewriteValuePPC64_OpPopCount32_0(v *Value) bool {
26217 b := v.Block
26218 typ := &b.Func.Config.Types
26219
26220
26221
26222 for {
26223 x := v.Args[0]
26224 v.reset(OpPPC64POPCNTW)
26225 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64)
26226 v0.AddArg(x)
26227 v.AddArg(v0)
26228 return true
26229 }
26230 }
26231 func rewriteValuePPC64_OpPopCount64_0(v *Value) bool {
26232
26233
26234
26235 for {
26236 x := v.Args[0]
26237 v.reset(OpPPC64POPCNTD)
26238 v.AddArg(x)
26239 return true
26240 }
26241 }
26242 func rewriteValuePPC64_OpPopCount8_0(v *Value) bool {
26243 b := v.Block
26244 typ := &b.Func.Config.Types
26245
26246
26247
26248 for {
26249 x := v.Args[0]
26250 v.reset(OpPPC64POPCNTB)
26251 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
26252 v0.AddArg(x)
26253 v.AddArg(v0)
26254 return true
26255 }
26256 }
26257 func rewriteValuePPC64_OpRotateLeft16_0(v *Value) bool {
26258 b := v.Block
26259 typ := &b.Func.Config.Types
26260
26261
26262
26263 for {
26264 t := v.Type
26265 _ = v.Args[1]
26266 x := v.Args[0]
26267 v_1 := v.Args[1]
26268 if v_1.Op != OpPPC64MOVDconst {
26269 break
26270 }
26271 c := v_1.AuxInt
26272 v.reset(OpOr16)
26273 v0 := b.NewValue0(v.Pos, OpLsh16x64, t)
26274 v0.AddArg(x)
26275 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
26276 v1.AuxInt = c & 15
26277 v0.AddArg(v1)
26278 v.AddArg(v0)
26279 v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t)
26280 v2.AddArg(x)
26281 v3 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
26282 v3.AuxInt = -c & 15
26283 v2.AddArg(v3)
26284 v.AddArg(v2)
26285 return true
26286 }
26287 return false
26288 }
26289 func rewriteValuePPC64_OpRotateLeft32_0(v *Value) bool {
26290
26291
26292
26293 for {
26294 _ = v.Args[1]
26295 x := v.Args[0]
26296 v_1 := v.Args[1]
26297 if v_1.Op != OpPPC64MOVDconst {
26298 break
26299 }
26300 c := v_1.AuxInt
26301 v.reset(OpPPC64ROTLWconst)
26302 v.AuxInt = c & 31
26303 v.AddArg(x)
26304 return true
26305 }
26306
26307
26308
26309 for {
26310 y := v.Args[1]
26311 x := v.Args[0]
26312 v.reset(OpPPC64ROTLW)
26313 v.AddArg(x)
26314 v.AddArg(y)
26315 return true
26316 }
26317 }
26318 func rewriteValuePPC64_OpRotateLeft64_0(v *Value) bool {
26319
26320
26321
26322 for {
26323 _ = v.Args[1]
26324 x := v.Args[0]
26325 v_1 := v.Args[1]
26326 if v_1.Op != OpPPC64MOVDconst {
26327 break
26328 }
26329 c := v_1.AuxInt
26330 v.reset(OpPPC64ROTLconst)
26331 v.AuxInt = c & 63
26332 v.AddArg(x)
26333 return true
26334 }
26335
26336
26337
26338 for {
26339 y := v.Args[1]
26340 x := v.Args[0]
26341 v.reset(OpPPC64ROTL)
26342 v.AddArg(x)
26343 v.AddArg(y)
26344 return true
26345 }
26346 }
26347 func rewriteValuePPC64_OpRotateLeft8_0(v *Value) bool {
26348 b := v.Block
26349 typ := &b.Func.Config.Types
26350
26351
26352
26353 for {
26354 t := v.Type
26355 _ = v.Args[1]
26356 x := v.Args[0]
26357 v_1 := v.Args[1]
26358 if v_1.Op != OpPPC64MOVDconst {
26359 break
26360 }
26361 c := v_1.AuxInt
26362 v.reset(OpOr8)
26363 v0 := b.NewValue0(v.Pos, OpLsh8x64, t)
26364 v0.AddArg(x)
26365 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
26366 v1.AuxInt = c & 7
26367 v0.AddArg(v1)
26368 v.AddArg(v0)
26369 v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t)
26370 v2.AddArg(x)
26371 v3 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
26372 v3.AuxInt = -c & 7
26373 v2.AddArg(v3)
26374 v.AddArg(v2)
26375 return true
26376 }
26377 return false
26378 }
26379 func rewriteValuePPC64_OpRound_0(v *Value) bool {
26380
26381
26382
26383 for {
26384 x := v.Args[0]
26385 v.reset(OpPPC64FROUND)
26386 v.AddArg(x)
26387 return true
26388 }
26389 }
26390 func rewriteValuePPC64_OpRound32F_0(v *Value) bool {
26391
26392
26393
26394 for {
26395 x := v.Args[0]
26396 v.reset(OpPPC64LoweredRound32F)
26397 v.AddArg(x)
26398 return true
26399 }
26400 }
26401 func rewriteValuePPC64_OpRound64F_0(v *Value) bool {
26402
26403
26404
26405 for {
26406 x := v.Args[0]
26407 v.reset(OpPPC64LoweredRound64F)
26408 v.AddArg(x)
26409 return true
26410 }
26411 }
26412 func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool {
26413 b := v.Block
26414 typ := &b.Func.Config.Types
26415
26416
26417
26418 for {
26419 y := v.Args[1]
26420 x := v.Args[0]
26421 if !(shiftIsBounded(v)) {
26422 break
26423 }
26424 v.reset(OpPPC64SRW)
26425 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
26426 v0.AddArg(x)
26427 v.AddArg(v0)
26428 v.AddArg(y)
26429 return true
26430 }
26431
26432
26433
26434 for {
26435 y := v.Args[1]
26436 x := v.Args[0]
26437 v.reset(OpPPC64SRW)
26438 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26439 v0.AddArg(x)
26440 v.AddArg(v0)
26441 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26442 v1.AddArg(y)
26443 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26444 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26445 v3.AuxInt = -16
26446 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
26447 v4.AddArg(y)
26448 v3.AddArg(v4)
26449 v2.AddArg(v3)
26450 v1.AddArg(v2)
26451 v.AddArg(v1)
26452 return true
26453 }
26454 }
26455 func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool {
26456 b := v.Block
26457 typ := &b.Func.Config.Types
26458
26459
26460
26461 for {
26462 _ = v.Args[1]
26463 x := v.Args[0]
26464 v_1 := v.Args[1]
26465 if v_1.Op != OpConst64 {
26466 break
26467 }
26468 c := v_1.AuxInt
26469 if !(uint32(c) < 16) {
26470 break
26471 }
26472 v.reset(OpPPC64SRWconst)
26473 v.AuxInt = c
26474 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26475 v0.AddArg(x)
26476 v.AddArg(v0)
26477 return true
26478 }
26479
26480
26481
26482 for {
26483 _ = v.Args[1]
26484 x := v.Args[0]
26485 v_1 := v.Args[1]
26486 if v_1.Op != OpPPC64MOVDconst {
26487 break
26488 }
26489 c := v_1.AuxInt
26490 if !(uint32(c) < 16) {
26491 break
26492 }
26493 v.reset(OpPPC64SRWconst)
26494 v.AuxInt = c
26495 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26496 v0.AddArg(x)
26497 v.AddArg(v0)
26498 return true
26499 }
26500
26501
26502
26503 for {
26504 y := v.Args[1]
26505 x := v.Args[0]
26506 if !(shiftIsBounded(v)) {
26507 break
26508 }
26509 v.reset(OpPPC64SRW)
26510 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
26511 v0.AddArg(x)
26512 v.AddArg(v0)
26513 v.AddArg(y)
26514 return true
26515 }
26516
26517
26518
26519 for {
26520 y := v.Args[1]
26521 x := v.Args[0]
26522 v.reset(OpPPC64SRW)
26523 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26524 v0.AddArg(x)
26525 v.AddArg(v0)
26526 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26527 v1.AddArg(y)
26528 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26529 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26530 v3.AuxInt = -16
26531 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
26532 v4.AddArg(y)
26533 v3.AddArg(v4)
26534 v2.AddArg(v3)
26535 v1.AddArg(v2)
26536 v.AddArg(v1)
26537 return true
26538 }
26539 }
26540 func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool {
26541 b := v.Block
26542 typ := &b.Func.Config.Types
26543
26544
26545
26546 for {
26547 _ = v.Args[1]
26548 x := v.Args[0]
26549 v_1 := v.Args[1]
26550 if v_1.Op != OpConst64 {
26551 break
26552 }
26553 c := v_1.AuxInt
26554 if !(uint64(c) < 16) {
26555 break
26556 }
26557 v.reset(OpPPC64SRWconst)
26558 v.AuxInt = c
26559 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26560 v0.AddArg(x)
26561 v.AddArg(v0)
26562 return true
26563 }
26564
26565
26566
26567 for {
26568 _ = v.Args[1]
26569 v_1 := v.Args[1]
26570 if v_1.Op != OpConst64 {
26571 break
26572 }
26573 c := v_1.AuxInt
26574 if !(uint64(c) >= 16) {
26575 break
26576 }
26577 v.reset(OpPPC64MOVDconst)
26578 v.AuxInt = 0
26579 return true
26580 }
26581
26582
26583
26584 for {
26585 _ = v.Args[1]
26586 x := v.Args[0]
26587 v_1 := v.Args[1]
26588 if v_1.Op != OpPPC64MOVDconst {
26589 break
26590 }
26591 c := v_1.AuxInt
26592 if !(uint64(c) < 16) {
26593 break
26594 }
26595 v.reset(OpPPC64SRWconst)
26596 v.AuxInt = c
26597 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26598 v0.AddArg(x)
26599 v.AddArg(v0)
26600 return true
26601 }
26602
26603
26604
26605 for {
26606 y := v.Args[1]
26607 x := v.Args[0]
26608 if !(shiftIsBounded(v)) {
26609 break
26610 }
26611 v.reset(OpPPC64SRW)
26612 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
26613 v0.AddArg(x)
26614 v.AddArg(v0)
26615 v.AddArg(y)
26616 return true
26617 }
26618
26619
26620
26621 for {
26622 y := v.Args[1]
26623 x := v.Args[0]
26624 v.reset(OpPPC64SRW)
26625 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26626 v0.AddArg(x)
26627 v.AddArg(v0)
26628 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26629 v1.AddArg(y)
26630 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26631 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26632 v3.AuxInt = -16
26633 v3.AddArg(y)
26634 v2.AddArg(v3)
26635 v1.AddArg(v2)
26636 v.AddArg(v1)
26637 return true
26638 }
26639 }
26640 func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool {
26641 b := v.Block
26642 typ := &b.Func.Config.Types
26643
26644
26645
26646 for {
26647 y := v.Args[1]
26648 x := v.Args[0]
26649 if !(shiftIsBounded(v)) {
26650 break
26651 }
26652 v.reset(OpPPC64SRW)
26653 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64)
26654 v0.AddArg(x)
26655 v.AddArg(v0)
26656 v.AddArg(y)
26657 return true
26658 }
26659
26660
26661
26662 for {
26663 y := v.Args[1]
26664 x := v.Args[0]
26665 v.reset(OpPPC64SRW)
26666 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
26667 v0.AddArg(x)
26668 v.AddArg(v0)
26669 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26670 v1.AddArg(y)
26671 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26672 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26673 v3.AuxInt = -16
26674 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
26675 v4.AddArg(y)
26676 v3.AddArg(v4)
26677 v2.AddArg(v3)
26678 v1.AddArg(v2)
26679 v.AddArg(v1)
26680 return true
26681 }
26682 }
26683 func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool {
26684 b := v.Block
26685 typ := &b.Func.Config.Types
26686
26687
26688
26689 for {
26690 y := v.Args[1]
26691 x := v.Args[0]
26692 if !(shiftIsBounded(v)) {
26693 break
26694 }
26695 v.reset(OpPPC64SRAW)
26696 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
26697 v0.AddArg(x)
26698 v.AddArg(v0)
26699 v.AddArg(y)
26700 return true
26701 }
26702
26703
26704
26705 for {
26706 y := v.Args[1]
26707 x := v.Args[0]
26708 v.reset(OpPPC64SRAW)
26709 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26710 v0.AddArg(x)
26711 v.AddArg(v0)
26712 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26713 v1.AddArg(y)
26714 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26715 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26716 v3.AuxInt = -16
26717 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
26718 v4.AddArg(y)
26719 v3.AddArg(v4)
26720 v2.AddArg(v3)
26721 v1.AddArg(v2)
26722 v.AddArg(v1)
26723 return true
26724 }
26725 }
26726 func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool {
26727 b := v.Block
26728 typ := &b.Func.Config.Types
26729
26730
26731
26732 for {
26733 _ = v.Args[1]
26734 x := v.Args[0]
26735 v_1 := v.Args[1]
26736 if v_1.Op != OpConst64 {
26737 break
26738 }
26739 c := v_1.AuxInt
26740 if !(uint32(c) < 16) {
26741 break
26742 }
26743 v.reset(OpPPC64SRAWconst)
26744 v.AuxInt = c
26745 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26746 v0.AddArg(x)
26747 v.AddArg(v0)
26748 return true
26749 }
26750
26751
26752
26753 for {
26754 _ = v.Args[1]
26755 x := v.Args[0]
26756 v_1 := v.Args[1]
26757 if v_1.Op != OpPPC64MOVDconst {
26758 break
26759 }
26760 c := v_1.AuxInt
26761 if !(uint32(c) < 16) {
26762 break
26763 }
26764 v.reset(OpPPC64SRAWconst)
26765 v.AuxInt = c
26766 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26767 v0.AddArg(x)
26768 v.AddArg(v0)
26769 return true
26770 }
26771
26772
26773
26774 for {
26775 y := v.Args[1]
26776 x := v.Args[0]
26777 if !(shiftIsBounded(v)) {
26778 break
26779 }
26780 v.reset(OpPPC64SRAW)
26781 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
26782 v0.AddArg(x)
26783 v.AddArg(v0)
26784 v.AddArg(y)
26785 return true
26786 }
26787
26788
26789
26790 for {
26791 y := v.Args[1]
26792 x := v.Args[0]
26793 v.reset(OpPPC64SRAW)
26794 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26795 v0.AddArg(x)
26796 v.AddArg(v0)
26797 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26798 v1.AddArg(y)
26799 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26800 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26801 v3.AuxInt = -16
26802 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
26803 v4.AddArg(y)
26804 v3.AddArg(v4)
26805 v2.AddArg(v3)
26806 v1.AddArg(v2)
26807 v.AddArg(v1)
26808 return true
26809 }
26810 }
26811 func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool {
26812 b := v.Block
26813 typ := &b.Func.Config.Types
26814
26815
26816
26817 for {
26818 _ = v.Args[1]
26819 x := v.Args[0]
26820 v_1 := v.Args[1]
26821 if v_1.Op != OpConst64 {
26822 break
26823 }
26824 c := v_1.AuxInt
26825 if !(uint64(c) < 16) {
26826 break
26827 }
26828 v.reset(OpPPC64SRAWconst)
26829 v.AuxInt = c
26830 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26831 v0.AddArg(x)
26832 v.AddArg(v0)
26833 return true
26834 }
26835
26836
26837
26838 for {
26839 _ = v.Args[1]
26840 x := v.Args[0]
26841 v_1 := v.Args[1]
26842 if v_1.Op != OpConst64 {
26843 break
26844 }
26845 c := v_1.AuxInt
26846 if !(uint64(c) >= 16) {
26847 break
26848 }
26849 v.reset(OpPPC64SRAWconst)
26850 v.AuxInt = 63
26851 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26852 v0.AddArg(x)
26853 v.AddArg(v0)
26854 return true
26855 }
26856
26857
26858
26859 for {
26860 _ = v.Args[1]
26861 x := v.Args[0]
26862 v_1 := v.Args[1]
26863 if v_1.Op != OpPPC64MOVDconst {
26864 break
26865 }
26866 c := v_1.AuxInt
26867 if !(uint64(c) < 16) {
26868 break
26869 }
26870 v.reset(OpPPC64SRAWconst)
26871 v.AuxInt = c
26872 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26873 v0.AddArg(x)
26874 v.AddArg(v0)
26875 return true
26876 }
26877
26878
26879
26880 for {
26881 y := v.Args[1]
26882 x := v.Args[0]
26883 if !(shiftIsBounded(v)) {
26884 break
26885 }
26886 v.reset(OpPPC64SRAW)
26887 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
26888 v0.AddArg(x)
26889 v.AddArg(v0)
26890 v.AddArg(y)
26891 return true
26892 }
26893
26894
26895
26896 for {
26897 y := v.Args[1]
26898 x := v.Args[0]
26899 v.reset(OpPPC64SRAW)
26900 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26901 v0.AddArg(x)
26902 v.AddArg(v0)
26903 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26904 v1.AddArg(y)
26905 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26906 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26907 v3.AuxInt = -16
26908 v3.AddArg(y)
26909 v2.AddArg(v3)
26910 v1.AddArg(v2)
26911 v.AddArg(v1)
26912 return true
26913 }
26914 }
26915 func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool {
26916 b := v.Block
26917 typ := &b.Func.Config.Types
26918
26919
26920
26921 for {
26922 y := v.Args[1]
26923 x := v.Args[0]
26924 if !(shiftIsBounded(v)) {
26925 break
26926 }
26927 v.reset(OpPPC64SRAW)
26928 v0 := b.NewValue0(v.Pos, OpPPC64MOVHreg, typ.Int64)
26929 v0.AddArg(x)
26930 v.AddArg(v0)
26931 v.AddArg(y)
26932 return true
26933 }
26934
26935
26936
26937 for {
26938 y := v.Args[1]
26939 x := v.Args[0]
26940 v.reset(OpPPC64SRAW)
26941 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
26942 v0.AddArg(x)
26943 v.AddArg(v0)
26944 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26945 v1.AddArg(y)
26946 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26947 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26948 v3.AuxInt = -16
26949 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
26950 v4.AddArg(y)
26951 v3.AddArg(v4)
26952 v2.AddArg(v3)
26953 v1.AddArg(v2)
26954 v.AddArg(v1)
26955 return true
26956 }
26957 }
26958 func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool {
26959 b := v.Block
26960 typ := &b.Func.Config.Types
26961
26962
26963
26964 for {
26965 y := v.Args[1]
26966 x := v.Args[0]
26967 if !(shiftIsBounded(v)) {
26968 break
26969 }
26970 v.reset(OpPPC64SRW)
26971 v.AddArg(x)
26972 v.AddArg(y)
26973 return true
26974 }
26975
26976
26977
26978 for {
26979 y := v.Args[1]
26980 x := v.Args[0]
26981 v.reset(OpPPC64SRW)
26982 v.AddArg(x)
26983 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
26984 v0.AddArg(y)
26985 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
26986 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
26987 v2.AuxInt = -32
26988 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
26989 v3.AddArg(y)
26990 v2.AddArg(v3)
26991 v1.AddArg(v2)
26992 v0.AddArg(v1)
26993 v.AddArg(v0)
26994 return true
26995 }
26996 }
26997 func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool {
26998 b := v.Block
26999 typ := &b.Func.Config.Types
27000
27001
27002
27003 for {
27004 _ = v.Args[1]
27005 x := v.Args[0]
27006 v_1 := v.Args[1]
27007 if v_1.Op != OpConst64 {
27008 break
27009 }
27010 c := v_1.AuxInt
27011 if !(uint32(c) < 32) {
27012 break
27013 }
27014 v.reset(OpPPC64SRWconst)
27015 v.AuxInt = c
27016 v.AddArg(x)
27017 return true
27018 }
27019
27020
27021
27022 for {
27023 _ = v.Args[1]
27024 x := v.Args[0]
27025 v_1 := v.Args[1]
27026 if v_1.Op != OpPPC64MOVDconst {
27027 break
27028 }
27029 c := v_1.AuxInt
27030 if !(uint32(c) < 32) {
27031 break
27032 }
27033 v.reset(OpPPC64SRWconst)
27034 v.AuxInt = c
27035 v.AddArg(x)
27036 return true
27037 }
27038
27039
27040
27041 for {
27042 y := v.Args[1]
27043 x := v.Args[0]
27044 if !(shiftIsBounded(v)) {
27045 break
27046 }
27047 v.reset(OpPPC64SRW)
27048 v.AddArg(x)
27049 v.AddArg(y)
27050 return true
27051 }
27052
27053
27054
27055 for {
27056 y := v.Args[1]
27057 x := v.Args[0]
27058 v.reset(OpPPC64SRW)
27059 v.AddArg(x)
27060 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27061 v0.AddArg(y)
27062 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27063 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27064 v2.AuxInt = -32
27065 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
27066 v3.AddArg(y)
27067 v2.AddArg(v3)
27068 v1.AddArg(v2)
27069 v0.AddArg(v1)
27070 v.AddArg(v0)
27071 return true
27072 }
27073 }
27074 func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool {
27075 b := v.Block
27076 typ := &b.Func.Config.Types
27077
27078
27079
27080 for {
27081 _ = v.Args[1]
27082 x := v.Args[0]
27083 v_1 := v.Args[1]
27084 if v_1.Op != OpConst64 {
27085 break
27086 }
27087 c := v_1.AuxInt
27088 if !(uint64(c) < 32) {
27089 break
27090 }
27091 v.reset(OpPPC64SRWconst)
27092 v.AuxInt = c
27093 v.AddArg(x)
27094 return true
27095 }
27096
27097
27098
27099 for {
27100 _ = v.Args[1]
27101 v_1 := v.Args[1]
27102 if v_1.Op != OpConst64 {
27103 break
27104 }
27105 c := v_1.AuxInt
27106 if !(uint64(c) >= 32) {
27107 break
27108 }
27109 v.reset(OpPPC64MOVDconst)
27110 v.AuxInt = 0
27111 return true
27112 }
27113
27114
27115
27116 for {
27117 _ = v.Args[1]
27118 x := v.Args[0]
27119 v_1 := v.Args[1]
27120 if v_1.Op != OpPPC64MOVDconst {
27121 break
27122 }
27123 c := v_1.AuxInt
27124 if !(uint64(c) < 32) {
27125 break
27126 }
27127 v.reset(OpPPC64SRWconst)
27128 v.AuxInt = c
27129 v.AddArg(x)
27130 return true
27131 }
27132
27133
27134
27135 for {
27136 y := v.Args[1]
27137 x := v.Args[0]
27138 if !(shiftIsBounded(v)) {
27139 break
27140 }
27141 v.reset(OpPPC64SRW)
27142 v.AddArg(x)
27143 v.AddArg(y)
27144 return true
27145 }
27146
27147
27148
27149 for {
27150 _ = v.Args[1]
27151 x := v.Args[0]
27152 v_1 := v.Args[1]
27153 if v_1.Op != OpPPC64AND {
27154 break
27155 }
27156 _ = v_1.Args[1]
27157 y := v_1.Args[0]
27158 v_1_1 := v_1.Args[1]
27159 if v_1_1.Op != OpPPC64MOVDconst {
27160 break
27161 }
27162 if v_1_1.AuxInt != 31 {
27163 break
27164 }
27165 v.reset(OpPPC64SRW)
27166 v.AddArg(x)
27167 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
27168 v0.AuxInt = 31
27169 v0.AddArg(y)
27170 v.AddArg(v0)
27171 return true
27172 }
27173
27174
27175
27176 for {
27177 _ = v.Args[1]
27178 x := v.Args[0]
27179 v_1 := v.Args[1]
27180 if v_1.Op != OpPPC64AND {
27181 break
27182 }
27183 y := v_1.Args[1]
27184 v_1_0 := v_1.Args[0]
27185 if v_1_0.Op != OpPPC64MOVDconst {
27186 break
27187 }
27188 if v_1_0.AuxInt != 31 {
27189 break
27190 }
27191 v.reset(OpPPC64SRW)
27192 v.AddArg(x)
27193 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
27194 v0.AuxInt = 31
27195 v0.AddArg(y)
27196 v.AddArg(v0)
27197 return true
27198 }
27199
27200
27201
27202 for {
27203 _ = v.Args[1]
27204 x := v.Args[0]
27205 v_1 := v.Args[1]
27206 if v_1.Op != OpPPC64ANDconst {
27207 break
27208 }
27209 if v_1.Type != typ.UInt {
27210 break
27211 }
27212 if v_1.AuxInt != 31 {
27213 break
27214 }
27215 y := v_1.Args[0]
27216 v.reset(OpPPC64SRW)
27217 v.AddArg(x)
27218 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27219 v0.AuxInt = 31
27220 v0.AddArg(y)
27221 v.AddArg(v0)
27222 return true
27223 }
27224
27225
27226
27227 for {
27228 _ = v.Args[1]
27229 x := v.Args[0]
27230 v_1 := v.Args[1]
27231 if v_1.Op != OpPPC64SUB {
27232 break
27233 }
27234 if v_1.Type != typ.UInt {
27235 break
27236 }
27237 _ = v_1.Args[1]
27238 v_1_0 := v_1.Args[0]
27239 if v_1_0.Op != OpPPC64MOVDconst {
27240 break
27241 }
27242 if v_1_0.AuxInt != 32 {
27243 break
27244 }
27245 v_1_1 := v_1.Args[1]
27246 if v_1_1.Op != OpPPC64ANDconst {
27247 break
27248 }
27249 if v_1_1.Type != typ.UInt {
27250 break
27251 }
27252 if v_1_1.AuxInt != 31 {
27253 break
27254 }
27255 y := v_1_1.Args[0]
27256 v.reset(OpPPC64SRW)
27257 v.AddArg(x)
27258 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27259 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27260 v1.AuxInt = 32
27261 v0.AddArg(v1)
27262 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27263 v2.AuxInt = 31
27264 v2.AddArg(y)
27265 v0.AddArg(v2)
27266 v.AddArg(v0)
27267 return true
27268 }
27269
27270
27271
27272 for {
27273 _ = v.Args[1]
27274 x := v.Args[0]
27275 v_1 := v.Args[1]
27276 if v_1.Op != OpPPC64SUB {
27277 break
27278 }
27279 if v_1.Type != typ.UInt {
27280 break
27281 }
27282 _ = v_1.Args[1]
27283 v_1_0 := v_1.Args[0]
27284 if v_1_0.Op != OpPPC64MOVDconst {
27285 break
27286 }
27287 if v_1_0.AuxInt != 32 {
27288 break
27289 }
27290 v_1_1 := v_1.Args[1]
27291 if v_1_1.Op != OpPPC64AND {
27292 break
27293 }
27294 if v_1_1.Type != typ.UInt {
27295 break
27296 }
27297 _ = v_1_1.Args[1]
27298 y := v_1_1.Args[0]
27299 v_1_1_1 := v_1_1.Args[1]
27300 if v_1_1_1.Op != OpPPC64MOVDconst {
27301 break
27302 }
27303 if v_1_1_1.AuxInt != 31 {
27304 break
27305 }
27306 v.reset(OpPPC64SRW)
27307 v.AddArg(x)
27308 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27309 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27310 v1.AuxInt = 32
27311 v0.AddArg(v1)
27312 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27313 v2.AuxInt = 31
27314 v2.AddArg(y)
27315 v0.AddArg(v2)
27316 v.AddArg(v0)
27317 return true
27318 }
27319
27320
27321
27322 for {
27323 _ = v.Args[1]
27324 x := v.Args[0]
27325 v_1 := v.Args[1]
27326 if v_1.Op != OpPPC64SUB {
27327 break
27328 }
27329 if v_1.Type != typ.UInt {
27330 break
27331 }
27332 _ = v_1.Args[1]
27333 v_1_0 := v_1.Args[0]
27334 if v_1_0.Op != OpPPC64MOVDconst {
27335 break
27336 }
27337 if v_1_0.AuxInt != 32 {
27338 break
27339 }
27340 v_1_1 := v_1.Args[1]
27341 if v_1_1.Op != OpPPC64AND {
27342 break
27343 }
27344 if v_1_1.Type != typ.UInt {
27345 break
27346 }
27347 y := v_1_1.Args[1]
27348 v_1_1_0 := v_1_1.Args[0]
27349 if v_1_1_0.Op != OpPPC64MOVDconst {
27350 break
27351 }
27352 if v_1_1_0.AuxInt != 31 {
27353 break
27354 }
27355 v.reset(OpPPC64SRW)
27356 v.AddArg(x)
27357 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27358 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27359 v1.AuxInt = 32
27360 v0.AddArg(v1)
27361 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27362 v2.AuxInt = 31
27363 v2.AddArg(y)
27364 v0.AddArg(v2)
27365 v.AddArg(v0)
27366 return true
27367 }
27368 return false
27369 }
27370 func rewriteValuePPC64_OpRsh32Ux64_10(v *Value) bool {
27371 b := v.Block
27372 typ := &b.Func.Config.Types
27373
27374
27375
27376 for {
27377 y := v.Args[1]
27378 x := v.Args[0]
27379 v.reset(OpPPC64SRW)
27380 v.AddArg(x)
27381 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27382 v0.AddArg(y)
27383 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27384 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27385 v2.AuxInt = -32
27386 v2.AddArg(y)
27387 v1.AddArg(v2)
27388 v0.AddArg(v1)
27389 v.AddArg(v0)
27390 return true
27391 }
27392 }
27393 func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool {
27394 b := v.Block
27395 typ := &b.Func.Config.Types
27396
27397
27398
27399 for {
27400 y := v.Args[1]
27401 x := v.Args[0]
27402 if !(shiftIsBounded(v)) {
27403 break
27404 }
27405 v.reset(OpPPC64SRW)
27406 v.AddArg(x)
27407 v.AddArg(y)
27408 return true
27409 }
27410
27411
27412
27413 for {
27414 y := v.Args[1]
27415 x := v.Args[0]
27416 v.reset(OpPPC64SRW)
27417 v.AddArg(x)
27418 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27419 v0.AddArg(y)
27420 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27421 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27422 v2.AuxInt = -32
27423 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
27424 v3.AddArg(y)
27425 v2.AddArg(v3)
27426 v1.AddArg(v2)
27427 v0.AddArg(v1)
27428 v.AddArg(v0)
27429 return true
27430 }
27431 }
27432 func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool {
27433 b := v.Block
27434 typ := &b.Func.Config.Types
27435
27436
27437
27438 for {
27439 y := v.Args[1]
27440 x := v.Args[0]
27441 if !(shiftIsBounded(v)) {
27442 break
27443 }
27444 v.reset(OpPPC64SRAW)
27445 v.AddArg(x)
27446 v.AddArg(y)
27447 return true
27448 }
27449
27450
27451
27452 for {
27453 y := v.Args[1]
27454 x := v.Args[0]
27455 v.reset(OpPPC64SRAW)
27456 v.AddArg(x)
27457 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27458 v0.AddArg(y)
27459 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27460 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27461 v2.AuxInt = -32
27462 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
27463 v3.AddArg(y)
27464 v2.AddArg(v3)
27465 v1.AddArg(v2)
27466 v0.AddArg(v1)
27467 v.AddArg(v0)
27468 return true
27469 }
27470 }
27471 func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool {
27472 b := v.Block
27473 typ := &b.Func.Config.Types
27474
27475
27476
27477 for {
27478 _ = v.Args[1]
27479 x := v.Args[0]
27480 v_1 := v.Args[1]
27481 if v_1.Op != OpConst64 {
27482 break
27483 }
27484 c := v_1.AuxInt
27485 if !(uint32(c) < 32) {
27486 break
27487 }
27488 v.reset(OpPPC64SRAWconst)
27489 v.AuxInt = c
27490 v.AddArg(x)
27491 return true
27492 }
27493
27494
27495
27496 for {
27497 _ = v.Args[1]
27498 x := v.Args[0]
27499 v_1 := v.Args[1]
27500 if v_1.Op != OpPPC64MOVDconst {
27501 break
27502 }
27503 c := v_1.AuxInt
27504 if !(uint32(c) < 32) {
27505 break
27506 }
27507 v.reset(OpPPC64SRAWconst)
27508 v.AuxInt = c
27509 v.AddArg(x)
27510 return true
27511 }
27512
27513
27514
27515 for {
27516 y := v.Args[1]
27517 x := v.Args[0]
27518 if !(shiftIsBounded(v)) {
27519 break
27520 }
27521 v.reset(OpPPC64SRAW)
27522 v.AddArg(x)
27523 v.AddArg(y)
27524 return true
27525 }
27526
27527
27528
27529 for {
27530 y := v.Args[1]
27531 x := v.Args[0]
27532 v.reset(OpPPC64SRAW)
27533 v.AddArg(x)
27534 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27535 v0.AddArg(y)
27536 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27537 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27538 v2.AuxInt = -32
27539 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
27540 v3.AddArg(y)
27541 v2.AddArg(v3)
27542 v1.AddArg(v2)
27543 v0.AddArg(v1)
27544 v.AddArg(v0)
27545 return true
27546 }
27547 }
27548 func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool {
27549 b := v.Block
27550 typ := &b.Func.Config.Types
27551
27552
27553
27554 for {
27555 _ = v.Args[1]
27556 x := v.Args[0]
27557 v_1 := v.Args[1]
27558 if v_1.Op != OpConst64 {
27559 break
27560 }
27561 c := v_1.AuxInt
27562 if !(uint64(c) < 32) {
27563 break
27564 }
27565 v.reset(OpPPC64SRAWconst)
27566 v.AuxInt = c
27567 v.AddArg(x)
27568 return true
27569 }
27570
27571
27572
27573 for {
27574 _ = v.Args[1]
27575 x := v.Args[0]
27576 v_1 := v.Args[1]
27577 if v_1.Op != OpConst64 {
27578 break
27579 }
27580 c := v_1.AuxInt
27581 if !(uint64(c) >= 32) {
27582 break
27583 }
27584 v.reset(OpPPC64SRAWconst)
27585 v.AuxInt = 63
27586 v.AddArg(x)
27587 return true
27588 }
27589
27590
27591
27592 for {
27593 _ = v.Args[1]
27594 x := v.Args[0]
27595 v_1 := v.Args[1]
27596 if v_1.Op != OpPPC64MOVDconst {
27597 break
27598 }
27599 c := v_1.AuxInt
27600 if !(uint64(c) < 32) {
27601 break
27602 }
27603 v.reset(OpPPC64SRAWconst)
27604 v.AuxInt = c
27605 v.AddArg(x)
27606 return true
27607 }
27608
27609
27610
27611 for {
27612 y := v.Args[1]
27613 x := v.Args[0]
27614 if !(shiftIsBounded(v)) {
27615 break
27616 }
27617 v.reset(OpPPC64SRAW)
27618 v.AddArg(x)
27619 v.AddArg(y)
27620 return true
27621 }
27622
27623
27624
27625 for {
27626 _ = v.Args[1]
27627 x := v.Args[0]
27628 v_1 := v.Args[1]
27629 if v_1.Op != OpPPC64AND {
27630 break
27631 }
27632 _ = v_1.Args[1]
27633 y := v_1.Args[0]
27634 v_1_1 := v_1.Args[1]
27635 if v_1_1.Op != OpPPC64MOVDconst {
27636 break
27637 }
27638 if v_1_1.AuxInt != 31 {
27639 break
27640 }
27641 v.reset(OpPPC64SRAW)
27642 v.AddArg(x)
27643 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
27644 v0.AuxInt = 31
27645 v0.AddArg(y)
27646 v.AddArg(v0)
27647 return true
27648 }
27649
27650
27651
27652 for {
27653 _ = v.Args[1]
27654 x := v.Args[0]
27655 v_1 := v.Args[1]
27656 if v_1.Op != OpPPC64AND {
27657 break
27658 }
27659 y := v_1.Args[1]
27660 v_1_0 := v_1.Args[0]
27661 if v_1_0.Op != OpPPC64MOVDconst {
27662 break
27663 }
27664 if v_1_0.AuxInt != 31 {
27665 break
27666 }
27667 v.reset(OpPPC64SRAW)
27668 v.AddArg(x)
27669 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32)
27670 v0.AuxInt = 31
27671 v0.AddArg(y)
27672 v.AddArg(v0)
27673 return true
27674 }
27675
27676
27677
27678 for {
27679 _ = v.Args[1]
27680 x := v.Args[0]
27681 v_1 := v.Args[1]
27682 if v_1.Op != OpPPC64ANDconst {
27683 break
27684 }
27685 if v_1.Type != typ.UInt {
27686 break
27687 }
27688 if v_1.AuxInt != 31 {
27689 break
27690 }
27691 y := v_1.Args[0]
27692 v.reset(OpPPC64SRAW)
27693 v.AddArg(x)
27694 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27695 v0.AuxInt = 31
27696 v0.AddArg(y)
27697 v.AddArg(v0)
27698 return true
27699 }
27700
27701
27702
27703 for {
27704 _ = v.Args[1]
27705 x := v.Args[0]
27706 v_1 := v.Args[1]
27707 if v_1.Op != OpPPC64SUB {
27708 break
27709 }
27710 if v_1.Type != typ.UInt {
27711 break
27712 }
27713 _ = v_1.Args[1]
27714 v_1_0 := v_1.Args[0]
27715 if v_1_0.Op != OpPPC64MOVDconst {
27716 break
27717 }
27718 if v_1_0.AuxInt != 32 {
27719 break
27720 }
27721 v_1_1 := v_1.Args[1]
27722 if v_1_1.Op != OpPPC64ANDconst {
27723 break
27724 }
27725 if v_1_1.Type != typ.UInt {
27726 break
27727 }
27728 if v_1_1.AuxInt != 31 {
27729 break
27730 }
27731 y := v_1_1.Args[0]
27732 v.reset(OpPPC64SRAW)
27733 v.AddArg(x)
27734 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27735 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27736 v1.AuxInt = 32
27737 v0.AddArg(v1)
27738 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27739 v2.AuxInt = 31
27740 v2.AddArg(y)
27741 v0.AddArg(v2)
27742 v.AddArg(v0)
27743 return true
27744 }
27745
27746
27747
27748 for {
27749 _ = v.Args[1]
27750 x := v.Args[0]
27751 v_1 := v.Args[1]
27752 if v_1.Op != OpPPC64SUB {
27753 break
27754 }
27755 if v_1.Type != typ.UInt {
27756 break
27757 }
27758 _ = v_1.Args[1]
27759 v_1_0 := v_1.Args[0]
27760 if v_1_0.Op != OpPPC64MOVDconst {
27761 break
27762 }
27763 if v_1_0.AuxInt != 32 {
27764 break
27765 }
27766 v_1_1 := v_1.Args[1]
27767 if v_1_1.Op != OpPPC64AND {
27768 break
27769 }
27770 if v_1_1.Type != typ.UInt {
27771 break
27772 }
27773 _ = v_1_1.Args[1]
27774 y := v_1_1.Args[0]
27775 v_1_1_1 := v_1_1.Args[1]
27776 if v_1_1_1.Op != OpPPC64MOVDconst {
27777 break
27778 }
27779 if v_1_1_1.AuxInt != 31 {
27780 break
27781 }
27782 v.reset(OpPPC64SRAW)
27783 v.AddArg(x)
27784 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27785 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27786 v1.AuxInt = 32
27787 v0.AddArg(v1)
27788 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27789 v2.AuxInt = 31
27790 v2.AddArg(y)
27791 v0.AddArg(v2)
27792 v.AddArg(v0)
27793 return true
27794 }
27795
27796
27797
27798 for {
27799 _ = v.Args[1]
27800 x := v.Args[0]
27801 v_1 := v.Args[1]
27802 if v_1.Op != OpPPC64SUB {
27803 break
27804 }
27805 if v_1.Type != typ.UInt {
27806 break
27807 }
27808 _ = v_1.Args[1]
27809 v_1_0 := v_1.Args[0]
27810 if v_1_0.Op != OpPPC64MOVDconst {
27811 break
27812 }
27813 if v_1_0.AuxInt != 32 {
27814 break
27815 }
27816 v_1_1 := v_1.Args[1]
27817 if v_1_1.Op != OpPPC64AND {
27818 break
27819 }
27820 if v_1_1.Type != typ.UInt {
27821 break
27822 }
27823 y := v_1_1.Args[1]
27824 v_1_1_0 := v_1_1.Args[0]
27825 if v_1_1_0.Op != OpPPC64MOVDconst {
27826 break
27827 }
27828 if v_1_1_0.AuxInt != 31 {
27829 break
27830 }
27831 v.reset(OpPPC64SRAW)
27832 v.AddArg(x)
27833 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
27834 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
27835 v1.AuxInt = 32
27836 v0.AddArg(v1)
27837 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
27838 v2.AuxInt = 31
27839 v2.AddArg(y)
27840 v0.AddArg(v2)
27841 v.AddArg(v0)
27842 return true
27843 }
27844 return false
27845 }
27846 func rewriteValuePPC64_OpRsh32x64_10(v *Value) bool {
27847 b := v.Block
27848 typ := &b.Func.Config.Types
27849
27850
27851
27852 for {
27853 y := v.Args[1]
27854 x := v.Args[0]
27855 v.reset(OpPPC64SRAW)
27856 v.AddArg(x)
27857 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27858 v0.AddArg(y)
27859 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27860 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27861 v2.AuxInt = -32
27862 v2.AddArg(y)
27863 v1.AddArg(v2)
27864 v0.AddArg(v1)
27865 v.AddArg(v0)
27866 return true
27867 }
27868 }
27869 func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool {
27870 b := v.Block
27871 typ := &b.Func.Config.Types
27872
27873
27874
27875 for {
27876 y := v.Args[1]
27877 x := v.Args[0]
27878 if !(shiftIsBounded(v)) {
27879 break
27880 }
27881 v.reset(OpPPC64SRAW)
27882 v.AddArg(x)
27883 v.AddArg(y)
27884 return true
27885 }
27886
27887
27888
27889 for {
27890 y := v.Args[1]
27891 x := v.Args[0]
27892 v.reset(OpPPC64SRAW)
27893 v.AddArg(x)
27894 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27895 v0.AddArg(y)
27896 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27897 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27898 v2.AuxInt = -32
27899 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
27900 v3.AddArg(y)
27901 v2.AddArg(v3)
27902 v1.AddArg(v2)
27903 v0.AddArg(v1)
27904 v.AddArg(v0)
27905 return true
27906 }
27907 }
27908 func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool {
27909 b := v.Block
27910 typ := &b.Func.Config.Types
27911
27912
27913
27914 for {
27915 y := v.Args[1]
27916 x := v.Args[0]
27917 if !(shiftIsBounded(v)) {
27918 break
27919 }
27920 v.reset(OpPPC64SRD)
27921 v.AddArg(x)
27922 v.AddArg(y)
27923 return true
27924 }
27925
27926
27927
27928 for {
27929 y := v.Args[1]
27930 x := v.Args[0]
27931 v.reset(OpPPC64SRD)
27932 v.AddArg(x)
27933 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
27934 v0.AddArg(y)
27935 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
27936 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
27937 v2.AuxInt = -64
27938 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
27939 v3.AddArg(y)
27940 v2.AddArg(v3)
27941 v1.AddArg(v2)
27942 v0.AddArg(v1)
27943 v.AddArg(v0)
27944 return true
27945 }
27946 }
27947 func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool {
27948 b := v.Block
27949 typ := &b.Func.Config.Types
27950
27951
27952
27953 for {
27954 _ = v.Args[1]
27955 x := v.Args[0]
27956 v_1 := v.Args[1]
27957 if v_1.Op != OpConst64 {
27958 break
27959 }
27960 c := v_1.AuxInt
27961 if !(uint32(c) < 64) {
27962 break
27963 }
27964 v.reset(OpPPC64SRDconst)
27965 v.AuxInt = c
27966 v.AddArg(x)
27967 return true
27968 }
27969
27970
27971
27972 for {
27973 _ = v.Args[1]
27974 x := v.Args[0]
27975 v_1 := v.Args[1]
27976 if v_1.Op != OpPPC64MOVDconst {
27977 break
27978 }
27979 c := v_1.AuxInt
27980 if !(uint32(c) < 64) {
27981 break
27982 }
27983 v.reset(OpPPC64SRDconst)
27984 v.AuxInt = c
27985 v.AddArg(x)
27986 return true
27987 }
27988
27989
27990
27991 for {
27992 y := v.Args[1]
27993 x := v.Args[0]
27994 if !(shiftIsBounded(v)) {
27995 break
27996 }
27997 v.reset(OpPPC64SRD)
27998 v.AddArg(x)
27999 v.AddArg(y)
28000 return true
28001 }
28002
28003
28004
28005 for {
28006 y := v.Args[1]
28007 x := v.Args[0]
28008 v.reset(OpPPC64SRD)
28009 v.AddArg(x)
28010 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28011 v0.AddArg(y)
28012 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28013 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28014 v2.AuxInt = -64
28015 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
28016 v3.AddArg(y)
28017 v2.AddArg(v3)
28018 v1.AddArg(v2)
28019 v0.AddArg(v1)
28020 v.AddArg(v0)
28021 return true
28022 }
28023 }
28024 func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool {
28025 b := v.Block
28026 typ := &b.Func.Config.Types
28027
28028
28029
28030 for {
28031 _ = v.Args[1]
28032 x := v.Args[0]
28033 v_1 := v.Args[1]
28034 if v_1.Op != OpConst64 {
28035 break
28036 }
28037 c := v_1.AuxInt
28038 if !(uint64(c) < 64) {
28039 break
28040 }
28041 v.reset(OpPPC64SRDconst)
28042 v.AuxInt = c
28043 v.AddArg(x)
28044 return true
28045 }
28046
28047
28048
28049 for {
28050 _ = v.Args[1]
28051 v_1 := v.Args[1]
28052 if v_1.Op != OpConst64 {
28053 break
28054 }
28055 c := v_1.AuxInt
28056 if !(uint64(c) >= 64) {
28057 break
28058 }
28059 v.reset(OpPPC64MOVDconst)
28060 v.AuxInt = 0
28061 return true
28062 }
28063
28064
28065
28066 for {
28067 _ = v.Args[1]
28068 x := v.Args[0]
28069 v_1 := v.Args[1]
28070 if v_1.Op != OpPPC64MOVDconst {
28071 break
28072 }
28073 c := v_1.AuxInt
28074 if !(uint64(c) < 64) {
28075 break
28076 }
28077 v.reset(OpPPC64SRDconst)
28078 v.AuxInt = c
28079 v.AddArg(x)
28080 return true
28081 }
28082
28083
28084
28085 for {
28086 y := v.Args[1]
28087 x := v.Args[0]
28088 if !(shiftIsBounded(v)) {
28089 break
28090 }
28091 v.reset(OpPPC64SRD)
28092 v.AddArg(x)
28093 v.AddArg(y)
28094 return true
28095 }
28096
28097
28098
28099 for {
28100 _ = v.Args[1]
28101 x := v.Args[0]
28102 v_1 := v.Args[1]
28103 if v_1.Op != OpPPC64AND {
28104 break
28105 }
28106 _ = v_1.Args[1]
28107 y := v_1.Args[0]
28108 v_1_1 := v_1.Args[1]
28109 if v_1_1.Op != OpPPC64MOVDconst {
28110 break
28111 }
28112 if v_1_1.AuxInt != 63 {
28113 break
28114 }
28115 v.reset(OpPPC64SRD)
28116 v.AddArg(x)
28117 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
28118 v0.AuxInt = 63
28119 v0.AddArg(y)
28120 v.AddArg(v0)
28121 return true
28122 }
28123
28124
28125
28126 for {
28127 _ = v.Args[1]
28128 x := v.Args[0]
28129 v_1 := v.Args[1]
28130 if v_1.Op != OpPPC64AND {
28131 break
28132 }
28133 y := v_1.Args[1]
28134 v_1_0 := v_1.Args[0]
28135 if v_1_0.Op != OpPPC64MOVDconst {
28136 break
28137 }
28138 if v_1_0.AuxInt != 63 {
28139 break
28140 }
28141 v.reset(OpPPC64SRD)
28142 v.AddArg(x)
28143 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
28144 v0.AuxInt = 63
28145 v0.AddArg(y)
28146 v.AddArg(v0)
28147 return true
28148 }
28149
28150
28151
28152 for {
28153 _ = v.Args[1]
28154 x := v.Args[0]
28155 v_1 := v.Args[1]
28156 if v_1.Op != OpPPC64ANDconst {
28157 break
28158 }
28159 if v_1.Type != typ.UInt {
28160 break
28161 }
28162 if v_1.AuxInt != 63 {
28163 break
28164 }
28165 y := v_1.Args[0]
28166 v.reset(OpPPC64SRD)
28167 v.AddArg(x)
28168 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28169 v0.AuxInt = 63
28170 v0.AddArg(y)
28171 v.AddArg(v0)
28172 return true
28173 }
28174
28175
28176
28177 for {
28178 _ = v.Args[1]
28179 x := v.Args[0]
28180 v_1 := v.Args[1]
28181 if v_1.Op != OpPPC64SUB {
28182 break
28183 }
28184 if v_1.Type != typ.UInt {
28185 break
28186 }
28187 _ = v_1.Args[1]
28188 v_1_0 := v_1.Args[0]
28189 if v_1_0.Op != OpPPC64MOVDconst {
28190 break
28191 }
28192 if v_1_0.AuxInt != 64 {
28193 break
28194 }
28195 v_1_1 := v_1.Args[1]
28196 if v_1_1.Op != OpPPC64ANDconst {
28197 break
28198 }
28199 if v_1_1.Type != typ.UInt {
28200 break
28201 }
28202 if v_1_1.AuxInt != 63 {
28203 break
28204 }
28205 y := v_1_1.Args[0]
28206 v.reset(OpPPC64SRD)
28207 v.AddArg(x)
28208 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28209 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28210 v1.AuxInt = 64
28211 v0.AddArg(v1)
28212 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28213 v2.AuxInt = 63
28214 v2.AddArg(y)
28215 v0.AddArg(v2)
28216 v.AddArg(v0)
28217 return true
28218 }
28219
28220
28221
28222 for {
28223 _ = v.Args[1]
28224 x := v.Args[0]
28225 v_1 := v.Args[1]
28226 if v_1.Op != OpPPC64SUB {
28227 break
28228 }
28229 if v_1.Type != typ.UInt {
28230 break
28231 }
28232 _ = v_1.Args[1]
28233 v_1_0 := v_1.Args[0]
28234 if v_1_0.Op != OpPPC64MOVDconst {
28235 break
28236 }
28237 if v_1_0.AuxInt != 64 {
28238 break
28239 }
28240 v_1_1 := v_1.Args[1]
28241 if v_1_1.Op != OpPPC64AND {
28242 break
28243 }
28244 if v_1_1.Type != typ.UInt {
28245 break
28246 }
28247 _ = v_1_1.Args[1]
28248 y := v_1_1.Args[0]
28249 v_1_1_1 := v_1_1.Args[1]
28250 if v_1_1_1.Op != OpPPC64MOVDconst {
28251 break
28252 }
28253 if v_1_1_1.AuxInt != 63 {
28254 break
28255 }
28256 v.reset(OpPPC64SRD)
28257 v.AddArg(x)
28258 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28259 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28260 v1.AuxInt = 64
28261 v0.AddArg(v1)
28262 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28263 v2.AuxInt = 63
28264 v2.AddArg(y)
28265 v0.AddArg(v2)
28266 v.AddArg(v0)
28267 return true
28268 }
28269
28270
28271
28272 for {
28273 _ = v.Args[1]
28274 x := v.Args[0]
28275 v_1 := v.Args[1]
28276 if v_1.Op != OpPPC64SUB {
28277 break
28278 }
28279 if v_1.Type != typ.UInt {
28280 break
28281 }
28282 _ = v_1.Args[1]
28283 v_1_0 := v_1.Args[0]
28284 if v_1_0.Op != OpPPC64MOVDconst {
28285 break
28286 }
28287 if v_1_0.AuxInt != 64 {
28288 break
28289 }
28290 v_1_1 := v_1.Args[1]
28291 if v_1_1.Op != OpPPC64AND {
28292 break
28293 }
28294 if v_1_1.Type != typ.UInt {
28295 break
28296 }
28297 y := v_1_1.Args[1]
28298 v_1_1_0 := v_1_1.Args[0]
28299 if v_1_1_0.Op != OpPPC64MOVDconst {
28300 break
28301 }
28302 if v_1_1_0.AuxInt != 63 {
28303 break
28304 }
28305 v.reset(OpPPC64SRD)
28306 v.AddArg(x)
28307 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28308 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28309 v1.AuxInt = 64
28310 v0.AddArg(v1)
28311 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28312 v2.AuxInt = 63
28313 v2.AddArg(y)
28314 v0.AddArg(v2)
28315 v.AddArg(v0)
28316 return true
28317 }
28318 return false
28319 }
28320 func rewriteValuePPC64_OpRsh64Ux64_10(v *Value) bool {
28321 b := v.Block
28322 typ := &b.Func.Config.Types
28323
28324
28325
28326 for {
28327 y := v.Args[1]
28328 x := v.Args[0]
28329 v.reset(OpPPC64SRD)
28330 v.AddArg(x)
28331 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28332 v0.AddArg(y)
28333 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28334 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28335 v2.AuxInt = -64
28336 v2.AddArg(y)
28337 v1.AddArg(v2)
28338 v0.AddArg(v1)
28339 v.AddArg(v0)
28340 return true
28341 }
28342 }
28343 func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool {
28344 b := v.Block
28345 typ := &b.Func.Config.Types
28346
28347
28348
28349 for {
28350 y := v.Args[1]
28351 x := v.Args[0]
28352 if !(shiftIsBounded(v)) {
28353 break
28354 }
28355 v.reset(OpPPC64SRD)
28356 v.AddArg(x)
28357 v.AddArg(y)
28358 return true
28359 }
28360
28361
28362
28363 for {
28364 y := v.Args[1]
28365 x := v.Args[0]
28366 v.reset(OpPPC64SRD)
28367 v.AddArg(x)
28368 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28369 v0.AddArg(y)
28370 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28371 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28372 v2.AuxInt = -64
28373 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
28374 v3.AddArg(y)
28375 v2.AddArg(v3)
28376 v1.AddArg(v2)
28377 v0.AddArg(v1)
28378 v.AddArg(v0)
28379 return true
28380 }
28381 }
28382 func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool {
28383 b := v.Block
28384 typ := &b.Func.Config.Types
28385
28386
28387
28388 for {
28389 y := v.Args[1]
28390 x := v.Args[0]
28391 if !(shiftIsBounded(v)) {
28392 break
28393 }
28394 v.reset(OpPPC64SRAD)
28395 v.AddArg(x)
28396 v.AddArg(y)
28397 return true
28398 }
28399
28400
28401
28402 for {
28403 y := v.Args[1]
28404 x := v.Args[0]
28405 v.reset(OpPPC64SRAD)
28406 v.AddArg(x)
28407 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28408 v0.AddArg(y)
28409 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28410 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28411 v2.AuxInt = -64
28412 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
28413 v3.AddArg(y)
28414 v2.AddArg(v3)
28415 v1.AddArg(v2)
28416 v0.AddArg(v1)
28417 v.AddArg(v0)
28418 return true
28419 }
28420 }
28421 func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool {
28422 b := v.Block
28423 typ := &b.Func.Config.Types
28424
28425
28426
28427 for {
28428 _ = v.Args[1]
28429 x := v.Args[0]
28430 v_1 := v.Args[1]
28431 if v_1.Op != OpConst64 {
28432 break
28433 }
28434 c := v_1.AuxInt
28435 if !(uint32(c) < 64) {
28436 break
28437 }
28438 v.reset(OpPPC64SRADconst)
28439 v.AuxInt = c
28440 v.AddArg(x)
28441 return true
28442 }
28443
28444
28445
28446 for {
28447 _ = v.Args[1]
28448 x := v.Args[0]
28449 v_1 := v.Args[1]
28450 if v_1.Op != OpPPC64MOVDconst {
28451 break
28452 }
28453 c := v_1.AuxInt
28454 if !(uint32(c) < 64) {
28455 break
28456 }
28457 v.reset(OpPPC64SRADconst)
28458 v.AuxInt = c
28459 v.AddArg(x)
28460 return true
28461 }
28462
28463
28464
28465 for {
28466 y := v.Args[1]
28467 x := v.Args[0]
28468 if !(shiftIsBounded(v)) {
28469 break
28470 }
28471 v.reset(OpPPC64SRAD)
28472 v.AddArg(x)
28473 v.AddArg(y)
28474 return true
28475 }
28476
28477
28478
28479 for {
28480 y := v.Args[1]
28481 x := v.Args[0]
28482 v.reset(OpPPC64SRAD)
28483 v.AddArg(x)
28484 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28485 v0.AddArg(y)
28486 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28487 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28488 v2.AuxInt = -64
28489 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
28490 v3.AddArg(y)
28491 v2.AddArg(v3)
28492 v1.AddArg(v2)
28493 v0.AddArg(v1)
28494 v.AddArg(v0)
28495 return true
28496 }
28497 }
28498 func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool {
28499 b := v.Block
28500 typ := &b.Func.Config.Types
28501
28502
28503
28504 for {
28505 _ = v.Args[1]
28506 x := v.Args[0]
28507 v_1 := v.Args[1]
28508 if v_1.Op != OpConst64 {
28509 break
28510 }
28511 c := v_1.AuxInt
28512 if !(uint64(c) < 64) {
28513 break
28514 }
28515 v.reset(OpPPC64SRADconst)
28516 v.AuxInt = c
28517 v.AddArg(x)
28518 return true
28519 }
28520
28521
28522
28523 for {
28524 _ = v.Args[1]
28525 x := v.Args[0]
28526 v_1 := v.Args[1]
28527 if v_1.Op != OpConst64 {
28528 break
28529 }
28530 c := v_1.AuxInt
28531 if !(uint64(c) >= 64) {
28532 break
28533 }
28534 v.reset(OpPPC64SRADconst)
28535 v.AuxInt = 63
28536 v.AddArg(x)
28537 return true
28538 }
28539
28540
28541
28542 for {
28543 _ = v.Args[1]
28544 x := v.Args[0]
28545 v_1 := v.Args[1]
28546 if v_1.Op != OpPPC64MOVDconst {
28547 break
28548 }
28549 c := v_1.AuxInt
28550 if !(uint64(c) < 64) {
28551 break
28552 }
28553 v.reset(OpPPC64SRADconst)
28554 v.AuxInt = c
28555 v.AddArg(x)
28556 return true
28557 }
28558
28559
28560
28561 for {
28562 y := v.Args[1]
28563 x := v.Args[0]
28564 if !(shiftIsBounded(v)) {
28565 break
28566 }
28567 v.reset(OpPPC64SRAD)
28568 v.AddArg(x)
28569 v.AddArg(y)
28570 return true
28571 }
28572
28573
28574
28575 for {
28576 _ = v.Args[1]
28577 x := v.Args[0]
28578 v_1 := v.Args[1]
28579 if v_1.Op != OpPPC64AND {
28580 break
28581 }
28582 _ = v_1.Args[1]
28583 y := v_1.Args[0]
28584 v_1_1 := v_1.Args[1]
28585 if v_1_1.Op != OpPPC64MOVDconst {
28586 break
28587 }
28588 if v_1_1.AuxInt != 63 {
28589 break
28590 }
28591 v.reset(OpPPC64SRAD)
28592 v.AddArg(x)
28593 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
28594 v0.AuxInt = 63
28595 v0.AddArg(y)
28596 v.AddArg(v0)
28597 return true
28598 }
28599
28600
28601
28602 for {
28603 _ = v.Args[1]
28604 x := v.Args[0]
28605 v_1 := v.Args[1]
28606 if v_1.Op != OpPPC64AND {
28607 break
28608 }
28609 y := v_1.Args[1]
28610 v_1_0 := v_1.Args[0]
28611 if v_1_0.Op != OpPPC64MOVDconst {
28612 break
28613 }
28614 if v_1_0.AuxInt != 63 {
28615 break
28616 }
28617 v.reset(OpPPC64SRAD)
28618 v.AddArg(x)
28619 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64)
28620 v0.AuxInt = 63
28621 v0.AddArg(y)
28622 v.AddArg(v0)
28623 return true
28624 }
28625
28626
28627
28628 for {
28629 _ = v.Args[1]
28630 x := v.Args[0]
28631 v_1 := v.Args[1]
28632 if v_1.Op != OpPPC64ANDconst {
28633 break
28634 }
28635 if v_1.Type != typ.UInt {
28636 break
28637 }
28638 if v_1.AuxInt != 63 {
28639 break
28640 }
28641 y := v_1.Args[0]
28642 v.reset(OpPPC64SRAD)
28643 v.AddArg(x)
28644 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28645 v0.AuxInt = 63
28646 v0.AddArg(y)
28647 v.AddArg(v0)
28648 return true
28649 }
28650
28651
28652
28653 for {
28654 _ = v.Args[1]
28655 x := v.Args[0]
28656 v_1 := v.Args[1]
28657 if v_1.Op != OpPPC64SUB {
28658 break
28659 }
28660 if v_1.Type != typ.UInt {
28661 break
28662 }
28663 _ = v_1.Args[1]
28664 v_1_0 := v_1.Args[0]
28665 if v_1_0.Op != OpPPC64MOVDconst {
28666 break
28667 }
28668 if v_1_0.AuxInt != 64 {
28669 break
28670 }
28671 v_1_1 := v_1.Args[1]
28672 if v_1_1.Op != OpPPC64ANDconst {
28673 break
28674 }
28675 if v_1_1.Type != typ.UInt {
28676 break
28677 }
28678 if v_1_1.AuxInt != 63 {
28679 break
28680 }
28681 y := v_1_1.Args[0]
28682 v.reset(OpPPC64SRAD)
28683 v.AddArg(x)
28684 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28685 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28686 v1.AuxInt = 64
28687 v0.AddArg(v1)
28688 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28689 v2.AuxInt = 63
28690 v2.AddArg(y)
28691 v0.AddArg(v2)
28692 v.AddArg(v0)
28693 return true
28694 }
28695
28696
28697
28698 for {
28699 _ = v.Args[1]
28700 x := v.Args[0]
28701 v_1 := v.Args[1]
28702 if v_1.Op != OpPPC64SUB {
28703 break
28704 }
28705 if v_1.Type != typ.UInt {
28706 break
28707 }
28708 _ = v_1.Args[1]
28709 v_1_0 := v_1.Args[0]
28710 if v_1_0.Op != OpPPC64MOVDconst {
28711 break
28712 }
28713 if v_1_0.AuxInt != 64 {
28714 break
28715 }
28716 v_1_1 := v_1.Args[1]
28717 if v_1_1.Op != OpPPC64AND {
28718 break
28719 }
28720 if v_1_1.Type != typ.UInt {
28721 break
28722 }
28723 _ = v_1_1.Args[1]
28724 y := v_1_1.Args[0]
28725 v_1_1_1 := v_1_1.Args[1]
28726 if v_1_1_1.Op != OpPPC64MOVDconst {
28727 break
28728 }
28729 if v_1_1_1.AuxInt != 63 {
28730 break
28731 }
28732 v.reset(OpPPC64SRAD)
28733 v.AddArg(x)
28734 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28735 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28736 v1.AuxInt = 64
28737 v0.AddArg(v1)
28738 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28739 v2.AuxInt = 63
28740 v2.AddArg(y)
28741 v0.AddArg(v2)
28742 v.AddArg(v0)
28743 return true
28744 }
28745
28746
28747
28748 for {
28749 _ = v.Args[1]
28750 x := v.Args[0]
28751 v_1 := v.Args[1]
28752 if v_1.Op != OpPPC64SUB {
28753 break
28754 }
28755 if v_1.Type != typ.UInt {
28756 break
28757 }
28758 _ = v_1.Args[1]
28759 v_1_0 := v_1.Args[0]
28760 if v_1_0.Op != OpPPC64MOVDconst {
28761 break
28762 }
28763 if v_1_0.AuxInt != 64 {
28764 break
28765 }
28766 v_1_1 := v_1.Args[1]
28767 if v_1_1.Op != OpPPC64AND {
28768 break
28769 }
28770 if v_1_1.Type != typ.UInt {
28771 break
28772 }
28773 y := v_1_1.Args[1]
28774 v_1_1_0 := v_1_1.Args[0]
28775 if v_1_1_0.Op != OpPPC64MOVDconst {
28776 break
28777 }
28778 if v_1_1_0.AuxInt != 63 {
28779 break
28780 }
28781 v.reset(OpPPC64SRAD)
28782 v.AddArg(x)
28783 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt)
28784 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
28785 v1.AuxInt = 64
28786 v0.AddArg(v1)
28787 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt)
28788 v2.AuxInt = 63
28789 v2.AddArg(y)
28790 v0.AddArg(v2)
28791 v.AddArg(v0)
28792 return true
28793 }
28794 return false
28795 }
28796 func rewriteValuePPC64_OpRsh64x64_10(v *Value) bool {
28797 b := v.Block
28798 typ := &b.Func.Config.Types
28799
28800
28801
28802 for {
28803 y := v.Args[1]
28804 x := v.Args[0]
28805 v.reset(OpPPC64SRAD)
28806 v.AddArg(x)
28807 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28808 v0.AddArg(y)
28809 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28810 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28811 v2.AuxInt = -64
28812 v2.AddArg(y)
28813 v1.AddArg(v2)
28814 v0.AddArg(v1)
28815 v.AddArg(v0)
28816 return true
28817 }
28818 }
28819 func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool {
28820 b := v.Block
28821 typ := &b.Func.Config.Types
28822
28823
28824
28825 for {
28826 y := v.Args[1]
28827 x := v.Args[0]
28828 if !(shiftIsBounded(v)) {
28829 break
28830 }
28831 v.reset(OpPPC64SRAD)
28832 v.AddArg(x)
28833 v.AddArg(y)
28834 return true
28835 }
28836
28837
28838
28839 for {
28840 y := v.Args[1]
28841 x := v.Args[0]
28842 v.reset(OpPPC64SRAD)
28843 v.AddArg(x)
28844 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28845 v0.AddArg(y)
28846 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28847 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28848 v2.AuxInt = -64
28849 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
28850 v3.AddArg(y)
28851 v2.AddArg(v3)
28852 v1.AddArg(v2)
28853 v0.AddArg(v1)
28854 v.AddArg(v0)
28855 return true
28856 }
28857 }
28858 func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool {
28859 b := v.Block
28860 typ := &b.Func.Config.Types
28861
28862
28863
28864 for {
28865 y := v.Args[1]
28866 x := v.Args[0]
28867 if !(shiftIsBounded(v)) {
28868 break
28869 }
28870 v.reset(OpPPC64SRW)
28871 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
28872 v0.AddArg(x)
28873 v.AddArg(v0)
28874 v.AddArg(y)
28875 return true
28876 }
28877
28878
28879
28880 for {
28881 y := v.Args[1]
28882 x := v.Args[0]
28883 v.reset(OpPPC64SRW)
28884 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
28885 v0.AddArg(x)
28886 v.AddArg(v0)
28887 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28888 v1.AddArg(y)
28889 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28890 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28891 v3.AuxInt = -8
28892 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
28893 v4.AddArg(y)
28894 v3.AddArg(v4)
28895 v2.AddArg(v3)
28896 v1.AddArg(v2)
28897 v.AddArg(v1)
28898 return true
28899 }
28900 }
28901 func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool {
28902 b := v.Block
28903 typ := &b.Func.Config.Types
28904
28905
28906
28907 for {
28908 _ = v.Args[1]
28909 x := v.Args[0]
28910 v_1 := v.Args[1]
28911 if v_1.Op != OpConst64 {
28912 break
28913 }
28914 c := v_1.AuxInt
28915 if !(uint32(c) < 8) {
28916 break
28917 }
28918 v.reset(OpPPC64SRWconst)
28919 v.AuxInt = c
28920 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
28921 v0.AddArg(x)
28922 v.AddArg(v0)
28923 return true
28924 }
28925
28926
28927
28928 for {
28929 _ = v.Args[1]
28930 x := v.Args[0]
28931 v_1 := v.Args[1]
28932 if v_1.Op != OpPPC64MOVDconst {
28933 break
28934 }
28935 c := v_1.AuxInt
28936 if !(uint32(c) < 8) {
28937 break
28938 }
28939 v.reset(OpPPC64SRWconst)
28940 v.AuxInt = c
28941 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
28942 v0.AddArg(x)
28943 v.AddArg(v0)
28944 return true
28945 }
28946
28947
28948
28949 for {
28950 y := v.Args[1]
28951 x := v.Args[0]
28952 if !(shiftIsBounded(v)) {
28953 break
28954 }
28955 v.reset(OpPPC64SRW)
28956 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
28957 v0.AddArg(x)
28958 v.AddArg(v0)
28959 v.AddArg(y)
28960 return true
28961 }
28962
28963
28964
28965 for {
28966 y := v.Args[1]
28967 x := v.Args[0]
28968 v.reset(OpPPC64SRW)
28969 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
28970 v0.AddArg(x)
28971 v.AddArg(v0)
28972 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
28973 v1.AddArg(y)
28974 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
28975 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
28976 v3.AuxInt = -8
28977 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
28978 v4.AddArg(y)
28979 v3.AddArg(v4)
28980 v2.AddArg(v3)
28981 v1.AddArg(v2)
28982 v.AddArg(v1)
28983 return true
28984 }
28985 }
28986 func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool {
28987 b := v.Block
28988 typ := &b.Func.Config.Types
28989
28990
28991
28992 for {
28993 _ = v.Args[1]
28994 x := v.Args[0]
28995 v_1 := v.Args[1]
28996 if v_1.Op != OpConst64 {
28997 break
28998 }
28999 c := v_1.AuxInt
29000 if !(uint64(c) < 8) {
29001 break
29002 }
29003 v.reset(OpPPC64SRWconst)
29004 v.AuxInt = c
29005 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
29006 v0.AddArg(x)
29007 v.AddArg(v0)
29008 return true
29009 }
29010
29011
29012
29013 for {
29014 _ = v.Args[1]
29015 v_1 := v.Args[1]
29016 if v_1.Op != OpConst64 {
29017 break
29018 }
29019 c := v_1.AuxInt
29020 if !(uint64(c) >= 8) {
29021 break
29022 }
29023 v.reset(OpPPC64MOVDconst)
29024 v.AuxInt = 0
29025 return true
29026 }
29027
29028
29029
29030 for {
29031 _ = v.Args[1]
29032 x := v.Args[0]
29033 v_1 := v.Args[1]
29034 if v_1.Op != OpPPC64MOVDconst {
29035 break
29036 }
29037 c := v_1.AuxInt
29038 if !(uint64(c) < 8) {
29039 break
29040 }
29041 v.reset(OpPPC64SRWconst)
29042 v.AuxInt = c
29043 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
29044 v0.AddArg(x)
29045 v.AddArg(v0)
29046 return true
29047 }
29048
29049
29050
29051 for {
29052 y := v.Args[1]
29053 x := v.Args[0]
29054 if !(shiftIsBounded(v)) {
29055 break
29056 }
29057 v.reset(OpPPC64SRW)
29058 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
29059 v0.AddArg(x)
29060 v.AddArg(v0)
29061 v.AddArg(y)
29062 return true
29063 }
29064
29065
29066
29067 for {
29068 y := v.Args[1]
29069 x := v.Args[0]
29070 v.reset(OpPPC64SRW)
29071 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
29072 v0.AddArg(x)
29073 v.AddArg(v0)
29074 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29075 v1.AddArg(y)
29076 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29077 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29078 v3.AuxInt = -8
29079 v3.AddArg(y)
29080 v2.AddArg(v3)
29081 v1.AddArg(v2)
29082 v.AddArg(v1)
29083 return true
29084 }
29085 }
29086 func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool {
29087 b := v.Block
29088 typ := &b.Func.Config.Types
29089
29090
29091
29092 for {
29093 y := v.Args[1]
29094 x := v.Args[0]
29095 if !(shiftIsBounded(v)) {
29096 break
29097 }
29098 v.reset(OpPPC64SRW)
29099 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZreg, typ.Int64)
29100 v0.AddArg(x)
29101 v.AddArg(v0)
29102 v.AddArg(y)
29103 return true
29104 }
29105
29106
29107
29108 for {
29109 y := v.Args[1]
29110 x := v.Args[0]
29111 v.reset(OpPPC64SRW)
29112 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
29113 v0.AddArg(x)
29114 v.AddArg(v0)
29115 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29116 v1.AddArg(y)
29117 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29118 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29119 v3.AuxInt = -8
29120 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
29121 v4.AddArg(y)
29122 v3.AddArg(v4)
29123 v2.AddArg(v3)
29124 v1.AddArg(v2)
29125 v.AddArg(v1)
29126 return true
29127 }
29128 }
29129 func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool {
29130 b := v.Block
29131 typ := &b.Func.Config.Types
29132
29133
29134
29135 for {
29136 y := v.Args[1]
29137 x := v.Args[0]
29138 if !(shiftIsBounded(v)) {
29139 break
29140 }
29141 v.reset(OpPPC64SRAW)
29142 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
29143 v0.AddArg(x)
29144 v.AddArg(v0)
29145 v.AddArg(y)
29146 return true
29147 }
29148
29149
29150
29151 for {
29152 y := v.Args[1]
29153 x := v.Args[0]
29154 v.reset(OpPPC64SRAW)
29155 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29156 v0.AddArg(x)
29157 v.AddArg(v0)
29158 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29159 v1.AddArg(y)
29160 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29161 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29162 v3.AuxInt = -8
29163 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
29164 v4.AddArg(y)
29165 v3.AddArg(v4)
29166 v2.AddArg(v3)
29167 v1.AddArg(v2)
29168 v.AddArg(v1)
29169 return true
29170 }
29171 }
29172 func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool {
29173 b := v.Block
29174 typ := &b.Func.Config.Types
29175
29176
29177
29178 for {
29179 _ = v.Args[1]
29180 x := v.Args[0]
29181 v_1 := v.Args[1]
29182 if v_1.Op != OpConst64 {
29183 break
29184 }
29185 c := v_1.AuxInt
29186 if !(uint32(c) < 8) {
29187 break
29188 }
29189 v.reset(OpPPC64SRAWconst)
29190 v.AuxInt = c
29191 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29192 v0.AddArg(x)
29193 v.AddArg(v0)
29194 return true
29195 }
29196
29197
29198
29199 for {
29200 _ = v.Args[1]
29201 x := v.Args[0]
29202 v_1 := v.Args[1]
29203 if v_1.Op != OpPPC64MOVDconst {
29204 break
29205 }
29206 c := v_1.AuxInt
29207 if !(uint32(c) < 8) {
29208 break
29209 }
29210 v.reset(OpPPC64SRAWconst)
29211 v.AuxInt = c
29212 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29213 v0.AddArg(x)
29214 v.AddArg(v0)
29215 return true
29216 }
29217
29218
29219
29220 for {
29221 y := v.Args[1]
29222 x := v.Args[0]
29223 if !(shiftIsBounded(v)) {
29224 break
29225 }
29226 v.reset(OpPPC64SRAW)
29227 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
29228 v0.AddArg(x)
29229 v.AddArg(v0)
29230 v.AddArg(y)
29231 return true
29232 }
29233
29234
29235
29236 for {
29237 y := v.Args[1]
29238 x := v.Args[0]
29239 v.reset(OpPPC64SRAW)
29240 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29241 v0.AddArg(x)
29242 v.AddArg(v0)
29243 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29244 v1.AddArg(y)
29245 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29246 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29247 v3.AuxInt = -8
29248 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
29249 v4.AddArg(y)
29250 v3.AddArg(v4)
29251 v2.AddArg(v3)
29252 v1.AddArg(v2)
29253 v.AddArg(v1)
29254 return true
29255 }
29256 }
29257 func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool {
29258 b := v.Block
29259 typ := &b.Func.Config.Types
29260
29261
29262
29263 for {
29264 _ = v.Args[1]
29265 x := v.Args[0]
29266 v_1 := v.Args[1]
29267 if v_1.Op != OpConst64 {
29268 break
29269 }
29270 c := v_1.AuxInt
29271 if !(uint64(c) < 8) {
29272 break
29273 }
29274 v.reset(OpPPC64SRAWconst)
29275 v.AuxInt = c
29276 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29277 v0.AddArg(x)
29278 v.AddArg(v0)
29279 return true
29280 }
29281
29282
29283
29284 for {
29285 _ = v.Args[1]
29286 x := v.Args[0]
29287 v_1 := v.Args[1]
29288 if v_1.Op != OpConst64 {
29289 break
29290 }
29291 c := v_1.AuxInt
29292 if !(uint64(c) >= 8) {
29293 break
29294 }
29295 v.reset(OpPPC64SRAWconst)
29296 v.AuxInt = 63
29297 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29298 v0.AddArg(x)
29299 v.AddArg(v0)
29300 return true
29301 }
29302
29303
29304
29305 for {
29306 _ = v.Args[1]
29307 x := v.Args[0]
29308 v_1 := v.Args[1]
29309 if v_1.Op != OpPPC64MOVDconst {
29310 break
29311 }
29312 c := v_1.AuxInt
29313 if !(uint64(c) < 8) {
29314 break
29315 }
29316 v.reset(OpPPC64SRAWconst)
29317 v.AuxInt = c
29318 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29319 v0.AddArg(x)
29320 v.AddArg(v0)
29321 return true
29322 }
29323
29324
29325
29326 for {
29327 y := v.Args[1]
29328 x := v.Args[0]
29329 if !(shiftIsBounded(v)) {
29330 break
29331 }
29332 v.reset(OpPPC64SRAW)
29333 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
29334 v0.AddArg(x)
29335 v.AddArg(v0)
29336 v.AddArg(y)
29337 return true
29338 }
29339
29340
29341
29342 for {
29343 y := v.Args[1]
29344 x := v.Args[0]
29345 v.reset(OpPPC64SRAW)
29346 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29347 v0.AddArg(x)
29348 v.AddArg(v0)
29349 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29350 v1.AddArg(y)
29351 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29352 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29353 v3.AuxInt = -8
29354 v3.AddArg(y)
29355 v2.AddArg(v3)
29356 v1.AddArg(v2)
29357 v.AddArg(v1)
29358 return true
29359 }
29360 }
29361 func rewriteValuePPC64_OpRsh8x8_0(v *Value) bool {
29362 b := v.Block
29363 typ := &b.Func.Config.Types
29364
29365
29366
29367 for {
29368 y := v.Args[1]
29369 x := v.Args[0]
29370 if !(shiftIsBounded(v)) {
29371 break
29372 }
29373 v.reset(OpPPC64SRAW)
29374 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64)
29375 v0.AddArg(x)
29376 v.AddArg(v0)
29377 v.AddArg(y)
29378 return true
29379 }
29380
29381
29382
29383 for {
29384 y := v.Args[1]
29385 x := v.Args[0]
29386 v.reset(OpPPC64SRAW)
29387 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
29388 v0.AddArg(x)
29389 v.AddArg(v0)
29390 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64)
29391 v1.AddArg(y)
29392 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64)
29393 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags)
29394 v3.AuxInt = -8
29395 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
29396 v4.AddArg(y)
29397 v3.AddArg(v4)
29398 v2.AddArg(v3)
29399 v1.AddArg(v2)
29400 v.AddArg(v1)
29401 return true
29402 }
29403 }
29404 func rewriteValuePPC64_OpSignExt16to32_0(v *Value) bool {
29405
29406
29407
29408 for {
29409 x := v.Args[0]
29410 v.reset(OpPPC64MOVHreg)
29411 v.AddArg(x)
29412 return true
29413 }
29414 }
29415 func rewriteValuePPC64_OpSignExt16to64_0(v *Value) bool {
29416
29417
29418
29419 for {
29420 x := v.Args[0]
29421 v.reset(OpPPC64MOVHreg)
29422 v.AddArg(x)
29423 return true
29424 }
29425 }
29426 func rewriteValuePPC64_OpSignExt32to64_0(v *Value) bool {
29427
29428
29429
29430 for {
29431 x := v.Args[0]
29432 v.reset(OpPPC64MOVWreg)
29433 v.AddArg(x)
29434 return true
29435 }
29436 }
29437 func rewriteValuePPC64_OpSignExt8to16_0(v *Value) bool {
29438
29439
29440
29441 for {
29442 x := v.Args[0]
29443 v.reset(OpPPC64MOVBreg)
29444 v.AddArg(x)
29445 return true
29446 }
29447 }
29448 func rewriteValuePPC64_OpSignExt8to32_0(v *Value) bool {
29449
29450
29451
29452 for {
29453 x := v.Args[0]
29454 v.reset(OpPPC64MOVBreg)
29455 v.AddArg(x)
29456 return true
29457 }
29458 }
29459 func rewriteValuePPC64_OpSignExt8to64_0(v *Value) bool {
29460
29461
29462
29463 for {
29464 x := v.Args[0]
29465 v.reset(OpPPC64MOVBreg)
29466 v.AddArg(x)
29467 return true
29468 }
29469 }
29470 func rewriteValuePPC64_OpSlicemask_0(v *Value) bool {
29471 b := v.Block
29472
29473
29474
29475 for {
29476 t := v.Type
29477 x := v.Args[0]
29478 v.reset(OpPPC64SRADconst)
29479 v.AuxInt = 63
29480 v0 := b.NewValue0(v.Pos, OpPPC64NEG, t)
29481 v0.AddArg(x)
29482 v.AddArg(v0)
29483 return true
29484 }
29485 }
29486 func rewriteValuePPC64_OpSqrt_0(v *Value) bool {
29487
29488
29489
29490 for {
29491 x := v.Args[0]
29492 v.reset(OpPPC64FSQRT)
29493 v.AddArg(x)
29494 return true
29495 }
29496 }
29497 func rewriteValuePPC64_OpStaticCall_0(v *Value) bool {
29498
29499
29500
29501 for {
29502 argwid := v.AuxInt
29503 target := v.Aux
29504 mem := v.Args[0]
29505 v.reset(OpPPC64CALLstatic)
29506 v.AuxInt = argwid
29507 v.Aux = target
29508 v.AddArg(mem)
29509 return true
29510 }
29511 }
29512 func rewriteValuePPC64_OpStore_0(v *Value) bool {
29513
29514
29515
29516 for {
29517 t := v.Aux
29518 mem := v.Args[2]
29519 ptr := v.Args[0]
29520 val := v.Args[1]
29521 if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) {
29522 break
29523 }
29524 v.reset(OpPPC64FMOVDstore)
29525 v.AddArg(ptr)
29526 v.AddArg(val)
29527 v.AddArg(mem)
29528 return true
29529 }
29530
29531
29532
29533 for {
29534 t := v.Aux
29535 mem := v.Args[2]
29536 ptr := v.Args[0]
29537 val := v.Args[1]
29538 if !(t.(*types.Type).Size() == 8 && is32BitFloat(val.Type)) {
29539 break
29540 }
29541 v.reset(OpPPC64FMOVDstore)
29542 v.AddArg(ptr)
29543 v.AddArg(val)
29544 v.AddArg(mem)
29545 return true
29546 }
29547
29548
29549
29550 for {
29551 t := v.Aux
29552 mem := v.Args[2]
29553 ptr := v.Args[0]
29554 val := v.Args[1]
29555 if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) {
29556 break
29557 }
29558 v.reset(OpPPC64FMOVSstore)
29559 v.AddArg(ptr)
29560 v.AddArg(val)
29561 v.AddArg(mem)
29562 return true
29563 }
29564
29565
29566
29567 for {
29568 t := v.Aux
29569 mem := v.Args[2]
29570 ptr := v.Args[0]
29571 val := v.Args[1]
29572 if !(t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type))) {
29573 break
29574 }
29575 v.reset(OpPPC64MOVDstore)
29576 v.AddArg(ptr)
29577 v.AddArg(val)
29578 v.AddArg(mem)
29579 return true
29580 }
29581
29582
29583
29584 for {
29585 t := v.Aux
29586 mem := v.Args[2]
29587 ptr := v.Args[0]
29588 val := v.Args[1]
29589 if !(t.(*types.Type).Size() == 4 && is32BitInt(val.Type)) {
29590 break
29591 }
29592 v.reset(OpPPC64MOVWstore)
29593 v.AddArg(ptr)
29594 v.AddArg(val)
29595 v.AddArg(mem)
29596 return true
29597 }
29598
29599
29600
29601 for {
29602 t := v.Aux
29603 mem := v.Args[2]
29604 ptr := v.Args[0]
29605 val := v.Args[1]
29606 if !(t.(*types.Type).Size() == 2) {
29607 break
29608 }
29609 v.reset(OpPPC64MOVHstore)
29610 v.AddArg(ptr)
29611 v.AddArg(val)
29612 v.AddArg(mem)
29613 return true
29614 }
29615
29616
29617
29618 for {
29619 t := v.Aux
29620 mem := v.Args[2]
29621 ptr := v.Args[0]
29622 val := v.Args[1]
29623 if !(t.(*types.Type).Size() == 1) {
29624 break
29625 }
29626 v.reset(OpPPC64MOVBstore)
29627 v.AddArg(ptr)
29628 v.AddArg(val)
29629 v.AddArg(mem)
29630 return true
29631 }
29632 return false
29633 }
29634 func rewriteValuePPC64_OpSub16_0(v *Value) bool {
29635
29636
29637
29638 for {
29639 y := v.Args[1]
29640 x := v.Args[0]
29641 v.reset(OpPPC64SUB)
29642 v.AddArg(x)
29643 v.AddArg(y)
29644 return true
29645 }
29646 }
29647 func rewriteValuePPC64_OpSub32_0(v *Value) bool {
29648
29649
29650
29651 for {
29652 y := v.Args[1]
29653 x := v.Args[0]
29654 v.reset(OpPPC64SUB)
29655 v.AddArg(x)
29656 v.AddArg(y)
29657 return true
29658 }
29659 }
29660 func rewriteValuePPC64_OpSub32F_0(v *Value) bool {
29661
29662
29663
29664 for {
29665 y := v.Args[1]
29666 x := v.Args[0]
29667 v.reset(OpPPC64FSUBS)
29668 v.AddArg(x)
29669 v.AddArg(y)
29670 return true
29671 }
29672 }
29673 func rewriteValuePPC64_OpSub64_0(v *Value) bool {
29674
29675
29676
29677 for {
29678 y := v.Args[1]
29679 x := v.Args[0]
29680 v.reset(OpPPC64SUB)
29681 v.AddArg(x)
29682 v.AddArg(y)
29683 return true
29684 }
29685 }
29686 func rewriteValuePPC64_OpSub64F_0(v *Value) bool {
29687
29688
29689
29690 for {
29691 y := v.Args[1]
29692 x := v.Args[0]
29693 v.reset(OpPPC64FSUB)
29694 v.AddArg(x)
29695 v.AddArg(y)
29696 return true
29697 }
29698 }
29699 func rewriteValuePPC64_OpSub8_0(v *Value) bool {
29700
29701
29702
29703 for {
29704 y := v.Args[1]
29705 x := v.Args[0]
29706 v.reset(OpPPC64SUB)
29707 v.AddArg(x)
29708 v.AddArg(y)
29709 return true
29710 }
29711 }
29712 func rewriteValuePPC64_OpSubPtr_0(v *Value) bool {
29713
29714
29715
29716 for {
29717 y := v.Args[1]
29718 x := v.Args[0]
29719 v.reset(OpPPC64SUB)
29720 v.AddArg(x)
29721 v.AddArg(y)
29722 return true
29723 }
29724 }
29725 func rewriteValuePPC64_OpTrunc_0(v *Value) bool {
29726
29727
29728
29729 for {
29730 x := v.Args[0]
29731 v.reset(OpPPC64FTRUNC)
29732 v.AddArg(x)
29733 return true
29734 }
29735 }
29736 func rewriteValuePPC64_OpTrunc16to8_0(v *Value) bool {
29737
29738
29739
29740 for {
29741 t := v.Type
29742 x := v.Args[0]
29743 if !(isSigned(t)) {
29744 break
29745 }
29746 v.reset(OpPPC64MOVBreg)
29747 v.AddArg(x)
29748 return true
29749 }
29750
29751
29752
29753 for {
29754 x := v.Args[0]
29755 v.reset(OpPPC64MOVBZreg)
29756 v.AddArg(x)
29757 return true
29758 }
29759 }
29760 func rewriteValuePPC64_OpTrunc32to16_0(v *Value) bool {
29761
29762
29763
29764 for {
29765 t := v.Type
29766 x := v.Args[0]
29767 if !(isSigned(t)) {
29768 break
29769 }
29770 v.reset(OpPPC64MOVHreg)
29771 v.AddArg(x)
29772 return true
29773 }
29774
29775
29776
29777 for {
29778 x := v.Args[0]
29779 v.reset(OpPPC64MOVHZreg)
29780 v.AddArg(x)
29781 return true
29782 }
29783 }
29784 func rewriteValuePPC64_OpTrunc32to8_0(v *Value) bool {
29785
29786
29787
29788 for {
29789 t := v.Type
29790 x := v.Args[0]
29791 if !(isSigned(t)) {
29792 break
29793 }
29794 v.reset(OpPPC64MOVBreg)
29795 v.AddArg(x)
29796 return true
29797 }
29798
29799
29800
29801 for {
29802 x := v.Args[0]
29803 v.reset(OpPPC64MOVBZreg)
29804 v.AddArg(x)
29805 return true
29806 }
29807 }
29808 func rewriteValuePPC64_OpTrunc64to16_0(v *Value) bool {
29809
29810
29811
29812 for {
29813 t := v.Type
29814 x := v.Args[0]
29815 if !(isSigned(t)) {
29816 break
29817 }
29818 v.reset(OpPPC64MOVHreg)
29819 v.AddArg(x)
29820 return true
29821 }
29822
29823
29824
29825 for {
29826 x := v.Args[0]
29827 v.reset(OpPPC64MOVHZreg)
29828 v.AddArg(x)
29829 return true
29830 }
29831 }
29832 func rewriteValuePPC64_OpTrunc64to32_0(v *Value) bool {
29833
29834
29835
29836 for {
29837 t := v.Type
29838 x := v.Args[0]
29839 if !(isSigned(t)) {
29840 break
29841 }
29842 v.reset(OpPPC64MOVWreg)
29843 v.AddArg(x)
29844 return true
29845 }
29846
29847
29848
29849 for {
29850 x := v.Args[0]
29851 v.reset(OpPPC64MOVWZreg)
29852 v.AddArg(x)
29853 return true
29854 }
29855 }
29856 func rewriteValuePPC64_OpTrunc64to8_0(v *Value) bool {
29857
29858
29859
29860 for {
29861 t := v.Type
29862 x := v.Args[0]
29863 if !(isSigned(t)) {
29864 break
29865 }
29866 v.reset(OpPPC64MOVBreg)
29867 v.AddArg(x)
29868 return true
29869 }
29870
29871
29872
29873 for {
29874 x := v.Args[0]
29875 v.reset(OpPPC64MOVBZreg)
29876 v.AddArg(x)
29877 return true
29878 }
29879 }
29880 func rewriteValuePPC64_OpWB_0(v *Value) bool {
29881
29882
29883
29884 for {
29885 fn := v.Aux
29886 mem := v.Args[2]
29887 destptr := v.Args[0]
29888 srcptr := v.Args[1]
29889 v.reset(OpPPC64LoweredWB)
29890 v.Aux = fn
29891 v.AddArg(destptr)
29892 v.AddArg(srcptr)
29893 v.AddArg(mem)
29894 return true
29895 }
29896 }
29897 func rewriteValuePPC64_OpXor16_0(v *Value) bool {
29898
29899
29900
29901 for {
29902 y := v.Args[1]
29903 x := v.Args[0]
29904 v.reset(OpPPC64XOR)
29905 v.AddArg(x)
29906 v.AddArg(y)
29907 return true
29908 }
29909 }
29910 func rewriteValuePPC64_OpXor32_0(v *Value) bool {
29911
29912
29913
29914 for {
29915 y := v.Args[1]
29916 x := v.Args[0]
29917 v.reset(OpPPC64XOR)
29918 v.AddArg(x)
29919 v.AddArg(y)
29920 return true
29921 }
29922 }
29923 func rewriteValuePPC64_OpXor64_0(v *Value) bool {
29924
29925
29926
29927 for {
29928 y := v.Args[1]
29929 x := v.Args[0]
29930 v.reset(OpPPC64XOR)
29931 v.AddArg(x)
29932 v.AddArg(y)
29933 return true
29934 }
29935 }
29936 func rewriteValuePPC64_OpXor8_0(v *Value) bool {
29937
29938
29939
29940 for {
29941 y := v.Args[1]
29942 x := v.Args[0]
29943 v.reset(OpPPC64XOR)
29944 v.AddArg(x)
29945 v.AddArg(y)
29946 return true
29947 }
29948 }
29949 func rewriteValuePPC64_OpZero_0(v *Value) bool {
29950 b := v.Block
29951
29952
29953
29954 for {
29955 if v.AuxInt != 0 {
29956 break
29957 }
29958 mem := v.Args[1]
29959 v.reset(OpCopy)
29960 v.Type = mem.Type
29961 v.AddArg(mem)
29962 return true
29963 }
29964
29965
29966
29967 for {
29968 if v.AuxInt != 1 {
29969 break
29970 }
29971 mem := v.Args[1]
29972 destptr := v.Args[0]
29973 v.reset(OpPPC64MOVBstorezero)
29974 v.AddArg(destptr)
29975 v.AddArg(mem)
29976 return true
29977 }
29978
29979
29980
29981 for {
29982 if v.AuxInt != 2 {
29983 break
29984 }
29985 mem := v.Args[1]
29986 destptr := v.Args[0]
29987 v.reset(OpPPC64MOVHstorezero)
29988 v.AddArg(destptr)
29989 v.AddArg(mem)
29990 return true
29991 }
29992
29993
29994
29995 for {
29996 if v.AuxInt != 3 {
29997 break
29998 }
29999 mem := v.Args[1]
30000 destptr := v.Args[0]
30001 v.reset(OpPPC64MOVBstorezero)
30002 v.AuxInt = 2
30003 v.AddArg(destptr)
30004 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem)
30005 v0.AddArg(destptr)
30006 v0.AddArg(mem)
30007 v.AddArg(v0)
30008 return true
30009 }
30010
30011
30012
30013 for {
30014 if v.AuxInt != 4 {
30015 break
30016 }
30017 mem := v.Args[1]
30018 destptr := v.Args[0]
30019 v.reset(OpPPC64MOVWstorezero)
30020 v.AddArg(destptr)
30021 v.AddArg(mem)
30022 return true
30023 }
30024
30025
30026
30027 for {
30028 if v.AuxInt != 5 {
30029 break
30030 }
30031 mem := v.Args[1]
30032 destptr := v.Args[0]
30033 v.reset(OpPPC64MOVBstorezero)
30034 v.AuxInt = 4
30035 v.AddArg(destptr)
30036 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem)
30037 v0.AddArg(destptr)
30038 v0.AddArg(mem)
30039 v.AddArg(v0)
30040 return true
30041 }
30042
30043
30044
30045 for {
30046 if v.AuxInt != 6 {
30047 break
30048 }
30049 mem := v.Args[1]
30050 destptr := v.Args[0]
30051 v.reset(OpPPC64MOVHstorezero)
30052 v.AuxInt = 4
30053 v.AddArg(destptr)
30054 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem)
30055 v0.AddArg(destptr)
30056 v0.AddArg(mem)
30057 v.AddArg(v0)
30058 return true
30059 }
30060
30061
30062
30063 for {
30064 if v.AuxInt != 7 {
30065 break
30066 }
30067 mem := v.Args[1]
30068 destptr := v.Args[0]
30069 v.reset(OpPPC64MOVBstorezero)
30070 v.AuxInt = 6
30071 v.AddArg(destptr)
30072 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem)
30073 v0.AuxInt = 4
30074 v0.AddArg(destptr)
30075 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem)
30076 v1.AddArg(destptr)
30077 v1.AddArg(mem)
30078 v0.AddArg(v1)
30079 v.AddArg(v0)
30080 return true
30081 }
30082
30083
30084
30085 for {
30086 if v.AuxInt != 8 {
30087 break
30088 }
30089 t := v.Aux
30090 mem := v.Args[1]
30091 destptr := v.Args[0]
30092 if !(t.(*types.Type).Alignment()%4 == 0) {
30093 break
30094 }
30095 v.reset(OpPPC64MOVDstorezero)
30096 v.AddArg(destptr)
30097 v.AddArg(mem)
30098 return true
30099 }
30100
30101
30102
30103 for {
30104 if v.AuxInt != 8 {
30105 break
30106 }
30107 mem := v.Args[1]
30108 destptr := v.Args[0]
30109 v.reset(OpPPC64MOVWstorezero)
30110 v.AuxInt = 4
30111 v.AddArg(destptr)
30112 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem)
30113 v0.AuxInt = 0
30114 v0.AddArg(destptr)
30115 v0.AddArg(mem)
30116 v.AddArg(v0)
30117 return true
30118 }
30119 return false
30120 }
30121 func rewriteValuePPC64_OpZero_10(v *Value) bool {
30122 b := v.Block
30123
30124
30125
30126 for {
30127 if v.AuxInt != 12 {
30128 break
30129 }
30130 t := v.Aux
30131 mem := v.Args[1]
30132 destptr := v.Args[0]
30133 if !(t.(*types.Type).Alignment()%4 == 0) {
30134 break
30135 }
30136 v.reset(OpPPC64MOVWstorezero)
30137 v.AuxInt = 8
30138 v.AddArg(destptr)
30139 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30140 v0.AuxInt = 0
30141 v0.AddArg(destptr)
30142 v0.AddArg(mem)
30143 v.AddArg(v0)
30144 return true
30145 }
30146
30147
30148
30149 for {
30150 if v.AuxInt != 16 {
30151 break
30152 }
30153 t := v.Aux
30154 mem := v.Args[1]
30155 destptr := v.Args[0]
30156 if !(t.(*types.Type).Alignment()%4 == 0) {
30157 break
30158 }
30159 v.reset(OpPPC64MOVDstorezero)
30160 v.AuxInt = 8
30161 v.AddArg(destptr)
30162 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30163 v0.AuxInt = 0
30164 v0.AddArg(destptr)
30165 v0.AddArg(mem)
30166 v.AddArg(v0)
30167 return true
30168 }
30169
30170
30171
30172 for {
30173 if v.AuxInt != 24 {
30174 break
30175 }
30176 t := v.Aux
30177 mem := v.Args[1]
30178 destptr := v.Args[0]
30179 if !(t.(*types.Type).Alignment()%4 == 0) {
30180 break
30181 }
30182 v.reset(OpPPC64MOVDstorezero)
30183 v.AuxInt = 16
30184 v.AddArg(destptr)
30185 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30186 v0.AuxInt = 8
30187 v0.AddArg(destptr)
30188 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30189 v1.AuxInt = 0
30190 v1.AddArg(destptr)
30191 v1.AddArg(mem)
30192 v0.AddArg(v1)
30193 v.AddArg(v0)
30194 return true
30195 }
30196
30197
30198
30199 for {
30200 if v.AuxInt != 32 {
30201 break
30202 }
30203 t := v.Aux
30204 mem := v.Args[1]
30205 destptr := v.Args[0]
30206 if !(t.(*types.Type).Alignment()%4 == 0) {
30207 break
30208 }
30209 v.reset(OpPPC64MOVDstorezero)
30210 v.AuxInt = 24
30211 v.AddArg(destptr)
30212 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30213 v0.AuxInt = 16
30214 v0.AddArg(destptr)
30215 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30216 v1.AuxInt = 8
30217 v1.AddArg(destptr)
30218 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem)
30219 v2.AuxInt = 0
30220 v2.AddArg(destptr)
30221 v2.AddArg(mem)
30222 v1.AddArg(v2)
30223 v0.AddArg(v1)
30224 v.AddArg(v0)
30225 return true
30226 }
30227
30228
30229
30230 for {
30231 s := v.AuxInt
30232 mem := v.Args[1]
30233 ptr := v.Args[0]
30234 v.reset(OpPPC64LoweredZero)
30235 v.AuxInt = s
30236 v.AddArg(ptr)
30237 v.AddArg(mem)
30238 return true
30239 }
30240 }
30241 func rewriteValuePPC64_OpZeroExt16to32_0(v *Value) bool {
30242
30243
30244
30245 for {
30246 x := v.Args[0]
30247 v.reset(OpPPC64MOVHZreg)
30248 v.AddArg(x)
30249 return true
30250 }
30251 }
30252 func rewriteValuePPC64_OpZeroExt16to64_0(v *Value) bool {
30253
30254
30255
30256 for {
30257 x := v.Args[0]
30258 v.reset(OpPPC64MOVHZreg)
30259 v.AddArg(x)
30260 return true
30261 }
30262 }
30263 func rewriteValuePPC64_OpZeroExt32to64_0(v *Value) bool {
30264
30265
30266
30267 for {
30268 x := v.Args[0]
30269 v.reset(OpPPC64MOVWZreg)
30270 v.AddArg(x)
30271 return true
30272 }
30273 }
30274 func rewriteValuePPC64_OpZeroExt8to16_0(v *Value) bool {
30275
30276
30277
30278 for {
30279 x := v.Args[0]
30280 v.reset(OpPPC64MOVBZreg)
30281 v.AddArg(x)
30282 return true
30283 }
30284 }
30285 func rewriteValuePPC64_OpZeroExt8to32_0(v *Value) bool {
30286
30287
30288
30289 for {
30290 x := v.Args[0]
30291 v.reset(OpPPC64MOVBZreg)
30292 v.AddArg(x)
30293 return true
30294 }
30295 }
30296 func rewriteValuePPC64_OpZeroExt8to64_0(v *Value) bool {
30297
30298
30299
30300 for {
30301 x := v.Args[0]
30302 v.reset(OpPPC64MOVBZreg)
30303 v.AddArg(x)
30304 return true
30305 }
30306 }
30307 func rewriteBlockPPC64(b *Block) bool {
30308 config := b.Func.Config
30309 typ := &config.Types
30310 _ = typ
30311 v := b.Control
30312 _ = v
30313 switch b.Kind {
30314 case BlockPPC64EQ:
30315
30316
30317
30318 for v.Op == OpPPC64CMPconst {
30319 if v.AuxInt != 0 {
30320 break
30321 }
30322 v_0 := v.Args[0]
30323 if v_0.Op != OpPPC64ANDconst {
30324 break
30325 }
30326 c := v_0.AuxInt
30327 x := v_0.Args[0]
30328 b.Kind = BlockPPC64EQ
30329 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30330 v0.AuxInt = c
30331 v0.AddArg(x)
30332 b.SetControl(v0)
30333 b.Aux = nil
30334 return true
30335 }
30336
30337
30338
30339 for v.Op == OpPPC64CMPWconst {
30340 if v.AuxInt != 0 {
30341 break
30342 }
30343 v_0 := v.Args[0]
30344 if v_0.Op != OpPPC64ANDconst {
30345 break
30346 }
30347 c := v_0.AuxInt
30348 x := v_0.Args[0]
30349 b.Kind = BlockPPC64EQ
30350 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30351 v0.AuxInt = c
30352 v0.AddArg(x)
30353 b.SetControl(v0)
30354 b.Aux = nil
30355 return true
30356 }
30357
30358
30359
30360 for v.Op == OpPPC64FlagEQ {
30361 b.Kind = BlockFirst
30362 b.SetControl(nil)
30363 b.Aux = nil
30364 return true
30365 }
30366
30367
30368
30369 for v.Op == OpPPC64FlagLT {
30370 b.Kind = BlockFirst
30371 b.SetControl(nil)
30372 b.Aux = nil
30373 b.swapSuccessors()
30374 return true
30375 }
30376
30377
30378
30379 for v.Op == OpPPC64FlagGT {
30380 b.Kind = BlockFirst
30381 b.SetControl(nil)
30382 b.Aux = nil
30383 b.swapSuccessors()
30384 return true
30385 }
30386
30387
30388
30389 for v.Op == OpPPC64InvertFlags {
30390 cmp := v.Args[0]
30391 b.Kind = BlockPPC64EQ
30392 b.SetControl(cmp)
30393 b.Aux = nil
30394 return true
30395 }
30396
30397
30398
30399 for v.Op == OpPPC64CMPconst {
30400 if v.AuxInt != 0 {
30401 break
30402 }
30403 v_0 := v.Args[0]
30404 if v_0.Op != OpPPC64ANDconst {
30405 break
30406 }
30407 c := v_0.AuxInt
30408 x := v_0.Args[0]
30409 b.Kind = BlockPPC64EQ
30410 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30411 v0.AuxInt = c
30412 v0.AddArg(x)
30413 b.SetControl(v0)
30414 b.Aux = nil
30415 return true
30416 }
30417
30418
30419
30420 for v.Op == OpPPC64CMPWconst {
30421 if v.AuxInt != 0 {
30422 break
30423 }
30424 v_0 := v.Args[0]
30425 if v_0.Op != OpPPC64ANDconst {
30426 break
30427 }
30428 c := v_0.AuxInt
30429 x := v_0.Args[0]
30430 b.Kind = BlockPPC64EQ
30431 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30432 v0.AuxInt = c
30433 v0.AddArg(x)
30434 b.SetControl(v0)
30435 b.Aux = nil
30436 return true
30437 }
30438
30439
30440
30441 for v.Op == OpPPC64CMPconst {
30442 if v.AuxInt != 0 {
30443 break
30444 }
30445 z := v.Args[0]
30446 if z.Op != OpPPC64AND {
30447 break
30448 }
30449 y := z.Args[1]
30450 x := z.Args[0]
30451 if !(z.Uses == 1) {
30452 break
30453 }
30454 b.Kind = BlockPPC64EQ
30455 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
30456 v0.AddArg(x)
30457 v0.AddArg(y)
30458 b.SetControl(v0)
30459 b.Aux = nil
30460 return true
30461 }
30462
30463
30464
30465 for v.Op == OpPPC64CMPconst {
30466 if v.AuxInt != 0 {
30467 break
30468 }
30469 z := v.Args[0]
30470 if z.Op != OpPPC64OR {
30471 break
30472 }
30473 y := z.Args[1]
30474 x := z.Args[0]
30475 if !(z.Uses == 1) {
30476 break
30477 }
30478 b.Kind = BlockPPC64EQ
30479 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
30480 v0.AddArg(x)
30481 v0.AddArg(y)
30482 b.SetControl(v0)
30483 b.Aux = nil
30484 return true
30485 }
30486
30487
30488
30489 for v.Op == OpPPC64CMPconst {
30490 if v.AuxInt != 0 {
30491 break
30492 }
30493 z := v.Args[0]
30494 if z.Op != OpPPC64XOR {
30495 break
30496 }
30497 y := z.Args[1]
30498 x := z.Args[0]
30499 if !(z.Uses == 1) {
30500 break
30501 }
30502 b.Kind = BlockPPC64EQ
30503 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
30504 v0.AddArg(x)
30505 v0.AddArg(y)
30506 b.SetControl(v0)
30507 b.Aux = nil
30508 return true
30509 }
30510 case BlockPPC64GE:
30511
30512
30513
30514 for v.Op == OpPPC64FlagEQ {
30515 b.Kind = BlockFirst
30516 b.SetControl(nil)
30517 b.Aux = nil
30518 return true
30519 }
30520
30521
30522
30523 for v.Op == OpPPC64FlagLT {
30524 b.Kind = BlockFirst
30525 b.SetControl(nil)
30526 b.Aux = nil
30527 b.swapSuccessors()
30528 return true
30529 }
30530
30531
30532
30533 for v.Op == OpPPC64FlagGT {
30534 b.Kind = BlockFirst
30535 b.SetControl(nil)
30536 b.Aux = nil
30537 return true
30538 }
30539
30540
30541
30542 for v.Op == OpPPC64InvertFlags {
30543 cmp := v.Args[0]
30544 b.Kind = BlockPPC64LE
30545 b.SetControl(cmp)
30546 b.Aux = nil
30547 return true
30548 }
30549
30550
30551
30552 for v.Op == OpPPC64CMPconst {
30553 if v.AuxInt != 0 {
30554 break
30555 }
30556 v_0 := v.Args[0]
30557 if v_0.Op != OpPPC64ANDconst {
30558 break
30559 }
30560 c := v_0.AuxInt
30561 x := v_0.Args[0]
30562 b.Kind = BlockPPC64GE
30563 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30564 v0.AuxInt = c
30565 v0.AddArg(x)
30566 b.SetControl(v0)
30567 b.Aux = nil
30568 return true
30569 }
30570
30571
30572
30573 for v.Op == OpPPC64CMPWconst {
30574 if v.AuxInt != 0 {
30575 break
30576 }
30577 v_0 := v.Args[0]
30578 if v_0.Op != OpPPC64ANDconst {
30579 break
30580 }
30581 c := v_0.AuxInt
30582 x := v_0.Args[0]
30583 b.Kind = BlockPPC64GE
30584 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30585 v0.AuxInt = c
30586 v0.AddArg(x)
30587 b.SetControl(v0)
30588 b.Aux = nil
30589 return true
30590 }
30591
30592
30593
30594 for v.Op == OpPPC64CMPconst {
30595 if v.AuxInt != 0 {
30596 break
30597 }
30598 z := v.Args[0]
30599 if z.Op != OpPPC64AND {
30600 break
30601 }
30602 y := z.Args[1]
30603 x := z.Args[0]
30604 if !(z.Uses == 1) {
30605 break
30606 }
30607 b.Kind = BlockPPC64GE
30608 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
30609 v0.AddArg(x)
30610 v0.AddArg(y)
30611 b.SetControl(v0)
30612 b.Aux = nil
30613 return true
30614 }
30615
30616
30617
30618 for v.Op == OpPPC64CMPconst {
30619 if v.AuxInt != 0 {
30620 break
30621 }
30622 z := v.Args[0]
30623 if z.Op != OpPPC64OR {
30624 break
30625 }
30626 y := z.Args[1]
30627 x := z.Args[0]
30628 if !(z.Uses == 1) {
30629 break
30630 }
30631 b.Kind = BlockPPC64GE
30632 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
30633 v0.AddArg(x)
30634 v0.AddArg(y)
30635 b.SetControl(v0)
30636 b.Aux = nil
30637 return true
30638 }
30639
30640
30641
30642 for v.Op == OpPPC64CMPconst {
30643 if v.AuxInt != 0 {
30644 break
30645 }
30646 z := v.Args[0]
30647 if z.Op != OpPPC64XOR {
30648 break
30649 }
30650 y := z.Args[1]
30651 x := z.Args[0]
30652 if !(z.Uses == 1) {
30653 break
30654 }
30655 b.Kind = BlockPPC64GE
30656 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
30657 v0.AddArg(x)
30658 v0.AddArg(y)
30659 b.SetControl(v0)
30660 b.Aux = nil
30661 return true
30662 }
30663 case BlockPPC64GT:
30664
30665
30666
30667 for v.Op == OpPPC64FlagEQ {
30668 b.Kind = BlockFirst
30669 b.SetControl(nil)
30670 b.Aux = nil
30671 b.swapSuccessors()
30672 return true
30673 }
30674
30675
30676
30677 for v.Op == OpPPC64FlagLT {
30678 b.Kind = BlockFirst
30679 b.SetControl(nil)
30680 b.Aux = nil
30681 b.swapSuccessors()
30682 return true
30683 }
30684
30685
30686
30687 for v.Op == OpPPC64FlagGT {
30688 b.Kind = BlockFirst
30689 b.SetControl(nil)
30690 b.Aux = nil
30691 return true
30692 }
30693
30694
30695
30696 for v.Op == OpPPC64InvertFlags {
30697 cmp := v.Args[0]
30698 b.Kind = BlockPPC64LT
30699 b.SetControl(cmp)
30700 b.Aux = nil
30701 return true
30702 }
30703
30704
30705
30706 for v.Op == OpPPC64CMPconst {
30707 if v.AuxInt != 0 {
30708 break
30709 }
30710 v_0 := v.Args[0]
30711 if v_0.Op != OpPPC64ANDconst {
30712 break
30713 }
30714 c := v_0.AuxInt
30715 x := v_0.Args[0]
30716 b.Kind = BlockPPC64GT
30717 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30718 v0.AuxInt = c
30719 v0.AddArg(x)
30720 b.SetControl(v0)
30721 b.Aux = nil
30722 return true
30723 }
30724
30725
30726
30727 for v.Op == OpPPC64CMPWconst {
30728 if v.AuxInt != 0 {
30729 break
30730 }
30731 v_0 := v.Args[0]
30732 if v_0.Op != OpPPC64ANDconst {
30733 break
30734 }
30735 c := v_0.AuxInt
30736 x := v_0.Args[0]
30737 b.Kind = BlockPPC64GT
30738 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30739 v0.AuxInt = c
30740 v0.AddArg(x)
30741 b.SetControl(v0)
30742 b.Aux = nil
30743 return true
30744 }
30745
30746
30747
30748 for v.Op == OpPPC64CMPconst {
30749 if v.AuxInt != 0 {
30750 break
30751 }
30752 z := v.Args[0]
30753 if z.Op != OpPPC64AND {
30754 break
30755 }
30756 y := z.Args[1]
30757 x := z.Args[0]
30758 if !(z.Uses == 1) {
30759 break
30760 }
30761 b.Kind = BlockPPC64GT
30762 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
30763 v0.AddArg(x)
30764 v0.AddArg(y)
30765 b.SetControl(v0)
30766 b.Aux = nil
30767 return true
30768 }
30769
30770
30771
30772 for v.Op == OpPPC64CMPconst {
30773 if v.AuxInt != 0 {
30774 break
30775 }
30776 z := v.Args[0]
30777 if z.Op != OpPPC64OR {
30778 break
30779 }
30780 y := z.Args[1]
30781 x := z.Args[0]
30782 if !(z.Uses == 1) {
30783 break
30784 }
30785 b.Kind = BlockPPC64GT
30786 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
30787 v0.AddArg(x)
30788 v0.AddArg(y)
30789 b.SetControl(v0)
30790 b.Aux = nil
30791 return true
30792 }
30793
30794
30795
30796 for v.Op == OpPPC64CMPconst {
30797 if v.AuxInt != 0 {
30798 break
30799 }
30800 z := v.Args[0]
30801 if z.Op != OpPPC64XOR {
30802 break
30803 }
30804 y := z.Args[1]
30805 x := z.Args[0]
30806 if !(z.Uses == 1) {
30807 break
30808 }
30809 b.Kind = BlockPPC64GT
30810 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
30811 v0.AddArg(x)
30812 v0.AddArg(y)
30813 b.SetControl(v0)
30814 b.Aux = nil
30815 return true
30816 }
30817 case BlockIf:
30818
30819
30820
30821 for v.Op == OpPPC64Equal {
30822 cc := v.Args[0]
30823 b.Kind = BlockPPC64EQ
30824 b.SetControl(cc)
30825 b.Aux = nil
30826 return true
30827 }
30828
30829
30830
30831 for v.Op == OpPPC64NotEqual {
30832 cc := v.Args[0]
30833 b.Kind = BlockPPC64NE
30834 b.SetControl(cc)
30835 b.Aux = nil
30836 return true
30837 }
30838
30839
30840
30841 for v.Op == OpPPC64LessThan {
30842 cc := v.Args[0]
30843 b.Kind = BlockPPC64LT
30844 b.SetControl(cc)
30845 b.Aux = nil
30846 return true
30847 }
30848
30849
30850
30851 for v.Op == OpPPC64LessEqual {
30852 cc := v.Args[0]
30853 b.Kind = BlockPPC64LE
30854 b.SetControl(cc)
30855 b.Aux = nil
30856 return true
30857 }
30858
30859
30860
30861 for v.Op == OpPPC64GreaterThan {
30862 cc := v.Args[0]
30863 b.Kind = BlockPPC64GT
30864 b.SetControl(cc)
30865 b.Aux = nil
30866 return true
30867 }
30868
30869
30870
30871 for v.Op == OpPPC64GreaterEqual {
30872 cc := v.Args[0]
30873 b.Kind = BlockPPC64GE
30874 b.SetControl(cc)
30875 b.Aux = nil
30876 return true
30877 }
30878
30879
30880
30881 for v.Op == OpPPC64FLessThan {
30882 cc := v.Args[0]
30883 b.Kind = BlockPPC64FLT
30884 b.SetControl(cc)
30885 b.Aux = nil
30886 return true
30887 }
30888
30889
30890
30891 for v.Op == OpPPC64FLessEqual {
30892 cc := v.Args[0]
30893 b.Kind = BlockPPC64FLE
30894 b.SetControl(cc)
30895 b.Aux = nil
30896 return true
30897 }
30898
30899
30900
30901 for v.Op == OpPPC64FGreaterThan {
30902 cc := v.Args[0]
30903 b.Kind = BlockPPC64FGT
30904 b.SetControl(cc)
30905 b.Aux = nil
30906 return true
30907 }
30908
30909
30910
30911 for v.Op == OpPPC64FGreaterEqual {
30912 cc := v.Args[0]
30913 b.Kind = BlockPPC64FGE
30914 b.SetControl(cc)
30915 b.Aux = nil
30916 return true
30917 }
30918
30919
30920
30921 for {
30922 cond := b.Control
30923 b.Kind = BlockPPC64NE
30924 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags)
30925 v0.AuxInt = 0
30926 v0.AddArg(cond)
30927 b.SetControl(v0)
30928 b.Aux = nil
30929 return true
30930 }
30931 case BlockPPC64LE:
30932
30933
30934
30935 for v.Op == OpPPC64FlagEQ {
30936 b.Kind = BlockFirst
30937 b.SetControl(nil)
30938 b.Aux = nil
30939 return true
30940 }
30941
30942
30943
30944 for v.Op == OpPPC64FlagLT {
30945 b.Kind = BlockFirst
30946 b.SetControl(nil)
30947 b.Aux = nil
30948 return true
30949 }
30950
30951
30952
30953 for v.Op == OpPPC64FlagGT {
30954 b.Kind = BlockFirst
30955 b.SetControl(nil)
30956 b.Aux = nil
30957 b.swapSuccessors()
30958 return true
30959 }
30960
30961
30962
30963 for v.Op == OpPPC64InvertFlags {
30964 cmp := v.Args[0]
30965 b.Kind = BlockPPC64GE
30966 b.SetControl(cmp)
30967 b.Aux = nil
30968 return true
30969 }
30970
30971
30972
30973 for v.Op == OpPPC64CMPconst {
30974 if v.AuxInt != 0 {
30975 break
30976 }
30977 v_0 := v.Args[0]
30978 if v_0.Op != OpPPC64ANDconst {
30979 break
30980 }
30981 c := v_0.AuxInt
30982 x := v_0.Args[0]
30983 b.Kind = BlockPPC64LE
30984 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
30985 v0.AuxInt = c
30986 v0.AddArg(x)
30987 b.SetControl(v0)
30988 b.Aux = nil
30989 return true
30990 }
30991
30992
30993
30994 for v.Op == OpPPC64CMPWconst {
30995 if v.AuxInt != 0 {
30996 break
30997 }
30998 v_0 := v.Args[0]
30999 if v_0.Op != OpPPC64ANDconst {
31000 break
31001 }
31002 c := v_0.AuxInt
31003 x := v_0.Args[0]
31004 b.Kind = BlockPPC64LE
31005 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31006 v0.AuxInt = c
31007 v0.AddArg(x)
31008 b.SetControl(v0)
31009 b.Aux = nil
31010 return true
31011 }
31012
31013
31014
31015 for v.Op == OpPPC64CMPconst {
31016 if v.AuxInt != 0 {
31017 break
31018 }
31019 z := v.Args[0]
31020 if z.Op != OpPPC64AND {
31021 break
31022 }
31023 y := z.Args[1]
31024 x := z.Args[0]
31025 if !(z.Uses == 1) {
31026 break
31027 }
31028 b.Kind = BlockPPC64LE
31029 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
31030 v0.AddArg(x)
31031 v0.AddArg(y)
31032 b.SetControl(v0)
31033 b.Aux = nil
31034 return true
31035 }
31036
31037
31038
31039 for v.Op == OpPPC64CMPconst {
31040 if v.AuxInt != 0 {
31041 break
31042 }
31043 z := v.Args[0]
31044 if z.Op != OpPPC64OR {
31045 break
31046 }
31047 y := z.Args[1]
31048 x := z.Args[0]
31049 if !(z.Uses == 1) {
31050 break
31051 }
31052 b.Kind = BlockPPC64LE
31053 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
31054 v0.AddArg(x)
31055 v0.AddArg(y)
31056 b.SetControl(v0)
31057 b.Aux = nil
31058 return true
31059 }
31060
31061
31062
31063 for v.Op == OpPPC64CMPconst {
31064 if v.AuxInt != 0 {
31065 break
31066 }
31067 z := v.Args[0]
31068 if z.Op != OpPPC64XOR {
31069 break
31070 }
31071 y := z.Args[1]
31072 x := z.Args[0]
31073 if !(z.Uses == 1) {
31074 break
31075 }
31076 b.Kind = BlockPPC64LE
31077 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
31078 v0.AddArg(x)
31079 v0.AddArg(y)
31080 b.SetControl(v0)
31081 b.Aux = nil
31082 return true
31083 }
31084 case BlockPPC64LT:
31085
31086
31087
31088 for v.Op == OpPPC64FlagEQ {
31089 b.Kind = BlockFirst
31090 b.SetControl(nil)
31091 b.Aux = nil
31092 b.swapSuccessors()
31093 return true
31094 }
31095
31096
31097
31098 for v.Op == OpPPC64FlagLT {
31099 b.Kind = BlockFirst
31100 b.SetControl(nil)
31101 b.Aux = nil
31102 return true
31103 }
31104
31105
31106
31107 for v.Op == OpPPC64FlagGT {
31108 b.Kind = BlockFirst
31109 b.SetControl(nil)
31110 b.Aux = nil
31111 b.swapSuccessors()
31112 return true
31113 }
31114
31115
31116
31117 for v.Op == OpPPC64InvertFlags {
31118 cmp := v.Args[0]
31119 b.Kind = BlockPPC64GT
31120 b.SetControl(cmp)
31121 b.Aux = nil
31122 return true
31123 }
31124
31125
31126
31127 for v.Op == OpPPC64CMPconst {
31128 if v.AuxInt != 0 {
31129 break
31130 }
31131 v_0 := v.Args[0]
31132 if v_0.Op != OpPPC64ANDconst {
31133 break
31134 }
31135 c := v_0.AuxInt
31136 x := v_0.Args[0]
31137 b.Kind = BlockPPC64LT
31138 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31139 v0.AuxInt = c
31140 v0.AddArg(x)
31141 b.SetControl(v0)
31142 b.Aux = nil
31143 return true
31144 }
31145
31146
31147
31148 for v.Op == OpPPC64CMPWconst {
31149 if v.AuxInt != 0 {
31150 break
31151 }
31152 v_0 := v.Args[0]
31153 if v_0.Op != OpPPC64ANDconst {
31154 break
31155 }
31156 c := v_0.AuxInt
31157 x := v_0.Args[0]
31158 b.Kind = BlockPPC64LT
31159 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31160 v0.AuxInt = c
31161 v0.AddArg(x)
31162 b.SetControl(v0)
31163 b.Aux = nil
31164 return true
31165 }
31166
31167
31168
31169 for v.Op == OpPPC64CMPconst {
31170 if v.AuxInt != 0 {
31171 break
31172 }
31173 z := v.Args[0]
31174 if z.Op != OpPPC64AND {
31175 break
31176 }
31177 y := z.Args[1]
31178 x := z.Args[0]
31179 if !(z.Uses == 1) {
31180 break
31181 }
31182 b.Kind = BlockPPC64LT
31183 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
31184 v0.AddArg(x)
31185 v0.AddArg(y)
31186 b.SetControl(v0)
31187 b.Aux = nil
31188 return true
31189 }
31190
31191
31192
31193 for v.Op == OpPPC64CMPconst {
31194 if v.AuxInt != 0 {
31195 break
31196 }
31197 z := v.Args[0]
31198 if z.Op != OpPPC64OR {
31199 break
31200 }
31201 y := z.Args[1]
31202 x := z.Args[0]
31203 if !(z.Uses == 1) {
31204 break
31205 }
31206 b.Kind = BlockPPC64LT
31207 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
31208 v0.AddArg(x)
31209 v0.AddArg(y)
31210 b.SetControl(v0)
31211 b.Aux = nil
31212 return true
31213 }
31214
31215
31216
31217 for v.Op == OpPPC64CMPconst {
31218 if v.AuxInt != 0 {
31219 break
31220 }
31221 z := v.Args[0]
31222 if z.Op != OpPPC64XOR {
31223 break
31224 }
31225 y := z.Args[1]
31226 x := z.Args[0]
31227 if !(z.Uses == 1) {
31228 break
31229 }
31230 b.Kind = BlockPPC64LT
31231 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
31232 v0.AddArg(x)
31233 v0.AddArg(y)
31234 b.SetControl(v0)
31235 b.Aux = nil
31236 return true
31237 }
31238 case BlockPPC64NE:
31239
31240
31241
31242 for v.Op == OpPPC64CMPWconst {
31243 if v.AuxInt != 0 {
31244 break
31245 }
31246 v_0 := v.Args[0]
31247 if v_0.Op != OpPPC64Equal {
31248 break
31249 }
31250 cc := v_0.Args[0]
31251 b.Kind = BlockPPC64EQ
31252 b.SetControl(cc)
31253 b.Aux = nil
31254 return true
31255 }
31256
31257
31258
31259 for v.Op == OpPPC64CMPWconst {
31260 if v.AuxInt != 0 {
31261 break
31262 }
31263 v_0 := v.Args[0]
31264 if v_0.Op != OpPPC64NotEqual {
31265 break
31266 }
31267 cc := v_0.Args[0]
31268 b.Kind = BlockPPC64NE
31269 b.SetControl(cc)
31270 b.Aux = nil
31271 return true
31272 }
31273
31274
31275
31276 for v.Op == OpPPC64CMPWconst {
31277 if v.AuxInt != 0 {
31278 break
31279 }
31280 v_0 := v.Args[0]
31281 if v_0.Op != OpPPC64LessThan {
31282 break
31283 }
31284 cc := v_0.Args[0]
31285 b.Kind = BlockPPC64LT
31286 b.SetControl(cc)
31287 b.Aux = nil
31288 return true
31289 }
31290
31291
31292
31293 for v.Op == OpPPC64CMPWconst {
31294 if v.AuxInt != 0 {
31295 break
31296 }
31297 v_0 := v.Args[0]
31298 if v_0.Op != OpPPC64LessEqual {
31299 break
31300 }
31301 cc := v_0.Args[0]
31302 b.Kind = BlockPPC64LE
31303 b.SetControl(cc)
31304 b.Aux = nil
31305 return true
31306 }
31307
31308
31309
31310 for v.Op == OpPPC64CMPWconst {
31311 if v.AuxInt != 0 {
31312 break
31313 }
31314 v_0 := v.Args[0]
31315 if v_0.Op != OpPPC64GreaterThan {
31316 break
31317 }
31318 cc := v_0.Args[0]
31319 b.Kind = BlockPPC64GT
31320 b.SetControl(cc)
31321 b.Aux = nil
31322 return true
31323 }
31324
31325
31326
31327 for v.Op == OpPPC64CMPWconst {
31328 if v.AuxInt != 0 {
31329 break
31330 }
31331 v_0 := v.Args[0]
31332 if v_0.Op != OpPPC64GreaterEqual {
31333 break
31334 }
31335 cc := v_0.Args[0]
31336 b.Kind = BlockPPC64GE
31337 b.SetControl(cc)
31338 b.Aux = nil
31339 return true
31340 }
31341
31342
31343
31344 for v.Op == OpPPC64CMPWconst {
31345 if v.AuxInt != 0 {
31346 break
31347 }
31348 v_0 := v.Args[0]
31349 if v_0.Op != OpPPC64FLessThan {
31350 break
31351 }
31352 cc := v_0.Args[0]
31353 b.Kind = BlockPPC64FLT
31354 b.SetControl(cc)
31355 b.Aux = nil
31356 return true
31357 }
31358
31359
31360
31361 for v.Op == OpPPC64CMPWconst {
31362 if v.AuxInt != 0 {
31363 break
31364 }
31365 v_0 := v.Args[0]
31366 if v_0.Op != OpPPC64FLessEqual {
31367 break
31368 }
31369 cc := v_0.Args[0]
31370 b.Kind = BlockPPC64FLE
31371 b.SetControl(cc)
31372 b.Aux = nil
31373 return true
31374 }
31375
31376
31377
31378 for v.Op == OpPPC64CMPWconst {
31379 if v.AuxInt != 0 {
31380 break
31381 }
31382 v_0 := v.Args[0]
31383 if v_0.Op != OpPPC64FGreaterThan {
31384 break
31385 }
31386 cc := v_0.Args[0]
31387 b.Kind = BlockPPC64FGT
31388 b.SetControl(cc)
31389 b.Aux = nil
31390 return true
31391 }
31392
31393
31394
31395 for v.Op == OpPPC64CMPWconst {
31396 if v.AuxInt != 0 {
31397 break
31398 }
31399 v_0 := v.Args[0]
31400 if v_0.Op != OpPPC64FGreaterEqual {
31401 break
31402 }
31403 cc := v_0.Args[0]
31404 b.Kind = BlockPPC64FGE
31405 b.SetControl(cc)
31406 b.Aux = nil
31407 return true
31408 }
31409
31410
31411
31412 for v.Op == OpPPC64CMPconst {
31413 if v.AuxInt != 0 {
31414 break
31415 }
31416 v_0 := v.Args[0]
31417 if v_0.Op != OpPPC64ANDconst {
31418 break
31419 }
31420 c := v_0.AuxInt
31421 x := v_0.Args[0]
31422 b.Kind = BlockPPC64NE
31423 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31424 v0.AuxInt = c
31425 v0.AddArg(x)
31426 b.SetControl(v0)
31427 b.Aux = nil
31428 return true
31429 }
31430
31431
31432
31433 for v.Op == OpPPC64CMPWconst {
31434 if v.AuxInt != 0 {
31435 break
31436 }
31437 v_0 := v.Args[0]
31438 if v_0.Op != OpPPC64ANDconst {
31439 break
31440 }
31441 c := v_0.AuxInt
31442 x := v_0.Args[0]
31443 b.Kind = BlockPPC64NE
31444 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31445 v0.AuxInt = c
31446 v0.AddArg(x)
31447 b.SetControl(v0)
31448 b.Aux = nil
31449 return true
31450 }
31451
31452
31453
31454 for v.Op == OpPPC64FlagEQ {
31455 b.Kind = BlockFirst
31456 b.SetControl(nil)
31457 b.Aux = nil
31458 b.swapSuccessors()
31459 return true
31460 }
31461
31462
31463
31464 for v.Op == OpPPC64FlagLT {
31465 b.Kind = BlockFirst
31466 b.SetControl(nil)
31467 b.Aux = nil
31468 return true
31469 }
31470
31471
31472
31473 for v.Op == OpPPC64FlagGT {
31474 b.Kind = BlockFirst
31475 b.SetControl(nil)
31476 b.Aux = nil
31477 return true
31478 }
31479
31480
31481
31482 for v.Op == OpPPC64InvertFlags {
31483 cmp := v.Args[0]
31484 b.Kind = BlockPPC64NE
31485 b.SetControl(cmp)
31486 b.Aux = nil
31487 return true
31488 }
31489
31490
31491
31492 for v.Op == OpPPC64CMPconst {
31493 if v.AuxInt != 0 {
31494 break
31495 }
31496 v_0 := v.Args[0]
31497 if v_0.Op != OpPPC64ANDconst {
31498 break
31499 }
31500 c := v_0.AuxInt
31501 x := v_0.Args[0]
31502 b.Kind = BlockPPC64NE
31503 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31504 v0.AuxInt = c
31505 v0.AddArg(x)
31506 b.SetControl(v0)
31507 b.Aux = nil
31508 return true
31509 }
31510
31511
31512
31513 for v.Op == OpPPC64CMPWconst {
31514 if v.AuxInt != 0 {
31515 break
31516 }
31517 v_0 := v.Args[0]
31518 if v_0.Op != OpPPC64ANDconst {
31519 break
31520 }
31521 c := v_0.AuxInt
31522 x := v_0.Args[0]
31523 b.Kind = BlockPPC64NE
31524 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags)
31525 v0.AuxInt = c
31526 v0.AddArg(x)
31527 b.SetControl(v0)
31528 b.Aux = nil
31529 return true
31530 }
31531
31532
31533
31534 for v.Op == OpPPC64CMPconst {
31535 if v.AuxInt != 0 {
31536 break
31537 }
31538 z := v.Args[0]
31539 if z.Op != OpPPC64AND {
31540 break
31541 }
31542 y := z.Args[1]
31543 x := z.Args[0]
31544 if !(z.Uses == 1) {
31545 break
31546 }
31547 b.Kind = BlockPPC64NE
31548 v0 := b.NewValue0(v.Pos, OpPPC64ANDCC, types.TypeFlags)
31549 v0.AddArg(x)
31550 v0.AddArg(y)
31551 b.SetControl(v0)
31552 b.Aux = nil
31553 return true
31554 }
31555
31556
31557
31558 for v.Op == OpPPC64CMPconst {
31559 if v.AuxInt != 0 {
31560 break
31561 }
31562 z := v.Args[0]
31563 if z.Op != OpPPC64OR {
31564 break
31565 }
31566 y := z.Args[1]
31567 x := z.Args[0]
31568 if !(z.Uses == 1) {
31569 break
31570 }
31571 b.Kind = BlockPPC64NE
31572 v0 := b.NewValue0(v.Pos, OpPPC64ORCC, types.TypeFlags)
31573 v0.AddArg(x)
31574 v0.AddArg(y)
31575 b.SetControl(v0)
31576 b.Aux = nil
31577 return true
31578 }
31579
31580
31581
31582 for v.Op == OpPPC64CMPconst {
31583 if v.AuxInt != 0 {
31584 break
31585 }
31586 z := v.Args[0]
31587 if z.Op != OpPPC64XOR {
31588 break
31589 }
31590 y := z.Args[1]
31591 x := z.Args[0]
31592 if !(z.Uses == 1) {
31593 break
31594 }
31595 b.Kind = BlockPPC64NE
31596 v0 := b.NewValue0(v.Pos, OpPPC64XORCC, types.TypeFlags)
31597 v0.AddArg(x)
31598 v0.AddArg(y)
31599 b.SetControl(v0)
31600 b.Aux = nil
31601 return true
31602 }
31603 }
31604 return false
31605 }
31606
View as plain text