1// Code generated from _gen/LOONG64.rules using 'go generate'; DO NOT EDIT.23package ssa45import "cmd/compile/internal/types"67func rewriteValueLOONG64(v *Value) bool {8 switch v.Op {9 case OpAbs:10 v.Op = OpLOONG64ABSD11 return true12 case OpAdd16:13 v.Op = OpLOONG64ADDV14 return true15 case OpAdd32:16 v.Op = OpLOONG64ADDV17 return true18 case OpAdd32F:19 v.Op = OpLOONG64ADDF20 return true21 case OpAdd64:22 v.Op = OpLOONG64ADDV23 return true24 case OpAdd64F:25 v.Op = OpLOONG64ADDD26 return true27 case OpAdd8:28 v.Op = OpLOONG64ADDV29 return true30 case OpAddPtr:31 v.Op = OpLOONG64ADDV32 return true33 case OpAddr:34 return rewriteValueLOONG64_OpAddr(v)35 case OpAnd16:36 v.Op = OpLOONG64AND37 return true38 case OpAnd32:39 v.Op = OpLOONG64AND40 return true41 case OpAnd64:42 v.Op = OpLOONG64AND43 return true44 case OpAnd8:45 v.Op = OpLOONG64AND46 return true47 case OpAndB:48 v.Op = OpLOONG64AND49 return true50 case OpAtomicAdd32:51 v.Op = OpLOONG64LoweredAtomicAdd3252 return true53 case OpAtomicAdd64:54 v.Op = OpLOONG64LoweredAtomicAdd6455 return true56 case OpAtomicAnd32:57 v.Op = OpLOONG64LoweredAtomicAnd3258 return true59 case OpAtomicAnd32value:60 v.Op = OpLOONG64LoweredAtomicAnd32value61 return true62 case OpAtomicAnd64value:63 v.Op = OpLOONG64LoweredAtomicAnd64value64 return true65 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 = OpLOONG64LoweredAtomicCas6473 return true74 case OpAtomicCompareAndSwap64Variant:75 v.Op = OpLOONG64LoweredAtomicCas64Variant76 return true77 case OpAtomicExchange32:78 v.Op = OpLOONG64LoweredAtomicExchange3279 return true80 case OpAtomicExchange64:81 v.Op = OpLOONG64LoweredAtomicExchange6482 return true83 case OpAtomicExchange8Variant:84 v.Op = OpLOONG64LoweredAtomicExchange8Variant85 return true86 case OpAtomicLoad32:87 v.Op = OpLOONG64LoweredAtomicLoad3288 return true89 case OpAtomicLoad64:90 v.Op = OpLOONG64LoweredAtomicLoad6491 return true92 case OpAtomicLoad8:93 v.Op = OpLOONG64LoweredAtomicLoad894 return true95 case OpAtomicLoadPtr:96 v.Op = OpLOONG64LoweredAtomicLoad6497 return true98 case OpAtomicOr32:99 v.Op = OpLOONG64LoweredAtomicOr32100 return true101 case OpAtomicOr32value:102 v.Op = OpLOONG64LoweredAtomicOr32value103 return true104 case OpAtomicOr64value:105 v.Op = OpLOONG64LoweredAtomicOr64value106 return true107 case OpAtomicOr8:108 return rewriteValueLOONG64_OpAtomicOr8(v)109 case OpAtomicStore32:110 v.Op = OpLOONG64LoweredAtomicStore32111 return true112 case OpAtomicStore32Variant:113 v.Op = OpLOONG64LoweredAtomicStore32Variant114 return true115 case OpAtomicStore64:116 v.Op = OpLOONG64LoweredAtomicStore64117 return true118 case OpAtomicStore64Variant:119 v.Op = OpLOONG64LoweredAtomicStore64Variant120 return true121 case OpAtomicStore8:122 v.Op = OpLOONG64LoweredAtomicStore8123 return true124 case OpAtomicStore8Variant:125 v.Op = OpLOONG64LoweredAtomicStore8Variant126 return true127 case OpAtomicStorePtrNoWB:128 v.Op = OpLOONG64LoweredAtomicStore64129 return true130 case OpAvg64u:131 return rewriteValueLOONG64_OpAvg64u(v)132 case OpBitLen16:133 return rewriteValueLOONG64_OpBitLen16(v)134 case OpBitLen32:135 return rewriteValueLOONG64_OpBitLen32(v)136 case OpBitLen64:137 return rewriteValueLOONG64_OpBitLen64(v)138 case OpBitLen8:139 return rewriteValueLOONG64_OpBitLen8(v)140 case OpBitRev16:141 return rewriteValueLOONG64_OpBitRev16(v)142 case OpBitRev32:143 v.Op = OpLOONG64BITREVW144 return true145 case OpBitRev64:146 v.Op = OpLOONG64BITREVV147 return true148 case OpBitRev8:149 v.Op = OpLOONG64BITREV4B150 return true151 case OpBswap16:152 v.Op = OpLOONG64REVB2H153 return true154 case OpBswap32:155 v.Op = OpLOONG64REVB2W156 return true157 case OpBswap64:158 v.Op = OpLOONG64REVBV159 return true160 case OpCeil:161 v.Op = OpLOONG64FRINTPD162 return true163 case OpClosureCall:164 v.Op = OpLOONG64CALLclosure165 return true166 case OpCom16:167 return rewriteValueLOONG64_OpCom16(v)168 case OpCom32:169 return rewriteValueLOONG64_OpCom32(v)170 case OpCom64:171 return rewriteValueLOONG64_OpCom64(v)172 case OpCom8:173 return rewriteValueLOONG64_OpCom8(v)174 case OpCondSelect:175 return rewriteValueLOONG64_OpCondSelect(v)176 case OpConst16:177 return rewriteValueLOONG64_OpConst16(v)178 case OpConst32:179 return rewriteValueLOONG64_OpConst32(v)180 case OpConst32F:181 return rewriteValueLOONG64_OpConst32F(v)182 case OpConst64:183 return rewriteValueLOONG64_OpConst64(v)184 case OpConst64F:185 return rewriteValueLOONG64_OpConst64F(v)186 case OpConst8:187 return rewriteValueLOONG64_OpConst8(v)188 case OpConstBool:189 return rewriteValueLOONG64_OpConstBool(v)190 case OpConstNil:191 return rewriteValueLOONG64_OpConstNil(v)192 case OpCopysign:193 v.Op = OpLOONG64FCOPYSGD194 return true195 case OpCtz16:196 return rewriteValueLOONG64_OpCtz16(v)197 case OpCtz16NonZero:198 v.Op = OpCtz64199 return true200 case OpCtz32:201 v.Op = OpLOONG64CTZW202 return true203 case OpCtz32NonZero:204 v.Op = OpCtz64205 return true206 case OpCtz64:207 v.Op = OpLOONG64CTZV208 return true209 case OpCtz64NonZero:210 v.Op = OpCtz64211 return true212 case OpCtz8:213 return rewriteValueLOONG64_OpCtz8(v)214 case OpCtz8NonZero:215 v.Op = OpCtz64216 return true217 case OpCvt32Fto32:218 v.Op = OpLOONG64TRUNCFW219 return true220 case OpCvt32Fto64:221 v.Op = OpLOONG64TRUNCFV222 return true223 case OpCvt32Fto64F:224 v.Op = OpLOONG64MOVFD225 return true226 case OpCvt32to32F:227 v.Op = OpLOONG64MOVWF228 return true229 case OpCvt32to64F:230 v.Op = OpLOONG64MOVWD231 return true232 case OpCvt64Fto32:233 v.Op = OpLOONG64TRUNCDW234 return true235 case OpCvt64Fto32F:236 v.Op = OpLOONG64MOVDF237 return true238 case OpCvt64Fto64:239 v.Op = OpLOONG64TRUNCDV240 return true241 case OpCvt64to32F:242 v.Op = OpLOONG64MOVVF243 return true244 case OpCvt64to64F:245 v.Op = OpLOONG64MOVVD246 return true247 case OpCvtBoolToUint8:248 v.Op = OpCopy249 return true250 case OpDiv16:251 return rewriteValueLOONG64_OpDiv16(v)252 case OpDiv16u:253 return rewriteValueLOONG64_OpDiv16u(v)254 case OpDiv32:255 return rewriteValueLOONG64_OpDiv32(v)256 case OpDiv32F:257 v.Op = OpLOONG64DIVF258 return true259 case OpDiv32u:260 return rewriteValueLOONG64_OpDiv32u(v)261 case OpDiv64:262 return rewriteValueLOONG64_OpDiv64(v)263 case OpDiv64F:264 v.Op = OpLOONG64DIVD265 return true266 case OpDiv64u:267 v.Op = OpLOONG64DIVVU268 return true269 case OpDiv8:270 return rewriteValueLOONG64_OpDiv8(v)271 case OpDiv8u:272 return rewriteValueLOONG64_OpDiv8u(v)273 case OpEq16:274 return rewriteValueLOONG64_OpEq16(v)275 case OpEq32:276 return rewriteValueLOONG64_OpEq32(v)277 case OpEq32F:278 return rewriteValueLOONG64_OpEq32F(v)279 case OpEq64:280 return rewriteValueLOONG64_OpEq64(v)281 case OpEq64F:282 return rewriteValueLOONG64_OpEq64F(v)283 case OpEq8:284 return rewriteValueLOONG64_OpEq8(v)285 case OpEqB:286 return rewriteValueLOONG64_OpEqB(v)287 case OpEqPtr:288 return rewriteValueLOONG64_OpEqPtr(v)289 case OpFMA:290 v.Op = OpLOONG64FMADDD291 return true292 case OpFloor:293 v.Op = OpLOONG64FRINTMD294 return true295 case OpGetCallerPC:296 v.Op = OpLOONG64LoweredGetCallerPC297 return true298 case OpGetCallerSP:299 v.Op = OpLOONG64LoweredGetCallerSP300 return true301 case OpGetClosurePtr:302 v.Op = OpLOONG64LoweredGetClosurePtr303 return true304 case OpHmul32:305 v.Op = OpLOONG64MULH306 return true307 case OpHmul32u:308 v.Op = OpLOONG64MULHU309 return true310 case OpHmul64:311 v.Op = OpLOONG64MULHV312 return true313 case OpHmul64u:314 v.Op = OpLOONG64MULHVU315 return true316 case OpInterCall:317 v.Op = OpLOONG64CALLinter318 return true319 case OpIsInBounds:320 return rewriteValueLOONG64_OpIsInBounds(v)321 case OpIsNonNil:322 return rewriteValueLOONG64_OpIsNonNil(v)323 case OpIsSliceInBounds:324 return rewriteValueLOONG64_OpIsSliceInBounds(v)325 case OpLOONG64ADDD:326 return rewriteValueLOONG64_OpLOONG64ADDD(v)327 case OpLOONG64ADDF:328 return rewriteValueLOONG64_OpLOONG64ADDF(v)329 case OpLOONG64ADDV:330 return rewriteValueLOONG64_OpLOONG64ADDV(v)331 case OpLOONG64ADDVconst:332 return rewriteValueLOONG64_OpLOONG64ADDVconst(v)333 case OpLOONG64ADDshiftLLV:334 return rewriteValueLOONG64_OpLOONG64ADDshiftLLV(v)335 case OpLOONG64AND:336 return rewriteValueLOONG64_OpLOONG64AND(v)337 case OpLOONG64ANDconst:338 return rewriteValueLOONG64_OpLOONG64ANDconst(v)339 case OpLOONG64DIVV:340 return rewriteValueLOONG64_OpLOONG64DIVV(v)341 case OpLOONG64DIVVU:342 return rewriteValueLOONG64_OpLOONG64DIVVU(v)343 case OpLOONG64LoweredPanicBoundsCR:344 return rewriteValueLOONG64_OpLOONG64LoweredPanicBoundsCR(v)345 case OpLOONG64LoweredPanicBoundsRC:346 return rewriteValueLOONG64_OpLOONG64LoweredPanicBoundsRC(v)347 case OpLOONG64LoweredPanicBoundsRR:348 return rewriteValueLOONG64_OpLOONG64LoweredPanicBoundsRR(v)349 case OpLOONG64MASKEQZ:350 return rewriteValueLOONG64_OpLOONG64MASKEQZ(v)351 case OpLOONG64MASKNEZ:352 return rewriteValueLOONG64_OpLOONG64MASKNEZ(v)353 case OpLOONG64MOVBUload:354 return rewriteValueLOONG64_OpLOONG64MOVBUload(v)355 case OpLOONG64MOVBUloadidx:356 return rewriteValueLOONG64_OpLOONG64MOVBUloadidx(v)357 case OpLOONG64MOVBUreg:358 return rewriteValueLOONG64_OpLOONG64MOVBUreg(v)359 case OpLOONG64MOVBload:360 return rewriteValueLOONG64_OpLOONG64MOVBload(v)361 case OpLOONG64MOVBloadidx:362 return rewriteValueLOONG64_OpLOONG64MOVBloadidx(v)363 case OpLOONG64MOVBreg:364 return rewriteValueLOONG64_OpLOONG64MOVBreg(v)365 case OpLOONG64MOVBstore:366 return rewriteValueLOONG64_OpLOONG64MOVBstore(v)367 case OpLOONG64MOVBstoreidx:368 return rewriteValueLOONG64_OpLOONG64MOVBstoreidx(v)369 case OpLOONG64MOVDF:370 return rewriteValueLOONG64_OpLOONG64MOVDF(v)371 case OpLOONG64MOVDload:372 return rewriteValueLOONG64_OpLOONG64MOVDload(v)373 case OpLOONG64MOVDloadidx:374 return rewriteValueLOONG64_OpLOONG64MOVDloadidx(v)375 case OpLOONG64MOVDstore:376 return rewriteValueLOONG64_OpLOONG64MOVDstore(v)377 case OpLOONG64MOVDstoreidx:378 return rewriteValueLOONG64_OpLOONG64MOVDstoreidx(v)379 case OpLOONG64MOVFload:380 return rewriteValueLOONG64_OpLOONG64MOVFload(v)381 case OpLOONG64MOVFloadidx:382 return rewriteValueLOONG64_OpLOONG64MOVFloadidx(v)383 case OpLOONG64MOVFstore:384 return rewriteValueLOONG64_OpLOONG64MOVFstore(v)385 case OpLOONG64MOVFstoreidx:386 return rewriteValueLOONG64_OpLOONG64MOVFstoreidx(v)387 case OpLOONG64MOVHUload:388 return rewriteValueLOONG64_OpLOONG64MOVHUload(v)389 case OpLOONG64MOVHUloadidx:390 return rewriteValueLOONG64_OpLOONG64MOVHUloadidx(v)391 case OpLOONG64MOVHUreg:392 return rewriteValueLOONG64_OpLOONG64MOVHUreg(v)393 case OpLOONG64MOVHload:394 return rewriteValueLOONG64_OpLOONG64MOVHload(v)395 case OpLOONG64MOVHloadidx:396 return rewriteValueLOONG64_OpLOONG64MOVHloadidx(v)397 case OpLOONG64MOVHreg:398 return rewriteValueLOONG64_OpLOONG64MOVHreg(v)399 case OpLOONG64MOVHstore:400 return rewriteValueLOONG64_OpLOONG64MOVHstore(v)401 case OpLOONG64MOVHstoreidx:402 return rewriteValueLOONG64_OpLOONG64MOVHstoreidx(v)403 case OpLOONG64MOVVload:404 return rewriteValueLOONG64_OpLOONG64MOVVload(v)405 case OpLOONG64MOVVloadidx:406 return rewriteValueLOONG64_OpLOONG64MOVVloadidx(v)407 case OpLOONG64MOVVnop:408 return rewriteValueLOONG64_OpLOONG64MOVVnop(v)409 case OpLOONG64MOVVreg:410 return rewriteValueLOONG64_OpLOONG64MOVVreg(v)411 case OpLOONG64MOVVstore:412 return rewriteValueLOONG64_OpLOONG64MOVVstore(v)413 case OpLOONG64MOVVstoreidx:414 return rewriteValueLOONG64_OpLOONG64MOVVstoreidx(v)415 case OpLOONG64MOVWUload:416 return rewriteValueLOONG64_OpLOONG64MOVWUload(v)417 case OpLOONG64MOVWUloadidx:418 return rewriteValueLOONG64_OpLOONG64MOVWUloadidx(v)419 case OpLOONG64MOVWUreg:420 return rewriteValueLOONG64_OpLOONG64MOVWUreg(v)421 case OpLOONG64MOVWload:422 return rewriteValueLOONG64_OpLOONG64MOVWload(v)423 case OpLOONG64MOVWloadidx:424 return rewriteValueLOONG64_OpLOONG64MOVWloadidx(v)425 case OpLOONG64MOVWreg:426 return rewriteValueLOONG64_OpLOONG64MOVWreg(v)427 case OpLOONG64MOVWstore:428 return rewriteValueLOONG64_OpLOONG64MOVWstore(v)429 case OpLOONG64MOVWstoreidx:430 return rewriteValueLOONG64_OpLOONG64MOVWstoreidx(v)431 case OpLOONG64MULV:432 return rewriteValueLOONG64_OpLOONG64MULV(v)433 case OpLOONG64NEGV:434 return rewriteValueLOONG64_OpLOONG64NEGV(v)435 case OpLOONG64NOR:436 return rewriteValueLOONG64_OpLOONG64NOR(v)437 case OpLOONG64NORconst:438 return rewriteValueLOONG64_OpLOONG64NORconst(v)439 case OpLOONG64OR:440 return rewriteValueLOONG64_OpLOONG64OR(v)441 case OpLOONG64ORN:442 return rewriteValueLOONG64_OpLOONG64ORN(v)443 case OpLOONG64ORconst:444 return rewriteValueLOONG64_OpLOONG64ORconst(v)445 case OpLOONG64REMV:446 return rewriteValueLOONG64_OpLOONG64REMV(v)447 case OpLOONG64REMVU:448 return rewriteValueLOONG64_OpLOONG64REMVU(v)449 case OpLOONG64ROTR:450 return rewriteValueLOONG64_OpLOONG64ROTR(v)451 case OpLOONG64ROTRV:452 return rewriteValueLOONG64_OpLOONG64ROTRV(v)453 case OpLOONG64SGT:454 return rewriteValueLOONG64_OpLOONG64SGT(v)455 case OpLOONG64SGTU:456 return rewriteValueLOONG64_OpLOONG64SGTU(v)457 case OpLOONG64SGTUconst:458 return rewriteValueLOONG64_OpLOONG64SGTUconst(v)459 case OpLOONG64SGTconst:460 return rewriteValueLOONG64_OpLOONG64SGTconst(v)461 case OpLOONG64SLL:462 return rewriteValueLOONG64_OpLOONG64SLL(v)463 case OpLOONG64SLLV:464 return rewriteValueLOONG64_OpLOONG64SLLV(v)465 case OpLOONG64SLLVconst:466 return rewriteValueLOONG64_OpLOONG64SLLVconst(v)467 case OpLOONG64SLLconst:468 return rewriteValueLOONG64_OpLOONG64SLLconst(v)469 case OpLOONG64SRA:470 return rewriteValueLOONG64_OpLOONG64SRA(v)471 case OpLOONG64SRAV:472 return rewriteValueLOONG64_OpLOONG64SRAV(v)473 case OpLOONG64SRAVconst:474 return rewriteValueLOONG64_OpLOONG64SRAVconst(v)475 case OpLOONG64SRL:476 return rewriteValueLOONG64_OpLOONG64SRL(v)477 case OpLOONG64SRLV:478 return rewriteValueLOONG64_OpLOONG64SRLV(v)479 case OpLOONG64SRLVconst:480 return rewriteValueLOONG64_OpLOONG64SRLVconst(v)481 case OpLOONG64SUBD:482 return rewriteValueLOONG64_OpLOONG64SUBD(v)483 case OpLOONG64SUBF:484 return rewriteValueLOONG64_OpLOONG64SUBF(v)485 case OpLOONG64SUBV:486 return rewriteValueLOONG64_OpLOONG64SUBV(v)487 case OpLOONG64SUBVconst:488 return rewriteValueLOONG64_OpLOONG64SUBVconst(v)489 case OpLOONG64XOR:490 return rewriteValueLOONG64_OpLOONG64XOR(v)491 case OpLOONG64XORconst:492 return rewriteValueLOONG64_OpLOONG64XORconst(v)493 case OpLeq16:494 return rewriteValueLOONG64_OpLeq16(v)495 case OpLeq16U:496 return rewriteValueLOONG64_OpLeq16U(v)497 case OpLeq32:498 return rewriteValueLOONG64_OpLeq32(v)499 case OpLeq32F:500 return rewriteValueLOONG64_OpLeq32F(v)501 case OpLeq32U:502 return rewriteValueLOONG64_OpLeq32U(v)503 case OpLeq64:504 return rewriteValueLOONG64_OpLeq64(v)505 case OpLeq64F:506 return rewriteValueLOONG64_OpLeq64F(v)507 case OpLeq64U:508 return rewriteValueLOONG64_OpLeq64U(v)509 case OpLeq8:510 return rewriteValueLOONG64_OpLeq8(v)511 case OpLeq8U:512 return rewriteValueLOONG64_OpLeq8U(v)513 case OpLess16:514 return rewriteValueLOONG64_OpLess16(v)515 case OpLess16U:516 return rewriteValueLOONG64_OpLess16U(v)517 case OpLess32:518 return rewriteValueLOONG64_OpLess32(v)519 case OpLess32F:520 return rewriteValueLOONG64_OpLess32F(v)521 case OpLess32U:522 return rewriteValueLOONG64_OpLess32U(v)523 case OpLess64:524 return rewriteValueLOONG64_OpLess64(v)525 case OpLess64F:526 return rewriteValueLOONG64_OpLess64F(v)527 case OpLess64U:528 return rewriteValueLOONG64_OpLess64U(v)529 case OpLess8:530 return rewriteValueLOONG64_OpLess8(v)531 case OpLess8U:532 return rewriteValueLOONG64_OpLess8U(v)533 case OpLoad:534 return rewriteValueLOONG64_OpLoad(v)535 case OpLocalAddr:536 return rewriteValueLOONG64_OpLocalAddr(v)537 case OpLsh16x16:538 return rewriteValueLOONG64_OpLsh16x16(v)539 case OpLsh16x32:540 return rewriteValueLOONG64_OpLsh16x32(v)541 case OpLsh16x64:542 return rewriteValueLOONG64_OpLsh16x64(v)543 case OpLsh16x8:544 return rewriteValueLOONG64_OpLsh16x8(v)545 case OpLsh32x16:546 return rewriteValueLOONG64_OpLsh32x16(v)547 case OpLsh32x32:548 return rewriteValueLOONG64_OpLsh32x32(v)549 case OpLsh32x64:550 return rewriteValueLOONG64_OpLsh32x64(v)551 case OpLsh32x8:552 return rewriteValueLOONG64_OpLsh32x8(v)553 case OpLsh64x16:554 return rewriteValueLOONG64_OpLsh64x16(v)555 case OpLsh64x32:556 return rewriteValueLOONG64_OpLsh64x32(v)557 case OpLsh64x64:558 return rewriteValueLOONG64_OpLsh64x64(v)559 case OpLsh64x8:560 return rewriteValueLOONG64_OpLsh64x8(v)561 case OpLsh8x16:562 return rewriteValueLOONG64_OpLsh8x16(v)563 case OpLsh8x32:564 return rewriteValueLOONG64_OpLsh8x32(v)565 case OpLsh8x64:566 return rewriteValueLOONG64_OpLsh8x64(v)567 case OpLsh8x8:568 return rewriteValueLOONG64_OpLsh8x8(v)569 case OpMax32F:570 v.Op = OpLOONG64FMAXF571 return true572 case OpMax64F:573 v.Op = OpLOONG64FMAXD574 return true575 case OpMin32F:576 v.Op = OpLOONG64FMINF577 return true578 case OpMin64F:579 v.Op = OpLOONG64FMIND580 return true581 case OpMod16:582 return rewriteValueLOONG64_OpMod16(v)583 case OpMod16u:584 return rewriteValueLOONG64_OpMod16u(v)585 case OpMod32:586 return rewriteValueLOONG64_OpMod32(v)587 case OpMod32u:588 return rewriteValueLOONG64_OpMod32u(v)589 case OpMod64:590 return rewriteValueLOONG64_OpMod64(v)591 case OpMod64u:592 v.Op = OpLOONG64REMVU593 return true594 case OpMod8:595 return rewriteValueLOONG64_OpMod8(v)596 case OpMod8u:597 return rewriteValueLOONG64_OpMod8u(v)598 case OpMove:599 return rewriteValueLOONG64_OpMove(v)600 case OpMul16:601 v.Op = OpLOONG64MULV602 return true603 case OpMul32:604 v.Op = OpLOONG64MULV605 return true606 case OpMul32F:607 v.Op = OpLOONG64MULF608 return true609 case OpMul64:610 v.Op = OpLOONG64MULV611 return true612 case OpMul64F:613 v.Op = OpLOONG64MULD614 return true615 case OpMul8:616 v.Op = OpLOONG64MULV617 return true618 case OpNeg16:619 v.Op = OpLOONG64NEGV620 return true621 case OpNeg32:622 v.Op = OpLOONG64NEGV623 return true624 case OpNeg32F:625 v.Op = OpLOONG64NEGF626 return true627 case OpNeg64:628 v.Op = OpLOONG64NEGV629 return true630 case OpNeg64F:631 v.Op = OpLOONG64NEGD632 return true633 case OpNeg8:634 v.Op = OpLOONG64NEGV635 return true636 case OpNeq16:637 return rewriteValueLOONG64_OpNeq16(v)638 case OpNeq32:639 return rewriteValueLOONG64_OpNeq32(v)640 case OpNeq32F:641 return rewriteValueLOONG64_OpNeq32F(v)642 case OpNeq64:643 return rewriteValueLOONG64_OpNeq64(v)644 case OpNeq64F:645 return rewriteValueLOONG64_OpNeq64F(v)646 case OpNeq8:647 return rewriteValueLOONG64_OpNeq8(v)648 case OpNeqB:649 v.Op = OpLOONG64XOR650 return true651 case OpNeqPtr:652 return rewriteValueLOONG64_OpNeqPtr(v)653 case OpNilCheck:654 v.Op = OpLOONG64LoweredNilCheck655 return true656 case OpNot:657 return rewriteValueLOONG64_OpNot(v)658 case OpOffPtr:659 return rewriteValueLOONG64_OpOffPtr(v)660 case OpOr16:661 v.Op = OpLOONG64OR662 return true663 case OpOr32:664 v.Op = OpLOONG64OR665 return true666 case OpOr64:667 v.Op = OpLOONG64OR668 return true669 case OpOr8:670 v.Op = OpLOONG64OR671 return true672 case OpOrB:673 v.Op = OpLOONG64OR674 return true675 case OpPanicBounds:676 v.Op = OpLOONG64LoweredPanicBoundsRR677 return true678 case OpPopCount16:679 return rewriteValueLOONG64_OpPopCount16(v)680 case OpPopCount32:681 return rewriteValueLOONG64_OpPopCount32(v)682 case OpPopCount64:683 return rewriteValueLOONG64_OpPopCount64(v)684 case OpPrefetchCache:685 return rewriteValueLOONG64_OpPrefetchCache(v)686 case OpPrefetchCacheStreamed:687 return rewriteValueLOONG64_OpPrefetchCacheStreamed(v)688 case OpPubBarrier:689 v.Op = OpLOONG64LoweredPubBarrier690 return true691 case OpRotateLeft16:692 return rewriteValueLOONG64_OpRotateLeft16(v)693 case OpRotateLeft32:694 return rewriteValueLOONG64_OpRotateLeft32(v)695 case OpRotateLeft64:696 return rewriteValueLOONG64_OpRotateLeft64(v)697 case OpRotateLeft8:698 return rewriteValueLOONG64_OpRotateLeft8(v)699 case OpRound32F:700 v.Op = OpLOONG64LoweredRound32F701 return true702 case OpRound64F:703 v.Op = OpLOONG64LoweredRound64F704 return true705 case OpRoundToEven:706 v.Op = OpLOONG64FRINTND707 return true708 case OpRsh16Ux16:709 return rewriteValueLOONG64_OpRsh16Ux16(v)710 case OpRsh16Ux32:711 return rewriteValueLOONG64_OpRsh16Ux32(v)712 case OpRsh16Ux64:713 return rewriteValueLOONG64_OpRsh16Ux64(v)714 case OpRsh16Ux8:715 return rewriteValueLOONG64_OpRsh16Ux8(v)716 case OpRsh16x16:717 return rewriteValueLOONG64_OpRsh16x16(v)718 case OpRsh16x32:719 return rewriteValueLOONG64_OpRsh16x32(v)720 case OpRsh16x64:721 return rewriteValueLOONG64_OpRsh16x64(v)722 case OpRsh16x8:723 return rewriteValueLOONG64_OpRsh16x8(v)724 case OpRsh32Ux16:725 return rewriteValueLOONG64_OpRsh32Ux16(v)726 case OpRsh32Ux32:727 return rewriteValueLOONG64_OpRsh32Ux32(v)728 case OpRsh32Ux64:729 return rewriteValueLOONG64_OpRsh32Ux64(v)730 case OpRsh32Ux8:731 return rewriteValueLOONG64_OpRsh32Ux8(v)732 case OpRsh32x16:733 return rewriteValueLOONG64_OpRsh32x16(v)734 case OpRsh32x32:735 return rewriteValueLOONG64_OpRsh32x32(v)736 case OpRsh32x64:737 return rewriteValueLOONG64_OpRsh32x64(v)738 case OpRsh32x8:739 return rewriteValueLOONG64_OpRsh32x8(v)740 case OpRsh64Ux16:741 return rewriteValueLOONG64_OpRsh64Ux16(v)742 case OpRsh64Ux32:743 return rewriteValueLOONG64_OpRsh64Ux32(v)744 case OpRsh64Ux64:745 return rewriteValueLOONG64_OpRsh64Ux64(v)746 case OpRsh64Ux8:747 return rewriteValueLOONG64_OpRsh64Ux8(v)748 case OpRsh64x16:749 return rewriteValueLOONG64_OpRsh64x16(v)750 case OpRsh64x32:751 return rewriteValueLOONG64_OpRsh64x32(v)752 case OpRsh64x64:753 return rewriteValueLOONG64_OpRsh64x64(v)754 case OpRsh64x8:755 return rewriteValueLOONG64_OpRsh64x8(v)756 case OpRsh8Ux16:757 return rewriteValueLOONG64_OpRsh8Ux16(v)758 case OpRsh8Ux32:759 return rewriteValueLOONG64_OpRsh8Ux32(v)760 case OpRsh8Ux64:761 return rewriteValueLOONG64_OpRsh8Ux64(v)762 case OpRsh8Ux8:763 return rewriteValueLOONG64_OpRsh8Ux8(v)764 case OpRsh8x16:765 return rewriteValueLOONG64_OpRsh8x16(v)766 case OpRsh8x32:767 return rewriteValueLOONG64_OpRsh8x32(v)768 case OpRsh8x64:769 return rewriteValueLOONG64_OpRsh8x64(v)770 case OpRsh8x8:771 return rewriteValueLOONG64_OpRsh8x8(v)772 case OpSelect0:773 return rewriteValueLOONG64_OpSelect0(v)774 case OpSelect1:775 return rewriteValueLOONG64_OpSelect1(v)776 case OpSelectN:777 return rewriteValueLOONG64_OpSelectN(v)778 case OpSignExt16to32:779 v.Op = OpLOONG64MOVHreg780 return true781 case OpSignExt16to64:782 v.Op = OpLOONG64MOVHreg783 return true784 case OpSignExt32to64:785 v.Op = OpLOONG64MOVWreg786 return true787 case OpSignExt8to16:788 v.Op = OpLOONG64MOVBreg789 return true790 case OpSignExt8to32:791 v.Op = OpLOONG64MOVBreg792 return true793 case OpSignExt8to64:794 v.Op = OpLOONG64MOVBreg795 return true796 case OpSlicemask:797 return rewriteValueLOONG64_OpSlicemask(v)798 case OpSqrt:799 v.Op = OpLOONG64SQRTD800 return true801 case OpSqrt32:802 v.Op = OpLOONG64SQRTF803 return true804 case OpStaticCall:805 v.Op = OpLOONG64CALLstatic806 return true807 case OpStore:808 return rewriteValueLOONG64_OpStore(v)809 case OpSub16:810 v.Op = OpLOONG64SUBV811 return true812 case OpSub32:813 v.Op = OpLOONG64SUBV814 return true815 case OpSub32F:816 v.Op = OpLOONG64SUBF817 return true818 case OpSub64:819 v.Op = OpLOONG64SUBV820 return true821 case OpSub64F:822 v.Op = OpLOONG64SUBD823 return true824 case OpSub8:825 v.Op = OpLOONG64SUBV826 return true827 case OpSubPtr:828 v.Op = OpLOONG64SUBV829 return true830 case OpTailCall:831 v.Op = OpLOONG64CALLtail832 return true833 case OpTailCallInter:834 v.Op = OpLOONG64CALLtailinter835 return true836 case OpTrunc:837 v.Op = OpLOONG64FRINTZD838 return true839 case OpTrunc16to8:840 v.Op = OpCopy841 return true842 case OpTrunc32to16:843 v.Op = OpCopy844 return true845 case OpTrunc32to8:846 v.Op = OpCopy847 return true848 case OpTrunc64to16:849 v.Op = OpCopy850 return true851 case OpTrunc64to32:852 v.Op = OpCopy853 return true854 case OpTrunc64to8:855 v.Op = OpCopy856 return true857 case OpWB:858 v.Op = OpLOONG64LoweredWB859 return true860 case OpXor16:861 v.Op = OpLOONG64XOR862 return true863 case OpXor32:864 v.Op = OpLOONG64XOR865 return true866 case OpXor64:867 v.Op = OpLOONG64XOR868 return true869 case OpXor8:870 v.Op = OpLOONG64XOR871 return true872 case OpZero:873 return rewriteValueLOONG64_OpZero(v)874 case OpZeroExt16to32:875 v.Op = OpLOONG64MOVHUreg876 return true877 case OpZeroExt16to64:878 v.Op = OpLOONG64MOVHUreg879 return true880 case OpZeroExt32to64:881 v.Op = OpLOONG64MOVWUreg882 return true883 case OpZeroExt8to16:884 v.Op = OpLOONG64MOVBUreg885 return true886 case OpZeroExt8to32:887 v.Op = OpLOONG64MOVBUreg888 return true889 case OpZeroExt8to64:890 v.Op = OpLOONG64MOVBUreg891 return true892 }893 return false894}895func rewriteValueLOONG64_OpAddr(v *Value) bool {896 v_0 := v.Args[0]897 // match: (Addr {sym} base)898 // result: (MOVVaddr {sym} base)899 for {900 sym := auxToSym(v.Aux)901 base := v_0902 v.reset(OpLOONG64MOVVaddr)903 v.Aux = symToAux(sym)904 v.AddArg(base)905 return true906 }907}908func rewriteValueLOONG64_OpAtomicAnd8(v *Value) bool {909 v_2 := v.Args[2]910 v_1 := v.Args[1]911 v_0 := v.Args[0]912 b := v.Block913 typ := &b.Func.Config.Types914 // match: (AtomicAnd8 ptr val mem)915 // result: (LoweredAtomicAnd32 (AND <typ.Uintptr> (MOVVconst [^3]) ptr) (NORconst [0] <typ.UInt32> (SLLV <typ.UInt32> (XORconst <typ.UInt32> [0xff] (ZeroExt8to32 val)) (SLLVconst <typ.UInt64> [3] (ANDconst <typ.UInt64> [3] ptr)))) mem)916 for {917 ptr := v_0918 val := v_1919 mem := v_2920 v.reset(OpLOONG64LoweredAtomicAnd32)921 v0 := b.NewValue0(v.Pos, OpLOONG64AND, typ.Uintptr)922 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)923 v1.AuxInt = int64ToAuxInt(^3)924 v0.AddArg2(v1, ptr)925 v2 := b.NewValue0(v.Pos, OpLOONG64NORconst, typ.UInt32)926 v2.AuxInt = int64ToAuxInt(0)927 v3 := b.NewValue0(v.Pos, OpLOONG64SLLV, typ.UInt32)928 v4 := b.NewValue0(v.Pos, OpLOONG64XORconst, typ.UInt32)929 v4.AuxInt = int64ToAuxInt(0xff)930 v5 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)931 v5.AddArg(val)932 v4.AddArg(v5)933 v6 := b.NewValue0(v.Pos, OpLOONG64SLLVconst, typ.UInt64)934 v6.AuxInt = int64ToAuxInt(3)935 v7 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.UInt64)936 v7.AuxInt = int64ToAuxInt(3)937 v7.AddArg(ptr)938 v6.AddArg(v7)939 v3.AddArg2(v4, v6)940 v2.AddArg(v3)941 v.AddArg3(v0, v2, mem)942 return true943 }944}945func rewriteValueLOONG64_OpAtomicCompareAndSwap32(v *Value) bool {946 v_3 := v.Args[3]947 v_2 := v.Args[2]948 v_1 := v.Args[1]949 v_0 := v.Args[0]950 b := v.Block951 typ := &b.Func.Config.Types952 // match: (AtomicCompareAndSwap32 ptr old new mem)953 // result: (LoweredAtomicCas32 ptr (SignExt32to64 old) new mem)954 for {955 ptr := v_0956 old := v_1957 new := v_2958 mem := v_3959 v.reset(OpLOONG64LoweredAtomicCas32)960 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)961 v0.AddArg(old)962 v.AddArg4(ptr, v0, new, mem)963 return true964 }965}966func rewriteValueLOONG64_OpAtomicCompareAndSwap32Variant(v *Value) bool {967 v_3 := v.Args[3]968 v_2 := v.Args[2]969 v_1 := v.Args[1]970 v_0 := v.Args[0]971 b := v.Block972 typ := &b.Func.Config.Types973 // match: (AtomicCompareAndSwap32Variant ptr old new mem)974 // result: (LoweredAtomicCas32Variant ptr (SignExt32to64 old) new mem)975 for {976 ptr := v_0977 old := v_1978 new := v_2979 mem := v_3980 v.reset(OpLOONG64LoweredAtomicCas32Variant)981 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)982 v0.AddArg(old)983 v.AddArg4(ptr, v0, new, mem)984 return true985 }986}987func rewriteValueLOONG64_OpAtomicOr8(v *Value) bool {988 v_2 := v.Args[2]989 v_1 := v.Args[1]990 v_0 := v.Args[0]991 b := v.Block992 typ := &b.Func.Config.Types993 // match: (AtomicOr8 ptr val mem)994 // result: (LoweredAtomicOr32 (AND <typ.Uintptr> (MOVVconst [^3]) ptr) (SLLV <typ.UInt32> (ZeroExt8to32 val) (SLLVconst <typ.UInt64> [3] (ANDconst <typ.UInt64> [3] ptr))) mem)995 for {996 ptr := v_0997 val := v_1998 mem := v_2999 v.reset(OpLOONG64LoweredAtomicOr32)1000 v0 := b.NewValue0(v.Pos, OpLOONG64AND, typ.Uintptr)1001 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1002 v1.AuxInt = int64ToAuxInt(^3)1003 v0.AddArg2(v1, ptr)1004 v2 := b.NewValue0(v.Pos, OpLOONG64SLLV, typ.UInt32)1005 v3 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)1006 v3.AddArg(val)1007 v4 := b.NewValue0(v.Pos, OpLOONG64SLLVconst, typ.UInt64)1008 v4.AuxInt = int64ToAuxInt(3)1009 v5 := b.NewValue0(v.Pos, OpLOONG64ANDconst, typ.UInt64)1010 v5.AuxInt = int64ToAuxInt(3)1011 v5.AddArg(ptr)1012 v4.AddArg(v5)1013 v2.AddArg2(v3, v4)1014 v.AddArg3(v0, v2, mem)1015 return true1016 }1017}1018func rewriteValueLOONG64_OpAvg64u(v *Value) bool {1019 v_1 := v.Args[1]1020 v_0 := v.Args[0]1021 b := v.Block1022 // match: (Avg64u <t> x y)1023 // result: (ADDV (SRLVconst <t> (SUBV <t> x y) [1]) y)1024 for {1025 t := v.Type1026 x := v_01027 y := v_11028 v.reset(OpLOONG64ADDV)1029 v0 := b.NewValue0(v.Pos, OpLOONG64SRLVconst, t)1030 v0.AuxInt = int64ToAuxInt(1)1031 v1 := b.NewValue0(v.Pos, OpLOONG64SUBV, t)1032 v1.AddArg2(x, y)1033 v0.AddArg(v1)1034 v.AddArg2(v0, y)1035 return true1036 }1037}1038func rewriteValueLOONG64_OpBitLen16(v *Value) bool {1039 v_0 := v.Args[0]1040 b := v.Block1041 typ := &b.Func.Config.Types1042 // match: (BitLen16 x)1043 // result: (BitLen64 (ZeroExt16to64 x))1044 for {1045 x := v_01046 v.reset(OpBitLen64)1047 v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)1048 v0.AddArg(x)1049 v.AddArg(v0)1050 return true1051 }1052}1053func rewriteValueLOONG64_OpBitLen32(v *Value) bool {1054 v_0 := v.Args[0]1055 b := v.Block1056 // match: (BitLen32 <t> x)1057 // result: (NEGV <t> (SUBVconst <t> [32] (CLZW <t> x)))1058 for {1059 t := v.Type1060 x := v_01061 v.reset(OpLOONG64NEGV)1062 v.Type = t1063 v0 := b.NewValue0(v.Pos, OpLOONG64SUBVconst, t)1064 v0.AuxInt = int64ToAuxInt(32)1065 v1 := b.NewValue0(v.Pos, OpLOONG64CLZW, t)1066 v1.AddArg(x)1067 v0.AddArg(v1)1068 v.AddArg(v0)1069 return true1070 }1071}1072func rewriteValueLOONG64_OpBitLen64(v *Value) bool {1073 v_0 := v.Args[0]1074 b := v.Block1075 // match: (BitLen64 <t> x)1076 // result: (NEGV <t> (SUBVconst <t> [64] (CLZV <t> x)))1077 for {1078 t := v.Type1079 x := v_01080 v.reset(OpLOONG64NEGV)1081 v.Type = t1082 v0 := b.NewValue0(v.Pos, OpLOONG64SUBVconst, t)1083 v0.AuxInt = int64ToAuxInt(64)1084 v1 := b.NewValue0(v.Pos, OpLOONG64CLZV, t)1085 v1.AddArg(x)1086 v0.AddArg(v1)1087 v.AddArg(v0)1088 return true1089 }1090}1091func rewriteValueLOONG64_OpBitLen8(v *Value) bool {1092 v_0 := v.Args[0]1093 b := v.Block1094 typ := &b.Func.Config.Types1095 // match: (BitLen8 x)1096 // result: (BitLen64 (ZeroExt8to64 x))1097 for {1098 x := v_01099 v.reset(OpBitLen64)1100 v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)1101 v0.AddArg(x)1102 v.AddArg(v0)1103 return true1104 }1105}1106func rewriteValueLOONG64_OpBitRev16(v *Value) bool {1107 v_0 := v.Args[0]1108 b := v.Block1109 // match: (BitRev16 <t> x)1110 // result: (REVB2H (BITREV4B <t> x))1111 for {1112 t := v.Type1113 x := v_01114 v.reset(OpLOONG64REVB2H)1115 v0 := b.NewValue0(v.Pos, OpLOONG64BITREV4B, t)1116 v0.AddArg(x)1117 v.AddArg(v0)1118 return true1119 }1120}1121func rewriteValueLOONG64_OpCom16(v *Value) bool {1122 v_0 := v.Args[0]1123 b := v.Block1124 typ := &b.Func.Config.Types1125 // match: (Com16 x)1126 // result: (NOR (MOVVconst [0]) x)1127 for {1128 x := v_01129 v.reset(OpLOONG64NOR)1130 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1131 v0.AuxInt = int64ToAuxInt(0)1132 v.AddArg2(v0, x)1133 return true1134 }1135}1136func rewriteValueLOONG64_OpCom32(v *Value) bool {1137 v_0 := v.Args[0]1138 b := v.Block1139 typ := &b.Func.Config.Types1140 // match: (Com32 x)1141 // result: (NOR (MOVVconst [0]) x)1142 for {1143 x := v_01144 v.reset(OpLOONG64NOR)1145 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1146 v0.AuxInt = int64ToAuxInt(0)1147 v.AddArg2(v0, x)1148 return true1149 }1150}1151func rewriteValueLOONG64_OpCom64(v *Value) bool {1152 v_0 := v.Args[0]1153 b := v.Block1154 typ := &b.Func.Config.Types1155 // match: (Com64 x)1156 // result: (NOR (MOVVconst [0]) x)1157 for {1158 x := v_01159 v.reset(OpLOONG64NOR)1160 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1161 v0.AuxInt = int64ToAuxInt(0)1162 v.AddArg2(v0, x)1163 return true1164 }1165}1166func rewriteValueLOONG64_OpCom8(v *Value) bool {1167 v_0 := v.Args[0]1168 b := v.Block1169 typ := &b.Func.Config.Types1170 // match: (Com8 x)1171 // result: (NOR (MOVVconst [0]) x)1172 for {1173 x := v_01174 v.reset(OpLOONG64NOR)1175 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1176 v0.AuxInt = int64ToAuxInt(0)1177 v.AddArg2(v0, x)1178 return true1179 }1180}1181func rewriteValueLOONG64_OpCondSelect(v *Value) bool {1182 v_2 := v.Args[2]1183 v_1 := v.Args[1]1184 v_0 := v.Args[0]1185 b := v.Block1186 // match: (CondSelect <t> x y cond)1187 // result: (OR (MASKEQZ <t> x cond) (MASKNEZ <t> y cond))1188 for {1189 t := v.Type1190 x := v_01191 y := v_11192 cond := v_21193 v.reset(OpLOONG64OR)1194 v0 := b.NewValue0(v.Pos, OpLOONG64MASKEQZ, t)1195 v0.AddArg2(x, cond)1196 v1 := b.NewValue0(v.Pos, OpLOONG64MASKNEZ, t)1197 v1.AddArg2(y, cond)1198 v.AddArg2(v0, v1)1199 return true1200 }1201}1202func rewriteValueLOONG64_OpConst16(v *Value) bool {1203 // match: (Const16 [val])1204 // result: (MOVVconst [int64(val)])1205 for {1206 val := auxIntToInt16(v.AuxInt)1207 v.reset(OpLOONG64MOVVconst)1208 v.AuxInt = int64ToAuxInt(int64(val))1209 return true1210 }1211}1212func rewriteValueLOONG64_OpConst32(v *Value) bool {1213 // match: (Const32 [val])1214 // result: (MOVVconst [int64(val)])1215 for {1216 val := auxIntToInt32(v.AuxInt)1217 v.reset(OpLOONG64MOVVconst)1218 v.AuxInt = int64ToAuxInt(int64(val))1219 return true1220 }1221}1222func rewriteValueLOONG64_OpConst32F(v *Value) bool {1223 // match: (Const32F [val])1224 // result: (MOVFconst [float64(val)])1225 for {1226 val := auxIntToFloat32(v.AuxInt)1227 v.reset(OpLOONG64MOVFconst)1228 v.AuxInt = float64ToAuxInt(float64(val))1229 return true1230 }1231}1232func rewriteValueLOONG64_OpConst64(v *Value) bool {1233 // match: (Const64 [val])1234 // result: (MOVVconst [int64(val)])1235 for {1236 val := auxIntToInt64(v.AuxInt)1237 v.reset(OpLOONG64MOVVconst)1238 v.AuxInt = int64ToAuxInt(int64(val))1239 return true1240 }1241}1242func rewriteValueLOONG64_OpConst64F(v *Value) bool {1243 // match: (Const64F [val])1244 // result: (MOVDconst [float64(val)])1245 for {1246 val := auxIntToFloat64(v.AuxInt)1247 v.reset(OpLOONG64MOVDconst)1248 v.AuxInt = float64ToAuxInt(float64(val))1249 return true1250 }1251}1252func rewriteValueLOONG64_OpConst8(v *Value) bool {1253 // match: (Const8 [val])1254 // result: (MOVVconst [int64(val)])1255 for {1256 val := auxIntToInt8(v.AuxInt)1257 v.reset(OpLOONG64MOVVconst)1258 v.AuxInt = int64ToAuxInt(int64(val))1259 return true1260 }1261}1262func rewriteValueLOONG64_OpConstBool(v *Value) bool {1263 // match: (ConstBool [t])1264 // result: (MOVVconst [int64(b2i(t))])1265 for {1266 t := auxIntToBool(v.AuxInt)1267 v.reset(OpLOONG64MOVVconst)1268 v.AuxInt = int64ToAuxInt(int64(b2i(t)))1269 return true1270 }1271}1272func rewriteValueLOONG64_OpConstNil(v *Value) bool {1273 // match: (ConstNil)1274 // result: (MOVVconst [0])1275 for {1276 v.reset(OpLOONG64MOVVconst)1277 v.AuxInt = int64ToAuxInt(0)1278 return true1279 }1280}1281func rewriteValueLOONG64_OpCtz16(v *Value) bool {1282 v_0 := v.Args[0]1283 b := v.Block1284 typ := &b.Func.Config.Types1285 // match: (Ctz16 x)1286 // result: (CTZV (OR <typ.UInt64> x (MOVVconst [1<<16])))1287 for {1288 x := v_01289 v.reset(OpLOONG64CTZV)1290 v0 := b.NewValue0(v.Pos, OpLOONG64OR, typ.UInt64)1291 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1292 v1.AuxInt = int64ToAuxInt(1 << 16)1293 v0.AddArg2(x, v1)1294 v.AddArg(v0)1295 return true1296 }1297}1298func rewriteValueLOONG64_OpCtz8(v *Value) bool {1299 v_0 := v.Args[0]1300 b := v.Block1301 typ := &b.Func.Config.Types1302 // match: (Ctz8 x)1303 // result: (CTZV (OR <typ.UInt64> x (MOVVconst [1<<8])))1304 for {1305 x := v_01306 v.reset(OpLOONG64CTZV)1307 v0 := b.NewValue0(v.Pos, OpLOONG64OR, typ.UInt64)1308 v1 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1309 v1.AuxInt = int64ToAuxInt(1 << 8)1310 v0.AddArg2(x, v1)1311 v.AddArg(v0)1312 return true1313 }1314}1315func rewriteValueLOONG64_OpDiv16(v *Value) bool {1316 v_1 := v.Args[1]1317 v_0 := v.Args[0]1318 b := v.Block1319 typ := &b.Func.Config.Types1320 // match: (Div16 x y)1321 // result: (DIVV (SignExt16to64 x) (SignExt16to64 y))1322 for {1323 x := v_01324 y := v_11325 v.reset(OpLOONG64DIVV)1326 v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)1327 v0.AddArg(x)1328 v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)1329 v1.AddArg(y)1330 v.AddArg2(v0, v1)1331 return true1332 }1333}1334func rewriteValueLOONG64_OpDiv16u(v *Value) bool {1335 v_1 := v.Args[1]1336 v_0 := v.Args[0]1337 b := v.Block1338 typ := &b.Func.Config.Types1339 // match: (Div16u x y)1340 // result: (DIVVU (ZeroExt16to64 x) (ZeroExt16to64 y))1341 for {1342 x := v_01343 y := v_11344 v.reset(OpLOONG64DIVVU)1345 v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)1346 v0.AddArg(x)1347 v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)1348 v1.AddArg(y)1349 v.AddArg2(v0, v1)1350 return true1351 }1352}1353func rewriteValueLOONG64_OpDiv32(v *Value) bool {1354 v_1 := v.Args[1]1355 v_0 := v.Args[0]1356 b := v.Block1357 typ := &b.Func.Config.Types1358 // match: (Div32 x y)1359 // result: (DIVV (SignExt32to64 x) (SignExt32to64 y))1360 for {1361 x := v_01362 y := v_11363 v.reset(OpLOONG64DIVV)1364 v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)1365 v0.AddArg(x)1366 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)1367 v1.AddArg(y)1368 v.AddArg2(v0, v1)1369 return true1370 }1371}1372func rewriteValueLOONG64_OpDiv32u(v *Value) bool {1373 v_1 := v.Args[1]1374 v_0 := v.Args[0]1375 b := v.Block1376 typ := &b.Func.Config.Types1377 // match: (Div32u x y)1378 // result: (DIVVU (ZeroExt32to64 x) (ZeroExt32to64 y))1379 for {1380 x := v_01381 y := v_11382 v.reset(OpLOONG64DIVVU)1383 v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)1384 v0.AddArg(x)1385 v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)1386 v1.AddArg(y)1387 v.AddArg2(v0, v1)1388 return true1389 }1390}1391func rewriteValueLOONG64_OpDiv64(v *Value) bool {1392 v_1 := v.Args[1]1393 v_0 := v.Args[0]1394 // match: (Div64 x y)1395 // result: (DIVV x y)1396 for {1397 x := v_01398 y := v_11399 v.reset(OpLOONG64DIVV)1400 v.AddArg2(x, y)1401 return true1402 }1403}1404func rewriteValueLOONG64_OpDiv8(v *Value) bool {1405 v_1 := v.Args[1]1406 v_0 := v.Args[0]1407 b := v.Block1408 typ := &b.Func.Config.Types1409 // match: (Div8 x y)1410 // result: (DIVV (SignExt8to64 x) (SignExt8to64 y))1411 for {1412 x := v_01413 y := v_11414 v.reset(OpLOONG64DIVV)1415 v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)1416 v0.AddArg(x)1417 v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)1418 v1.AddArg(y)1419 v.AddArg2(v0, v1)1420 return true1421 }1422}1423func rewriteValueLOONG64_OpDiv8u(v *Value) bool {1424 v_1 := v.Args[1]1425 v_0 := v.Args[0]1426 b := v.Block1427 typ := &b.Func.Config.Types1428 // match: (Div8u x y)1429 // result: (DIVVU (ZeroExt8to64 x) (ZeroExt8to64 y))1430 for {1431 x := v_01432 y := v_11433 v.reset(OpLOONG64DIVVU)1434 v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)1435 v0.AddArg(x)1436 v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)1437 v1.AddArg(y)1438 v.AddArg2(v0, v1)1439 return true1440 }1441}1442func rewriteValueLOONG64_OpEq16(v *Value) bool {1443 v_1 := v.Args[1]1444 v_0 := v.Args[0]1445 b := v.Block1446 typ := &b.Func.Config.Types1447 // match: (Eq16 x y)1448 // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt16to64 x) (ZeroExt16to64 y)))1449 for {1450 x := v_01451 y := v_11452 v.reset(OpLOONG64SGTU)1453 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1454 v0.AuxInt = int64ToAuxInt(1)1455 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)1456 v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)1457 v2.AddArg(x)1458 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)1459 v3.AddArg(y)1460 v1.AddArg2(v2, v3)1461 v.AddArg2(v0, v1)1462 return true1463 }1464}1465func rewriteValueLOONG64_OpEq32(v *Value) bool {1466 v_1 := v.Args[1]1467 v_0 := v.Args[0]1468 b := v.Block1469 typ := &b.Func.Config.Types1470 // match: (Eq32 x y)1471 // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt32to64 x) (ZeroExt32to64 y)))1472 for {1473 x := v_01474 y := v_11475 v.reset(OpLOONG64SGTU)1476 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1477 v0.AuxInt = int64ToAuxInt(1)1478 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)1479 v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)1480 v2.AddArg(x)1481 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)1482 v3.AddArg(y)1483 v1.AddArg2(v2, v3)1484 v.AddArg2(v0, v1)1485 return true1486 }1487}1488func rewriteValueLOONG64_OpEq32F(v *Value) bool {1489 v_1 := v.Args[1]1490 v_0 := v.Args[0]1491 b := v.Block1492 // match: (Eq32F x y)1493 // result: (FPFlagTrue (CMPEQF x y))1494 for {1495 x := v_01496 y := v_11497 v.reset(OpLOONG64FPFlagTrue)1498 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQF, types.TypeFlags)1499 v0.AddArg2(x, y)1500 v.AddArg(v0)1501 return true1502 }1503}1504func rewriteValueLOONG64_OpEq64(v *Value) bool {1505 v_1 := v.Args[1]1506 v_0 := v.Args[0]1507 b := v.Block1508 typ := &b.Func.Config.Types1509 // match: (Eq64 x y)1510 // result: (SGTU (MOVVconst [1]) (XOR x y))1511 for {1512 x := v_01513 y := v_11514 v.reset(OpLOONG64SGTU)1515 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1516 v0.AuxInt = int64ToAuxInt(1)1517 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)1518 v1.AddArg2(x, y)1519 v.AddArg2(v0, v1)1520 return true1521 }1522}1523func rewriteValueLOONG64_OpEq64F(v *Value) bool {1524 v_1 := v.Args[1]1525 v_0 := v.Args[0]1526 b := v.Block1527 // match: (Eq64F x y)1528 // result: (FPFlagTrue (CMPEQD x y))1529 for {1530 x := v_01531 y := v_11532 v.reset(OpLOONG64FPFlagTrue)1533 v0 := b.NewValue0(v.Pos, OpLOONG64CMPEQD, types.TypeFlags)1534 v0.AddArg2(x, y)1535 v.AddArg(v0)1536 return true1537 }1538}1539func rewriteValueLOONG64_OpEq8(v *Value) bool {1540 v_1 := v.Args[1]1541 v_0 := v.Args[0]1542 b := v.Block1543 typ := &b.Func.Config.Types1544 // match: (Eq8 x y)1545 // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt8to64 x) (ZeroExt8to64 y)))1546 for {1547 x := v_01548 y := v_11549 v.reset(OpLOONG64SGTU)1550 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1551 v0.AuxInt = int64ToAuxInt(1)1552 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)1553 v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)1554 v2.AddArg(x)1555 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)1556 v3.AddArg(y)1557 v1.AddArg2(v2, v3)1558 v.AddArg2(v0, v1)1559 return true1560 }1561}1562func rewriteValueLOONG64_OpEqB(v *Value) bool {1563 v_1 := v.Args[1]1564 v_0 := v.Args[0]1565 b := v.Block1566 typ := &b.Func.Config.Types1567 // match: (EqB x y)1568 // result: (XOR (MOVVconst [1]) (XOR <typ.Bool> x y))1569 for {1570 x := v_01571 y := v_11572 v.reset(OpLOONG64XOR)1573 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1574 v0.AuxInt = int64ToAuxInt(1)1575 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.Bool)1576 v1.AddArg2(x, y)1577 v.AddArg2(v0, v1)1578 return true1579 }1580}1581func rewriteValueLOONG64_OpEqPtr(v *Value) bool {1582 v_1 := v.Args[1]1583 v_0 := v.Args[0]1584 b := v.Block1585 typ := &b.Func.Config.Types1586 // match: (EqPtr x y)1587 // result: (SGTU (MOVVconst [1]) (XOR x y))1588 for {1589 x := v_01590 y := v_11591 v.reset(OpLOONG64SGTU)1592 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1593 v0.AuxInt = int64ToAuxInt(1)1594 v1 := b.NewValue0(v.Pos, OpLOONG64XOR, typ.UInt64)1595 v1.AddArg2(x, y)1596 v.AddArg2(v0, v1)1597 return true1598 }1599}1600func rewriteValueLOONG64_OpIsInBounds(v *Value) bool {1601 v_1 := v.Args[1]1602 v_0 := v.Args[0]1603 // match: (IsInBounds idx len)1604 // result: (SGTU len idx)1605 for {1606 idx := v_01607 len := v_11608 v.reset(OpLOONG64SGTU)1609 v.AddArg2(len, idx)1610 return true1611 }1612}1613func rewriteValueLOONG64_OpIsNonNil(v *Value) bool {1614 v_0 := v.Args[0]1615 b := v.Block1616 typ := &b.Func.Config.Types1617 // match: (IsNonNil ptr)1618 // result: (SGTU ptr (MOVVconst [0]))1619 for {1620 ptr := v_01621 v.reset(OpLOONG64SGTU)1622 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1623 v0.AuxInt = int64ToAuxInt(0)1624 v.AddArg2(ptr, v0)1625 return true1626 }1627}1628func rewriteValueLOONG64_OpIsSliceInBounds(v *Value) bool {1629 v_1 := v.Args[1]1630 v_0 := v.Args[0]1631 b := v.Block1632 typ := &b.Func.Config.Types1633 // match: (IsSliceInBounds idx len)1634 // result: (XOR (MOVVconst [1]) (SGTU idx len))1635 for {1636 idx := v_01637 len := v_11638 v.reset(OpLOONG64XOR)1639 v0 := b.NewValue0(v.Pos, OpLOONG64MOVVconst, typ.UInt64)1640 v0.AuxInt = int64ToAuxInt(1)1641 v1 := b.NewValue0(v.Pos, OpLOONG64SGTU, typ.Bool)1642 v1.AddArg2(idx, len)1643 v.AddArg2(v0, v1)1644 return true1645 }1646}1647func rewriteValueLOONG64_OpLOONG64ADDD(v *Value) bool {1648 v_1 := v.Args[1]1649 v_0 := v.Args[0]1650 // match: (ADDD (MULD x y) z)1651 // cond: z.Block.Func.useFMA(v)1652 // result: (FMADDD x y z)1653 for {1654 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1655 if v_0.Op != OpLOONG64MULD {1656 continue1657 }1658 y := v_0.Args[1]1659 x := v_0.Args[0]1660 z := v_11661 if !(z.Block.Func.useFMA(v)) {1662 continue1663 }1664 v.reset(OpLOONG64FMADDD)1665 v.AddArg3(x, y, z)1666 return true1667 }1668 break1669 }1670 // match: (ADDD z (NEGD (MULD x y)))1671 // cond: z.Block.Func.useFMA(v)1672 // result: (FNMSUBD x y z)1673 for {1674 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1675 z := v_01676 if v_1.Op != OpLOONG64NEGD {1677 continue1678 }1679 v_1_0 := v_1.Args[0]1680 if v_1_0.Op != OpLOONG64MULD {1681 continue1682 }1683 y := v_1_0.Args[1]1684 x := v_1_0.Args[0]1685 if !(z.Block.Func.useFMA(v)) {1686 continue1687 }1688 v.reset(OpLOONG64FNMSUBD)1689 v.AddArg3(x, y, z)1690 return true1691 }1692 break1693 }1694 return false1695}1696func rewriteValueLOONG64_OpLOONG64ADDF(v *Value) bool {1697 v_1 := v.Args[1]1698 v_0 := v.Args[0]1699 // match: (ADDF (MULF x y) z)1700 // cond: z.Block.Func.useFMA(v)1701 // result: (FMADDF x y z)1702 for {1703 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1704 if v_0.Op != OpLOONG64MULF {1705 continue1706 }1707 y := v_0.Args[1]1708 x := v_0.Args[0]1709 z := v_11710 if !(z.Block.Func.useFMA(v)) {1711 continue1712 }1713 v.reset(OpLOONG64FMADDF)1714 v.AddArg3(x, y, z)1715 return true1716 }1717 break1718 }1719 // match: (ADDF z (NEGF (MULF x y)))1720 // cond: z.Block.Func.useFMA(v)1721 // result: (FNMSUBF x y z)1722 for {1723 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1724 z := v_01725 if v_1.Op != OpLOONG64NEGF {1726 continue1727 }1728 v_1_0 := v_1.Args[0]1729 if v_1_0.Op != OpLOONG64MULF {1730 continue1731 }1732 y := v_1_0.Args[1]1733 x := v_1_0.Args[0]1734 if !(z.Block.Func.useFMA(v)) {1735 continue1736 }1737 v.reset(OpLOONG64FNMSUBF)1738 v.AddArg3(x, y, z)1739 return true1740 }1741 break1742 }1743 return false1744}1745func rewriteValueLOONG64_OpLOONG64ADDV(v *Value) bool {1746 v_1 := v.Args[1]1747 v_0 := v.Args[0]1748 b := v.Block1749 typ := &b.Func.Config.Types1750 // match: (ADDV <typ.UInt16> (SRLVconst [8] <typ.UInt16> x) (SLLVconst [8] <typ.UInt16> x))1751 // result: (REVB2H x)1752 for {1753 if v.Type != typ.UInt16 {1754 break1755 }1756 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1757 if v_0.Op != OpLOONG64SRLVconst || v_0.Type != typ.UInt16 || auxIntToInt64(v_0.AuxInt) != 8 {1758 continue1759 }1760 x := v_0.Args[0]1761 if v_1.Op != OpLOONG64SLLVconst || v_1.Type != typ.UInt16 || auxIntToInt64(v_1.AuxInt) != 8 || x != v_1.Args[0] {1762 continue1763 }1764 v.reset(OpLOONG64REVB2H)1765 v.AddArg(x)1766 return true1767 }1768 break1769 }1770 // match: (ADDV (SRLconst [8] (ANDconst [c1] x)) (SLLconst [8] (ANDconst [c2] x)))1771 // cond: uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff1772 // result: (REVB2H x)1773 for {1774 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1775 if v_0.Op != OpLOONG64SRLconst || auxIntToInt64(v_0.AuxInt) != 8 {1776 continue1777 }1778 v_0_0 := v_0.Args[0]1779 if v_0_0.Op != OpLOONG64ANDconst {1780 continue1781 }1782 c1 := auxIntToInt64(v_0_0.AuxInt)1783 x := v_0_0.Args[0]1784 if v_1.Op != OpLOONG64SLLconst || auxIntToInt64(v_1.AuxInt) != 8 {1785 continue1786 }1787 v_1_0 := v_1.Args[0]1788 if v_1_0.Op != OpLOONG64ANDconst {1789 continue1790 }1791 c2 := auxIntToInt64(v_1_0.AuxInt)1792 if x != v_1_0.Args[0] || !(uint32(c1) == 0xff00ff00 && uint32(c2) == 0x00ff00ff) {1793 continue1794 }1795 v.reset(OpLOONG64REVB2H)1796 v.AddArg(x)1797 return true1798 }1799 break1800 }1801 // match: (ADDV (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (AND (MOVVconst [c2]) x)))1802 // cond: uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff1803 // result: (REVB4H x)1804 for {1805 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1806 if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 {1807 continue1808 }1809 v_0_0 := v_0.Args[0]1810 if v_0_0.Op != OpLOONG64AND {1811 continue1812 }1813 _ = v_0_0.Args[1]1814 v_0_0_0 := v_0_0.Args[0]1815 v_0_0_1 := v_0_0.Args[1]1816 for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 {1817 if v_0_0_0.Op != OpLOONG64MOVVconst {1818 continue1819 }1820 c1 := auxIntToInt64(v_0_0_0.AuxInt)1821 x := v_0_0_11822 if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 {1823 continue1824 }1825 v_1_0 := v_1.Args[0]1826 if v_1_0.Op != OpLOONG64AND {1827 continue1828 }1829 _ = v_1_0.Args[1]1830 v_1_0_0 := v_1_0.Args[0]1831 v_1_0_1 := v_1_0.Args[1]1832 for _i2 := 0; _i2 <= 1; _i2, v_1_0_0, v_1_0_1 = _i2+1, v_1_0_1, v_1_0_0 {1833 if v_1_0_0.Op != OpLOONG64MOVVconst {1834 continue1835 }1836 c2 := auxIntToInt64(v_1_0_0.AuxInt)1837 if x != v_1_0_1 || !(uint64(c1) == 0xff00ff00ff00ff00 && uint64(c2) == 0x00ff00ff00ff00ff) {1838 continue1839 }1840 v.reset(OpLOONG64REVB4H)1841 v.AddArg(x)1842 return true1843 }1844 }1845 }1846 break1847 }1848 // match: (ADDV (SRLVconst [8] (AND (MOVVconst [c1]) x)) (SLLVconst [8] (ANDconst [c2] x)))1849 // cond: uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff1850 // result: (REVB4H (ANDconst <x.Type> [0xffffffff] x))1851 for {1852 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1853 if v_0.Op != OpLOONG64SRLVconst || auxIntToInt64(v_0.AuxInt) != 8 {1854 continue1855 }1856 v_0_0 := v_0.Args[0]1857 if v_0_0.Op != OpLOONG64AND {1858 continue1859 }1860 _ = v_0_0.Args[1]1861 v_0_0_0 := v_0_0.Args[0]1862 v_0_0_1 := v_0_0.Args[1]1863 for _i1 := 0; _i1 <= 1; _i1, v_0_0_0, v_0_0_1 = _i1+1, v_0_0_1, v_0_0_0 {1864 if v_0_0_0.Op != OpLOONG64MOVVconst {1865 continue1866 }1867 c1 := auxIntToInt64(v_0_0_0.AuxInt)1868 x := v_0_0_11869 if v_1.Op != OpLOONG64SLLVconst || auxIntToInt64(v_1.AuxInt) != 8 {1870 continue1871 }1872 v_1_0 := v_1.Args[0]1873 if v_1_0.Op != OpLOONG64ANDconst {1874 continue1875 }1876 c2 := auxIntToInt64(v_1_0.AuxInt)1877 if x != v_1_0.Args[0] || !(uint64(c1) == 0xff00ff00 && uint64(c2) == 0x00ff00ff) {1878 continue1879 }1880 v.reset(OpLOONG64REVB4H)1881 v0 := b.NewValue0(v.Pos, OpLOONG64ANDconst, x.Type)1882 v0.AuxInt = int64ToAuxInt(0xffffffff)1883 v0.AddArg(x)1884 v.AddArg(v0)1885 return true1886 }1887 }1888 break1889 }1890 // match: (ADDV x (MOVVconst <t> [c]))1891 // cond: is32Bit(c) && !t.IsPtr()1892 // result: (ADDVconst [c] x)1893 for {1894 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1895 x := v_01896 if v_1.Op != OpLOONG64MOVVconst {1897 continue1898 }1899 t := v_1.Type1900 c := auxIntToInt64(v_1.AuxInt)1901 if !(is32Bit(c) && !t.IsPtr()) {1902 continue1903 }1904 v.reset(OpLOONG64ADDVconst)1905 v.AuxInt = int64ToAuxInt(c)1906 v.AddArg(x)1907 return true1908 }1909 break1910 }1911 // match: (ADDV x0 x1:(SLLVconst [c] y))1912 // cond: x1.Uses == 1 && c > 0 && c <= 41913 // result: (ADDshiftLLV x0 y [c])1914 for {1915 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1916 x0 := v_01917 x1 := v_11918 if x1.Op != OpLOONG64SLLVconst {1919 continue1920 }1921 c := auxIntToInt64(x1.AuxInt)1922 y := x1.Args[0]1923 if !(x1.Uses == 1 && c > 0 && c <= 4) {1924 continue1925 }1926 v.reset(OpLOONG64ADDshiftLLV)1927 v.AuxInt = int64ToAuxInt(c)1928 v.AddArg2(x0, y)1929 return true1930 }1931 break1932 }1933 // match: (ADDV x (NEGV y))1934 // result: (SUBV x y)1935 for {1936 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {1937 x := v_01938 if v_1.Op != OpLOONG64NEGV {1939 continue1940 }1941 y := v_1.Args[0]1942 v.reset(OpLOONG64SUBV)1943 v.AddArg2(x, y)1944 return true1945 }1946 break1947 }1948 return false1949}1950func rewriteValueLOONG64_OpLOONG64ADDVconst(v *Value) bool {1951 v_0 := v.Args[0]1952 // match: (ADDVconst [off1] (MOVVaddr [off2] {sym} ptr))1953 // cond: is32Bit(off1+int64(off2))1954 // result: (MOVVaddr [int32(off1)+int32(off2)] {sym} ptr)1955 for {1956 off1 := auxIntToInt64(v.AuxInt)1957 if v_0.Op != OpLOONG64MOVVaddr {1958 break1959 }1960 off2 := auxIntToInt32(v_0.AuxInt)1961 sym := auxToSym(v_0.Aux)1962 ptr := v_0.Args[0]1963 if !(is32Bit(off1 + int64(off2))) {1964 break1965 }1966 v.reset(OpLOONG64MOVVaddr)1967 v.AuxInt = int32ToAuxInt(int32(off1) + int32(off2))1968 v.Aux = symToAux(sym)1969 v.AddArg(ptr)1970 return true1971 }1972 // match: (ADDVconst [0] x)1973 // result: x1974 for {1975 if auxIntToInt64(v.AuxInt) != 0 {1976 break1977 }1978 x := v_01979 v.copyOf(x)1980 return true1981 }1982 // match: (ADDVconst [c] (MOVVconst [d]))1983 // result: (MOVVconst [c+d])1984 for {1985 c := auxIntToInt64(v.AuxInt)1986 if v_0.Op != OpLOONG64MOVVconst {1987 break1988 }1989 d := auxIntToInt64(v_0.AuxInt)1990 v.reset(OpLOONG64MOVVconst)1991 v.AuxInt = int64ToAuxInt(c + d)1992 return true1993 }1994 // match: (ADDVconst [c] (ADDVconst [d] x))1995 // cond: is32Bit(c+d)1996 // result: (ADDVconst [c+d] x)1997 for {1998 c := auxIntToInt64(v.AuxInt)1999 if v_0.Op != OpLOONG64ADDVconst {2000 break
Findings
✓ No findings reported for this file.