1// Code generated from _gen/S390X.rules using 'go generate'; DO NOT EDIT.23package s390x45import "math"6import "cmd/compile/internal/types"7import "cmd/compile/internal/ssa/block"8import "cmd/internal/obj/s390x"9import "cmd/compile/internal/ssa/ssaop"10import "cmd/compile/internal/ssa"1112func RewriteValue(v *ssa.Value) bool {13 switch v.Op {14 case ssaop.OpAdd16:15 v.Op = ssaop.OpS390XADDW16 return true17 case ssaop.OpAdd32:18 v.Op = ssaop.OpS390XADDW19 return true20 case ssaop.OpAdd32F:21 return rewriteValue_OpAdd32F(v)22 case ssaop.OpAdd64:23 v.Op = ssaop.OpS390XADD24 return true25 case ssaop.OpAdd64F:26 return rewriteValue_OpAdd64F(v)27 case ssaop.OpAdd8:28 v.Op = ssaop.OpS390XADDW29 return true30 case ssaop.OpAddPtr:31 v.Op = ssaop.OpS390XADD32 return true33 case ssaop.OpAddr:34 return rewriteValue_OpAddr(v)35 case ssaop.OpAnd16:36 v.Op = ssaop.OpS390XANDW37 return true38 case ssaop.OpAnd32:39 v.Op = ssaop.OpS390XANDW40 return true41 case ssaop.OpAnd64:42 v.Op = ssaop.OpS390XAND43 return true44 case ssaop.OpAnd8:45 v.Op = ssaop.OpS390XANDW46 return true47 case ssaop.OpAndB:48 v.Op = ssaop.OpS390XANDW49 return true50 case ssaop.OpAtomicAdd32:51 return rewriteValue_OpAtomicAdd32(v)52 case ssaop.OpAtomicAdd64:53 return rewriteValue_OpAtomicAdd64(v)54 case ssaop.OpAtomicAnd32:55 v.Op = ssaop.OpS390XLAN56 return true57 case ssaop.OpAtomicAnd8:58 return rewriteValue_OpAtomicAnd8(v)59 case ssaop.OpAtomicCompareAndSwap32:60 return rewriteValue_OpAtomicCompareAndSwap32(v)61 case ssaop.OpAtomicCompareAndSwap64:62 return rewriteValue_OpAtomicCompareAndSwap64(v)63 case ssaop.OpAtomicExchange32:64 return rewriteValue_OpAtomicExchange32(v)65 case ssaop.OpAtomicExchange64:66 return rewriteValue_OpAtomicExchange64(v)67 case ssaop.OpAtomicLoad32:68 return rewriteValue_OpAtomicLoad32(v)69 case ssaop.OpAtomicLoad64:70 return rewriteValue_OpAtomicLoad64(v)71 case ssaop.OpAtomicLoad8:72 return rewriteValue_OpAtomicLoad8(v)73 case ssaop.OpAtomicLoadAcq32:74 return rewriteValue_OpAtomicLoadAcq32(v)75 case ssaop.OpAtomicLoadPtr:76 return rewriteValue_OpAtomicLoadPtr(v)77 case ssaop.OpAtomicOr32:78 v.Op = ssaop.OpS390XLAO79 return true80 case ssaop.OpAtomicOr8:81 return rewriteValue_OpAtomicOr8(v)82 case ssaop.OpAtomicStore32:83 return rewriteValue_OpAtomicStore32(v)84 case ssaop.OpAtomicStore64:85 return rewriteValue_OpAtomicStore64(v)86 case ssaop.OpAtomicStore8:87 return rewriteValue_OpAtomicStore8(v)88 case ssaop.OpAtomicStorePtrNoWB:89 return rewriteValue_OpAtomicStorePtrNoWB(v)90 case ssaop.OpAtomicStoreRel32:91 return rewriteValue_OpAtomicStoreRel32(v)92 case ssaop.OpAvg64u:93 return rewriteValue_OpAvg64u(v)94 case ssaop.OpBitLen16:95 return rewriteValue_OpBitLen16(v)96 case ssaop.OpBitLen32:97 return rewriteValue_OpBitLen32(v)98 case ssaop.OpBitLen64:99 return rewriteValue_OpBitLen64(v)100 case ssaop.OpBitLen8:101 return rewriteValue_OpBitLen8(v)102 case ssaop.OpBswap16:103 return rewriteValue_OpBswap16(v)104 case ssaop.OpBswap32:105 v.Op = ssaop.OpS390XMOVWBR106 return true107 case ssaop.OpBswap64:108 v.Op = ssaop.OpS390XMOVDBR109 return true110 case ssaop.OpCeil:111 return rewriteValue_OpCeil(v)112 case ssaop.OpClosureCall:113 v.Op = ssaop.OpS390XCALLclosure114 return true115 case ssaop.OpCom16:116 v.Op = ssaop.OpS390XNOTW117 return true118 case ssaop.OpCom32:119 v.Op = ssaop.OpS390XNOTW120 return true121 case ssaop.OpCom64:122 v.Op = ssaop.OpS390XNOT123 return true124 case ssaop.OpCom8:125 v.Op = ssaop.OpS390XNOTW126 return true127 case ssaop.OpConst16:128 return rewriteValue_OpConst16(v)129 case ssaop.OpConst32:130 return rewriteValue_OpConst32(v)131 case ssaop.OpConst32F:132 v.Op = ssaop.OpS390XFMOVSconst133 return true134 case ssaop.OpConst64:135 return rewriteValue_OpConst64(v)136 case ssaop.OpConst64F:137 v.Op = ssaop.OpS390XFMOVDconst138 return true139 case ssaop.OpConst8:140 return rewriteValue_OpConst8(v)141 case ssaop.OpConstBool:142 return rewriteValue_OpConstBool(v)143 case ssaop.OpConstNil:144 return rewriteValue_OpConstNil(v)145 case ssaop.OpCtz16:146 return rewriteValue_OpCtz16(v)147 case ssaop.OpCtz16NonZero:148 v.Op = ssaop.OpCtz64149 return true150 case ssaop.OpCtz32:151 return rewriteValue_OpCtz32(v)152 case ssaop.OpCtz32NonZero:153 v.Op = ssaop.OpCtz64154 return true155 case ssaop.OpCtz64:156 return rewriteValue_OpCtz64(v)157 case ssaop.OpCtz64NonZero:158 v.Op = ssaop.OpCtz64159 return true160 case ssaop.OpCtz8:161 return rewriteValue_OpCtz8(v)162 case ssaop.OpCtz8NonZero:163 v.Op = ssaop.OpCtz64164 return true165 case ssaop.OpCvt32Fto32:166 v.Op = ssaop.OpS390XCFEBRA167 return true168 case ssaop.OpCvt32Fto32U:169 v.Op = ssaop.OpS390XCLFEBR170 return true171 case ssaop.OpCvt32Fto64:172 v.Op = ssaop.OpS390XCGEBRA173 return true174 case ssaop.OpCvt32Fto64F:175 v.Op = ssaop.OpS390XLDEBR176 return true177 case ssaop.OpCvt32Fto64U:178 v.Op = ssaop.OpS390XCLGEBR179 return true180 case ssaop.OpCvt32Uto32F:181 v.Op = ssaop.OpS390XCELFBR182 return true183 case ssaop.OpCvt32Uto64F:184 v.Op = ssaop.OpS390XCDLFBR185 return true186 case ssaop.OpCvt32to32F:187 v.Op = ssaop.OpS390XCEFBRA188 return true189 case ssaop.OpCvt32to64F:190 v.Op = ssaop.OpS390XCDFBRA191 return true192 case ssaop.OpCvt64Fto32:193 v.Op = ssaop.OpS390XCFDBRA194 return true195 case ssaop.OpCvt64Fto32F:196 v.Op = ssaop.OpS390XLEDBR197 return true198 case ssaop.OpCvt64Fto32U:199 v.Op = ssaop.OpS390XCLFDBR200 return true201 case ssaop.OpCvt64Fto64:202 v.Op = ssaop.OpS390XCGDBRA203 return true204 case ssaop.OpCvt64Fto64U:205 v.Op = ssaop.OpS390XCLGDBR206 return true207 case ssaop.OpCvt64Uto32F:208 v.Op = ssaop.OpS390XCELGBR209 return true210 case ssaop.OpCvt64Uto64F:211 v.Op = ssaop.OpS390XCDLGBR212 return true213 case ssaop.OpCvt64to32F:214 v.Op = ssaop.OpS390XCEGBRA215 return true216 case ssaop.OpCvt64to64F:217 v.Op = ssaop.OpS390XCDGBRA218 return true219 case ssaop.OpCvtBoolToUint8:220 v.Op = ssaop.OpCopy221 return true222 case ssaop.OpDiv16:223 return rewriteValue_OpDiv16(v)224 case ssaop.OpDiv16u:225 return rewriteValue_OpDiv16u(v)226 case ssaop.OpDiv32:227 return rewriteValue_OpDiv32(v)228 case ssaop.OpDiv32F:229 v.Op = ssaop.OpS390XFDIVS230 return true231 case ssaop.OpDiv32u:232 return rewriteValue_OpDiv32u(v)233 case ssaop.OpDiv64:234 return rewriteValue_OpDiv64(v)235 case ssaop.OpDiv64F:236 v.Op = ssaop.OpS390XFDIV237 return true238 case ssaop.OpDiv64u:239 v.Op = ssaop.OpS390XDIVDU240 return true241 case ssaop.OpDiv8:242 return rewriteValue_OpDiv8(v)243 case ssaop.OpDiv8u:244 return rewriteValue_OpDiv8u(v)245 case ssaop.OpEq16:246 return rewriteValue_OpEq16(v)247 case ssaop.OpEq32:248 return rewriteValue_OpEq32(v)249 case ssaop.OpEq32F:250 return rewriteValue_OpEq32F(v)251 case ssaop.OpEq64:252 return rewriteValue_OpEq64(v)253 case ssaop.OpEq64F:254 return rewriteValue_OpEq64F(v)255 case ssaop.OpEq8:256 return rewriteValue_OpEq8(v)257 case ssaop.OpEqB:258 return rewriteValue_OpEqB(v)259 case ssaop.OpEqPtr:260 return rewriteValue_OpEqPtr(v)261 case ssaop.OpFMA:262 return rewriteValue_OpFMA(v)263 case ssaop.OpFloor:264 return rewriteValue_OpFloor(v)265 case ssaop.OpGetCallerPC:266 v.Op = ssaop.OpS390XLoweredGetCallerPC267 return true268 case ssaop.OpGetCallerSP:269 v.Op = ssaop.OpS390XLoweredGetCallerSP270 return true271 case ssaop.OpGetClosurePtr:272 v.Op = ssaop.OpS390XLoweredGetClosurePtr273 return true274 case ssaop.OpGetG:275 v.Op = ssaop.OpS390XLoweredGetG276 return true277 case ssaop.OpHmul32:278 return rewriteValue_OpHmul32(v)279 case ssaop.OpHmul32u:280 return rewriteValue_OpHmul32u(v)281 case ssaop.OpHmul64:282 v.Op = ssaop.OpS390XMULHD283 return true284 case ssaop.OpHmul64u:285 v.Op = ssaop.OpS390XMULHDU286 return true287 case ssaop.OpITab:288 return rewriteValue_OpITab(v)289 case ssaop.OpInterCall:290 v.Op = ssaop.OpS390XCALLinter291 return true292 case ssaop.OpIsInBounds:293 return rewriteValue_OpIsInBounds(v)294 case ssaop.OpIsNonNil:295 return rewriteValue_OpIsNonNil(v)296 case ssaop.OpIsSliceInBounds:297 return rewriteValue_OpIsSliceInBounds(v)298 case ssaop.OpLeq16:299 return rewriteValue_OpLeq16(v)300 case ssaop.OpLeq16U:301 return rewriteValue_OpLeq16U(v)302 case ssaop.OpLeq32:303 return rewriteValue_OpLeq32(v)304 case ssaop.OpLeq32F:305 return rewriteValue_OpLeq32F(v)306 case ssaop.OpLeq32U:307 return rewriteValue_OpLeq32U(v)308 case ssaop.OpLeq64:309 return rewriteValue_OpLeq64(v)310 case ssaop.OpLeq64F:311 return rewriteValue_OpLeq64F(v)312 case ssaop.OpLeq64U:313 return rewriteValue_OpLeq64U(v)314 case ssaop.OpLeq8:315 return rewriteValue_OpLeq8(v)316 case ssaop.OpLeq8U:317 return rewriteValue_OpLeq8U(v)318 case ssaop.OpLess16:319 return rewriteValue_OpLess16(v)320 case ssaop.OpLess16U:321 return rewriteValue_OpLess16U(v)322 case ssaop.OpLess32:323 return rewriteValue_OpLess32(v)324 case ssaop.OpLess32F:325 return rewriteValue_OpLess32F(v)326 case ssaop.OpLess32U:327 return rewriteValue_OpLess32U(v)328 case ssaop.OpLess64:329 return rewriteValue_OpLess64(v)330 case ssaop.OpLess64F:331 return rewriteValue_OpLess64F(v)332 case ssaop.OpLess64U:333 return rewriteValue_OpLess64U(v)334 case ssaop.OpLess8:335 return rewriteValue_OpLess8(v)336 case ssaop.OpLess8U:337 return rewriteValue_OpLess8U(v)338 case ssaop.OpLoad:339 return rewriteValue_OpLoad(v)340 case ssaop.OpLocalAddr:341 return rewriteValue_OpLocalAddr(v)342 case ssaop.OpLsh16x16:343 return rewriteValue_OpLsh16x16(v)344 case ssaop.OpLsh16x32:345 return rewriteValue_OpLsh16x32(v)346 case ssaop.OpLsh16x64:347 return rewriteValue_OpLsh16x64(v)348 case ssaop.OpLsh16x8:349 return rewriteValue_OpLsh16x8(v)350 case ssaop.OpLsh32x16:351 return rewriteValue_OpLsh32x16(v)352 case ssaop.OpLsh32x32:353 return rewriteValue_OpLsh32x32(v)354 case ssaop.OpLsh32x64:355 return rewriteValue_OpLsh32x64(v)356 case ssaop.OpLsh32x8:357 return rewriteValue_OpLsh32x8(v)358 case ssaop.OpLsh64x16:359 return rewriteValue_OpLsh64x16(v)360 case ssaop.OpLsh64x32:361 return rewriteValue_OpLsh64x32(v)362 case ssaop.OpLsh64x64:363 return rewriteValue_OpLsh64x64(v)364 case ssaop.OpLsh64x8:365 return rewriteValue_OpLsh64x8(v)366 case ssaop.OpLsh8x16:367 return rewriteValue_OpLsh8x16(v)368 case ssaop.OpLsh8x32:369 return rewriteValue_OpLsh8x32(v)370 case ssaop.OpLsh8x64:371 return rewriteValue_OpLsh8x64(v)372 case ssaop.OpLsh8x8:373 return rewriteValue_OpLsh8x8(v)374 case ssaop.OpMax32F:375 v.Op = ssaop.OpS390XWFMAXSB376 return true377 case ssaop.OpMax64F:378 v.Op = ssaop.OpS390XWFMAXDB379 return true380 case ssaop.OpMin32F:381 v.Op = ssaop.OpS390XWFMINSB382 return true383 case ssaop.OpMin64F:384 v.Op = ssaop.OpS390XWFMINDB385 return true386 case ssaop.OpMod16:387 return rewriteValue_OpMod16(v)388 case ssaop.OpMod16u:389 return rewriteValue_OpMod16u(v)390 case ssaop.OpMod32:391 return rewriteValue_OpMod32(v)392 case ssaop.OpMod32u:393 return rewriteValue_OpMod32u(v)394 case ssaop.OpMod64:395 return rewriteValue_OpMod64(v)396 case ssaop.OpMod64u:397 v.Op = ssaop.OpS390XMODDU398 return true399 case ssaop.OpMod8:400 return rewriteValue_OpMod8(v)401 case ssaop.OpMod8u:402 return rewriteValue_OpMod8u(v)403 case ssaop.OpMove:404 return rewriteValue_OpMove(v)405 case ssaop.OpMul16:406 v.Op = ssaop.OpS390XMULLW407 return true408 case ssaop.OpMul32:409 v.Op = ssaop.OpS390XMULLW410 return true411 case ssaop.OpMul32F:412 v.Op = ssaop.OpS390XFMULS413 return true414 case ssaop.OpMul64:415 v.Op = ssaop.OpS390XMULLD416 return true417 case ssaop.OpMul64F:418 v.Op = ssaop.OpS390XFMUL419 return true420 case ssaop.OpMul64uhilo:421 v.Op = ssaop.OpS390XMLGR422 return true423 case ssaop.OpMul8:424 v.Op = ssaop.OpS390XMULLW425 return true426 case ssaop.OpNeg16:427 v.Op = ssaop.OpS390XNEGW428 return true429 case ssaop.OpNeg32:430 v.Op = ssaop.OpS390XNEGW431 return true432 case ssaop.OpNeg32F:433 v.Op = ssaop.OpS390XFNEGS434 return true435 case ssaop.OpNeg64:436 v.Op = ssaop.OpS390XNEG437 return true438 case ssaop.OpNeg64F:439 v.Op = ssaop.OpS390XFNEG440 return true441 case ssaop.OpNeg8:442 v.Op = ssaop.OpS390XNEGW443 return true444 case ssaop.OpNeq16:445 return rewriteValue_OpNeq16(v)446 case ssaop.OpNeq32:447 return rewriteValue_OpNeq32(v)448 case ssaop.OpNeq32F:449 return rewriteValue_OpNeq32F(v)450 case ssaop.OpNeq64:451 return rewriteValue_OpNeq64(v)452 case ssaop.OpNeq64F:453 return rewriteValue_OpNeq64F(v)454 case ssaop.OpNeq8:455 return rewriteValue_OpNeq8(v)456 case ssaop.OpNeqB:457 return rewriteValue_OpNeqB(v)458 case ssaop.OpNeqPtr:459 return rewriteValue_OpNeqPtr(v)460 case ssaop.OpNilCheck:461 v.Op = ssaop.OpS390XLoweredNilCheck462 return true463 case ssaop.OpNot:464 return rewriteValue_OpNot(v)465 case ssaop.OpOffPtr:466 return rewriteValue_OpOffPtr(v)467 case ssaop.OpOr16:468 v.Op = ssaop.OpS390XORW469 return true470 case ssaop.OpOr32:471 v.Op = ssaop.OpS390XORW472 return true473 case ssaop.OpOr64:474 v.Op = ssaop.OpS390XOR475 return true476 case ssaop.OpOr8:477 v.Op = ssaop.OpS390XORW478 return true479 case ssaop.OpOrB:480 v.Op = ssaop.OpS390XORW481 return true482 case ssaop.OpPanicBounds:483 v.Op = ssaop.OpS390XLoweredPanicBoundsRR484 return true485 case ssaop.OpPopCount16:486 return rewriteValue_OpPopCount16(v)487 case ssaop.OpPopCount32:488 return rewriteValue_OpPopCount32(v)489 case ssaop.OpPopCount64:490 return rewriteValue_OpPopCount64(v)491 case ssaop.OpPopCount8:492 return rewriteValue_OpPopCount8(v)493 case ssaop.OpRotateLeft16:494 return rewriteValue_OpRotateLeft16(v)495 case ssaop.OpRotateLeft32:496 v.Op = ssaop.OpS390XRLL497 return true498 case ssaop.OpRotateLeft64:499 v.Op = ssaop.OpS390XRLLG500 return true501 case ssaop.OpRotateLeft8:502 return rewriteValue_OpRotateLeft8(v)503 case ssaop.OpRound:504 return rewriteValue_OpRound(v)505 case ssaop.OpRound32F:506 v.Op = ssaop.OpS390XLoweredRound32F507 return true508 case ssaop.OpRound64F:509 v.Op = ssaop.OpS390XLoweredRound64F510 return true511 case ssaop.OpRoundToEven:512 return rewriteValue_OpRoundToEven(v)513 case ssaop.OpRsh16Ux16:514 return rewriteValue_OpRsh16Ux16(v)515 case ssaop.OpRsh16Ux32:516 return rewriteValue_OpRsh16Ux32(v)517 case ssaop.OpRsh16Ux64:518 return rewriteValue_OpRsh16Ux64(v)519 case ssaop.OpRsh16Ux8:520 return rewriteValue_OpRsh16Ux8(v)521 case ssaop.OpRsh16x16:522 return rewriteValue_OpRsh16x16(v)523 case ssaop.OpRsh16x32:524 return rewriteValue_OpRsh16x32(v)525 case ssaop.OpRsh16x64:526 return rewriteValue_OpRsh16x64(v)527 case ssaop.OpRsh16x8:528 return rewriteValue_OpRsh16x8(v)529 case ssaop.OpRsh32Ux16:530 return rewriteValue_OpRsh32Ux16(v)531 case ssaop.OpRsh32Ux32:532 return rewriteValue_OpRsh32Ux32(v)533 case ssaop.OpRsh32Ux64:534 return rewriteValue_OpRsh32Ux64(v)535 case ssaop.OpRsh32Ux8:536 return rewriteValue_OpRsh32Ux8(v)537 case ssaop.OpRsh32x16:538 return rewriteValue_OpRsh32x16(v)539 case ssaop.OpRsh32x32:540 return rewriteValue_OpRsh32x32(v)541 case ssaop.OpRsh32x64:542 return rewriteValue_OpRsh32x64(v)543 case ssaop.OpRsh32x8:544 return rewriteValue_OpRsh32x8(v)545 case ssaop.OpRsh64Ux16:546 return rewriteValue_OpRsh64Ux16(v)547 case ssaop.OpRsh64Ux32:548 return rewriteValue_OpRsh64Ux32(v)549 case ssaop.OpRsh64Ux64:550 return rewriteValue_OpRsh64Ux64(v)551 case ssaop.OpRsh64Ux8:552 return rewriteValue_OpRsh64Ux8(v)553 case ssaop.OpRsh64x16:554 return rewriteValue_OpRsh64x16(v)555 case ssaop.OpRsh64x32:556 return rewriteValue_OpRsh64x32(v)557 case ssaop.OpRsh64x64:558 return rewriteValue_OpRsh64x64(v)559 case ssaop.OpRsh64x8:560 return rewriteValue_OpRsh64x8(v)561 case ssaop.OpRsh8Ux16:562 return rewriteValue_OpRsh8Ux16(v)563 case ssaop.OpRsh8Ux32:564 return rewriteValue_OpRsh8Ux32(v)565 case ssaop.OpRsh8Ux64:566 return rewriteValue_OpRsh8Ux64(v)567 case ssaop.OpRsh8Ux8:568 return rewriteValue_OpRsh8Ux8(v)569 case ssaop.OpRsh8x16:570 return rewriteValue_OpRsh8x16(v)571 case ssaop.OpRsh8x32:572 return rewriteValue_OpRsh8x32(v)573 case ssaop.OpRsh8x64:574 return rewriteValue_OpRsh8x64(v)575 case ssaop.OpRsh8x8:576 return rewriteValue_OpRsh8x8(v)577 case ssaop.OpS390XADD:578 return rewriteValue_OpS390XADD(v)579 case ssaop.OpS390XADDC:580 return rewriteValue_OpS390XADDC(v)581 case ssaop.OpS390XADDE:582 return rewriteValue_OpS390XADDE(v)583 case ssaop.OpS390XADDW:584 return rewriteValue_OpS390XADDW(v)585 case ssaop.OpS390XADDWconst:586 return rewriteValue_OpS390XADDWconst(v)587 case ssaop.OpS390XADDWload:588 return rewriteValue_OpS390XADDWload(v)589 case ssaop.OpS390XADDconst:590 return rewriteValue_OpS390XADDconst(v)591 case ssaop.OpS390XADDload:592 return rewriteValue_OpS390XADDload(v)593 case ssaop.OpS390XAND:594 return rewriteValue_OpS390XAND(v)595 case ssaop.OpS390XANDW:596 return rewriteValue_OpS390XANDW(v)597 case ssaop.OpS390XANDWconst:598 return rewriteValue_OpS390XANDWconst(v)599 case ssaop.OpS390XANDWload:600 return rewriteValue_OpS390XANDWload(v)601 case ssaop.OpS390XANDconst:602 return rewriteValue_OpS390XANDconst(v)603 case ssaop.OpS390XANDload:604 return rewriteValue_OpS390XANDload(v)605 case ssaop.OpS390XCMP:606 return rewriteValue_OpS390XCMP(v)607 case ssaop.OpS390XCMPU:608 return rewriteValue_OpS390XCMPU(v)609 case ssaop.OpS390XCMPUconst:610 return rewriteValue_OpS390XCMPUconst(v)611 case ssaop.OpS390XCMPW:612 return rewriteValue_OpS390XCMPW(v)613 case ssaop.OpS390XCMPWU:614 return rewriteValue_OpS390XCMPWU(v)615 case ssaop.OpS390XCMPWUconst:616 return rewriteValue_OpS390XCMPWUconst(v)617 case ssaop.OpS390XCMPWconst:618 return rewriteValue_OpS390XCMPWconst(v)619 case ssaop.OpS390XCMPconst:620 return rewriteValue_OpS390XCMPconst(v)621 case ssaop.OpS390XCPSDR:622 return rewriteValue_OpS390XCPSDR(v)623 case ssaop.OpS390XFCMP:624 return rewriteValue_OpS390XFCMP(v)625 case ssaop.OpS390XFCMPS:626 return rewriteValue_OpS390XFCMPS(v)627 case ssaop.OpS390XFMOVDload:628 return rewriteValue_OpS390XFMOVDload(v)629 case ssaop.OpS390XFMOVDstore:630 return rewriteValue_OpS390XFMOVDstore(v)631 case ssaop.OpS390XFMOVSload:632 return rewriteValue_OpS390XFMOVSload(v)633 case ssaop.OpS390XFMOVSstore:634 return rewriteValue_OpS390XFMOVSstore(v)635 case ssaop.OpS390XFNEG:636 return rewriteValue_OpS390XFNEG(v)637 case ssaop.OpS390XFNEGS:638 return rewriteValue_OpS390XFNEGS(v)639 case ssaop.OpS390XLDGR:640 return rewriteValue_OpS390XLDGR(v)641 case ssaop.OpS390XLEDBR:642 return rewriteValue_OpS390XLEDBR(v)643 case ssaop.OpS390XLGDR:644 return rewriteValue_OpS390XLGDR(v)645 case ssaop.OpS390XLOCGR:646 return rewriteValue_OpS390XLOCGR(v)647 case ssaop.OpS390XLTDBR:648 return rewriteValue_OpS390XLTDBR(v)649 case ssaop.OpS390XLTEBR:650 return rewriteValue_OpS390XLTEBR(v)651 case ssaop.OpS390XLoweredPanicBoundsCR:652 return rewriteValue_OpS390XLoweredPanicBoundsCR(v)653 case ssaop.OpS390XLoweredPanicBoundsRC:654 return rewriteValue_OpS390XLoweredPanicBoundsRC(v)655 case ssaop.OpS390XLoweredPanicBoundsRR:656 return rewriteValue_OpS390XLoweredPanicBoundsRR(v)657 case ssaop.OpS390XLoweredRound32F:658 return rewriteValue_OpS390XLoweredRound32F(v)659 case ssaop.OpS390XLoweredRound64F:660 return rewriteValue_OpS390XLoweredRound64F(v)661 case ssaop.OpS390XMOVBZload:662 return rewriteValue_OpS390XMOVBZload(v)663 case ssaop.OpS390XMOVBZreg:664 return rewriteValue_OpS390XMOVBZreg(v)665 case ssaop.OpS390XMOVBload:666 return rewriteValue_OpS390XMOVBload(v)667 case ssaop.OpS390XMOVBreg:668 return rewriteValue_OpS390XMOVBreg(v)669 case ssaop.OpS390XMOVBstore:670 return rewriteValue_OpS390XMOVBstore(v)671 case ssaop.OpS390XMOVBstoreconst:672 return rewriteValue_OpS390XMOVBstoreconst(v)673 case ssaop.OpS390XMOVDBR:674 return rewriteValue_OpS390XMOVDBR(v)675 case ssaop.OpS390XMOVDaddridx:676 return rewriteValue_OpS390XMOVDaddridx(v)677 case ssaop.OpS390XMOVDload:678 return rewriteValue_OpS390XMOVDload(v)679 case ssaop.OpS390XMOVDstore:680 return rewriteValue_OpS390XMOVDstore(v)681 case ssaop.OpS390XMOVDstoreconst:682 return rewriteValue_OpS390XMOVDstoreconst(v)683 case ssaop.OpS390XMOVDstoreidx:684 return rewriteValue_OpS390XMOVDstoreidx(v)685 case ssaop.OpS390XMOVHZload:686 return rewriteValue_OpS390XMOVHZload(v)687 case ssaop.OpS390XMOVHZreg:688 return rewriteValue_OpS390XMOVHZreg(v)689 case ssaop.OpS390XMOVHload:690 return rewriteValue_OpS390XMOVHload(v)691 case ssaop.OpS390XMOVHreg:692 return rewriteValue_OpS390XMOVHreg(v)693 case ssaop.OpS390XMOVHstore:694 return rewriteValue_OpS390XMOVHstore(v)695 case ssaop.OpS390XMOVHstoreconst:696 return rewriteValue_OpS390XMOVHstoreconst(v)697 case ssaop.OpS390XMOVHstoreidx:698 return rewriteValue_OpS390XMOVHstoreidx(v)699 case ssaop.OpS390XMOVWBR:700 return rewriteValue_OpS390XMOVWBR(v)701 case ssaop.OpS390XMOVWZload:702 return rewriteValue_OpS390XMOVWZload(v)703 case ssaop.OpS390XMOVWZreg:704 return rewriteValue_OpS390XMOVWZreg(v)705 case ssaop.OpS390XMOVWload:706 return rewriteValue_OpS390XMOVWload(v)707 case ssaop.OpS390XMOVWreg:708 return rewriteValue_OpS390XMOVWreg(v)709 case ssaop.OpS390XMOVWstore:710 return rewriteValue_OpS390XMOVWstore(v)711 case ssaop.OpS390XMOVWstoreconst:712 return rewriteValue_OpS390XMOVWstoreconst(v)713 case ssaop.OpS390XMOVWstoreidx:714 return rewriteValue_OpS390XMOVWstoreidx(v)715 case ssaop.OpS390XMULLD:716 return rewriteValue_OpS390XMULLD(v)717 case ssaop.OpS390XMULLDconst:718 return rewriteValue_OpS390XMULLDconst(v)719 case ssaop.OpS390XMULLDload:720 return rewriteValue_OpS390XMULLDload(v)721 case ssaop.OpS390XMULLW:722 return rewriteValue_OpS390XMULLW(v)723 case ssaop.OpS390XMULLWconst:724 return rewriteValue_OpS390XMULLWconst(v)725 case ssaop.OpS390XMULLWload:726 return rewriteValue_OpS390XMULLWload(v)727 case ssaop.OpS390XNEG:728 return rewriteValue_OpS390XNEG(v)729 case ssaop.OpS390XNEGW:730 return rewriteValue_OpS390XNEGW(v)731 case ssaop.OpS390XNOT:732 return rewriteValue_OpS390XNOT(v)733 case ssaop.OpS390XNOTW:734 return rewriteValue_OpS390XNOTW(v)735 case ssaop.OpS390XOR:736 return rewriteValue_OpS390XOR(v)737 case ssaop.OpS390XORW:738 return rewriteValue_OpS390XORW(v)739 case ssaop.OpS390XORWconst:740 return rewriteValue_OpS390XORWconst(v)741 case ssaop.OpS390XORWload:742 return rewriteValue_OpS390XORWload(v)743 case ssaop.OpS390XORconst:744 return rewriteValue_OpS390XORconst(v)745 case ssaop.OpS390XORload:746 return rewriteValue_OpS390XORload(v)747 case ssaop.OpS390XRISBGZ:748 return rewriteValue_OpS390XRISBGZ(v)749 case ssaop.OpS390XRLL:750 return rewriteValue_OpS390XRLL(v)751 case ssaop.OpS390XRLLG:752 return rewriteValue_OpS390XRLLG(v)753 case ssaop.OpS390XSLD:754 return rewriteValue_OpS390XSLD(v)755 case ssaop.OpS390XSLDconst:756 return rewriteValue_OpS390XSLDconst(v)757 case ssaop.OpS390XSLW:758 return rewriteValue_OpS390XSLW(v)759 case ssaop.OpS390XSLWconst:760 return rewriteValue_OpS390XSLWconst(v)761 case ssaop.OpS390XSRAD:762 return rewriteValue_OpS390XSRAD(v)763 case ssaop.OpS390XSRADconst:764 return rewriteValue_OpS390XSRADconst(v)765 case ssaop.OpS390XSRAW:766 return rewriteValue_OpS390XSRAW(v)767 case ssaop.OpS390XSRAWconst:768 return rewriteValue_OpS390XSRAWconst(v)769 case ssaop.OpS390XSRD:770 return rewriteValue_OpS390XSRD(v)771 case ssaop.OpS390XSRDconst:772 return rewriteValue_OpS390XSRDconst(v)773 case ssaop.OpS390XSRW:774 return rewriteValue_OpS390XSRW(v)775 case ssaop.OpS390XSRWconst:776 return rewriteValue_OpS390XSRWconst(v)777 case ssaop.OpS390XSTM2:778 return rewriteValue_OpS390XSTM2(v)779 case ssaop.OpS390XSTMG2:780 return rewriteValue_OpS390XSTMG2(v)781 case ssaop.OpS390XSUB:782 return rewriteValue_OpS390XSUB(v)783 case ssaop.OpS390XSUBE:784 return rewriteValue_OpS390XSUBE(v)785 case ssaop.OpS390XSUBW:786 return rewriteValue_OpS390XSUBW(v)787 case ssaop.OpS390XSUBWconst:788 return rewriteValue_OpS390XSUBWconst(v)789 case ssaop.OpS390XSUBWload:790 return rewriteValue_OpS390XSUBWload(v)791 case ssaop.OpS390XSUBconst:792 return rewriteValue_OpS390XSUBconst(v)793 case ssaop.OpS390XSUBload:794 return rewriteValue_OpS390XSUBload(v)795 case ssaop.OpS390XSumBytes2:796 return rewriteValue_OpS390XSumBytes2(v)797 case ssaop.OpS390XSumBytes4:798 return rewriteValue_OpS390XSumBytes4(v)799 case ssaop.OpS390XSumBytes8:800 return rewriteValue_OpS390XSumBytes8(v)801 case ssaop.OpS390XXOR:802 return rewriteValue_OpS390XXOR(v)803 case ssaop.OpS390XXORW:804 return rewriteValue_OpS390XXORW(v)805 case ssaop.OpS390XXORWconst:806 return rewriteValue_OpS390XXORWconst(v)807 case ssaop.OpS390XXORWload:808 return rewriteValue_OpS390XXORWload(v)809 case ssaop.OpS390XXORconst:810 return rewriteValue_OpS390XXORconst(v)811 case ssaop.OpS390XXORload:812 return rewriteValue_OpS390XXORload(v)813 case ssaop.OpSelect0:814 return rewriteValue_OpSelect0(v)815 case ssaop.OpSelect1:816 return rewriteValue_OpSelect1(v)817 case ssaop.OpSignExt16to32:818 v.Op = ssaop.OpS390XMOVHreg819 return true820 case ssaop.OpSignExt16to64:821 v.Op = ssaop.OpS390XMOVHreg822 return true823 case ssaop.OpSignExt32to64:824 v.Op = ssaop.OpS390XMOVWreg825 return true826 case ssaop.OpSignExt8to16:827 v.Op = ssaop.OpS390XMOVBreg828 return true829 case ssaop.OpSignExt8to32:830 v.Op = ssaop.OpS390XMOVBreg831 return true832 case ssaop.OpSignExt8to64:833 v.Op = ssaop.OpS390XMOVBreg834 return true835 case ssaop.OpSlicemask:836 return rewriteValue_OpSlicemask(v)837 case ssaop.OpSqrt:838 v.Op = ssaop.OpS390XFSQRT839 return true840 case ssaop.OpSqrt32:841 v.Op = ssaop.OpS390XFSQRTS842 return true843 case ssaop.OpStaticCall:844 v.Op = ssaop.OpS390XCALLstatic845 return true846 case ssaop.OpStore:847 return rewriteValue_OpStore(v)848 case ssaop.OpSub16:849 v.Op = ssaop.OpS390XSUBW850 return true851 case ssaop.OpSub32:852 v.Op = ssaop.OpS390XSUBW853 return true854 case ssaop.OpSub32F:855 return rewriteValue_OpSub32F(v)856 case ssaop.OpSub64:857 v.Op = ssaop.OpS390XSUB858 return true859 case ssaop.OpSub64F:860 return rewriteValue_OpSub64F(v)861 case ssaop.OpSub8:862 v.Op = ssaop.OpS390XSUBW863 return true864 case ssaop.OpSubPtr:865 v.Op = ssaop.OpS390XSUB866 return true867 case ssaop.OpTailCall:868 v.Op = ssaop.OpS390XCALLtail869 return true870 case ssaop.OpTailCallInter:871 v.Op = ssaop.OpS390XCALLtailinter872 return true873 case ssaop.OpTrunc:874 return rewriteValue_OpTrunc(v)875 case ssaop.OpTrunc16to8:876 v.Op = ssaop.OpCopy877 return true878 case ssaop.OpTrunc32to16:879 v.Op = ssaop.OpCopy880 return true881 case ssaop.OpTrunc32to8:882 v.Op = ssaop.OpCopy883 return true884 case ssaop.OpTrunc64to16:885 v.Op = ssaop.OpCopy886 return true887 case ssaop.OpTrunc64to32:888 v.Op = ssaop.OpCopy889 return true890 case ssaop.OpTrunc64to8:891 v.Op = ssaop.OpCopy892 return true893 case ssaop.OpWB:894 v.Op = ssaop.OpS390XLoweredWB895 return true896 case ssaop.OpXor16:897 v.Op = ssaop.OpS390XXORW898 return true899 case ssaop.OpXor32:900 v.Op = ssaop.OpS390XXORW901 return true902 case ssaop.OpXor64:903 v.Op = ssaop.OpS390XXOR904 return true905 case ssaop.OpXor8:906 v.Op = ssaop.OpS390XXORW907 return true908 case ssaop.OpZero:909 return rewriteValue_OpZero(v)910 case ssaop.OpZeroExt16to32:911 v.Op = ssaop.OpS390XMOVHZreg912 return true913 case ssaop.OpZeroExt16to64:914 v.Op = ssaop.OpS390XMOVHZreg915 return true916 case ssaop.OpZeroExt32to64:917 v.Op = ssaop.OpS390XMOVWZreg918 return true919 case ssaop.OpZeroExt8to16:920 v.Op = ssaop.OpS390XMOVBZreg921 return true922 case ssaop.OpZeroExt8to32:923 v.Op = ssaop.OpS390XMOVBZreg924 return true925 case ssaop.OpZeroExt8to64:926 v.Op = ssaop.OpS390XMOVBZreg927 return true928 }929 return false930}931func rewriteValue_OpAdd32F(v *ssa.Value) bool {932 v_1 := v.Args[1]933 v_0 := v.Args[0]934 b := v.Block935 typ := &b.Func.Config.Types936 // match: (Add32F x y)937 // result: (Select0 (FADDS x y))938 for {939 x := v_0940 y := v_1941 v.Reset(ssaop.OpSelect0)942 v0 := b.NewValue0(v.Pos, ssaop.OpS390XFADDS, types.NewTuple(typ.Float32, types.TypeFlags))943 v0.AddArg2(x, y)944 v.AddArg(v0)945 return true946 }947}948func rewriteValue_OpAdd64F(v *ssa.Value) bool {949 v_1 := v.Args[1]950 v_0 := v.Args[0]951 b := v.Block952 typ := &b.Func.Config.Types953 // match: (Add64F x y)954 // result: (Select0 (FADD x y))955 for {956 x := v_0957 y := v_1958 v.Reset(ssaop.OpSelect0)959 v0 := b.NewValue0(v.Pos, ssaop.OpS390XFADD, types.NewTuple(typ.Float64, types.TypeFlags))960 v0.AddArg2(x, y)961 v.AddArg(v0)962 return true963 }964}965func rewriteValue_OpAddr(v *ssa.Value) bool {966 v_0 := v.Args[0]967 // match: (Addr {sym} base)968 // result: (MOVDaddr {sym} base)969 for {970 sym := ssa.AuxToSym(v.Aux)971 base := v_0972 v.Reset(ssaop.OpS390XMOVDaddr)973 v.Aux = ssa.SymToAux(sym)974 v.AddArg(base)975 return true976 }977}978func rewriteValue_OpAtomicAdd32(v *ssa.Value) bool {979 v_2 := v.Args[2]980 v_1 := v.Args[1]981 v_0 := v.Args[0]982 b := v.Block983 typ := &b.Func.Config.Types984 // match: (AtomicAdd32 ptr val mem)985 // result: (AddTupleFirst32 val (LAA ptr val mem))986 for {987 ptr := v_0988 val := v_1989 mem := v_2990 v.Reset(ssaop.OpS390XAddTupleFirst32)991 v0 := b.NewValue0(v.Pos, ssaop.OpS390XLAA, types.NewTuple(typ.UInt32, types.TypeMem))992 v0.AddArg3(ptr, val, mem)993 v.AddArg2(val, v0)994 return true995 }996}997func rewriteValue_OpAtomicAdd64(v *ssa.Value) bool {998 v_2 := v.Args[2]999 v_1 := v.Args[1]1000 v_0 := v.Args[0]1001 b := v.Block1002 typ := &b.Func.Config.Types1003 // match: (AtomicAdd64 ptr val mem)1004 // result: (AddTupleFirst64 val (LAAG ptr val mem))1005 for {1006 ptr := v_01007 val := v_11008 mem := v_21009 v.Reset(ssaop.OpS390XAddTupleFirst64)1010 v0 := b.NewValue0(v.Pos, ssaop.OpS390XLAAG, types.NewTuple(typ.UInt64, types.TypeMem))1011 v0.AddArg3(ptr, val, mem)1012 v.AddArg2(val, v0)1013 return true1014 }1015}1016func rewriteValue_OpAtomicAnd8(v *ssa.Value) bool {1017 v_2 := v.Args[2]1018 v_1 := v.Args[1]1019 v_0 := v.Args[0]1020 b := v.Block1021 typ := &b.Func.Config.Types1022 // match: (AtomicAnd8 ptr val mem)1023 // result: (LANfloor ptr (RLL <typ.UInt32> (ORWconst <typ.UInt32> val [-1<<8]) (RXSBG <typ.UInt32> {s390x.NewRotateParams(59, 60, 3)} (MOVDconst [3<<3]) ptr)) mem)1024 for {1025 ptr := v_01026 val := v_11027 mem := v_21028 v.Reset(ssaop.OpS390XLANfloor)1029 v0 := b.NewValue0(v.Pos, ssaop.OpS390XRLL, typ.UInt32)1030 v1 := b.NewValue0(v.Pos, ssaop.OpS390XORWconst, typ.UInt32)1031 v1.AuxInt = ssa.Int32ToAuxInt(-1 << 8)1032 v1.AddArg(val)1033 v2 := b.NewValue0(v.Pos, ssaop.OpS390XRXSBG, typ.UInt32)1034 v2.Aux = ssa.S390xRotateParamsToAux(s390x.NewRotateParams(59, 60, 3))1035 v3 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1036 v3.AuxInt = ssa.Int64ToAuxInt(3 << 3)1037 v2.AddArg2(v3, ptr)1038 v0.AddArg2(v1, v2)1039 v.AddArg3(ptr, v0, mem)1040 return true1041 }1042}1043func rewriteValue_OpAtomicCompareAndSwap32(v *ssa.Value) bool {1044 v_3 := v.Args[3]1045 v_2 := v.Args[2]1046 v_1 := v.Args[1]1047 v_0 := v.Args[0]1048 // match: (AtomicCompareAndSwap32 ptr old new_ mem)1049 // result: (LoweredAtomicCas32 ptr old new_ mem)1050 for {1051 ptr := v_01052 old := v_11053 new_ := v_21054 mem := v_31055 v.Reset(ssaop.OpS390XLoweredAtomicCas32)1056 v.AddArg4(ptr, old, new_, mem)1057 return true1058 }1059}1060func rewriteValue_OpAtomicCompareAndSwap64(v *ssa.Value) bool {1061 v_3 := v.Args[3]1062 v_2 := v.Args[2]1063 v_1 := v.Args[1]1064 v_0 := v.Args[0]1065 // match: (AtomicCompareAndSwap64 ptr old new_ mem)1066 // result: (LoweredAtomicCas64 ptr old new_ mem)1067 for {1068 ptr := v_01069 old := v_11070 new_ := v_21071 mem := v_31072 v.Reset(ssaop.OpS390XLoweredAtomicCas64)1073 v.AddArg4(ptr, old, new_, mem)1074 return true1075 }1076}1077func rewriteValue_OpAtomicExchange32(v *ssa.Value) bool {1078 v_2 := v.Args[2]1079 v_1 := v.Args[1]1080 v_0 := v.Args[0]1081 // match: (AtomicExchange32 ptr val mem)1082 // result: (LoweredAtomicExchange32 ptr val mem)1083 for {1084 ptr := v_01085 val := v_11086 mem := v_21087 v.Reset(ssaop.OpS390XLoweredAtomicExchange32)1088 v.AddArg3(ptr, val, mem)1089 return true1090 }1091}1092func rewriteValue_OpAtomicExchange64(v *ssa.Value) bool {1093 v_2 := v.Args[2]1094 v_1 := v.Args[1]1095 v_0 := v.Args[0]1096 // match: (AtomicExchange64 ptr val mem)1097 // result: (LoweredAtomicExchange64 ptr val mem)1098 for {1099 ptr := v_01100 val := v_11101 mem := v_21102 v.Reset(ssaop.OpS390XLoweredAtomicExchange64)1103 v.AddArg3(ptr, val, mem)1104 return true1105 }1106}1107func rewriteValue_OpAtomicLoad32(v *ssa.Value) bool {1108 v_1 := v.Args[1]1109 v_0 := v.Args[0]1110 // match: (AtomicLoad32 ptr mem)1111 // result: (MOVWZatomicload ptr mem)1112 for {1113 ptr := v_01114 mem := v_11115 v.Reset(ssaop.OpS390XMOVWZatomicload)1116 v.AddArg2(ptr, mem)1117 return true1118 }1119}1120func rewriteValue_OpAtomicLoad64(v *ssa.Value) bool {1121 v_1 := v.Args[1]1122 v_0 := v.Args[0]1123 // match: (AtomicLoad64 ptr mem)1124 // result: (MOVDatomicload ptr mem)1125 for {1126 ptr := v_01127 mem := v_11128 v.Reset(ssaop.OpS390XMOVDatomicload)1129 v.AddArg2(ptr, mem)1130 return true1131 }1132}1133func rewriteValue_OpAtomicLoad8(v *ssa.Value) bool {1134 v_1 := v.Args[1]1135 v_0 := v.Args[0]1136 // match: (AtomicLoad8 ptr mem)1137 // result: (MOVBZatomicload ptr mem)1138 for {1139 ptr := v_01140 mem := v_11141 v.Reset(ssaop.OpS390XMOVBZatomicload)1142 v.AddArg2(ptr, mem)1143 return true1144 }1145}1146func rewriteValue_OpAtomicLoadAcq32(v *ssa.Value) bool {1147 v_1 := v.Args[1]1148 v_0 := v.Args[0]1149 // match: (AtomicLoadAcq32 ptr mem)1150 // result: (MOVWZatomicload ptr mem)1151 for {1152 ptr := v_01153 mem := v_11154 v.Reset(ssaop.OpS390XMOVWZatomicload)1155 v.AddArg2(ptr, mem)1156 return true1157 }1158}1159func rewriteValue_OpAtomicLoadPtr(v *ssa.Value) bool {1160 v_1 := v.Args[1]1161 v_0 := v.Args[0]1162 // match: (AtomicLoadPtr ptr mem)1163 // result: (MOVDatomicload ptr mem)1164 for {1165 ptr := v_01166 mem := v_11167 v.Reset(ssaop.OpS390XMOVDatomicload)1168 v.AddArg2(ptr, mem)1169 return true1170 }1171}1172func rewriteValue_OpAtomicOr8(v *ssa.Value) bool {1173 v_2 := v.Args[2]1174 v_1 := v.Args[1]1175 v_0 := v.Args[0]1176 b := v.Block1177 typ := &b.Func.Config.Types1178 // match: (AtomicOr8 ptr val mem)1179 // result: (LAOfloor ptr (SLW <typ.UInt32> (MOVBZreg <typ.UInt32> val) (RXSBG <typ.UInt32> {s390x.NewRotateParams(59, 60, 3)} (MOVDconst [3<<3]) ptr)) mem)1180 for {1181 ptr := v_01182 val := v_11183 mem := v_21184 v.Reset(ssaop.OpS390XLAOfloor)1185 v0 := b.NewValue0(v.Pos, ssaop.OpS390XSLW, typ.UInt32)1186 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBZreg, typ.UInt32)1187 v1.AddArg(val)1188 v2 := b.NewValue0(v.Pos, ssaop.OpS390XRXSBG, typ.UInt32)1189 v2.Aux = ssa.S390xRotateParamsToAux(s390x.NewRotateParams(59, 60, 3))1190 v3 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1191 v3.AuxInt = ssa.Int64ToAuxInt(3 << 3)1192 v2.AddArg2(v3, ptr)1193 v0.AddArg2(v1, v2)1194 v.AddArg3(ptr, v0, mem)1195 return true1196 }1197}1198func rewriteValue_OpAtomicStore32(v *ssa.Value) bool {1199 v_2 := v.Args[2]1200 v_1 := v.Args[1]1201 v_0 := v.Args[0]1202 b := v.Block1203 // match: (AtomicStore32 ptr val mem)1204 // result: (SYNC (MOVWatomicstore ptr val mem))1205 for {1206 ptr := v_01207 val := v_11208 mem := v_21209 v.Reset(ssaop.OpS390XSYNC)1210 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWatomicstore, types.TypeMem)1211 v0.AddArg3(ptr, val, mem)1212 v.AddArg(v0)1213 return true1214 }1215}1216func rewriteValue_OpAtomicStore64(v *ssa.Value) bool {1217 v_2 := v.Args[2]1218 v_1 := v.Args[1]1219 v_0 := v.Args[0]1220 b := v.Block1221 // match: (AtomicStore64 ptr val mem)1222 // result: (SYNC (MOVDatomicstore ptr val mem))1223 for {1224 ptr := v_01225 val := v_11226 mem := v_21227 v.Reset(ssaop.OpS390XSYNC)1228 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDatomicstore, types.TypeMem)1229 v0.AddArg3(ptr, val, mem)1230 v.AddArg(v0)1231 return true1232 }1233}1234func rewriteValue_OpAtomicStore8(v *ssa.Value) bool {1235 v_2 := v.Args[2]1236 v_1 := v.Args[1]1237 v_0 := v.Args[0]1238 b := v.Block1239 // match: (AtomicStore8 ptr val mem)1240 // result: (SYNC (MOVBatomicstore ptr val mem))1241 for {1242 ptr := v_01243 val := v_11244 mem := v_21245 v.Reset(ssaop.OpS390XSYNC)1246 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBatomicstore, types.TypeMem)1247 v0.AddArg3(ptr, val, mem)1248 v.AddArg(v0)1249 return true1250 }1251}1252func rewriteValue_OpAtomicStorePtrNoWB(v *ssa.Value) bool {1253 v_2 := v.Args[2]1254 v_1 := v.Args[1]1255 v_0 := v.Args[0]1256 b := v.Block1257 // match: (AtomicStorePtrNoWB ptr val mem)1258 // result: (SYNC (MOVDatomicstore ptr val mem))1259 for {1260 ptr := v_01261 val := v_11262 mem := v_21263 v.Reset(ssaop.OpS390XSYNC)1264 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDatomicstore, types.TypeMem)1265 v0.AddArg3(ptr, val, mem)1266 v.AddArg(v0)1267 return true1268 }1269}1270func rewriteValue_OpAtomicStoreRel32(v *ssa.Value) bool {1271 v_2 := v.Args[2]1272 v_1 := v.Args[1]1273 v_0 := v.Args[0]1274 // match: (AtomicStoreRel32 ptr val mem)1275 // result: (MOVWatomicstore ptr val mem)1276 for {1277 ptr := v_01278 val := v_11279 mem := v_21280 v.Reset(ssaop.OpS390XMOVWatomicstore)1281 v.AddArg3(ptr, val, mem)1282 return true1283 }1284}1285func rewriteValue_OpAvg64u(v *ssa.Value) bool {1286 v_1 := v.Args[1]1287 v_0 := v.Args[0]1288 b := v.Block1289 // match: (Avg64u <t> x y)1290 // result: (ADD (SRDconst <t> (SUB <t> x y) [1]) y)1291 for {1292 t := v.Type1293 x := v_01294 y := v_11295 v.Reset(ssaop.OpS390XADD)1296 v0 := b.NewValue0(v.Pos, ssaop.OpS390XSRDconst, t)1297 v0.AuxInt = ssa.Uint8ToAuxInt(1)1298 v1 := b.NewValue0(v.Pos, ssaop.OpS390XSUB, t)1299 v1.AddArg2(x, y)1300 v0.AddArg(v1)1301 v.AddArg2(v0, y)1302 return true1303 }1304}1305func rewriteValue_OpBitLen16(v *ssa.Value) bool {1306 v_0 := v.Args[0]1307 b := v.Block1308 typ := &b.Func.Config.Types1309 // match: (BitLen16 x)1310 // result: (BitLen64 (ZeroExt16to64 x))1311 for {1312 x := v_01313 v.Reset(ssaop.OpBitLen64)1314 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.UInt64)1315 v0.AddArg(x)1316 v.AddArg(v0)1317 return true1318 }1319}1320func rewriteValue_OpBitLen32(v *ssa.Value) bool {1321 v_0 := v.Args[0]1322 b := v.Block1323 typ := &b.Func.Config.Types1324 // match: (BitLen32 x)1325 // result: (BitLen64 (ZeroExt32to64 x))1326 for {1327 x := v_01328 v.Reset(ssaop.OpBitLen64)1329 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.UInt64)1330 v0.AddArg(x)1331 v.AddArg(v0)1332 return true1333 }1334}1335func rewriteValue_OpBitLen64(v *ssa.Value) bool {1336 v_0 := v.Args[0]1337 b := v.Block1338 typ := &b.Func.Config.Types1339 // match: (BitLen64 x)1340 // result: (SUB (MOVDconst [64]) (FLOGR x))1341 for {1342 x := v_01343 v.Reset(ssaop.OpS390XSUB)1344 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1345 v0.AuxInt = ssa.Int64ToAuxInt(64)1346 v1 := b.NewValue0(v.Pos, ssaop.OpS390XFLOGR, typ.UInt64)1347 v1.AddArg(x)1348 v.AddArg2(v0, v1)1349 return true1350 }1351}1352func rewriteValue_OpBitLen8(v *ssa.Value) bool {1353 v_0 := v.Args[0]1354 b := v.Block1355 typ := &b.Func.Config.Types1356 // match: (BitLen8 x)1357 // result: (BitLen64 (ZeroExt8to64 x))1358 for {1359 x := v_01360 v.Reset(ssaop.OpBitLen64)1361 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.UInt64)1362 v0.AddArg(x)1363 v.AddArg(v0)1364 return true1365 }1366}1367func rewriteValue_OpBswap16(v *ssa.Value) bool {1368 v_0 := v.Args[0]1369 b := v.Block1370 typ := &b.Func.Config.Types1371 // match: (Bswap16 x:(MOVHZload [off] {sym} ptr mem))1372 // result: @x.Block (MOVHZreg (MOVHBRload [off] {sym} ptr mem))1373 for {1374 x := v_01375 if x.Op != ssaop.OpS390XMOVHZload {1376 break1377 }1378 off := ssa.AuxIntToInt32(x.AuxInt)1379 sym := ssa.AuxToSym(x.Aux)1380 mem := x.Args[1]1381 ptr := x.Args[0]1382 b = x.Block1383 v0 := b.NewValue0(x.Pos, ssaop.OpS390XMOVHZreg, typ.UInt64)1384 v.CopyOf(v0)1385 v1 := b.NewValue0(x.Pos, ssaop.OpS390XMOVHBRload, typ.UInt16)1386 v1.AuxInt = ssa.Int32ToAuxInt(off)1387 v1.Aux = ssa.SymToAux(sym)1388 v1.AddArg2(ptr, mem)1389 v0.AddArg(v1)1390 return true1391 }1392 // match: (Bswap16 x:(MOVHZloadidx [off] {sym} ptr idx mem))1393 // result: @x.Block (MOVHZreg (MOVHBRloadidx [off] {sym} ptr idx mem))1394 for {1395 x := v_01396 if x.Op != ssaop.OpS390XMOVHZloadidx {1397 break1398 }1399 off := ssa.AuxIntToInt32(x.AuxInt)1400 sym := ssa.AuxToSym(x.Aux)1401 mem := x.Args[2]1402 ptr := x.Args[0]1403 idx := x.Args[1]1404 b = x.Block1405 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHZreg, typ.UInt64)1406 v.CopyOf(v0)1407 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHBRloadidx, typ.Int16)1408 v1.AuxInt = ssa.Int32ToAuxInt(off)1409 v1.Aux = ssa.SymToAux(sym)1410 v1.AddArg3(ptr, idx, mem)1411 v0.AddArg(v1)1412 return true1413 }1414 return false1415}1416func rewriteValue_OpCeil(v *ssa.Value) bool {1417 v_0 := v.Args[0]1418 // match: (Ceil x)1419 // result: (FIDBR [6] x)1420 for {1421 x := v_01422 v.Reset(ssaop.OpS390XFIDBR)1423 v.AuxInt = ssa.Int8ToAuxInt(6)1424 v.AddArg(x)1425 return true1426 }1427}1428func rewriteValue_OpConst16(v *ssa.Value) bool {1429 // match: (Const16 [val])1430 // result: (MOVDconst [int64(val)])1431 for {1432 val := ssa.AuxIntToInt16(v.AuxInt)1433 v.Reset(ssaop.OpS390XMOVDconst)1434 v.AuxInt = ssa.Int64ToAuxInt(int64(val))1435 return true1436 }1437}1438func rewriteValue_OpConst32(v *ssa.Value) bool {1439 // match: (Const32 [val])1440 // result: (MOVDconst [int64(val)])1441 for {1442 val := ssa.AuxIntToInt32(v.AuxInt)1443 v.Reset(ssaop.OpS390XMOVDconst)1444 v.AuxInt = ssa.Int64ToAuxInt(int64(val))1445 return true1446 }1447}1448func rewriteValue_OpConst64(v *ssa.Value) bool {1449 // match: (Const64 [val])1450 // result: (MOVDconst [int64(val)])1451 for {1452 val := ssa.AuxIntToInt64(v.AuxInt)1453 v.Reset(ssaop.OpS390XMOVDconst)1454 v.AuxInt = ssa.Int64ToAuxInt(int64(val))1455 return true1456 }1457}1458func rewriteValue_OpConst8(v *ssa.Value) bool {1459 // match: (Const8 [val])1460 // result: (MOVDconst [int64(val)])1461 for {1462 val := ssa.AuxIntToInt8(v.AuxInt)1463 v.Reset(ssaop.OpS390XMOVDconst)1464 v.AuxInt = ssa.Int64ToAuxInt(int64(val))1465 return true1466 }1467}1468func rewriteValue_OpConstBool(v *ssa.Value) bool {1469 // match: (ConstBool [t])1470 // result: (MOVDconst [ssa.B2i(t)])1471 for {1472 t := ssa.AuxIntToBool(v.AuxInt)1473 v.Reset(ssaop.OpS390XMOVDconst)1474 v.AuxInt = ssa.Int64ToAuxInt(ssa.B2i(t))1475 return true1476 }1477}1478func rewriteValue_OpConstNil(v *ssa.Value) bool {1479 // match: (ConstNil)1480 // result: (MOVDconst [0])1481 for {1482 v.Reset(ssaop.OpS390XMOVDconst)1483 v.AuxInt = ssa.Int64ToAuxInt(0)1484 return true1485 }1486}1487func rewriteValue_OpCtz16(v *ssa.Value) bool {1488 v_0 := v.Args[0]1489 b := v.Block1490 typ := &b.Func.Config.Types1491 // match: (Ctz16 x)1492 // result: (Ctz64 (Or64 <typ.UInt64> x (MOVDconst [1<<16])))1493 for {1494 x := v_01495 v.Reset(ssaop.OpCtz64)1496 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.UInt64)1497 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1498 v1.AuxInt = ssa.Int64ToAuxInt(1 << 16)1499 v0.AddArg2(x, v1)1500 v.AddArg(v0)1501 return true1502 }1503}1504func rewriteValue_OpCtz32(v *ssa.Value) bool {1505 v_0 := v.Args[0]1506 b := v.Block1507 typ := &b.Func.Config.Types1508 // match: (Ctz32 <t> x)1509 // result: (SUB (MOVDconst [64]) (FLOGR (MOVWZreg (ANDW <t> (SUBWconst <t> [1] x) (NOTW <t> x)))))1510 for {1511 t := v.Type1512 x := v_01513 v.Reset(ssaop.OpS390XSUB)1514 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1515 v0.AuxInt = ssa.Int64ToAuxInt(64)1516 v1 := b.NewValue0(v.Pos, ssaop.OpS390XFLOGR, typ.UInt64)1517 v2 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWZreg, typ.UInt64)1518 v3 := b.NewValue0(v.Pos, ssaop.OpS390XANDW, t)1519 v4 := b.NewValue0(v.Pos, ssaop.OpS390XSUBWconst, t)1520 v4.AuxInt = ssa.Int32ToAuxInt(1)1521 v4.AddArg(x)1522 v5 := b.NewValue0(v.Pos, ssaop.OpS390XNOTW, t)1523 v5.AddArg(x)1524 v3.AddArg2(v4, v5)1525 v2.AddArg(v3)1526 v1.AddArg(v2)1527 v.AddArg2(v0, v1)1528 return true1529 }1530}1531func rewriteValue_OpCtz64(v *ssa.Value) bool {1532 v_0 := v.Args[0]1533 b := v.Block1534 typ := &b.Func.Config.Types1535 // match: (Ctz64 <t> x)1536 // result: (SUB (MOVDconst [64]) (FLOGR (AND <t> (SUBconst <t> [1] x) (NOT <t> x))))1537 for {1538 t := v.Type1539 x := v_01540 v.Reset(ssaop.OpS390XSUB)1541 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1542 v0.AuxInt = ssa.Int64ToAuxInt(64)1543 v1 := b.NewValue0(v.Pos, ssaop.OpS390XFLOGR, typ.UInt64)1544 v2 := b.NewValue0(v.Pos, ssaop.OpS390XAND, t)1545 v3 := b.NewValue0(v.Pos, ssaop.OpS390XSUBconst, t)1546 v3.AuxInt = ssa.Int32ToAuxInt(1)1547 v3.AddArg(x)1548 v4 := b.NewValue0(v.Pos, ssaop.OpS390XNOT, t)1549 v4.AddArg(x)1550 v2.AddArg2(v3, v4)1551 v1.AddArg(v2)1552 v.AddArg2(v0, v1)1553 return true1554 }1555}1556func rewriteValue_OpCtz8(v *ssa.Value) bool {1557 v_0 := v.Args[0]1558 b := v.Block1559 typ := &b.Func.Config.Types1560 // match: (Ctz8 x)1561 // result: (Ctz64 (Or64 <typ.UInt64> x (MOVDconst [1<<8])))1562 for {1563 x := v_01564 v.Reset(ssaop.OpCtz64)1565 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.UInt64)1566 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1567 v1.AuxInt = ssa.Int64ToAuxInt(1 << 8)1568 v0.AddArg2(x, v1)1569 v.AddArg(v0)1570 return true1571 }1572}1573func rewriteValue_OpDiv16(v *ssa.Value) bool {1574 v_1 := v.Args[1]1575 v_0 := v.Args[0]1576 b := v.Block1577 typ := &b.Func.Config.Types1578 // match: (Div16 x y)1579 // result: (DIVW (MOVHreg x) (MOVHreg y))1580 for {1581 x := v_01582 y := v_11583 v.Reset(ssaop.OpS390XDIVW)1584 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHreg, typ.Int64)1585 v0.AddArg(x)1586 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHreg, typ.Int64)1587 v1.AddArg(y)1588 v.AddArg2(v0, v1)1589 return true1590 }1591}1592func rewriteValue_OpDiv16u(v *ssa.Value) bool {1593 v_1 := v.Args[1]1594 v_0 := v.Args[0]1595 b := v.Block1596 typ := &b.Func.Config.Types1597 // match: (Div16u x y)1598 // result: (DIVWU (MOVHZreg x) (MOVHZreg y))1599 for {1600 x := v_01601 y := v_11602 v.Reset(ssaop.OpS390XDIVWU)1603 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHZreg, typ.UInt64)1604 v0.AddArg(x)1605 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHZreg, typ.UInt64)1606 v1.AddArg(y)1607 v.AddArg2(v0, v1)1608 return true1609 }1610}1611func rewriteValue_OpDiv32(v *ssa.Value) bool {1612 v_1 := v.Args[1]1613 v_0 := v.Args[0]1614 b := v.Block1615 typ := &b.Func.Config.Types1616 // match: (Div32 x y)1617 // result: (DIVW (MOVWreg x) y)1618 for {1619 x := v_01620 y := v_11621 v.Reset(ssaop.OpS390XDIVW)1622 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWreg, typ.Int64)1623 v0.AddArg(x)1624 v.AddArg2(v0, y)1625 return true1626 }1627}1628func rewriteValue_OpDiv32u(v *ssa.Value) bool {1629 v_1 := v.Args[1]1630 v_0 := v.Args[0]1631 b := v.Block1632 typ := &b.Func.Config.Types1633 // match: (Div32u x y)1634 // result: (DIVWU (MOVWZreg x) y)1635 for {1636 x := v_01637 y := v_11638 v.Reset(ssaop.OpS390XDIVWU)1639 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWZreg, typ.UInt64)1640 v0.AddArg(x)1641 v.AddArg2(v0, y)1642 return true1643 }1644}1645func rewriteValue_OpDiv64(v *ssa.Value) bool {1646 v_1 := v.Args[1]1647 v_0 := v.Args[0]1648 // match: (Div64 x y)1649 // result: (DIVD x y)1650 for {1651 x := v_01652 y := v_11653 v.Reset(ssaop.OpS390XDIVD)1654 v.AddArg2(x, y)1655 return true1656 }1657}1658func rewriteValue_OpDiv8(v *ssa.Value) bool {1659 v_1 := v.Args[1]1660 v_0 := v.Args[0]1661 b := v.Block1662 typ := &b.Func.Config.Types1663 // match: (Div8 x y)1664 // result: (DIVW (MOVBreg x) (MOVBreg y))1665 for {1666 x := v_01667 y := v_11668 v.Reset(ssaop.OpS390XDIVW)1669 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1670 v0.AddArg(x)1671 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1672 v1.AddArg(y)1673 v.AddArg2(v0, v1)1674 return true1675 }1676}1677func rewriteValue_OpDiv8u(v *ssa.Value) bool {1678 v_1 := v.Args[1]1679 v_0 := v.Args[0]1680 b := v.Block1681 typ := &b.Func.Config.Types1682 // match: (Div8u x y)1683 // result: (DIVWU (MOVBZreg x) (MOVBZreg y))1684 for {1685 x := v_01686 y := v_11687 v.Reset(ssaop.OpS390XDIVWU)1688 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBZreg, typ.UInt64)1689 v0.AddArg(x)1690 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBZreg, typ.UInt64)1691 v1.AddArg(y)1692 v.AddArg2(v0, v1)1693 return true1694 }1695}1696func rewriteValue_OpEq16(v *ssa.Value) bool {1697 v_1 := v.Args[1]1698 v_0 := v.Args[0]1699 b := v.Block1700 typ := &b.Func.Config.Types1701 // match: (Eq16 x y)1702 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y)))1703 for {1704 x := v_01705 y := v_11706 v.Reset(ssaop.OpS390XLOCGR)1707 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1708 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1709 v0.AuxInt = ssa.Int64ToAuxInt(0)1710 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1711 v1.AuxInt = ssa.Int64ToAuxInt(1)1712 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMPW, types.TypeFlags)1713 v3 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHreg, typ.Int64)1714 v3.AddArg(x)1715 v4 := b.NewValue0(v.Pos, ssaop.OpS390XMOVHreg, typ.Int64)1716 v4.AddArg(y)1717 v2.AddArg2(v3, v4)1718 v.AddArg3(v0, v1, v2)1719 return true1720 }1721}1722func rewriteValue_OpEq32(v *ssa.Value) bool {1723 v_1 := v.Args[1]1724 v_0 := v.Args[0]1725 b := v.Block1726 typ := &b.Func.Config.Types1727 // match: (Eq32 x y)1728 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMPW x y))1729 for {1730 x := v_01731 y := v_11732 v.Reset(ssaop.OpS390XLOCGR)1733 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1734 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1735 v0.AuxInt = ssa.Int64ToAuxInt(0)1736 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1737 v1.AuxInt = ssa.Int64ToAuxInt(1)1738 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMPW, types.TypeFlags)1739 v2.AddArg2(x, y)1740 v.AddArg3(v0, v1, v2)1741 return true1742 }1743}1744func rewriteValue_OpEq32F(v *ssa.Value) bool {1745 v_1 := v.Args[1]1746 v_0 := v.Args[0]1747 b := v.Block1748 typ := &b.Func.Config.Types1749 // match: (Eq32F x y)1750 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y))1751 for {1752 x := v_01753 y := v_11754 v.Reset(ssaop.OpS390XLOCGR)1755 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1756 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1757 v0.AuxInt = ssa.Int64ToAuxInt(0)1758 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1759 v1.AuxInt = ssa.Int64ToAuxInt(1)1760 v2 := b.NewValue0(v.Pos, ssaop.OpS390XFCMPS, types.TypeFlags)1761 v2.AddArg2(x, y)1762 v.AddArg3(v0, v1, v2)1763 return true1764 }1765}1766func rewriteValue_OpEq64(v *ssa.Value) bool {1767 v_1 := v.Args[1]1768 v_0 := v.Args[0]1769 b := v.Block1770 typ := &b.Func.Config.Types1771 // match: (Eq64 x y)1772 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))1773 for {1774 x := v_01775 y := v_11776 v.Reset(ssaop.OpS390XLOCGR)1777 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1778 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1779 v0.AuxInt = ssa.Int64ToAuxInt(0)1780 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1781 v1.AuxInt = ssa.Int64ToAuxInt(1)1782 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMP, types.TypeFlags)1783 v2.AddArg2(x, y)1784 v.AddArg3(v0, v1, v2)1785 return true1786 }1787}1788func rewriteValue_OpEq64F(v *ssa.Value) bool {1789 v_1 := v.Args[1]1790 v_0 := v.Args[0]1791 b := v.Block1792 typ := &b.Func.Config.Types1793 // match: (Eq64F x y)1794 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (FCMP x y))1795 for {1796 x := v_01797 y := v_11798 v.Reset(ssaop.OpS390XLOCGR)1799 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1800 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1801 v0.AuxInt = ssa.Int64ToAuxInt(0)1802 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1803 v1.AuxInt = ssa.Int64ToAuxInt(1)1804 v2 := b.NewValue0(v.Pos, ssaop.OpS390XFCMP, types.TypeFlags)1805 v2.AddArg2(x, y)1806 v.AddArg3(v0, v1, v2)1807 return true1808 }1809}1810func rewriteValue_OpEq8(v *ssa.Value) bool {1811 v_1 := v.Args[1]1812 v_0 := v.Args[0]1813 b := v.Block1814 typ := &b.Func.Config.Types1815 // match: (Eq8 x y)1816 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y)))1817 for {1818 x := v_01819 y := v_11820 v.Reset(ssaop.OpS390XLOCGR)1821 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1822 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1823 v0.AuxInt = ssa.Int64ToAuxInt(0)1824 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1825 v1.AuxInt = ssa.Int64ToAuxInt(1)1826 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMPW, types.TypeFlags)1827 v3 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1828 v3.AddArg(x)1829 v4 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1830 v4.AddArg(y)1831 v2.AddArg2(v3, v4)1832 v.AddArg3(v0, v1, v2)1833 return true1834 }1835}1836func rewriteValue_OpEqB(v *ssa.Value) bool {1837 v_1 := v.Args[1]1838 v_0 := v.Args[0]1839 b := v.Block1840 typ := &b.Func.Config.Types1841 // match: (EqB x y)1842 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y)))1843 for {1844 x := v_01845 y := v_11846 v.Reset(ssaop.OpS390XLOCGR)1847 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1848 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1849 v0.AuxInt = ssa.Int64ToAuxInt(0)1850 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1851 v1.AuxInt = ssa.Int64ToAuxInt(1)1852 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMPW, types.TypeFlags)1853 v3 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1854 v3.AddArg(x)1855 v4 := b.NewValue0(v.Pos, ssaop.OpS390XMOVBreg, typ.Int64)1856 v4.AddArg(y)1857 v2.AddArg2(v3, v4)1858 v.AddArg3(v0, v1, v2)1859 return true1860 }1861}1862func rewriteValue_OpEqPtr(v *ssa.Value) bool {1863 v_1 := v.Args[1]1864 v_0 := v.Args[0]1865 b := v.Block1866 typ := &b.Func.Config.Types1867 // match: (EqPtr x y)1868 // result: (LOCGR {s390x.Equal} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))1869 for {1870 x := v_01871 y := v_11872 v.Reset(ssaop.OpS390XLOCGR)1873 v.Aux = ssa.S390xCCMaskToAux(s390x.Equal)1874 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1875 v0.AuxInt = ssa.Int64ToAuxInt(0)1876 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1877 v1.AuxInt = ssa.Int64ToAuxInt(1)1878 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMP, types.TypeFlags)1879 v2.AddArg2(x, y)1880 v.AddArg3(v0, v1, v2)1881 return true1882 }1883}1884func rewriteValue_OpFMA(v *ssa.Value) bool {1885 v_2 := v.Args[2]1886 v_1 := v.Args[1]1887 v_0 := v.Args[0]1888 // match: (FMA x y z)1889 // result: (FMADD z x y)1890 for {1891 x := v_01892 y := v_11893 z := v_21894 v.Reset(ssaop.OpS390XFMADD)1895 v.AddArg3(z, x, y)1896 return true1897 }1898}1899func rewriteValue_OpFloor(v *ssa.Value) bool {1900 v_0 := v.Args[0]1901 // match: (Floor x)1902 // result: (FIDBR [7] x)1903 for {1904 x := v_01905 v.Reset(ssaop.OpS390XFIDBR)1906 v.AuxInt = ssa.Int8ToAuxInt(7)1907 v.AddArg(x)1908 return true1909 }1910}1911func rewriteValue_OpHmul32(v *ssa.Value) bool {1912 v_1 := v.Args[1]1913 v_0 := v.Args[0]1914 b := v.Block1915 typ := &b.Func.Config.Types1916 // match: (Hmul32 x y)1917 // result: (SRDconst [32] (MULLD (MOVWreg x) (MOVWreg y)))1918 for {1919 x := v_01920 y := v_11921 v.Reset(ssaop.OpS390XSRDconst)1922 v.AuxInt = ssa.Uint8ToAuxInt(32)1923 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMULLD, typ.Int64)1924 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWreg, typ.Int64)1925 v1.AddArg(x)1926 v2 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWreg, typ.Int64)1927 v2.AddArg(y)1928 v0.AddArg2(v1, v2)1929 v.AddArg(v0)1930 return true1931 }1932}1933func rewriteValue_OpHmul32u(v *ssa.Value) bool {1934 v_1 := v.Args[1]1935 v_0 := v.Args[0]1936 b := v.Block1937 typ := &b.Func.Config.Types1938 // match: (Hmul32u x y)1939 // result: (SRDconst [32] (MULLD (MOVWZreg x) (MOVWZreg y)))1940 for {1941 x := v_01942 y := v_11943 v.Reset(ssaop.OpS390XSRDconst)1944 v.AuxInt = ssa.Uint8ToAuxInt(32)1945 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMULLD, typ.Int64)1946 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWZreg, typ.UInt64)1947 v1.AddArg(x)1948 v2 := b.NewValue0(v.Pos, ssaop.OpS390XMOVWZreg, typ.UInt64)1949 v2.AddArg(y)1950 v0.AddArg2(v1, v2)1951 v.AddArg(v0)1952 return true1953 }1954}1955func rewriteValue_OpITab(v *ssa.Value) bool {1956 v_0 := v.Args[0]1957 // match: (ITab (Load ptr mem))1958 // result: (MOVDload ptr mem)1959 for {1960 if v_0.Op != ssaop.OpLoad {1961 break1962 }1963 mem := v_0.Args[1]1964 ptr := v_0.Args[0]1965 v.Reset(ssaop.OpS390XMOVDload)1966 v.AddArg2(ptr, mem)1967 return true1968 }1969 return false1970}1971func rewriteValue_OpIsInBounds(v *ssa.Value) bool {1972 v_1 := v.Args[1]1973 v_0 := v.Args[0]1974 b := v.Block1975 typ := &b.Func.Config.Types1976 // match: (IsInBounds idx len)1977 // result: (LOCGR {s390x.Less} (MOVDconst [0]) (MOVDconst [1]) (CMPU idx len))1978 for {1979 idx := v_01980 len := v_11981 v.Reset(ssaop.OpS390XLOCGR)1982 v.Aux = ssa.S390xCCMaskToAux(s390x.Less)1983 v0 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1984 v0.AuxInt = ssa.Int64ToAuxInt(0)1985 v1 := b.NewValue0(v.Pos, ssaop.OpS390XMOVDconst, typ.UInt64)1986 v1.AuxInt = ssa.Int64ToAuxInt(1)1987 v2 := b.NewValue0(v.Pos, ssaop.OpS390XCMPU, types.TypeFlags)1988 v2.AddArg2(idx, len)1989 v.AddArg3(v0, v1, v2)1990 return true1991 }1992}1993func rewriteValue_OpIsNonNil(v *ssa.Value) bool {1994 v_0 := v.Args[0]1995 b := v.Block1996 typ := &b.Func.Config.Types1997 // match: (IsNonNil p)1998 // result: (LOCGR {s390x.NotEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPconst p [0]))1999 for {2000 p := v_0
Findings
✓ No findings reported for this file.