1
2
3 package ssa
4
5 import "cmd/compile/internal/types"
6
7 func rewriteValueLOONG64(v *Value) bool {
8 switch v.Op {
9 case OpAbs:
10 v.Op = OpLOONG64ABSD
11 return true
12 case OpAdd16:
13 v.Op = OpLOONG64ADDV
14 return true
15 case OpAdd32:
16 v.Op = OpLOONG64ADDV
17 return true
18 case OpAdd32F:
19 v.Op = OpLOONG64ADDF
20 return true
21 case OpAdd64:
22 v.Op = OpLOONG64ADDV
23 return true
24 case OpAdd64F:
25 v.Op = OpLOONG64ADDD
26 return true
27 case OpAdd8:
28 v.Op = OpLOONG64ADDV
29 return true
30 case OpAddPtr:
31 v.Op = OpLOONG64ADDV
32 return true
33 case OpAddr:
34 return rewriteValueLOONG64_OpAddr(v)
35 case OpAnd16:
36 v.Op = OpLOONG64AND
37 return true
38 case OpAnd32:
39 v.Op = OpLOONG64AND
40 return true
41 case OpAnd64:
42 v.Op = OpLOONG64AND
43 return true
44 case OpAnd8:
45 v.Op = OpLOONG64AND
46 return true
47 case OpAndB:
48 v.Op = OpLOONG64AND
49 return true
50 case OpAtomicAdd32:
51 v.Op = OpLOONG64LoweredAtomicAdd32
52 return true
53 case OpAtomicAdd64:
54 v.Op = OpLOONG64LoweredAtomicAdd64
55 return true
56 case OpAtomicAnd32:
57 v.Op = OpLOONG64LoweredAtomicAnd32
58 return true
59 case OpAtomicAnd32value:
60 v.Op = OpLOONG64LoweredAtomicAnd32value
61 return true
62 case OpAtomicAnd64value:
63 v.Op = OpLOONG64LoweredAtomicAnd64value
64 return true
65 case OpAtomicAnd8:
66 return rewriteValueLOONG64_OpAtomicAnd8(v)
67 case OpAtomicCompareAndSwap32:
68 return rewriteValueLOONG64_OpAtomicCompareAndSwap32(v)
69 case OpAtomicCompareAndSwap32Variant:
70 return rewriteValueLOONG64_OpAtomicCompareAndSwap32Variant(v)
71 case OpAtomicCompareAndSwap64:
72 v.Op = OpLOONG64LoweredAtomicCas64
73 return true
74 case OpAtomicCompareAndSwap64Variant:
75 v.Op = OpLOONG64LoweredAtomicCas64Variant
76 return true
77 case OpAtomicExchange32:
78 v.Op = OpLOONG64LoweredAtomicExchange32
79 return true
80 case OpAtomicExchange64:
81 v.Op = OpLOONG64LoweredAtomicExchange64
82 return true
83 case OpAtomicExchange8Variant:
84 v.Op = OpLOONG64LoweredAtomicExchange8Variant
85 return true
86 case OpAtomicLoad32:
87 v.Op = OpLOONG64LoweredAtomicLoad32
88 return true
89 case OpAtomicLoad64:
90 v.Op = OpLOONG64LoweredAtomicLoad64
91 return true
92 case OpAtomicLoad8:
93 v.Op = OpLOONG64LoweredAtomicLoad8
94 return true
95 case OpAtomicLoadPtr:
96 v.Op = OpLOONG64LoweredAtomicLoad64
97 return true
98 case OpAtomicOr32:
99 v.Op = OpLOONG64LoweredAtomicOr32
100 return true
101 case OpAtomicOr32value:
102 v.Op = OpLOONG64LoweredAtomicOr32value
103 return true
104 case OpAtomicOr64value:
105 v.Op = OpLOONG64LoweredAtomicOr64value
106 return true
107 case OpAtomicOr8:
108 return rewriteValueLOONG64_OpAtomicOr8(v)
109 case OpAtomicStore32:
110 v.Op = OpLOONG64LoweredAtomicStore32
111 return true
112 case OpAtomicStore32Variant:
113 v.Op = OpLOONG64LoweredAtomicStore32Variant
114 return true
115 case OpAtomicStore64:
116 v.Op = OpLOONG64LoweredAtomicStore64
117 return true
118 case OpAtomicStore64Variant:
119 v.Op = OpLOONG64LoweredAtomicStore64Variant
120 return true
121 case OpAtomicStore8:
122 v.Op = OpLOONG64LoweredAtomicStore8
123 return true
124 case OpAtomicStore8Variant:
125 v.Op = OpLOONG64LoweredAtomicStore8Variant
126 return true
127 case OpAtomicStorePtrNoWB:
128 v.Op = OpLOONG64LoweredAtomicStore64
129 return true
130 case OpAvg64u:
131 return rewriteValueLOONG64_OpAvg64u(v)
132 case OpBitLen32:
133 return rewriteValueLOONG64_OpBitLen32(v)
134 case OpBitLen64:
135 return rewriteValueLOONG64_OpBitLen64(v)
136 case OpBitRev16:
137 return rewriteValueLOONG64_OpBitRev16(v)
138 case OpBitRev32:
139 v.Op = OpLOONG64BITREVW
140 return true
141 case OpBitRev64:
142 v.Op = OpLOONG64BITREVV
143 return true
144 case OpBitRev8:
145 v.Op = OpLOONG64BITREV4B
146 return true
147 case OpBswap16:
148 v.Op = OpLOONG64REVB2H
149 return true
150 case OpBswap32:
151 v.Op = OpLOONG64REVB2W
152 return true
153 case OpBswap64:
154 v.Op = OpLOONG64REVBV
155 return true
156 case OpClosureCall:
157 v.Op = OpLOONG64CALLclosure
158 return true
159 case OpCom16:
160 return rewriteValueLOONG64_OpCom16(v)
161 case OpCom32:
162 return rewriteValueLOONG64_OpCom32(v)
163 case OpCom64:
164 return rewriteValueLOONG64_OpCom64(v)
165 case OpCom8:
166 return rewriteValueLOONG64_OpCom8(v)
167 case OpCondSelect:
168 return rewriteValueLOONG64_OpCondSelect(v)
169 case OpConst16:
170 return rewriteValueLOONG64_OpConst16(v)
171 case OpConst32:
172 return rewriteValueLOONG64_OpConst32(v)
173 case OpConst32F:
174 return rewriteValueLOONG64_OpConst32F(v)
175 case OpConst64:
176 return rewriteValueLOONG64_OpConst64(v)
177 case OpConst64F:
178 return rewriteValueLOONG64_OpConst64F(v)
179 case OpConst8:
180 return rewriteValueLOONG64_OpConst8(v)
181 case OpConstBool:
182 return rewriteValueLOONG64_OpConstBool(v)
183 case OpConstNil:
184 return rewriteValueLOONG64_OpConstNil(v)
185 case OpCopysign:
186 v.Op = OpLOONG64FCOPYSGD
187 return true
188 case OpCtz32:
189 v.Op = OpLOONG64CTZW
190 return true
191 case OpCtz32NonZero:
192 v.Op = OpCtz32
193 return true
194 case OpCtz64:
195 v.Op = OpLOONG64CTZV
196 return true
197 case OpCtz64NonZero:
198 v.Op = OpCtz64
199 return true
200 case OpCvt32Fto32:
201 v.Op = OpLOONG64TRUNCFW
202 return true
203 case OpCvt32Fto64:
204 v.Op = OpLOONG64TRUNCFV
205 return true
206 case OpCvt32Fto64F:
207 v.Op = OpLOONG64MOVFD
208 return true
209 case OpCvt32to32F:
210 v.Op = OpLOONG64MOVWF
211 return true
212 case OpCvt32to64F:
213 v.Op = OpLOONG64MOVWD
214 return true
215 case OpCvt64Fto32:
216 v.Op = OpLOONG64TRUNCDW
217 return true
218 case OpCvt64Fto32F:
219 v.Op = OpLOONG64MOVDF
220 return true
221 case OpCvt64Fto64:
222 v.Op = OpLOONG64TRUNCDV
223 return true
224 case OpCvt64to32F:
225 v.Op = OpLOONG64MOVVF
226 return true
227 case OpCvt64to64F:
228 v.Op = OpLOONG64MOVVD
229 return true
230 case OpCvtBoolToUint8:
231 v.Op = OpCopy
232 return true
233 case OpDiv16:
234 return rewriteValueLOONG64_OpDiv16(v)
235 case OpDiv16u:
236 return rewriteValueLOONG64_OpDiv16u(v)
237 case OpDiv32:
238 return rewriteValueLOONG64_OpDiv32(v)
239 case OpDiv32F:
240 v.Op = OpLOONG64DIVF
241 return true
242 case OpDiv32u:
243 return rewriteValueLOONG64_OpDiv32u(v)
244 case OpDiv64:
245 return rewriteValueLOONG64_OpDiv64(v)
246 case OpDiv64F:
247 v.Op = OpLOONG64DIVD
248 return true
249 case OpDiv64u:
250 v.Op = OpLOONG64DIVVU
251 return true
252 case OpDiv8:
253 return rewriteValueLOONG64_OpDiv8(v)
254 case OpDiv8u:
255 return rewriteValueLOONG64_OpDiv8u(v)
256 case OpEq16:
257 return rewriteValueLOONG64_OpEq16(v)
258 case OpEq32:
259 return rewriteValueLOONG64_OpEq32(v)
260 case OpEq32F:
261 return rewriteValueLOONG64_OpEq32F(v)
262 case OpEq64:
263 return rewriteValueLOONG64_OpEq64(v)
264 case OpEq64F:
265 return rewriteValueLOONG64_OpEq64F(v)
266 case OpEq8:
267 return rewriteValueLOONG64_OpEq8(v)
268 case OpEqB:
269 return rewriteValueLOONG64_OpEqB(v)
270 case OpEqPtr:
271 return rewriteValueLOONG64_OpEqPtr(v)
272 case OpFMA:
273 v.Op = OpLOONG64FMADDD
274 return true
275 case OpGetCallerPC:
276 v.Op = OpLOONG64LoweredGetCallerPC
277 return true
278 case OpGetCallerSP:
279 v.Op = OpLOONG64LoweredGetCallerSP
280 return true
281 case OpGetClosurePtr:
282 v.Op = OpLOONG64LoweredGetClosurePtr
283 return true
284 case OpHmul32:
285 return rewriteValueLOONG64_OpHmul32(v)
286 case OpHmul32u:
287 return rewriteValueLOONG64_OpHmul32u(v)
288 case OpHmul64:
289 v.Op = OpLOONG64MULHV
290 return true
291 case OpHmul64u:
292 v.Op = OpLOONG64MULHVU
293 return true
294 case OpInterCall:
295 v.Op = OpLOONG64CALLinter
296 return true
297 case OpIsInBounds:
298 return rewriteValueLOONG64_OpIsInBounds(v)
299 case OpIsNonNil:
300 return rewriteValueLOONG64_OpIsNonNil(v)
301 case OpIsSliceInBounds:
302 return rewriteValueLOONG64_OpIsSliceInBounds(v)
303 case OpLOONG64ADDD:
304 return rewriteValueLOONG64_OpLOONG64ADDD(v)
305 case OpLOONG64ADDF:
306 return rewriteValueLOONG64_OpLOONG64ADDF(v)
307 case OpLOONG64ADDV:
308 return rewriteValueLOONG64_OpLOONG64ADDV(v)
309 case OpLOONG64ADDVconst:
310 return rewriteValueLOONG64_OpLOONG64ADDVconst(v)
311 case OpLOONG64AND:
312 return rewriteValueLOONG64_OpLOONG64AND(v)
313 case OpLOONG64ANDconst:
314 return rewriteValueLOONG64_OpLOONG64ANDconst(v)
315 case OpLOONG64DIVV:
316 return rewriteValueLOONG64_OpLOONG64DIVV(v)
317 case OpLOONG64DIVVU:
318 return rewriteValueLOONG64_OpLOONG64DIVVU(v)
319 case OpLOONG64MASKEQZ:
320 return rewriteValueLOONG64_OpLOONG64MASKEQZ(v)
321 case OpLOONG64MASKNEZ:
322 return rewriteValueLOONG64_OpLOONG64MASKNEZ(v)
323 case OpLOONG64MOVBUload:
324 return rewriteValueLOONG64_OpLOONG64MOVBUload(v)
325 case OpLOONG64MOVBUloadidx:
326 return rewriteValueLOONG64_OpLOONG64MOVBUloadidx(v)
327 case OpLOONG64MOVBUreg:
328 return rewriteValueLOONG64_OpLOONG64MOVBUreg(v)
329 case OpLOONG64MOVBload:
330 return rewriteValueLOONG64_OpLOONG64MOVBload(v)
331 case OpLOONG64MOVBloadidx:
332 return rewriteValueLOONG64_OpLOONG64MOVBloadidx(v)
333 case OpLOONG64MOVBreg:
334 return rewriteValueLOONG64_OpLOONG64MOVBreg(v)
335 case OpLOONG64MOVBstore:
336 return rewriteValueLOONG64_OpLOONG64MOVBstore(v)
337 case OpLOONG64MOVBstoreidx:
338 return rewriteValueLOONG64_OpLOONG64MOVBstoreidx(v)
339 case OpLOONG64MOVBstorezero:
340 return rewriteValueLOONG64_OpLOONG64MOVBstorezero(v)
341 case OpLOONG64MOVBstorezeroidx:
342 return rewriteValueLOONG64_OpLOONG64MOVBstorezeroidx(v)
343 case OpLOONG64MOVDload:
344 return rewriteValueLOONG64_OpLOONG64MOVDload(v)
345 case OpLOONG64MOVDloadidx:
346 return rewriteValueLOONG64_OpLOONG64MOVDloadidx(v)
347 case OpLOONG64MOVDstore:
348 return rewriteValueLOONG64_OpLOONG64MOVDstore(v)
349 case OpLOONG64MOVDstoreidx:
350 return rewriteValueLOONG64_OpLOONG64MOVDstoreidx(v)
351 case OpLOONG64MOVFload:
352 return rewriteValueLOONG64_OpLOONG64MOVFload(v)
353 case OpLOONG64MOVFloadidx:
354 return rewriteValueLOONG64_OpLOONG64MOVFloadidx(v)
355 case OpLOONG64MOVFstore:
356 return rewriteValueLOONG64_OpLOONG64MOVFstore(v)
357 case OpLOONG64MOVFstoreidx:
358 return rewriteValueLOONG64_OpLOONG64MOVFstoreidx(v)
359 case OpLOONG64MOVHUload:
360 return rewriteValueLOONG64_OpLOONG64MOVHUload(v)
361 case OpLOONG64MOVHUloadidx:
362 return rewriteValueLOONG64_OpLOONG64MOVHUloadidx(v)
363 case OpLOONG64MOVHUreg:
364 return rewriteValueLOONG64_OpLOONG64MOVHUreg(v)
365 case OpLOONG64MOVHload:
366 return rewriteValueLOONG64_OpLOONG64MOVHload(v)
367 case OpLOONG64MOVHloadidx:
368 return rewriteValueLOONG64_OpLOONG64MOVHloadidx(v)
369 case OpLOONG64MOVHreg:
370 return rewriteValueLOONG64_OpLOONG64MOVHreg(v)
371 case OpLOONG64MOVHstore:
372 return rewriteValueLOONG64_OpLOONG64MOVHstore(v)
373 case OpLOONG64MOVHstoreidx:
374 return rewriteValueLOONG64_OpLOONG64MOVHstoreidx(v)
375 case OpLOONG64MOVHstorezero:
376 return rewriteValueLOONG64_OpLOONG64MOVHstorezero(v)
377 case OpLOONG64MOVHstorezeroidx:
378 return rewriteValueLOONG64_OpLOONG64MOVHstorezeroidx(v)
379 case OpLOONG64MOVVload:
380 return rewriteValueLOONG64_OpLOONG64MOVVload(v)
381 case OpLOONG64MOVVloadidx:
382 return rewriteValueLOONG64_OpLOONG64MOVVloadidx(v)
383 case OpLOONG64MOVVnop:
384 return rewriteValueLOONG64_OpLOONG64MOVVnop(v)
385 case OpLOONG64MOVVreg:
386 return rewriteValueLOONG64_OpLOONG64MOVVreg(v)
387 case OpLOONG64MOVVstore:
388 return rewriteValueLOONG64_OpLOONG64MOVVstore(v)
389 case OpLOONG64MOVVstoreidx:
390 return rewriteValueLOONG64_OpLOONG64MOVVstoreidx(v)
391 case OpLOONG64MOVVstorezero:
392 return rewriteValueLOONG64_OpLOONG64MOVVstorezero(v)
393 case OpLOONG64MOVVstorezeroidx:
394 return rewriteValueLOONG64_OpLOONG64MOVVstorezeroidx(v)
395 case OpLOONG64MOVWUload:
396 return rewriteValueLOONG64_OpLOONG64MOVWUload(v)
397 case OpLOONG64MOVWUloadidx:
398 return rewriteValueLOONG64_OpLOONG64MOVWUloadidx(v)
399 case OpLOONG64MOVWUreg:
400 return rewriteValueLOONG64_OpLOONG64MOVWUreg(v)
401 case OpLOONG64MOVWload:
402 return rewriteValueLOONG64_OpLOONG64MOVWload(v)
403 case OpLOONG64MOVWloadidx:
404 return rewriteValueLOONG64_OpLOONG64MOVWloadidx(v)
405 case OpLOONG64MOVWreg:
406 return rewriteValueLOONG64_OpLOONG64MOVWreg(v)
407 case OpLOONG64MOVWstore:
408 return rewriteValueLOONG64_OpLOONG64MOVWstore(v)
409 case OpLOONG64MOVWstoreidx:
410 return rewriteValueLOONG64_OpLOONG64MOVWstoreidx(v)
411 case OpLOONG64MOVWstorezero:
412 return rewriteValueLOONG64_OpLOONG64MOVWstorezero(v)
413 case OpLOONG64MOVWstorezeroidx:
414 return rewriteValueLOONG64_OpLOONG64MOVWstorezeroidx(v)
415 case OpLOONG64MULV:
416 return rewriteValueLOONG64_OpLOONG64MULV(v)
417 case OpLOONG64NEGV:
418 return rewriteValueLOONG64_OpLOONG64NEGV(v)
419 case OpLOONG64NOR:
420 return rewriteValueLOONG64_OpLOONG64NOR(v)
421 case OpLOONG64NORconst:
422 return rewriteValueLOONG64_OpLOONG64NORconst(v)
423 case OpLOONG64OR:
424 return rewriteValueLOONG64_OpLOONG64OR(v)
425 case OpLOONG64ORconst:
426 return rewriteValueLOONG64_OpLOONG64ORconst(v)
427 case OpLOONG64REMV:
428 return rewriteValueLOONG64_OpLOONG64REMV(v)
429 case OpLOONG64REMVU:
430 return rewriteValueLOONG64_OpLOONG64REMVU(v)
431 case OpLOONG64ROTR:
432 return rewriteValueLOONG64_OpLOONG64ROTR(v)
433 case OpLOONG64ROTRV:
434 return rewriteValueLOONG64_OpLOONG64ROTRV(v)
435 case OpLOONG64SGT:
436 return rewriteValueLOONG64_OpLOONG64SGT(v)
437 case OpLOONG64SGTU:
438 return rewriteValueLOONG64_OpLOONG64SGTU(v)
439 case OpLOONG64SGTUconst:
440 return rewriteValueLOONG64_OpLOONG64SGTUconst(v)
441 case OpLOONG64SGTconst:
442 return rewriteValueLOONG64_OpLOONG64SGTconst(v)
443 case OpLOONG64SLLV:
444 return rewriteValueLOONG64_OpLOONG64SLLV(v)
445 case OpLOONG64SLLVconst:
446 return rewriteValueLOONG64_OpLOONG64SLLVconst(v)
447 case OpLOONG64SRAV:
448 return rewriteValueLOONG64_OpLOONG64SRAV(v)
449 case OpLOONG64SRAVconst:
450 return rewriteValueLOONG64_OpLOONG64SRAVconst(v)
451 case OpLOONG64SRLV:
452 return rewriteValueLOONG64_OpLOONG64SRLV(v)
453 case OpLOONG64SRLVconst:
454 return rewriteValueLOONG64_OpLOONG64SRLVconst(v)
455 case OpLOONG64SUBD:
456 return rewriteValueLOONG64_OpLOONG64SUBD(v)
457 case OpLOONG64SUBF:
458 return rewriteValueLOONG64_OpLOONG64SUBF(v)
459 case OpLOONG64SUBV:
460 return rewriteValueLOONG64_OpLOONG64SUBV(v)
461 case OpLOONG64SUBVconst:
462 return rewriteValueLOONG64_OpLOONG64SUBVconst(v)
463 case OpLOONG64XOR:
464 return rewriteValueLOONG64_OpLOONG64XOR(v)
465 case OpLOONG64XORconst:
466 return rewriteValueLOONG64_OpLOONG64XORconst(v)
467 case OpLeq16:
468 return rewriteValueLOONG64_OpLeq16(v)
469 case OpLeq16U:
470 return rewriteValueLOONG64_OpLeq16U(v)
471 case OpLeq32:
472 return rewriteValueLOONG64_OpLeq32(v)
473 case OpLeq32F:
474 return rewriteValueLOONG64_OpLeq32F(v)
475 case OpLeq32U:
476 return rewriteValueLOONG64_OpLeq32U(v)
477 case OpLeq64:
478 return rewriteValueLOONG64_OpLeq64(v)
479 case OpLeq64F:
480 return rewriteValueLOONG64_OpLeq64F(v)
481 case OpLeq64U:
482 return rewriteValueLOONG64_OpLeq64U(v)
483 case OpLeq8:
484 return rewriteValueLOONG64_OpLeq8(v)
485 case OpLeq8U:
486 return rewriteValueLOONG64_OpLeq8U(v)
487 case OpLess16:
488 return rewriteValueLOONG64_OpLess16(v)
489 case OpLess16U:
490 return rewriteValueLOONG64_OpLess16U(v)
491 case OpLess32:
492 return rewriteValueLOONG64_OpLess32(v)
493 case OpLess32F:
494 return rewriteValueLOONG64_OpLess32F(v)
495 case OpLess32U:
496 return rewriteValueLOONG64_OpLess32U(v)
497 case OpLess64:
498 return rewriteValueLOONG64_OpLess64(v)
499 case OpLess64F:
500 return rewriteValueLOONG64_OpLess64F(v)
501 case OpLess64U:
502 return rewriteValueLOONG64_OpLess64U(v)
503 case OpLess8:
504 return rewriteValueLOONG64_OpLess8(v)
505 case OpLess8U:
506 return rewriteValueLOONG64_OpLess8U(v)
507 case OpLoad:
508 return rewriteValueLOONG64_OpLoad(v)
509 case OpLocalAddr:
510 return rewriteValueLOONG64_OpLocalAddr(v)
511 case OpLsh16x16:
512 return rewriteValueLOONG64_OpLsh16x16(v)
513 case OpLsh16x32:
514 return rewriteValueLOONG64_OpLsh16x32(v)
515 case OpLsh16x64:
516 return rewriteValueLOONG64_OpLsh16x64(v)
517 case OpLsh16x8:
518 return rewriteValueLOONG64_OpLsh16x8(v)
519 case OpLsh32x16:
520 return rewriteValueLOONG64_OpLsh32x16(v)
521 case OpLsh32x32:
522 return rewriteValueLOONG64_OpLsh32x32(v)
523 case OpLsh32x64:
524 return rewriteValueLOONG64_OpLsh32x64(v)
525 case OpLsh32x8:
526 return rewriteValueLOONG64_OpLsh32x8(v)
527 case OpLsh64x16:
528 return rewriteValueLOONG64_OpLsh64x16(v)
529 case OpLsh64x32:
530 return rewriteValueLOONG64_OpLsh64x32(v)
531 case OpLsh64x64:
532 return rewriteValueLOONG64_OpLsh64x64(v)
533 case OpLsh64x8:
534 return rewriteValueLOONG64_OpLsh64x8(v)
535 case OpLsh8x16:
536 return rewriteValueLOONG64_OpLsh8x16(v)
537 case OpLsh8x32:
538 return rewriteValueLOONG64_OpLsh8x32(v)
539 case OpLsh8x64:
540 return rewriteValueLOONG64_OpLsh8x64(v)
541 case OpLsh8x8:
542 return rewriteValueLOONG64_OpLsh8x8(v)
543 case OpMax32F:
544 v.Op = OpLOONG64FMAXF
545 return true
546 case OpMax64F:
547 v.Op = OpLOONG64FMAXD
548 return true
549 case OpMin32F:
550 v.Op = OpLOONG64FMINF
551 return true
552 case OpMin64F:
553 v.Op = OpLOONG64FMIND
554 return true
555 case OpMod16:
556 return rewriteValueLOONG64_OpMod16(v)
557 case OpMod16u:
558 return rewriteValueLOONG64_OpMod16u(v)
559 case OpMod32:
560 return rewriteValueLOONG64_OpMod32(v)
561 case OpMod32u:
562 return rewriteValueLOONG64_OpMod32u(v)
563 case OpMod64:
564 return rewriteValueLOONG64_OpMod64(v)
565 case OpMod64u:
566 v.Op = OpLOONG64REMVU
567 return true
568 case OpMod8:
569 return rewriteValueLOONG64_OpMod8(v)
570 case OpMod8u:
571 return rewriteValueLOONG64_OpMod8u(v)
572 case OpMove:
573 return rewriteValueLOONG64_OpMove(v)
574 case OpMul16:
575 v.Op = OpLOONG64MULV
576 return true
577 case OpMul32:
578 v.Op = OpLOONG64MULV
579 return true
580 case OpMul32F:
581 v.Op = OpLOONG64MULF
582 return true
583 case OpMul64:
584 v.Op = OpLOONG64MULV
585 return true
586 case OpMul64F:
587 v.Op = OpLOONG64MULD
588 return true
589 case OpMul8:
590 v.Op = OpLOONG64MULV
591 return true
592 case OpNeg16:
593 v.Op = OpLOONG64NEGV
594 return true
595 case OpNeg32:
596 v.Op = OpLOONG64NEGV
597 return true
598 case OpNeg32F:
599 v.Op = OpLOONG64NEGF
600 return true
601 case OpNeg64:
602 v.Op = OpLOONG64NEGV
603 return true
604 case OpNeg64F:
605 v.Op = OpLOONG64NEGD
606 return true
607 case OpNeg8:
608 v.Op = OpLOONG64NEGV
609 return true
610 case OpNeq16:
611 return rewriteValueLOONG64_OpNeq16(v)
612 case OpNeq32:
613 return rewriteValueLOONG64_OpNeq32(v)
614 case OpNeq32F:
615 return rewriteValueLOONG64_OpNeq32F(v)
616 case OpNeq64:
617 return rewriteValueLOONG64_OpNeq64(v)
618 case OpNeq64F:
619 return rewriteValueLOONG64_OpNeq64F(v)
620 case OpNeq8:
621 return rewriteValueLOONG64_OpNeq8(v)
622 case OpNeqB:
623 v.Op = OpLOONG64XOR
624 return true
625 case OpNeqPtr:
626 return rewriteValueLOONG64_OpNeqPtr(v)
627 case OpNilCheck:
628 v.Op = OpLOONG64LoweredNilCheck
629 return true
630 case OpNot:
631 return rewriteValueLOONG64_OpNot(v)
632 case OpOffPtr:
633 return rewriteValueLOONG64_OpOffPtr(v)
634 case OpOr16:
635 v.Op = OpLOONG64OR
636 return true
637 case OpOr32:
638 v.Op = OpLOONG64OR
639 return true
640 case OpOr64:
641 v.Op = OpLOONG64OR
642 return true
643 case OpOr8:
644 v.Op = OpLOONG64OR
645 return true
646 case OpOrB:
647 v.Op = OpLOONG64OR
648 return true
649 case OpPanicBounds:
650 return rewriteValueLOONG64_OpPanicBounds(v)
651 case OpPopCount16:
652 return rewriteValueLOONG64_OpPopCount16(v)
653 case OpPopCount32:
654 return rewriteValueLOONG64_OpPopCount32(v)
655 case OpPopCount64:
656 return rewriteValueLOONG64_OpPopCount64(v)
657 case OpPubBarrier:
658 v.Op = OpLOONG64LoweredPubBarrier
659 return true
660 case OpRotateLeft16:
661 return rewriteValueLOONG64_OpRotateLeft16(v)
662 case OpRotateLeft32:
663 return rewriteValueLOONG64_OpRotateLeft32(v)
664 case OpRotateLeft64:
665 return rewriteValueLOONG64_OpRotateLeft64(v)
666 case OpRotateLeft8:
667 return rewriteValueLOONG64_OpRotateLeft8(v)
668 case OpRound32F:
669 v.Op = OpLOONG64LoweredRound32F
670 return true
671 case OpRound64F:
672 v.Op = OpLOONG64LoweredRound64F
673 return true
674 case OpRsh16Ux16:
675 return rewriteValueLOONG64_OpRsh16Ux16(v)
676 case OpRsh16Ux32:
677 return rewriteValueLOONG64_OpRsh16Ux32(v)
678 case OpRsh16Ux64:
679 return rewriteValueLOONG64_OpRsh16Ux64(v)
680 case OpRsh16Ux8:
681 return rewriteValueLOONG64_OpRsh16Ux8(v)
682 case OpRsh16x16:
683 return rewriteValueLOONG64_OpRsh16x16(v)
684 case OpRsh16x32:
685 return rewriteValueLOONG64_OpRsh16x32(v)
686 case OpRsh16x64:
687 return rewriteValueLOONG64_OpRsh16x64(v)
688 case OpRsh16x8:
689 return rewriteValueLOONG64_OpRsh16x8(v)
690 case OpRsh32Ux16:
691 return rewriteValueLOONG64_OpRsh32Ux16(v)
692 case OpRsh32Ux32:
693 return rewriteValueLOONG64_OpRsh32Ux32(v)
694 case OpRsh32Ux64:
695 return rewriteValueLOONG64_OpRsh32Ux64(v)
696 case OpRsh32Ux8:
697 return rewriteValueLOONG64_OpRsh32Ux8(v)
698 case OpRsh32x16:
699 return rewriteValueLOONG64_OpRsh32x16(v)
700 case OpRsh32x32:
701 return rewriteValueLOONG64_OpRsh32x32(v)
702 case OpRsh32x64:
703 return rewriteValueLOONG64_OpRsh32x64(v)
704 case OpRsh32x8:
705 return rewriteValueLOONG64_OpRsh32x8(v)
706 case OpRsh64Ux16:
707 return rewriteValueLOONG64_OpRsh64Ux16(v)
708 case OpRsh64Ux32:
709 return rewriteValueLOONG64_OpRsh64Ux32(v)
710 case OpRsh64Ux64:
711 return rewriteValueLOONG64_OpRsh64Ux64(v)
712 case OpRsh64Ux8:
713 return rewriteValueLOONG64_OpRsh64Ux8(v)
714 case OpRsh64x16:
715 return rewriteValueLOONG64_OpRsh64x16(v)
716 case OpRsh64x32:
717 return rewriteValueLOONG64_OpRsh64x32(v)
718 case OpRsh64x64:
719 return rewriteValueLOONG64_OpRsh64x64(v)
720 case OpRsh64x8:
721 return rewriteValueLOONG64_OpRsh64x8(v)
722 case OpRsh8Ux16:
723 return rewriteValueLOONG64_OpRsh8Ux16(v)
724 case OpRsh8Ux32:
725 return rewriteValueLOONG64_OpRsh8Ux32(v)
726 case OpRsh8Ux64:
727 return rewriteValueLOONG64_OpRsh8Ux64(v)
728 case OpRsh8Ux8:
729 return rewriteValueLOONG64_OpRsh8Ux8(v)
730 case OpRsh8x16:
731 return rewriteValueLOONG64_OpRsh8x16(v)
732 case OpRsh8x32:
733 return rewriteValueLOONG64_OpRsh8x32(v)
734 case OpRsh8x64:
735 return rewriteValueLOONG64_OpRsh8x64(v)
736 case OpRsh8x8:
737 return rewriteValueLOONG64_OpRsh8x8(v)
738 case OpSelect0:
739 return rewriteValueLOONG64_OpSelect0(v)
740 case OpSelect1:
741 return rewriteValueLOONG64_OpSelect1(v)
742 case OpSelectN:
743 return rewriteValueLOONG64_OpSelectN(v)
744 case OpSignExt16to32:
745 v.Op = OpLOONG64MOVHreg
746 return true
747 case OpSignExt16to64:
748 v.Op = OpLOONG64MOVHreg
749 return true
750 case OpSignExt32to64:
751 v.Op = OpLOONG64MOVWreg
752 return true
753 case OpSignExt8to16:
754 v.Op = OpLOONG64MOVBreg
755 return true
756 case OpSignExt8to32:
757 v.Op = OpLOONG64MOVBreg
758 return true
759 case OpSignExt8to64:
760 v.Op = OpLOONG64MOVBreg
761 return true
762 case OpSlicemask:
763 return rewriteValueLOONG64_OpSlicemask(v)
764 case OpSqrt:
765 v.Op = OpLOONG64SQRTD
766 return true
767 case OpSqrt32:
768 v.Op = OpLOONG64SQRTF
769 return true
770 case OpStaticCall:
771 v.Op = OpLOONG64CALLstatic
772 return true
773 case OpStore:
774 return rewriteValueLOONG64_OpStore(v)
775 case OpSub16:
776 v.Op = OpLOONG64SUBV
777 return true
778 case OpSub32:
779 v.Op = OpLOONG64SUBV
780 return true
781 case OpSub32F:
782 v.Op = OpLOONG64SUBF
783 return true
784 case OpSub64:
785 v.Op = OpLOONG64SUBV
786 return true
787 case OpSub64F:
788 v.Op = OpLOONG64SUBD
789 return true
790 case OpSub8:
791 v.Op = OpLOONG64SUBV
792 return true
793 case OpSubPtr:
794 v.Op = OpLOONG64SUBV
795 return true
796 case OpTailCall:
797 v.Op = OpLOONG64CALLtail
798 return true
799 case OpTrunc16to8:
800 v.Op = OpCopy
801 return true
802 case OpTrunc32to16:
803 v.Op = OpCopy
804 return true
805 case OpTrunc32to8:
806 v.Op = OpCopy
807 return true
808 case OpTrunc64to16:
809 v.Op = OpCopy
810 return true
811 case OpTrunc64to32:
812 v.Op = OpCopy
813 return true
814 case OpTrunc64to8:
815 v.Op = OpCopy
816 return true
817 case OpWB:
818 v.Op = OpLOONG64LoweredWB
819 return true
820 case OpXor16:
821 v.Op = OpLOONG64XOR
822 return true
823 case OpXor32:
824 v.Op = OpLOONG64XOR
825 return true
826 case OpXor64:
827 v.Op = OpLOONG64XOR
828 return true
829 case OpXor8:
830 v.Op = OpLOONG64XOR
831 return true
832 case OpZero:
833 return rewriteValueLOONG64_OpZero(v)
834 case OpZeroExt16to32:
835 v.Op = OpLOONG64MOVHUreg
836 return true
837 case OpZeroExt16to64:
838 v.Op = OpLOONG64MOVHUreg
839 return true
840 case OpZeroExt32to64:
841 v.Op = OpLOONG64MOVWUreg
842 return true
843 case OpZeroExt8to16:
844 v.Op = OpLOONG64MOVBUreg
845 return true
846 case OpZeroExt8to32:
847 v.Op = OpLOONG64MOVBUreg
848 return true
849 case OpZeroExt8to64:
850 v.Op = OpLOONG64MOVBUreg
851 return true
852 }
853 return false
854 }
855 func rewriteValueLOONG64_OpAddr(v *Value) bool {
856 v_0 := v.Args[0]
857
858
859 for {
860 sym := auxToSym(v.Aux)
861 base := v_0
862 v.reset(OpLOONG64MOVVaddr)
863 v.Aux = symToAux(sym)
864 v.AddArg(base)
865 return true
866 }
867 }
868 func rewriteValueLOONG64_OpAtomicAnd8(v *Value) bool {
869 v_2 := v.Args[2]
870 v_1 := v.Args[1]
871 v_0 := v.Args[0]
872 b := v.Block
873 typ := &b.Func.Config.Types
874
875
876 for {
877 ptr := v_0
878 val := v_1
879 mem := v_2
880 v.reset(OpLOONG64LoweredAtomicAnd32)
881 v0 := b.NewValue0(v.Pos, OpLOONG64AND, typ.Uintptr)
882 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
883 v1.AuxInt = int64ToAuxInt(^3)
884 v0.AddArg2(v1, ptr)
885 v2 := b.NewValue0(v.Pos, OpLOONG64NORconst, typ.UInt32)
886 v2.AuxInt = int64ToAuxInt(0)
887 v3 := b.NewValue0(v.Pos, OpLOONG64SLLV, typ.UInt32)
888 v4 := b.NewValue0(v.Pos, OpLOONG64XORconst, typ.UInt32)
889 v4.AuxInt = int64ToAuxInt(0xff)
890 v5 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
891 v5.AddArg(val)
892 v4.AddArg(v5)
893 v6 := b.NewValue0(v.Pos, OpLOONG64SLLVconst, typ.UInt64)
894 v6.AuxInt = int64ToAuxInt(3)
895 v7 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.UInt64)
896 v7.AuxInt = int64ToAuxInt(3)
897 v7.AddArg(ptr)
898 v6.AddArg(v7)
899 v3.AddArg2(v4, v6)
900 v2.AddArg(v3)
901 v.AddArg3(v0, v2, mem)
902 return true
903 }
904 }
905 func rewriteValueLOONG64_OpAtomicCompareAndSwap32(v *Value) bool {
906 v_3 := v.Args[3]
907 v_2 := v.Args[2]
908 v_1 := v.Args[1]
909 v_0 := v.Args[0]
910 b := v.Block
911 typ := &b.Func.Config.Types
912
913
914 for {
915 ptr := v_0
916 old := v_1
917 new := v_2
918 mem := v_3
919 v.reset(OpLOONG64LoweredAtomicCas32)
920 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
921 v0.AddArg(old)
922 v.AddArg4(ptr, v0, new, mem)
923 return true
924 }
925 }
926 func rewriteValueLOONG64_OpAtomicCompareAndSwap32Variant(v *Value) bool {
927 v_3 := v.Args[3]
928 v_2 := v.Args[2]
929 v_1 := v.Args[1]
930 v_0 := v.Args[0]
931 b := v.Block
932 typ := &b.Func.Config.Types
933
934
935 for {
936 ptr := v_0
937 old := v_1
938 new := v_2
939 mem := v_3
940 v.reset(OpLOONG64LoweredAtomicCas32Variant)
941 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
942 v0.AddArg(old)
943 v.AddArg4(ptr, v0, new, mem)
944 return true
945 }
946 }
947 func rewriteValueLOONG64_OpAtomicOr8(v *Value) bool {
948 v_2 := v.Args[2]
949 v_1 := v.Args[1]
950 v_0 := v.Args[0]
951 b := v.Block
952 typ := &b.Func.Config.Types
953
954
955 for {
956 ptr := v_0
957 val := v_1
958 mem := v_2
959 v.reset(OpLOONG64LoweredAtomicOr32)
960 v0 := b.NewValue0(v.Pos, OpLOONG64AND, typ.Uintptr)
961 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
962 v1.AuxInt = int64ToAuxInt(^3)
963 v0.AddArg2(v1, ptr)
964 v2 := b.NewValue0(v.Pos, OpLOONG64SLLV, typ.UInt32)
965 v3 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
966 v3.AddArg(val)
967 v4 := b.NewValue0(v.Pos, OpLOONG64SLLVconst, typ.UInt64)
968 v4.AuxInt = int64ToAuxInt(3)
969 v5 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.UInt64)
970 v5.AuxInt = int64ToAuxInt(3)
971 v5.AddArg(ptr)
972 v4.AddArg(v5)
973 v2.AddArg2(v3, v4)
974 v.AddArg3(v0, v2, mem)
975 return true
976 }
977 }
978 func rewriteValueLOONG64_OpAvg64u(v *Value) bool {
979 v_1 := v.Args[1]
980 v_0 := v.Args[0]
981 b := v.Block
982
983
984 for {
985 t := v.Type
986 x := v_0
987 y := v_1
988 v.reset(OpLOONG64ADDV)
989 v0 := b.NewValue0(v.Pos, OpLOONG64SRLVconst, t)
990 v0.AuxInt = int64ToAuxInt(1)
991 v1 := b.NewValue0(v.Pos, OpLOONG64SUBV, t)
992 v1.AddArg2(x, y)
993 v0.AddArg(v1)
994 v.AddArg2(v0, y)
995 return true
996 }
997 }
998 func rewriteValueLOONG64_OpBitLen32(v *Value) bool {
999 v_0 := v.Args[0]
1000 b := v.Block
1001
1002
1003 for {
1004 t := v.Type
1005 x := v_0
1006 v.reset(OpLOONG64NEGV)
1007 v.Type = t
1008 v0 := b.NewValue0(v.Pos, OpLOONG64SUBVconst, t)
1009 v0.AuxInt = int64ToAuxInt(32)
1010 v1 := b.NewValue0(v.Pos, OpLOONG64CLZW, t)
1011 v1.AddArg(x)
1012 v0.AddArg(v1)
1013 v.AddArg(v0)
1014 return true
1015 }
1016 }
1017 func rewriteValueLOONG64_OpBitLen64(v *Value) bool {
1018 v_0 := v.Args[0]
1019 b := v.Block
1020
1021
1022 for {
1023 t := v.Type
1024 x := v_0
1025 v.reset(OpLOONG64NEGV)
1026 v.Type = t
1027 v0 := b.NewValue0(v.Pos, OpLOONG64SUBVconst, t)
1028 v0.AuxInt = int64ToAuxInt(64)
1029 v1 := b.NewValue0(v.Pos, OpLOONG64CLZV, t)
1030 v1.AddArg(x)
1031 v0.AddArg(v1)
1032 v.AddArg(v0)
1033 return true
1034 }
1035 }
1036 func rewriteValueLOONG64_OpBitRev16(v *Value) bool {
1037 v_0 := v.Args[0]
1038 b := v.Block
1039
1040
1041 for {
1042 t := v.Type
1043 x := v_0
1044 v.reset(OpLOONG64REVB2H)
1045 v0 := b.NewValue0(v.Pos, OpLOONG64BITREV4B, t)
1046 v0.AddArg(x)
1047 v.AddArg(v0)
1048 return true
1049 }
1050 }
1051 func rewriteValueLOONG64_OpCom16(v *Value) bool {
1052 v_0 := v.Args[0]
1053 b := v.Block
1054 typ := &b.Func.Config.Types
1055
1056
1057 for {
1058 x := v_0
1059 v.reset(OpLOONG64NOR)
1060 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1061 v0.AuxInt = int64ToAuxInt(0)
1062 v.AddArg2(v0, x)
1063 return true
1064 }
1065 }
1066 func rewriteValueLOONG64_OpCom32(v *Value) bool {
1067 v_0 := v.Args[0]
1068 b := v.Block
1069 typ := &b.Func.Config.Types
1070
1071
1072 for {
1073 x := v_0
1074 v.reset(OpLOONG64NOR)
1075 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1076 v0.AuxInt = int64ToAuxInt(0)
1077 v.AddArg2(v0, x)
1078 return true
1079 }
1080 }
1081 func rewriteValueLOONG64_OpCom64(v *Value) bool {
1082 v_0 := v.Args[0]
1083 b := v.Block
1084 typ := &b.Func.Config.Types
1085
1086
1087 for {
1088 x := v_0
1089 v.reset(OpLOONG64NOR)
1090 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1091 v0.AuxInt = int64ToAuxInt(0)
1092 v.AddArg2(v0, x)
1093 return true
1094 }
1095 }
1096 func rewriteValueLOONG64_OpCom8(v *Value) bool {
1097 v_0 := v.Args[0]
1098 b := v.Block
1099 typ := &b.Func.Config.Types
1100
1101
1102 for {
1103 x := v_0
1104 v.reset(OpLOONG64NOR)
1105 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1106 v0.AuxInt = int64ToAuxInt(0)
1107 v.AddArg2(v0, x)
1108 return true
1109 }
1110 }
1111 func rewriteValueLOONG64_OpCondSelect(v *Value) bool {
1112 v_2 := v.Args[2]
1113 v_1 := v.Args[1]
1114 v_0 := v.Args[0]
1115 b := v.Block
1116
1117
1118 for {
1119 t := v.Type
1120 x := v_0
1121 y := v_1
1122 cond := v_2
1123 v.reset(OpLOONG64OR)
1124 v0 := b.NewValue0(v.Pos, OpLOONG64MASKEQZ, t)
1125 v0.AddArg2(x, cond)
1126 v1 := b.NewValue0(v.Pos, OpLOONG64MASKNEZ, t)
1127 v1.AddArg2(y, cond)
1128 v.AddArg2(v0, v1)
1129 return true
1130 }
1131 }
1132 func rewriteValueLOONG64_OpConst16(v *Value) bool {
1133
1134
1135 for {
1136 val := auxIntToInt16(v.AuxInt)
1137 v.reset(OpLOONG64MOVVconst)
1138 v.AuxInt = int64ToAuxInt(int64(val))
1139 return true
1140 }
1141 }
1142 func rewriteValueLOONG64_OpConst32(v *Value) bool {
1143
1144
1145 for {
1146 val := auxIntToInt32(v.AuxInt)
1147 v.reset(OpLOONG64MOVVconst)
1148 v.AuxInt = int64ToAuxInt(int64(val))
1149 return true
1150 }
1151 }
1152 func rewriteValueLOONG64_OpConst32F(v *Value) bool {
1153
1154
1155 for {
1156 val := auxIntToFloat32(v.AuxInt)
1157 v.reset(OpLOONG64MOVFconst)
1158 v.AuxInt = float64ToAuxInt(float64(val))
1159 return true
1160 }
1161 }
1162 func rewriteValueLOONG64_OpConst64(v *Value) bool {
1163
1164
1165 for {
1166 val := auxIntToInt64(v.AuxInt)
1167 v.reset(OpLOONG64MOVVconst)
1168 v.AuxInt = int64ToAuxInt(int64(val))
1169 return true
1170 }
1171 }
1172 func rewriteValueLOONG64_OpConst64F(v *Value) bool {
1173
1174
1175 for {
1176 val := auxIntToFloat64(v.AuxInt)
1177 v.reset(OpLOONG64MOVDconst)
1178 v.AuxInt = float64ToAuxInt(float64(val))
1179 return true
1180 }
1181 }
1182 func rewriteValueLOONG64_OpConst8(v *Value) bool {
1183
1184
1185 for {
1186 val := auxIntToInt8(v.AuxInt)
1187 v.reset(OpLOONG64MOVVconst)
1188 v.AuxInt = int64ToAuxInt(int64(val))
1189 return true
1190 }
1191 }
1192 func rewriteValueLOONG64_OpConstBool(v *Value) bool {
1193
1194
1195 for {
1196 t := auxIntToBool(v.AuxInt)
1197 v.reset(OpLOONG64MOVVconst)
1198 v.AuxInt = int64ToAuxInt(int64(b2i(t)))
1199 return true
1200 }
1201 }
1202 func rewriteValueLOONG64_OpConstNil(v *Value) bool {
1203
1204
1205 for {
1206 v.reset(OpLOONG64MOVVconst)
1207 v.AuxInt = int64ToAuxInt(0)
1208 return true
1209 }
1210 }
1211 func rewriteValueLOONG64_OpDiv16(v *Value) bool {
1212 v_1 := v.Args[1]
1213 v_0 := v.Args[0]
1214 b := v.Block
1215 typ := &b.Func.Config.Types
1216
1217
1218 for {
1219 x := v_0
1220 y := v_1
1221 v.reset(OpLOONG64DIVV)
1222 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
1223 v0.AddArg(x)
1224 v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
1225 v1.AddArg(y)
1226 v.AddArg2(v0, v1)
1227 return true
1228 }
1229 }
1230 func rewriteValueLOONG64_OpDiv16u(v *Value) bool {
1231 v_1 := v.Args[1]
1232 v_0 := v.Args[0]
1233 b := v.Block
1234 typ := &b.Func.Config.Types
1235
1236
1237 for {
1238 x := v_0
1239 y := v_1
1240 v.reset(OpLOONG64DIVVU)
1241 v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
1242 v0.AddArg(x)
1243 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
1244 v1.AddArg(y)
1245 v.AddArg2(v0, v1)
1246 return true
1247 }
1248 }
1249 func rewriteValueLOONG64_OpDiv32(v *Value) bool {
1250 v_1 := v.Args[1]
1251 v_0 := v.Args[0]
1252 b := v.Block
1253 typ := &b.Func.Config.Types
1254
1255
1256 for {
1257 x := v_0
1258 y := v_1
1259 v.reset(OpLOONG64DIVV)
1260 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1261 v0.AddArg(x)
1262 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1263 v1.AddArg(y)
1264 v.AddArg2(v0, v1)
1265 return true
1266 }
1267 }
1268 func rewriteValueLOONG64_OpDiv32u(v *Value) bool {
1269 v_1 := v.Args[1]
1270 v_0 := v.Args[0]
1271 b := v.Block
1272 typ := &b.Func.Config.Types
1273
1274
1275 for {
1276 x := v_0
1277 y := v_1
1278 v.reset(OpLOONG64DIVVU)
1279 v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1280 v0.AddArg(x)
1281 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1282 v1.AddArg(y)
1283 v.AddArg2(v0, v1)
1284 return true
1285 }
1286 }
1287 func rewriteValueLOONG64_OpDiv64(v *Value) bool {
1288 v_1 := v.Args[1]
1289 v_0 := v.Args[0]
1290
1291
1292 for {
1293 x := v_0
1294 y := v_1
1295 v.reset(OpLOONG64DIVV)
1296 v.AddArg2(x, y)
1297 return true
1298 }
1299 }
1300 func rewriteValueLOONG64_OpDiv8(v *Value) bool {
1301 v_1 := v.Args[1]
1302 v_0 := v.Args[0]
1303 b := v.Block
1304 typ := &b.Func.Config.Types
1305
1306
1307 for {
1308 x := v_0
1309 y := v_1
1310 v.reset(OpLOONG64DIVV)
1311 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
1312 v0.AddArg(x)
1313 v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
1314 v1.AddArg(y)
1315 v.AddArg2(v0, v1)
1316 return true
1317 }
1318 }
1319 func rewriteValueLOONG64_OpDiv8u(v *Value) bool {
1320 v_1 := v.Args[1]
1321 v_0 := v.Args[0]
1322 b := v.Block
1323 typ := &b.Func.Config.Types
1324
1325
1326 for {
1327 x := v_0
1328 y := v_1
1329 v.reset(OpLOONG64DIVVU)
1330 v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
1331 v0.AddArg(x)
1332 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
1333 v1.AddArg(y)
1334 v.AddArg2(v0, v1)
1335 return true
1336 }
1337 }
1338 func rewriteValueLOONG64_OpEq16(v *Value) bool {
1339 v_1 := v.Args[1]
1340 v_0 := v.Args[0]
1341 b := v.Block
1342 typ := &b.Func.Config.Types
1343
1344
1345 for {
1346 x := v_0
1347 y := v_1
1348 v.reset(OpLOONG64SGTU)
1349 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1350 v0.AuxInt = int64ToAuxInt(1)
1351 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
1352 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
1353 v2.AddArg(x)
1354 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
1355 v3.AddArg(y)
1356 v1.AddArg2(v2, v3)
1357 v.AddArg2(v0, v1)
1358 return true
1359 }
1360 }
1361 func rewriteValueLOONG64_OpEq32(v *Value) bool {
1362 v_1 := v.Args[1]
1363 v_0 := v.Args[0]
1364 b := v.Block
1365 typ := &b.Func.Config.Types
1366
1367
1368 for {
1369 x := v_0
1370 y := v_1
1371 v.reset(OpLOONG64SGTU)
1372 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1373 v0.AuxInt = int64ToAuxInt(1)
1374 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
1375 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1376 v2.AddArg(x)
1377 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1378 v3.AddArg(y)
1379 v1.AddArg2(v2, v3)
1380 v.AddArg2(v0, v1)
1381 return true
1382 }
1383 }
1384 func rewriteValueLOONG64_OpEq32F(v *Value) bool {
1385 v_1 := v.Args[1]
1386 v_0 := v.Args[0]
1387 b := v.Block
1388
1389
1390 for {
1391 x := v_0
1392 y := v_1
1393 v.reset(OpLOONG64FPFlagTrue)
1394 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQF, types.TypeFlags)
1395 v0.AddArg2(x, y)
1396 v.AddArg(v0)
1397 return true
1398 }
1399 }
1400 func rewriteValueLOONG64_OpEq64(v *Value) bool {
1401 v_1 := v.Args[1]
1402 v_0 := v.Args[0]
1403 b := v.Block
1404 typ := &b.Func.Config.Types
1405
1406
1407 for {
1408 x := v_0
1409 y := v_1
1410 v.reset(OpLOONG64SGTU)
1411 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1412 v0.AuxInt = int64ToAuxInt(1)
1413 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
1414 v1.AddArg2(x, y)
1415 v.AddArg2(v0, v1)
1416 return true
1417 }
1418 }
1419 func rewriteValueLOONG64_OpEq64F(v *Value) bool {
1420 v_1 := v.Args[1]
1421 v_0 := v.Args[0]
1422 b := v.Block
1423
1424
1425 for {
1426 x := v_0
1427 y := v_1
1428 v.reset(OpLOONG64FPFlagTrue)
1429 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQD, types.TypeFlags)
1430 v0.AddArg2(x, y)
1431 v.AddArg(v0)
1432 return true
1433 }
1434 }
1435 func rewriteValueLOONG64_OpEq8(v *Value) bool {
1436 v_1 := v.Args[1]
1437 v_0 := v.Args[0]
1438 b := v.Block
1439 typ := &b.Func.Config.Types
1440
1441
1442 for {
1443 x := v_0
1444 y := v_1
1445 v.reset(OpLOONG64SGTU)
1446 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1447 v0.AuxInt = int64ToAuxInt(1)
1448 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
1449 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
1450 v2.AddArg(x)
1451 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
1452 v3.AddArg(y)
1453 v1.AddArg2(v2, v3)
1454 v.AddArg2(v0, v1)
1455 return true
1456 }
1457 }
1458 func rewriteValueLOONG64_OpEqB(v *Value) bool {
1459 v_1 := v.Args[1]
1460 v_0 := v.Args[0]
1461 b := v.Block
1462 typ := &b.Func.Config.Types
1463
1464
1465 for {
1466 x := v_0
1467 y := v_1
1468 v.reset(OpLOONG64XOR)
1469 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1470 v0.AuxInt = int64ToAuxInt(1)
1471 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.Bool)
1472 v1.AddArg2(x, y)
1473 v.AddArg2(v0, v1)
1474 return true
1475 }
1476 }
1477 func rewriteValueLOONG64_OpEqPtr(v *Value) bool {
1478 v_1 := v.Args[1]
1479 v_0 := v.Args[0]
1480 b := v.Block
1481 typ := &b.Func.Config.Types
1482
1483
1484 for {
1485 x := v_0
1486 y := v_1
1487 v.reset(OpLOONG64SGTU)
1488 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1489 v0.AuxInt = int64ToAuxInt(1)
1490 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
1491 v1.AddArg2(x, y)
1492 v.AddArg2(v0, v1)
1493 return true
1494 }
1495 }
1496 func rewriteValueLOONG64_OpHmul32(v *Value) bool {
1497 v_1 := v.Args[1]
1498 v_0 := v.Args[0]
1499 b := v.Block
1500 typ := &b.Func.Config.Types
1501
1502
1503 for {
1504 x := v_0
1505 y := v_1
1506 v.reset(OpLOONG64SRAVconst)
1507 v.AuxInt = int64ToAuxInt(32)
1508 v0 := b.NewValue0(v.Pos, OpLOONG64MULV, typ.Int64)
1509 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1510 v1.AddArg(x)
1511 v2 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
1512 v2.AddArg(y)
1513 v0.AddArg2(v1, v2)
1514 v.AddArg(v0)
1515 return true
1516 }
1517 }
1518 func rewriteValueLOONG64_OpHmul32u(v *Value) bool {
1519 v_1 := v.Args[1]
1520 v_0 := v.Args[0]
1521 b := v.Block
1522 typ := &b.Func.Config.Types
1523
1524
1525 for {
1526 x := v_0
1527 y := v_1
1528 v.reset(OpLOONG64SRLVconst)
1529 v.AuxInt = int64ToAuxInt(32)
1530 v0 := b.NewValue0(v.Pos, OpLOONG64MULV, typ.Int64)
1531 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1532 v1.AddArg(x)
1533 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
1534 v2.AddArg(y)
1535 v0.AddArg2(v1, v2)
1536 v.AddArg(v0)
1537 return true
1538 }
1539 }
1540 func rewriteValueLOONG64_OpIsInBounds(v *Value) bool {
1541 v_1 := v.Args[1]
1542 v_0 := v.Args[0]
1543
1544
1545 for {
1546 idx := v_0
1547 len := v_1
1548 v.reset(OpLOONG64SGTU)
1549 v.AddArg2(len, idx)
1550 return true
1551 }
1552 }
1553 func rewriteValueLOONG64_OpIsNonNil(v *Value) bool {
1554 v_0 := v.Args[0]
1555 b := v.Block
1556 typ := &b.Func.Config.Types
1557
1558
1559 for {
1560 ptr := v_0
1561 v.reset(OpLOONG64SGTU)
1562 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1563 v0.AuxInt = int64ToAuxInt(0)
1564 v.AddArg2(ptr, v0)
1565 return true
1566 }
1567 }
1568 func rewriteValueLOONG64_OpIsSliceInBounds(v *Value) bool {
1569 v_1 := v.Args[1]
1570 v_0 := v.Args[0]
1571 b := v.Block
1572 typ := &b.Func.Config.Types
1573
1574
1575 for {
1576 idx := v_0
1577 len := v_1
1578 v.reset(OpLOONG64XOR)
1579 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
1580 v0.AuxInt = int64ToAuxInt(1)
1581 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
1582 v1.AddArg2(idx, len)
1583 v.AddArg2(v0, v1)
1584 return true
1585 }
1586 }
1587 func rewriteValueLOONG64_OpLOONG64ADDD(v *Value) bool {
1588 v_1 := v.Args[1]
1589 v_0 := v.Args[0]
1590
1591
1592
1593 for {
1594 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1595 if v_0.Op != OpLOONG64MULD {
1596 continue
1597 }
1598 y := v_0.Args[1]
1599 x := v_0.Args[0]
1600 z := v_1
1601 if !(z.Block.Func.useFMA(v)) {
1602 continue
1603 }
1604 v.reset(OpLOONG64FMADDD)
1605 v.AddArg3(x, y, z)
1606 return true
1607 }
1608 break
1609 }
1610
1611
1612
1613 for {
1614 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1615 z := v_0
1616 if v_1.Op != OpLOONG64NEGD {
1617 continue
1618 }
1619 v_1_0 := v_1.Args[0]
1620 if v_1_0.Op != OpLOONG64MULD {
1621 continue
1622 }
1623 y := v_1_0.Args[1]
1624 x := v_1_0.Args[0]
1625 if !(z.Block.Func.useFMA(v)) {
1626 continue
1627 }
1628 v.reset(OpLOONG64FNMSUBD)
1629 v.AddArg3(x, y, z)
1630 return true
1631 }
1632 break
1633 }
1634 return false
1635 }
1636 func rewriteValueLOONG64_OpLOONG64ADDF(v *Value) bool {
1637 v_1 := v.Args[1]
1638 v_0 := v.Args[0]
1639
1640
1641
1642 for {
1643 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1644 if v_0.Op != OpLOONG64MULF {
1645 continue
1646 }
1647 y := v_0.Args[1]
1648 x := v_0.Args[0]
1649 z := v_1
1650 if !(z.Block.Func.useFMA(v)) {
1651 continue
1652 }
1653 v.reset(OpLOONG64FMADDF)
1654 v.AddArg3(x, y, z)
1655 return true
1656 }
1657 break
1658 }
1659
1660
1661
1662 for {
1663 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1664 z := v_0
1665 if v_1.Op != OpLOONG64NEGF {
1666 continue
1667 }
1668 v_1_0 := v_1.Args[0]
1669 if v_1_0.Op != OpLOONG64MULF {
1670 continue
1671 }
1672 y := v_1_0.Args[1]
1673 x := v_1_0.Args[0]
1674 if !(z.Block.Func.useFMA(v)) {
1675 continue
1676 }
1677 v.reset(OpLOONG64FNMSUBF)
1678 v.AddArg3(x, y, z)
1679 return true
1680 }
1681 break
1682 }
1683 return false
1684 }
1685 func rewriteValueLOONG64_OpLOONG64ADDV(v *Value) bool {
1686 v_1 := v.Args[1]
1687 v_0 := v.Args[0]
1688
1689
1690
1691 for {
1692 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1693 x := v_0
1694 if v_1.Op != OpLOONG64MOVVconst {
1695 continue
1696 }
1697 t := v_1.Type
1698 c := auxIntToInt64(v_1.AuxInt)
1699 if !(is32Bit(c) && !t.IsPtr()) {
1700 continue
1701 }
1702 v.reset(OpLOONG64ADDVconst)
1703 v.AuxInt = int64ToAuxInt(c)
1704 v.AddArg(x)
1705 return true
1706 }
1707 break
1708 }
1709
1710
1711 for {
1712 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1713 x := v_0
1714 if v_1.Op != OpLOONG64NEGV {
1715 continue
1716 }
1717 y := v_1.Args[0]
1718 v.reset(OpLOONG64SUBV)
1719 v.AddArg2(x, y)
1720 return true
1721 }
1722 break
1723 }
1724 return false
1725 }
1726 func rewriteValueLOONG64_OpLOONG64ADDVconst(v *Value) bool {
1727 v_0 := v.Args[0]
1728
1729
1730
1731 for {
1732 off1 := auxIntToInt64(v.AuxInt)
1733 if v_0.Op != OpLOONG64MOVVaddr {
1734 break
1735 }
1736 off2 := auxIntToInt32(v_0.AuxInt)
1737 sym := auxToSym(v_0.Aux)
1738 ptr := v_0.Args[0]
1739 if !(is32Bit(off1 + int64(off2))) {
1740 break
1741 }
1742 v.reset(OpLOONG64MOVVaddr)
1743 v.AuxInt = int32ToAuxInt(int32(off1) + int32(off2))
1744 v.Aux = symToAux(sym)
1745 v.AddArg(ptr)
1746 return true
1747 }
1748
1749
1750 for {
1751 if auxIntToInt64(v.AuxInt) != 0 {
1752 break
1753 }
1754 x := v_0
1755 v.copyOf(x)
1756 return true
1757 }
1758
1759
1760 for {
1761 c := auxIntToInt64(v.AuxInt)
1762 if v_0.Op != OpLOONG64MOVVconst {
1763 break
1764 }
1765 d := auxIntToInt64(v_0.AuxInt)
1766 v.reset(OpLOONG64MOVVconst)
1767 v.AuxInt = int64ToAuxInt(c + d)
1768 return true
1769 }
1770
1771
1772
1773 for {
1774 c := auxIntToInt64(v.AuxInt)
1775 if v_0.Op != OpLOONG64ADDVconst {
1776 break
1777 }
1778 d := auxIntToInt64(v_0.AuxInt)
1779 x := v_0.Args[0]
1780 if !(is32Bit(c + d)) {
1781 break
1782 }
1783 v.reset(OpLOONG64ADDVconst)
1784 v.AuxInt = int64ToAuxInt(c + d)
1785 v.AddArg(x)
1786 return true
1787 }
1788
1789
1790
1791 for {
1792 c := auxIntToInt64(v.AuxInt)
1793 if v_0.Op != OpLOONG64SUBVconst {
1794 break
1795 }
1796 d := auxIntToInt64(v_0.AuxInt)
1797 x := v_0.Args[0]
1798 if !(is32Bit(c - d)) {
1799 break
1800 }
1801 v.reset(OpLOONG64ADDVconst)
1802 v.AuxInt = int64ToAuxInt(c - d)
1803 v.AddArg(x)
1804 return true
1805 }
1806 return false
1807 }
1808 func rewriteValueLOONG64_OpLOONG64AND(v *Value) bool {
1809 v_1 := v.Args[1]
1810 v_0 := v.Args[0]
1811
1812
1813
1814 for {
1815 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1816 x := v_0
1817 if v_1.Op != OpLOONG64MOVVconst {
1818 continue
1819 }
1820 c := auxIntToInt64(v_1.AuxInt)
1821 if !(is32Bit(c)) {
1822 continue
1823 }
1824 v.reset(OpLOONG64ANDconst)
1825 v.AuxInt = int64ToAuxInt(c)
1826 v.AddArg(x)
1827 return true
1828 }
1829 break
1830 }
1831
1832
1833 for {
1834 x := v_0
1835 if x != v_1 {
1836 break
1837 }
1838 v.copyOf(x)
1839 return true
1840 }
1841 return false
1842 }
1843 func rewriteValueLOONG64_OpLOONG64ANDconst(v *Value) bool {
1844 v_0 := v.Args[0]
1845
1846
1847 for {
1848 if auxIntToInt64(v.AuxInt) != 0 {
1849 break
1850 }
1851 v.reset(OpLOONG64MOVVconst)
1852 v.AuxInt = int64ToAuxInt(0)
1853 return true
1854 }
1855
1856
1857 for {
1858 if auxIntToInt64(v.AuxInt) != -1 {
1859 break
1860 }
1861 x := v_0
1862 v.copyOf(x)
1863 return true
1864 }
1865
1866
1867 for {
1868 c := auxIntToInt64(v.AuxInt)
1869 if v_0.Op != OpLOONG64MOVVconst {
1870 break
1871 }
1872 d := auxIntToInt64(v_0.AuxInt)
1873 v.reset(OpLOONG64MOVVconst)
1874 v.AuxInt = int64ToAuxInt(c & d)
1875 return true
1876 }
1877
1878
1879 for {
1880 c := auxIntToInt64(v.AuxInt)
1881 if v_0.Op != OpLOONG64ANDconst {
1882 break
1883 }
1884 d := auxIntToInt64(v_0.AuxInt)
1885 x := v_0.Args[0]
1886 v.reset(OpLOONG64ANDconst)
1887 v.AuxInt = int64ToAuxInt(c & d)
1888 v.AddArg(x)
1889 return true
1890 }
1891 return false
1892 }
1893 func rewriteValueLOONG64_OpLOONG64DIVV(v *Value) bool {
1894 v_1 := v.Args[1]
1895 v_0 := v.Args[0]
1896
1897
1898
1899 for {
1900 if v_0.Op != OpLOONG64MOVVconst {
1901 break
1902 }
1903 c := auxIntToInt64(v_0.AuxInt)
1904 if v_1.Op != OpLOONG64MOVVconst {
1905 break
1906 }
1907 d := auxIntToInt64(v_1.AuxInt)
1908 if !(d != 0) {
1909 break
1910 }
1911 v.reset(OpLOONG64MOVVconst)
1912 v.AuxInt = int64ToAuxInt(c / d)
1913 return true
1914 }
1915 return false
1916 }
1917 func rewriteValueLOONG64_OpLOONG64DIVVU(v *Value) bool {
1918 v_1 := v.Args[1]
1919 v_0 := v.Args[0]
1920
1921
1922 for {
1923 x := v_0
1924 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 1 {
1925 break
1926 }
1927 v.copyOf(x)
1928 return true
1929 }
1930
1931
1932
1933 for {
1934 x := v_0
1935 if v_1.Op != OpLOONG64MOVVconst {
1936 break
1937 }
1938 c := auxIntToInt64(v_1.AuxInt)
1939 if !(isPowerOfTwo(c)) {
1940 break
1941 }
1942 v.reset(OpLOONG64SRLVconst)
1943 v.AuxInt = int64ToAuxInt(log64(c))
1944 v.AddArg(x)
1945 return true
1946 }
1947
1948
1949
1950 for {
1951 if v_0.Op != OpLOONG64MOVVconst {
1952 break
1953 }
1954 c := auxIntToInt64(v_0.AuxInt)
1955 if v_1.Op != OpLOONG64MOVVconst {
1956 break
1957 }
1958 d := auxIntToInt64(v_1.AuxInt)
1959 if !(d != 0) {
1960 break
1961 }
1962 v.reset(OpLOONG64MOVVconst)
1963 v.AuxInt = int64ToAuxInt(int64(uint64(c) / uint64(d)))
1964 return true
1965 }
1966 return false
1967 }
1968 func rewriteValueLOONG64_OpLOONG64MASKEQZ(v *Value) bool {
1969 v_1 := v.Args[1]
1970 v_0 := v.Args[0]
1971
1972
1973 for {
1974 if v_0.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0.AuxInt) != 0 {
1975 break
1976 }
1977 v.reset(OpLOONG64MOVVconst)
1978 v.AuxInt = int64ToAuxInt(0)
1979 return true
1980 }
1981
1982
1983
1984 for {
1985 if v_1.Op != OpLOONG64MOVVconst {
1986 break
1987 }
1988 c := auxIntToInt64(v_1.AuxInt)
1989 if !(c == 0) {
1990 break
1991 }
1992 v.reset(OpLOONG64MOVVconst)
1993 v.AuxInt = int64ToAuxInt(0)
1994 return true
1995 }
1996
1997
1998
1999 for {
2000 x := v_0
2001 if v_1.Op != OpLOONG64MOVVconst {
2002 break
2003 }
2004 c := auxIntToInt64(v_1.AuxInt)
2005 if !(c != 0) {
2006 break
2007 }
2008 v.copyOf(x)
2009 return true
2010 }
2011 return false
2012 }
2013 func rewriteValueLOONG64_OpLOONG64MASKNEZ(v *Value) bool {
2014 v_0 := v.Args[0]
2015
2016
2017 for {
2018 if v_0.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0.AuxInt) != 0 {
2019 break
2020 }
2021 v.reset(OpLOONG64MOVVconst)
2022 v.AuxInt = int64ToAuxInt(0)
2023 return true
2024 }
2025 return false
2026 }
2027 func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool {
2028 v_1 := v.Args[1]
2029 v_0 := v.Args[0]
2030 b := v.Block
2031 config := b.Func.Config
2032
2033
2034
2035 for {
2036 off1 := auxIntToInt32(v.AuxInt)
2037 sym := auxToSym(v.Aux)
2038 if v_0.Op != OpLOONG64ADDVconst {
2039 break
2040 }
2041 off2 := auxIntToInt64(v_0.AuxInt)
2042 ptr := v_0.Args[0]
2043 mem := v_1
2044 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2045 break
2046 }
2047 v.reset(OpLOONG64MOVBUload)
2048 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2049 v.Aux = symToAux(sym)
2050 v.AddArg2(ptr, mem)
2051 return true
2052 }
2053
2054
2055
2056 for {
2057 off1 := auxIntToInt32(v.AuxInt)
2058 sym1 := auxToSym(v.Aux)
2059 if v_0.Op != OpLOONG64MOVVaddr {
2060 break
2061 }
2062 off2 := auxIntToInt32(v_0.AuxInt)
2063 sym2 := auxToSym(v_0.Aux)
2064 ptr := v_0.Args[0]
2065 mem := v_1
2066 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2067 break
2068 }
2069 v.reset(OpLOONG64MOVBUload)
2070 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2071 v.Aux = symToAux(mergeSym(sym1, sym2))
2072 v.AddArg2(ptr, mem)
2073 return true
2074 }
2075
2076
2077
2078 for {
2079 off := auxIntToInt32(v.AuxInt)
2080 sym := auxToSym(v.Aux)
2081 if v_0.Op != OpLOONG64ADDV {
2082 break
2083 }
2084 idx := v_0.Args[1]
2085 ptr := v_0.Args[0]
2086 mem := v_1
2087 if !(off == 0 && sym == nil) {
2088 break
2089 }
2090 v.reset(OpLOONG64MOVBUloadidx)
2091 v.AddArg3(ptr, idx, mem)
2092 return true
2093 }
2094 return false
2095 }
2096 func rewriteValueLOONG64_OpLOONG64MOVBUloadidx(v *Value) bool {
2097 v_2 := v.Args[2]
2098 v_1 := v.Args[1]
2099 v_0 := v.Args[0]
2100
2101
2102
2103 for {
2104 ptr := v_0
2105 if v_1.Op != OpLOONG64MOVVconst {
2106 break
2107 }
2108 c := auxIntToInt64(v_1.AuxInt)
2109 mem := v_2
2110 if !(is32Bit(c)) {
2111 break
2112 }
2113 v.reset(OpLOONG64MOVBUload)
2114 v.AuxInt = int32ToAuxInt(int32(c))
2115 v.AddArg2(ptr, mem)
2116 return true
2117 }
2118
2119
2120
2121 for {
2122 if v_0.Op != OpLOONG64MOVVconst {
2123 break
2124 }
2125 c := auxIntToInt64(v_0.AuxInt)
2126 ptr := v_1
2127 mem := v_2
2128 if !(is32Bit(c)) {
2129 break
2130 }
2131 v.reset(OpLOONG64MOVBUload)
2132 v.AuxInt = int32ToAuxInt(int32(c))
2133 v.AddArg2(ptr, mem)
2134 return true
2135 }
2136 return false
2137 }
2138 func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool {
2139 v_0 := v.Args[0]
2140
2141
2142
2143 for {
2144 if v_0.Op != OpLOONG64SRLVconst {
2145 break
2146 }
2147 rc := auxIntToInt64(v_0.AuxInt)
2148 x := v_0.Args[0]
2149 if !(rc < 8) {
2150 break
2151 }
2152 v.reset(OpLOONG64BSTRPICKV)
2153 v.AuxInt = int64ToAuxInt(rc + (7+rc)<<6)
2154 v.AddArg(x)
2155 return true
2156 }
2157
2158
2159 for {
2160 x := v_0
2161 if x.Op != OpLOONG64SGT {
2162 break
2163 }
2164 v.copyOf(x)
2165 return true
2166 }
2167
2168
2169 for {
2170 x := v_0
2171 if x.Op != OpLOONG64SGTU {
2172 break
2173 }
2174 v.copyOf(x)
2175 return true
2176 }
2177
2178
2179 for {
2180 x := v_0
2181 if x.Op != OpLOONG64XOR {
2182 break
2183 }
2184 _ = x.Args[1]
2185 x_0 := x.Args[0]
2186 x_1 := x.Args[1]
2187 for _i0 := 0; _i0 <= 1; _i0, x_0, x_1 = _i0+1, x_1, x_0 {
2188 if x_0.Op != OpLOONG64MOVVconst || auxIntToInt64(x_0.AuxInt) != 1 || x_1.Op != OpLOONG64SGT {
2189 continue
2190 }
2191 v.copyOf(x)
2192 return true
2193 }
2194 break
2195 }
2196
2197
2198 for {
2199 x := v_0
2200 if x.Op != OpLOONG64XOR {
2201 break
2202 }
2203 _ = x.Args[1]
2204 x_0 := x.Args[0]
2205 x_1 := x.Args[1]
2206 for _i0 := 0; _i0 <= 1; _i0, x_0, x_1 = _i0+1, x_1, x_0 {
2207 if x_0.Op != OpLOONG64MOVVconst || auxIntToInt64(x_0.AuxInt) != 1 || x_1.Op != OpLOONG64SGTU {
2208 continue
2209 }
2210 v.copyOf(x)
2211 return true
2212 }
2213 break
2214 }
2215
2216
2217 for {
2218 x := v_0
2219 if x.Op != OpLOONG64MOVBUload {
2220 break
2221 }
2222 v.reset(OpLOONG64MOVVreg)
2223 v.AddArg(x)
2224 return true
2225 }
2226
2227
2228 for {
2229 x := v_0
2230 if x.Op != OpLOONG64MOVBUreg {
2231 break
2232 }
2233 v.reset(OpLOONG64MOVVreg)
2234 v.AddArg(x)
2235 return true
2236 }
2237
2238
2239
2240 for {
2241 if v_0.Op != OpLOONG64SLLVconst {
2242 break
2243 }
2244 lc := auxIntToInt64(v_0.AuxInt)
2245 if !(lc >= 8) {
2246 break
2247 }
2248 v.reset(OpLOONG64MOVVconst)
2249 v.AuxInt = int64ToAuxInt(0)
2250 return true
2251 }
2252
2253
2254 for {
2255 if v_0.Op != OpLOONG64MOVVconst {
2256 break
2257 }
2258 c := auxIntToInt64(v_0.AuxInt)
2259 v.reset(OpLOONG64MOVVconst)
2260 v.AuxInt = int64ToAuxInt(int64(uint8(c)))
2261 return true
2262 }
2263
2264
2265 for {
2266 if v_0.Op != OpLOONG64ANDconst {
2267 break
2268 }
2269 c := auxIntToInt64(v_0.AuxInt)
2270 x := v_0.Args[0]
2271 v.reset(OpLOONG64ANDconst)
2272 v.AuxInt = int64ToAuxInt(c & 0xff)
2273 v.AddArg(x)
2274 return true
2275 }
2276 return false
2277 }
2278 func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool {
2279 v_1 := v.Args[1]
2280 v_0 := v.Args[0]
2281 b := v.Block
2282 config := b.Func.Config
2283
2284
2285
2286 for {
2287 off1 := auxIntToInt32(v.AuxInt)
2288 sym := auxToSym(v.Aux)
2289 if v_0.Op != OpLOONG64ADDVconst {
2290 break
2291 }
2292 off2 := auxIntToInt64(v_0.AuxInt)
2293 ptr := v_0.Args[0]
2294 mem := v_1
2295 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2296 break
2297 }
2298 v.reset(OpLOONG64MOVBload)
2299 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2300 v.Aux = symToAux(sym)
2301 v.AddArg2(ptr, mem)
2302 return true
2303 }
2304
2305
2306
2307 for {
2308 off1 := auxIntToInt32(v.AuxInt)
2309 sym1 := auxToSym(v.Aux)
2310 if v_0.Op != OpLOONG64MOVVaddr {
2311 break
2312 }
2313 off2 := auxIntToInt32(v_0.AuxInt)
2314 sym2 := auxToSym(v_0.Aux)
2315 ptr := v_0.Args[0]
2316 mem := v_1
2317 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2318 break
2319 }
2320 v.reset(OpLOONG64MOVBload)
2321 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2322 v.Aux = symToAux(mergeSym(sym1, sym2))
2323 v.AddArg2(ptr, mem)
2324 return true
2325 }
2326
2327
2328
2329 for {
2330 off := auxIntToInt32(v.AuxInt)
2331 sym := auxToSym(v.Aux)
2332 if v_0.Op != OpLOONG64ADDV {
2333 break
2334 }
2335 idx := v_0.Args[1]
2336 ptr := v_0.Args[0]
2337 mem := v_1
2338 if !(off == 0 && sym == nil) {
2339 break
2340 }
2341 v.reset(OpLOONG64MOVBloadidx)
2342 v.AddArg3(ptr, idx, mem)
2343 return true
2344 }
2345 return false
2346 }
2347 func rewriteValueLOONG64_OpLOONG64MOVBloadidx(v *Value) bool {
2348 v_2 := v.Args[2]
2349 v_1 := v.Args[1]
2350 v_0 := v.Args[0]
2351
2352
2353
2354 for {
2355 ptr := v_0
2356 if v_1.Op != OpLOONG64MOVVconst {
2357 break
2358 }
2359 c := auxIntToInt64(v_1.AuxInt)
2360 mem := v_2
2361 if !(is32Bit(c)) {
2362 break
2363 }
2364 v.reset(OpLOONG64MOVBload)
2365 v.AuxInt = int32ToAuxInt(int32(c))
2366 v.AddArg2(ptr, mem)
2367 return true
2368 }
2369
2370
2371
2372 for {
2373 if v_0.Op != OpLOONG64MOVVconst {
2374 break
2375 }
2376 c := auxIntToInt64(v_0.AuxInt)
2377 ptr := v_1
2378 mem := v_2
2379 if !(is32Bit(c)) {
2380 break
2381 }
2382 v.reset(OpLOONG64MOVBload)
2383 v.AuxInt = int32ToAuxInt(int32(c))
2384 v.AddArg2(ptr, mem)
2385 return true
2386 }
2387 return false
2388 }
2389 func rewriteValueLOONG64_OpLOONG64MOVBreg(v *Value) bool {
2390 v_0 := v.Args[0]
2391
2392
2393 for {
2394 x := v_0
2395 if x.Op != OpLOONG64MOVBload {
2396 break
2397 }
2398 v.reset(OpLOONG64MOVVreg)
2399 v.AddArg(x)
2400 return true
2401 }
2402
2403
2404 for {
2405 x := v_0
2406 if x.Op != OpLOONG64MOVBreg {
2407 break
2408 }
2409 v.reset(OpLOONG64MOVVreg)
2410 v.AddArg(x)
2411 return true
2412 }
2413
2414
2415 for {
2416 if v_0.Op != OpLOONG64MOVVconst {
2417 break
2418 }
2419 c := auxIntToInt64(v_0.AuxInt)
2420 v.reset(OpLOONG64MOVVconst)
2421 v.AuxInt = int64ToAuxInt(int64(int8(c)))
2422 return true
2423 }
2424 return false
2425 }
2426 func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool {
2427 v_2 := v.Args[2]
2428 v_1 := v.Args[1]
2429 v_0 := v.Args[0]
2430 b := v.Block
2431 config := b.Func.Config
2432
2433
2434
2435 for {
2436 off1 := auxIntToInt32(v.AuxInt)
2437 sym := auxToSym(v.Aux)
2438 if v_0.Op != OpLOONG64ADDVconst {
2439 break
2440 }
2441 off2 := auxIntToInt64(v_0.AuxInt)
2442 ptr := v_0.Args[0]
2443 val := v_1
2444 mem := v_2
2445 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2446 break
2447 }
2448 v.reset(OpLOONG64MOVBstore)
2449 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2450 v.Aux = symToAux(sym)
2451 v.AddArg3(ptr, val, mem)
2452 return true
2453 }
2454
2455
2456
2457 for {
2458 off1 := auxIntToInt32(v.AuxInt)
2459 sym1 := auxToSym(v.Aux)
2460 if v_0.Op != OpLOONG64MOVVaddr {
2461 break
2462 }
2463 off2 := auxIntToInt32(v_0.AuxInt)
2464 sym2 := auxToSym(v_0.Aux)
2465 ptr := v_0.Args[0]
2466 val := v_1
2467 mem := v_2
2468 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2469 break
2470 }
2471 v.reset(OpLOONG64MOVBstore)
2472 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2473 v.Aux = symToAux(mergeSym(sym1, sym2))
2474 v.AddArg3(ptr, val, mem)
2475 return true
2476 }
2477
2478
2479 for {
2480 off := auxIntToInt32(v.AuxInt)
2481 sym := auxToSym(v.Aux)
2482 ptr := v_0
2483 if v_1.Op != OpLOONG64MOVBreg {
2484 break
2485 }
2486 x := v_1.Args[0]
2487 mem := v_2
2488 v.reset(OpLOONG64MOVBstore)
2489 v.AuxInt = int32ToAuxInt(off)
2490 v.Aux = symToAux(sym)
2491 v.AddArg3(ptr, x, mem)
2492 return true
2493 }
2494
2495
2496 for {
2497 off := auxIntToInt32(v.AuxInt)
2498 sym := auxToSym(v.Aux)
2499 ptr := v_0
2500 if v_1.Op != OpLOONG64MOVBUreg {
2501 break
2502 }
2503 x := v_1.Args[0]
2504 mem := v_2
2505 v.reset(OpLOONG64MOVBstore)
2506 v.AuxInt = int32ToAuxInt(off)
2507 v.Aux = symToAux(sym)
2508 v.AddArg3(ptr, x, mem)
2509 return true
2510 }
2511
2512
2513 for {
2514 off := auxIntToInt32(v.AuxInt)
2515 sym := auxToSym(v.Aux)
2516 ptr := v_0
2517 if v_1.Op != OpLOONG64MOVHreg {
2518 break
2519 }
2520 x := v_1.Args[0]
2521 mem := v_2
2522 v.reset(OpLOONG64MOVBstore)
2523 v.AuxInt = int32ToAuxInt(off)
2524 v.Aux = symToAux(sym)
2525 v.AddArg3(ptr, x, mem)
2526 return true
2527 }
2528
2529
2530 for {
2531 off := auxIntToInt32(v.AuxInt)
2532 sym := auxToSym(v.Aux)
2533 ptr := v_0
2534 if v_1.Op != OpLOONG64MOVHUreg {
2535 break
2536 }
2537 x := v_1.Args[0]
2538 mem := v_2
2539 v.reset(OpLOONG64MOVBstore)
2540 v.AuxInt = int32ToAuxInt(off)
2541 v.Aux = symToAux(sym)
2542 v.AddArg3(ptr, x, mem)
2543 return true
2544 }
2545
2546
2547 for {
2548 off := auxIntToInt32(v.AuxInt)
2549 sym := auxToSym(v.Aux)
2550 ptr := v_0
2551 if v_1.Op != OpLOONG64MOVWreg {
2552 break
2553 }
2554 x := v_1.Args[0]
2555 mem := v_2
2556 v.reset(OpLOONG64MOVBstore)
2557 v.AuxInt = int32ToAuxInt(off)
2558 v.Aux = symToAux(sym)
2559 v.AddArg3(ptr, x, mem)
2560 return true
2561 }
2562
2563
2564 for {
2565 off := auxIntToInt32(v.AuxInt)
2566 sym := auxToSym(v.Aux)
2567 ptr := v_0
2568 if v_1.Op != OpLOONG64MOVWUreg {
2569 break
2570 }
2571 x := v_1.Args[0]
2572 mem := v_2
2573 v.reset(OpLOONG64MOVBstore)
2574 v.AuxInt = int32ToAuxInt(off)
2575 v.Aux = symToAux(sym)
2576 v.AddArg3(ptr, x, mem)
2577 return true
2578 }
2579
2580
2581 for {
2582 off := auxIntToInt32(v.AuxInt)
2583 sym := auxToSym(v.Aux)
2584 ptr := v_0
2585 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 {
2586 break
2587 }
2588 mem := v_2
2589 v.reset(OpLOONG64MOVBstorezero)
2590 v.AuxInt = int32ToAuxInt(off)
2591 v.Aux = symToAux(sym)
2592 v.AddArg2(ptr, mem)
2593 return true
2594 }
2595
2596
2597
2598 for {
2599 off := auxIntToInt32(v.AuxInt)
2600 sym := auxToSym(v.Aux)
2601 if v_0.Op != OpLOONG64ADDV {
2602 break
2603 }
2604 idx := v_0.Args[1]
2605 ptr := v_0.Args[0]
2606 val := v_1
2607 mem := v_2
2608 if !(off == 0 && sym == nil) {
2609 break
2610 }
2611 v.reset(OpLOONG64MOVBstoreidx)
2612 v.AddArg4(ptr, idx, val, mem)
2613 return true
2614 }
2615 return false
2616 }
2617 func rewriteValueLOONG64_OpLOONG64MOVBstoreidx(v *Value) bool {
2618 v_3 := v.Args[3]
2619 v_2 := v.Args[2]
2620 v_1 := v.Args[1]
2621 v_0 := v.Args[0]
2622
2623
2624
2625 for {
2626 ptr := v_0
2627 if v_1.Op != OpLOONG64MOVVconst {
2628 break
2629 }
2630 c := auxIntToInt64(v_1.AuxInt)
2631 val := v_2
2632 mem := v_3
2633 if !(is32Bit(c)) {
2634 break
2635 }
2636 v.reset(OpLOONG64MOVBstore)
2637 v.AuxInt = int32ToAuxInt(int32(c))
2638 v.AddArg3(ptr, val, mem)
2639 return true
2640 }
2641
2642
2643
2644 for {
2645 if v_0.Op != OpLOONG64MOVVconst {
2646 break
2647 }
2648 c := auxIntToInt64(v_0.AuxInt)
2649 idx := v_1
2650 val := v_2
2651 mem := v_3
2652 if !(is32Bit(c)) {
2653 break
2654 }
2655 v.reset(OpLOONG64MOVBstore)
2656 v.AuxInt = int32ToAuxInt(int32(c))
2657 v.AddArg3(idx, val, mem)
2658 return true
2659 }
2660
2661
2662 for {
2663 ptr := v_0
2664 idx := v_1
2665 if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 {
2666 break
2667 }
2668 mem := v_3
2669 v.reset(OpLOONG64MOVBstorezeroidx)
2670 v.AddArg3(ptr, idx, mem)
2671 return true
2672 }
2673 return false
2674 }
2675 func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool {
2676 v_1 := v.Args[1]
2677 v_0 := v.Args[0]
2678 b := v.Block
2679 config := b.Func.Config
2680
2681
2682
2683 for {
2684 off1 := auxIntToInt32(v.AuxInt)
2685 sym := auxToSym(v.Aux)
2686 if v_0.Op != OpLOONG64ADDVconst {
2687 break
2688 }
2689 off2 := auxIntToInt64(v_0.AuxInt)
2690 ptr := v_0.Args[0]
2691 mem := v_1
2692 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2693 break
2694 }
2695 v.reset(OpLOONG64MOVBstorezero)
2696 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2697 v.Aux = symToAux(sym)
2698 v.AddArg2(ptr, mem)
2699 return true
2700 }
2701
2702
2703
2704 for {
2705 off1 := auxIntToInt32(v.AuxInt)
2706 sym1 := auxToSym(v.Aux)
2707 if v_0.Op != OpLOONG64MOVVaddr {
2708 break
2709 }
2710 off2 := auxIntToInt32(v_0.AuxInt)
2711 sym2 := auxToSym(v_0.Aux)
2712 ptr := v_0.Args[0]
2713 mem := v_1
2714 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2715 break
2716 }
2717 v.reset(OpLOONG64MOVBstorezero)
2718 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2719 v.Aux = symToAux(mergeSym(sym1, sym2))
2720 v.AddArg2(ptr, mem)
2721 return true
2722 }
2723
2724
2725
2726 for {
2727 off := auxIntToInt32(v.AuxInt)
2728 sym := auxToSym(v.Aux)
2729 if v_0.Op != OpLOONG64ADDV {
2730 break
2731 }
2732 idx := v_0.Args[1]
2733 ptr := v_0.Args[0]
2734 mem := v_1
2735 if !(off == 0 && sym == nil) {
2736 break
2737 }
2738 v.reset(OpLOONG64MOVBstorezeroidx)
2739 v.AddArg3(ptr, idx, mem)
2740 return true
2741 }
2742 return false
2743 }
2744 func rewriteValueLOONG64_OpLOONG64MOVBstorezeroidx(v *Value) bool {
2745 v_2 := v.Args[2]
2746 v_1 := v.Args[1]
2747 v_0 := v.Args[0]
2748
2749
2750
2751 for {
2752 ptr := v_0
2753 if v_1.Op != OpLOONG64MOVVconst {
2754 break
2755 }
2756 c := auxIntToInt64(v_1.AuxInt)
2757 mem := v_2
2758 if !(is32Bit(c)) {
2759 break
2760 }
2761 v.reset(OpLOONG64MOVBstorezero)
2762 v.AuxInt = int32ToAuxInt(int32(c))
2763 v.AddArg2(ptr, mem)
2764 return true
2765 }
2766
2767
2768
2769 for {
2770 if v_0.Op != OpLOONG64MOVVconst {
2771 break
2772 }
2773 c := auxIntToInt64(v_0.AuxInt)
2774 idx := v_1
2775 mem := v_2
2776 if !(is32Bit(c)) {
2777 break
2778 }
2779 v.reset(OpLOONG64MOVBstorezero)
2780 v.AuxInt = int32ToAuxInt(int32(c))
2781 v.AddArg2(idx, mem)
2782 return true
2783 }
2784 return false
2785 }
2786 func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool {
2787 v_1 := v.Args[1]
2788 v_0 := v.Args[0]
2789 b := v.Block
2790 config := b.Func.Config
2791
2792
2793 for {
2794 off := auxIntToInt32(v.AuxInt)
2795 sym := auxToSym(v.Aux)
2796 ptr := v_0
2797 if v_1.Op != OpLOONG64MOVVstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym {
2798 break
2799 }
2800 val := v_1.Args[1]
2801 if ptr != v_1.Args[0] {
2802 break
2803 }
2804 v.reset(OpLOONG64MOVVgpfp)
2805 v.AddArg(val)
2806 return true
2807 }
2808
2809
2810
2811 for {
2812 off1 := auxIntToInt32(v.AuxInt)
2813 sym := auxToSym(v.Aux)
2814 if v_0.Op != OpLOONG64ADDVconst {
2815 break
2816 }
2817 off2 := auxIntToInt64(v_0.AuxInt)
2818 ptr := v_0.Args[0]
2819 mem := v_1
2820 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2821 break
2822 }
2823 v.reset(OpLOONG64MOVDload)
2824 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2825 v.Aux = symToAux(sym)
2826 v.AddArg2(ptr, mem)
2827 return true
2828 }
2829
2830
2831
2832 for {
2833 off1 := auxIntToInt32(v.AuxInt)
2834 sym1 := auxToSym(v.Aux)
2835 if v_0.Op != OpLOONG64MOVVaddr {
2836 break
2837 }
2838 off2 := auxIntToInt32(v_0.AuxInt)
2839 sym2 := auxToSym(v_0.Aux)
2840 ptr := v_0.Args[0]
2841 mem := v_1
2842 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2843 break
2844 }
2845 v.reset(OpLOONG64MOVDload)
2846 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2847 v.Aux = symToAux(mergeSym(sym1, sym2))
2848 v.AddArg2(ptr, mem)
2849 return true
2850 }
2851
2852
2853
2854 for {
2855 off := auxIntToInt32(v.AuxInt)
2856 sym := auxToSym(v.Aux)
2857 if v_0.Op != OpLOONG64ADDV {
2858 break
2859 }
2860 idx := v_0.Args[1]
2861 ptr := v_0.Args[0]
2862 mem := v_1
2863 if !(off == 0 && sym == nil) {
2864 break
2865 }
2866 v.reset(OpLOONG64MOVDloadidx)
2867 v.AddArg3(ptr, idx, mem)
2868 return true
2869 }
2870 return false
2871 }
2872 func rewriteValueLOONG64_OpLOONG64MOVDloadidx(v *Value) bool {
2873 v_2 := v.Args[2]
2874 v_1 := v.Args[1]
2875 v_0 := v.Args[0]
2876
2877
2878
2879 for {
2880 ptr := v_0
2881 if v_1.Op != OpLOONG64MOVVconst {
2882 break
2883 }
2884 c := auxIntToInt64(v_1.AuxInt)
2885 mem := v_2
2886 if !(is32Bit(c)) {
2887 break
2888 }
2889 v.reset(OpLOONG64MOVDload)
2890 v.AuxInt = int32ToAuxInt(int32(c))
2891 v.AddArg2(ptr, mem)
2892 return true
2893 }
2894
2895
2896
2897 for {
2898 if v_0.Op != OpLOONG64MOVVconst {
2899 break
2900 }
2901 c := auxIntToInt64(v_0.AuxInt)
2902 ptr := v_1
2903 mem := v_2
2904 if !(is32Bit(c)) {
2905 break
2906 }
2907 v.reset(OpLOONG64MOVDload)
2908 v.AuxInt = int32ToAuxInt(int32(c))
2909 v.AddArg2(ptr, mem)
2910 return true
2911 }
2912 return false
2913 }
2914 func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool {
2915 v_2 := v.Args[2]
2916 v_1 := v.Args[1]
2917 v_0 := v.Args[0]
2918 b := v.Block
2919 config := b.Func.Config
2920
2921
2922 for {
2923 off := auxIntToInt32(v.AuxInt)
2924 sym := auxToSym(v.Aux)
2925 ptr := v_0
2926 if v_1.Op != OpLOONG64MOVVgpfp {
2927 break
2928 }
2929 val := v_1.Args[0]
2930 mem := v_2
2931 v.reset(OpLOONG64MOVVstore)
2932 v.AuxInt = int32ToAuxInt(off)
2933 v.Aux = symToAux(sym)
2934 v.AddArg3(ptr, val, mem)
2935 return true
2936 }
2937
2938
2939
2940 for {
2941 off1 := auxIntToInt32(v.AuxInt)
2942 sym := auxToSym(v.Aux)
2943 if v_0.Op != OpLOONG64ADDVconst {
2944 break
2945 }
2946 off2 := auxIntToInt64(v_0.AuxInt)
2947 ptr := v_0.Args[0]
2948 val := v_1
2949 mem := v_2
2950 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2951 break
2952 }
2953 v.reset(OpLOONG64MOVDstore)
2954 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2955 v.Aux = symToAux(sym)
2956 v.AddArg3(ptr, val, mem)
2957 return true
2958 }
2959
2960
2961
2962 for {
2963 off1 := auxIntToInt32(v.AuxInt)
2964 sym1 := auxToSym(v.Aux)
2965 if v_0.Op != OpLOONG64MOVVaddr {
2966 break
2967 }
2968 off2 := auxIntToInt32(v_0.AuxInt)
2969 sym2 := auxToSym(v_0.Aux)
2970 ptr := v_0.Args[0]
2971 val := v_1
2972 mem := v_2
2973 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
2974 break
2975 }
2976 v.reset(OpLOONG64MOVDstore)
2977 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
2978 v.Aux = symToAux(mergeSym(sym1, sym2))
2979 v.AddArg3(ptr, val, mem)
2980 return true
2981 }
2982
2983
2984
2985 for {
2986 off := auxIntToInt32(v.AuxInt)
2987 sym := auxToSym(v.Aux)
2988 if v_0.Op != OpLOONG64ADDV {
2989 break
2990 }
2991 idx := v_0.Args[1]
2992 ptr := v_0.Args[0]
2993 val := v_1
2994 mem := v_2
2995 if !(off == 0 && sym == nil) {
2996 break
2997 }
2998 v.reset(OpLOONG64MOVDstoreidx)
2999 v.AddArg4(ptr, idx, val, mem)
3000 return true
3001 }
3002 return false
3003 }
3004 func rewriteValueLOONG64_OpLOONG64MOVDstoreidx(v *Value) bool {
3005 v_3 := v.Args[3]
3006 v_2 := v.Args[2]
3007 v_1 := v.Args[1]
3008 v_0 := v.Args[0]
3009
3010
3011
3012 for {
3013 ptr := v_0
3014 if v_1.Op != OpLOONG64MOVVconst {
3015 break
3016 }
3017 c := auxIntToInt64(v_1.AuxInt)
3018 val := v_2
3019 mem := v_3
3020 if !(is32Bit(c)) {
3021 break
3022 }
3023 v.reset(OpLOONG64MOVDstore)
3024 v.AuxInt = int32ToAuxInt(int32(c))
3025 v.AddArg3(ptr, val, mem)
3026 return true
3027 }
3028
3029
3030
3031 for {
3032 if v_0.Op != OpLOONG64MOVVconst {
3033 break
3034 }
3035 c := auxIntToInt64(v_0.AuxInt)
3036 idx := v_1
3037 val := v_2
3038 mem := v_3
3039 if !(is32Bit(c)) {
3040 break
3041 }
3042 v.reset(OpLOONG64MOVDstore)
3043 v.AuxInt = int32ToAuxInt(int32(c))
3044 v.AddArg3(idx, val, mem)
3045 return true
3046 }
3047 return false
3048 }
3049 func rewriteValueLOONG64_OpLOONG64MOVFload(v *Value) bool {
3050 v_1 := v.Args[1]
3051 v_0 := v.Args[0]
3052 b := v.Block
3053 config := b.Func.Config
3054
3055
3056 for {
3057 off := auxIntToInt32(v.AuxInt)
3058 sym := auxToSym(v.Aux)
3059 ptr := v_0
3060 if v_1.Op != OpLOONG64MOVWstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym {
3061 break
3062 }
3063 val := v_1.Args[1]
3064 if ptr != v_1.Args[0] {
3065 break
3066 }
3067 v.reset(OpLOONG64MOVWgpfp)
3068 v.AddArg(val)
3069 return true
3070 }
3071
3072
3073
3074 for {
3075 off1 := auxIntToInt32(v.AuxInt)
3076 sym := auxToSym(v.Aux)
3077 if v_0.Op != OpLOONG64ADDVconst {
3078 break
3079 }
3080 off2 := auxIntToInt64(v_0.AuxInt)
3081 ptr := v_0.Args[0]
3082 mem := v_1
3083 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3084 break
3085 }
3086 v.reset(OpLOONG64MOVFload)
3087 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3088 v.Aux = symToAux(sym)
3089 v.AddArg2(ptr, mem)
3090 return true
3091 }
3092
3093
3094
3095 for {
3096 off1 := auxIntToInt32(v.AuxInt)
3097 sym1 := auxToSym(v.Aux)
3098 if v_0.Op != OpLOONG64MOVVaddr {
3099 break
3100 }
3101 off2 := auxIntToInt32(v_0.AuxInt)
3102 sym2 := auxToSym(v_0.Aux)
3103 ptr := v_0.Args[0]
3104 mem := v_1
3105 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3106 break
3107 }
3108 v.reset(OpLOONG64MOVFload)
3109 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3110 v.Aux = symToAux(mergeSym(sym1, sym2))
3111 v.AddArg2(ptr, mem)
3112 return true
3113 }
3114
3115
3116
3117 for {
3118 off := auxIntToInt32(v.AuxInt)
3119 sym := auxToSym(v.Aux)
3120 if v_0.Op != OpLOONG64ADDV {
3121 break
3122 }
3123 idx := v_0.Args[1]
3124 ptr := v_0.Args[0]
3125 mem := v_1
3126 if !(off == 0 && sym == nil) {
3127 break
3128 }
3129 v.reset(OpLOONG64MOVFloadidx)
3130 v.AddArg3(ptr, idx, mem)
3131 return true
3132 }
3133 return false
3134 }
3135 func rewriteValueLOONG64_OpLOONG64MOVFloadidx(v *Value) bool {
3136 v_2 := v.Args[2]
3137 v_1 := v.Args[1]
3138 v_0 := v.Args[0]
3139
3140
3141
3142 for {
3143 ptr := v_0
3144 if v_1.Op != OpLOONG64MOVVconst {
3145 break
3146 }
3147 c := auxIntToInt64(v_1.AuxInt)
3148 mem := v_2
3149 if !(is32Bit(c)) {
3150 break
3151 }
3152 v.reset(OpLOONG64MOVFload)
3153 v.AuxInt = int32ToAuxInt(int32(c))
3154 v.AddArg2(ptr, mem)
3155 return true
3156 }
3157
3158
3159
3160 for {
3161 if v_0.Op != OpLOONG64MOVVconst {
3162 break
3163 }
3164 c := auxIntToInt64(v_0.AuxInt)
3165 ptr := v_1
3166 mem := v_2
3167 if !(is32Bit(c)) {
3168 break
3169 }
3170 v.reset(OpLOONG64MOVFload)
3171 v.AuxInt = int32ToAuxInt(int32(c))
3172 v.AddArg2(ptr, mem)
3173 return true
3174 }
3175 return false
3176 }
3177 func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool {
3178 v_2 := v.Args[2]
3179 v_1 := v.Args[1]
3180 v_0 := v.Args[0]
3181 b := v.Block
3182 config := b.Func.Config
3183
3184
3185 for {
3186 off := auxIntToInt32(v.AuxInt)
3187 sym := auxToSym(v.Aux)
3188 ptr := v_0
3189 if v_1.Op != OpLOONG64MOVWgpfp {
3190 break
3191 }
3192 val := v_1.Args[0]
3193 mem := v_2
3194 v.reset(OpLOONG64MOVWstore)
3195 v.AuxInt = int32ToAuxInt(off)
3196 v.Aux = symToAux(sym)
3197 v.AddArg3(ptr, val, mem)
3198 return true
3199 }
3200
3201
3202
3203 for {
3204 off1 := auxIntToInt32(v.AuxInt)
3205 sym := auxToSym(v.Aux)
3206 if v_0.Op != OpLOONG64ADDVconst {
3207 break
3208 }
3209 off2 := auxIntToInt64(v_0.AuxInt)
3210 ptr := v_0.Args[0]
3211 val := v_1
3212 mem := v_2
3213 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3214 break
3215 }
3216 v.reset(OpLOONG64MOVFstore)
3217 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3218 v.Aux = symToAux(sym)
3219 v.AddArg3(ptr, val, mem)
3220 return true
3221 }
3222
3223
3224
3225 for {
3226 off1 := auxIntToInt32(v.AuxInt)
3227 sym1 := auxToSym(v.Aux)
3228 if v_0.Op != OpLOONG64MOVVaddr {
3229 break
3230 }
3231 off2 := auxIntToInt32(v_0.AuxInt)
3232 sym2 := auxToSym(v_0.Aux)
3233 ptr := v_0.Args[0]
3234 val := v_1
3235 mem := v_2
3236 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3237 break
3238 }
3239 v.reset(OpLOONG64MOVFstore)
3240 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3241 v.Aux = symToAux(mergeSym(sym1, sym2))
3242 v.AddArg3(ptr, val, mem)
3243 return true
3244 }
3245
3246
3247
3248 for {
3249 off := auxIntToInt32(v.AuxInt)
3250 sym := auxToSym(v.Aux)
3251 if v_0.Op != OpLOONG64ADDV {
3252 break
3253 }
3254 idx := v_0.Args[1]
3255 ptr := v_0.Args[0]
3256 val := v_1
3257 mem := v_2
3258 if !(off == 0 && sym == nil) {
3259 break
3260 }
3261 v.reset(OpLOONG64MOVFstoreidx)
3262 v.AddArg4(ptr, idx, val, mem)
3263 return true
3264 }
3265 return false
3266 }
3267 func rewriteValueLOONG64_OpLOONG64MOVFstoreidx(v *Value) bool {
3268 v_3 := v.Args[3]
3269 v_2 := v.Args[2]
3270 v_1 := v.Args[1]
3271 v_0 := v.Args[0]
3272
3273
3274
3275 for {
3276 ptr := v_0
3277 if v_1.Op != OpLOONG64MOVVconst {
3278 break
3279 }
3280 c := auxIntToInt64(v_1.AuxInt)
3281 val := v_2
3282 mem := v_3
3283 if !(is32Bit(c)) {
3284 break
3285 }
3286 v.reset(OpLOONG64MOVFstore)
3287 v.AuxInt = int32ToAuxInt(int32(c))
3288 v.AddArg3(ptr, val, mem)
3289 return true
3290 }
3291
3292
3293
3294 for {
3295 if v_0.Op != OpLOONG64MOVVconst {
3296 break
3297 }
3298 c := auxIntToInt64(v_0.AuxInt)
3299 idx := v_1
3300 val := v_2
3301 mem := v_3
3302 if !(is32Bit(c)) {
3303 break
3304 }
3305 v.reset(OpLOONG64MOVFstore)
3306 v.AuxInt = int32ToAuxInt(int32(c))
3307 v.AddArg3(idx, val, mem)
3308 return true
3309 }
3310 return false
3311 }
3312 func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool {
3313 v_1 := v.Args[1]
3314 v_0 := v.Args[0]
3315 b := v.Block
3316 config := b.Func.Config
3317
3318
3319
3320 for {
3321 off1 := auxIntToInt32(v.AuxInt)
3322 sym := auxToSym(v.Aux)
3323 if v_0.Op != OpLOONG64ADDVconst {
3324 break
3325 }
3326 off2 := auxIntToInt64(v_0.AuxInt)
3327 ptr := v_0.Args[0]
3328 mem := v_1
3329 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3330 break
3331 }
3332 v.reset(OpLOONG64MOVHUload)
3333 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3334 v.Aux = symToAux(sym)
3335 v.AddArg2(ptr, mem)
3336 return true
3337 }
3338
3339
3340
3341 for {
3342 off1 := auxIntToInt32(v.AuxInt)
3343 sym1 := auxToSym(v.Aux)
3344 if v_0.Op != OpLOONG64MOVVaddr {
3345 break
3346 }
3347 off2 := auxIntToInt32(v_0.AuxInt)
3348 sym2 := auxToSym(v_0.Aux)
3349 ptr := v_0.Args[0]
3350 mem := v_1
3351 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3352 break
3353 }
3354 v.reset(OpLOONG64MOVHUload)
3355 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3356 v.Aux = symToAux(mergeSym(sym1, sym2))
3357 v.AddArg2(ptr, mem)
3358 return true
3359 }
3360
3361
3362
3363 for {
3364 off := auxIntToInt32(v.AuxInt)
3365 sym := auxToSym(v.Aux)
3366 if v_0.Op != OpLOONG64ADDV {
3367 break
3368 }
3369 idx := v_0.Args[1]
3370 ptr := v_0.Args[0]
3371 mem := v_1
3372 if !(off == 0 && sym == nil) {
3373 break
3374 }
3375 v.reset(OpLOONG64MOVHUloadidx)
3376 v.AddArg3(ptr, idx, mem)
3377 return true
3378 }
3379 return false
3380 }
3381 func rewriteValueLOONG64_OpLOONG64MOVHUloadidx(v *Value) bool {
3382 v_2 := v.Args[2]
3383 v_1 := v.Args[1]
3384 v_0 := v.Args[0]
3385
3386
3387
3388 for {
3389 ptr := v_0
3390 if v_1.Op != OpLOONG64MOVVconst {
3391 break
3392 }
3393 c := auxIntToInt64(v_1.AuxInt)
3394 mem := v_2
3395 if !(is32Bit(c)) {
3396 break
3397 }
3398 v.reset(OpLOONG64MOVHUload)
3399 v.AuxInt = int32ToAuxInt(int32(c))
3400 v.AddArg2(ptr, mem)
3401 return true
3402 }
3403
3404
3405
3406 for {
3407 if v_0.Op != OpLOONG64MOVVconst {
3408 break
3409 }
3410 c := auxIntToInt64(v_0.AuxInt)
3411 ptr := v_1
3412 mem := v_2
3413 if !(is32Bit(c)) {
3414 break
3415 }
3416 v.reset(OpLOONG64MOVHUload)
3417 v.AuxInt = int32ToAuxInt(int32(c))
3418 v.AddArg2(ptr, mem)
3419 return true
3420 }
3421 return false
3422 }
3423 func rewriteValueLOONG64_OpLOONG64MOVHUreg(v *Value) bool {
3424 v_0 := v.Args[0]
3425
3426
3427
3428 for {
3429 if v_0.Op != OpLOONG64SRLVconst {
3430 break
3431 }
3432 rc := auxIntToInt64(v_0.AuxInt)
3433 x := v_0.Args[0]
3434 if !(rc < 16) {
3435 break
3436 }
3437 v.reset(OpLOONG64BSTRPICKV)
3438 v.AuxInt = int64ToAuxInt(rc + (15+rc)<<6)
3439 v.AddArg(x)
3440 return true
3441 }
3442
3443
3444 for {
3445 x := v_0
3446 if x.Op != OpLOONG64MOVBUload {
3447 break
3448 }
3449 v.reset(OpLOONG64MOVVreg)
3450 v.AddArg(x)
3451 return true
3452 }
3453
3454
3455 for {
3456 x := v_0
3457 if x.Op != OpLOONG64MOVHUload {
3458 break
3459 }
3460 v.reset(OpLOONG64MOVVreg)
3461 v.AddArg(x)
3462 return true
3463 }
3464
3465
3466 for {
3467 x := v_0
3468 if x.Op != OpLOONG64MOVBUreg {
3469 break
3470 }
3471 v.reset(OpLOONG64MOVVreg)
3472 v.AddArg(x)
3473 return true
3474 }
3475
3476
3477 for {
3478 x := v_0
3479 if x.Op != OpLOONG64MOVHUreg {
3480 break
3481 }
3482 v.reset(OpLOONG64MOVVreg)
3483 v.AddArg(x)
3484 return true
3485 }
3486
3487
3488
3489 for {
3490 if v_0.Op != OpLOONG64SLLVconst {
3491 break
3492 }
3493 lc := auxIntToInt64(v_0.AuxInt)
3494 if !(lc >= 16) {
3495 break
3496 }
3497 v.reset(OpLOONG64MOVVconst)
3498 v.AuxInt = int64ToAuxInt(0)
3499 return true
3500 }
3501
3502
3503 for {
3504 if v_0.Op != OpLOONG64MOVVconst {
3505 break
3506 }
3507 c := auxIntToInt64(v_0.AuxInt)
3508 v.reset(OpLOONG64MOVVconst)
3509 v.AuxInt = int64ToAuxInt(int64(uint16(c)))
3510 return true
3511 }
3512 return false
3513 }
3514 func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool {
3515 v_1 := v.Args[1]
3516 v_0 := v.Args[0]
3517 b := v.Block
3518 config := b.Func.Config
3519
3520
3521
3522 for {
3523 off1 := auxIntToInt32(v.AuxInt)
3524 sym := auxToSym(v.Aux)
3525 if v_0.Op != OpLOONG64ADDVconst {
3526 break
3527 }
3528 off2 := auxIntToInt64(v_0.AuxInt)
3529 ptr := v_0.Args[0]
3530 mem := v_1
3531 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3532 break
3533 }
3534 v.reset(OpLOONG64MOVHload)
3535 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3536 v.Aux = symToAux(sym)
3537 v.AddArg2(ptr, mem)
3538 return true
3539 }
3540
3541
3542
3543 for {
3544 off1 := auxIntToInt32(v.AuxInt)
3545 sym1 := auxToSym(v.Aux)
3546 if v_0.Op != OpLOONG64MOVVaddr {
3547 break
3548 }
3549 off2 := auxIntToInt32(v_0.AuxInt)
3550 sym2 := auxToSym(v_0.Aux)
3551 ptr := v_0.Args[0]
3552 mem := v_1
3553 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3554 break
3555 }
3556 v.reset(OpLOONG64MOVHload)
3557 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3558 v.Aux = symToAux(mergeSym(sym1, sym2))
3559 v.AddArg2(ptr, mem)
3560 return true
3561 }
3562
3563
3564
3565 for {
3566 off := auxIntToInt32(v.AuxInt)
3567 sym := auxToSym(v.Aux)
3568 if v_0.Op != OpLOONG64ADDV {
3569 break
3570 }
3571 idx := v_0.Args[1]
3572 ptr := v_0.Args[0]
3573 mem := v_1
3574 if !(off == 0 && sym == nil) {
3575 break
3576 }
3577 v.reset(OpLOONG64MOVHloadidx)
3578 v.AddArg3(ptr, idx, mem)
3579 return true
3580 }
3581 return false
3582 }
3583 func rewriteValueLOONG64_OpLOONG64MOVHloadidx(v *Value) bool {
3584 v_2 := v.Args[2]
3585 v_1 := v.Args[1]
3586 v_0 := v.Args[0]
3587
3588
3589
3590 for {
3591 ptr := v_0
3592 if v_1.Op != OpLOONG64MOVVconst {
3593 break
3594 }
3595 c := auxIntToInt64(v_1.AuxInt)
3596 mem := v_2
3597 if !(is32Bit(c)) {
3598 break
3599 }
3600 v.reset(OpLOONG64MOVHload)
3601 v.AuxInt = int32ToAuxInt(int32(c))
3602 v.AddArg2(ptr, mem)
3603 return true
3604 }
3605
3606
3607
3608 for {
3609 if v_0.Op != OpLOONG64MOVVconst {
3610 break
3611 }
3612 c := auxIntToInt64(v_0.AuxInt)
3613 ptr := v_1
3614 mem := v_2
3615 if !(is32Bit(c)) {
3616 break
3617 }
3618 v.reset(OpLOONG64MOVHload)
3619 v.AuxInt = int32ToAuxInt(int32(c))
3620 v.AddArg2(ptr, mem)
3621 return true
3622 }
3623 return false
3624 }
3625 func rewriteValueLOONG64_OpLOONG64MOVHreg(v *Value) bool {
3626 v_0 := v.Args[0]
3627
3628
3629 for {
3630 x := v_0
3631 if x.Op != OpLOONG64MOVBload {
3632 break
3633 }
3634 v.reset(OpLOONG64MOVVreg)
3635 v.AddArg(x)
3636 return true
3637 }
3638
3639
3640 for {
3641 x := v_0
3642 if x.Op != OpLOONG64MOVBUload {
3643 break
3644 }
3645 v.reset(OpLOONG64MOVVreg)
3646 v.AddArg(x)
3647 return true
3648 }
3649
3650
3651 for {
3652 x := v_0
3653 if x.Op != OpLOONG64MOVHload {
3654 break
3655 }
3656 v.reset(OpLOONG64MOVVreg)
3657 v.AddArg(x)
3658 return true
3659 }
3660
3661
3662 for {
3663 x := v_0
3664 if x.Op != OpLOONG64MOVBreg {
3665 break
3666 }
3667 v.reset(OpLOONG64MOVVreg)
3668 v.AddArg(x)
3669 return true
3670 }
3671
3672
3673 for {
3674 x := v_0
3675 if x.Op != OpLOONG64MOVBUreg {
3676 break
3677 }
3678 v.reset(OpLOONG64MOVVreg)
3679 v.AddArg(x)
3680 return true
3681 }
3682
3683
3684 for {
3685 x := v_0
3686 if x.Op != OpLOONG64MOVHreg {
3687 break
3688 }
3689 v.reset(OpLOONG64MOVVreg)
3690 v.AddArg(x)
3691 return true
3692 }
3693
3694
3695 for {
3696 if v_0.Op != OpLOONG64MOVVconst {
3697 break
3698 }
3699 c := auxIntToInt64(v_0.AuxInt)
3700 v.reset(OpLOONG64MOVVconst)
3701 v.AuxInt = int64ToAuxInt(int64(int16(c)))
3702 return true
3703 }
3704 return false
3705 }
3706 func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool {
3707 v_2 := v.Args[2]
3708 v_1 := v.Args[1]
3709 v_0 := v.Args[0]
3710 b := v.Block
3711 config := b.Func.Config
3712
3713
3714
3715 for {
3716 off1 := auxIntToInt32(v.AuxInt)
3717 sym := auxToSym(v.Aux)
3718 if v_0.Op != OpLOONG64ADDVconst {
3719 break
3720 }
3721 off2 := auxIntToInt64(v_0.AuxInt)
3722 ptr := v_0.Args[0]
3723 val := v_1
3724 mem := v_2
3725 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3726 break
3727 }
3728 v.reset(OpLOONG64MOVHstore)
3729 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3730 v.Aux = symToAux(sym)
3731 v.AddArg3(ptr, val, mem)
3732 return true
3733 }
3734
3735
3736
3737 for {
3738 off1 := auxIntToInt32(v.AuxInt)
3739 sym1 := auxToSym(v.Aux)
3740 if v_0.Op != OpLOONG64MOVVaddr {
3741 break
3742 }
3743 off2 := auxIntToInt32(v_0.AuxInt)
3744 sym2 := auxToSym(v_0.Aux)
3745 ptr := v_0.Args[0]
3746 val := v_1
3747 mem := v_2
3748 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3749 break
3750 }
3751 v.reset(OpLOONG64MOVHstore)
3752 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3753 v.Aux = symToAux(mergeSym(sym1, sym2))
3754 v.AddArg3(ptr, val, mem)
3755 return true
3756 }
3757
3758
3759 for {
3760 off := auxIntToInt32(v.AuxInt)
3761 sym := auxToSym(v.Aux)
3762 ptr := v_0
3763 if v_1.Op != OpLOONG64MOVHreg {
3764 break
3765 }
3766 x := v_1.Args[0]
3767 mem := v_2
3768 v.reset(OpLOONG64MOVHstore)
3769 v.AuxInt = int32ToAuxInt(off)
3770 v.Aux = symToAux(sym)
3771 v.AddArg3(ptr, x, mem)
3772 return true
3773 }
3774
3775
3776 for {
3777 off := auxIntToInt32(v.AuxInt)
3778 sym := auxToSym(v.Aux)
3779 ptr := v_0
3780 if v_1.Op != OpLOONG64MOVHUreg {
3781 break
3782 }
3783 x := v_1.Args[0]
3784 mem := v_2
3785 v.reset(OpLOONG64MOVHstore)
3786 v.AuxInt = int32ToAuxInt(off)
3787 v.Aux = symToAux(sym)
3788 v.AddArg3(ptr, x, mem)
3789 return true
3790 }
3791
3792
3793 for {
3794 off := auxIntToInt32(v.AuxInt)
3795 sym := auxToSym(v.Aux)
3796 ptr := v_0
3797 if v_1.Op != OpLOONG64MOVWreg {
3798 break
3799 }
3800 x := v_1.Args[0]
3801 mem := v_2
3802 v.reset(OpLOONG64MOVHstore)
3803 v.AuxInt = int32ToAuxInt(off)
3804 v.Aux = symToAux(sym)
3805 v.AddArg3(ptr, x, mem)
3806 return true
3807 }
3808
3809
3810 for {
3811 off := auxIntToInt32(v.AuxInt)
3812 sym := auxToSym(v.Aux)
3813 ptr := v_0
3814 if v_1.Op != OpLOONG64MOVWUreg {
3815 break
3816 }
3817 x := v_1.Args[0]
3818 mem := v_2
3819 v.reset(OpLOONG64MOVHstore)
3820 v.AuxInt = int32ToAuxInt(off)
3821 v.Aux = symToAux(sym)
3822 v.AddArg3(ptr, x, mem)
3823 return true
3824 }
3825
3826
3827 for {
3828 off := auxIntToInt32(v.AuxInt)
3829 sym := auxToSym(v.Aux)
3830 ptr := v_0
3831 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 {
3832 break
3833 }
3834 mem := v_2
3835 v.reset(OpLOONG64MOVHstorezero)
3836 v.AuxInt = int32ToAuxInt(off)
3837 v.Aux = symToAux(sym)
3838 v.AddArg2(ptr, mem)
3839 return true
3840 }
3841
3842
3843
3844 for {
3845 off := auxIntToInt32(v.AuxInt)
3846 sym := auxToSym(v.Aux)
3847 if v_0.Op != OpLOONG64ADDV {
3848 break
3849 }
3850 idx := v_0.Args[1]
3851 ptr := v_0.Args[0]
3852 val := v_1
3853 mem := v_2
3854 if !(off == 0 && sym == nil) {
3855 break
3856 }
3857 v.reset(OpLOONG64MOVHstoreidx)
3858 v.AddArg4(ptr, idx, val, mem)
3859 return true
3860 }
3861 return false
3862 }
3863 func rewriteValueLOONG64_OpLOONG64MOVHstoreidx(v *Value) bool {
3864 v_3 := v.Args[3]
3865 v_2 := v.Args[2]
3866 v_1 := v.Args[1]
3867 v_0 := v.Args[0]
3868
3869
3870
3871 for {
3872 ptr := v_0
3873 if v_1.Op != OpLOONG64MOVVconst {
3874 break
3875 }
3876 c := auxIntToInt64(v_1.AuxInt)
3877 val := v_2
3878 mem := v_3
3879 if !(is32Bit(c)) {
3880 break
3881 }
3882 v.reset(OpLOONG64MOVHstore)
3883 v.AuxInt = int32ToAuxInt(int32(c))
3884 v.AddArg3(ptr, val, mem)
3885 return true
3886 }
3887
3888
3889
3890 for {
3891 if v_0.Op != OpLOONG64MOVVconst {
3892 break
3893 }
3894 c := auxIntToInt64(v_0.AuxInt)
3895 idx := v_1
3896 val := v_2
3897 mem := v_3
3898 if !(is32Bit(c)) {
3899 break
3900 }
3901 v.reset(OpLOONG64MOVHstore)
3902 v.AuxInt = int32ToAuxInt(int32(c))
3903 v.AddArg3(idx, val, mem)
3904 return true
3905 }
3906
3907
3908 for {
3909 ptr := v_0
3910 idx := v_1
3911 if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 {
3912 break
3913 }
3914 mem := v_3
3915 v.reset(OpLOONG64MOVHstorezeroidx)
3916 v.AddArg3(ptr, idx, mem)
3917 return true
3918 }
3919 return false
3920 }
3921 func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool {
3922 v_1 := v.Args[1]
3923 v_0 := v.Args[0]
3924 b := v.Block
3925 config := b.Func.Config
3926
3927
3928
3929 for {
3930 off1 := auxIntToInt32(v.AuxInt)
3931 sym := auxToSym(v.Aux)
3932 if v_0.Op != OpLOONG64ADDVconst {
3933 break
3934 }
3935 off2 := auxIntToInt64(v_0.AuxInt)
3936 ptr := v_0.Args[0]
3937 mem := v_1
3938 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3939 break
3940 }
3941 v.reset(OpLOONG64MOVHstorezero)
3942 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3943 v.Aux = symToAux(sym)
3944 v.AddArg2(ptr, mem)
3945 return true
3946 }
3947
3948
3949
3950 for {
3951 off1 := auxIntToInt32(v.AuxInt)
3952 sym1 := auxToSym(v.Aux)
3953 if v_0.Op != OpLOONG64MOVVaddr {
3954 break
3955 }
3956 off2 := auxIntToInt32(v_0.AuxInt)
3957 sym2 := auxToSym(v_0.Aux)
3958 ptr := v_0.Args[0]
3959 mem := v_1
3960 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
3961 break
3962 }
3963 v.reset(OpLOONG64MOVHstorezero)
3964 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
3965 v.Aux = symToAux(mergeSym(sym1, sym2))
3966 v.AddArg2(ptr, mem)
3967 return true
3968 }
3969
3970
3971
3972 for {
3973 off := auxIntToInt32(v.AuxInt)
3974 sym := auxToSym(v.Aux)
3975 if v_0.Op != OpLOONG64ADDV {
3976 break
3977 }
3978 idx := v_0.Args[1]
3979 ptr := v_0.Args[0]
3980 mem := v_1
3981 if !(off == 0 && sym == nil) {
3982 break
3983 }
3984 v.reset(OpLOONG64MOVHstorezeroidx)
3985 v.AddArg3(ptr, idx, mem)
3986 return true
3987 }
3988 return false
3989 }
3990 func rewriteValueLOONG64_OpLOONG64MOVHstorezeroidx(v *Value) bool {
3991 v_2 := v.Args[2]
3992 v_1 := v.Args[1]
3993 v_0 := v.Args[0]
3994
3995
3996
3997 for {
3998 ptr := v_0
3999 if v_1.Op != OpLOONG64MOVVconst {
4000 break
4001 }
4002 c := auxIntToInt64(v_1.AuxInt)
4003 mem := v_2
4004 if !(is32Bit(c)) {
4005 break
4006 }
4007 v.reset(OpLOONG64MOVHstorezero)
4008 v.AuxInt = int32ToAuxInt(int32(c))
4009 v.AddArg2(ptr, mem)
4010 return true
4011 }
4012
4013
4014
4015 for {
4016 if v_0.Op != OpLOONG64MOVVconst {
4017 break
4018 }
4019 c := auxIntToInt64(v_0.AuxInt)
4020 idx := v_1
4021 mem := v_2
4022 if !(is32Bit(c)) {
4023 break
4024 }
4025 v.reset(OpLOONG64MOVHstorezero)
4026 v.AuxInt = int32ToAuxInt(int32(c))
4027 v.AddArg2(idx, mem)
4028 return true
4029 }
4030 return false
4031 }
4032 func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool {
4033 v_1 := v.Args[1]
4034 v_0 := v.Args[0]
4035 b := v.Block
4036 config := b.Func.Config
4037
4038
4039 for {
4040 off := auxIntToInt32(v.AuxInt)
4041 sym := auxToSym(v.Aux)
4042 ptr := v_0
4043 if v_1.Op != OpLOONG64MOVDstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym {
4044 break
4045 }
4046 val := v_1.Args[1]
4047 if ptr != v_1.Args[0] {
4048 break
4049 }
4050 v.reset(OpLOONG64MOVVfpgp)
4051 v.AddArg(val)
4052 return true
4053 }
4054
4055
4056
4057 for {
4058 off1 := auxIntToInt32(v.AuxInt)
4059 sym := auxToSym(v.Aux)
4060 if v_0.Op != OpLOONG64ADDVconst {
4061 break
4062 }
4063 off2 := auxIntToInt64(v_0.AuxInt)
4064 ptr := v_0.Args[0]
4065 mem := v_1
4066 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4067 break
4068 }
4069 v.reset(OpLOONG64MOVVload)
4070 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4071 v.Aux = symToAux(sym)
4072 v.AddArg2(ptr, mem)
4073 return true
4074 }
4075
4076
4077
4078 for {
4079 off1 := auxIntToInt32(v.AuxInt)
4080 sym1 := auxToSym(v.Aux)
4081 if v_0.Op != OpLOONG64MOVVaddr {
4082 break
4083 }
4084 off2 := auxIntToInt32(v_0.AuxInt)
4085 sym2 := auxToSym(v_0.Aux)
4086 ptr := v_0.Args[0]
4087 mem := v_1
4088 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4089 break
4090 }
4091 v.reset(OpLOONG64MOVVload)
4092 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4093 v.Aux = symToAux(mergeSym(sym1, sym2))
4094 v.AddArg2(ptr, mem)
4095 return true
4096 }
4097
4098
4099
4100 for {
4101 off := auxIntToInt32(v.AuxInt)
4102 sym := auxToSym(v.Aux)
4103 if v_0.Op != OpLOONG64ADDV {
4104 break
4105 }
4106 idx := v_0.Args[1]
4107 ptr := v_0.Args[0]
4108 mem := v_1
4109 if !(off == 0 && sym == nil) {
4110 break
4111 }
4112 v.reset(OpLOONG64MOVVloadidx)
4113 v.AddArg3(ptr, idx, mem)
4114 return true
4115 }
4116 return false
4117 }
4118 func rewriteValueLOONG64_OpLOONG64MOVVloadidx(v *Value) bool {
4119 v_2 := v.Args[2]
4120 v_1 := v.Args[1]
4121 v_0 := v.Args[0]
4122
4123
4124
4125 for {
4126 ptr := v_0
4127 if v_1.Op != OpLOONG64MOVVconst {
4128 break
4129 }
4130 c := auxIntToInt64(v_1.AuxInt)
4131 mem := v_2
4132 if !(is32Bit(c)) {
4133 break
4134 }
4135 v.reset(OpLOONG64MOVVload)
4136 v.AuxInt = int32ToAuxInt(int32(c))
4137 v.AddArg2(ptr, mem)
4138 return true
4139 }
4140
4141
4142
4143 for {
4144 if v_0.Op != OpLOONG64MOVVconst {
4145 break
4146 }
4147 c := auxIntToInt64(v_0.AuxInt)
4148 ptr := v_1
4149 mem := v_2
4150 if !(is32Bit(c)) {
4151 break
4152 }
4153 v.reset(OpLOONG64MOVVload)
4154 v.AuxInt = int32ToAuxInt(int32(c))
4155 v.AddArg2(ptr, mem)
4156 return true
4157 }
4158 return false
4159 }
4160 func rewriteValueLOONG64_OpLOONG64MOVVnop(v *Value) bool {
4161 v_0 := v.Args[0]
4162
4163
4164 for {
4165 if v_0.Op != OpLOONG64MOVVconst {
4166 break
4167 }
4168 c := auxIntToInt64(v_0.AuxInt)
4169 v.reset(OpLOONG64MOVVconst)
4170 v.AuxInt = int64ToAuxInt(c)
4171 return true
4172 }
4173 return false
4174 }
4175 func rewriteValueLOONG64_OpLOONG64MOVVreg(v *Value) bool {
4176 v_0 := v.Args[0]
4177
4178
4179
4180 for {
4181 x := v_0
4182 if !(x.Uses == 1) {
4183 break
4184 }
4185 v.reset(OpLOONG64MOVVnop)
4186 v.AddArg(x)
4187 return true
4188 }
4189
4190
4191 for {
4192 if v_0.Op != OpLOONG64MOVVconst {
4193 break
4194 }
4195 c := auxIntToInt64(v_0.AuxInt)
4196 v.reset(OpLOONG64MOVVconst)
4197 v.AuxInt = int64ToAuxInt(c)
4198 return true
4199 }
4200 return false
4201 }
4202 func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool {
4203 v_2 := v.Args[2]
4204 v_1 := v.Args[1]
4205 v_0 := v.Args[0]
4206 b := v.Block
4207 config := b.Func.Config
4208
4209
4210 for {
4211 off := auxIntToInt32(v.AuxInt)
4212 sym := auxToSym(v.Aux)
4213 ptr := v_0
4214 if v_1.Op != OpLOONG64MOVVfpgp {
4215 break
4216 }
4217 val := v_1.Args[0]
4218 mem := v_2
4219 v.reset(OpLOONG64MOVDstore)
4220 v.AuxInt = int32ToAuxInt(off)
4221 v.Aux = symToAux(sym)
4222 v.AddArg3(ptr, val, mem)
4223 return true
4224 }
4225
4226
4227
4228 for {
4229 off1 := auxIntToInt32(v.AuxInt)
4230 sym := auxToSym(v.Aux)
4231 if v_0.Op != OpLOONG64ADDVconst {
4232 break
4233 }
4234 off2 := auxIntToInt64(v_0.AuxInt)
4235 ptr := v_0.Args[0]
4236 val := v_1
4237 mem := v_2
4238 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4239 break
4240 }
4241 v.reset(OpLOONG64MOVVstore)
4242 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4243 v.Aux = symToAux(sym)
4244 v.AddArg3(ptr, val, mem)
4245 return true
4246 }
4247
4248
4249
4250 for {
4251 off1 := auxIntToInt32(v.AuxInt)
4252 sym1 := auxToSym(v.Aux)
4253 if v_0.Op != OpLOONG64MOVVaddr {
4254 break
4255 }
4256 off2 := auxIntToInt32(v_0.AuxInt)
4257 sym2 := auxToSym(v_0.Aux)
4258 ptr := v_0.Args[0]
4259 val := v_1
4260 mem := v_2
4261 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4262 break
4263 }
4264 v.reset(OpLOONG64MOVVstore)
4265 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4266 v.Aux = symToAux(mergeSym(sym1, sym2))
4267 v.AddArg3(ptr, val, mem)
4268 return true
4269 }
4270
4271
4272 for {
4273 off := auxIntToInt32(v.AuxInt)
4274 sym := auxToSym(v.Aux)
4275 ptr := v_0
4276 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 {
4277 break
4278 }
4279 mem := v_2
4280 v.reset(OpLOONG64MOVVstorezero)
4281 v.AuxInt = int32ToAuxInt(off)
4282 v.Aux = symToAux(sym)
4283 v.AddArg2(ptr, mem)
4284 return true
4285 }
4286
4287
4288
4289 for {
4290 off := auxIntToInt32(v.AuxInt)
4291 sym := auxToSym(v.Aux)
4292 if v_0.Op != OpLOONG64ADDV {
4293 break
4294 }
4295 idx := v_0.Args[1]
4296 ptr := v_0.Args[0]
4297 val := v_1
4298 mem := v_2
4299 if !(off == 0 && sym == nil) {
4300 break
4301 }
4302 v.reset(OpLOONG64MOVVstoreidx)
4303 v.AddArg4(ptr, idx, val, mem)
4304 return true
4305 }
4306 return false
4307 }
4308 func rewriteValueLOONG64_OpLOONG64MOVVstoreidx(v *Value) bool {
4309 v_3 := v.Args[3]
4310 v_2 := v.Args[2]
4311 v_1 := v.Args[1]
4312 v_0 := v.Args[0]
4313
4314
4315
4316 for {
4317 ptr := v_0
4318 if v_1.Op != OpLOONG64MOVVconst {
4319 break
4320 }
4321 c := auxIntToInt64(v_1.AuxInt)
4322 val := v_2
4323 mem := v_3
4324 if !(is32Bit(c)) {
4325 break
4326 }
4327 v.reset(OpLOONG64MOVVstore)
4328 v.AuxInt = int32ToAuxInt(int32(c))
4329 v.AddArg3(ptr, val, mem)
4330 return true
4331 }
4332
4333
4334
4335 for {
4336 if v_0.Op != OpLOONG64MOVVconst {
4337 break
4338 }
4339 c := auxIntToInt64(v_0.AuxInt)
4340 idx := v_1
4341 val := v_2
4342 mem := v_3
4343 if !(is32Bit(c)) {
4344 break
4345 }
4346 v.reset(OpLOONG64MOVVstore)
4347 v.AuxInt = int32ToAuxInt(int32(c))
4348 v.AddArg3(idx, val, mem)
4349 return true
4350 }
4351
4352
4353 for {
4354 ptr := v_0
4355 idx := v_1
4356 if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 {
4357 break
4358 }
4359 mem := v_3
4360 v.reset(OpLOONG64MOVVstorezeroidx)
4361 v.AddArg3(ptr, idx, mem)
4362 return true
4363 }
4364 return false
4365 }
4366 func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool {
4367 v_1 := v.Args[1]
4368 v_0 := v.Args[0]
4369 b := v.Block
4370 config := b.Func.Config
4371
4372
4373
4374 for {
4375 off1 := auxIntToInt32(v.AuxInt)
4376 sym := auxToSym(v.Aux)
4377 if v_0.Op != OpLOONG64ADDVconst {
4378 break
4379 }
4380 off2 := auxIntToInt64(v_0.AuxInt)
4381 ptr := v_0.Args[0]
4382 mem := v_1
4383 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4384 break
4385 }
4386 v.reset(OpLOONG64MOVVstorezero)
4387 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4388 v.Aux = symToAux(sym)
4389 v.AddArg2(ptr, mem)
4390 return true
4391 }
4392
4393
4394
4395 for {
4396 off1 := auxIntToInt32(v.AuxInt)
4397 sym1 := auxToSym(v.Aux)
4398 if v_0.Op != OpLOONG64MOVVaddr {
4399 break
4400 }
4401 off2 := auxIntToInt32(v_0.AuxInt)
4402 sym2 := auxToSym(v_0.Aux)
4403 ptr := v_0.Args[0]
4404 mem := v_1
4405 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4406 break
4407 }
4408 v.reset(OpLOONG64MOVVstorezero)
4409 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4410 v.Aux = symToAux(mergeSym(sym1, sym2))
4411 v.AddArg2(ptr, mem)
4412 return true
4413 }
4414
4415
4416
4417 for {
4418 off := auxIntToInt32(v.AuxInt)
4419 sym := auxToSym(v.Aux)
4420 if v_0.Op != OpLOONG64ADDV {
4421 break
4422 }
4423 idx := v_0.Args[1]
4424 ptr := v_0.Args[0]
4425 mem := v_1
4426 if !(off == 0 && sym == nil) {
4427 break
4428 }
4429 v.reset(OpLOONG64MOVVstorezeroidx)
4430 v.AddArg3(ptr, idx, mem)
4431 return true
4432 }
4433 return false
4434 }
4435 func rewriteValueLOONG64_OpLOONG64MOVVstorezeroidx(v *Value) bool {
4436 v_2 := v.Args[2]
4437 v_1 := v.Args[1]
4438 v_0 := v.Args[0]
4439
4440
4441
4442 for {
4443 ptr := v_0
4444 if v_1.Op != OpLOONG64MOVVconst {
4445 break
4446 }
4447 c := auxIntToInt64(v_1.AuxInt)
4448 mem := v_2
4449 if !(is32Bit(c)) {
4450 break
4451 }
4452 v.reset(OpLOONG64MOVVstorezero)
4453 v.AuxInt = int32ToAuxInt(int32(c))
4454 v.AddArg2(ptr, mem)
4455 return true
4456 }
4457
4458
4459
4460 for {
4461 if v_0.Op != OpLOONG64MOVVconst {
4462 break
4463 }
4464 c := auxIntToInt64(v_0.AuxInt)
4465 idx := v_1
4466 mem := v_2
4467 if !(is32Bit(c)) {
4468 break
4469 }
4470 v.reset(OpLOONG64MOVVstorezero)
4471 v.AuxInt = int32ToAuxInt(int32(c))
4472 v.AddArg2(idx, mem)
4473 return true
4474 }
4475 return false
4476 }
4477 func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool {
4478 v_1 := v.Args[1]
4479 v_0 := v.Args[0]
4480 b := v.Block
4481 config := b.Func.Config
4482 typ := &b.Func.Config.Types
4483
4484
4485 for {
4486 off := auxIntToInt32(v.AuxInt)
4487 sym := auxToSym(v.Aux)
4488 ptr := v_0
4489 if v_1.Op != OpLOONG64MOVFstore || auxIntToInt32(v_1.AuxInt) != off || auxToSym(v_1.Aux) != sym {
4490 break
4491 }
4492 val := v_1.Args[1]
4493 if ptr != v_1.Args[0] {
4494 break
4495 }
4496 v.reset(OpZeroExt32to64)
4497 v0 := b.NewValue0(v_1.Pos, OpLOONG64MOVWfpgp, typ.Float32)
4498 v0.AddArg(val)
4499 v.AddArg(v0)
4500 return true
4501 }
4502
4503
4504
4505 for {
4506 off1 := auxIntToInt32(v.AuxInt)
4507 sym := auxToSym(v.Aux)
4508 if v_0.Op != OpLOONG64ADDVconst {
4509 break
4510 }
4511 off2 := auxIntToInt64(v_0.AuxInt)
4512 ptr := v_0.Args[0]
4513 mem := v_1
4514 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4515 break
4516 }
4517 v.reset(OpLOONG64MOVWUload)
4518 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4519 v.Aux = symToAux(sym)
4520 v.AddArg2(ptr, mem)
4521 return true
4522 }
4523
4524
4525
4526 for {
4527 off1 := auxIntToInt32(v.AuxInt)
4528 sym1 := auxToSym(v.Aux)
4529 if v_0.Op != OpLOONG64MOVVaddr {
4530 break
4531 }
4532 off2 := auxIntToInt32(v_0.AuxInt)
4533 sym2 := auxToSym(v_0.Aux)
4534 ptr := v_0.Args[0]
4535 mem := v_1
4536 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4537 break
4538 }
4539 v.reset(OpLOONG64MOVWUload)
4540 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4541 v.Aux = symToAux(mergeSym(sym1, sym2))
4542 v.AddArg2(ptr, mem)
4543 return true
4544 }
4545
4546
4547
4548 for {
4549 off := auxIntToInt32(v.AuxInt)
4550 sym := auxToSym(v.Aux)
4551 if v_0.Op != OpLOONG64ADDV {
4552 break
4553 }
4554 idx := v_0.Args[1]
4555 ptr := v_0.Args[0]
4556 mem := v_1
4557 if !(off == 0 && sym == nil) {
4558 break
4559 }
4560 v.reset(OpLOONG64MOVWUloadidx)
4561 v.AddArg3(ptr, idx, mem)
4562 return true
4563 }
4564 return false
4565 }
4566 func rewriteValueLOONG64_OpLOONG64MOVWUloadidx(v *Value) bool {
4567 v_2 := v.Args[2]
4568 v_1 := v.Args[1]
4569 v_0 := v.Args[0]
4570
4571
4572
4573 for {
4574 ptr := v_0
4575 if v_1.Op != OpLOONG64MOVVconst {
4576 break
4577 }
4578 c := auxIntToInt64(v_1.AuxInt)
4579 mem := v_2
4580 if !(is32Bit(c)) {
4581 break
4582 }
4583 v.reset(OpLOONG64MOVWUload)
4584 v.AuxInt = int32ToAuxInt(int32(c))
4585 v.AddArg2(ptr, mem)
4586 return true
4587 }
4588
4589
4590
4591 for {
4592 if v_0.Op != OpLOONG64MOVVconst {
4593 break
4594 }
4595 c := auxIntToInt64(v_0.AuxInt)
4596 ptr := v_1
4597 mem := v_2
4598 if !(is32Bit(c)) {
4599 break
4600 }
4601 v.reset(OpLOONG64MOVWUload)
4602 v.AuxInt = int32ToAuxInt(int32(c))
4603 v.AddArg2(ptr, mem)
4604 return true
4605 }
4606 return false
4607 }
4608 func rewriteValueLOONG64_OpLOONG64MOVWUreg(v *Value) bool {
4609 v_0 := v.Args[0]
4610
4611
4612
4613 for {
4614 if v_0.Op != OpLOONG64SRLVconst {
4615 break
4616 }
4617 rc := auxIntToInt64(v_0.AuxInt)
4618 x := v_0.Args[0]
4619 if !(rc < 32) {
4620 break
4621 }
4622 v.reset(OpLOONG64BSTRPICKV)
4623 v.AuxInt = int64ToAuxInt(rc + (31+rc)<<6)
4624 v.AddArg(x)
4625 return true
4626 }
4627
4628
4629 for {
4630 x := v_0
4631 if x.Op != OpLOONG64MOVBUload {
4632 break
4633 }
4634 v.reset(OpLOONG64MOVVreg)
4635 v.AddArg(x)
4636 return true
4637 }
4638
4639
4640 for {
4641 x := v_0
4642 if x.Op != OpLOONG64MOVHUload {
4643 break
4644 }
4645 v.reset(OpLOONG64MOVVreg)
4646 v.AddArg(x)
4647 return true
4648 }
4649
4650
4651 for {
4652 x := v_0
4653 if x.Op != OpLOONG64MOVWUload {
4654 break
4655 }
4656 v.reset(OpLOONG64MOVVreg)
4657 v.AddArg(x)
4658 return true
4659 }
4660
4661
4662 for {
4663 x := v_0
4664 if x.Op != OpLOONG64MOVBUreg {
4665 break
4666 }
4667 v.reset(OpLOONG64MOVVreg)
4668 v.AddArg(x)
4669 return true
4670 }
4671
4672
4673 for {
4674 x := v_0
4675 if x.Op != OpLOONG64MOVHUreg {
4676 break
4677 }
4678 v.reset(OpLOONG64MOVVreg)
4679 v.AddArg(x)
4680 return true
4681 }
4682
4683
4684 for {
4685 x := v_0
4686 if x.Op != OpLOONG64MOVWUreg {
4687 break
4688 }
4689 v.reset(OpLOONG64MOVVreg)
4690 v.AddArg(x)
4691 return true
4692 }
4693
4694
4695
4696 for {
4697 if v_0.Op != OpLOONG64SLLVconst {
4698 break
4699 }
4700 lc := auxIntToInt64(v_0.AuxInt)
4701 if !(lc >= 32) {
4702 break
4703 }
4704 v.reset(OpLOONG64MOVVconst)
4705 v.AuxInt = int64ToAuxInt(0)
4706 return true
4707 }
4708
4709
4710 for {
4711 if v_0.Op != OpLOONG64MOVVconst {
4712 break
4713 }
4714 c := auxIntToInt64(v_0.AuxInt)
4715 v.reset(OpLOONG64MOVVconst)
4716 v.AuxInt = int64ToAuxInt(int64(uint32(c)))
4717 return true
4718 }
4719 return false
4720 }
4721 func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool {
4722 v_1 := v.Args[1]
4723 v_0 := v.Args[0]
4724 b := v.Block
4725 config := b.Func.Config
4726
4727
4728
4729 for {
4730 off1 := auxIntToInt32(v.AuxInt)
4731 sym := auxToSym(v.Aux)
4732 if v_0.Op != OpLOONG64ADDVconst {
4733 break
4734 }
4735 off2 := auxIntToInt64(v_0.AuxInt)
4736 ptr := v_0.Args[0]
4737 mem := v_1
4738 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4739 break
4740 }
4741 v.reset(OpLOONG64MOVWload)
4742 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4743 v.Aux = symToAux(sym)
4744 v.AddArg2(ptr, mem)
4745 return true
4746 }
4747
4748
4749
4750 for {
4751 off1 := auxIntToInt32(v.AuxInt)
4752 sym1 := auxToSym(v.Aux)
4753 if v_0.Op != OpLOONG64MOVVaddr {
4754 break
4755 }
4756 off2 := auxIntToInt32(v_0.AuxInt)
4757 sym2 := auxToSym(v_0.Aux)
4758 ptr := v_0.Args[0]
4759 mem := v_1
4760 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4761 break
4762 }
4763 v.reset(OpLOONG64MOVWload)
4764 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4765 v.Aux = symToAux(mergeSym(sym1, sym2))
4766 v.AddArg2(ptr, mem)
4767 return true
4768 }
4769
4770
4771
4772 for {
4773 off := auxIntToInt32(v.AuxInt)
4774 sym := auxToSym(v.Aux)
4775 if v_0.Op != OpLOONG64ADDV {
4776 break
4777 }
4778 idx := v_0.Args[1]
4779 ptr := v_0.Args[0]
4780 mem := v_1
4781 if !(off == 0 && sym == nil) {
4782 break
4783 }
4784 v.reset(OpLOONG64MOVWloadidx)
4785 v.AddArg3(ptr, idx, mem)
4786 return true
4787 }
4788 return false
4789 }
4790 func rewriteValueLOONG64_OpLOONG64MOVWloadidx(v *Value) bool {
4791 v_2 := v.Args[2]
4792 v_1 := v.Args[1]
4793 v_0 := v.Args[0]
4794
4795
4796
4797 for {
4798 ptr := v_0
4799 if v_1.Op != OpLOONG64MOVVconst {
4800 break
4801 }
4802 c := auxIntToInt64(v_1.AuxInt)
4803 mem := v_2
4804 if !(is32Bit(c)) {
4805 break
4806 }
4807 v.reset(OpLOONG64MOVWload)
4808 v.AuxInt = int32ToAuxInt(int32(c))
4809 v.AddArg2(ptr, mem)
4810 return true
4811 }
4812
4813
4814
4815 for {
4816 if v_0.Op != OpLOONG64MOVVconst {
4817 break
4818 }
4819 c := auxIntToInt64(v_0.AuxInt)
4820 ptr := v_1
4821 mem := v_2
4822 if !(is32Bit(c)) {
4823 break
4824 }
4825 v.reset(OpLOONG64MOVWload)
4826 v.AuxInt = int32ToAuxInt(int32(c))
4827 v.AddArg2(ptr, mem)
4828 return true
4829 }
4830 return false
4831 }
4832 func rewriteValueLOONG64_OpLOONG64MOVWreg(v *Value) bool {
4833 v_0 := v.Args[0]
4834
4835
4836 for {
4837 x := v_0
4838 if x.Op != OpLOONG64MOVBload {
4839 break
4840 }
4841 v.reset(OpLOONG64MOVVreg)
4842 v.AddArg(x)
4843 return true
4844 }
4845
4846
4847 for {
4848 x := v_0
4849 if x.Op != OpLOONG64MOVBUload {
4850 break
4851 }
4852 v.reset(OpLOONG64MOVVreg)
4853 v.AddArg(x)
4854 return true
4855 }
4856
4857
4858 for {
4859 x := v_0
4860 if x.Op != OpLOONG64MOVHload {
4861 break
4862 }
4863 v.reset(OpLOONG64MOVVreg)
4864 v.AddArg(x)
4865 return true
4866 }
4867
4868
4869 for {
4870 x := v_0
4871 if x.Op != OpLOONG64MOVHUload {
4872 break
4873 }
4874 v.reset(OpLOONG64MOVVreg)
4875 v.AddArg(x)
4876 return true
4877 }
4878
4879
4880 for {
4881 x := v_0
4882 if x.Op != OpLOONG64MOVWload {
4883 break
4884 }
4885 v.reset(OpLOONG64MOVVreg)
4886 v.AddArg(x)
4887 return true
4888 }
4889
4890
4891 for {
4892 x := v_0
4893 if x.Op != OpLOONG64MOVBreg {
4894 break
4895 }
4896 v.reset(OpLOONG64MOVVreg)
4897 v.AddArg(x)
4898 return true
4899 }
4900
4901
4902 for {
4903 x := v_0
4904 if x.Op != OpLOONG64MOVBUreg {
4905 break
4906 }
4907 v.reset(OpLOONG64MOVVreg)
4908 v.AddArg(x)
4909 return true
4910 }
4911
4912
4913 for {
4914 x := v_0
4915 if x.Op != OpLOONG64MOVHreg {
4916 break
4917 }
4918 v.reset(OpLOONG64MOVVreg)
4919 v.AddArg(x)
4920 return true
4921 }
4922
4923
4924 for {
4925 x := v_0
4926 if x.Op != OpLOONG64MOVWreg {
4927 break
4928 }
4929 v.reset(OpLOONG64MOVVreg)
4930 v.AddArg(x)
4931 return true
4932 }
4933
4934
4935 for {
4936 if v_0.Op != OpLOONG64MOVVconst {
4937 break
4938 }
4939 c := auxIntToInt64(v_0.AuxInt)
4940 v.reset(OpLOONG64MOVVconst)
4941 v.AuxInt = int64ToAuxInt(int64(int32(c)))
4942 return true
4943 }
4944 return false
4945 }
4946 func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool {
4947 v_2 := v.Args[2]
4948 v_1 := v.Args[1]
4949 v_0 := v.Args[0]
4950 b := v.Block
4951 config := b.Func.Config
4952
4953
4954 for {
4955 off := auxIntToInt32(v.AuxInt)
4956 sym := auxToSym(v.Aux)
4957 ptr := v_0
4958 if v_1.Op != OpLOONG64MOVWfpgp {
4959 break
4960 }
4961 val := v_1.Args[0]
4962 mem := v_2
4963 v.reset(OpLOONG64MOVFstore)
4964 v.AuxInt = int32ToAuxInt(off)
4965 v.Aux = symToAux(sym)
4966 v.AddArg3(ptr, val, mem)
4967 return true
4968 }
4969
4970
4971
4972 for {
4973 off1 := auxIntToInt32(v.AuxInt)
4974 sym := auxToSym(v.Aux)
4975 if v_0.Op != OpLOONG64ADDVconst {
4976 break
4977 }
4978 off2 := auxIntToInt64(v_0.AuxInt)
4979 ptr := v_0.Args[0]
4980 val := v_1
4981 mem := v_2
4982 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
4983 break
4984 }
4985 v.reset(OpLOONG64MOVWstore)
4986 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
4987 v.Aux = symToAux(sym)
4988 v.AddArg3(ptr, val, mem)
4989 return true
4990 }
4991
4992
4993
4994 for {
4995 off1 := auxIntToInt32(v.AuxInt)
4996 sym1 := auxToSym(v.Aux)
4997 if v_0.Op != OpLOONG64MOVVaddr {
4998 break
4999 }
5000 off2 := auxIntToInt32(v_0.AuxInt)
5001 sym2 := auxToSym(v_0.Aux)
5002 ptr := v_0.Args[0]
5003 val := v_1
5004 mem := v_2
5005 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
5006 break
5007 }
5008 v.reset(OpLOONG64MOVWstore)
5009 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
5010 v.Aux = symToAux(mergeSym(sym1, sym2))
5011 v.AddArg3(ptr, val, mem)
5012 return true
5013 }
5014
5015
5016 for {
5017 off := auxIntToInt32(v.AuxInt)
5018 sym := auxToSym(v.Aux)
5019 ptr := v_0
5020 if v_1.Op != OpLOONG64MOVWreg {
5021 break
5022 }
5023 x := v_1.Args[0]
5024 mem := v_2
5025 v.reset(OpLOONG64MOVWstore)
5026 v.AuxInt = int32ToAuxInt(off)
5027 v.Aux = symToAux(sym)
5028 v.AddArg3(ptr, x, mem)
5029 return true
5030 }
5031
5032
5033 for {
5034 off := auxIntToInt32(v.AuxInt)
5035 sym := auxToSym(v.Aux)
5036 ptr := v_0
5037 if v_1.Op != OpLOONG64MOVWUreg {
5038 break
5039 }
5040 x := v_1.Args[0]
5041 mem := v_2
5042 v.reset(OpLOONG64MOVWstore)
5043 v.AuxInt = int32ToAuxInt(off)
5044 v.Aux = symToAux(sym)
5045 v.AddArg3(ptr, x, mem)
5046 return true
5047 }
5048
5049
5050 for {
5051 off := auxIntToInt32(v.AuxInt)
5052 sym := auxToSym(v.Aux)
5053 ptr := v_0
5054 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 {
5055 break
5056 }
5057 mem := v_2
5058 v.reset(OpLOONG64MOVWstorezero)
5059 v.AuxInt = int32ToAuxInt(off)
5060 v.Aux = symToAux(sym)
5061 v.AddArg2(ptr, mem)
5062 return true
5063 }
5064
5065
5066
5067 for {
5068 off := auxIntToInt32(v.AuxInt)
5069 sym := auxToSym(v.Aux)
5070 if v_0.Op != OpLOONG64ADDV {
5071 break
5072 }
5073 idx := v_0.Args[1]
5074 ptr := v_0.Args[0]
5075 val := v_1
5076 mem := v_2
5077 if !(off == 0 && sym == nil) {
5078 break
5079 }
5080 v.reset(OpLOONG64MOVWstoreidx)
5081 v.AddArg4(ptr, idx, val, mem)
5082 return true
5083 }
5084 return false
5085 }
5086 func rewriteValueLOONG64_OpLOONG64MOVWstoreidx(v *Value) bool {
5087 v_3 := v.Args[3]
5088 v_2 := v.Args[2]
5089 v_1 := v.Args[1]
5090 v_0 := v.Args[0]
5091
5092
5093
5094 for {
5095 ptr := v_0
5096 if v_1.Op != OpLOONG64MOVVconst {
5097 break
5098 }
5099 c := auxIntToInt64(v_1.AuxInt)
5100 val := v_2
5101 mem := v_3
5102 if !(is32Bit(c)) {
5103 break
5104 }
5105 v.reset(OpLOONG64MOVWstore)
5106 v.AuxInt = int32ToAuxInt(int32(c))
5107 v.AddArg3(ptr, val, mem)
5108 return true
5109 }
5110
5111
5112
5113 for {
5114 if v_0.Op != OpLOONG64MOVVconst {
5115 break
5116 }
5117 c := auxIntToInt64(v_0.AuxInt)
5118 idx := v_1
5119 val := v_2
5120 mem := v_3
5121 if !(is32Bit(c)) {
5122 break
5123 }
5124 v.reset(OpLOONG64MOVWstore)
5125 v.AuxInt = int32ToAuxInt(int32(c))
5126 v.AddArg3(idx, val, mem)
5127 return true
5128 }
5129
5130
5131 for {
5132 ptr := v_0
5133 idx := v_1
5134 if v_2.Op != OpLOONG64MOVVconst || auxIntToInt64(v_2.AuxInt) != 0 {
5135 break
5136 }
5137 mem := v_3
5138 v.reset(OpLOONG64MOVWstorezeroidx)
5139 v.AddArg3(ptr, idx, mem)
5140 return true
5141 }
5142 return false
5143 }
5144 func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool {
5145 v_1 := v.Args[1]
5146 v_0 := v.Args[0]
5147 b := v.Block
5148 config := b.Func.Config
5149
5150
5151
5152 for {
5153 off1 := auxIntToInt32(v.AuxInt)
5154 sym := auxToSym(v.Aux)
5155 if v_0.Op != OpLOONG64ADDVconst {
5156 break
5157 }
5158 off2 := auxIntToInt64(v_0.AuxInt)
5159 ptr := v_0.Args[0]
5160 mem := v_1
5161 if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
5162 break
5163 }
5164 v.reset(OpLOONG64MOVWstorezero)
5165 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
5166 v.Aux = symToAux(sym)
5167 v.AddArg2(ptr, mem)
5168 return true
5169 }
5170
5171
5172
5173 for {
5174 off1 := auxIntToInt32(v.AuxInt)
5175 sym1 := auxToSym(v.Aux)
5176 if v_0.Op != OpLOONG64MOVVaddr {
5177 break
5178 }
5179 off2 := auxIntToInt32(v_0.AuxInt)
5180 sym2 := auxToSym(v_0.Aux)
5181 ptr := v_0.Args[0]
5182 mem := v_1
5183 if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) {
5184 break
5185 }
5186 v.reset(OpLOONG64MOVWstorezero)
5187 v.AuxInt = int32ToAuxInt(off1 + int32(off2))
5188 v.Aux = symToAux(mergeSym(sym1, sym2))
5189 v.AddArg2(ptr, mem)
5190 return true
5191 }
5192
5193
5194
5195 for {
5196 off := auxIntToInt32(v.AuxInt)
5197 sym := auxToSym(v.Aux)
5198 if v_0.Op != OpLOONG64ADDV {
5199 break
5200 }
5201 idx := v_0.Args[1]
5202 ptr := v_0.Args[0]
5203 mem := v_1
5204 if !(off == 0 && sym == nil) {
5205 break
5206 }
5207 v.reset(OpLOONG64MOVWstorezeroidx)
5208 v.AddArg3(ptr, idx, mem)
5209 return true
5210 }
5211 return false
5212 }
5213 func rewriteValueLOONG64_OpLOONG64MOVWstorezeroidx(v *Value) bool {
5214 v_2 := v.Args[2]
5215 v_1 := v.Args[1]
5216 v_0 := v.Args[0]
5217
5218
5219
5220 for {
5221 ptr := v_0
5222 if v_1.Op != OpLOONG64MOVVconst {
5223 break
5224 }
5225 c := auxIntToInt64(v_1.AuxInt)
5226 mem := v_2
5227 if !(is32Bit(c)) {
5228 break
5229 }
5230 v.reset(OpLOONG64MOVWstorezero)
5231 v.AuxInt = int32ToAuxInt(int32(c))
5232 v.AddArg2(ptr, mem)
5233 return true
5234 }
5235
5236
5237
5238 for {
5239 if v_0.Op != OpLOONG64MOVVconst {
5240 break
5241 }
5242 c := auxIntToInt64(v_0.AuxInt)
5243 idx := v_1
5244 mem := v_2
5245 if !(is32Bit(c)) {
5246 break
5247 }
5248 v.reset(OpLOONG64MOVWstorezero)
5249 v.AuxInt = int32ToAuxInt(int32(c))
5250 v.AddArg2(idx, mem)
5251 return true
5252 }
5253 return false
5254 }
5255 func rewriteValueLOONG64_OpLOONG64MULV(v *Value) bool {
5256 v_1 := v.Args[1]
5257 v_0 := v.Args[0]
5258
5259
5260 for {
5261 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5262 x := v_0
5263 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != -1 {
5264 continue
5265 }
5266 v.reset(OpLOONG64NEGV)
5267 v.AddArg(x)
5268 return true
5269 }
5270 break
5271 }
5272
5273
5274 for {
5275 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5276 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 0 {
5277 continue
5278 }
5279 v.reset(OpLOONG64MOVVconst)
5280 v.AuxInt = int64ToAuxInt(0)
5281 return true
5282 }
5283 break
5284 }
5285
5286
5287 for {
5288 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5289 x := v_0
5290 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 1 {
5291 continue
5292 }
5293 v.copyOf(x)
5294 return true
5295 }
5296 break
5297 }
5298
5299
5300
5301 for {
5302 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5303 x := v_0
5304 if v_1.Op != OpLOONG64MOVVconst {
5305 continue
5306 }
5307 c := auxIntToInt64(v_1.AuxInt)
5308 if !(isPowerOfTwo(c)) {
5309 continue
5310 }
5311 v.reset(OpLOONG64SLLVconst)
5312 v.AuxInt = int64ToAuxInt(log64(c))
5313 v.AddArg(x)
5314 return true
5315 }
5316 break
5317 }
5318
5319
5320 for {
5321 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5322 if v_0.Op != OpLOONG64MOVVconst {
5323 continue
5324 }
5325 c := auxIntToInt64(v_0.AuxInt)
5326 if v_1.Op != OpLOONG64MOVVconst {
5327 continue
5328 }
5329 d := auxIntToInt64(v_1.AuxInt)
5330 v.reset(OpLOONG64MOVVconst)
5331 v.AuxInt = int64ToAuxInt(c * d)
5332 return true
5333 }
5334 break
5335 }
5336 return false
5337 }
5338 func rewriteValueLOONG64_OpLOONG64NEGV(v *Value) bool {
5339 v_0 := v.Args[0]
5340
5341
5342 for {
5343 if v_0.Op != OpLOONG64MOVVconst {
5344 break
5345 }
5346 c := auxIntToInt64(v_0.AuxInt)
5347 v.reset(OpLOONG64MOVVconst)
5348 v.AuxInt = int64ToAuxInt(-c)
5349 return true
5350 }
5351 return false
5352 }
5353 func rewriteValueLOONG64_OpLOONG64NOR(v *Value) bool {
5354 v_1 := v.Args[1]
5355 v_0 := v.Args[0]
5356
5357
5358
5359 for {
5360 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5361 x := v_0
5362 if v_1.Op != OpLOONG64MOVVconst {
5363 continue
5364 }
5365 c := auxIntToInt64(v_1.AuxInt)
5366 if !(is32Bit(c)) {
5367 continue
5368 }
5369 v.reset(OpLOONG64NORconst)
5370 v.AuxInt = int64ToAuxInt(c)
5371 v.AddArg(x)
5372 return true
5373 }
5374 break
5375 }
5376 return false
5377 }
5378 func rewriteValueLOONG64_OpLOONG64NORconst(v *Value) bool {
5379 v_0 := v.Args[0]
5380
5381
5382 for {
5383 c := auxIntToInt64(v.AuxInt)
5384 if v_0.Op != OpLOONG64MOVVconst {
5385 break
5386 }
5387 d := auxIntToInt64(v_0.AuxInt)
5388 v.reset(OpLOONG64MOVVconst)
5389 v.AuxInt = int64ToAuxInt(^(c | d))
5390 return true
5391 }
5392 return false
5393 }
5394 func rewriteValueLOONG64_OpLOONG64OR(v *Value) bool {
5395 v_1 := v.Args[1]
5396 v_0 := v.Args[0]
5397
5398
5399
5400 for {
5401 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5402 x := v_0
5403 if v_1.Op != OpLOONG64MOVVconst {
5404 continue
5405 }
5406 c := auxIntToInt64(v_1.AuxInt)
5407 if !(is32Bit(c)) {
5408 continue
5409 }
5410 v.reset(OpLOONG64ORconst)
5411 v.AuxInt = int64ToAuxInt(c)
5412 v.AddArg(x)
5413 return true
5414 }
5415 break
5416 }
5417
5418
5419 for {
5420 x := v_0
5421 if x != v_1 {
5422 break
5423 }
5424 v.copyOf(x)
5425 return true
5426 }
5427 return false
5428 }
5429 func rewriteValueLOONG64_OpLOONG64ORconst(v *Value) bool {
5430 v_0 := v.Args[0]
5431
5432
5433 for {
5434 if auxIntToInt64(v.AuxInt) != 0 {
5435 break
5436 }
5437 x := v_0
5438 v.copyOf(x)
5439 return true
5440 }
5441
5442
5443 for {
5444 if auxIntToInt64(v.AuxInt) != -1 {
5445 break
5446 }
5447 v.reset(OpLOONG64MOVVconst)
5448 v.AuxInt = int64ToAuxInt(-1)
5449 return true
5450 }
5451
5452
5453 for {
5454 c := auxIntToInt64(v.AuxInt)
5455 if v_0.Op != OpLOONG64MOVVconst {
5456 break
5457 }
5458 d := auxIntToInt64(v_0.AuxInt)
5459 v.reset(OpLOONG64MOVVconst)
5460 v.AuxInt = int64ToAuxInt(c | d)
5461 return true
5462 }
5463
5464
5465
5466 for {
5467 c := auxIntToInt64(v.AuxInt)
5468 if v_0.Op != OpLOONG64ORconst {
5469 break
5470 }
5471 d := auxIntToInt64(v_0.AuxInt)
5472 x := v_0.Args[0]
5473 if !(is32Bit(c | d)) {
5474 break
5475 }
5476 v.reset(OpLOONG64ORconst)
5477 v.AuxInt = int64ToAuxInt(c | d)
5478 v.AddArg(x)
5479 return true
5480 }
5481 return false
5482 }
5483 func rewriteValueLOONG64_OpLOONG64REMV(v *Value) bool {
5484 v_1 := v.Args[1]
5485 v_0 := v.Args[0]
5486
5487
5488
5489 for {
5490 if v_0.Op != OpLOONG64MOVVconst {
5491 break
5492 }
5493 c := auxIntToInt64(v_0.AuxInt)
5494 if v_1.Op != OpLOONG64MOVVconst {
5495 break
5496 }
5497 d := auxIntToInt64(v_1.AuxInt)
5498 if !(d != 0) {
5499 break
5500 }
5501 v.reset(OpLOONG64MOVVconst)
5502 v.AuxInt = int64ToAuxInt(c % d)
5503 return true
5504 }
5505 return false
5506 }
5507 func rewriteValueLOONG64_OpLOONG64REMVU(v *Value) bool {
5508 v_1 := v.Args[1]
5509 v_0 := v.Args[0]
5510
5511
5512 for {
5513 if v_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_1.AuxInt) != 1 {
5514 break
5515 }
5516 v.reset(OpLOONG64MOVVconst)
5517 v.AuxInt = int64ToAuxInt(0)
5518 return true
5519 }
5520
5521
5522
5523 for {
5524 x := v_0
5525 if v_1.Op != OpLOONG64MOVVconst {
5526 break
5527 }
5528 c := auxIntToInt64(v_1.AuxInt)
5529 if !(isPowerOfTwo(c)) {
5530 break
5531 }
5532 v.reset(OpLOONG64ANDconst)
5533 v.AuxInt = int64ToAuxInt(c - 1)
5534 v.AddArg(x)
5535 return true
5536 }
5537
5538
5539
5540 for {
5541 if v_0.Op != OpLOONG64MOVVconst {
5542 break
5543 }
5544 c := auxIntToInt64(v_0.AuxInt)
5545 if v_1.Op != OpLOONG64MOVVconst {
5546 break
5547 }
5548 d := auxIntToInt64(v_1.AuxInt)
5549 if !(d != 0) {
5550 break
5551 }
5552 v.reset(OpLOONG64MOVVconst)
5553 v.AuxInt = int64ToAuxInt(int64(uint64(c) % uint64(d)))
5554 return true
5555 }
5556 return false
5557 }
5558 func rewriteValueLOONG64_OpLOONG64ROTR(v *Value) bool {
5559 v_1 := v.Args[1]
5560 v_0 := v.Args[0]
5561
5562
5563 for {
5564 x := v_0
5565 if v_1.Op != OpLOONG64MOVVconst {
5566 break
5567 }
5568 c := auxIntToInt64(v_1.AuxInt)
5569 v.reset(OpLOONG64ROTRconst)
5570 v.AuxInt = int64ToAuxInt(c & 31)
5571 v.AddArg(x)
5572 return true
5573 }
5574 return false
5575 }
5576 func rewriteValueLOONG64_OpLOONG64ROTRV(v *Value) bool {
5577 v_1 := v.Args[1]
5578 v_0 := v.Args[0]
5579
5580
5581 for {
5582 x := v_0
5583 if v_1.Op != OpLOONG64MOVVconst {
5584 break
5585 }
5586 c := auxIntToInt64(v_1.AuxInt)
5587 v.reset(OpLOONG64ROTRVconst)
5588 v.AuxInt = int64ToAuxInt(c & 63)
5589 v.AddArg(x)
5590 return true
5591 }
5592 return false
5593 }
5594 func rewriteValueLOONG64_OpLOONG64SGT(v *Value) bool {
5595 v_1 := v.Args[1]
5596 v_0 := v.Args[0]
5597 b := v.Block
5598 typ := &b.Func.Config.Types
5599
5600
5601
5602 for {
5603 if v_0.Op != OpLOONG64MOVVconst {
5604 break
5605 }
5606 c := auxIntToInt64(v_0.AuxInt)
5607 if v_1.Op != OpLOONG64NEGV {
5608 break
5609 }
5610 v_1_0 := v_1.Args[0]
5611 if v_1_0.Op != OpLOONG64SUBVconst {
5612 break
5613 }
5614 d := auxIntToInt64(v_1_0.AuxInt)
5615 x := v_1_0.Args[0]
5616 if !(is32Bit(d - c)) {
5617 break
5618 }
5619 v.reset(OpLOONG64SGT)
5620 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
5621 v0.AuxInt = int64ToAuxInt(d - c)
5622 v.AddArg2(x, v0)
5623 return true
5624 }
5625
5626
5627
5628 for {
5629 if v_0.Op != OpLOONG64MOVVconst {
5630 break
5631 }
5632 c := auxIntToInt64(v_0.AuxInt)
5633 x := v_1
5634 if !(is32Bit(c)) {
5635 break
5636 }
5637 v.reset(OpLOONG64SGTconst)
5638 v.AuxInt = int64ToAuxInt(c)
5639 v.AddArg(x)
5640 return true
5641 }
5642
5643
5644 for {
5645 x := v_0
5646 if x != v_1 {
5647 break
5648 }
5649 v.reset(OpLOONG64MOVVconst)
5650 v.AuxInt = int64ToAuxInt(0)
5651 return true
5652 }
5653 return false
5654 }
5655 func rewriteValueLOONG64_OpLOONG64SGTU(v *Value) bool {
5656 v_1 := v.Args[1]
5657 v_0 := v.Args[0]
5658
5659
5660
5661 for {
5662 if v_0.Op != OpLOONG64MOVVconst {
5663 break
5664 }
5665 c := auxIntToInt64(v_0.AuxInt)
5666 x := v_1
5667 if !(is32Bit(c)) {
5668 break
5669 }
5670 v.reset(OpLOONG64SGTUconst)
5671 v.AuxInt = int64ToAuxInt(c)
5672 v.AddArg(x)
5673 return true
5674 }
5675
5676
5677 for {
5678 x := v_0
5679 if x != v_1 {
5680 break
5681 }
5682 v.reset(OpLOONG64MOVVconst)
5683 v.AuxInt = int64ToAuxInt(0)
5684 return true
5685 }
5686 return false
5687 }
5688 func rewriteValueLOONG64_OpLOONG64SGTUconst(v *Value) bool {
5689 v_0 := v.Args[0]
5690
5691
5692
5693 for {
5694 c := auxIntToInt64(v.AuxInt)
5695 if v_0.Op != OpLOONG64MOVVconst {
5696 break
5697 }
5698 d := auxIntToInt64(v_0.AuxInt)
5699 if !(uint64(c) > uint64(d)) {
5700 break
5701 }
5702 v.reset(OpLOONG64MOVVconst)
5703 v.AuxInt = int64ToAuxInt(1)
5704 return true
5705 }
5706
5707
5708
5709 for {
5710 c := auxIntToInt64(v.AuxInt)
5711 if v_0.Op != OpLOONG64MOVVconst {
5712 break
5713 }
5714 d := auxIntToInt64(v_0.AuxInt)
5715 if !(uint64(c) <= uint64(d)) {
5716 break
5717 }
5718 v.reset(OpLOONG64MOVVconst)
5719 v.AuxInt = int64ToAuxInt(0)
5720 return true
5721 }
5722
5723
5724
5725 for {
5726 c := auxIntToInt64(v.AuxInt)
5727 if v_0.Op != OpLOONG64MOVBUreg || !(0xff < uint64(c)) {
5728 break
5729 }
5730 v.reset(OpLOONG64MOVVconst)
5731 v.AuxInt = int64ToAuxInt(1)
5732 return true
5733 }
5734
5735
5736
5737 for {
5738 c := auxIntToInt64(v.AuxInt)
5739 if v_0.Op != OpLOONG64MOVHUreg || !(0xffff < uint64(c)) {
5740 break
5741 }
5742 v.reset(OpLOONG64MOVVconst)
5743 v.AuxInt = int64ToAuxInt(1)
5744 return true
5745 }
5746
5747
5748
5749 for {
5750 c := auxIntToInt64(v.AuxInt)
5751 if v_0.Op != OpLOONG64ANDconst {
5752 break
5753 }
5754 m := auxIntToInt64(v_0.AuxInt)
5755 if !(uint64(m) < uint64(c)) {
5756 break
5757 }
5758 v.reset(OpLOONG64MOVVconst)
5759 v.AuxInt = int64ToAuxInt(1)
5760 return true
5761 }
5762
5763
5764
5765 for {
5766 c := auxIntToInt64(v.AuxInt)
5767 if v_0.Op != OpLOONG64SRLVconst {
5768 break
5769 }
5770 d := auxIntToInt64(v_0.AuxInt)
5771 if !(0 < d && d <= 63 && 0xffffffffffffffff>>uint64(d) < uint64(c)) {
5772 break
5773 }
5774 v.reset(OpLOONG64MOVVconst)
5775 v.AuxInt = int64ToAuxInt(1)
5776 return true
5777 }
5778 return false
5779 }
5780 func rewriteValueLOONG64_OpLOONG64SGTconst(v *Value) bool {
5781 v_0 := v.Args[0]
5782
5783
5784
5785 for {
5786 c := auxIntToInt64(v.AuxInt)
5787 if v_0.Op != OpLOONG64MOVVconst {
5788 break
5789 }
5790 d := auxIntToInt64(v_0.AuxInt)
5791 if !(c > d) {
5792 break
5793 }
5794 v.reset(OpLOONG64MOVVconst)
5795 v.AuxInt = int64ToAuxInt(1)
5796 return true
5797 }
5798
5799
5800
5801 for {
5802 c := auxIntToInt64(v.AuxInt)
5803 if v_0.Op != OpLOONG64MOVVconst {
5804 break
5805 }
5806 d := auxIntToInt64(v_0.AuxInt)
5807 if !(c <= d) {
5808 break
5809 }
5810 v.reset(OpLOONG64MOVVconst)
5811 v.AuxInt = int64ToAuxInt(0)
5812 return true
5813 }
5814
5815
5816
5817 for {
5818 c := auxIntToInt64(v.AuxInt)
5819 if v_0.Op != OpLOONG64MOVBreg || !(0x7f < c) {
5820 break
5821 }
5822 v.reset(OpLOONG64MOVVconst)
5823 v.AuxInt = int64ToAuxInt(1)
5824 return true
5825 }
5826
5827
5828
5829 for {
5830 c := auxIntToInt64(v.AuxInt)
5831 if v_0.Op != OpLOONG64MOVBreg || !(c <= -0x80) {
5832 break
5833 }
5834 v.reset(OpLOONG64MOVVconst)
5835 v.AuxInt = int64ToAuxInt(0)
5836 return true
5837 }
5838
5839
5840
5841 for {
5842 c := auxIntToInt64(v.AuxInt)
5843 if v_0.Op != OpLOONG64MOVBUreg || !(0xff < c) {
5844 break
5845 }
5846 v.reset(OpLOONG64MOVVconst)
5847 v.AuxInt = int64ToAuxInt(1)
5848 return true
5849 }
5850
5851
5852
5853 for {
5854 c := auxIntToInt64(v.AuxInt)
5855 if v_0.Op != OpLOONG64MOVBUreg || !(c < 0) {
5856 break
5857 }
5858 v.reset(OpLOONG64MOVVconst)
5859 v.AuxInt = int64ToAuxInt(0)
5860 return true
5861 }
5862
5863
5864
5865 for {
5866 c := auxIntToInt64(v.AuxInt)
5867 if v_0.Op != OpLOONG64MOVHreg || !(0x7fff < c) {
5868 break
5869 }
5870 v.reset(OpLOONG64MOVVconst)
5871 v.AuxInt = int64ToAuxInt(1)
5872 return true
5873 }
5874
5875
5876
5877 for {
5878 c := auxIntToInt64(v.AuxInt)
5879 if v_0.Op != OpLOONG64MOVHreg || !(c <= -0x8000) {
5880 break
5881 }
5882 v.reset(OpLOONG64MOVVconst)
5883 v.AuxInt = int64ToAuxInt(0)
5884 return true
5885 }
5886
5887
5888
5889 for {
5890 c := auxIntToInt64(v.AuxInt)
5891 if v_0.Op != OpLOONG64MOVHUreg || !(0xffff < c) {
5892 break
5893 }
5894 v.reset(OpLOONG64MOVVconst)
5895 v.AuxInt = int64ToAuxInt(1)
5896 return true
5897 }
5898
5899
5900
5901 for {
5902 c := auxIntToInt64(v.AuxInt)
5903 if v_0.Op != OpLOONG64MOVHUreg || !(c < 0) {
5904 break
5905 }
5906 v.reset(OpLOONG64MOVVconst)
5907 v.AuxInt = int64ToAuxInt(0)
5908 return true
5909 }
5910
5911
5912
5913 for {
5914 c := auxIntToInt64(v.AuxInt)
5915 if v_0.Op != OpLOONG64MOVWUreg || !(c < 0) {
5916 break
5917 }
5918 v.reset(OpLOONG64MOVVconst)
5919 v.AuxInt = int64ToAuxInt(0)
5920 return true
5921 }
5922
5923
5924
5925 for {
5926 c := auxIntToInt64(v.AuxInt)
5927 if v_0.Op != OpLOONG64ANDconst {
5928 break
5929 }
5930 m := auxIntToInt64(v_0.AuxInt)
5931 if !(0 <= m && m < c) {
5932 break
5933 }
5934 v.reset(OpLOONG64MOVVconst)
5935 v.AuxInt = int64ToAuxInt(1)
5936 return true
5937 }
5938
5939
5940
5941 for {
5942 c := auxIntToInt64(v.AuxInt)
5943 if v_0.Op != OpLOONG64SRLVconst {
5944 break
5945 }
5946 d := auxIntToInt64(v_0.AuxInt)
5947 if !(0 <= c && 0 < d && d <= 63 && 0xffffffffffffffff>>uint64(d) < uint64(c)) {
5948 break
5949 }
5950 v.reset(OpLOONG64MOVVconst)
5951 v.AuxInt = int64ToAuxInt(1)
5952 return true
5953 }
5954 return false
5955 }
5956 func rewriteValueLOONG64_OpLOONG64SLLV(v *Value) bool {
5957 v_1 := v.Args[1]
5958 v_0 := v.Args[0]
5959
5960
5961
5962 for {
5963 if v_1.Op != OpLOONG64MOVVconst {
5964 break
5965 }
5966 c := auxIntToInt64(v_1.AuxInt)
5967 if !(uint64(c) >= 64) {
5968 break
5969 }
5970 v.reset(OpLOONG64MOVVconst)
5971 v.AuxInt = int64ToAuxInt(0)
5972 return true
5973 }
5974
5975
5976 for {
5977 x := v_0
5978 if v_1.Op != OpLOONG64MOVVconst {
5979 break
5980 }
5981 c := auxIntToInt64(v_1.AuxInt)
5982 v.reset(OpLOONG64SLLVconst)
5983 v.AuxInt = int64ToAuxInt(c)
5984 v.AddArg(x)
5985 return true
5986 }
5987 return false
5988 }
5989 func rewriteValueLOONG64_OpLOONG64SLLVconst(v *Value) bool {
5990 v_0 := v.Args[0]
5991
5992
5993 for {
5994 c := auxIntToInt64(v.AuxInt)
5995 if v_0.Op != OpLOONG64MOVVconst {
5996 break
5997 }
5998 d := auxIntToInt64(v_0.AuxInt)
5999 v.reset(OpLOONG64MOVVconst)
6000 v.AuxInt = int64ToAuxInt(d << uint64(c))
6001 return true
6002 }
6003 return false
6004 }
6005 func rewriteValueLOONG64_OpLOONG64SRAV(v *Value) bool {
6006 v_1 := v.Args[1]
6007 v_0 := v.Args[0]
6008
6009
6010
6011 for {
6012 x := v_0
6013 if v_1.Op != OpLOONG64MOVVconst {
6014 break
6015 }
6016 c := auxIntToInt64(v_1.AuxInt)
6017 if !(uint64(c) >= 64) {
6018 break
6019 }
6020 v.reset(OpLOONG64SRAVconst)
6021 v.AuxInt = int64ToAuxInt(63)
6022 v.AddArg(x)
6023 return true
6024 }
6025
6026
6027 for {
6028 x := v_0
6029 if v_1.Op != OpLOONG64MOVVconst {
6030 break
6031 }
6032 c := auxIntToInt64(v_1.AuxInt)
6033 v.reset(OpLOONG64SRAVconst)
6034 v.AuxInt = int64ToAuxInt(c)
6035 v.AddArg(x)
6036 return true
6037 }
6038 return false
6039 }
6040 func rewriteValueLOONG64_OpLOONG64SRAVconst(v *Value) bool {
6041 v_0 := v.Args[0]
6042
6043
6044 for {
6045 c := auxIntToInt64(v.AuxInt)
6046 if v_0.Op != OpLOONG64MOVVconst {
6047 break
6048 }
6049 d := auxIntToInt64(v_0.AuxInt)
6050 v.reset(OpLOONG64MOVVconst)
6051 v.AuxInt = int64ToAuxInt(d >> uint64(c))
6052 return true
6053 }
6054 return false
6055 }
6056 func rewriteValueLOONG64_OpLOONG64SRLV(v *Value) bool {
6057 v_1 := v.Args[1]
6058 v_0 := v.Args[0]
6059
6060
6061
6062 for {
6063 if v_1.Op != OpLOONG64MOVVconst {
6064 break
6065 }
6066 c := auxIntToInt64(v_1.AuxInt)
6067 if !(uint64(c) >= 64) {
6068 break
6069 }
6070 v.reset(OpLOONG64MOVVconst)
6071 v.AuxInt = int64ToAuxInt(0)
6072 return true
6073 }
6074
6075
6076 for {
6077 x := v_0
6078 if v_1.Op != OpLOONG64MOVVconst {
6079 break
6080 }
6081 c := auxIntToInt64(v_1.AuxInt)
6082 v.reset(OpLOONG64SRLVconst)
6083 v.AuxInt = int64ToAuxInt(c)
6084 v.AddArg(x)
6085 return true
6086 }
6087 return false
6088 }
6089 func rewriteValueLOONG64_OpLOONG64SRLVconst(v *Value) bool {
6090 v_0 := v.Args[0]
6091
6092
6093
6094 for {
6095 rc := auxIntToInt64(v.AuxInt)
6096 if v_0.Op != OpLOONG64SLLVconst {
6097 break
6098 }
6099 lc := auxIntToInt64(v_0.AuxInt)
6100 x := v_0.Args[0]
6101 if !(lc <= rc) {
6102 break
6103 }
6104 v.reset(OpLOONG64BSTRPICKV)
6105 v.AuxInt = int64ToAuxInt(rc - lc + ((64-lc)-1)<<6)
6106 v.AddArg(x)
6107 return true
6108 }
6109
6110
6111
6112 for {
6113 rc := auxIntToInt64(v.AuxInt)
6114 if v_0.Op != OpLOONG64MOVWUreg {
6115 break
6116 }
6117 x := v_0.Args[0]
6118 if !(rc < 32) {
6119 break
6120 }
6121 v.reset(OpLOONG64BSTRPICKV)
6122 v.AuxInt = int64ToAuxInt(rc + 31<<6)
6123 v.AddArg(x)
6124 return true
6125 }
6126
6127
6128
6129 for {
6130 rc := auxIntToInt64(v.AuxInt)
6131 if v_0.Op != OpLOONG64MOVHUreg {
6132 break
6133 }
6134 x := v_0.Args[0]
6135 if !(rc < 16) {
6136 break
6137 }
6138 v.reset(OpLOONG64BSTRPICKV)
6139 v.AuxInt = int64ToAuxInt(rc + 15<<6)
6140 v.AddArg(x)
6141 return true
6142 }
6143
6144
6145
6146 for {
6147 rc := auxIntToInt64(v.AuxInt)
6148 if v_0.Op != OpLOONG64MOVBUreg {
6149 break
6150 }
6151 x := v_0.Args[0]
6152 if !(rc < 8) {
6153 break
6154 }
6155 v.reset(OpLOONG64BSTRPICKV)
6156 v.AuxInt = int64ToAuxInt(rc + 7<<6)
6157 v.AddArg(x)
6158 return true
6159 }
6160
6161
6162
6163 for {
6164 rc := auxIntToInt64(v.AuxInt)
6165 if v_0.Op != OpLOONG64MOVWUreg {
6166 break
6167 }
6168 if !(rc >= 32) {
6169 break
6170 }
6171 v.reset(OpLOONG64MOVVconst)
6172 v.AuxInt = int64ToAuxInt(0)
6173 return true
6174 }
6175
6176
6177
6178 for {
6179 rc := auxIntToInt64(v.AuxInt)
6180 if v_0.Op != OpLOONG64MOVHUreg {
6181 break
6182 }
6183 if !(rc >= 16) {
6184 break
6185 }
6186 v.reset(OpLOONG64MOVVconst)
6187 v.AuxInt = int64ToAuxInt(0)
6188 return true
6189 }
6190
6191
6192
6193 for {
6194 rc := auxIntToInt64(v.AuxInt)
6195 if v_0.Op != OpLOONG64MOVBUreg {
6196 break
6197 }
6198 if !(rc >= 8) {
6199 break
6200 }
6201 v.reset(OpLOONG64MOVVconst)
6202 v.AuxInt = int64ToAuxInt(0)
6203 return true
6204 }
6205
6206
6207 for {
6208 c := auxIntToInt64(v.AuxInt)
6209 if v_0.Op != OpLOONG64MOVVconst {
6210 break
6211 }
6212 d := auxIntToInt64(v_0.AuxInt)
6213 v.reset(OpLOONG64MOVVconst)
6214 v.AuxInt = int64ToAuxInt(int64(uint64(d) >> uint64(c)))
6215 return true
6216 }
6217 return false
6218 }
6219 func rewriteValueLOONG64_OpLOONG64SUBD(v *Value) bool {
6220 v_1 := v.Args[1]
6221 v_0 := v.Args[0]
6222
6223
6224
6225 for {
6226 if v_0.Op != OpLOONG64MULD {
6227 break
6228 }
6229 y := v_0.Args[1]
6230 x := v_0.Args[0]
6231 z := v_1
6232 if !(z.Block.Func.useFMA(v)) {
6233 break
6234 }
6235 v.reset(OpLOONG64FMSUBD)
6236 v.AddArg3(x, y, z)
6237 return true
6238 }
6239
6240
6241
6242 for {
6243 z := v_0
6244 if v_1.Op != OpLOONG64MULD {
6245 break
6246 }
6247 y := v_1.Args[1]
6248 x := v_1.Args[0]
6249 if !(z.Block.Func.useFMA(v)) {
6250 break
6251 }
6252 v.reset(OpLOONG64FNMSUBD)
6253 v.AddArg3(x, y, z)
6254 return true
6255 }
6256
6257
6258
6259 for {
6260 z := v_0
6261 if v_1.Op != OpLOONG64NEGD {
6262 break
6263 }
6264 v_1_0 := v_1.Args[0]
6265 if v_1_0.Op != OpLOONG64MULD {
6266 break
6267 }
6268 y := v_1_0.Args[1]
6269 x := v_1_0.Args[0]
6270 if !(z.Block.Func.useFMA(v)) {
6271 break
6272 }
6273 v.reset(OpLOONG64FMADDD)
6274 v.AddArg3(x, y, z)
6275 return true
6276 }
6277
6278
6279
6280 for {
6281 if v_0.Op != OpLOONG64NEGD {
6282 break
6283 }
6284 v_0_0 := v_0.Args[0]
6285 if v_0_0.Op != OpLOONG64MULD {
6286 break
6287 }
6288 y := v_0_0.Args[1]
6289 x := v_0_0.Args[0]
6290 z := v_1
6291 if !(z.Block.Func.useFMA(v)) {
6292 break
6293 }
6294 v.reset(OpLOONG64FNMADDD)
6295 v.AddArg3(x, y, z)
6296 return true
6297 }
6298 return false
6299 }
6300 func rewriteValueLOONG64_OpLOONG64SUBF(v *Value) bool {
6301 v_1 := v.Args[1]
6302 v_0 := v.Args[0]
6303
6304
6305
6306 for {
6307 if v_0.Op != OpLOONG64MULF {
6308 break
6309 }
6310 y := v_0.Args[1]
6311 x := v_0.Args[0]
6312 z := v_1
6313 if !(z.Block.Func.useFMA(v)) {
6314 break
6315 }
6316 v.reset(OpLOONG64FMSUBF)
6317 v.AddArg3(x, y, z)
6318 return true
6319 }
6320
6321
6322
6323 for {
6324 z := v_0
6325 if v_1.Op != OpLOONG64MULF {
6326 break
6327 }
6328 y := v_1.Args[1]
6329 x := v_1.Args[0]
6330 if !(z.Block.Func.useFMA(v)) {
6331 break
6332 }
6333 v.reset(OpLOONG64FNMSUBF)
6334 v.AddArg3(x, y, z)
6335 return true
6336 }
6337
6338
6339
6340 for {
6341 z := v_0
6342 if v_1.Op != OpLOONG64NEGF {
6343 break
6344 }
6345 v_1_0 := v_1.Args[0]
6346 if v_1_0.Op != OpLOONG64MULF {
6347 break
6348 }
6349 y := v_1_0.Args[1]
6350 x := v_1_0.Args[0]
6351 if !(z.Block.Func.useFMA(v)) {
6352 break
6353 }
6354 v.reset(OpLOONG64FMADDF)
6355 v.AddArg3(x, y, z)
6356 return true
6357 }
6358
6359
6360
6361 for {
6362 if v_0.Op != OpLOONG64NEGF {
6363 break
6364 }
6365 v_0_0 := v_0.Args[0]
6366 if v_0_0.Op != OpLOONG64MULF {
6367 break
6368 }
6369 y := v_0_0.Args[1]
6370 x := v_0_0.Args[0]
6371 z := v_1
6372 if !(z.Block.Func.useFMA(v)) {
6373 break
6374 }
6375 v.reset(OpLOONG64FNMADDF)
6376 v.AddArg3(x, y, z)
6377 return true
6378 }
6379 return false
6380 }
6381 func rewriteValueLOONG64_OpLOONG64SUBV(v *Value) bool {
6382 v_1 := v.Args[1]
6383 v_0 := v.Args[0]
6384
6385
6386
6387 for {
6388 x := v_0
6389 if v_1.Op != OpLOONG64MOVVconst {
6390 break
6391 }
6392 c := auxIntToInt64(v_1.AuxInt)
6393 if !(is32Bit(c)) {
6394 break
6395 }
6396 v.reset(OpLOONG64SUBVconst)
6397 v.AuxInt = int64ToAuxInt(c)
6398 v.AddArg(x)
6399 return true
6400 }
6401
6402
6403 for {
6404 x := v_0
6405 if x != v_1 {
6406 break
6407 }
6408 v.reset(OpLOONG64MOVVconst)
6409 v.AuxInt = int64ToAuxInt(0)
6410 return true
6411 }
6412
6413
6414 for {
6415 if v_0.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0.AuxInt) != 0 {
6416 break
6417 }
6418 x := v_1
6419 v.reset(OpLOONG64NEGV)
6420 v.AddArg(x)
6421 return true
6422 }
6423
6424
6425 for {
6426 if v_0.Op != OpLOONG64MOVVconst {
6427 break
6428 }
6429 c := auxIntToInt64(v_0.AuxInt)
6430 if v_1.Op != OpLOONG64NEGV {
6431 break
6432 }
6433 v_1_0 := v_1.Args[0]
6434 if v_1_0.Op != OpLOONG64SUBVconst {
6435 break
6436 }
6437 d := auxIntToInt64(v_1_0.AuxInt)
6438 x := v_1_0.Args[0]
6439 v.reset(OpLOONG64ADDVconst)
6440 v.AuxInt = int64ToAuxInt(c - d)
6441 v.AddArg(x)
6442 return true
6443 }
6444 return false
6445 }
6446 func rewriteValueLOONG64_OpLOONG64SUBVconst(v *Value) bool {
6447 v_0 := v.Args[0]
6448
6449
6450 for {
6451 if auxIntToInt64(v.AuxInt) != 0 {
6452 break
6453 }
6454 x := v_0
6455 v.copyOf(x)
6456 return true
6457 }
6458
6459
6460 for {
6461 c := auxIntToInt64(v.AuxInt)
6462 if v_0.Op != OpLOONG64MOVVconst {
6463 break
6464 }
6465 d := auxIntToInt64(v_0.AuxInt)
6466 v.reset(OpLOONG64MOVVconst)
6467 v.AuxInt = int64ToAuxInt(d - c)
6468 return true
6469 }
6470
6471
6472
6473 for {
6474 c := auxIntToInt64(v.AuxInt)
6475 if v_0.Op != OpLOONG64SUBVconst {
6476 break
6477 }
6478 d := auxIntToInt64(v_0.AuxInt)
6479 x := v_0.Args[0]
6480 if !(is32Bit(-c - d)) {
6481 break
6482 }
6483 v.reset(OpLOONG64ADDVconst)
6484 v.AuxInt = int64ToAuxInt(-c - d)
6485 v.AddArg(x)
6486 return true
6487 }
6488
6489
6490
6491 for {
6492 c := auxIntToInt64(v.AuxInt)
6493 if v_0.Op != OpLOONG64ADDVconst {
6494 break
6495 }
6496 d := auxIntToInt64(v_0.AuxInt)
6497 x := v_0.Args[0]
6498 if !(is32Bit(-c + d)) {
6499 break
6500 }
6501 v.reset(OpLOONG64ADDVconst)
6502 v.AuxInt = int64ToAuxInt(-c + d)
6503 v.AddArg(x)
6504 return true
6505 }
6506 return false
6507 }
6508 func rewriteValueLOONG64_OpLOONG64XOR(v *Value) bool {
6509 v_1 := v.Args[1]
6510 v_0 := v.Args[0]
6511
6512
6513
6514 for {
6515 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6516 x := v_0
6517 if v_1.Op != OpLOONG64MOVVconst {
6518 continue
6519 }
6520 c := auxIntToInt64(v_1.AuxInt)
6521 if !(is32Bit(c)) {
6522 continue
6523 }
6524 v.reset(OpLOONG64XORconst)
6525 v.AuxInt = int64ToAuxInt(c)
6526 v.AddArg(x)
6527 return true
6528 }
6529 break
6530 }
6531
6532
6533 for {
6534 x := v_0
6535 if x != v_1 {
6536 break
6537 }
6538 v.reset(OpLOONG64MOVVconst)
6539 v.AuxInt = int64ToAuxInt(0)
6540 return true
6541 }
6542 return false
6543 }
6544 func rewriteValueLOONG64_OpLOONG64XORconst(v *Value) bool {
6545 v_0 := v.Args[0]
6546
6547
6548 for {
6549 if auxIntToInt64(v.AuxInt) != 0 {
6550 break
6551 }
6552 x := v_0
6553 v.copyOf(x)
6554 return true
6555 }
6556
6557
6558 for {
6559 if auxIntToInt64(v.AuxInt) != -1 {
6560 break
6561 }
6562 x := v_0
6563 v.reset(OpLOONG64NORconst)
6564 v.AuxInt = int64ToAuxInt(0)
6565 v.AddArg(x)
6566 return true
6567 }
6568
6569
6570 for {
6571 c := auxIntToInt64(v.AuxInt)
6572 if v_0.Op != OpLOONG64MOVVconst {
6573 break
6574 }
6575 d := auxIntToInt64(v_0.AuxInt)
6576 v.reset(OpLOONG64MOVVconst)
6577 v.AuxInt = int64ToAuxInt(c ^ d)
6578 return true
6579 }
6580
6581
6582
6583 for {
6584 c := auxIntToInt64(v.AuxInt)
6585 if v_0.Op != OpLOONG64XORconst {
6586 break
6587 }
6588 d := auxIntToInt64(v_0.AuxInt)
6589 x := v_0.Args[0]
6590 if !(is32Bit(c ^ d)) {
6591 break
6592 }
6593 v.reset(OpLOONG64XORconst)
6594 v.AuxInt = int64ToAuxInt(c ^ d)
6595 v.AddArg(x)
6596 return true
6597 }
6598 return false
6599 }
6600 func rewriteValueLOONG64_OpLeq16(v *Value) bool {
6601 v_1 := v.Args[1]
6602 v_0 := v.Args[0]
6603 b := v.Block
6604 typ := &b.Func.Config.Types
6605
6606
6607 for {
6608 x := v_0
6609 y := v_1
6610 v.reset(OpLOONG64XOR)
6611 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6612 v0.AuxInt = int64ToAuxInt(1)
6613 v1 := b.NewValue0(v.Pos, OpLOONG64SGT, typ.Bool)
6614 v2 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
6615 v2.AddArg(x)
6616 v3 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
6617 v3.AddArg(y)
6618 v1.AddArg2(v2, v3)
6619 v.AddArg2(v0, v1)
6620 return true
6621 }
6622 }
6623 func rewriteValueLOONG64_OpLeq16U(v *Value) bool {
6624 v_1 := v.Args[1]
6625 v_0 := v.Args[0]
6626 b := v.Block
6627 typ := &b.Func.Config.Types
6628
6629
6630 for {
6631 x := v_0
6632 y := v_1
6633 v.reset(OpLOONG64XOR)
6634 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6635 v0.AuxInt = int64ToAuxInt(1)
6636 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
6637 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
6638 v2.AddArg(x)
6639 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
6640 v3.AddArg(y)
6641 v1.AddArg2(v2, v3)
6642 v.AddArg2(v0, v1)
6643 return true
6644 }
6645 }
6646 func rewriteValueLOONG64_OpLeq32(v *Value) bool {
6647 v_1 := v.Args[1]
6648 v_0 := v.Args[0]
6649 b := v.Block
6650 typ := &b.Func.Config.Types
6651
6652
6653 for {
6654 x := v_0
6655 y := v_1
6656 v.reset(OpLOONG64XOR)
6657 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6658 v0.AuxInt = int64ToAuxInt(1)
6659 v1 := b.NewValue0(v.Pos, OpLOONG64SGT, typ.Bool)
6660 v2 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
6661 v2.AddArg(x)
6662 v3 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
6663 v3.AddArg(y)
6664 v1.AddArg2(v2, v3)
6665 v.AddArg2(v0, v1)
6666 return true
6667 }
6668 }
6669 func rewriteValueLOONG64_OpLeq32F(v *Value) bool {
6670 v_1 := v.Args[1]
6671 v_0 := v.Args[0]
6672 b := v.Block
6673
6674
6675 for {
6676 x := v_0
6677 y := v_1
6678 v.reset(OpLOONG64FPFlagTrue)
6679 v0 := b.NewValue0(v.Pos, OpLOONG64CMPGEF, types.TypeFlags)
6680 v0.AddArg2(y, x)
6681 v.AddArg(v0)
6682 return true
6683 }
6684 }
6685 func rewriteValueLOONG64_OpLeq32U(v *Value) bool {
6686 v_1 := v.Args[1]
6687 v_0 := v.Args[0]
6688 b := v.Block
6689 typ := &b.Func.Config.Types
6690
6691
6692 for {
6693 x := v_0
6694 y := v_1
6695 v.reset(OpLOONG64XOR)
6696 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6697 v0.AuxInt = int64ToAuxInt(1)
6698 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
6699 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
6700 v2.AddArg(x)
6701 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
6702 v3.AddArg(y)
6703 v1.AddArg2(v2, v3)
6704 v.AddArg2(v0, v1)
6705 return true
6706 }
6707 }
6708 func rewriteValueLOONG64_OpLeq64(v *Value) bool {
6709 v_1 := v.Args[1]
6710 v_0 := v.Args[0]
6711 b := v.Block
6712 typ := &b.Func.Config.Types
6713
6714
6715 for {
6716 x := v_0
6717 y := v_1
6718 v.reset(OpLOONG64XOR)
6719 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6720 v0.AuxInt = int64ToAuxInt(1)
6721 v1 := b.NewValue0(v.Pos, OpLOONG64SGT, typ.Bool)
6722 v1.AddArg2(x, y)
6723 v.AddArg2(v0, v1)
6724 return true
6725 }
6726 }
6727 func rewriteValueLOONG64_OpLeq64F(v *Value) bool {
6728 v_1 := v.Args[1]
6729 v_0 := v.Args[0]
6730 b := v.Block
6731
6732
6733 for {
6734 x := v_0
6735 y := v_1
6736 v.reset(OpLOONG64FPFlagTrue)
6737 v0 := b.NewValue0(v.Pos, OpLOONG64CMPGED, types.TypeFlags)
6738 v0.AddArg2(y, x)
6739 v.AddArg(v0)
6740 return true
6741 }
6742 }
6743 func rewriteValueLOONG64_OpLeq64U(v *Value) bool {
6744 v_1 := v.Args[1]
6745 v_0 := v.Args[0]
6746 b := v.Block
6747 typ := &b.Func.Config.Types
6748
6749
6750 for {
6751 x := v_0
6752 y := v_1
6753 v.reset(OpLOONG64XOR)
6754 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6755 v0.AuxInt = int64ToAuxInt(1)
6756 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
6757 v1.AddArg2(x, y)
6758 v.AddArg2(v0, v1)
6759 return true
6760 }
6761 }
6762 func rewriteValueLOONG64_OpLeq8(v *Value) bool {
6763 v_1 := v.Args[1]
6764 v_0 := v.Args[0]
6765 b := v.Block
6766 typ := &b.Func.Config.Types
6767
6768
6769 for {
6770 x := v_0
6771 y := v_1
6772 v.reset(OpLOONG64XOR)
6773 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6774 v0.AuxInt = int64ToAuxInt(1)
6775 v1 := b.NewValue0(v.Pos, OpLOONG64SGT, typ.Bool)
6776 v2 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
6777 v2.AddArg(x)
6778 v3 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
6779 v3.AddArg(y)
6780 v1.AddArg2(v2, v3)
6781 v.AddArg2(v0, v1)
6782 return true
6783 }
6784 }
6785 func rewriteValueLOONG64_OpLeq8U(v *Value) bool {
6786 v_1 := v.Args[1]
6787 v_0 := v.Args[0]
6788 b := v.Block
6789 typ := &b.Func.Config.Types
6790
6791
6792 for {
6793 x := v_0
6794 y := v_1
6795 v.reset(OpLOONG64XOR)
6796 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
6797 v0.AuxInt = int64ToAuxInt(1)
6798 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
6799 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
6800 v2.AddArg(x)
6801 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
6802 v3.AddArg(y)
6803 v1.AddArg2(v2, v3)
6804 v.AddArg2(v0, v1)
6805 return true
6806 }
6807 }
6808 func rewriteValueLOONG64_OpLess16(v *Value) bool {
6809 v_1 := v.Args[1]
6810 v_0 := v.Args[0]
6811 b := v.Block
6812 typ := &b.Func.Config.Types
6813
6814
6815 for {
6816 x := v_0
6817 y := v_1
6818 v.reset(OpLOONG64SGT)
6819 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
6820 v0.AddArg(y)
6821 v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
6822 v1.AddArg(x)
6823 v.AddArg2(v0, v1)
6824 return true
6825 }
6826 }
6827 func rewriteValueLOONG64_OpLess16U(v *Value) bool {
6828 v_1 := v.Args[1]
6829 v_0 := v.Args[0]
6830 b := v.Block
6831 typ := &b.Func.Config.Types
6832
6833
6834 for {
6835 x := v_0
6836 y := v_1
6837 v.reset(OpLOONG64SGTU)
6838 v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
6839 v0.AddArg(y)
6840 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
6841 v1.AddArg(x)
6842 v.AddArg2(v0, v1)
6843 return true
6844 }
6845 }
6846 func rewriteValueLOONG64_OpLess32(v *Value) bool {
6847 v_1 := v.Args[1]
6848 v_0 := v.Args[0]
6849 b := v.Block
6850 typ := &b.Func.Config.Types
6851
6852
6853 for {
6854 x := v_0
6855 y := v_1
6856 v.reset(OpLOONG64SGT)
6857 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
6858 v0.AddArg(y)
6859 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
6860 v1.AddArg(x)
6861 v.AddArg2(v0, v1)
6862 return true
6863 }
6864 }
6865 func rewriteValueLOONG64_OpLess32F(v *Value) bool {
6866 v_1 := v.Args[1]
6867 v_0 := v.Args[0]
6868 b := v.Block
6869
6870
6871 for {
6872 x := v_0
6873 y := v_1
6874 v.reset(OpLOONG64FPFlagTrue)
6875 v0 := b.NewValue0(v.Pos, OpLOONG64CMPGTF, types.TypeFlags)
6876 v0.AddArg2(y, x)
6877 v.AddArg(v0)
6878 return true
6879 }
6880 }
6881 func rewriteValueLOONG64_OpLess32U(v *Value) bool {
6882 v_1 := v.Args[1]
6883 v_0 := v.Args[0]
6884 b := v.Block
6885 typ := &b.Func.Config.Types
6886
6887
6888 for {
6889 x := v_0
6890 y := v_1
6891 v.reset(OpLOONG64SGTU)
6892 v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
6893 v0.AddArg(y)
6894 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
6895 v1.AddArg(x)
6896 v.AddArg2(v0, v1)
6897 return true
6898 }
6899 }
6900 func rewriteValueLOONG64_OpLess64(v *Value) bool {
6901 v_1 := v.Args[1]
6902 v_0 := v.Args[0]
6903
6904
6905 for {
6906 x := v_0
6907 y := v_1
6908 v.reset(OpLOONG64SGT)
6909 v.AddArg2(y, x)
6910 return true
6911 }
6912 }
6913 func rewriteValueLOONG64_OpLess64F(v *Value) bool {
6914 v_1 := v.Args[1]
6915 v_0 := v.Args[0]
6916 b := v.Block
6917
6918
6919 for {
6920 x := v_0
6921 y := v_1
6922 v.reset(OpLOONG64FPFlagTrue)
6923 v0 := b.NewValue0(v.Pos, OpLOONG64CMPGTD, types.TypeFlags)
6924 v0.AddArg2(y, x)
6925 v.AddArg(v0)
6926 return true
6927 }
6928 }
6929 func rewriteValueLOONG64_OpLess64U(v *Value) bool {
6930 v_1 := v.Args[1]
6931 v_0 := v.Args[0]
6932
6933
6934 for {
6935 x := v_0
6936 y := v_1
6937 v.reset(OpLOONG64SGTU)
6938 v.AddArg2(y, x)
6939 return true
6940 }
6941 }
6942 func rewriteValueLOONG64_OpLess8(v *Value) bool {
6943 v_1 := v.Args[1]
6944 v_0 := v.Args[0]
6945 b := v.Block
6946 typ := &b.Func.Config.Types
6947
6948
6949 for {
6950 x := v_0
6951 y := v_1
6952 v.reset(OpLOONG64SGT)
6953 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
6954 v0.AddArg(y)
6955 v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
6956 v1.AddArg(x)
6957 v.AddArg2(v0, v1)
6958 return true
6959 }
6960 }
6961 func rewriteValueLOONG64_OpLess8U(v *Value) bool {
6962 v_1 := v.Args[1]
6963 v_0 := v.Args[0]
6964 b := v.Block
6965 typ := &b.Func.Config.Types
6966
6967
6968 for {
6969 x := v_0
6970 y := v_1
6971 v.reset(OpLOONG64SGTU)
6972 v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
6973 v0.AddArg(y)
6974 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
6975 v1.AddArg(x)
6976 v.AddArg2(v0, v1)
6977 return true
6978 }
6979 }
6980 func rewriteValueLOONG64_OpLoad(v *Value) bool {
6981 v_1 := v.Args[1]
6982 v_0 := v.Args[0]
6983
6984
6985
6986 for {
6987 t := v.Type
6988 ptr := v_0
6989 mem := v_1
6990 if !(t.IsBoolean()) {
6991 break
6992 }
6993 v.reset(OpLOONG64MOVBUload)
6994 v.AddArg2(ptr, mem)
6995 return true
6996 }
6997
6998
6999
7000 for {
7001 t := v.Type
7002 ptr := v_0
7003 mem := v_1
7004 if !(is8BitInt(t) && t.IsSigned()) {
7005 break
7006 }
7007 v.reset(OpLOONG64MOVBload)
7008 v.AddArg2(ptr, mem)
7009 return true
7010 }
7011
7012
7013
7014 for {
7015 t := v.Type
7016 ptr := v_0
7017 mem := v_1
7018 if !(is8BitInt(t) && !t.IsSigned()) {
7019 break
7020 }
7021 v.reset(OpLOONG64MOVBUload)
7022 v.AddArg2(ptr, mem)
7023 return true
7024 }
7025
7026
7027
7028 for {
7029 t := v.Type
7030 ptr := v_0
7031 mem := v_1
7032 if !(is16BitInt(t) && t.IsSigned()) {
7033 break
7034 }
7035 v.reset(OpLOONG64MOVHload)
7036 v.AddArg2(ptr, mem)
7037 return true
7038 }
7039
7040
7041
7042 for {
7043 t := v.Type
7044 ptr := v_0
7045 mem := v_1
7046 if !(is16BitInt(t) && !t.IsSigned()) {
7047 break
7048 }
7049 v.reset(OpLOONG64MOVHUload)
7050 v.AddArg2(ptr, mem)
7051 return true
7052 }
7053
7054
7055
7056 for {
7057 t := v.Type
7058 ptr := v_0
7059 mem := v_1
7060 if !(is32BitInt(t) && t.IsSigned()) {
7061 break
7062 }
7063 v.reset(OpLOONG64MOVWload)
7064 v.AddArg2(ptr, mem)
7065 return true
7066 }
7067
7068
7069
7070 for {
7071 t := v.Type
7072 ptr := v_0
7073 mem := v_1
7074 if !(is32BitInt(t) && !t.IsSigned()) {
7075 break
7076 }
7077 v.reset(OpLOONG64MOVWUload)
7078 v.AddArg2(ptr, mem)
7079 return true
7080 }
7081
7082
7083
7084 for {
7085 t := v.Type
7086 ptr := v_0
7087 mem := v_1
7088 if !(is64BitInt(t) || isPtr(t)) {
7089 break
7090 }
7091 v.reset(OpLOONG64MOVVload)
7092 v.AddArg2(ptr, mem)
7093 return true
7094 }
7095
7096
7097
7098 for {
7099 t := v.Type
7100 ptr := v_0
7101 mem := v_1
7102 if !(is32BitFloat(t)) {
7103 break
7104 }
7105 v.reset(OpLOONG64MOVFload)
7106 v.AddArg2(ptr, mem)
7107 return true
7108 }
7109
7110
7111
7112 for {
7113 t := v.Type
7114 ptr := v_0
7115 mem := v_1
7116 if !(is64BitFloat(t)) {
7117 break
7118 }
7119 v.reset(OpLOONG64MOVDload)
7120 v.AddArg2(ptr, mem)
7121 return true
7122 }
7123 return false
7124 }
7125 func rewriteValueLOONG64_OpLocalAddr(v *Value) bool {
7126 v_1 := v.Args[1]
7127 v_0 := v.Args[0]
7128 b := v.Block
7129 typ := &b.Func.Config.Types
7130
7131
7132
7133 for {
7134 t := v.Type
7135 sym := auxToSym(v.Aux)
7136 base := v_0
7137 mem := v_1
7138 if !(t.Elem().HasPointers()) {
7139 break
7140 }
7141 v.reset(OpLOONG64MOVVaddr)
7142 v.Aux = symToAux(sym)
7143 v0 := b.NewValue0(v.Pos, OpSPanchored, typ.Uintptr)
7144 v0.AddArg2(base, mem)
7145 v.AddArg(v0)
7146 return true
7147 }
7148
7149
7150
7151 for {
7152 t := v.Type
7153 sym := auxToSym(v.Aux)
7154 base := v_0
7155 if !(!t.Elem().HasPointers()) {
7156 break
7157 }
7158 v.reset(OpLOONG64MOVVaddr)
7159 v.Aux = symToAux(sym)
7160 v.AddArg(base)
7161 return true
7162 }
7163 return false
7164 }
7165 func rewriteValueLOONG64_OpLsh16x16(v *Value) bool {
7166 v_1 := v.Args[1]
7167 v_0 := v.Args[0]
7168 b := v.Block
7169 typ := &b.Func.Config.Types
7170
7171
7172 for {
7173 t := v.Type
7174 x := v_0
7175 y := v_1
7176 v.reset(OpLOONG64MASKEQZ)
7177 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7178 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7179 v1.AddArg(y)
7180 v0.AddArg2(x, v1)
7181 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7182 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7183 v3.AuxInt = int64ToAuxInt(64)
7184 v2.AddArg2(v3, v1)
7185 v.AddArg2(v0, v2)
7186 return true
7187 }
7188 }
7189 func rewriteValueLOONG64_OpLsh16x32(v *Value) bool {
7190 v_1 := v.Args[1]
7191 v_0 := v.Args[0]
7192 b := v.Block
7193 typ := &b.Func.Config.Types
7194
7195
7196 for {
7197 t := v.Type
7198 x := v_0
7199 y := v_1
7200 v.reset(OpLOONG64MASKEQZ)
7201 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7202 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7203 v1.AddArg(y)
7204 v0.AddArg2(x, v1)
7205 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7206 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7207 v3.AuxInt = int64ToAuxInt(64)
7208 v2.AddArg2(v3, v1)
7209 v.AddArg2(v0, v2)
7210 return true
7211 }
7212 }
7213 func rewriteValueLOONG64_OpLsh16x64(v *Value) bool {
7214 v_1 := v.Args[1]
7215 v_0 := v.Args[0]
7216 b := v.Block
7217 typ := &b.Func.Config.Types
7218
7219
7220 for {
7221 t := v.Type
7222 x := v_0
7223 y := v_1
7224 v.reset(OpLOONG64MASKEQZ)
7225 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7226 v0.AddArg2(x, y)
7227 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7228 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7229 v2.AuxInt = int64ToAuxInt(64)
7230 v1.AddArg2(v2, y)
7231 v.AddArg2(v0, v1)
7232 return true
7233 }
7234 }
7235 func rewriteValueLOONG64_OpLsh16x8(v *Value) bool {
7236 v_1 := v.Args[1]
7237 v_0 := v.Args[0]
7238 b := v.Block
7239 typ := &b.Func.Config.Types
7240
7241
7242 for {
7243 t := v.Type
7244 x := v_0
7245 y := v_1
7246 v.reset(OpLOONG64MASKEQZ)
7247 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7248 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7249 v1.AddArg(y)
7250 v0.AddArg2(x, v1)
7251 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7252 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7253 v3.AuxInt = int64ToAuxInt(64)
7254 v2.AddArg2(v3, v1)
7255 v.AddArg2(v0, v2)
7256 return true
7257 }
7258 }
7259 func rewriteValueLOONG64_OpLsh32x16(v *Value) bool {
7260 v_1 := v.Args[1]
7261 v_0 := v.Args[0]
7262 b := v.Block
7263 typ := &b.Func.Config.Types
7264
7265
7266 for {
7267 t := v.Type
7268 x := v_0
7269 y := v_1
7270 v.reset(OpLOONG64MASKEQZ)
7271 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7272 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7273 v1.AddArg(y)
7274 v0.AddArg2(x, v1)
7275 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7276 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7277 v3.AuxInt = int64ToAuxInt(64)
7278 v2.AddArg2(v3, v1)
7279 v.AddArg2(v0, v2)
7280 return true
7281 }
7282 }
7283 func rewriteValueLOONG64_OpLsh32x32(v *Value) bool {
7284 v_1 := v.Args[1]
7285 v_0 := v.Args[0]
7286 b := v.Block
7287 typ := &b.Func.Config.Types
7288
7289
7290 for {
7291 t := v.Type
7292 x := v_0
7293 y := v_1
7294 v.reset(OpLOONG64MASKEQZ)
7295 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7296 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7297 v1.AddArg(y)
7298 v0.AddArg2(x, v1)
7299 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7300 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7301 v3.AuxInt = int64ToAuxInt(64)
7302 v2.AddArg2(v3, v1)
7303 v.AddArg2(v0, v2)
7304 return true
7305 }
7306 }
7307 func rewriteValueLOONG64_OpLsh32x64(v *Value) bool {
7308 v_1 := v.Args[1]
7309 v_0 := v.Args[0]
7310 b := v.Block
7311 typ := &b.Func.Config.Types
7312
7313
7314 for {
7315 t := v.Type
7316 x := v_0
7317 y := v_1
7318 v.reset(OpLOONG64MASKEQZ)
7319 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7320 v0.AddArg2(x, y)
7321 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7322 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7323 v2.AuxInt = int64ToAuxInt(64)
7324 v1.AddArg2(v2, y)
7325 v.AddArg2(v0, v1)
7326 return true
7327 }
7328 }
7329 func rewriteValueLOONG64_OpLsh32x8(v *Value) bool {
7330 v_1 := v.Args[1]
7331 v_0 := v.Args[0]
7332 b := v.Block
7333 typ := &b.Func.Config.Types
7334
7335
7336 for {
7337 t := v.Type
7338 x := v_0
7339 y := v_1
7340 v.reset(OpLOONG64MASKEQZ)
7341 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7342 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7343 v1.AddArg(y)
7344 v0.AddArg2(x, v1)
7345 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7346 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7347 v3.AuxInt = int64ToAuxInt(64)
7348 v2.AddArg2(v3, v1)
7349 v.AddArg2(v0, v2)
7350 return true
7351 }
7352 }
7353 func rewriteValueLOONG64_OpLsh64x16(v *Value) bool {
7354 v_1 := v.Args[1]
7355 v_0 := v.Args[0]
7356 b := v.Block
7357 typ := &b.Func.Config.Types
7358
7359
7360 for {
7361 t := v.Type
7362 x := v_0
7363 y := v_1
7364 v.reset(OpLOONG64MASKEQZ)
7365 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7366 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7367 v1.AddArg(y)
7368 v0.AddArg2(x, v1)
7369 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7370 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7371 v3.AuxInt = int64ToAuxInt(64)
7372 v2.AddArg2(v3, v1)
7373 v.AddArg2(v0, v2)
7374 return true
7375 }
7376 }
7377 func rewriteValueLOONG64_OpLsh64x32(v *Value) bool {
7378 v_1 := v.Args[1]
7379 v_0 := v.Args[0]
7380 b := v.Block
7381 typ := &b.Func.Config.Types
7382
7383
7384 for {
7385 t := v.Type
7386 x := v_0
7387 y := v_1
7388 v.reset(OpLOONG64MASKEQZ)
7389 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7390 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7391 v1.AddArg(y)
7392 v0.AddArg2(x, v1)
7393 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7394 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7395 v3.AuxInt = int64ToAuxInt(64)
7396 v2.AddArg2(v3, v1)
7397 v.AddArg2(v0, v2)
7398 return true
7399 }
7400 }
7401 func rewriteValueLOONG64_OpLsh64x64(v *Value) bool {
7402 v_1 := v.Args[1]
7403 v_0 := v.Args[0]
7404 b := v.Block
7405 typ := &b.Func.Config.Types
7406
7407
7408 for {
7409 t := v.Type
7410 x := v_0
7411 y := v_1
7412 v.reset(OpLOONG64MASKEQZ)
7413 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7414 v0.AddArg2(x, y)
7415 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7416 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7417 v2.AuxInt = int64ToAuxInt(64)
7418 v1.AddArg2(v2, y)
7419 v.AddArg2(v0, v1)
7420 return true
7421 }
7422 }
7423 func rewriteValueLOONG64_OpLsh64x8(v *Value) bool {
7424 v_1 := v.Args[1]
7425 v_0 := v.Args[0]
7426 b := v.Block
7427 typ := &b.Func.Config.Types
7428
7429
7430 for {
7431 t := v.Type
7432 x := v_0
7433 y := v_1
7434 v.reset(OpLOONG64MASKEQZ)
7435 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7436 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7437 v1.AddArg(y)
7438 v0.AddArg2(x, v1)
7439 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7440 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7441 v3.AuxInt = int64ToAuxInt(64)
7442 v2.AddArg2(v3, v1)
7443 v.AddArg2(v0, v2)
7444 return true
7445 }
7446 }
7447 func rewriteValueLOONG64_OpLsh8x16(v *Value) bool {
7448 v_1 := v.Args[1]
7449 v_0 := v.Args[0]
7450 b := v.Block
7451 typ := &b.Func.Config.Types
7452
7453
7454 for {
7455 t := v.Type
7456 x := v_0
7457 y := v_1
7458 v.reset(OpLOONG64MASKEQZ)
7459 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7460 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7461 v1.AddArg(y)
7462 v0.AddArg2(x, v1)
7463 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7464 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7465 v3.AuxInt = int64ToAuxInt(64)
7466 v2.AddArg2(v3, v1)
7467 v.AddArg2(v0, v2)
7468 return true
7469 }
7470 }
7471 func rewriteValueLOONG64_OpLsh8x32(v *Value) bool {
7472 v_1 := v.Args[1]
7473 v_0 := v.Args[0]
7474 b := v.Block
7475 typ := &b.Func.Config.Types
7476
7477
7478 for {
7479 t := v.Type
7480 x := v_0
7481 y := v_1
7482 v.reset(OpLOONG64MASKEQZ)
7483 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7484 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7485 v1.AddArg(y)
7486 v0.AddArg2(x, v1)
7487 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7488 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7489 v3.AuxInt = int64ToAuxInt(64)
7490 v2.AddArg2(v3, v1)
7491 v.AddArg2(v0, v2)
7492 return true
7493 }
7494 }
7495 func rewriteValueLOONG64_OpLsh8x64(v *Value) bool {
7496 v_1 := v.Args[1]
7497 v_0 := v.Args[0]
7498 b := v.Block
7499 typ := &b.Func.Config.Types
7500
7501
7502 for {
7503 t := v.Type
7504 x := v_0
7505 y := v_1
7506 v.reset(OpLOONG64MASKEQZ)
7507 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7508 v0.AddArg2(x, y)
7509 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7510 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7511 v2.AuxInt = int64ToAuxInt(64)
7512 v1.AddArg2(v2, y)
7513 v.AddArg2(v0, v1)
7514 return true
7515 }
7516 }
7517 func rewriteValueLOONG64_OpLsh8x8(v *Value) bool {
7518 v_1 := v.Args[1]
7519 v_0 := v.Args[0]
7520 b := v.Block
7521 typ := &b.Func.Config.Types
7522
7523
7524 for {
7525 t := v.Type
7526 x := v_0
7527 y := v_1
7528 v.reset(OpLOONG64MASKEQZ)
7529 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
7530 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7531 v1.AddArg(y)
7532 v0.AddArg2(x, v1)
7533 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
7534 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
7535 v3.AuxInt = int64ToAuxInt(64)
7536 v2.AddArg2(v3, v1)
7537 v.AddArg2(v0, v2)
7538 return true
7539 }
7540 }
7541 func rewriteValueLOONG64_OpMod16(v *Value) bool {
7542 v_1 := v.Args[1]
7543 v_0 := v.Args[0]
7544 b := v.Block
7545 typ := &b.Func.Config.Types
7546
7547
7548 for {
7549 x := v_0
7550 y := v_1
7551 v.reset(OpLOONG64REMV)
7552 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
7553 v0.AddArg(x)
7554 v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
7555 v1.AddArg(y)
7556 v.AddArg2(v0, v1)
7557 return true
7558 }
7559 }
7560 func rewriteValueLOONG64_OpMod16u(v *Value) bool {
7561 v_1 := v.Args[1]
7562 v_0 := v.Args[0]
7563 b := v.Block
7564 typ := &b.Func.Config.Types
7565
7566
7567 for {
7568 x := v_0
7569 y := v_1
7570 v.reset(OpLOONG64REMVU)
7571 v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7572 v0.AddArg(x)
7573 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7574 v1.AddArg(y)
7575 v.AddArg2(v0, v1)
7576 return true
7577 }
7578 }
7579 func rewriteValueLOONG64_OpMod32(v *Value) bool {
7580 v_1 := v.Args[1]
7581 v_0 := v.Args[0]
7582 b := v.Block
7583 typ := &b.Func.Config.Types
7584
7585
7586 for {
7587 x := v_0
7588 y := v_1
7589 v.reset(OpLOONG64REMV)
7590 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
7591 v0.AddArg(x)
7592 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
7593 v1.AddArg(y)
7594 v.AddArg2(v0, v1)
7595 return true
7596 }
7597 }
7598 func rewriteValueLOONG64_OpMod32u(v *Value) bool {
7599 v_1 := v.Args[1]
7600 v_0 := v.Args[0]
7601 b := v.Block
7602 typ := &b.Func.Config.Types
7603
7604
7605 for {
7606 x := v_0
7607 y := v_1
7608 v.reset(OpLOONG64REMVU)
7609 v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7610 v0.AddArg(x)
7611 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
7612 v1.AddArg(y)
7613 v.AddArg2(v0, v1)
7614 return true
7615 }
7616 }
7617 func rewriteValueLOONG64_OpMod64(v *Value) bool {
7618 v_1 := v.Args[1]
7619 v_0 := v.Args[0]
7620
7621
7622 for {
7623 x := v_0
7624 y := v_1
7625 v.reset(OpLOONG64REMV)
7626 v.AddArg2(x, y)
7627 return true
7628 }
7629 }
7630 func rewriteValueLOONG64_OpMod8(v *Value) bool {
7631 v_1 := v.Args[1]
7632 v_0 := v.Args[0]
7633 b := v.Block
7634 typ := &b.Func.Config.Types
7635
7636
7637 for {
7638 x := v_0
7639 y := v_1
7640 v.reset(OpLOONG64REMV)
7641 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
7642 v0.AddArg(x)
7643 v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
7644 v1.AddArg(y)
7645 v.AddArg2(v0, v1)
7646 return true
7647 }
7648 }
7649 func rewriteValueLOONG64_OpMod8u(v *Value) bool {
7650 v_1 := v.Args[1]
7651 v_0 := v.Args[0]
7652 b := v.Block
7653 typ := &b.Func.Config.Types
7654
7655
7656 for {
7657 x := v_0
7658 y := v_1
7659 v.reset(OpLOONG64REMVU)
7660 v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7661 v0.AddArg(x)
7662 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
7663 v1.AddArg(y)
7664 v.AddArg2(v0, v1)
7665 return true
7666 }
7667 }
7668 func rewriteValueLOONG64_OpMove(v *Value) bool {
7669 v_2 := v.Args[2]
7670 v_1 := v.Args[1]
7671 v_0 := v.Args[0]
7672 b := v.Block
7673 config := b.Func.Config
7674 typ := &b.Func.Config.Types
7675
7676
7677 for {
7678 if auxIntToInt64(v.AuxInt) != 0 {
7679 break
7680 }
7681 mem := v_2
7682 v.copyOf(mem)
7683 return true
7684 }
7685
7686
7687 for {
7688 if auxIntToInt64(v.AuxInt) != 1 {
7689 break
7690 }
7691 dst := v_0
7692 src := v_1
7693 mem := v_2
7694 v.reset(OpLOONG64MOVBstore)
7695 v0 := b.NewValue0(v.Pos, OpLOONG64MOVBUload, typ.UInt8)
7696 v0.AddArg2(src, mem)
7697 v.AddArg3(dst, v0, mem)
7698 return true
7699 }
7700
7701
7702 for {
7703 if auxIntToInt64(v.AuxInt) != 2 {
7704 break
7705 }
7706 dst := v_0
7707 src := v_1
7708 mem := v_2
7709 v.reset(OpLOONG64MOVHstore)
7710 v0 := b.NewValue0(v.Pos, OpLOONG64MOVHUload, typ.UInt16)
7711 v0.AddArg2(src, mem)
7712 v.AddArg3(dst, v0, mem)
7713 return true
7714 }
7715
7716
7717 for {
7718 if auxIntToInt64(v.AuxInt) != 3 {
7719 break
7720 }
7721 dst := v_0
7722 src := v_1
7723 mem := v_2
7724 v.reset(OpLOONG64MOVBstore)
7725 v.AuxInt = int32ToAuxInt(2)
7726 v0 := b.NewValue0(v.Pos, OpLOONG64MOVBUload, typ.UInt8)
7727 v0.AuxInt = int32ToAuxInt(2)
7728 v0.AddArg2(src, mem)
7729 v1 := b.NewValue0(v.Pos, OpLOONG64MOVHstore, types.TypeMem)
7730 v2 := b.NewValue0(v.Pos, OpLOONG64MOVHUload, typ.UInt16)
7731 v2.AddArg2(src, mem)
7732 v1.AddArg3(dst, v2, mem)
7733 v.AddArg3(dst, v0, v1)
7734 return true
7735 }
7736
7737
7738 for {
7739 if auxIntToInt64(v.AuxInt) != 4 {
7740 break
7741 }
7742 dst := v_0
7743 src := v_1
7744 mem := v_2
7745 v.reset(OpLOONG64MOVWstore)
7746 v0 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7747 v0.AddArg2(src, mem)
7748 v.AddArg3(dst, v0, mem)
7749 return true
7750 }
7751
7752
7753 for {
7754 if auxIntToInt64(v.AuxInt) != 5 {
7755 break
7756 }
7757 dst := v_0
7758 src := v_1
7759 mem := v_2
7760 v.reset(OpLOONG64MOVBstore)
7761 v.AuxInt = int32ToAuxInt(4)
7762 v0 := b.NewValue0(v.Pos, OpLOONG64MOVBUload, typ.UInt8)
7763 v0.AuxInt = int32ToAuxInt(4)
7764 v0.AddArg2(src, mem)
7765 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
7766 v2 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7767 v2.AddArg2(src, mem)
7768 v1.AddArg3(dst, v2, mem)
7769 v.AddArg3(dst, v0, v1)
7770 return true
7771 }
7772
7773
7774 for {
7775 if auxIntToInt64(v.AuxInt) != 6 {
7776 break
7777 }
7778 dst := v_0
7779 src := v_1
7780 mem := v_2
7781 v.reset(OpLOONG64MOVHstore)
7782 v.AuxInt = int32ToAuxInt(4)
7783 v0 := b.NewValue0(v.Pos, OpLOONG64MOVHUload, typ.UInt16)
7784 v0.AuxInt = int32ToAuxInt(4)
7785 v0.AddArg2(src, mem)
7786 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
7787 v2 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7788 v2.AddArg2(src, mem)
7789 v1.AddArg3(dst, v2, mem)
7790 v.AddArg3(dst, v0, v1)
7791 return true
7792 }
7793
7794
7795 for {
7796 if auxIntToInt64(v.AuxInt) != 7 {
7797 break
7798 }
7799 dst := v_0
7800 src := v_1
7801 mem := v_2
7802 v.reset(OpLOONG64MOVWstore)
7803 v.AuxInt = int32ToAuxInt(3)
7804 v0 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7805 v0.AuxInt = int32ToAuxInt(3)
7806 v0.AddArg2(src, mem)
7807 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
7808 v2 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7809 v2.AddArg2(src, mem)
7810 v1.AddArg3(dst, v2, mem)
7811 v.AddArg3(dst, v0, v1)
7812 return true
7813 }
7814
7815
7816 for {
7817 if auxIntToInt64(v.AuxInt) != 8 {
7818 break
7819 }
7820 dst := v_0
7821 src := v_1
7822 mem := v_2
7823 v.reset(OpLOONG64MOVVstore)
7824 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7825 v0.AddArg2(src, mem)
7826 v.AddArg3(dst, v0, mem)
7827 return true
7828 }
7829
7830
7831 for {
7832 if auxIntToInt64(v.AuxInt) != 9 {
7833 break
7834 }
7835 dst := v_0
7836 src := v_1
7837 mem := v_2
7838 v.reset(OpLOONG64MOVBstore)
7839 v.AuxInt = int32ToAuxInt(8)
7840 v0 := b.NewValue0(v.Pos, OpLOONG64MOVBUload, typ.UInt8)
7841 v0.AuxInt = int32ToAuxInt(8)
7842 v0.AddArg2(src, mem)
7843 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7844 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7845 v2.AddArg2(src, mem)
7846 v1.AddArg3(dst, v2, mem)
7847 v.AddArg3(dst, v0, v1)
7848 return true
7849 }
7850
7851
7852 for {
7853 if auxIntToInt64(v.AuxInt) != 10 {
7854 break
7855 }
7856 dst := v_0
7857 src := v_1
7858 mem := v_2
7859 v.reset(OpLOONG64MOVHstore)
7860 v.AuxInt = int32ToAuxInt(8)
7861 v0 := b.NewValue0(v.Pos, OpLOONG64MOVHUload, typ.UInt16)
7862 v0.AuxInt = int32ToAuxInt(8)
7863 v0.AddArg2(src, mem)
7864 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7865 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7866 v2.AddArg2(src, mem)
7867 v1.AddArg3(dst, v2, mem)
7868 v.AddArg3(dst, v0, v1)
7869 return true
7870 }
7871
7872
7873 for {
7874 if auxIntToInt64(v.AuxInt) != 11 {
7875 break
7876 }
7877 dst := v_0
7878 src := v_1
7879 mem := v_2
7880 v.reset(OpLOONG64MOVWstore)
7881 v.AuxInt = int32ToAuxInt(7)
7882 v0 := b.NewValue0(v.Pos, OpLOONG64MOVWload, typ.Int32)
7883 v0.AuxInt = int32ToAuxInt(7)
7884 v0.AddArg2(src, mem)
7885 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7886 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7887 v2.AddArg2(src, mem)
7888 v1.AddArg3(dst, v2, mem)
7889 v.AddArg3(dst, v0, v1)
7890 return true
7891 }
7892
7893
7894 for {
7895 if auxIntToInt64(v.AuxInt) != 12 {
7896 break
7897 }
7898 dst := v_0
7899 src := v_1
7900 mem := v_2
7901 v.reset(OpLOONG64MOVWstore)
7902 v.AuxInt = int32ToAuxInt(8)
7903 v0 := b.NewValue0(v.Pos, OpLOONG64MOVWUload, typ.UInt32)
7904 v0.AuxInt = int32ToAuxInt(8)
7905 v0.AddArg2(src, mem)
7906 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7907 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7908 v2.AddArg2(src, mem)
7909 v1.AddArg3(dst, v2, mem)
7910 v.AddArg3(dst, v0, v1)
7911 return true
7912 }
7913
7914
7915 for {
7916 if auxIntToInt64(v.AuxInt) != 13 {
7917 break
7918 }
7919 dst := v_0
7920 src := v_1
7921 mem := v_2
7922 v.reset(OpLOONG64MOVVstore)
7923 v.AuxInt = int32ToAuxInt(5)
7924 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7925 v0.AuxInt = int32ToAuxInt(5)
7926 v0.AddArg2(src, mem)
7927 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7928 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7929 v2.AddArg2(src, mem)
7930 v1.AddArg3(dst, v2, mem)
7931 v.AddArg3(dst, v0, v1)
7932 return true
7933 }
7934
7935
7936 for {
7937 if auxIntToInt64(v.AuxInt) != 14 {
7938 break
7939 }
7940 dst := v_0
7941 src := v_1
7942 mem := v_2
7943 v.reset(OpLOONG64MOVVstore)
7944 v.AuxInt = int32ToAuxInt(6)
7945 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7946 v0.AuxInt = int32ToAuxInt(6)
7947 v0.AddArg2(src, mem)
7948 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7949 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7950 v2.AddArg2(src, mem)
7951 v1.AddArg3(dst, v2, mem)
7952 v.AddArg3(dst, v0, v1)
7953 return true
7954 }
7955
7956
7957 for {
7958 if auxIntToInt64(v.AuxInt) != 15 {
7959 break
7960 }
7961 dst := v_0
7962 src := v_1
7963 mem := v_2
7964 v.reset(OpLOONG64MOVVstore)
7965 v.AuxInt = int32ToAuxInt(7)
7966 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7967 v0.AuxInt = int32ToAuxInt(7)
7968 v0.AddArg2(src, mem)
7969 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7970 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7971 v2.AddArg2(src, mem)
7972 v1.AddArg3(dst, v2, mem)
7973 v.AddArg3(dst, v0, v1)
7974 return true
7975 }
7976
7977
7978 for {
7979 if auxIntToInt64(v.AuxInt) != 16 {
7980 break
7981 }
7982 dst := v_0
7983 src := v_1
7984 mem := v_2
7985 v.reset(OpLOONG64MOVVstore)
7986 v.AuxInt = int32ToAuxInt(8)
7987 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7988 v0.AuxInt = int32ToAuxInt(8)
7989 v0.AddArg2(src, mem)
7990 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
7991 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVload, typ.UInt64)
7992 v2.AddArg2(src, mem)
7993 v1.AddArg3(dst, v2, mem)
7994 v.AddArg3(dst, v0, v1)
7995 return true
7996 }
7997
7998
7999
8000 for {
8001 s := auxIntToInt64(v.AuxInt)
8002 dst := v_0
8003 src := v_1
8004 mem := v_2
8005 if !(s%8 != 0 && s > 16) {
8006 break
8007 }
8008 v.reset(OpMove)
8009 v.AuxInt = int64ToAuxInt(s % 8)
8010 v0 := b.NewValue0(v.Pos, OpOffPtr, dst.Type)
8011 v0.AuxInt = int64ToAuxInt(s - s%8)
8012 v0.AddArg(dst)
8013 v1 := b.NewValue0(v.Pos, OpOffPtr, src.Type)
8014 v1.AuxInt = int64ToAuxInt(s - s%8)
8015 v1.AddArg(src)
8016 v2 := b.NewValue0(v.Pos, OpMove, types.TypeMem)
8017 v2.AuxInt = int64ToAuxInt(s - s%8)
8018 v2.AddArg3(dst, src, mem)
8019 v.AddArg3(v0, v1, v2)
8020 return true
8021 }
8022
8023
8024
8025 for {
8026 s := auxIntToInt64(v.AuxInt)
8027 dst := v_0
8028 src := v_1
8029 mem := v_2
8030 if !(s%8 == 0 && s > 16 && s <= 8*128 && !config.noDuffDevice && logLargeCopy(v, s)) {
8031 break
8032 }
8033 v.reset(OpLOONG64DUFFCOPY)
8034 v.AuxInt = int64ToAuxInt(16 * (128 - s/8))
8035 v.AddArg3(dst, src, mem)
8036 return true
8037 }
8038
8039
8040
8041 for {
8042 s := auxIntToInt64(v.AuxInt)
8043 dst := v_0
8044 src := v_1
8045 mem := v_2
8046 if !(s%8 == 0 && s > 1024 && logLargeCopy(v, s)) {
8047 break
8048 }
8049 v.reset(OpLOONG64LoweredMove)
8050 v0 := b.NewValue0(v.Pos, OpLOONG64ADDVconst, src.Type)
8051 v0.AuxInt = int64ToAuxInt(s - 8)
8052 v0.AddArg(src)
8053 v.AddArg4(dst, src, v0, mem)
8054 return true
8055 }
8056 return false
8057 }
8058 func rewriteValueLOONG64_OpNeq16(v *Value) bool {
8059 v_1 := v.Args[1]
8060 v_0 := v.Args[0]
8061 b := v.Block
8062 typ := &b.Func.Config.Types
8063
8064
8065 for {
8066 x := v_0
8067 y := v_1
8068 v.reset(OpLOONG64SGTU)
8069 v0 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
8070 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
8071 v1.AddArg(x)
8072 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8073 v2.AddArg(y)
8074 v0.AddArg2(v1, v2)
8075 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8076 v3.AuxInt = int64ToAuxInt(0)
8077 v.AddArg2(v0, v3)
8078 return true
8079 }
8080 }
8081 func rewriteValueLOONG64_OpNeq32(v *Value) bool {
8082 v_1 := v.Args[1]
8083 v_0 := v.Args[0]
8084 b := v.Block
8085 typ := &b.Func.Config.Types
8086
8087
8088 for {
8089 x := v_0
8090 y := v_1
8091 v.reset(OpLOONG64SGTU)
8092 v0 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
8093 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8094 v1.AddArg(x)
8095 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8096 v2.AddArg(y)
8097 v0.AddArg2(v1, v2)
8098 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8099 v3.AuxInt = int64ToAuxInt(0)
8100 v.AddArg2(v0, v3)
8101 return true
8102 }
8103 }
8104 func rewriteValueLOONG64_OpNeq32F(v *Value) bool {
8105 v_1 := v.Args[1]
8106 v_0 := v.Args[0]
8107 b := v.Block
8108
8109
8110 for {
8111 x := v_0
8112 y := v_1
8113 v.reset(OpLOONG64FPFlagFalse)
8114 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQF, types.TypeFlags)
8115 v0.AddArg2(x, y)
8116 v.AddArg(v0)
8117 return true
8118 }
8119 }
8120 func rewriteValueLOONG64_OpNeq64(v *Value) bool {
8121 v_1 := v.Args[1]
8122 v_0 := v.Args[0]
8123 b := v.Block
8124 typ := &b.Func.Config.Types
8125
8126
8127 for {
8128 x := v_0
8129 y := v_1
8130 v.reset(OpLOONG64SGTU)
8131 v0 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
8132 v0.AddArg2(x, y)
8133 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8134 v1.AuxInt = int64ToAuxInt(0)
8135 v.AddArg2(v0, v1)
8136 return true
8137 }
8138 }
8139 func rewriteValueLOONG64_OpNeq64F(v *Value) bool {
8140 v_1 := v.Args[1]
8141 v_0 := v.Args[0]
8142 b := v.Block
8143
8144
8145 for {
8146 x := v_0
8147 y := v_1
8148 v.reset(OpLOONG64FPFlagFalse)
8149 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQD, types.TypeFlags)
8150 v0.AddArg2(x, y)
8151 v.AddArg(v0)
8152 return true
8153 }
8154 }
8155 func rewriteValueLOONG64_OpNeq8(v *Value) bool {
8156 v_1 := v.Args[1]
8157 v_0 := v.Args[0]
8158 b := v.Block
8159 typ := &b.Func.Config.Types
8160
8161
8162 for {
8163 x := v_0
8164 y := v_1
8165 v.reset(OpLOONG64SGTU)
8166 v0 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
8167 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8168 v1.AddArg(x)
8169 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8170 v2.AddArg(y)
8171 v0.AddArg2(v1, v2)
8172 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8173 v3.AuxInt = int64ToAuxInt(0)
8174 v.AddArg2(v0, v3)
8175 return true
8176 }
8177 }
8178 func rewriteValueLOONG64_OpNeqPtr(v *Value) bool {
8179 v_1 := v.Args[1]
8180 v_0 := v.Args[0]
8181 b := v.Block
8182 typ := &b.Func.Config.Types
8183
8184
8185 for {
8186 x := v_0
8187 y := v_1
8188 v.reset(OpLOONG64SGTU)
8189 v0 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)
8190 v0.AddArg2(x, y)
8191 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8192 v1.AuxInt = int64ToAuxInt(0)
8193 v.AddArg2(v0, v1)
8194 return true
8195 }
8196 }
8197 func rewriteValueLOONG64_OpNot(v *Value) bool {
8198 v_0 := v.Args[0]
8199
8200
8201 for {
8202 x := v_0
8203 v.reset(OpLOONG64XORconst)
8204 v.AuxInt = int64ToAuxInt(1)
8205 v.AddArg(x)
8206 return true
8207 }
8208 }
8209 func rewriteValueLOONG64_OpOffPtr(v *Value) bool {
8210 v_0 := v.Args[0]
8211
8212
8213 for {
8214 off := auxIntToInt64(v.AuxInt)
8215 ptr := v_0
8216 if ptr.Op != OpSP {
8217 break
8218 }
8219 v.reset(OpLOONG64MOVVaddr)
8220 v.AuxInt = int32ToAuxInt(int32(off))
8221 v.AddArg(ptr)
8222 return true
8223 }
8224
8225
8226 for {
8227 off := auxIntToInt64(v.AuxInt)
8228 ptr := v_0
8229 v.reset(OpLOONG64ADDVconst)
8230 v.AuxInt = int64ToAuxInt(off)
8231 v.AddArg(ptr)
8232 return true
8233 }
8234 }
8235 func rewriteValueLOONG64_OpPanicBounds(v *Value) bool {
8236 v_2 := v.Args[2]
8237 v_1 := v.Args[1]
8238 v_0 := v.Args[0]
8239
8240
8241
8242 for {
8243 kind := auxIntToInt64(v.AuxInt)
8244 x := v_0
8245 y := v_1
8246 mem := v_2
8247 if !(boundsABI(kind) == 0) {
8248 break
8249 }
8250 v.reset(OpLOONG64LoweredPanicBoundsA)
8251 v.AuxInt = int64ToAuxInt(kind)
8252 v.AddArg3(x, y, mem)
8253 return true
8254 }
8255
8256
8257
8258 for {
8259 kind := auxIntToInt64(v.AuxInt)
8260 x := v_0
8261 y := v_1
8262 mem := v_2
8263 if !(boundsABI(kind) == 1) {
8264 break
8265 }
8266 v.reset(OpLOONG64LoweredPanicBoundsB)
8267 v.AuxInt = int64ToAuxInt(kind)
8268 v.AddArg3(x, y, mem)
8269 return true
8270 }
8271
8272
8273
8274 for {
8275 kind := auxIntToInt64(v.AuxInt)
8276 x := v_0
8277 y := v_1
8278 mem := v_2
8279 if !(boundsABI(kind) == 2) {
8280 break
8281 }
8282 v.reset(OpLOONG64LoweredPanicBoundsC)
8283 v.AuxInt = int64ToAuxInt(kind)
8284 v.AddArg3(x, y, mem)
8285 return true
8286 }
8287 return false
8288 }
8289 func rewriteValueLOONG64_OpPopCount16(v *Value) bool {
8290 v_0 := v.Args[0]
8291 b := v.Block
8292 typ := &b.Func.Config.Types
8293
8294
8295 for {
8296 t := v.Type
8297 x := v_0
8298 v.reset(OpLOONG64MOVWfpgp)
8299 v.Type = t
8300 v0 := b.NewValue0(v.Pos, OpLOONG64VPCNT16, typ.Float32)
8301 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWgpfp, typ.Float32)
8302 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
8303 v2.AddArg(x)
8304 v1.AddArg(v2)
8305 v0.AddArg(v1)
8306 v.AddArg(v0)
8307 return true
8308 }
8309 }
8310 func rewriteValueLOONG64_OpPopCount32(v *Value) bool {
8311 v_0 := v.Args[0]
8312 b := v.Block
8313 typ := &b.Func.Config.Types
8314
8315
8316 for {
8317 t := v.Type
8318 x := v_0
8319 v.reset(OpLOONG64MOVWfpgp)
8320 v.Type = t
8321 v0 := b.NewValue0(v.Pos, OpLOONG64VPCNT32, typ.Float32)
8322 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWgpfp, typ.Float32)
8323 v1.AddArg(x)
8324 v0.AddArg(v1)
8325 v.AddArg(v0)
8326 return true
8327 }
8328 }
8329 func rewriteValueLOONG64_OpPopCount64(v *Value) bool {
8330 v_0 := v.Args[0]
8331 b := v.Block
8332 typ := &b.Func.Config.Types
8333
8334
8335 for {
8336 t := v.Type
8337 x := v_0
8338 v.reset(OpLOONG64MOVVfpgp)
8339 v.Type = t
8340 v0 := b.NewValue0(v.Pos, OpLOONG64VPCNT64, typ.Float64)
8341 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVgpfp, typ.Float64)
8342 v1.AddArg(x)
8343 v0.AddArg(v1)
8344 v.AddArg(v0)
8345 return true
8346 }
8347 }
8348 func rewriteValueLOONG64_OpRotateLeft16(v *Value) bool {
8349 v_1 := v.Args[1]
8350 v_0 := v.Args[0]
8351 b := v.Block
8352 typ := &b.Func.Config.Types
8353
8354
8355 for {
8356 t := v.Type
8357 x := v_0
8358 if v_1.Op != OpLOONG64MOVVconst {
8359 break
8360 }
8361 c := auxIntToInt64(v_1.AuxInt)
8362 v.reset(OpOr16)
8363 v0 := b.NewValue0(v.Pos, OpLsh16x64, t)
8364 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8365 v1.AuxInt = int64ToAuxInt(c & 15)
8366 v0.AddArg2(x, v1)
8367 v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t)
8368 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8369 v3.AuxInt = int64ToAuxInt(-c & 15)
8370 v2.AddArg2(x, v3)
8371 v.AddArg2(v0, v2)
8372 return true
8373 }
8374
8375
8376 for {
8377 t := v.Type
8378 x := v_0
8379 y := v_1
8380 v.reset(OpLOONG64ROTR)
8381 v.Type = t
8382 v0 := b.NewValue0(v.Pos, OpLOONG64OR, typ.UInt32)
8383 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
8384 v1.AddArg(x)
8385 v2 := b.NewValue0(v.Pos, OpLOONG64SLLVconst, t)
8386 v2.AuxInt = int64ToAuxInt(16)
8387 v2.AddArg(v1)
8388 v0.AddArg2(v1, v2)
8389 v3 := b.NewValue0(v.Pos, OpLOONG64NEGV, typ.Int64)
8390 v3.AddArg(y)
8391 v.AddArg2(v0, v3)
8392 return true
8393 }
8394 }
8395 func rewriteValueLOONG64_OpRotateLeft32(v *Value) bool {
8396 v_1 := v.Args[1]
8397 v_0 := v.Args[0]
8398 b := v.Block
8399
8400
8401 for {
8402 x := v_0
8403 y := v_1
8404 v.reset(OpLOONG64ROTR)
8405 v0 := b.NewValue0(v.Pos, OpLOONG64NEGV, y.Type)
8406 v0.AddArg(y)
8407 v.AddArg2(x, v0)
8408 return true
8409 }
8410 }
8411 func rewriteValueLOONG64_OpRotateLeft64(v *Value) bool {
8412 v_1 := v.Args[1]
8413 v_0 := v.Args[0]
8414 b := v.Block
8415
8416
8417 for {
8418 x := v_0
8419 y := v_1
8420 v.reset(OpLOONG64ROTRV)
8421 v0 := b.NewValue0(v.Pos, OpLOONG64NEGV, y.Type)
8422 v0.AddArg(y)
8423 v.AddArg2(x, v0)
8424 return true
8425 }
8426 }
8427 func rewriteValueLOONG64_OpRotateLeft8(v *Value) bool {
8428 v_1 := v.Args[1]
8429 v_0 := v.Args[0]
8430 b := v.Block
8431 typ := &b.Func.Config.Types
8432
8433
8434 for {
8435 t := v.Type
8436 x := v_0
8437 if v_1.Op != OpLOONG64MOVVconst {
8438 break
8439 }
8440 c := auxIntToInt64(v_1.AuxInt)
8441 v.reset(OpOr8)
8442 v0 := b.NewValue0(v.Pos, OpLsh8x64, t)
8443 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8444 v1.AuxInt = int64ToAuxInt(c & 7)
8445 v0.AddArg2(x, v1)
8446 v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t)
8447 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8448 v3.AuxInt = int64ToAuxInt(-c & 7)
8449 v2.AddArg2(x, v3)
8450 v.AddArg2(v0, v2)
8451 return true
8452 }
8453
8454
8455 for {
8456 t := v.Type
8457 x := v_0
8458 y := v_1
8459 v.reset(OpLOONG64OR)
8460 v.Type = t
8461 v0 := b.NewValue0(v.Pos, OpLOONG64SLLV, t)
8462 v1 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.Int64)
8463 v1.AuxInt = int64ToAuxInt(7)
8464 v1.AddArg(y)
8465 v0.AddArg2(x, v1)
8466 v2 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8467 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8468 v3.AddArg(x)
8469 v4 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.Int64)
8470 v4.AuxInt = int64ToAuxInt(7)
8471 v5 := b.NewValue0(v.Pos, OpLOONG64NEGV, typ.Int64)
8472 v5.AddArg(y)
8473 v4.AddArg(v5)
8474 v2.AddArg2(v3, v4)
8475 v.AddArg2(v0, v2)
8476 return true
8477 }
8478 }
8479 func rewriteValueLOONG64_OpRsh16Ux16(v *Value) bool {
8480 v_1 := v.Args[1]
8481 v_0 := v.Args[0]
8482 b := v.Block
8483 typ := &b.Func.Config.Types
8484
8485
8486 for {
8487 t := v.Type
8488 x := v_0
8489 y := v_1
8490 v.reset(OpLOONG64MASKEQZ)
8491 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8492 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8493 v1.AddArg(x)
8494 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8495 v2.AddArg(y)
8496 v0.AddArg2(v1, v2)
8497 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8498 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8499 v4.AuxInt = int64ToAuxInt(64)
8500 v3.AddArg2(v4, v2)
8501 v.AddArg2(v0, v3)
8502 return true
8503 }
8504 }
8505 func rewriteValueLOONG64_OpRsh16Ux32(v *Value) bool {
8506 v_1 := v.Args[1]
8507 v_0 := v.Args[0]
8508 b := v.Block
8509 typ := &b.Func.Config.Types
8510
8511
8512 for {
8513 t := v.Type
8514 x := v_0
8515 y := v_1
8516 v.reset(OpLOONG64MASKEQZ)
8517 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8518 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8519 v1.AddArg(x)
8520 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8521 v2.AddArg(y)
8522 v0.AddArg2(v1, v2)
8523 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8524 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8525 v4.AuxInt = int64ToAuxInt(64)
8526 v3.AddArg2(v4, v2)
8527 v.AddArg2(v0, v3)
8528 return true
8529 }
8530 }
8531 func rewriteValueLOONG64_OpRsh16Ux64(v *Value) bool {
8532 v_1 := v.Args[1]
8533 v_0 := v.Args[0]
8534 b := v.Block
8535 typ := &b.Func.Config.Types
8536
8537
8538 for {
8539 t := v.Type
8540 x := v_0
8541 y := v_1
8542 v.reset(OpLOONG64MASKEQZ)
8543 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8544 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8545 v1.AddArg(x)
8546 v0.AddArg2(v1, y)
8547 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8548 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8549 v3.AuxInt = int64ToAuxInt(64)
8550 v2.AddArg2(v3, y)
8551 v.AddArg2(v0, v2)
8552 return true
8553 }
8554 }
8555 func rewriteValueLOONG64_OpRsh16Ux8(v *Value) bool {
8556 v_1 := v.Args[1]
8557 v_0 := v.Args[0]
8558 b := v.Block
8559 typ := &b.Func.Config.Types
8560
8561
8562 for {
8563 t := v.Type
8564 x := v_0
8565 y := v_1
8566 v.reset(OpLOONG64MASKEQZ)
8567 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8568 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8569 v1.AddArg(x)
8570 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8571 v2.AddArg(y)
8572 v0.AddArg2(v1, v2)
8573 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8574 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8575 v4.AuxInt = int64ToAuxInt(64)
8576 v3.AddArg2(v4, v2)
8577 v.AddArg2(v0, v3)
8578 return true
8579 }
8580 }
8581 func rewriteValueLOONG64_OpRsh16x16(v *Value) bool {
8582 v_1 := v.Args[1]
8583 v_0 := v.Args[0]
8584 b := v.Block
8585 typ := &b.Func.Config.Types
8586
8587
8588 for {
8589 t := v.Type
8590 x := v_0
8591 y := v_1
8592 v.reset(OpLOONG64SRAV)
8593 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
8594 v0.AddArg(x)
8595 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8596 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8597 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8598 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8599 v4.AddArg(y)
8600 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8601 v5.AuxInt = int64ToAuxInt(63)
8602 v3.AddArg2(v4, v5)
8603 v2.AddArg(v3)
8604 v1.AddArg2(v2, v4)
8605 v.AddArg2(v0, v1)
8606 return true
8607 }
8608 }
8609 func rewriteValueLOONG64_OpRsh16x32(v *Value) bool {
8610 v_1 := v.Args[1]
8611 v_0 := v.Args[0]
8612 b := v.Block
8613 typ := &b.Func.Config.Types
8614
8615
8616 for {
8617 t := v.Type
8618 x := v_0
8619 y := v_1
8620 v.reset(OpLOONG64SRAV)
8621 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
8622 v0.AddArg(x)
8623 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8624 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8625 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8626 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8627 v4.AddArg(y)
8628 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8629 v5.AuxInt = int64ToAuxInt(63)
8630 v3.AddArg2(v4, v5)
8631 v2.AddArg(v3)
8632 v1.AddArg2(v2, v4)
8633 v.AddArg2(v0, v1)
8634 return true
8635 }
8636 }
8637 func rewriteValueLOONG64_OpRsh16x64(v *Value) bool {
8638 v_1 := v.Args[1]
8639 v_0 := v.Args[0]
8640 b := v.Block
8641 typ := &b.Func.Config.Types
8642
8643
8644 for {
8645 t := v.Type
8646 x := v_0
8647 y := v_1
8648 v.reset(OpLOONG64SRAV)
8649 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
8650 v0.AddArg(x)
8651 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8652 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8653 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8654 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8655 v4.AuxInt = int64ToAuxInt(63)
8656 v3.AddArg2(y, v4)
8657 v2.AddArg(v3)
8658 v1.AddArg2(v2, y)
8659 v.AddArg2(v0, v1)
8660 return true
8661 }
8662 }
8663 func rewriteValueLOONG64_OpRsh16x8(v *Value) bool {
8664 v_1 := v.Args[1]
8665 v_0 := v.Args[0]
8666 b := v.Block
8667 typ := &b.Func.Config.Types
8668
8669
8670 for {
8671 t := v.Type
8672 x := v_0
8673 y := v_1
8674 v.reset(OpLOONG64SRAV)
8675 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
8676 v0.AddArg(x)
8677 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8678 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8679 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8680 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8681 v4.AddArg(y)
8682 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8683 v5.AuxInt = int64ToAuxInt(63)
8684 v3.AddArg2(v4, v5)
8685 v2.AddArg(v3)
8686 v1.AddArg2(v2, v4)
8687 v.AddArg2(v0, v1)
8688 return true
8689 }
8690 }
8691 func rewriteValueLOONG64_OpRsh32Ux16(v *Value) bool {
8692 v_1 := v.Args[1]
8693 v_0 := v.Args[0]
8694 b := v.Block
8695 typ := &b.Func.Config.Types
8696
8697
8698 for {
8699 t := v.Type
8700 x := v_0
8701 y := v_1
8702 v.reset(OpLOONG64MASKEQZ)
8703 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8704 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8705 v1.AddArg(x)
8706 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8707 v2.AddArg(y)
8708 v0.AddArg2(v1, v2)
8709 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8710 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8711 v4.AuxInt = int64ToAuxInt(64)
8712 v3.AddArg2(v4, v2)
8713 v.AddArg2(v0, v3)
8714 return true
8715 }
8716 }
8717 func rewriteValueLOONG64_OpRsh32Ux32(v *Value) bool {
8718 v_1 := v.Args[1]
8719 v_0 := v.Args[0]
8720 b := v.Block
8721 typ := &b.Func.Config.Types
8722
8723
8724 for {
8725 t := v.Type
8726 x := v_0
8727 y := v_1
8728 v.reset(OpLOONG64MASKEQZ)
8729 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8730 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8731 v1.AddArg(x)
8732 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8733 v2.AddArg(y)
8734 v0.AddArg2(v1, v2)
8735 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8736 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8737 v4.AuxInt = int64ToAuxInt(64)
8738 v3.AddArg2(v4, v2)
8739 v.AddArg2(v0, v3)
8740 return true
8741 }
8742 }
8743 func rewriteValueLOONG64_OpRsh32Ux64(v *Value) bool {
8744 v_1 := v.Args[1]
8745 v_0 := v.Args[0]
8746 b := v.Block
8747 typ := &b.Func.Config.Types
8748
8749
8750 for {
8751 t := v.Type
8752 x := v_0
8753 y := v_1
8754 v.reset(OpLOONG64MASKEQZ)
8755 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8756 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8757 v1.AddArg(x)
8758 v0.AddArg2(v1, y)
8759 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8760 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8761 v3.AuxInt = int64ToAuxInt(64)
8762 v2.AddArg2(v3, y)
8763 v.AddArg2(v0, v2)
8764 return true
8765 }
8766 }
8767 func rewriteValueLOONG64_OpRsh32Ux8(v *Value) bool {
8768 v_1 := v.Args[1]
8769 v_0 := v.Args[0]
8770 b := v.Block
8771 typ := &b.Func.Config.Types
8772
8773
8774 for {
8775 t := v.Type
8776 x := v_0
8777 y := v_1
8778 v.reset(OpLOONG64MASKEQZ)
8779 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8780 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8781 v1.AddArg(x)
8782 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8783 v2.AddArg(y)
8784 v0.AddArg2(v1, v2)
8785 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8786 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8787 v4.AuxInt = int64ToAuxInt(64)
8788 v3.AddArg2(v4, v2)
8789 v.AddArg2(v0, v3)
8790 return true
8791 }
8792 }
8793 func rewriteValueLOONG64_OpRsh32x16(v *Value) bool {
8794 v_1 := v.Args[1]
8795 v_0 := v.Args[0]
8796 b := v.Block
8797 typ := &b.Func.Config.Types
8798
8799
8800 for {
8801 t := v.Type
8802 x := v_0
8803 y := v_1
8804 v.reset(OpLOONG64SRAV)
8805 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
8806 v0.AddArg(x)
8807 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8808 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8809 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8810 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8811 v4.AddArg(y)
8812 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8813 v5.AuxInt = int64ToAuxInt(63)
8814 v3.AddArg2(v4, v5)
8815 v2.AddArg(v3)
8816 v1.AddArg2(v2, v4)
8817 v.AddArg2(v0, v1)
8818 return true
8819 }
8820 }
8821 func rewriteValueLOONG64_OpRsh32x32(v *Value) bool {
8822 v_1 := v.Args[1]
8823 v_0 := v.Args[0]
8824 b := v.Block
8825 typ := &b.Func.Config.Types
8826
8827
8828 for {
8829 t := v.Type
8830 x := v_0
8831 y := v_1
8832 v.reset(OpLOONG64SRAV)
8833 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
8834 v0.AddArg(x)
8835 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8836 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8837 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8838 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8839 v4.AddArg(y)
8840 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8841 v5.AuxInt = int64ToAuxInt(63)
8842 v3.AddArg2(v4, v5)
8843 v2.AddArg(v3)
8844 v1.AddArg2(v2, v4)
8845 v.AddArg2(v0, v1)
8846 return true
8847 }
8848 }
8849 func rewriteValueLOONG64_OpRsh32x64(v *Value) bool {
8850 v_1 := v.Args[1]
8851 v_0 := v.Args[0]
8852 b := v.Block
8853 typ := &b.Func.Config.Types
8854
8855
8856 for {
8857 t := v.Type
8858 x := v_0
8859 y := v_1
8860 v.reset(OpLOONG64SRAV)
8861 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
8862 v0.AddArg(x)
8863 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8864 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8865 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8866 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8867 v4.AuxInt = int64ToAuxInt(63)
8868 v3.AddArg2(y, v4)
8869 v2.AddArg(v3)
8870 v1.AddArg2(v2, y)
8871 v.AddArg2(v0, v1)
8872 return true
8873 }
8874 }
8875 func rewriteValueLOONG64_OpRsh32x8(v *Value) bool {
8876 v_1 := v.Args[1]
8877 v_0 := v.Args[0]
8878 b := v.Block
8879 typ := &b.Func.Config.Types
8880
8881
8882 for {
8883 t := v.Type
8884 x := v_0
8885 y := v_1
8886 v.reset(OpLOONG64SRAV)
8887 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
8888 v0.AddArg(x)
8889 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
8890 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
8891 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8892 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8893 v4.AddArg(y)
8894 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8895 v5.AuxInt = int64ToAuxInt(63)
8896 v3.AddArg2(v4, v5)
8897 v2.AddArg(v3)
8898 v1.AddArg2(v2, v4)
8899 v.AddArg2(v0, v1)
8900 return true
8901 }
8902 }
8903 func rewriteValueLOONG64_OpRsh64Ux16(v *Value) bool {
8904 v_1 := v.Args[1]
8905 v_0 := v.Args[0]
8906 b := v.Block
8907 typ := &b.Func.Config.Types
8908
8909
8910 for {
8911 t := v.Type
8912 x := v_0
8913 y := v_1
8914 v.reset(OpLOONG64MASKEQZ)
8915 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8916 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
8917 v1.AddArg(y)
8918 v0.AddArg2(x, v1)
8919 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8920 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8921 v3.AuxInt = int64ToAuxInt(64)
8922 v2.AddArg2(v3, v1)
8923 v.AddArg2(v0, v2)
8924 return true
8925 }
8926 }
8927 func rewriteValueLOONG64_OpRsh64Ux32(v *Value) bool {
8928 v_1 := v.Args[1]
8929 v_0 := v.Args[0]
8930 b := v.Block
8931 typ := &b.Func.Config.Types
8932
8933
8934 for {
8935 t := v.Type
8936 x := v_0
8937 y := v_1
8938 v.reset(OpLOONG64MASKEQZ)
8939 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8940 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8941 v1.AddArg(y)
8942 v0.AddArg2(x, v1)
8943 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8944 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8945 v3.AuxInt = int64ToAuxInt(64)
8946 v2.AddArg2(v3, v1)
8947 v.AddArg2(v0, v2)
8948 return true
8949 }
8950 }
8951 func rewriteValueLOONG64_OpRsh64Ux64(v *Value) bool {
8952 v_1 := v.Args[1]
8953 v_0 := v.Args[0]
8954 b := v.Block
8955 typ := &b.Func.Config.Types
8956
8957
8958 for {
8959 t := v.Type
8960 x := v_0
8961 y := v_1
8962 v.reset(OpLOONG64MASKEQZ)
8963 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8964 v0.AddArg2(x, y)
8965 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8966 v2 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8967 v2.AuxInt = int64ToAuxInt(64)
8968 v1.AddArg2(v2, y)
8969 v.AddArg2(v0, v1)
8970 return true
8971 }
8972 }
8973 func rewriteValueLOONG64_OpRsh64Ux8(v *Value) bool {
8974 v_1 := v.Args[1]
8975 v_0 := v.Args[0]
8976 b := v.Block
8977 typ := &b.Func.Config.Types
8978
8979
8980 for {
8981 t := v.Type
8982 x := v_0
8983 y := v_1
8984 v.reset(OpLOONG64MASKEQZ)
8985 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
8986 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
8987 v1.AddArg(y)
8988 v0.AddArg2(x, v1)
8989 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
8990 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
8991 v3.AuxInt = int64ToAuxInt(64)
8992 v2.AddArg2(v3, v1)
8993 v.AddArg2(v0, v2)
8994 return true
8995 }
8996 }
8997 func rewriteValueLOONG64_OpRsh64x16(v *Value) bool {
8998 v_1 := v.Args[1]
8999 v_0 := v.Args[0]
9000 b := v.Block
9001 typ := &b.Func.Config.Types
9002
9003
9004 for {
9005 t := v.Type
9006 x := v_0
9007 y := v_1
9008 v.reset(OpLOONG64SRAV)
9009 v0 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9010 v1 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9011 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9012 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
9013 v3.AddArg(y)
9014 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9015 v4.AuxInt = int64ToAuxInt(63)
9016 v2.AddArg2(v3, v4)
9017 v1.AddArg(v2)
9018 v0.AddArg2(v1, v3)
9019 v.AddArg2(x, v0)
9020 return true
9021 }
9022 }
9023 func rewriteValueLOONG64_OpRsh64x32(v *Value) bool {
9024 v_1 := v.Args[1]
9025 v_0 := v.Args[0]
9026 b := v.Block
9027 typ := &b.Func.Config.Types
9028
9029
9030 for {
9031 t := v.Type
9032 x := v_0
9033 y := v_1
9034 v.reset(OpLOONG64SRAV)
9035 v0 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9036 v1 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9037 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9038 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
9039 v3.AddArg(y)
9040 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9041 v4.AuxInt = int64ToAuxInt(63)
9042 v2.AddArg2(v3, v4)
9043 v1.AddArg(v2)
9044 v0.AddArg2(v1, v3)
9045 v.AddArg2(x, v0)
9046 return true
9047 }
9048 }
9049 func rewriteValueLOONG64_OpRsh64x64(v *Value) bool {
9050 v_1 := v.Args[1]
9051 v_0 := v.Args[0]
9052 b := v.Block
9053 typ := &b.Func.Config.Types
9054
9055
9056 for {
9057 t := v.Type
9058 x := v_0
9059 y := v_1
9060 v.reset(OpLOONG64SRAV)
9061 v0 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9062 v1 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9063 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9064 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9065 v3.AuxInt = int64ToAuxInt(63)
9066 v2.AddArg2(y, v3)
9067 v1.AddArg(v2)
9068 v0.AddArg2(v1, y)
9069 v.AddArg2(x, v0)
9070 return true
9071 }
9072 }
9073 func rewriteValueLOONG64_OpRsh64x8(v *Value) bool {
9074 v_1 := v.Args[1]
9075 v_0 := v.Args[0]
9076 b := v.Block
9077 typ := &b.Func.Config.Types
9078
9079
9080 for {
9081 t := v.Type
9082 x := v_0
9083 y := v_1
9084 v.reset(OpLOONG64SRAV)
9085 v0 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9086 v1 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9087 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9088 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9089 v3.AddArg(y)
9090 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9091 v4.AuxInt = int64ToAuxInt(63)
9092 v2.AddArg2(v3, v4)
9093 v1.AddArg(v2)
9094 v0.AddArg2(v1, v3)
9095 v.AddArg2(x, v0)
9096 return true
9097 }
9098 }
9099 func rewriteValueLOONG64_OpRsh8Ux16(v *Value) bool {
9100 v_1 := v.Args[1]
9101 v_0 := v.Args[0]
9102 b := v.Block
9103 typ := &b.Func.Config.Types
9104
9105
9106 for {
9107 t := v.Type
9108 x := v_0
9109 y := v_1
9110 v.reset(OpLOONG64MASKEQZ)
9111 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
9112 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9113 v1.AddArg(x)
9114 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
9115 v2.AddArg(y)
9116 v0.AddArg2(v1, v2)
9117 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9118 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9119 v4.AuxInt = int64ToAuxInt(64)
9120 v3.AddArg2(v4, v2)
9121 v.AddArg2(v0, v3)
9122 return true
9123 }
9124 }
9125 func rewriteValueLOONG64_OpRsh8Ux32(v *Value) bool {
9126 v_1 := v.Args[1]
9127 v_0 := v.Args[0]
9128 b := v.Block
9129 typ := &b.Func.Config.Types
9130
9131
9132 for {
9133 t := v.Type
9134 x := v_0
9135 y := v_1
9136 v.reset(OpLOONG64MASKEQZ)
9137 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
9138 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9139 v1.AddArg(x)
9140 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
9141 v2.AddArg(y)
9142 v0.AddArg2(v1, v2)
9143 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9144 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9145 v4.AuxInt = int64ToAuxInt(64)
9146 v3.AddArg2(v4, v2)
9147 v.AddArg2(v0, v3)
9148 return true
9149 }
9150 }
9151 func rewriteValueLOONG64_OpRsh8Ux64(v *Value) bool {
9152 v_1 := v.Args[1]
9153 v_0 := v.Args[0]
9154 b := v.Block
9155 typ := &b.Func.Config.Types
9156
9157
9158 for {
9159 t := v.Type
9160 x := v_0
9161 y := v_1
9162 v.reset(OpLOONG64MASKEQZ)
9163 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
9164 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9165 v1.AddArg(x)
9166 v0.AddArg2(v1, y)
9167 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9168 v3 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9169 v3.AuxInt = int64ToAuxInt(64)
9170 v2.AddArg2(v3, y)
9171 v.AddArg2(v0, v2)
9172 return true
9173 }
9174 }
9175 func rewriteValueLOONG64_OpRsh8Ux8(v *Value) bool {
9176 v_1 := v.Args[1]
9177 v_0 := v.Args[0]
9178 b := v.Block
9179 typ := &b.Func.Config.Types
9180
9181
9182 for {
9183 t := v.Type
9184 x := v_0
9185 y := v_1
9186 v.reset(OpLOONG64MASKEQZ)
9187 v0 := b.NewValue0(v.Pos, OpLOONG64SRLV, t)
9188 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9189 v1.AddArg(x)
9190 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9191 v2.AddArg(y)
9192 v0.AddArg2(v1, v2)
9193 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9194 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9195 v4.AuxInt = int64ToAuxInt(64)
9196 v3.AddArg2(v4, v2)
9197 v.AddArg2(v0, v3)
9198 return true
9199 }
9200 }
9201 func rewriteValueLOONG64_OpRsh8x16(v *Value) bool {
9202 v_1 := v.Args[1]
9203 v_0 := v.Args[0]
9204 b := v.Block
9205 typ := &b.Func.Config.Types
9206
9207
9208 for {
9209 t := v.Type
9210 x := v_0
9211 y := v_1
9212 v.reset(OpLOONG64SRAV)
9213 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
9214 v0.AddArg(x)
9215 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9216 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9217 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9218 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
9219 v4.AddArg(y)
9220 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9221 v5.AuxInt = int64ToAuxInt(63)
9222 v3.AddArg2(v4, v5)
9223 v2.AddArg(v3)
9224 v1.AddArg2(v2, v4)
9225 v.AddArg2(v0, v1)
9226 return true
9227 }
9228 }
9229 func rewriteValueLOONG64_OpRsh8x32(v *Value) bool {
9230 v_1 := v.Args[1]
9231 v_0 := v.Args[0]
9232 b := v.Block
9233 typ := &b.Func.Config.Types
9234
9235
9236 for {
9237 t := v.Type
9238 x := v_0
9239 y := v_1
9240 v.reset(OpLOONG64SRAV)
9241 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
9242 v0.AddArg(x)
9243 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9244 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9245 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9246 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
9247 v4.AddArg(y)
9248 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9249 v5.AuxInt = int64ToAuxInt(63)
9250 v3.AddArg2(v4, v5)
9251 v2.AddArg(v3)
9252 v1.AddArg2(v2, v4)
9253 v.AddArg2(v0, v1)
9254 return true
9255 }
9256 }
9257 func rewriteValueLOONG64_OpRsh8x64(v *Value) bool {
9258 v_1 := v.Args[1]
9259 v_0 := v.Args[0]
9260 b := v.Block
9261 typ := &b.Func.Config.Types
9262
9263
9264 for {
9265 t := v.Type
9266 x := v_0
9267 y := v_1
9268 v.reset(OpLOONG64SRAV)
9269 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
9270 v0.AddArg(x)
9271 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9272 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9273 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9274 v4 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9275 v4.AuxInt = int64ToAuxInt(63)
9276 v3.AddArg2(y, v4)
9277 v2.AddArg(v3)
9278 v1.AddArg2(v2, y)
9279 v.AddArg2(v0, v1)
9280 return true
9281 }
9282 }
9283 func rewriteValueLOONG64_OpRsh8x8(v *Value) bool {
9284 v_1 := v.Args[1]
9285 v_0 := v.Args[0]
9286 b := v.Block
9287 typ := &b.Func.Config.Types
9288
9289
9290 for {
9291 t := v.Type
9292 x := v_0
9293 y := v_1
9294 v.reset(OpLOONG64SRAV)
9295 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
9296 v0.AddArg(x)
9297 v1 := b.NewValue0(v.Pos, OpLOONG64OR, t)
9298 v2 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9299 v3 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)
9300 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
9301 v4.AddArg(y)
9302 v5 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9303 v5.AuxInt = int64ToAuxInt(63)
9304 v3.AddArg2(v4, v5)
9305 v2.AddArg(v3)
9306 v1.AddArg2(v2, v4)
9307 v.AddArg2(v0, v1)
9308 return true
9309 }
9310 }
9311 func rewriteValueLOONG64_OpSelect0(v *Value) bool {
9312 v_0 := v.Args[0]
9313 b := v.Block
9314
9315
9316 for {
9317 if v_0.Op != OpMul64uhilo {
9318 break
9319 }
9320 y := v_0.Args[1]
9321 x := v_0.Args[0]
9322 v.reset(OpLOONG64MULHVU)
9323 v.AddArg2(x, y)
9324 return true
9325 }
9326
9327
9328 for {
9329 if v_0.Op != OpMul64uover {
9330 break
9331 }
9332 y := v_0.Args[1]
9333 x := v_0.Args[0]
9334 v.reset(OpLOONG64MULV)
9335 v.AddArg2(x, y)
9336 return true
9337 }
9338
9339
9340 for {
9341 t := v.Type
9342 if v_0.Op != OpAdd64carry {
9343 break
9344 }
9345 c := v_0.Args[2]
9346 x := v_0.Args[0]
9347 y := v_0.Args[1]
9348 v.reset(OpLOONG64ADDV)
9349 v0 := b.NewValue0(v.Pos, OpLOONG64ADDV, t)
9350 v0.AddArg2(x, y)
9351 v.AddArg2(v0, c)
9352 return true
9353 }
9354
9355
9356 for {
9357 t := v.Type
9358 if v_0.Op != OpSub64borrow {
9359 break
9360 }
9361 c := v_0.Args[2]
9362 x := v_0.Args[0]
9363 y := v_0.Args[1]
9364 v.reset(OpLOONG64SUBV)
9365 v0 := b.NewValue0(v.Pos, OpLOONG64SUBV, t)
9366 v0.AddArg2(x, y)
9367 v.AddArg2(v0, c)
9368 return true
9369 }
9370 return false
9371 }
9372 func rewriteValueLOONG64_OpSelect1(v *Value) bool {
9373 v_0 := v.Args[0]
9374 b := v.Block
9375 typ := &b.Func.Config.Types
9376
9377
9378 for {
9379 if v_0.Op != OpMul64uhilo {
9380 break
9381 }
9382 y := v_0.Args[1]
9383 x := v_0.Args[0]
9384 v.reset(OpLOONG64MULV)
9385 v.AddArg2(x, y)
9386 return true
9387 }
9388
9389
9390 for {
9391 if v_0.Op != OpMul64uover {
9392 break
9393 }
9394 y := v_0.Args[1]
9395 x := v_0.Args[0]
9396 v.reset(OpLOONG64SGTU)
9397 v.Type = typ.Bool
9398 v0 := b.NewValue0(v.Pos, OpLOONG64MULHVU, typ.UInt64)
9399 v0.AddArg2(x, y)
9400 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9401 v1.AuxInt = int64ToAuxInt(0)
9402 v.AddArg2(v0, v1)
9403 return true
9404 }
9405
9406
9407 for {
9408 t := v.Type
9409 if v_0.Op != OpAdd64carry {
9410 break
9411 }
9412 c := v_0.Args[2]
9413 x := v_0.Args[0]
9414 y := v_0.Args[1]
9415 v.reset(OpLOONG64OR)
9416 v0 := b.NewValue0(v.Pos, OpLOONG64SGTU, t)
9417 s := b.NewValue0(v.Pos, OpLOONG64ADDV, t)
9418 s.AddArg2(x, y)
9419 v0.AddArg2(x, s)
9420 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, t)
9421 v3 := b.NewValue0(v.Pos, OpLOONG64ADDV, t)
9422 v3.AddArg2(s, c)
9423 v2.AddArg2(s, v3)
9424 v.AddArg2(v0, v2)
9425 return true
9426 }
9427
9428
9429 for {
9430 t := v.Type
9431 if v_0.Op != OpSub64borrow {
9432 break
9433 }
9434 c := v_0.Args[2]
9435 x := v_0.Args[0]
9436 y := v_0.Args[1]
9437 v.reset(OpLOONG64OR)
9438 v0 := b.NewValue0(v.Pos, OpLOONG64SGTU, t)
9439 s := b.NewValue0(v.Pos, OpLOONG64SUBV, t)
9440 s.AddArg2(x, y)
9441 v0.AddArg2(s, x)
9442 v2 := b.NewValue0(v.Pos, OpLOONG64SGTU, t)
9443 v3 := b.NewValue0(v.Pos, OpLOONG64SUBV, t)
9444 v3.AddArg2(s, c)
9445 v2.AddArg2(v3, s)
9446 v.AddArg2(v0, v2)
9447 return true
9448 }
9449 return false
9450 }
9451 func rewriteValueLOONG64_OpSelectN(v *Value) bool {
9452 v_0 := v.Args[0]
9453 b := v.Block
9454 config := b.Func.Config
9455
9456
9457
9458 for {
9459 if auxIntToInt64(v.AuxInt) != 0 {
9460 break
9461 }
9462 call := v_0
9463 if call.Op != OpLOONG64CALLstatic || len(call.Args) != 4 {
9464 break
9465 }
9466 sym := auxToCall(call.Aux)
9467 mem := call.Args[3]
9468 dst := call.Args[0]
9469 src := call.Args[1]
9470 call_2 := call.Args[2]
9471 if call_2.Op != OpLOONG64MOVVconst {
9472 break
9473 }
9474 sz := auxIntToInt64(call_2.AuxInt)
9475 if !(sz >= 0 && isSameCall(sym, "runtime.memmove") && call.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(call)) {
9476 break
9477 }
9478 v.reset(OpMove)
9479 v.AuxInt = int64ToAuxInt(sz)
9480 v.AddArg3(dst, src, mem)
9481 return true
9482 }
9483 return false
9484 }
9485 func rewriteValueLOONG64_OpSlicemask(v *Value) bool {
9486 v_0 := v.Args[0]
9487 b := v.Block
9488
9489
9490 for {
9491 t := v.Type
9492 x := v_0
9493 v.reset(OpLOONG64SRAVconst)
9494 v.AuxInt = int64ToAuxInt(63)
9495 v0 := b.NewValue0(v.Pos, OpLOONG64NEGV, t)
9496 v0.AddArg(x)
9497 v.AddArg(v0)
9498 return true
9499 }
9500 }
9501 func rewriteValueLOONG64_OpStore(v *Value) bool {
9502 v_2 := v.Args[2]
9503 v_1 := v.Args[1]
9504 v_0 := v.Args[0]
9505
9506
9507
9508 for {
9509 t := auxToType(v.Aux)
9510 ptr := v_0
9511 val := v_1
9512 mem := v_2
9513 if !(t.Size() == 1) {
9514 break
9515 }
9516 v.reset(OpLOONG64MOVBstore)
9517 v.AddArg3(ptr, val, mem)
9518 return true
9519 }
9520
9521
9522
9523 for {
9524 t := auxToType(v.Aux)
9525 ptr := v_0
9526 val := v_1
9527 mem := v_2
9528 if !(t.Size() == 2) {
9529 break
9530 }
9531 v.reset(OpLOONG64MOVHstore)
9532 v.AddArg3(ptr, val, mem)
9533 return true
9534 }
9535
9536
9537
9538 for {
9539 t := auxToType(v.Aux)
9540 ptr := v_0
9541 val := v_1
9542 mem := v_2
9543 if !(t.Size() == 4 && !t.IsFloat()) {
9544 break
9545 }
9546 v.reset(OpLOONG64MOVWstore)
9547 v.AddArg3(ptr, val, mem)
9548 return true
9549 }
9550
9551
9552
9553 for {
9554 t := auxToType(v.Aux)
9555 ptr := v_0
9556 val := v_1
9557 mem := v_2
9558 if !(t.Size() == 8 && !t.IsFloat()) {
9559 break
9560 }
9561 v.reset(OpLOONG64MOVVstore)
9562 v.AddArg3(ptr, val, mem)
9563 return true
9564 }
9565
9566
9567
9568 for {
9569 t := auxToType(v.Aux)
9570 ptr := v_0
9571 val := v_1
9572 mem := v_2
9573 if !(t.Size() == 4 && t.IsFloat()) {
9574 break
9575 }
9576 v.reset(OpLOONG64MOVFstore)
9577 v.AddArg3(ptr, val, mem)
9578 return true
9579 }
9580
9581
9582
9583 for {
9584 t := auxToType(v.Aux)
9585 ptr := v_0
9586 val := v_1
9587 mem := v_2
9588 if !(t.Size() == 8 && t.IsFloat()) {
9589 break
9590 }
9591 v.reset(OpLOONG64MOVDstore)
9592 v.AddArg3(ptr, val, mem)
9593 return true
9594 }
9595 return false
9596 }
9597 func rewriteValueLOONG64_OpZero(v *Value) bool {
9598 v_1 := v.Args[1]
9599 v_0 := v.Args[0]
9600 b := v.Block
9601 config := b.Func.Config
9602 typ := &b.Func.Config.Types
9603
9604
9605 for {
9606 if auxIntToInt64(v.AuxInt) != 0 {
9607 break
9608 }
9609 mem := v_1
9610 v.copyOf(mem)
9611 return true
9612 }
9613
9614
9615 for {
9616 if auxIntToInt64(v.AuxInt) != 1 {
9617 break
9618 }
9619 ptr := v_0
9620 mem := v_1
9621 v.reset(OpLOONG64MOVBstore)
9622 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9623 v0.AuxInt = int64ToAuxInt(0)
9624 v.AddArg3(ptr, v0, mem)
9625 return true
9626 }
9627
9628
9629 for {
9630 if auxIntToInt64(v.AuxInt) != 2 {
9631 break
9632 }
9633 ptr := v_0
9634 mem := v_1
9635 v.reset(OpLOONG64MOVHstore)
9636 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9637 v0.AuxInt = int64ToAuxInt(0)
9638 v.AddArg3(ptr, v0, mem)
9639 return true
9640 }
9641
9642
9643 for {
9644 if auxIntToInt64(v.AuxInt) != 3 {
9645 break
9646 }
9647 ptr := v_0
9648 mem := v_1
9649 v.reset(OpLOONG64MOVBstore)
9650 v.AuxInt = int32ToAuxInt(2)
9651 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9652 v0.AuxInt = int64ToAuxInt(0)
9653 v1 := b.NewValue0(v.Pos, OpLOONG64MOVHstore, types.TypeMem)
9654 v1.AddArg3(ptr, v0, mem)
9655 v.AddArg3(ptr, v0, v1)
9656 return true
9657 }
9658
9659
9660 for {
9661 if auxIntToInt64(v.AuxInt) != 4 {
9662 break
9663 }
9664 ptr := v_0
9665 mem := v_1
9666 v.reset(OpLOONG64MOVWstore)
9667 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9668 v0.AuxInt = int64ToAuxInt(0)
9669 v.AddArg3(ptr, v0, mem)
9670 return true
9671 }
9672
9673
9674 for {
9675 if auxIntToInt64(v.AuxInt) != 5 {
9676 break
9677 }
9678 ptr := v_0
9679 mem := v_1
9680 v.reset(OpLOONG64MOVBstore)
9681 v.AuxInt = int32ToAuxInt(4)
9682 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9683 v0.AuxInt = int64ToAuxInt(0)
9684 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
9685 v1.AddArg3(ptr, v0, mem)
9686 v.AddArg3(ptr, v0, v1)
9687 return true
9688 }
9689
9690
9691 for {
9692 if auxIntToInt64(v.AuxInt) != 6 {
9693 break
9694 }
9695 ptr := v_0
9696 mem := v_1
9697 v.reset(OpLOONG64MOVHstore)
9698 v.AuxInt = int32ToAuxInt(4)
9699 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9700 v0.AuxInt = int64ToAuxInt(0)
9701 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
9702 v1.AddArg3(ptr, v0, mem)
9703 v.AddArg3(ptr, v0, v1)
9704 return true
9705 }
9706
9707
9708 for {
9709 if auxIntToInt64(v.AuxInt) != 7 {
9710 break
9711 }
9712 ptr := v_0
9713 mem := v_1
9714 v.reset(OpLOONG64MOVWstore)
9715 v.AuxInt = int32ToAuxInt(3)
9716 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9717 v0.AuxInt = int64ToAuxInt(0)
9718 v1 := b.NewValue0(v.Pos, OpLOONG64MOVWstore, types.TypeMem)
9719 v1.AddArg3(ptr, v0, mem)
9720 v.AddArg3(ptr, v0, v1)
9721 return true
9722 }
9723
9724
9725 for {
9726 if auxIntToInt64(v.AuxInt) != 8 {
9727 break
9728 }
9729 ptr := v_0
9730 mem := v_1
9731 v.reset(OpLOONG64MOVVstore)
9732 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9733 v0.AuxInt = int64ToAuxInt(0)
9734 v.AddArg3(ptr, v0, mem)
9735 return true
9736 }
9737
9738
9739 for {
9740 if auxIntToInt64(v.AuxInt) != 9 {
9741 break
9742 }
9743 ptr := v_0
9744 mem := v_1
9745 v.reset(OpLOONG64MOVBstore)
9746 v.AuxInt = int32ToAuxInt(8)
9747 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9748 v0.AuxInt = int64ToAuxInt(0)
9749 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9750 v1.AddArg3(ptr, v0, mem)
9751 v.AddArg3(ptr, v0, v1)
9752 return true
9753 }
9754
9755
9756 for {
9757 if auxIntToInt64(v.AuxInt) != 10 {
9758 break
9759 }
9760 ptr := v_0
9761 mem := v_1
9762 v.reset(OpLOONG64MOVHstore)
9763 v.AuxInt = int32ToAuxInt(8)
9764 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9765 v0.AuxInt = int64ToAuxInt(0)
9766 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9767 v1.AddArg3(ptr, v0, mem)
9768 v.AddArg3(ptr, v0, v1)
9769 return true
9770 }
9771
9772
9773 for {
9774 if auxIntToInt64(v.AuxInt) != 11 {
9775 break
9776 }
9777 ptr := v_0
9778 mem := v_1
9779 v.reset(OpLOONG64MOVWstore)
9780 v.AuxInt = int32ToAuxInt(7)
9781 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9782 v0.AuxInt = int64ToAuxInt(0)
9783 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9784 v1.AddArg3(ptr, v0, mem)
9785 v.AddArg3(ptr, v0, v1)
9786 return true
9787 }
9788
9789
9790 for {
9791 if auxIntToInt64(v.AuxInt) != 12 {
9792 break
9793 }
9794 ptr := v_0
9795 mem := v_1
9796 v.reset(OpLOONG64MOVWstore)
9797 v.AuxInt = int32ToAuxInt(8)
9798 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9799 v0.AuxInt = int64ToAuxInt(0)
9800 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9801 v1.AddArg3(ptr, v0, mem)
9802 v.AddArg3(ptr, v0, v1)
9803 return true
9804 }
9805
9806
9807 for {
9808 if auxIntToInt64(v.AuxInt) != 13 {
9809 break
9810 }
9811 ptr := v_0
9812 mem := v_1
9813 v.reset(OpLOONG64MOVVstore)
9814 v.AuxInt = int32ToAuxInt(5)
9815 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9816 v0.AuxInt = int64ToAuxInt(0)
9817 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9818 v1.AddArg3(ptr, v0, mem)
9819 v.AddArg3(ptr, v0, v1)
9820 return true
9821 }
9822
9823
9824 for {
9825 if auxIntToInt64(v.AuxInt) != 14 {
9826 break
9827 }
9828 ptr := v_0
9829 mem := v_1
9830 v.reset(OpLOONG64MOVVstore)
9831 v.AuxInt = int32ToAuxInt(6)
9832 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9833 v0.AuxInt = int64ToAuxInt(0)
9834 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9835 v1.AddArg3(ptr, v0, mem)
9836 v.AddArg3(ptr, v0, v1)
9837 return true
9838 }
9839
9840
9841 for {
9842 if auxIntToInt64(v.AuxInt) != 15 {
9843 break
9844 }
9845 ptr := v_0
9846 mem := v_1
9847 v.reset(OpLOONG64MOVVstore)
9848 v.AuxInt = int32ToAuxInt(7)
9849 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9850 v0.AuxInt = int64ToAuxInt(0)
9851 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9852 v1.AddArg3(ptr, v0, mem)
9853 v.AddArg3(ptr, v0, v1)
9854 return true
9855 }
9856
9857
9858 for {
9859 if auxIntToInt64(v.AuxInt) != 16 {
9860 break
9861 }
9862 ptr := v_0
9863 mem := v_1
9864 v.reset(OpLOONG64MOVVstore)
9865 v.AuxInt = int32ToAuxInt(8)
9866 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)
9867 v0.AuxInt = int64ToAuxInt(0)
9868 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVstore, types.TypeMem)
9869 v1.AddArg3(ptr, v0, mem)
9870 v.AddArg3(ptr, v0, v1)
9871 return true
9872 }
9873
9874
9875
9876 for {
9877 s := auxIntToInt64(v.AuxInt)
9878 ptr := v_0
9879 mem := v_1
9880 if !(s%8 != 0 && s > 16) {
9881 break
9882 }
9883 v.reset(OpZero)
9884 v.AuxInt = int64ToAuxInt(s % 8)
9885 v0 := b.NewValue0(v.Pos, OpOffPtr, ptr.Type)
9886 v0.AuxInt = int64ToAuxInt(s - s%8)
9887 v0.AddArg(ptr)
9888 v1 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
9889 v1.AuxInt = int64ToAuxInt(s - s%8)
9890 v1.AddArg2(ptr, mem)
9891 v.AddArg2(v0, v1)
9892 return true
9893 }
9894
9895
9896
9897 for {
9898 s := auxIntToInt64(v.AuxInt)
9899 ptr := v_0
9900 mem := v_1
9901 if !(s%8 == 0 && s > 16 && s <= 8*128 && !config.noDuffDevice) {
9902 break
9903 }
9904 v.reset(OpLOONG64DUFFZERO)
9905 v.AuxInt = int64ToAuxInt(8 * (128 - s/8))
9906 v.AddArg2(ptr, mem)
9907 return true
9908 }
9909
9910
9911
9912 for {
9913 s := auxIntToInt64(v.AuxInt)
9914 ptr := v_0
9915 mem := v_1
9916 if !(s%8 == 0 && s > 8*128) {
9917 break
9918 }
9919 v.reset(OpLOONG64LoweredZero)
9920 v0 := b.NewValue0(v.Pos, OpLOONG64ADDVconst, ptr.Type)
9921 v0.AuxInt = int64ToAuxInt(s - 8)
9922 v0.AddArg(ptr)
9923 v.AddArg3(ptr, v0, mem)
9924 return true
9925 }
9926 return false
9927 }
9928 func rewriteBlockLOONG64(b *Block) bool {
9929 typ := &b.Func.Config.Types
9930 switch b.Kind {
9931 case BlockLOONG64EQ:
9932
9933
9934 for b.Controls[0].Op == OpLOONG64FPFlagTrue {
9935 v_0 := b.Controls[0]
9936 cmp := v_0.Args[0]
9937 b.resetWithControl(BlockLOONG64FPF, cmp)
9938 return true
9939 }
9940
9941
9942 for b.Controls[0].Op == OpLOONG64FPFlagFalse {
9943 v_0 := b.Controls[0]
9944 cmp := v_0.Args[0]
9945 b.resetWithControl(BlockLOONG64FPT, cmp)
9946 return true
9947 }
9948
9949
9950 for b.Controls[0].Op == OpLOONG64XORconst {
9951 v_0 := b.Controls[0]
9952 if auxIntToInt64(v_0.AuxInt) != 1 {
9953 break
9954 }
9955 cmp := v_0.Args[0]
9956 if cmp.Op != OpLOONG64SGT {
9957 break
9958 }
9959 b.resetWithControl(BlockLOONG64NE, cmp)
9960 return true
9961 }
9962
9963
9964 for b.Controls[0].Op == OpLOONG64XORconst {
9965 v_0 := b.Controls[0]
9966 if auxIntToInt64(v_0.AuxInt) != 1 {
9967 break
9968 }
9969 cmp := v_0.Args[0]
9970 if cmp.Op != OpLOONG64SGTU {
9971 break
9972 }
9973 b.resetWithControl(BlockLOONG64NE, cmp)
9974 return true
9975 }
9976
9977
9978 for b.Controls[0].Op == OpLOONG64XORconst {
9979 v_0 := b.Controls[0]
9980 if auxIntToInt64(v_0.AuxInt) != 1 {
9981 break
9982 }
9983 cmp := v_0.Args[0]
9984 if cmp.Op != OpLOONG64SGTconst {
9985 break
9986 }
9987 b.resetWithControl(BlockLOONG64NE, cmp)
9988 return true
9989 }
9990
9991
9992 for b.Controls[0].Op == OpLOONG64XORconst {
9993 v_0 := b.Controls[0]
9994 if auxIntToInt64(v_0.AuxInt) != 1 {
9995 break
9996 }
9997 cmp := v_0.Args[0]
9998 if cmp.Op != OpLOONG64SGTUconst {
9999 break
10000 }
10001 b.resetWithControl(BlockLOONG64NE, cmp)
10002 return true
10003 }
10004
10005
10006 for b.Controls[0].Op == OpLOONG64SGTUconst {
10007 v_0 := b.Controls[0]
10008 if auxIntToInt64(v_0.AuxInt) != 1 {
10009 break
10010 }
10011 x := v_0.Args[0]
10012 b.resetWithControl(BlockLOONG64NE, x)
10013 return true
10014 }
10015
10016
10017 for b.Controls[0].Op == OpLOONG64SGTU {
10018 v_0 := b.Controls[0]
10019 _ = v_0.Args[1]
10020 x := v_0.Args[0]
10021 v_0_1 := v_0.Args[1]
10022 if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 {
10023 break
10024 }
10025 b.resetWithControl(BlockLOONG64EQ, x)
10026 return true
10027 }
10028
10029
10030 for b.Controls[0].Op == OpLOONG64SGTconst {
10031 v_0 := b.Controls[0]
10032 if auxIntToInt64(v_0.AuxInt) != 0 {
10033 break
10034 }
10035 x := v_0.Args[0]
10036 b.resetWithControl(BlockLOONG64GEZ, x)
10037 return true
10038 }
10039
10040
10041 for b.Controls[0].Op == OpLOONG64SGT {
10042 v_0 := b.Controls[0]
10043 _ = v_0.Args[1]
10044 x := v_0.Args[0]
10045 v_0_1 := v_0.Args[1]
10046 if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 {
10047 break
10048 }
10049 b.resetWithControl(BlockLOONG64LEZ, x)
10050 return true
10051 }
10052
10053
10054
10055 for b.Controls[0].Op == OpLOONG64SGTU {
10056 v_0 := b.Controls[0]
10057 y := v_0.Args[1]
10058 v_0_0 := v_0.Args[0]
10059 if v_0_0.Op != OpLOONG64MOVVconst {
10060 break
10061 }
10062 c := auxIntToInt64(v_0_0.AuxInt)
10063 if !(c >= -2048 && c <= 2047) {
10064 break
10065 }
10066 v0 := b.NewValue0(v_0.Pos, OpLOONG64SGTUconst, typ.Bool)
10067 v0.AuxInt = int64ToAuxInt(c)
10068 v0.AddArg(y)
10069 b.resetWithControl(BlockLOONG64EQ, v0)
10070 return true
10071 }
10072
10073
10074 for b.Controls[0].Op == OpLOONG64SUBV {
10075 v_0 := b.Controls[0]
10076 y := v_0.Args[1]
10077 x := v_0.Args[0]
10078 b.resetWithControl2(BlockLOONG64BEQ, x, y)
10079 return true
10080 }
10081
10082
10083 for b.Controls[0].Op == OpLOONG64SGT {
10084 v_0 := b.Controls[0]
10085 y := v_0.Args[1]
10086 x := v_0.Args[0]
10087 b.resetWithControl2(BlockLOONG64BGE, y, x)
10088 return true
10089 }
10090
10091
10092 for b.Controls[0].Op == OpLOONG64SGTU {
10093 v_0 := b.Controls[0]
10094 y := v_0.Args[1]
10095 x := v_0.Args[0]
10096 b.resetWithControl2(BlockLOONG64BGEU, y, x)
10097 return true
10098 }
10099
10100
10101 for b.Controls[0].Op == OpLOONG64MOVVconst {
10102 v_0 := b.Controls[0]
10103 if auxIntToInt64(v_0.AuxInt) != 0 {
10104 break
10105 }
10106 b.Reset(BlockFirst)
10107 return true
10108 }
10109
10110
10111
10112 for b.Controls[0].Op == OpLOONG64MOVVconst {
10113 v_0 := b.Controls[0]
10114 c := auxIntToInt64(v_0.AuxInt)
10115 if !(c != 0) {
10116 break
10117 }
10118 b.Reset(BlockFirst)
10119 b.swapSuccessors()
10120 return true
10121 }
10122 case BlockLOONG64GEZ:
10123
10124
10125
10126 for b.Controls[0].Op == OpLOONG64MOVVconst {
10127 v_0 := b.Controls[0]
10128 c := auxIntToInt64(v_0.AuxInt)
10129 if !(c >= 0) {
10130 break
10131 }
10132 b.Reset(BlockFirst)
10133 return true
10134 }
10135
10136
10137
10138 for b.Controls[0].Op == OpLOONG64MOVVconst {
10139 v_0 := b.Controls[0]
10140 c := auxIntToInt64(v_0.AuxInt)
10141 if !(c < 0) {
10142 break
10143 }
10144 b.Reset(BlockFirst)
10145 b.swapSuccessors()
10146 return true
10147 }
10148 case BlockLOONG64GTZ:
10149
10150
10151
10152 for b.Controls[0].Op == OpLOONG64MOVVconst {
10153 v_0 := b.Controls[0]
10154 c := auxIntToInt64(v_0.AuxInt)
10155 if !(c > 0) {
10156 break
10157 }
10158 b.Reset(BlockFirst)
10159 return true
10160 }
10161
10162
10163
10164 for b.Controls[0].Op == OpLOONG64MOVVconst {
10165 v_0 := b.Controls[0]
10166 c := auxIntToInt64(v_0.AuxInt)
10167 if !(c <= 0) {
10168 break
10169 }
10170 b.Reset(BlockFirst)
10171 b.swapSuccessors()
10172 return true
10173 }
10174 case BlockIf:
10175
10176
10177 for {
10178 cond := b.Controls[0]
10179 v0 := b.NewValue0(cond.Pos, OpLOONG64MOVBUreg, typ.UInt64)
10180 v0.AddArg(cond)
10181 b.resetWithControl(BlockLOONG64NE, v0)
10182 return true
10183 }
10184 case BlockLOONG64LEZ:
10185
10186
10187
10188 for b.Controls[0].Op == OpLOONG64MOVVconst {
10189 v_0 := b.Controls[0]
10190 c := auxIntToInt64(v_0.AuxInt)
10191 if !(c <= 0) {
10192 break
10193 }
10194 b.Reset(BlockFirst)
10195 return true
10196 }
10197
10198
10199
10200 for b.Controls[0].Op == OpLOONG64MOVVconst {
10201 v_0 := b.Controls[0]
10202 c := auxIntToInt64(v_0.AuxInt)
10203 if !(c > 0) {
10204 break
10205 }
10206 b.Reset(BlockFirst)
10207 b.swapSuccessors()
10208 return true
10209 }
10210 case BlockLOONG64LTZ:
10211
10212
10213
10214 for b.Controls[0].Op == OpLOONG64MOVVconst {
10215 v_0 := b.Controls[0]
10216 c := auxIntToInt64(v_0.AuxInt)
10217 if !(c < 0) {
10218 break
10219 }
10220 b.Reset(BlockFirst)
10221 return true
10222 }
10223
10224
10225
10226 for b.Controls[0].Op == OpLOONG64MOVVconst {
10227 v_0 := b.Controls[0]
10228 c := auxIntToInt64(v_0.AuxInt)
10229 if !(c >= 0) {
10230 break
10231 }
10232 b.Reset(BlockFirst)
10233 b.swapSuccessors()
10234 return true
10235 }
10236 case BlockLOONG64NE:
10237
10238
10239 for b.Controls[0].Op == OpLOONG64FPFlagTrue {
10240 v_0 := b.Controls[0]
10241 cmp := v_0.Args[0]
10242 b.resetWithControl(BlockLOONG64FPT, cmp)
10243 return true
10244 }
10245
10246
10247 for b.Controls[0].Op == OpLOONG64FPFlagFalse {
10248 v_0 := b.Controls[0]
10249 cmp := v_0.Args[0]
10250 b.resetWithControl(BlockLOONG64FPF, cmp)
10251 return true
10252 }
10253
10254
10255 for b.Controls[0].Op == OpLOONG64XORconst {
10256 v_0 := b.Controls[0]
10257 if auxIntToInt64(v_0.AuxInt) != 1 {
10258 break
10259 }
10260 cmp := v_0.Args[0]
10261 if cmp.Op != OpLOONG64SGT {
10262 break
10263 }
10264 b.resetWithControl(BlockLOONG64EQ, cmp)
10265 return true
10266 }
10267
10268
10269 for b.Controls[0].Op == OpLOONG64XORconst {
10270 v_0 := b.Controls[0]
10271 if auxIntToInt64(v_0.AuxInt) != 1 {
10272 break
10273 }
10274 cmp := v_0.Args[0]
10275 if cmp.Op != OpLOONG64SGTU {
10276 break
10277 }
10278 b.resetWithControl(BlockLOONG64EQ, cmp)
10279 return true
10280 }
10281
10282
10283 for b.Controls[0].Op == OpLOONG64XORconst {
10284 v_0 := b.Controls[0]
10285 if auxIntToInt64(v_0.AuxInt) != 1 {
10286 break
10287 }
10288 cmp := v_0.Args[0]
10289 if cmp.Op != OpLOONG64SGTconst {
10290 break
10291 }
10292 b.resetWithControl(BlockLOONG64EQ, cmp)
10293 return true
10294 }
10295
10296
10297 for b.Controls[0].Op == OpLOONG64XORconst {
10298 v_0 := b.Controls[0]
10299 if auxIntToInt64(v_0.AuxInt) != 1 {
10300 break
10301 }
10302 cmp := v_0.Args[0]
10303 if cmp.Op != OpLOONG64SGTUconst {
10304 break
10305 }
10306 b.resetWithControl(BlockLOONG64EQ, cmp)
10307 return true
10308 }
10309
10310
10311 for b.Controls[0].Op == OpLOONG64SGTUconst {
10312 v_0 := b.Controls[0]
10313 if auxIntToInt64(v_0.AuxInt) != 1 {
10314 break
10315 }
10316 x := v_0.Args[0]
10317 b.resetWithControl(BlockLOONG64EQ, x)
10318 return true
10319 }
10320
10321
10322 for b.Controls[0].Op == OpLOONG64SGTU {
10323 v_0 := b.Controls[0]
10324 _ = v_0.Args[1]
10325 x := v_0.Args[0]
10326 v_0_1 := v_0.Args[1]
10327 if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 {
10328 break
10329 }
10330 b.resetWithControl(BlockLOONG64NE, x)
10331 return true
10332 }
10333
10334
10335 for b.Controls[0].Op == OpLOONG64SGTconst {
10336 v_0 := b.Controls[0]
10337 if auxIntToInt64(v_0.AuxInt) != 0 {
10338 break
10339 }
10340 x := v_0.Args[0]
10341 b.resetWithControl(BlockLOONG64LTZ, x)
10342 return true
10343 }
10344
10345
10346 for b.Controls[0].Op == OpLOONG64SGT {
10347 v_0 := b.Controls[0]
10348 _ = v_0.Args[1]
10349 x := v_0.Args[0]
10350 v_0_1 := v_0.Args[1]
10351 if v_0_1.Op != OpLOONG64MOVVconst || auxIntToInt64(v_0_1.AuxInt) != 0 {
10352 break
10353 }
10354 b.resetWithControl(BlockLOONG64GTZ, x)
10355 return true
10356 }
10357
10358
10359
10360 for b.Controls[0].Op == OpLOONG64SGTU {
10361 v_0 := b.Controls[0]
10362 y := v_0.Args[1]
10363 v_0_0 := v_0.Args[0]
10364 if v_0_0.Op != OpLOONG64MOVVconst {
10365 break
10366 }
10367 c := auxIntToInt64(v_0_0.AuxInt)
10368 if !(c >= -2048 && c <= 2047) {
10369 break
10370 }
10371 v0 := b.NewValue0(v_0.Pos, OpLOONG64SGTUconst, typ.Bool)
10372 v0.AuxInt = int64ToAuxInt(c)
10373 v0.AddArg(y)
10374 b.resetWithControl(BlockLOONG64NE, v0)
10375 return true
10376 }
10377
10378
10379 for b.Controls[0].Op == OpLOONG64SUBV {
10380 v_0 := b.Controls[0]
10381 y := v_0.Args[1]
10382 x := v_0.Args[0]
10383 b.resetWithControl2(BlockLOONG64BNE, x, y)
10384 return true
10385 }
10386
10387
10388 for b.Controls[0].Op == OpLOONG64SGT {
10389 v_0 := b.Controls[0]
10390 y := v_0.Args[1]
10391 x := v_0.Args[0]
10392 b.resetWithControl2(BlockLOONG64BLT, y, x)
10393 return true
10394 }
10395
10396
10397 for b.Controls[0].Op == OpLOONG64SGTU {
10398 v_0 := b.Controls[0]
10399 y := v_0.Args[1]
10400 x := v_0.Args[0]
10401 b.resetWithControl2(BlockLOONG64BLTU, y, x)
10402 return true
10403 }
10404
10405
10406 for b.Controls[0].Op == OpLOONG64MOVVconst {
10407 v_0 := b.Controls[0]
10408 if auxIntToInt64(v_0.AuxInt) != 0 {
10409 break
10410 }
10411 b.Reset(BlockFirst)
10412 b.swapSuccessors()
10413 return true
10414 }
10415
10416
10417
10418 for b.Controls[0].Op == OpLOONG64MOVVconst {
10419 v_0 := b.Controls[0]
10420 c := auxIntToInt64(v_0.AuxInt)
10421 if !(c != 0) {
10422 break
10423 }
10424 b.Reset(BlockFirst)
10425 return true
10426 }
10427 }
10428 return false
10429 }
10430
View as plain text