src/cmd/compile/internal/ssa/rewriteLOONG64.go GO 12,905 lines View on github.com → Search inside
File is large — showing lines 1–2,000 of 12,905.
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.

Get this view in your editor

Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.