github.com/hlts2/go@v0.0.0-20170904000733-812b34efaed8/src/cmd/compile/internal/ssa/rewritePPC64.go (about) 1 // Code generated from gen/PPC64.rules; DO NOT EDIT. 2 // generated with: cd gen; go run *.go 3 4 package ssa 5 6 import "math" 7 import "cmd/internal/obj" 8 import "cmd/internal/objabi" 9 import "cmd/compile/internal/types" 10 11 var _ = math.MinInt8 // in case not otherwise used 12 var _ = obj.ANOP // in case not otherwise used 13 var _ = objabi.GOROOT // in case not otherwise used 14 var _ = types.TypeMem // in case not otherwise used 15 16 func rewriteValuePPC64(v *Value) bool { 17 switch v.Op { 18 case OpAdd16: 19 return rewriteValuePPC64_OpAdd16_0(v) 20 case OpAdd32: 21 return rewriteValuePPC64_OpAdd32_0(v) 22 case OpAdd32F: 23 return rewriteValuePPC64_OpAdd32F_0(v) 24 case OpAdd64: 25 return rewriteValuePPC64_OpAdd64_0(v) 26 case OpAdd64F: 27 return rewriteValuePPC64_OpAdd64F_0(v) 28 case OpAdd8: 29 return rewriteValuePPC64_OpAdd8_0(v) 30 case OpAddPtr: 31 return rewriteValuePPC64_OpAddPtr_0(v) 32 case OpAddr: 33 return rewriteValuePPC64_OpAddr_0(v) 34 case OpAnd16: 35 return rewriteValuePPC64_OpAnd16_0(v) 36 case OpAnd32: 37 return rewriteValuePPC64_OpAnd32_0(v) 38 case OpAnd64: 39 return rewriteValuePPC64_OpAnd64_0(v) 40 case OpAnd8: 41 return rewriteValuePPC64_OpAnd8_0(v) 42 case OpAndB: 43 return rewriteValuePPC64_OpAndB_0(v) 44 case OpAtomicAdd32: 45 return rewriteValuePPC64_OpAtomicAdd32_0(v) 46 case OpAtomicAdd64: 47 return rewriteValuePPC64_OpAtomicAdd64_0(v) 48 case OpAtomicAnd8: 49 return rewriteValuePPC64_OpAtomicAnd8_0(v) 50 case OpAtomicCompareAndSwap32: 51 return rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v) 52 case OpAtomicCompareAndSwap64: 53 return rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v) 54 case OpAtomicExchange32: 55 return rewriteValuePPC64_OpAtomicExchange32_0(v) 56 case OpAtomicExchange64: 57 return rewriteValuePPC64_OpAtomicExchange64_0(v) 58 case OpAtomicLoad32: 59 return rewriteValuePPC64_OpAtomicLoad32_0(v) 60 case OpAtomicLoad64: 61 return rewriteValuePPC64_OpAtomicLoad64_0(v) 62 case OpAtomicLoadPtr: 63 return rewriteValuePPC64_OpAtomicLoadPtr_0(v) 64 case OpAtomicOr8: 65 return rewriteValuePPC64_OpAtomicOr8_0(v) 66 case OpAtomicStore32: 67 return rewriteValuePPC64_OpAtomicStore32_0(v) 68 case OpAtomicStore64: 69 return rewriteValuePPC64_OpAtomicStore64_0(v) 70 case OpAvg64u: 71 return rewriteValuePPC64_OpAvg64u_0(v) 72 case OpBitLen32: 73 return rewriteValuePPC64_OpBitLen32_0(v) 74 case OpBitLen64: 75 return rewriteValuePPC64_OpBitLen64_0(v) 76 case OpCeil: 77 return rewriteValuePPC64_OpCeil_0(v) 78 case OpClosureCall: 79 return rewriteValuePPC64_OpClosureCall_0(v) 80 case OpCom16: 81 return rewriteValuePPC64_OpCom16_0(v) 82 case OpCom32: 83 return rewriteValuePPC64_OpCom32_0(v) 84 case OpCom64: 85 return rewriteValuePPC64_OpCom64_0(v) 86 case OpCom8: 87 return rewriteValuePPC64_OpCom8_0(v) 88 case OpConst16: 89 return rewriteValuePPC64_OpConst16_0(v) 90 case OpConst32: 91 return rewriteValuePPC64_OpConst32_0(v) 92 case OpConst32F: 93 return rewriteValuePPC64_OpConst32F_0(v) 94 case OpConst64: 95 return rewriteValuePPC64_OpConst64_0(v) 96 case OpConst64F: 97 return rewriteValuePPC64_OpConst64F_0(v) 98 case OpConst8: 99 return rewriteValuePPC64_OpConst8_0(v) 100 case OpConstBool: 101 return rewriteValuePPC64_OpConstBool_0(v) 102 case OpConstNil: 103 return rewriteValuePPC64_OpConstNil_0(v) 104 case OpConvert: 105 return rewriteValuePPC64_OpConvert_0(v) 106 case OpCtz32: 107 return rewriteValuePPC64_OpCtz32_0(v) 108 case OpCtz64: 109 return rewriteValuePPC64_OpCtz64_0(v) 110 case OpCvt32Fto32: 111 return rewriteValuePPC64_OpCvt32Fto32_0(v) 112 case OpCvt32Fto64: 113 return rewriteValuePPC64_OpCvt32Fto64_0(v) 114 case OpCvt32Fto64F: 115 return rewriteValuePPC64_OpCvt32Fto64F_0(v) 116 case OpCvt32to32F: 117 return rewriteValuePPC64_OpCvt32to32F_0(v) 118 case OpCvt32to64F: 119 return rewriteValuePPC64_OpCvt32to64F_0(v) 120 case OpCvt64Fto32: 121 return rewriteValuePPC64_OpCvt64Fto32_0(v) 122 case OpCvt64Fto32F: 123 return rewriteValuePPC64_OpCvt64Fto32F_0(v) 124 case OpCvt64Fto64: 125 return rewriteValuePPC64_OpCvt64Fto64_0(v) 126 case OpCvt64to32F: 127 return rewriteValuePPC64_OpCvt64to32F_0(v) 128 case OpCvt64to64F: 129 return rewriteValuePPC64_OpCvt64to64F_0(v) 130 case OpDiv16: 131 return rewriteValuePPC64_OpDiv16_0(v) 132 case OpDiv16u: 133 return rewriteValuePPC64_OpDiv16u_0(v) 134 case OpDiv32: 135 return rewriteValuePPC64_OpDiv32_0(v) 136 case OpDiv32F: 137 return rewriteValuePPC64_OpDiv32F_0(v) 138 case OpDiv32u: 139 return rewriteValuePPC64_OpDiv32u_0(v) 140 case OpDiv64: 141 return rewriteValuePPC64_OpDiv64_0(v) 142 case OpDiv64F: 143 return rewriteValuePPC64_OpDiv64F_0(v) 144 case OpDiv64u: 145 return rewriteValuePPC64_OpDiv64u_0(v) 146 case OpDiv8: 147 return rewriteValuePPC64_OpDiv8_0(v) 148 case OpDiv8u: 149 return rewriteValuePPC64_OpDiv8u_0(v) 150 case OpEq16: 151 return rewriteValuePPC64_OpEq16_0(v) 152 case OpEq32: 153 return rewriteValuePPC64_OpEq32_0(v) 154 case OpEq32F: 155 return rewriteValuePPC64_OpEq32F_0(v) 156 case OpEq64: 157 return rewriteValuePPC64_OpEq64_0(v) 158 case OpEq64F: 159 return rewriteValuePPC64_OpEq64F_0(v) 160 case OpEq8: 161 return rewriteValuePPC64_OpEq8_0(v) 162 case OpEqB: 163 return rewriteValuePPC64_OpEqB_0(v) 164 case OpEqPtr: 165 return rewriteValuePPC64_OpEqPtr_0(v) 166 case OpFloor: 167 return rewriteValuePPC64_OpFloor_0(v) 168 case OpGeq16: 169 return rewriteValuePPC64_OpGeq16_0(v) 170 case OpGeq16U: 171 return rewriteValuePPC64_OpGeq16U_0(v) 172 case OpGeq32: 173 return rewriteValuePPC64_OpGeq32_0(v) 174 case OpGeq32F: 175 return rewriteValuePPC64_OpGeq32F_0(v) 176 case OpGeq32U: 177 return rewriteValuePPC64_OpGeq32U_0(v) 178 case OpGeq64: 179 return rewriteValuePPC64_OpGeq64_0(v) 180 case OpGeq64F: 181 return rewriteValuePPC64_OpGeq64F_0(v) 182 case OpGeq64U: 183 return rewriteValuePPC64_OpGeq64U_0(v) 184 case OpGeq8: 185 return rewriteValuePPC64_OpGeq8_0(v) 186 case OpGeq8U: 187 return rewriteValuePPC64_OpGeq8U_0(v) 188 case OpGetClosurePtr: 189 return rewriteValuePPC64_OpGetClosurePtr_0(v) 190 case OpGreater16: 191 return rewriteValuePPC64_OpGreater16_0(v) 192 case OpGreater16U: 193 return rewriteValuePPC64_OpGreater16U_0(v) 194 case OpGreater32: 195 return rewriteValuePPC64_OpGreater32_0(v) 196 case OpGreater32F: 197 return rewriteValuePPC64_OpGreater32F_0(v) 198 case OpGreater32U: 199 return rewriteValuePPC64_OpGreater32U_0(v) 200 case OpGreater64: 201 return rewriteValuePPC64_OpGreater64_0(v) 202 case OpGreater64F: 203 return rewriteValuePPC64_OpGreater64F_0(v) 204 case OpGreater64U: 205 return rewriteValuePPC64_OpGreater64U_0(v) 206 case OpGreater8: 207 return rewriteValuePPC64_OpGreater8_0(v) 208 case OpGreater8U: 209 return rewriteValuePPC64_OpGreater8U_0(v) 210 case OpHmul32: 211 return rewriteValuePPC64_OpHmul32_0(v) 212 case OpHmul32u: 213 return rewriteValuePPC64_OpHmul32u_0(v) 214 case OpHmul64: 215 return rewriteValuePPC64_OpHmul64_0(v) 216 case OpHmul64u: 217 return rewriteValuePPC64_OpHmul64u_0(v) 218 case OpInterCall: 219 return rewriteValuePPC64_OpInterCall_0(v) 220 case OpIsInBounds: 221 return rewriteValuePPC64_OpIsInBounds_0(v) 222 case OpIsNonNil: 223 return rewriteValuePPC64_OpIsNonNil_0(v) 224 case OpIsSliceInBounds: 225 return rewriteValuePPC64_OpIsSliceInBounds_0(v) 226 case OpLeq16: 227 return rewriteValuePPC64_OpLeq16_0(v) 228 case OpLeq16U: 229 return rewriteValuePPC64_OpLeq16U_0(v) 230 case OpLeq32: 231 return rewriteValuePPC64_OpLeq32_0(v) 232 case OpLeq32F: 233 return rewriteValuePPC64_OpLeq32F_0(v) 234 case OpLeq32U: 235 return rewriteValuePPC64_OpLeq32U_0(v) 236 case OpLeq64: 237 return rewriteValuePPC64_OpLeq64_0(v) 238 case OpLeq64F: 239 return rewriteValuePPC64_OpLeq64F_0(v) 240 case OpLeq64U: 241 return rewriteValuePPC64_OpLeq64U_0(v) 242 case OpLeq8: 243 return rewriteValuePPC64_OpLeq8_0(v) 244 case OpLeq8U: 245 return rewriteValuePPC64_OpLeq8U_0(v) 246 case OpLess16: 247 return rewriteValuePPC64_OpLess16_0(v) 248 case OpLess16U: 249 return rewriteValuePPC64_OpLess16U_0(v) 250 case OpLess32: 251 return rewriteValuePPC64_OpLess32_0(v) 252 case OpLess32F: 253 return rewriteValuePPC64_OpLess32F_0(v) 254 case OpLess32U: 255 return rewriteValuePPC64_OpLess32U_0(v) 256 case OpLess64: 257 return rewriteValuePPC64_OpLess64_0(v) 258 case OpLess64F: 259 return rewriteValuePPC64_OpLess64F_0(v) 260 case OpLess64U: 261 return rewriteValuePPC64_OpLess64U_0(v) 262 case OpLess8: 263 return rewriteValuePPC64_OpLess8_0(v) 264 case OpLess8U: 265 return rewriteValuePPC64_OpLess8U_0(v) 266 case OpLoad: 267 return rewriteValuePPC64_OpLoad_0(v) 268 case OpLsh16x16: 269 return rewriteValuePPC64_OpLsh16x16_0(v) 270 case OpLsh16x32: 271 return rewriteValuePPC64_OpLsh16x32_0(v) 272 case OpLsh16x64: 273 return rewriteValuePPC64_OpLsh16x64_0(v) 274 case OpLsh16x8: 275 return rewriteValuePPC64_OpLsh16x8_0(v) 276 case OpLsh32x16: 277 return rewriteValuePPC64_OpLsh32x16_0(v) 278 case OpLsh32x32: 279 return rewriteValuePPC64_OpLsh32x32_0(v) 280 case OpLsh32x64: 281 return rewriteValuePPC64_OpLsh32x64_0(v) 282 case OpLsh32x8: 283 return rewriteValuePPC64_OpLsh32x8_0(v) 284 case OpLsh64x16: 285 return rewriteValuePPC64_OpLsh64x16_0(v) 286 case OpLsh64x32: 287 return rewriteValuePPC64_OpLsh64x32_0(v) 288 case OpLsh64x64: 289 return rewriteValuePPC64_OpLsh64x64_0(v) 290 case OpLsh64x8: 291 return rewriteValuePPC64_OpLsh64x8_0(v) 292 case OpLsh8x16: 293 return rewriteValuePPC64_OpLsh8x16_0(v) 294 case OpLsh8x32: 295 return rewriteValuePPC64_OpLsh8x32_0(v) 296 case OpLsh8x64: 297 return rewriteValuePPC64_OpLsh8x64_0(v) 298 case OpLsh8x8: 299 return rewriteValuePPC64_OpLsh8x8_0(v) 300 case OpMod16: 301 return rewriteValuePPC64_OpMod16_0(v) 302 case OpMod16u: 303 return rewriteValuePPC64_OpMod16u_0(v) 304 case OpMod32: 305 return rewriteValuePPC64_OpMod32_0(v) 306 case OpMod32u: 307 return rewriteValuePPC64_OpMod32u_0(v) 308 case OpMod64: 309 return rewriteValuePPC64_OpMod64_0(v) 310 case OpMod64u: 311 return rewriteValuePPC64_OpMod64u_0(v) 312 case OpMod8: 313 return rewriteValuePPC64_OpMod8_0(v) 314 case OpMod8u: 315 return rewriteValuePPC64_OpMod8u_0(v) 316 case OpMove: 317 return rewriteValuePPC64_OpMove_0(v) || rewriteValuePPC64_OpMove_10(v) 318 case OpMul16: 319 return rewriteValuePPC64_OpMul16_0(v) 320 case OpMul32: 321 return rewriteValuePPC64_OpMul32_0(v) 322 case OpMul32F: 323 return rewriteValuePPC64_OpMul32F_0(v) 324 case OpMul64: 325 return rewriteValuePPC64_OpMul64_0(v) 326 case OpMul64F: 327 return rewriteValuePPC64_OpMul64F_0(v) 328 case OpMul8: 329 return rewriteValuePPC64_OpMul8_0(v) 330 case OpNeg16: 331 return rewriteValuePPC64_OpNeg16_0(v) 332 case OpNeg32: 333 return rewriteValuePPC64_OpNeg32_0(v) 334 case OpNeg32F: 335 return rewriteValuePPC64_OpNeg32F_0(v) 336 case OpNeg64: 337 return rewriteValuePPC64_OpNeg64_0(v) 338 case OpNeg64F: 339 return rewriteValuePPC64_OpNeg64F_0(v) 340 case OpNeg8: 341 return rewriteValuePPC64_OpNeg8_0(v) 342 case OpNeq16: 343 return rewriteValuePPC64_OpNeq16_0(v) 344 case OpNeq32: 345 return rewriteValuePPC64_OpNeq32_0(v) 346 case OpNeq32F: 347 return rewriteValuePPC64_OpNeq32F_0(v) 348 case OpNeq64: 349 return rewriteValuePPC64_OpNeq64_0(v) 350 case OpNeq64F: 351 return rewriteValuePPC64_OpNeq64F_0(v) 352 case OpNeq8: 353 return rewriteValuePPC64_OpNeq8_0(v) 354 case OpNeqB: 355 return rewriteValuePPC64_OpNeqB_0(v) 356 case OpNeqPtr: 357 return rewriteValuePPC64_OpNeqPtr_0(v) 358 case OpNilCheck: 359 return rewriteValuePPC64_OpNilCheck_0(v) 360 case OpNot: 361 return rewriteValuePPC64_OpNot_0(v) 362 case OpOffPtr: 363 return rewriteValuePPC64_OpOffPtr_0(v) 364 case OpOr16: 365 return rewriteValuePPC64_OpOr16_0(v) 366 case OpOr32: 367 return rewriteValuePPC64_OpOr32_0(v) 368 case OpOr64: 369 return rewriteValuePPC64_OpOr64_0(v) 370 case OpOr8: 371 return rewriteValuePPC64_OpOr8_0(v) 372 case OpOrB: 373 return rewriteValuePPC64_OpOrB_0(v) 374 case OpPPC64ADD: 375 return rewriteValuePPC64_OpPPC64ADD_0(v) 376 case OpPPC64ADDconst: 377 return rewriteValuePPC64_OpPPC64ADDconst_0(v) 378 case OpPPC64AND: 379 return rewriteValuePPC64_OpPPC64AND_0(v) 380 case OpPPC64ANDconst: 381 return rewriteValuePPC64_OpPPC64ANDconst_0(v) 382 case OpPPC64CMP: 383 return rewriteValuePPC64_OpPPC64CMP_0(v) 384 case OpPPC64CMPU: 385 return rewriteValuePPC64_OpPPC64CMPU_0(v) 386 case OpPPC64CMPUconst: 387 return rewriteValuePPC64_OpPPC64CMPUconst_0(v) 388 case OpPPC64CMPW: 389 return rewriteValuePPC64_OpPPC64CMPW_0(v) 390 case OpPPC64CMPWU: 391 return rewriteValuePPC64_OpPPC64CMPWU_0(v) 392 case OpPPC64CMPWUconst: 393 return rewriteValuePPC64_OpPPC64CMPWUconst_0(v) 394 case OpPPC64CMPWconst: 395 return rewriteValuePPC64_OpPPC64CMPWconst_0(v) 396 case OpPPC64CMPconst: 397 return rewriteValuePPC64_OpPPC64CMPconst_0(v) 398 case OpPPC64Equal: 399 return rewriteValuePPC64_OpPPC64Equal_0(v) 400 case OpPPC64FADD: 401 return rewriteValuePPC64_OpPPC64FADD_0(v) 402 case OpPPC64FADDS: 403 return rewriteValuePPC64_OpPPC64FADDS_0(v) 404 case OpPPC64FMOVDload: 405 return rewriteValuePPC64_OpPPC64FMOVDload_0(v) 406 case OpPPC64FMOVDstore: 407 return rewriteValuePPC64_OpPPC64FMOVDstore_0(v) 408 case OpPPC64FMOVSload: 409 return rewriteValuePPC64_OpPPC64FMOVSload_0(v) 410 case OpPPC64FMOVSstore: 411 return rewriteValuePPC64_OpPPC64FMOVSstore_0(v) 412 case OpPPC64FSUB: 413 return rewriteValuePPC64_OpPPC64FSUB_0(v) 414 case OpPPC64FSUBS: 415 return rewriteValuePPC64_OpPPC64FSUBS_0(v) 416 case OpPPC64GreaterEqual: 417 return rewriteValuePPC64_OpPPC64GreaterEqual_0(v) 418 case OpPPC64GreaterThan: 419 return rewriteValuePPC64_OpPPC64GreaterThan_0(v) 420 case OpPPC64LessEqual: 421 return rewriteValuePPC64_OpPPC64LessEqual_0(v) 422 case OpPPC64LessThan: 423 return rewriteValuePPC64_OpPPC64LessThan_0(v) 424 case OpPPC64MOVBZload: 425 return rewriteValuePPC64_OpPPC64MOVBZload_0(v) 426 case OpPPC64MOVBZreg: 427 return rewriteValuePPC64_OpPPC64MOVBZreg_0(v) 428 case OpPPC64MOVBreg: 429 return rewriteValuePPC64_OpPPC64MOVBreg_0(v) 430 case OpPPC64MOVBstore: 431 return rewriteValuePPC64_OpPPC64MOVBstore_0(v) 432 case OpPPC64MOVBstorezero: 433 return rewriteValuePPC64_OpPPC64MOVBstorezero_0(v) 434 case OpPPC64MOVDload: 435 return rewriteValuePPC64_OpPPC64MOVDload_0(v) 436 case OpPPC64MOVDstore: 437 return rewriteValuePPC64_OpPPC64MOVDstore_0(v) 438 case OpPPC64MOVDstorezero: 439 return rewriteValuePPC64_OpPPC64MOVDstorezero_0(v) 440 case OpPPC64MOVHZload: 441 return rewriteValuePPC64_OpPPC64MOVHZload_0(v) 442 case OpPPC64MOVHZreg: 443 return rewriteValuePPC64_OpPPC64MOVHZreg_0(v) 444 case OpPPC64MOVHload: 445 return rewriteValuePPC64_OpPPC64MOVHload_0(v) 446 case OpPPC64MOVHreg: 447 return rewriteValuePPC64_OpPPC64MOVHreg_0(v) 448 case OpPPC64MOVHstore: 449 return rewriteValuePPC64_OpPPC64MOVHstore_0(v) 450 case OpPPC64MOVHstorezero: 451 return rewriteValuePPC64_OpPPC64MOVHstorezero_0(v) 452 case OpPPC64MOVWZload: 453 return rewriteValuePPC64_OpPPC64MOVWZload_0(v) 454 case OpPPC64MOVWZreg: 455 return rewriteValuePPC64_OpPPC64MOVWZreg_0(v) 456 case OpPPC64MOVWload: 457 return rewriteValuePPC64_OpPPC64MOVWload_0(v) 458 case OpPPC64MOVWreg: 459 return rewriteValuePPC64_OpPPC64MOVWreg_0(v) 460 case OpPPC64MOVWstore: 461 return rewriteValuePPC64_OpPPC64MOVWstore_0(v) 462 case OpPPC64MOVWstorezero: 463 return rewriteValuePPC64_OpPPC64MOVWstorezero_0(v) 464 case OpPPC64MaskIfNotCarry: 465 return rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v) 466 case OpPPC64NotEqual: 467 return rewriteValuePPC64_OpPPC64NotEqual_0(v) 468 case OpPPC64OR: 469 return rewriteValuePPC64_OpPPC64OR_0(v) 470 case OpPPC64ORN: 471 return rewriteValuePPC64_OpPPC64ORN_0(v) 472 case OpPPC64ORconst: 473 return rewriteValuePPC64_OpPPC64ORconst_0(v) 474 case OpPPC64SUB: 475 return rewriteValuePPC64_OpPPC64SUB_0(v) 476 case OpPPC64XOR: 477 return rewriteValuePPC64_OpPPC64XOR_0(v) 478 case OpPPC64XORconst: 479 return rewriteValuePPC64_OpPPC64XORconst_0(v) 480 case OpPopCount16: 481 return rewriteValuePPC64_OpPopCount16_0(v) 482 case OpPopCount32: 483 return rewriteValuePPC64_OpPopCount32_0(v) 484 case OpPopCount64: 485 return rewriteValuePPC64_OpPopCount64_0(v) 486 case OpPopCount8: 487 return rewriteValuePPC64_OpPopCount8_0(v) 488 case OpRound32F: 489 return rewriteValuePPC64_OpRound32F_0(v) 490 case OpRound64F: 491 return rewriteValuePPC64_OpRound64F_0(v) 492 case OpRsh16Ux16: 493 return rewriteValuePPC64_OpRsh16Ux16_0(v) 494 case OpRsh16Ux32: 495 return rewriteValuePPC64_OpRsh16Ux32_0(v) 496 case OpRsh16Ux64: 497 return rewriteValuePPC64_OpRsh16Ux64_0(v) 498 case OpRsh16Ux8: 499 return rewriteValuePPC64_OpRsh16Ux8_0(v) 500 case OpRsh16x16: 501 return rewriteValuePPC64_OpRsh16x16_0(v) 502 case OpRsh16x32: 503 return rewriteValuePPC64_OpRsh16x32_0(v) 504 case OpRsh16x64: 505 return rewriteValuePPC64_OpRsh16x64_0(v) 506 case OpRsh16x8: 507 return rewriteValuePPC64_OpRsh16x8_0(v) 508 case OpRsh32Ux16: 509 return rewriteValuePPC64_OpRsh32Ux16_0(v) 510 case OpRsh32Ux32: 511 return rewriteValuePPC64_OpRsh32Ux32_0(v) 512 case OpRsh32Ux64: 513 return rewriteValuePPC64_OpRsh32Ux64_0(v) 514 case OpRsh32Ux8: 515 return rewriteValuePPC64_OpRsh32Ux8_0(v) 516 case OpRsh32x16: 517 return rewriteValuePPC64_OpRsh32x16_0(v) 518 case OpRsh32x32: 519 return rewriteValuePPC64_OpRsh32x32_0(v) 520 case OpRsh32x64: 521 return rewriteValuePPC64_OpRsh32x64_0(v) 522 case OpRsh32x8: 523 return rewriteValuePPC64_OpRsh32x8_0(v) 524 case OpRsh64Ux16: 525 return rewriteValuePPC64_OpRsh64Ux16_0(v) 526 case OpRsh64Ux32: 527 return rewriteValuePPC64_OpRsh64Ux32_0(v) 528 case OpRsh64Ux64: 529 return rewriteValuePPC64_OpRsh64Ux64_0(v) 530 case OpRsh64Ux8: 531 return rewriteValuePPC64_OpRsh64Ux8_0(v) 532 case OpRsh64x16: 533 return rewriteValuePPC64_OpRsh64x16_0(v) 534 case OpRsh64x32: 535 return rewriteValuePPC64_OpRsh64x32_0(v) 536 case OpRsh64x64: 537 return rewriteValuePPC64_OpRsh64x64_0(v) 538 case OpRsh64x8: 539 return rewriteValuePPC64_OpRsh64x8_0(v) 540 case OpRsh8Ux16: 541 return rewriteValuePPC64_OpRsh8Ux16_0(v) 542 case OpRsh8Ux32: 543 return rewriteValuePPC64_OpRsh8Ux32_0(v) 544 case OpRsh8Ux64: 545 return rewriteValuePPC64_OpRsh8Ux64_0(v) 546 case OpRsh8Ux8: 547 return rewriteValuePPC64_OpRsh8Ux8_0(v) 548 case OpRsh8x16: 549 return rewriteValuePPC64_OpRsh8x16_0(v) 550 case OpRsh8x32: 551 return rewriteValuePPC64_OpRsh8x32_0(v) 552 case OpRsh8x64: 553 return rewriteValuePPC64_OpRsh8x64_0(v) 554 case OpRsh8x8: 555 return rewriteValuePPC64_OpRsh8x8_0(v) 556 case OpSignExt16to32: 557 return rewriteValuePPC64_OpSignExt16to32_0(v) 558 case OpSignExt16to64: 559 return rewriteValuePPC64_OpSignExt16to64_0(v) 560 case OpSignExt32to64: 561 return rewriteValuePPC64_OpSignExt32to64_0(v) 562 case OpSignExt8to16: 563 return rewriteValuePPC64_OpSignExt8to16_0(v) 564 case OpSignExt8to32: 565 return rewriteValuePPC64_OpSignExt8to32_0(v) 566 case OpSignExt8to64: 567 return rewriteValuePPC64_OpSignExt8to64_0(v) 568 case OpSlicemask: 569 return rewriteValuePPC64_OpSlicemask_0(v) 570 case OpSqrt: 571 return rewriteValuePPC64_OpSqrt_0(v) 572 case OpStaticCall: 573 return rewriteValuePPC64_OpStaticCall_0(v) 574 case OpStore: 575 return rewriteValuePPC64_OpStore_0(v) 576 case OpSub16: 577 return rewriteValuePPC64_OpSub16_0(v) 578 case OpSub32: 579 return rewriteValuePPC64_OpSub32_0(v) 580 case OpSub32F: 581 return rewriteValuePPC64_OpSub32F_0(v) 582 case OpSub64: 583 return rewriteValuePPC64_OpSub64_0(v) 584 case OpSub64F: 585 return rewriteValuePPC64_OpSub64F_0(v) 586 case OpSub8: 587 return rewriteValuePPC64_OpSub8_0(v) 588 case OpSubPtr: 589 return rewriteValuePPC64_OpSubPtr_0(v) 590 case OpTrunc: 591 return rewriteValuePPC64_OpTrunc_0(v) 592 case OpTrunc16to8: 593 return rewriteValuePPC64_OpTrunc16to8_0(v) 594 case OpTrunc32to16: 595 return rewriteValuePPC64_OpTrunc32to16_0(v) 596 case OpTrunc32to8: 597 return rewriteValuePPC64_OpTrunc32to8_0(v) 598 case OpTrunc64to16: 599 return rewriteValuePPC64_OpTrunc64to16_0(v) 600 case OpTrunc64to32: 601 return rewriteValuePPC64_OpTrunc64to32_0(v) 602 case OpTrunc64to8: 603 return rewriteValuePPC64_OpTrunc64to8_0(v) 604 case OpXor16: 605 return rewriteValuePPC64_OpXor16_0(v) 606 case OpXor32: 607 return rewriteValuePPC64_OpXor32_0(v) 608 case OpXor64: 609 return rewriteValuePPC64_OpXor64_0(v) 610 case OpXor8: 611 return rewriteValuePPC64_OpXor8_0(v) 612 case OpZero: 613 return rewriteValuePPC64_OpZero_0(v) || rewriteValuePPC64_OpZero_10(v) 614 case OpZeroExt16to32: 615 return rewriteValuePPC64_OpZeroExt16to32_0(v) 616 case OpZeroExt16to64: 617 return rewriteValuePPC64_OpZeroExt16to64_0(v) 618 case OpZeroExt32to64: 619 return rewriteValuePPC64_OpZeroExt32to64_0(v) 620 case OpZeroExt8to16: 621 return rewriteValuePPC64_OpZeroExt8to16_0(v) 622 case OpZeroExt8to32: 623 return rewriteValuePPC64_OpZeroExt8to32_0(v) 624 case OpZeroExt8to64: 625 return rewriteValuePPC64_OpZeroExt8to64_0(v) 626 } 627 return false 628 } 629 func rewriteValuePPC64_OpAdd16_0(v *Value) bool { 630 // match: (Add16 x y) 631 // cond: 632 // result: (ADD x y) 633 for { 634 _ = v.Args[1] 635 x := v.Args[0] 636 y := v.Args[1] 637 v.reset(OpPPC64ADD) 638 v.AddArg(x) 639 v.AddArg(y) 640 return true 641 } 642 } 643 func rewriteValuePPC64_OpAdd32_0(v *Value) bool { 644 // match: (Add32 x y) 645 // cond: 646 // result: (ADD x y) 647 for { 648 _ = v.Args[1] 649 x := v.Args[0] 650 y := v.Args[1] 651 v.reset(OpPPC64ADD) 652 v.AddArg(x) 653 v.AddArg(y) 654 return true 655 } 656 } 657 func rewriteValuePPC64_OpAdd32F_0(v *Value) bool { 658 // match: (Add32F x y) 659 // cond: 660 // result: (FADDS x y) 661 for { 662 _ = v.Args[1] 663 x := v.Args[0] 664 y := v.Args[1] 665 v.reset(OpPPC64FADDS) 666 v.AddArg(x) 667 v.AddArg(y) 668 return true 669 } 670 } 671 func rewriteValuePPC64_OpAdd64_0(v *Value) bool { 672 // match: (Add64 x y) 673 // cond: 674 // result: (ADD x y) 675 for { 676 _ = v.Args[1] 677 x := v.Args[0] 678 y := v.Args[1] 679 v.reset(OpPPC64ADD) 680 v.AddArg(x) 681 v.AddArg(y) 682 return true 683 } 684 } 685 func rewriteValuePPC64_OpAdd64F_0(v *Value) bool { 686 // match: (Add64F x y) 687 // cond: 688 // result: (FADD x y) 689 for { 690 _ = v.Args[1] 691 x := v.Args[0] 692 y := v.Args[1] 693 v.reset(OpPPC64FADD) 694 v.AddArg(x) 695 v.AddArg(y) 696 return true 697 } 698 } 699 func rewriteValuePPC64_OpAdd8_0(v *Value) bool { 700 // match: (Add8 x y) 701 // cond: 702 // result: (ADD x y) 703 for { 704 _ = v.Args[1] 705 x := v.Args[0] 706 y := v.Args[1] 707 v.reset(OpPPC64ADD) 708 v.AddArg(x) 709 v.AddArg(y) 710 return true 711 } 712 } 713 func rewriteValuePPC64_OpAddPtr_0(v *Value) bool { 714 // match: (AddPtr x y) 715 // cond: 716 // result: (ADD x y) 717 for { 718 _ = v.Args[1] 719 x := v.Args[0] 720 y := v.Args[1] 721 v.reset(OpPPC64ADD) 722 v.AddArg(x) 723 v.AddArg(y) 724 return true 725 } 726 } 727 func rewriteValuePPC64_OpAddr_0(v *Value) bool { 728 // match: (Addr {sym} base) 729 // cond: 730 // result: (MOVDaddr {sym} base) 731 for { 732 sym := v.Aux 733 base := v.Args[0] 734 v.reset(OpPPC64MOVDaddr) 735 v.Aux = sym 736 v.AddArg(base) 737 return true 738 } 739 } 740 func rewriteValuePPC64_OpAnd16_0(v *Value) bool { 741 // match: (And16 x y) 742 // cond: 743 // result: (AND x y) 744 for { 745 _ = v.Args[1] 746 x := v.Args[0] 747 y := v.Args[1] 748 v.reset(OpPPC64AND) 749 v.AddArg(x) 750 v.AddArg(y) 751 return true 752 } 753 } 754 func rewriteValuePPC64_OpAnd32_0(v *Value) bool { 755 // match: (And32 x y) 756 // cond: 757 // result: (AND x y) 758 for { 759 _ = v.Args[1] 760 x := v.Args[0] 761 y := v.Args[1] 762 v.reset(OpPPC64AND) 763 v.AddArg(x) 764 v.AddArg(y) 765 return true 766 } 767 } 768 func rewriteValuePPC64_OpAnd64_0(v *Value) bool { 769 // match: (And64 x y) 770 // cond: 771 // result: (AND x y) 772 for { 773 _ = v.Args[1] 774 x := v.Args[0] 775 y := v.Args[1] 776 v.reset(OpPPC64AND) 777 v.AddArg(x) 778 v.AddArg(y) 779 return true 780 } 781 } 782 func rewriteValuePPC64_OpAnd8_0(v *Value) bool { 783 // match: (And8 x y) 784 // cond: 785 // result: (AND x y) 786 for { 787 _ = v.Args[1] 788 x := v.Args[0] 789 y := v.Args[1] 790 v.reset(OpPPC64AND) 791 v.AddArg(x) 792 v.AddArg(y) 793 return true 794 } 795 } 796 func rewriteValuePPC64_OpAndB_0(v *Value) bool { 797 // match: (AndB x y) 798 // cond: 799 // result: (AND x y) 800 for { 801 _ = v.Args[1] 802 x := v.Args[0] 803 y := v.Args[1] 804 v.reset(OpPPC64AND) 805 v.AddArg(x) 806 v.AddArg(y) 807 return true 808 } 809 } 810 func rewriteValuePPC64_OpAtomicAdd32_0(v *Value) bool { 811 // match: (AtomicAdd32 ptr val mem) 812 // cond: 813 // result: (LoweredAtomicAdd32 ptr val mem) 814 for { 815 _ = v.Args[2] 816 ptr := v.Args[0] 817 val := v.Args[1] 818 mem := v.Args[2] 819 v.reset(OpPPC64LoweredAtomicAdd32) 820 v.AddArg(ptr) 821 v.AddArg(val) 822 v.AddArg(mem) 823 return true 824 } 825 } 826 func rewriteValuePPC64_OpAtomicAdd64_0(v *Value) bool { 827 // match: (AtomicAdd64 ptr val mem) 828 // cond: 829 // result: (LoweredAtomicAdd64 ptr val mem) 830 for { 831 _ = v.Args[2] 832 ptr := v.Args[0] 833 val := v.Args[1] 834 mem := v.Args[2] 835 v.reset(OpPPC64LoweredAtomicAdd64) 836 v.AddArg(ptr) 837 v.AddArg(val) 838 v.AddArg(mem) 839 return true 840 } 841 } 842 func rewriteValuePPC64_OpAtomicAnd8_0(v *Value) bool { 843 // match: (AtomicAnd8 ptr val mem) 844 // cond: 845 // result: (LoweredAtomicAnd8 ptr val mem) 846 for { 847 _ = v.Args[2] 848 ptr := v.Args[0] 849 val := v.Args[1] 850 mem := v.Args[2] 851 v.reset(OpPPC64LoweredAtomicAnd8) 852 v.AddArg(ptr) 853 v.AddArg(val) 854 v.AddArg(mem) 855 return true 856 } 857 } 858 func rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v *Value) bool { 859 // match: (AtomicCompareAndSwap32 ptr old new_ mem) 860 // cond: 861 // result: (LoweredAtomicCas32 ptr old new_ mem) 862 for { 863 _ = v.Args[3] 864 ptr := v.Args[0] 865 old := v.Args[1] 866 new_ := v.Args[2] 867 mem := v.Args[3] 868 v.reset(OpPPC64LoweredAtomicCas32) 869 v.AddArg(ptr) 870 v.AddArg(old) 871 v.AddArg(new_) 872 v.AddArg(mem) 873 return true 874 } 875 } 876 func rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v *Value) bool { 877 // match: (AtomicCompareAndSwap64 ptr old new_ mem) 878 // cond: 879 // result: (LoweredAtomicCas64 ptr old new_ mem) 880 for { 881 _ = v.Args[3] 882 ptr := v.Args[0] 883 old := v.Args[1] 884 new_ := v.Args[2] 885 mem := v.Args[3] 886 v.reset(OpPPC64LoweredAtomicCas64) 887 v.AddArg(ptr) 888 v.AddArg(old) 889 v.AddArg(new_) 890 v.AddArg(mem) 891 return true 892 } 893 } 894 func rewriteValuePPC64_OpAtomicExchange32_0(v *Value) bool { 895 // match: (AtomicExchange32 ptr val mem) 896 // cond: 897 // result: (LoweredAtomicExchange32 ptr val mem) 898 for { 899 _ = v.Args[2] 900 ptr := v.Args[0] 901 val := v.Args[1] 902 mem := v.Args[2] 903 v.reset(OpPPC64LoweredAtomicExchange32) 904 v.AddArg(ptr) 905 v.AddArg(val) 906 v.AddArg(mem) 907 return true 908 } 909 } 910 func rewriteValuePPC64_OpAtomicExchange64_0(v *Value) bool { 911 // match: (AtomicExchange64 ptr val mem) 912 // cond: 913 // result: (LoweredAtomicExchange64 ptr val mem) 914 for { 915 _ = v.Args[2] 916 ptr := v.Args[0] 917 val := v.Args[1] 918 mem := v.Args[2] 919 v.reset(OpPPC64LoweredAtomicExchange64) 920 v.AddArg(ptr) 921 v.AddArg(val) 922 v.AddArg(mem) 923 return true 924 } 925 } 926 func rewriteValuePPC64_OpAtomicLoad32_0(v *Value) bool { 927 // match: (AtomicLoad32 ptr mem) 928 // cond: 929 // result: (LoweredAtomicLoad32 ptr mem) 930 for { 931 _ = v.Args[1] 932 ptr := v.Args[0] 933 mem := v.Args[1] 934 v.reset(OpPPC64LoweredAtomicLoad32) 935 v.AddArg(ptr) 936 v.AddArg(mem) 937 return true 938 } 939 } 940 func rewriteValuePPC64_OpAtomicLoad64_0(v *Value) bool { 941 // match: (AtomicLoad64 ptr mem) 942 // cond: 943 // result: (LoweredAtomicLoad64 ptr mem) 944 for { 945 _ = v.Args[1] 946 ptr := v.Args[0] 947 mem := v.Args[1] 948 v.reset(OpPPC64LoweredAtomicLoad64) 949 v.AddArg(ptr) 950 v.AddArg(mem) 951 return true 952 } 953 } 954 func rewriteValuePPC64_OpAtomicLoadPtr_0(v *Value) bool { 955 // match: (AtomicLoadPtr ptr mem) 956 // cond: 957 // result: (LoweredAtomicLoadPtr ptr mem) 958 for { 959 _ = v.Args[1] 960 ptr := v.Args[0] 961 mem := v.Args[1] 962 v.reset(OpPPC64LoweredAtomicLoadPtr) 963 v.AddArg(ptr) 964 v.AddArg(mem) 965 return true 966 } 967 } 968 func rewriteValuePPC64_OpAtomicOr8_0(v *Value) bool { 969 // match: (AtomicOr8 ptr val mem) 970 // cond: 971 // result: (LoweredAtomicOr8 ptr val mem) 972 for { 973 _ = v.Args[2] 974 ptr := v.Args[0] 975 val := v.Args[1] 976 mem := v.Args[2] 977 v.reset(OpPPC64LoweredAtomicOr8) 978 v.AddArg(ptr) 979 v.AddArg(val) 980 v.AddArg(mem) 981 return true 982 } 983 } 984 func rewriteValuePPC64_OpAtomicStore32_0(v *Value) bool { 985 // match: (AtomicStore32 ptr val mem) 986 // cond: 987 // result: (LoweredAtomicStore32 ptr val mem) 988 for { 989 _ = v.Args[2] 990 ptr := v.Args[0] 991 val := v.Args[1] 992 mem := v.Args[2] 993 v.reset(OpPPC64LoweredAtomicStore32) 994 v.AddArg(ptr) 995 v.AddArg(val) 996 v.AddArg(mem) 997 return true 998 } 999 } 1000 func rewriteValuePPC64_OpAtomicStore64_0(v *Value) bool { 1001 // match: (AtomicStore64 ptr val mem) 1002 // cond: 1003 // result: (LoweredAtomicStore64 ptr val mem) 1004 for { 1005 _ = v.Args[2] 1006 ptr := v.Args[0] 1007 val := v.Args[1] 1008 mem := v.Args[2] 1009 v.reset(OpPPC64LoweredAtomicStore64) 1010 v.AddArg(ptr) 1011 v.AddArg(val) 1012 v.AddArg(mem) 1013 return true 1014 } 1015 } 1016 func rewriteValuePPC64_OpAvg64u_0(v *Value) bool { 1017 b := v.Block 1018 _ = b 1019 // match: (Avg64u <t> x y) 1020 // cond: 1021 // result: (ADD (SRDconst <t> (SUB <t> x y) [1]) y) 1022 for { 1023 t := v.Type 1024 _ = v.Args[1] 1025 x := v.Args[0] 1026 y := v.Args[1] 1027 v.reset(OpPPC64ADD) 1028 v0 := b.NewValue0(v.Pos, OpPPC64SRDconst, t) 1029 v0.AuxInt = 1 1030 v1 := b.NewValue0(v.Pos, OpPPC64SUB, t) 1031 v1.AddArg(x) 1032 v1.AddArg(y) 1033 v0.AddArg(v1) 1034 v.AddArg(v0) 1035 v.AddArg(y) 1036 return true 1037 } 1038 } 1039 func rewriteValuePPC64_OpBitLen32_0(v *Value) bool { 1040 b := v.Block 1041 _ = b 1042 typ := &b.Func.Config.Types 1043 _ = typ 1044 // match: (BitLen32 x) 1045 // cond: 1046 // result: (SUB (MOVDconst [32]) (CNTLZW <typ.Int> x)) 1047 for { 1048 x := v.Args[0] 1049 v.reset(OpPPC64SUB) 1050 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 1051 v0.AuxInt = 32 1052 v.AddArg(v0) 1053 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZW, typ.Int) 1054 v1.AddArg(x) 1055 v.AddArg(v1) 1056 return true 1057 } 1058 } 1059 func rewriteValuePPC64_OpBitLen64_0(v *Value) bool { 1060 b := v.Block 1061 _ = b 1062 typ := &b.Func.Config.Types 1063 _ = typ 1064 // match: (BitLen64 x) 1065 // cond: 1066 // result: (SUB (MOVDconst [64]) (CNTLZD <typ.Int> x)) 1067 for { 1068 x := v.Args[0] 1069 v.reset(OpPPC64SUB) 1070 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 1071 v0.AuxInt = 64 1072 v.AddArg(v0) 1073 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZD, typ.Int) 1074 v1.AddArg(x) 1075 v.AddArg(v1) 1076 return true 1077 } 1078 } 1079 func rewriteValuePPC64_OpCeil_0(v *Value) bool { 1080 // match: (Ceil x) 1081 // cond: 1082 // result: (FCEIL x) 1083 for { 1084 x := v.Args[0] 1085 v.reset(OpPPC64FCEIL) 1086 v.AddArg(x) 1087 return true 1088 } 1089 } 1090 func rewriteValuePPC64_OpClosureCall_0(v *Value) bool { 1091 // match: (ClosureCall [argwid] entry closure mem) 1092 // cond: 1093 // result: (CALLclosure [argwid] entry closure mem) 1094 for { 1095 argwid := v.AuxInt 1096 _ = v.Args[2] 1097 entry := v.Args[0] 1098 closure := v.Args[1] 1099 mem := v.Args[2] 1100 v.reset(OpPPC64CALLclosure) 1101 v.AuxInt = argwid 1102 v.AddArg(entry) 1103 v.AddArg(closure) 1104 v.AddArg(mem) 1105 return true 1106 } 1107 } 1108 func rewriteValuePPC64_OpCom16_0(v *Value) bool { 1109 // match: (Com16 x) 1110 // cond: 1111 // result: (NOR x x) 1112 for { 1113 x := v.Args[0] 1114 v.reset(OpPPC64NOR) 1115 v.AddArg(x) 1116 v.AddArg(x) 1117 return true 1118 } 1119 } 1120 func rewriteValuePPC64_OpCom32_0(v *Value) bool { 1121 // match: (Com32 x) 1122 // cond: 1123 // result: (NOR x x) 1124 for { 1125 x := v.Args[0] 1126 v.reset(OpPPC64NOR) 1127 v.AddArg(x) 1128 v.AddArg(x) 1129 return true 1130 } 1131 } 1132 func rewriteValuePPC64_OpCom64_0(v *Value) bool { 1133 // match: (Com64 x) 1134 // cond: 1135 // result: (NOR x x) 1136 for { 1137 x := v.Args[0] 1138 v.reset(OpPPC64NOR) 1139 v.AddArg(x) 1140 v.AddArg(x) 1141 return true 1142 } 1143 } 1144 func rewriteValuePPC64_OpCom8_0(v *Value) bool { 1145 // match: (Com8 x) 1146 // cond: 1147 // result: (NOR x x) 1148 for { 1149 x := v.Args[0] 1150 v.reset(OpPPC64NOR) 1151 v.AddArg(x) 1152 v.AddArg(x) 1153 return true 1154 } 1155 } 1156 func rewriteValuePPC64_OpConst16_0(v *Value) bool { 1157 // match: (Const16 [val]) 1158 // cond: 1159 // result: (MOVDconst [val]) 1160 for { 1161 val := v.AuxInt 1162 v.reset(OpPPC64MOVDconst) 1163 v.AuxInt = val 1164 return true 1165 } 1166 } 1167 func rewriteValuePPC64_OpConst32_0(v *Value) bool { 1168 // match: (Const32 [val]) 1169 // cond: 1170 // result: (MOVDconst [val]) 1171 for { 1172 val := v.AuxInt 1173 v.reset(OpPPC64MOVDconst) 1174 v.AuxInt = val 1175 return true 1176 } 1177 } 1178 func rewriteValuePPC64_OpConst32F_0(v *Value) bool { 1179 // match: (Const32F [val]) 1180 // cond: 1181 // result: (FMOVSconst [val]) 1182 for { 1183 val := v.AuxInt 1184 v.reset(OpPPC64FMOVSconst) 1185 v.AuxInt = val 1186 return true 1187 } 1188 } 1189 func rewriteValuePPC64_OpConst64_0(v *Value) bool { 1190 // match: (Const64 [val]) 1191 // cond: 1192 // result: (MOVDconst [val]) 1193 for { 1194 val := v.AuxInt 1195 v.reset(OpPPC64MOVDconst) 1196 v.AuxInt = val 1197 return true 1198 } 1199 } 1200 func rewriteValuePPC64_OpConst64F_0(v *Value) bool { 1201 // match: (Const64F [val]) 1202 // cond: 1203 // result: (FMOVDconst [val]) 1204 for { 1205 val := v.AuxInt 1206 v.reset(OpPPC64FMOVDconst) 1207 v.AuxInt = val 1208 return true 1209 } 1210 } 1211 func rewriteValuePPC64_OpConst8_0(v *Value) bool { 1212 // match: (Const8 [val]) 1213 // cond: 1214 // result: (MOVDconst [val]) 1215 for { 1216 val := v.AuxInt 1217 v.reset(OpPPC64MOVDconst) 1218 v.AuxInt = val 1219 return true 1220 } 1221 } 1222 func rewriteValuePPC64_OpConstBool_0(v *Value) bool { 1223 // match: (ConstBool [b]) 1224 // cond: 1225 // result: (MOVDconst [b]) 1226 for { 1227 b := v.AuxInt 1228 v.reset(OpPPC64MOVDconst) 1229 v.AuxInt = b 1230 return true 1231 } 1232 } 1233 func rewriteValuePPC64_OpConstNil_0(v *Value) bool { 1234 // match: (ConstNil) 1235 // cond: 1236 // result: (MOVDconst [0]) 1237 for { 1238 v.reset(OpPPC64MOVDconst) 1239 v.AuxInt = 0 1240 return true 1241 } 1242 } 1243 func rewriteValuePPC64_OpConvert_0(v *Value) bool { 1244 // match: (Convert <t> x mem) 1245 // cond: 1246 // result: (MOVDconvert <t> x mem) 1247 for { 1248 t := v.Type 1249 _ = v.Args[1] 1250 x := v.Args[0] 1251 mem := v.Args[1] 1252 v.reset(OpPPC64MOVDconvert) 1253 v.Type = t 1254 v.AddArg(x) 1255 v.AddArg(mem) 1256 return true 1257 } 1258 } 1259 func rewriteValuePPC64_OpCtz32_0(v *Value) bool { 1260 b := v.Block 1261 _ = b 1262 typ := &b.Func.Config.Types 1263 _ = typ 1264 // match: (Ctz32 x) 1265 // cond: 1266 // result: (POPCNTW (MOVWZreg (ANDN <typ.Int> (ADDconst <typ.Int> [-1] x) x))) 1267 for { 1268 x := v.Args[0] 1269 v.reset(OpPPC64POPCNTW) 1270 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) 1271 v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int) 1272 v2 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int) 1273 v2.AuxInt = -1 1274 v2.AddArg(x) 1275 v1.AddArg(v2) 1276 v1.AddArg(x) 1277 v0.AddArg(v1) 1278 v.AddArg(v0) 1279 return true 1280 } 1281 } 1282 func rewriteValuePPC64_OpCtz64_0(v *Value) bool { 1283 b := v.Block 1284 _ = b 1285 typ := &b.Func.Config.Types 1286 _ = typ 1287 // match: (Ctz64 x) 1288 // cond: 1289 // result: (POPCNTD (ANDN <typ.Int64> (ADDconst <typ.Int64> [-1] x) x)) 1290 for { 1291 x := v.Args[0] 1292 v.reset(OpPPC64POPCNTD) 1293 v0 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int64) 1294 v1 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int64) 1295 v1.AuxInt = -1 1296 v1.AddArg(x) 1297 v0.AddArg(v1) 1298 v0.AddArg(x) 1299 v.AddArg(v0) 1300 return true 1301 } 1302 } 1303 func rewriteValuePPC64_OpCvt32Fto32_0(v *Value) bool { 1304 b := v.Block 1305 _ = b 1306 typ := &b.Func.Config.Types 1307 _ = typ 1308 // match: (Cvt32Fto32 x) 1309 // cond: 1310 // result: (Xf2i64 (FCTIWZ x)) 1311 for { 1312 x := v.Args[0] 1313 v.reset(OpPPC64Xf2i64) 1314 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64) 1315 v0.AddArg(x) 1316 v.AddArg(v0) 1317 return true 1318 } 1319 } 1320 func rewriteValuePPC64_OpCvt32Fto64_0(v *Value) bool { 1321 b := v.Block 1322 _ = b 1323 typ := &b.Func.Config.Types 1324 _ = typ 1325 // match: (Cvt32Fto64 x) 1326 // cond: 1327 // result: (Xf2i64 (FCTIDZ x)) 1328 for { 1329 x := v.Args[0] 1330 v.reset(OpPPC64Xf2i64) 1331 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64) 1332 v0.AddArg(x) 1333 v.AddArg(v0) 1334 return true 1335 } 1336 } 1337 func rewriteValuePPC64_OpCvt32Fto64F_0(v *Value) bool { 1338 // match: (Cvt32Fto64F x) 1339 // cond: 1340 // result: x 1341 for { 1342 x := v.Args[0] 1343 v.reset(OpCopy) 1344 v.Type = x.Type 1345 v.AddArg(x) 1346 return true 1347 } 1348 } 1349 func rewriteValuePPC64_OpCvt32to32F_0(v *Value) bool { 1350 b := v.Block 1351 _ = b 1352 typ := &b.Func.Config.Types 1353 _ = typ 1354 // match: (Cvt32to32F x) 1355 // cond: 1356 // result: (FRSP (FCFID (Xi2f64 (SignExt32to64 x)))) 1357 for { 1358 x := v.Args[0] 1359 v.reset(OpPPC64FRSP) 1360 v0 := b.NewValue0(v.Pos, OpPPC64FCFID, typ.Float64) 1361 v1 := b.NewValue0(v.Pos, OpPPC64Xi2f64, typ.Float64) 1362 v2 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) 1363 v2.AddArg(x) 1364 v1.AddArg(v2) 1365 v0.AddArg(v1) 1366 v.AddArg(v0) 1367 return true 1368 } 1369 } 1370 func rewriteValuePPC64_OpCvt32to64F_0(v *Value) bool { 1371 b := v.Block 1372 _ = b 1373 typ := &b.Func.Config.Types 1374 _ = typ 1375 // match: (Cvt32to64F x) 1376 // cond: 1377 // result: (FCFID (Xi2f64 (SignExt32to64 x))) 1378 for { 1379 x := v.Args[0] 1380 v.reset(OpPPC64FCFID) 1381 v0 := b.NewValue0(v.Pos, OpPPC64Xi2f64, typ.Float64) 1382 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) 1383 v1.AddArg(x) 1384 v0.AddArg(v1) 1385 v.AddArg(v0) 1386 return true 1387 } 1388 } 1389 func rewriteValuePPC64_OpCvt64Fto32_0(v *Value) bool { 1390 b := v.Block 1391 _ = b 1392 typ := &b.Func.Config.Types 1393 _ = typ 1394 // match: (Cvt64Fto32 x) 1395 // cond: 1396 // result: (Xf2i64 (FCTIWZ x)) 1397 for { 1398 x := v.Args[0] 1399 v.reset(OpPPC64Xf2i64) 1400 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64) 1401 v0.AddArg(x) 1402 v.AddArg(v0) 1403 return true 1404 } 1405 } 1406 func rewriteValuePPC64_OpCvt64Fto32F_0(v *Value) bool { 1407 // match: (Cvt64Fto32F x) 1408 // cond: 1409 // result: (FRSP x) 1410 for { 1411 x := v.Args[0] 1412 v.reset(OpPPC64FRSP) 1413 v.AddArg(x) 1414 return true 1415 } 1416 } 1417 func rewriteValuePPC64_OpCvt64Fto64_0(v *Value) bool { 1418 b := v.Block 1419 _ = b 1420 typ := &b.Func.Config.Types 1421 _ = typ 1422 // match: (Cvt64Fto64 x) 1423 // cond: 1424 // result: (Xf2i64 (FCTIDZ x)) 1425 for { 1426 x := v.Args[0] 1427 v.reset(OpPPC64Xf2i64) 1428 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64) 1429 v0.AddArg(x) 1430 v.AddArg(v0) 1431 return true 1432 } 1433 } 1434 func rewriteValuePPC64_OpCvt64to32F_0(v *Value) bool { 1435 b := v.Block 1436 _ = b 1437 typ := &b.Func.Config.Types 1438 _ = typ 1439 // match: (Cvt64to32F x) 1440 // cond: 1441 // result: (FRSP (FCFID (Xi2f64 x))) 1442 for { 1443 x := v.Args[0] 1444 v.reset(OpPPC64FRSP) 1445 v0 := b.NewValue0(v.Pos, OpPPC64FCFID, typ.Float64) 1446 v1 := b.NewValue0(v.Pos, OpPPC64Xi2f64, typ.Float64) 1447 v1.AddArg(x) 1448 v0.AddArg(v1) 1449 v.AddArg(v0) 1450 return true 1451 } 1452 } 1453 func rewriteValuePPC64_OpCvt64to64F_0(v *Value) bool { 1454 b := v.Block 1455 _ = b 1456 typ := &b.Func.Config.Types 1457 _ = typ 1458 // match: (Cvt64to64F x) 1459 // cond: 1460 // result: (FCFID (Xi2f64 x)) 1461 for { 1462 x := v.Args[0] 1463 v.reset(OpPPC64FCFID) 1464 v0 := b.NewValue0(v.Pos, OpPPC64Xi2f64, typ.Float64) 1465 v0.AddArg(x) 1466 v.AddArg(v0) 1467 return true 1468 } 1469 } 1470 func rewriteValuePPC64_OpDiv16_0(v *Value) bool { 1471 b := v.Block 1472 _ = b 1473 typ := &b.Func.Config.Types 1474 _ = typ 1475 // match: (Div16 x y) 1476 // cond: 1477 // result: (DIVW (SignExt16to32 x) (SignExt16to32 y)) 1478 for { 1479 _ = v.Args[1] 1480 x := v.Args[0] 1481 y := v.Args[1] 1482 v.reset(OpPPC64DIVW) 1483 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1484 v0.AddArg(x) 1485 v.AddArg(v0) 1486 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1487 v1.AddArg(y) 1488 v.AddArg(v1) 1489 return true 1490 } 1491 } 1492 func rewriteValuePPC64_OpDiv16u_0(v *Value) bool { 1493 b := v.Block 1494 _ = b 1495 typ := &b.Func.Config.Types 1496 _ = typ 1497 // match: (Div16u x y) 1498 // cond: 1499 // result: (DIVWU (ZeroExt16to32 x) (ZeroExt16to32 y)) 1500 for { 1501 _ = v.Args[1] 1502 x := v.Args[0] 1503 y := v.Args[1] 1504 v.reset(OpPPC64DIVWU) 1505 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1506 v0.AddArg(x) 1507 v.AddArg(v0) 1508 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1509 v1.AddArg(y) 1510 v.AddArg(v1) 1511 return true 1512 } 1513 } 1514 func rewriteValuePPC64_OpDiv32_0(v *Value) bool { 1515 // match: (Div32 x y) 1516 // cond: 1517 // result: (DIVW x y) 1518 for { 1519 _ = v.Args[1] 1520 x := v.Args[0] 1521 y := v.Args[1] 1522 v.reset(OpPPC64DIVW) 1523 v.AddArg(x) 1524 v.AddArg(y) 1525 return true 1526 } 1527 } 1528 func rewriteValuePPC64_OpDiv32F_0(v *Value) bool { 1529 // match: (Div32F x y) 1530 // cond: 1531 // result: (FDIVS x y) 1532 for { 1533 _ = v.Args[1] 1534 x := v.Args[0] 1535 y := v.Args[1] 1536 v.reset(OpPPC64FDIVS) 1537 v.AddArg(x) 1538 v.AddArg(y) 1539 return true 1540 } 1541 } 1542 func rewriteValuePPC64_OpDiv32u_0(v *Value) bool { 1543 // match: (Div32u x y) 1544 // cond: 1545 // result: (DIVWU x y) 1546 for { 1547 _ = v.Args[1] 1548 x := v.Args[0] 1549 y := v.Args[1] 1550 v.reset(OpPPC64DIVWU) 1551 v.AddArg(x) 1552 v.AddArg(y) 1553 return true 1554 } 1555 } 1556 func rewriteValuePPC64_OpDiv64_0(v *Value) bool { 1557 // match: (Div64 x y) 1558 // cond: 1559 // result: (DIVD x y) 1560 for { 1561 _ = v.Args[1] 1562 x := v.Args[0] 1563 y := v.Args[1] 1564 v.reset(OpPPC64DIVD) 1565 v.AddArg(x) 1566 v.AddArg(y) 1567 return true 1568 } 1569 } 1570 func rewriteValuePPC64_OpDiv64F_0(v *Value) bool { 1571 // match: (Div64F x y) 1572 // cond: 1573 // result: (FDIV x y) 1574 for { 1575 _ = v.Args[1] 1576 x := v.Args[0] 1577 y := v.Args[1] 1578 v.reset(OpPPC64FDIV) 1579 v.AddArg(x) 1580 v.AddArg(y) 1581 return true 1582 } 1583 } 1584 func rewriteValuePPC64_OpDiv64u_0(v *Value) bool { 1585 // match: (Div64u x y) 1586 // cond: 1587 // result: (DIVDU x y) 1588 for { 1589 _ = v.Args[1] 1590 x := v.Args[0] 1591 y := v.Args[1] 1592 v.reset(OpPPC64DIVDU) 1593 v.AddArg(x) 1594 v.AddArg(y) 1595 return true 1596 } 1597 } 1598 func rewriteValuePPC64_OpDiv8_0(v *Value) bool { 1599 b := v.Block 1600 _ = b 1601 typ := &b.Func.Config.Types 1602 _ = typ 1603 // match: (Div8 x y) 1604 // cond: 1605 // result: (DIVW (SignExt8to32 x) (SignExt8to32 y)) 1606 for { 1607 _ = v.Args[1] 1608 x := v.Args[0] 1609 y := v.Args[1] 1610 v.reset(OpPPC64DIVW) 1611 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1612 v0.AddArg(x) 1613 v.AddArg(v0) 1614 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1615 v1.AddArg(y) 1616 v.AddArg(v1) 1617 return true 1618 } 1619 } 1620 func rewriteValuePPC64_OpDiv8u_0(v *Value) bool { 1621 b := v.Block 1622 _ = b 1623 typ := &b.Func.Config.Types 1624 _ = typ 1625 // match: (Div8u x y) 1626 // cond: 1627 // result: (DIVWU (ZeroExt8to32 x) (ZeroExt8to32 y)) 1628 for { 1629 _ = v.Args[1] 1630 x := v.Args[0] 1631 y := v.Args[1] 1632 v.reset(OpPPC64DIVWU) 1633 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1634 v0.AddArg(x) 1635 v.AddArg(v0) 1636 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1637 v1.AddArg(y) 1638 v.AddArg(v1) 1639 return true 1640 } 1641 } 1642 func rewriteValuePPC64_OpEq16_0(v *Value) bool { 1643 b := v.Block 1644 _ = b 1645 typ := &b.Func.Config.Types 1646 _ = typ 1647 // match: (Eq16 x y) 1648 // cond: isSigned(x.Type) && isSigned(y.Type) 1649 // result: (Equal (CMPW (SignExt16to32 x) (SignExt16to32 y))) 1650 for { 1651 _ = v.Args[1] 1652 x := v.Args[0] 1653 y := v.Args[1] 1654 if !(isSigned(x.Type) && isSigned(y.Type)) { 1655 break 1656 } 1657 v.reset(OpPPC64Equal) 1658 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1659 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1660 v1.AddArg(x) 1661 v0.AddArg(v1) 1662 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1663 v2.AddArg(y) 1664 v0.AddArg(v2) 1665 v.AddArg(v0) 1666 return true 1667 } 1668 // match: (Eq16 x y) 1669 // cond: 1670 // result: (Equal (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) 1671 for { 1672 _ = v.Args[1] 1673 x := v.Args[0] 1674 y := v.Args[1] 1675 v.reset(OpPPC64Equal) 1676 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1677 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1678 v1.AddArg(x) 1679 v0.AddArg(v1) 1680 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1681 v2.AddArg(y) 1682 v0.AddArg(v2) 1683 v.AddArg(v0) 1684 return true 1685 } 1686 } 1687 func rewriteValuePPC64_OpEq32_0(v *Value) bool { 1688 b := v.Block 1689 _ = b 1690 // match: (Eq32 x y) 1691 // cond: 1692 // result: (Equal (CMPW x y)) 1693 for { 1694 _ = v.Args[1] 1695 x := v.Args[0] 1696 y := v.Args[1] 1697 v.reset(OpPPC64Equal) 1698 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1699 v0.AddArg(x) 1700 v0.AddArg(y) 1701 v.AddArg(v0) 1702 return true 1703 } 1704 } 1705 func rewriteValuePPC64_OpEq32F_0(v *Value) bool { 1706 b := v.Block 1707 _ = b 1708 // match: (Eq32F x y) 1709 // cond: 1710 // result: (Equal (FCMPU x y)) 1711 for { 1712 _ = v.Args[1] 1713 x := v.Args[0] 1714 y := v.Args[1] 1715 v.reset(OpPPC64Equal) 1716 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1717 v0.AddArg(x) 1718 v0.AddArg(y) 1719 v.AddArg(v0) 1720 return true 1721 } 1722 } 1723 func rewriteValuePPC64_OpEq64_0(v *Value) bool { 1724 b := v.Block 1725 _ = b 1726 // match: (Eq64 x y) 1727 // cond: 1728 // result: (Equal (CMP x y)) 1729 for { 1730 _ = v.Args[1] 1731 x := v.Args[0] 1732 y := v.Args[1] 1733 v.reset(OpPPC64Equal) 1734 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 1735 v0.AddArg(x) 1736 v0.AddArg(y) 1737 v.AddArg(v0) 1738 return true 1739 } 1740 } 1741 func rewriteValuePPC64_OpEq64F_0(v *Value) bool { 1742 b := v.Block 1743 _ = b 1744 // match: (Eq64F x y) 1745 // cond: 1746 // result: (Equal (FCMPU x y)) 1747 for { 1748 _ = v.Args[1] 1749 x := v.Args[0] 1750 y := v.Args[1] 1751 v.reset(OpPPC64Equal) 1752 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1753 v0.AddArg(x) 1754 v0.AddArg(y) 1755 v.AddArg(v0) 1756 return true 1757 } 1758 } 1759 func rewriteValuePPC64_OpEq8_0(v *Value) bool { 1760 b := v.Block 1761 _ = b 1762 typ := &b.Func.Config.Types 1763 _ = typ 1764 // match: (Eq8 x y) 1765 // cond: isSigned(x.Type) && isSigned(y.Type) 1766 // result: (Equal (CMPW (SignExt8to32 x) (SignExt8to32 y))) 1767 for { 1768 _ = v.Args[1] 1769 x := v.Args[0] 1770 y := v.Args[1] 1771 if !(isSigned(x.Type) && isSigned(y.Type)) { 1772 break 1773 } 1774 v.reset(OpPPC64Equal) 1775 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1776 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1777 v1.AddArg(x) 1778 v0.AddArg(v1) 1779 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1780 v2.AddArg(y) 1781 v0.AddArg(v2) 1782 v.AddArg(v0) 1783 return true 1784 } 1785 // match: (Eq8 x y) 1786 // cond: 1787 // result: (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) 1788 for { 1789 _ = v.Args[1] 1790 x := v.Args[0] 1791 y := v.Args[1] 1792 v.reset(OpPPC64Equal) 1793 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1794 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1795 v1.AddArg(x) 1796 v0.AddArg(v1) 1797 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1798 v2.AddArg(y) 1799 v0.AddArg(v2) 1800 v.AddArg(v0) 1801 return true 1802 } 1803 } 1804 func rewriteValuePPC64_OpEqB_0(v *Value) bool { 1805 b := v.Block 1806 _ = b 1807 typ := &b.Func.Config.Types 1808 _ = typ 1809 // match: (EqB x y) 1810 // cond: 1811 // result: (ANDconst [1] (EQV x y)) 1812 for { 1813 _ = v.Args[1] 1814 x := v.Args[0] 1815 y := v.Args[1] 1816 v.reset(OpPPC64ANDconst) 1817 v.AuxInt = 1 1818 v0 := b.NewValue0(v.Pos, OpPPC64EQV, typ.Int64) 1819 v0.AddArg(x) 1820 v0.AddArg(y) 1821 v.AddArg(v0) 1822 return true 1823 } 1824 } 1825 func rewriteValuePPC64_OpEqPtr_0(v *Value) bool { 1826 b := v.Block 1827 _ = b 1828 // match: (EqPtr x y) 1829 // cond: 1830 // result: (Equal (CMP x y)) 1831 for { 1832 _ = v.Args[1] 1833 x := v.Args[0] 1834 y := v.Args[1] 1835 v.reset(OpPPC64Equal) 1836 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 1837 v0.AddArg(x) 1838 v0.AddArg(y) 1839 v.AddArg(v0) 1840 return true 1841 } 1842 } 1843 func rewriteValuePPC64_OpFloor_0(v *Value) bool { 1844 // match: (Floor x) 1845 // cond: 1846 // result: (FFLOOR x) 1847 for { 1848 x := v.Args[0] 1849 v.reset(OpPPC64FFLOOR) 1850 v.AddArg(x) 1851 return true 1852 } 1853 } 1854 func rewriteValuePPC64_OpGeq16_0(v *Value) bool { 1855 b := v.Block 1856 _ = b 1857 typ := &b.Func.Config.Types 1858 _ = typ 1859 // match: (Geq16 x y) 1860 // cond: 1861 // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 1862 for { 1863 _ = v.Args[1] 1864 x := v.Args[0] 1865 y := v.Args[1] 1866 v.reset(OpPPC64GreaterEqual) 1867 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1868 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1869 v1.AddArg(x) 1870 v0.AddArg(v1) 1871 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1872 v2.AddArg(y) 1873 v0.AddArg(v2) 1874 v.AddArg(v0) 1875 return true 1876 } 1877 } 1878 func rewriteValuePPC64_OpGeq16U_0(v *Value) bool { 1879 b := v.Block 1880 _ = b 1881 typ := &b.Func.Config.Types 1882 _ = typ 1883 // match: (Geq16U x y) 1884 // cond: 1885 // result: (GreaterEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 1886 for { 1887 _ = v.Args[1] 1888 x := v.Args[0] 1889 y := v.Args[1] 1890 v.reset(OpPPC64GreaterEqual) 1891 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 1892 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1893 v1.AddArg(x) 1894 v0.AddArg(v1) 1895 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1896 v2.AddArg(y) 1897 v0.AddArg(v2) 1898 v.AddArg(v0) 1899 return true 1900 } 1901 } 1902 func rewriteValuePPC64_OpGeq32_0(v *Value) bool { 1903 b := v.Block 1904 _ = b 1905 // match: (Geq32 x y) 1906 // cond: 1907 // result: (GreaterEqual (CMPW x y)) 1908 for { 1909 _ = v.Args[1] 1910 x := v.Args[0] 1911 y := v.Args[1] 1912 v.reset(OpPPC64GreaterEqual) 1913 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1914 v0.AddArg(x) 1915 v0.AddArg(y) 1916 v.AddArg(v0) 1917 return true 1918 } 1919 } 1920 func rewriteValuePPC64_OpGeq32F_0(v *Value) bool { 1921 b := v.Block 1922 _ = b 1923 // match: (Geq32F x y) 1924 // cond: 1925 // result: (FGreaterEqual (FCMPU x y)) 1926 for { 1927 _ = v.Args[1] 1928 x := v.Args[0] 1929 y := v.Args[1] 1930 v.reset(OpPPC64FGreaterEqual) 1931 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1932 v0.AddArg(x) 1933 v0.AddArg(y) 1934 v.AddArg(v0) 1935 return true 1936 } 1937 } 1938 func rewriteValuePPC64_OpGeq32U_0(v *Value) bool { 1939 b := v.Block 1940 _ = b 1941 // match: (Geq32U x y) 1942 // cond: 1943 // result: (GreaterEqual (CMPWU x y)) 1944 for { 1945 _ = v.Args[1] 1946 x := v.Args[0] 1947 y := v.Args[1] 1948 v.reset(OpPPC64GreaterEqual) 1949 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 1950 v0.AddArg(x) 1951 v0.AddArg(y) 1952 v.AddArg(v0) 1953 return true 1954 } 1955 } 1956 func rewriteValuePPC64_OpGeq64_0(v *Value) bool { 1957 b := v.Block 1958 _ = b 1959 // match: (Geq64 x y) 1960 // cond: 1961 // result: (GreaterEqual (CMP x y)) 1962 for { 1963 _ = v.Args[1] 1964 x := v.Args[0] 1965 y := v.Args[1] 1966 v.reset(OpPPC64GreaterEqual) 1967 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 1968 v0.AddArg(x) 1969 v0.AddArg(y) 1970 v.AddArg(v0) 1971 return true 1972 } 1973 } 1974 func rewriteValuePPC64_OpGeq64F_0(v *Value) bool { 1975 b := v.Block 1976 _ = b 1977 // match: (Geq64F x y) 1978 // cond: 1979 // result: (FGreaterEqual (FCMPU x y)) 1980 for { 1981 _ = v.Args[1] 1982 x := v.Args[0] 1983 y := v.Args[1] 1984 v.reset(OpPPC64FGreaterEqual) 1985 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1986 v0.AddArg(x) 1987 v0.AddArg(y) 1988 v.AddArg(v0) 1989 return true 1990 } 1991 } 1992 func rewriteValuePPC64_OpGeq64U_0(v *Value) bool { 1993 b := v.Block 1994 _ = b 1995 // match: (Geq64U x y) 1996 // cond: 1997 // result: (GreaterEqual (CMPU x y)) 1998 for { 1999 _ = v.Args[1] 2000 x := v.Args[0] 2001 y := v.Args[1] 2002 v.reset(OpPPC64GreaterEqual) 2003 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2004 v0.AddArg(x) 2005 v0.AddArg(y) 2006 v.AddArg(v0) 2007 return true 2008 } 2009 } 2010 func rewriteValuePPC64_OpGeq8_0(v *Value) bool { 2011 b := v.Block 2012 _ = b 2013 typ := &b.Func.Config.Types 2014 _ = typ 2015 // match: (Geq8 x y) 2016 // cond: 2017 // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2018 for { 2019 _ = v.Args[1] 2020 x := v.Args[0] 2021 y := v.Args[1] 2022 v.reset(OpPPC64GreaterEqual) 2023 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2024 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2025 v1.AddArg(x) 2026 v0.AddArg(v1) 2027 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2028 v2.AddArg(y) 2029 v0.AddArg(v2) 2030 v.AddArg(v0) 2031 return true 2032 } 2033 } 2034 func rewriteValuePPC64_OpGeq8U_0(v *Value) bool { 2035 b := v.Block 2036 _ = b 2037 typ := &b.Func.Config.Types 2038 _ = typ 2039 // match: (Geq8U x y) 2040 // cond: 2041 // result: (GreaterEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2042 for { 2043 _ = v.Args[1] 2044 x := v.Args[0] 2045 y := v.Args[1] 2046 v.reset(OpPPC64GreaterEqual) 2047 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2048 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2049 v1.AddArg(x) 2050 v0.AddArg(v1) 2051 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2052 v2.AddArg(y) 2053 v0.AddArg(v2) 2054 v.AddArg(v0) 2055 return true 2056 } 2057 } 2058 func rewriteValuePPC64_OpGetClosurePtr_0(v *Value) bool { 2059 // match: (GetClosurePtr) 2060 // cond: 2061 // result: (LoweredGetClosurePtr) 2062 for { 2063 v.reset(OpPPC64LoweredGetClosurePtr) 2064 return true 2065 } 2066 } 2067 func rewriteValuePPC64_OpGreater16_0(v *Value) bool { 2068 b := v.Block 2069 _ = b 2070 typ := &b.Func.Config.Types 2071 _ = typ 2072 // match: (Greater16 x y) 2073 // cond: 2074 // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2075 for { 2076 _ = v.Args[1] 2077 x := v.Args[0] 2078 y := v.Args[1] 2079 v.reset(OpPPC64GreaterThan) 2080 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2081 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2082 v1.AddArg(x) 2083 v0.AddArg(v1) 2084 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2085 v2.AddArg(y) 2086 v0.AddArg(v2) 2087 v.AddArg(v0) 2088 return true 2089 } 2090 } 2091 func rewriteValuePPC64_OpGreater16U_0(v *Value) bool { 2092 b := v.Block 2093 _ = b 2094 typ := &b.Func.Config.Types 2095 _ = typ 2096 // match: (Greater16U x y) 2097 // cond: 2098 // result: (GreaterThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2099 for { 2100 _ = v.Args[1] 2101 x := v.Args[0] 2102 y := v.Args[1] 2103 v.reset(OpPPC64GreaterThan) 2104 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2105 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2106 v1.AddArg(x) 2107 v0.AddArg(v1) 2108 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2109 v2.AddArg(y) 2110 v0.AddArg(v2) 2111 v.AddArg(v0) 2112 return true 2113 } 2114 } 2115 func rewriteValuePPC64_OpGreater32_0(v *Value) bool { 2116 b := v.Block 2117 _ = b 2118 // match: (Greater32 x y) 2119 // cond: 2120 // result: (GreaterThan (CMPW x y)) 2121 for { 2122 _ = v.Args[1] 2123 x := v.Args[0] 2124 y := v.Args[1] 2125 v.reset(OpPPC64GreaterThan) 2126 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2127 v0.AddArg(x) 2128 v0.AddArg(y) 2129 v.AddArg(v0) 2130 return true 2131 } 2132 } 2133 func rewriteValuePPC64_OpGreater32F_0(v *Value) bool { 2134 b := v.Block 2135 _ = b 2136 // match: (Greater32F x y) 2137 // cond: 2138 // result: (FGreaterThan (FCMPU x y)) 2139 for { 2140 _ = v.Args[1] 2141 x := v.Args[0] 2142 y := v.Args[1] 2143 v.reset(OpPPC64FGreaterThan) 2144 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2145 v0.AddArg(x) 2146 v0.AddArg(y) 2147 v.AddArg(v0) 2148 return true 2149 } 2150 } 2151 func rewriteValuePPC64_OpGreater32U_0(v *Value) bool { 2152 b := v.Block 2153 _ = b 2154 // match: (Greater32U x y) 2155 // cond: 2156 // result: (GreaterThan (CMPWU x y)) 2157 for { 2158 _ = v.Args[1] 2159 x := v.Args[0] 2160 y := v.Args[1] 2161 v.reset(OpPPC64GreaterThan) 2162 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2163 v0.AddArg(x) 2164 v0.AddArg(y) 2165 v.AddArg(v0) 2166 return true 2167 } 2168 } 2169 func rewriteValuePPC64_OpGreater64_0(v *Value) bool { 2170 b := v.Block 2171 _ = b 2172 // match: (Greater64 x y) 2173 // cond: 2174 // result: (GreaterThan (CMP x y)) 2175 for { 2176 _ = v.Args[1] 2177 x := v.Args[0] 2178 y := v.Args[1] 2179 v.reset(OpPPC64GreaterThan) 2180 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2181 v0.AddArg(x) 2182 v0.AddArg(y) 2183 v.AddArg(v0) 2184 return true 2185 } 2186 } 2187 func rewriteValuePPC64_OpGreater64F_0(v *Value) bool { 2188 b := v.Block 2189 _ = b 2190 // match: (Greater64F x y) 2191 // cond: 2192 // result: (FGreaterThan (FCMPU x y)) 2193 for { 2194 _ = v.Args[1] 2195 x := v.Args[0] 2196 y := v.Args[1] 2197 v.reset(OpPPC64FGreaterThan) 2198 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2199 v0.AddArg(x) 2200 v0.AddArg(y) 2201 v.AddArg(v0) 2202 return true 2203 } 2204 } 2205 func rewriteValuePPC64_OpGreater64U_0(v *Value) bool { 2206 b := v.Block 2207 _ = b 2208 // match: (Greater64U x y) 2209 // cond: 2210 // result: (GreaterThan (CMPU x y)) 2211 for { 2212 _ = v.Args[1] 2213 x := v.Args[0] 2214 y := v.Args[1] 2215 v.reset(OpPPC64GreaterThan) 2216 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2217 v0.AddArg(x) 2218 v0.AddArg(y) 2219 v.AddArg(v0) 2220 return true 2221 } 2222 } 2223 func rewriteValuePPC64_OpGreater8_0(v *Value) bool { 2224 b := v.Block 2225 _ = b 2226 typ := &b.Func.Config.Types 2227 _ = typ 2228 // match: (Greater8 x y) 2229 // cond: 2230 // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2231 for { 2232 _ = v.Args[1] 2233 x := v.Args[0] 2234 y := v.Args[1] 2235 v.reset(OpPPC64GreaterThan) 2236 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2237 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2238 v1.AddArg(x) 2239 v0.AddArg(v1) 2240 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2241 v2.AddArg(y) 2242 v0.AddArg(v2) 2243 v.AddArg(v0) 2244 return true 2245 } 2246 } 2247 func rewriteValuePPC64_OpGreater8U_0(v *Value) bool { 2248 b := v.Block 2249 _ = b 2250 typ := &b.Func.Config.Types 2251 _ = typ 2252 // match: (Greater8U x y) 2253 // cond: 2254 // result: (GreaterThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2255 for { 2256 _ = v.Args[1] 2257 x := v.Args[0] 2258 y := v.Args[1] 2259 v.reset(OpPPC64GreaterThan) 2260 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2261 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2262 v1.AddArg(x) 2263 v0.AddArg(v1) 2264 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2265 v2.AddArg(y) 2266 v0.AddArg(v2) 2267 v.AddArg(v0) 2268 return true 2269 } 2270 } 2271 func rewriteValuePPC64_OpHmul32_0(v *Value) bool { 2272 // match: (Hmul32 x y) 2273 // cond: 2274 // result: (MULHW x y) 2275 for { 2276 _ = v.Args[1] 2277 x := v.Args[0] 2278 y := v.Args[1] 2279 v.reset(OpPPC64MULHW) 2280 v.AddArg(x) 2281 v.AddArg(y) 2282 return true 2283 } 2284 } 2285 func rewriteValuePPC64_OpHmul32u_0(v *Value) bool { 2286 // match: (Hmul32u x y) 2287 // cond: 2288 // result: (MULHWU x y) 2289 for { 2290 _ = v.Args[1] 2291 x := v.Args[0] 2292 y := v.Args[1] 2293 v.reset(OpPPC64MULHWU) 2294 v.AddArg(x) 2295 v.AddArg(y) 2296 return true 2297 } 2298 } 2299 func rewriteValuePPC64_OpHmul64_0(v *Value) bool { 2300 // match: (Hmul64 x y) 2301 // cond: 2302 // result: (MULHD x y) 2303 for { 2304 _ = v.Args[1] 2305 x := v.Args[0] 2306 y := v.Args[1] 2307 v.reset(OpPPC64MULHD) 2308 v.AddArg(x) 2309 v.AddArg(y) 2310 return true 2311 } 2312 } 2313 func rewriteValuePPC64_OpHmul64u_0(v *Value) bool { 2314 // match: (Hmul64u x y) 2315 // cond: 2316 // result: (MULHDU x y) 2317 for { 2318 _ = v.Args[1] 2319 x := v.Args[0] 2320 y := v.Args[1] 2321 v.reset(OpPPC64MULHDU) 2322 v.AddArg(x) 2323 v.AddArg(y) 2324 return true 2325 } 2326 } 2327 func rewriteValuePPC64_OpInterCall_0(v *Value) bool { 2328 // match: (InterCall [argwid] entry mem) 2329 // cond: 2330 // result: (CALLinter [argwid] entry mem) 2331 for { 2332 argwid := v.AuxInt 2333 _ = v.Args[1] 2334 entry := v.Args[0] 2335 mem := v.Args[1] 2336 v.reset(OpPPC64CALLinter) 2337 v.AuxInt = argwid 2338 v.AddArg(entry) 2339 v.AddArg(mem) 2340 return true 2341 } 2342 } 2343 func rewriteValuePPC64_OpIsInBounds_0(v *Value) bool { 2344 b := v.Block 2345 _ = b 2346 // match: (IsInBounds idx len) 2347 // cond: 2348 // result: (LessThan (CMPU idx len)) 2349 for { 2350 _ = v.Args[1] 2351 idx := v.Args[0] 2352 len := v.Args[1] 2353 v.reset(OpPPC64LessThan) 2354 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2355 v0.AddArg(idx) 2356 v0.AddArg(len) 2357 v.AddArg(v0) 2358 return true 2359 } 2360 } 2361 func rewriteValuePPC64_OpIsNonNil_0(v *Value) bool { 2362 b := v.Block 2363 _ = b 2364 // match: (IsNonNil ptr) 2365 // cond: 2366 // result: (NotEqual (CMPconst [0] ptr)) 2367 for { 2368 ptr := v.Args[0] 2369 v.reset(OpPPC64NotEqual) 2370 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags) 2371 v0.AuxInt = 0 2372 v0.AddArg(ptr) 2373 v.AddArg(v0) 2374 return true 2375 } 2376 } 2377 func rewriteValuePPC64_OpIsSliceInBounds_0(v *Value) bool { 2378 b := v.Block 2379 _ = b 2380 // match: (IsSliceInBounds idx len) 2381 // cond: 2382 // result: (LessEqual (CMPU idx len)) 2383 for { 2384 _ = v.Args[1] 2385 idx := v.Args[0] 2386 len := v.Args[1] 2387 v.reset(OpPPC64LessEqual) 2388 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2389 v0.AddArg(idx) 2390 v0.AddArg(len) 2391 v.AddArg(v0) 2392 return true 2393 } 2394 } 2395 func rewriteValuePPC64_OpLeq16_0(v *Value) bool { 2396 b := v.Block 2397 _ = b 2398 typ := &b.Func.Config.Types 2399 _ = typ 2400 // match: (Leq16 x y) 2401 // cond: 2402 // result: (LessEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2403 for { 2404 _ = v.Args[1] 2405 x := v.Args[0] 2406 y := v.Args[1] 2407 v.reset(OpPPC64LessEqual) 2408 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2409 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2410 v1.AddArg(x) 2411 v0.AddArg(v1) 2412 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2413 v2.AddArg(y) 2414 v0.AddArg(v2) 2415 v.AddArg(v0) 2416 return true 2417 } 2418 } 2419 func rewriteValuePPC64_OpLeq16U_0(v *Value) bool { 2420 b := v.Block 2421 _ = b 2422 typ := &b.Func.Config.Types 2423 _ = typ 2424 // match: (Leq16U x y) 2425 // cond: 2426 // result: (LessEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2427 for { 2428 _ = v.Args[1] 2429 x := v.Args[0] 2430 y := v.Args[1] 2431 v.reset(OpPPC64LessEqual) 2432 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2433 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2434 v1.AddArg(x) 2435 v0.AddArg(v1) 2436 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2437 v2.AddArg(y) 2438 v0.AddArg(v2) 2439 v.AddArg(v0) 2440 return true 2441 } 2442 } 2443 func rewriteValuePPC64_OpLeq32_0(v *Value) bool { 2444 b := v.Block 2445 _ = b 2446 // match: (Leq32 x y) 2447 // cond: 2448 // result: (LessEqual (CMPW x y)) 2449 for { 2450 _ = v.Args[1] 2451 x := v.Args[0] 2452 y := v.Args[1] 2453 v.reset(OpPPC64LessEqual) 2454 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2455 v0.AddArg(x) 2456 v0.AddArg(y) 2457 v.AddArg(v0) 2458 return true 2459 } 2460 } 2461 func rewriteValuePPC64_OpLeq32F_0(v *Value) bool { 2462 b := v.Block 2463 _ = b 2464 // match: (Leq32F x y) 2465 // cond: 2466 // result: (FLessEqual (FCMPU x y)) 2467 for { 2468 _ = v.Args[1] 2469 x := v.Args[0] 2470 y := v.Args[1] 2471 v.reset(OpPPC64FLessEqual) 2472 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2473 v0.AddArg(x) 2474 v0.AddArg(y) 2475 v.AddArg(v0) 2476 return true 2477 } 2478 } 2479 func rewriteValuePPC64_OpLeq32U_0(v *Value) bool { 2480 b := v.Block 2481 _ = b 2482 // match: (Leq32U x y) 2483 // cond: 2484 // result: (LessEqual (CMPWU x y)) 2485 for { 2486 _ = v.Args[1] 2487 x := v.Args[0] 2488 y := v.Args[1] 2489 v.reset(OpPPC64LessEqual) 2490 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2491 v0.AddArg(x) 2492 v0.AddArg(y) 2493 v.AddArg(v0) 2494 return true 2495 } 2496 } 2497 func rewriteValuePPC64_OpLeq64_0(v *Value) bool { 2498 b := v.Block 2499 _ = b 2500 // match: (Leq64 x y) 2501 // cond: 2502 // result: (LessEqual (CMP x y)) 2503 for { 2504 _ = v.Args[1] 2505 x := v.Args[0] 2506 y := v.Args[1] 2507 v.reset(OpPPC64LessEqual) 2508 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2509 v0.AddArg(x) 2510 v0.AddArg(y) 2511 v.AddArg(v0) 2512 return true 2513 } 2514 } 2515 func rewriteValuePPC64_OpLeq64F_0(v *Value) bool { 2516 b := v.Block 2517 _ = b 2518 // match: (Leq64F x y) 2519 // cond: 2520 // result: (FLessEqual (FCMPU x y)) 2521 for { 2522 _ = v.Args[1] 2523 x := v.Args[0] 2524 y := v.Args[1] 2525 v.reset(OpPPC64FLessEqual) 2526 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2527 v0.AddArg(x) 2528 v0.AddArg(y) 2529 v.AddArg(v0) 2530 return true 2531 } 2532 } 2533 func rewriteValuePPC64_OpLeq64U_0(v *Value) bool { 2534 b := v.Block 2535 _ = b 2536 // match: (Leq64U x y) 2537 // cond: 2538 // result: (LessEqual (CMPU x y)) 2539 for { 2540 _ = v.Args[1] 2541 x := v.Args[0] 2542 y := v.Args[1] 2543 v.reset(OpPPC64LessEqual) 2544 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2545 v0.AddArg(x) 2546 v0.AddArg(y) 2547 v.AddArg(v0) 2548 return true 2549 } 2550 } 2551 func rewriteValuePPC64_OpLeq8_0(v *Value) bool { 2552 b := v.Block 2553 _ = b 2554 typ := &b.Func.Config.Types 2555 _ = typ 2556 // match: (Leq8 x y) 2557 // cond: 2558 // result: (LessEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2559 for { 2560 _ = v.Args[1] 2561 x := v.Args[0] 2562 y := v.Args[1] 2563 v.reset(OpPPC64LessEqual) 2564 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2565 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2566 v1.AddArg(x) 2567 v0.AddArg(v1) 2568 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2569 v2.AddArg(y) 2570 v0.AddArg(v2) 2571 v.AddArg(v0) 2572 return true 2573 } 2574 } 2575 func rewriteValuePPC64_OpLeq8U_0(v *Value) bool { 2576 b := v.Block 2577 _ = b 2578 typ := &b.Func.Config.Types 2579 _ = typ 2580 // match: (Leq8U x y) 2581 // cond: 2582 // result: (LessEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2583 for { 2584 _ = v.Args[1] 2585 x := v.Args[0] 2586 y := v.Args[1] 2587 v.reset(OpPPC64LessEqual) 2588 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2589 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2590 v1.AddArg(x) 2591 v0.AddArg(v1) 2592 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2593 v2.AddArg(y) 2594 v0.AddArg(v2) 2595 v.AddArg(v0) 2596 return true 2597 } 2598 } 2599 func rewriteValuePPC64_OpLess16_0(v *Value) bool { 2600 b := v.Block 2601 _ = b 2602 typ := &b.Func.Config.Types 2603 _ = typ 2604 // match: (Less16 x y) 2605 // cond: 2606 // result: (LessThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2607 for { 2608 _ = v.Args[1] 2609 x := v.Args[0] 2610 y := v.Args[1] 2611 v.reset(OpPPC64LessThan) 2612 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2613 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2614 v1.AddArg(x) 2615 v0.AddArg(v1) 2616 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2617 v2.AddArg(y) 2618 v0.AddArg(v2) 2619 v.AddArg(v0) 2620 return true 2621 } 2622 } 2623 func rewriteValuePPC64_OpLess16U_0(v *Value) bool { 2624 b := v.Block 2625 _ = b 2626 typ := &b.Func.Config.Types 2627 _ = typ 2628 // match: (Less16U x y) 2629 // cond: 2630 // result: (LessThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2631 for { 2632 _ = v.Args[1] 2633 x := v.Args[0] 2634 y := v.Args[1] 2635 v.reset(OpPPC64LessThan) 2636 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2637 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2638 v1.AddArg(x) 2639 v0.AddArg(v1) 2640 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2641 v2.AddArg(y) 2642 v0.AddArg(v2) 2643 v.AddArg(v0) 2644 return true 2645 } 2646 } 2647 func rewriteValuePPC64_OpLess32_0(v *Value) bool { 2648 b := v.Block 2649 _ = b 2650 // match: (Less32 x y) 2651 // cond: 2652 // result: (LessThan (CMPW x y)) 2653 for { 2654 _ = v.Args[1] 2655 x := v.Args[0] 2656 y := v.Args[1] 2657 v.reset(OpPPC64LessThan) 2658 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2659 v0.AddArg(x) 2660 v0.AddArg(y) 2661 v.AddArg(v0) 2662 return true 2663 } 2664 } 2665 func rewriteValuePPC64_OpLess32F_0(v *Value) bool { 2666 b := v.Block 2667 _ = b 2668 // match: (Less32F x y) 2669 // cond: 2670 // result: (FLessThan (FCMPU x y)) 2671 for { 2672 _ = v.Args[1] 2673 x := v.Args[0] 2674 y := v.Args[1] 2675 v.reset(OpPPC64FLessThan) 2676 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2677 v0.AddArg(x) 2678 v0.AddArg(y) 2679 v.AddArg(v0) 2680 return true 2681 } 2682 } 2683 func rewriteValuePPC64_OpLess32U_0(v *Value) bool { 2684 b := v.Block 2685 _ = b 2686 // match: (Less32U x y) 2687 // cond: 2688 // result: (LessThan (CMPWU x y)) 2689 for { 2690 _ = v.Args[1] 2691 x := v.Args[0] 2692 y := v.Args[1] 2693 v.reset(OpPPC64LessThan) 2694 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2695 v0.AddArg(x) 2696 v0.AddArg(y) 2697 v.AddArg(v0) 2698 return true 2699 } 2700 } 2701 func rewriteValuePPC64_OpLess64_0(v *Value) bool { 2702 b := v.Block 2703 _ = b 2704 // match: (Less64 x y) 2705 // cond: 2706 // result: (LessThan (CMP x y)) 2707 for { 2708 _ = v.Args[1] 2709 x := v.Args[0] 2710 y := v.Args[1] 2711 v.reset(OpPPC64LessThan) 2712 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2713 v0.AddArg(x) 2714 v0.AddArg(y) 2715 v.AddArg(v0) 2716 return true 2717 } 2718 } 2719 func rewriteValuePPC64_OpLess64F_0(v *Value) bool { 2720 b := v.Block 2721 _ = b 2722 // match: (Less64F x y) 2723 // cond: 2724 // result: (FLessThan (FCMPU x y)) 2725 for { 2726 _ = v.Args[1] 2727 x := v.Args[0] 2728 y := v.Args[1] 2729 v.reset(OpPPC64FLessThan) 2730 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2731 v0.AddArg(x) 2732 v0.AddArg(y) 2733 v.AddArg(v0) 2734 return true 2735 } 2736 } 2737 func rewriteValuePPC64_OpLess64U_0(v *Value) bool { 2738 b := v.Block 2739 _ = b 2740 // match: (Less64U x y) 2741 // cond: 2742 // result: (LessThan (CMPU x y)) 2743 for { 2744 _ = v.Args[1] 2745 x := v.Args[0] 2746 y := v.Args[1] 2747 v.reset(OpPPC64LessThan) 2748 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2749 v0.AddArg(x) 2750 v0.AddArg(y) 2751 v.AddArg(v0) 2752 return true 2753 } 2754 } 2755 func rewriteValuePPC64_OpLess8_0(v *Value) bool { 2756 b := v.Block 2757 _ = b 2758 typ := &b.Func.Config.Types 2759 _ = typ 2760 // match: (Less8 x y) 2761 // cond: 2762 // result: (LessThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2763 for { 2764 _ = v.Args[1] 2765 x := v.Args[0] 2766 y := v.Args[1] 2767 v.reset(OpPPC64LessThan) 2768 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2769 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2770 v1.AddArg(x) 2771 v0.AddArg(v1) 2772 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2773 v2.AddArg(y) 2774 v0.AddArg(v2) 2775 v.AddArg(v0) 2776 return true 2777 } 2778 } 2779 func rewriteValuePPC64_OpLess8U_0(v *Value) bool { 2780 b := v.Block 2781 _ = b 2782 typ := &b.Func.Config.Types 2783 _ = typ 2784 // match: (Less8U x y) 2785 // cond: 2786 // result: (LessThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2787 for { 2788 _ = v.Args[1] 2789 x := v.Args[0] 2790 y := v.Args[1] 2791 v.reset(OpPPC64LessThan) 2792 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2793 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2794 v1.AddArg(x) 2795 v0.AddArg(v1) 2796 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2797 v2.AddArg(y) 2798 v0.AddArg(v2) 2799 v.AddArg(v0) 2800 return true 2801 } 2802 } 2803 func rewriteValuePPC64_OpLoad_0(v *Value) bool { 2804 b := v.Block 2805 _ = b 2806 typ := &b.Func.Config.Types 2807 _ = typ 2808 // match: (Load <t> ptr mem) 2809 // cond: (is64BitInt(t) || isPtr(t)) 2810 // result: (MOVDload ptr mem) 2811 for { 2812 t := v.Type 2813 _ = v.Args[1] 2814 ptr := v.Args[0] 2815 mem := v.Args[1] 2816 if !(is64BitInt(t) || isPtr(t)) { 2817 break 2818 } 2819 v.reset(OpPPC64MOVDload) 2820 v.AddArg(ptr) 2821 v.AddArg(mem) 2822 return true 2823 } 2824 // match: (Load <t> ptr mem) 2825 // cond: is32BitInt(t) && isSigned(t) 2826 // result: (MOVWload ptr mem) 2827 for { 2828 t := v.Type 2829 _ = v.Args[1] 2830 ptr := v.Args[0] 2831 mem := v.Args[1] 2832 if !(is32BitInt(t) && isSigned(t)) { 2833 break 2834 } 2835 v.reset(OpPPC64MOVWload) 2836 v.AddArg(ptr) 2837 v.AddArg(mem) 2838 return true 2839 } 2840 // match: (Load <t> ptr mem) 2841 // cond: is32BitInt(t) && !isSigned(t) 2842 // result: (MOVWZload ptr mem) 2843 for { 2844 t := v.Type 2845 _ = v.Args[1] 2846 ptr := v.Args[0] 2847 mem := v.Args[1] 2848 if !(is32BitInt(t) && !isSigned(t)) { 2849 break 2850 } 2851 v.reset(OpPPC64MOVWZload) 2852 v.AddArg(ptr) 2853 v.AddArg(mem) 2854 return true 2855 } 2856 // match: (Load <t> ptr mem) 2857 // cond: is16BitInt(t) && isSigned(t) 2858 // result: (MOVHload ptr mem) 2859 for { 2860 t := v.Type 2861 _ = v.Args[1] 2862 ptr := v.Args[0] 2863 mem := v.Args[1] 2864 if !(is16BitInt(t) && isSigned(t)) { 2865 break 2866 } 2867 v.reset(OpPPC64MOVHload) 2868 v.AddArg(ptr) 2869 v.AddArg(mem) 2870 return true 2871 } 2872 // match: (Load <t> ptr mem) 2873 // cond: is16BitInt(t) && !isSigned(t) 2874 // result: (MOVHZload ptr mem) 2875 for { 2876 t := v.Type 2877 _ = v.Args[1] 2878 ptr := v.Args[0] 2879 mem := v.Args[1] 2880 if !(is16BitInt(t) && !isSigned(t)) { 2881 break 2882 } 2883 v.reset(OpPPC64MOVHZload) 2884 v.AddArg(ptr) 2885 v.AddArg(mem) 2886 return true 2887 } 2888 // match: (Load <t> ptr mem) 2889 // cond: t.IsBoolean() 2890 // result: (MOVBZload ptr mem) 2891 for { 2892 t := v.Type 2893 _ = v.Args[1] 2894 ptr := v.Args[0] 2895 mem := v.Args[1] 2896 if !(t.IsBoolean()) { 2897 break 2898 } 2899 v.reset(OpPPC64MOVBZload) 2900 v.AddArg(ptr) 2901 v.AddArg(mem) 2902 return true 2903 } 2904 // match: (Load <t> ptr mem) 2905 // cond: is8BitInt(t) && isSigned(t) 2906 // result: (MOVBreg (MOVBZload ptr mem)) 2907 for { 2908 t := v.Type 2909 _ = v.Args[1] 2910 ptr := v.Args[0] 2911 mem := v.Args[1] 2912 if !(is8BitInt(t) && isSigned(t)) { 2913 break 2914 } 2915 v.reset(OpPPC64MOVBreg) 2916 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 2917 v0.AddArg(ptr) 2918 v0.AddArg(mem) 2919 v.AddArg(v0) 2920 return true 2921 } 2922 // match: (Load <t> ptr mem) 2923 // cond: is8BitInt(t) && !isSigned(t) 2924 // result: (MOVBZload ptr mem) 2925 for { 2926 t := v.Type 2927 _ = v.Args[1] 2928 ptr := v.Args[0] 2929 mem := v.Args[1] 2930 if !(is8BitInt(t) && !isSigned(t)) { 2931 break 2932 } 2933 v.reset(OpPPC64MOVBZload) 2934 v.AddArg(ptr) 2935 v.AddArg(mem) 2936 return true 2937 } 2938 // match: (Load <t> ptr mem) 2939 // cond: is32BitFloat(t) 2940 // result: (FMOVSload ptr mem) 2941 for { 2942 t := v.Type 2943 _ = v.Args[1] 2944 ptr := v.Args[0] 2945 mem := v.Args[1] 2946 if !(is32BitFloat(t)) { 2947 break 2948 } 2949 v.reset(OpPPC64FMOVSload) 2950 v.AddArg(ptr) 2951 v.AddArg(mem) 2952 return true 2953 } 2954 // match: (Load <t> ptr mem) 2955 // cond: is64BitFloat(t) 2956 // result: (FMOVDload ptr mem) 2957 for { 2958 t := v.Type 2959 _ = v.Args[1] 2960 ptr := v.Args[0] 2961 mem := v.Args[1] 2962 if !(is64BitFloat(t)) { 2963 break 2964 } 2965 v.reset(OpPPC64FMOVDload) 2966 v.AddArg(ptr) 2967 v.AddArg(mem) 2968 return true 2969 } 2970 return false 2971 } 2972 func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool { 2973 b := v.Block 2974 _ = b 2975 typ := &b.Func.Config.Types 2976 _ = typ 2977 // match: (Lsh16x16 x y) 2978 // cond: 2979 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 2980 for { 2981 _ = v.Args[1] 2982 x := v.Args[0] 2983 y := v.Args[1] 2984 v.reset(OpPPC64SLW) 2985 v.AddArg(x) 2986 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 2987 v0.AddArg(y) 2988 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 2989 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 2990 v2.AuxInt = -16 2991 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 2992 v3.AddArg(y) 2993 v2.AddArg(v3) 2994 v1.AddArg(v2) 2995 v0.AddArg(v1) 2996 v.AddArg(v0) 2997 return true 2998 } 2999 } 3000 func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { 3001 b := v.Block 3002 _ = b 3003 typ := &b.Func.Config.Types 3004 _ = typ 3005 // match: (Lsh16x32 x (Const64 [c])) 3006 // cond: uint32(c) < 16 3007 // result: (SLWconst x [c]) 3008 for { 3009 _ = v.Args[1] 3010 x := v.Args[0] 3011 v_1 := v.Args[1] 3012 if v_1.Op != OpConst64 { 3013 break 3014 } 3015 c := v_1.AuxInt 3016 if !(uint32(c) < 16) { 3017 break 3018 } 3019 v.reset(OpPPC64SLWconst) 3020 v.AuxInt = c 3021 v.AddArg(x) 3022 return true 3023 } 3024 // match: (Lsh16x32 x (MOVDconst [c])) 3025 // cond: uint32(c) < 16 3026 // result: (SLWconst x [c]) 3027 for { 3028 _ = v.Args[1] 3029 x := v.Args[0] 3030 v_1 := v.Args[1] 3031 if v_1.Op != OpPPC64MOVDconst { 3032 break 3033 } 3034 c := v_1.AuxInt 3035 if !(uint32(c) < 16) { 3036 break 3037 } 3038 v.reset(OpPPC64SLWconst) 3039 v.AuxInt = c 3040 v.AddArg(x) 3041 return true 3042 } 3043 // match: (Lsh16x32 x y) 3044 // cond: 3045 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 3046 for { 3047 _ = v.Args[1] 3048 x := v.Args[0] 3049 y := v.Args[1] 3050 v.reset(OpPPC64SLW) 3051 v.AddArg(x) 3052 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3053 v0.AddArg(y) 3054 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3055 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3056 v2.AuxInt = -16 3057 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3058 v3.AddArg(y) 3059 v2.AddArg(v3) 3060 v1.AddArg(v2) 3061 v0.AddArg(v1) 3062 v.AddArg(v0) 3063 return true 3064 } 3065 } 3066 func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { 3067 b := v.Block 3068 _ = b 3069 typ := &b.Func.Config.Types 3070 _ = typ 3071 // match: (Lsh16x64 x (Const64 [c])) 3072 // cond: uint64(c) < 16 3073 // result: (SLWconst x [c]) 3074 for { 3075 _ = v.Args[1] 3076 x := v.Args[0] 3077 v_1 := v.Args[1] 3078 if v_1.Op != OpConst64 { 3079 break 3080 } 3081 c := v_1.AuxInt 3082 if !(uint64(c) < 16) { 3083 break 3084 } 3085 v.reset(OpPPC64SLWconst) 3086 v.AuxInt = c 3087 v.AddArg(x) 3088 return true 3089 } 3090 // match: (Lsh16x64 _ (Const64 [c])) 3091 // cond: uint64(c) >= 16 3092 // result: (MOVDconst [0]) 3093 for { 3094 _ = v.Args[1] 3095 v_1 := v.Args[1] 3096 if v_1.Op != OpConst64 { 3097 break 3098 } 3099 c := v_1.AuxInt 3100 if !(uint64(c) >= 16) { 3101 break 3102 } 3103 v.reset(OpPPC64MOVDconst) 3104 v.AuxInt = 0 3105 return true 3106 } 3107 // match: (Lsh16x64 x (MOVDconst [c])) 3108 // cond: uint64(c) < 16 3109 // result: (SLWconst x [c]) 3110 for { 3111 _ = v.Args[1] 3112 x := v.Args[0] 3113 v_1 := v.Args[1] 3114 if v_1.Op != OpPPC64MOVDconst { 3115 break 3116 } 3117 c := v_1.AuxInt 3118 if !(uint64(c) < 16) { 3119 break 3120 } 3121 v.reset(OpPPC64SLWconst) 3122 v.AuxInt = c 3123 v.AddArg(x) 3124 return true 3125 } 3126 // match: (Lsh16x64 x y) 3127 // cond: 3128 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 3129 for { 3130 _ = v.Args[1] 3131 x := v.Args[0] 3132 y := v.Args[1] 3133 v.reset(OpPPC64SLW) 3134 v.AddArg(x) 3135 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3136 v0.AddArg(y) 3137 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3138 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3139 v2.AuxInt = -16 3140 v2.AddArg(y) 3141 v1.AddArg(v2) 3142 v0.AddArg(v1) 3143 v.AddArg(v0) 3144 return true 3145 } 3146 } 3147 func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool { 3148 b := v.Block 3149 _ = b 3150 typ := &b.Func.Config.Types 3151 _ = typ 3152 // match: (Lsh16x8 x y) 3153 // cond: 3154 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 3155 for { 3156 _ = v.Args[1] 3157 x := v.Args[0] 3158 y := v.Args[1] 3159 v.reset(OpPPC64SLW) 3160 v.AddArg(x) 3161 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3162 v0.AddArg(y) 3163 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3164 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3165 v2.AuxInt = -16 3166 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3167 v3.AddArg(y) 3168 v2.AddArg(v3) 3169 v1.AddArg(v2) 3170 v0.AddArg(v1) 3171 v.AddArg(v0) 3172 return true 3173 } 3174 } 3175 func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool { 3176 b := v.Block 3177 _ = b 3178 typ := &b.Func.Config.Types 3179 _ = typ 3180 // match: (Lsh32x16 x y) 3181 // cond: 3182 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 3183 for { 3184 _ = v.Args[1] 3185 x := v.Args[0] 3186 y := v.Args[1] 3187 v.reset(OpPPC64SLW) 3188 v.AddArg(x) 3189 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3190 v0.AddArg(y) 3191 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3192 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3193 v2.AuxInt = -32 3194 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3195 v3.AddArg(y) 3196 v2.AddArg(v3) 3197 v1.AddArg(v2) 3198 v0.AddArg(v1) 3199 v.AddArg(v0) 3200 return true 3201 } 3202 } 3203 func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { 3204 b := v.Block 3205 _ = b 3206 typ := &b.Func.Config.Types 3207 _ = typ 3208 // match: (Lsh32x32 x (Const64 [c])) 3209 // cond: uint32(c) < 32 3210 // result: (SLWconst x [c]) 3211 for { 3212 _ = v.Args[1] 3213 x := v.Args[0] 3214 v_1 := v.Args[1] 3215 if v_1.Op != OpConst64 { 3216 break 3217 } 3218 c := v_1.AuxInt 3219 if !(uint32(c) < 32) { 3220 break 3221 } 3222 v.reset(OpPPC64SLWconst) 3223 v.AuxInt = c 3224 v.AddArg(x) 3225 return true 3226 } 3227 // match: (Lsh32x32 x (MOVDconst [c])) 3228 // cond: uint32(c) < 32 3229 // result: (SLWconst x [c]) 3230 for { 3231 _ = v.Args[1] 3232 x := v.Args[0] 3233 v_1 := v.Args[1] 3234 if v_1.Op != OpPPC64MOVDconst { 3235 break 3236 } 3237 c := v_1.AuxInt 3238 if !(uint32(c) < 32) { 3239 break 3240 } 3241 v.reset(OpPPC64SLWconst) 3242 v.AuxInt = c 3243 v.AddArg(x) 3244 return true 3245 } 3246 // match: (Lsh32x32 x y) 3247 // cond: 3248 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 3249 for { 3250 _ = v.Args[1] 3251 x := v.Args[0] 3252 y := v.Args[1] 3253 v.reset(OpPPC64SLW) 3254 v.AddArg(x) 3255 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3256 v0.AddArg(y) 3257 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3258 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3259 v2.AuxInt = -32 3260 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3261 v3.AddArg(y) 3262 v2.AddArg(v3) 3263 v1.AddArg(v2) 3264 v0.AddArg(v1) 3265 v.AddArg(v0) 3266 return true 3267 } 3268 } 3269 func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { 3270 b := v.Block 3271 _ = b 3272 typ := &b.Func.Config.Types 3273 _ = typ 3274 // match: (Lsh32x64 x (Const64 [c])) 3275 // cond: uint64(c) < 32 3276 // result: (SLWconst x [c]) 3277 for { 3278 _ = v.Args[1] 3279 x := v.Args[0] 3280 v_1 := v.Args[1] 3281 if v_1.Op != OpConst64 { 3282 break 3283 } 3284 c := v_1.AuxInt 3285 if !(uint64(c) < 32) { 3286 break 3287 } 3288 v.reset(OpPPC64SLWconst) 3289 v.AuxInt = c 3290 v.AddArg(x) 3291 return true 3292 } 3293 // match: (Lsh32x64 _ (Const64 [c])) 3294 // cond: uint64(c) >= 32 3295 // result: (MOVDconst [0]) 3296 for { 3297 _ = v.Args[1] 3298 v_1 := v.Args[1] 3299 if v_1.Op != OpConst64 { 3300 break 3301 } 3302 c := v_1.AuxInt 3303 if !(uint64(c) >= 32) { 3304 break 3305 } 3306 v.reset(OpPPC64MOVDconst) 3307 v.AuxInt = 0 3308 return true 3309 } 3310 // match: (Lsh32x64 x (MOVDconst [c])) 3311 // cond: uint64(c) < 32 3312 // result: (SLWconst x [c]) 3313 for { 3314 _ = v.Args[1] 3315 x := v.Args[0] 3316 v_1 := v.Args[1] 3317 if v_1.Op != OpPPC64MOVDconst { 3318 break 3319 } 3320 c := v_1.AuxInt 3321 if !(uint64(c) < 32) { 3322 break 3323 } 3324 v.reset(OpPPC64SLWconst) 3325 v.AuxInt = c 3326 v.AddArg(x) 3327 return true 3328 } 3329 // match: (Lsh32x64 x y) 3330 // cond: 3331 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 3332 for { 3333 _ = v.Args[1] 3334 x := v.Args[0] 3335 y := v.Args[1] 3336 v.reset(OpPPC64SLW) 3337 v.AddArg(x) 3338 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3339 v0.AddArg(y) 3340 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3341 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3342 v2.AuxInt = -32 3343 v2.AddArg(y) 3344 v1.AddArg(v2) 3345 v0.AddArg(v1) 3346 v.AddArg(v0) 3347 return true 3348 } 3349 } 3350 func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool { 3351 b := v.Block 3352 _ = b 3353 typ := &b.Func.Config.Types 3354 _ = typ 3355 // match: (Lsh32x8 x y) 3356 // cond: 3357 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 3358 for { 3359 _ = v.Args[1] 3360 x := v.Args[0] 3361 y := v.Args[1] 3362 v.reset(OpPPC64SLW) 3363 v.AddArg(x) 3364 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3365 v0.AddArg(y) 3366 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3367 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3368 v2.AuxInt = -32 3369 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3370 v3.AddArg(y) 3371 v2.AddArg(v3) 3372 v1.AddArg(v2) 3373 v0.AddArg(v1) 3374 v.AddArg(v0) 3375 return true 3376 } 3377 } 3378 func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool { 3379 b := v.Block 3380 _ = b 3381 typ := &b.Func.Config.Types 3382 _ = typ 3383 // match: (Lsh64x16 x y) 3384 // cond: 3385 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 3386 for { 3387 _ = v.Args[1] 3388 x := v.Args[0] 3389 y := v.Args[1] 3390 v.reset(OpPPC64SLD) 3391 v.AddArg(x) 3392 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3393 v0.AddArg(y) 3394 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3395 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3396 v2.AuxInt = -64 3397 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3398 v3.AddArg(y) 3399 v2.AddArg(v3) 3400 v1.AddArg(v2) 3401 v0.AddArg(v1) 3402 v.AddArg(v0) 3403 return true 3404 } 3405 } 3406 func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { 3407 b := v.Block 3408 _ = b 3409 typ := &b.Func.Config.Types 3410 _ = typ 3411 // match: (Lsh64x32 x (Const64 [c])) 3412 // cond: uint32(c) < 64 3413 // result: (SLDconst x [c]) 3414 for { 3415 _ = v.Args[1] 3416 x := v.Args[0] 3417 v_1 := v.Args[1] 3418 if v_1.Op != OpConst64 { 3419 break 3420 } 3421 c := v_1.AuxInt 3422 if !(uint32(c) < 64) { 3423 break 3424 } 3425 v.reset(OpPPC64SLDconst) 3426 v.AuxInt = c 3427 v.AddArg(x) 3428 return true 3429 } 3430 // match: (Lsh64x32 x (MOVDconst [c])) 3431 // cond: uint32(c) < 64 3432 // result: (SLDconst x [c]) 3433 for { 3434 _ = v.Args[1] 3435 x := v.Args[0] 3436 v_1 := v.Args[1] 3437 if v_1.Op != OpPPC64MOVDconst { 3438 break 3439 } 3440 c := v_1.AuxInt 3441 if !(uint32(c) < 64) { 3442 break 3443 } 3444 v.reset(OpPPC64SLDconst) 3445 v.AuxInt = c 3446 v.AddArg(x) 3447 return true 3448 } 3449 // match: (Lsh64x32 x y) 3450 // cond: 3451 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 3452 for { 3453 _ = v.Args[1] 3454 x := v.Args[0] 3455 y := v.Args[1] 3456 v.reset(OpPPC64SLD) 3457 v.AddArg(x) 3458 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3459 v0.AddArg(y) 3460 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3461 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3462 v2.AuxInt = -64 3463 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3464 v3.AddArg(y) 3465 v2.AddArg(v3) 3466 v1.AddArg(v2) 3467 v0.AddArg(v1) 3468 v.AddArg(v0) 3469 return true 3470 } 3471 } 3472 func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { 3473 b := v.Block 3474 _ = b 3475 typ := &b.Func.Config.Types 3476 _ = typ 3477 // match: (Lsh64x64 x (Const64 [c])) 3478 // cond: uint64(c) < 64 3479 // result: (SLDconst x [c]) 3480 for { 3481 _ = v.Args[1] 3482 x := v.Args[0] 3483 v_1 := v.Args[1] 3484 if v_1.Op != OpConst64 { 3485 break 3486 } 3487 c := v_1.AuxInt 3488 if !(uint64(c) < 64) { 3489 break 3490 } 3491 v.reset(OpPPC64SLDconst) 3492 v.AuxInt = c 3493 v.AddArg(x) 3494 return true 3495 } 3496 // match: (Lsh64x64 _ (Const64 [c])) 3497 // cond: uint64(c) >= 64 3498 // result: (MOVDconst [0]) 3499 for { 3500 _ = v.Args[1] 3501 v_1 := v.Args[1] 3502 if v_1.Op != OpConst64 { 3503 break 3504 } 3505 c := v_1.AuxInt 3506 if !(uint64(c) >= 64) { 3507 break 3508 } 3509 v.reset(OpPPC64MOVDconst) 3510 v.AuxInt = 0 3511 return true 3512 } 3513 // match: (Lsh64x64 x (MOVDconst [c])) 3514 // cond: uint64(c) < 64 3515 // result: (SLDconst x [c]) 3516 for { 3517 _ = v.Args[1] 3518 x := v.Args[0] 3519 v_1 := v.Args[1] 3520 if v_1.Op != OpPPC64MOVDconst { 3521 break 3522 } 3523 c := v_1.AuxInt 3524 if !(uint64(c) < 64) { 3525 break 3526 } 3527 v.reset(OpPPC64SLDconst) 3528 v.AuxInt = c 3529 v.AddArg(x) 3530 return true 3531 } 3532 // match: (Lsh64x64 x y) 3533 // cond: 3534 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 3535 for { 3536 _ = v.Args[1] 3537 x := v.Args[0] 3538 y := v.Args[1] 3539 v.reset(OpPPC64SLD) 3540 v.AddArg(x) 3541 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3542 v0.AddArg(y) 3543 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3544 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3545 v2.AuxInt = -64 3546 v2.AddArg(y) 3547 v1.AddArg(v2) 3548 v0.AddArg(v1) 3549 v.AddArg(v0) 3550 return true 3551 } 3552 } 3553 func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool { 3554 b := v.Block 3555 _ = b 3556 typ := &b.Func.Config.Types 3557 _ = typ 3558 // match: (Lsh64x8 x y) 3559 // cond: 3560 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 3561 for { 3562 _ = v.Args[1] 3563 x := v.Args[0] 3564 y := v.Args[1] 3565 v.reset(OpPPC64SLD) 3566 v.AddArg(x) 3567 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3568 v0.AddArg(y) 3569 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3570 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3571 v2.AuxInt = -64 3572 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3573 v3.AddArg(y) 3574 v2.AddArg(v3) 3575 v1.AddArg(v2) 3576 v0.AddArg(v1) 3577 v.AddArg(v0) 3578 return true 3579 } 3580 } 3581 func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool { 3582 b := v.Block 3583 _ = b 3584 typ := &b.Func.Config.Types 3585 _ = typ 3586 // match: (Lsh8x16 x y) 3587 // cond: 3588 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 3589 for { 3590 _ = v.Args[1] 3591 x := v.Args[0] 3592 y := v.Args[1] 3593 v.reset(OpPPC64SLW) 3594 v.AddArg(x) 3595 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3596 v0.AddArg(y) 3597 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3598 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3599 v2.AuxInt = -8 3600 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3601 v3.AddArg(y) 3602 v2.AddArg(v3) 3603 v1.AddArg(v2) 3604 v0.AddArg(v1) 3605 v.AddArg(v0) 3606 return true 3607 } 3608 } 3609 func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { 3610 b := v.Block 3611 _ = b 3612 typ := &b.Func.Config.Types 3613 _ = typ 3614 // match: (Lsh8x32 x (Const64 [c])) 3615 // cond: uint32(c) < 8 3616 // result: (SLWconst x [c]) 3617 for { 3618 _ = v.Args[1] 3619 x := v.Args[0] 3620 v_1 := v.Args[1] 3621 if v_1.Op != OpConst64 { 3622 break 3623 } 3624 c := v_1.AuxInt 3625 if !(uint32(c) < 8) { 3626 break 3627 } 3628 v.reset(OpPPC64SLWconst) 3629 v.AuxInt = c 3630 v.AddArg(x) 3631 return true 3632 } 3633 // match: (Lsh8x32 x (MOVDconst [c])) 3634 // cond: uint32(c) < 8 3635 // result: (SLWconst x [c]) 3636 for { 3637 _ = v.Args[1] 3638 x := v.Args[0] 3639 v_1 := v.Args[1] 3640 if v_1.Op != OpPPC64MOVDconst { 3641 break 3642 } 3643 c := v_1.AuxInt 3644 if !(uint32(c) < 8) { 3645 break 3646 } 3647 v.reset(OpPPC64SLWconst) 3648 v.AuxInt = c 3649 v.AddArg(x) 3650 return true 3651 } 3652 // match: (Lsh8x32 x y) 3653 // cond: 3654 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 3655 for { 3656 _ = v.Args[1] 3657 x := v.Args[0] 3658 y := v.Args[1] 3659 v.reset(OpPPC64SLW) 3660 v.AddArg(x) 3661 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3662 v0.AddArg(y) 3663 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3664 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3665 v2.AuxInt = -8 3666 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3667 v3.AddArg(y) 3668 v2.AddArg(v3) 3669 v1.AddArg(v2) 3670 v0.AddArg(v1) 3671 v.AddArg(v0) 3672 return true 3673 } 3674 } 3675 func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { 3676 b := v.Block 3677 _ = b 3678 typ := &b.Func.Config.Types 3679 _ = typ 3680 // match: (Lsh8x64 x (Const64 [c])) 3681 // cond: uint64(c) < 8 3682 // result: (SLWconst x [c]) 3683 for { 3684 _ = v.Args[1] 3685 x := v.Args[0] 3686 v_1 := v.Args[1] 3687 if v_1.Op != OpConst64 { 3688 break 3689 } 3690 c := v_1.AuxInt 3691 if !(uint64(c) < 8) { 3692 break 3693 } 3694 v.reset(OpPPC64SLWconst) 3695 v.AuxInt = c 3696 v.AddArg(x) 3697 return true 3698 } 3699 // match: (Lsh8x64 _ (Const64 [c])) 3700 // cond: uint64(c) >= 8 3701 // result: (MOVDconst [0]) 3702 for { 3703 _ = v.Args[1] 3704 v_1 := v.Args[1] 3705 if v_1.Op != OpConst64 { 3706 break 3707 } 3708 c := v_1.AuxInt 3709 if !(uint64(c) >= 8) { 3710 break 3711 } 3712 v.reset(OpPPC64MOVDconst) 3713 v.AuxInt = 0 3714 return true 3715 } 3716 // match: (Lsh8x64 x (MOVDconst [c])) 3717 // cond: uint64(c) < 8 3718 // result: (SLWconst x [c]) 3719 for { 3720 _ = v.Args[1] 3721 x := v.Args[0] 3722 v_1 := v.Args[1] 3723 if v_1.Op != OpPPC64MOVDconst { 3724 break 3725 } 3726 c := v_1.AuxInt 3727 if !(uint64(c) < 8) { 3728 break 3729 } 3730 v.reset(OpPPC64SLWconst) 3731 v.AuxInt = c 3732 v.AddArg(x) 3733 return true 3734 } 3735 // match: (Lsh8x64 x y) 3736 // cond: 3737 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 3738 for { 3739 _ = v.Args[1] 3740 x := v.Args[0] 3741 y := v.Args[1] 3742 v.reset(OpPPC64SLW) 3743 v.AddArg(x) 3744 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3745 v0.AddArg(y) 3746 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3747 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3748 v2.AuxInt = -8 3749 v2.AddArg(y) 3750 v1.AddArg(v2) 3751 v0.AddArg(v1) 3752 v.AddArg(v0) 3753 return true 3754 } 3755 } 3756 func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool { 3757 b := v.Block 3758 _ = b 3759 typ := &b.Func.Config.Types 3760 _ = typ 3761 // match: (Lsh8x8 x y) 3762 // cond: 3763 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 3764 for { 3765 _ = v.Args[1] 3766 x := v.Args[0] 3767 y := v.Args[1] 3768 v.reset(OpPPC64SLW) 3769 v.AddArg(x) 3770 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3771 v0.AddArg(y) 3772 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3773 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3774 v2.AuxInt = -8 3775 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3776 v3.AddArg(y) 3777 v2.AddArg(v3) 3778 v1.AddArg(v2) 3779 v0.AddArg(v1) 3780 v.AddArg(v0) 3781 return true 3782 } 3783 } 3784 func rewriteValuePPC64_OpMod16_0(v *Value) bool { 3785 b := v.Block 3786 _ = b 3787 typ := &b.Func.Config.Types 3788 _ = typ 3789 // match: (Mod16 x y) 3790 // cond: 3791 // result: (Mod32 (SignExt16to32 x) (SignExt16to32 y)) 3792 for { 3793 _ = v.Args[1] 3794 x := v.Args[0] 3795 y := v.Args[1] 3796 v.reset(OpMod32) 3797 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 3798 v0.AddArg(x) 3799 v.AddArg(v0) 3800 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 3801 v1.AddArg(y) 3802 v.AddArg(v1) 3803 return true 3804 } 3805 } 3806 func rewriteValuePPC64_OpMod16u_0(v *Value) bool { 3807 b := v.Block 3808 _ = b 3809 typ := &b.Func.Config.Types 3810 _ = typ 3811 // match: (Mod16u x y) 3812 // cond: 3813 // result: (Mod32u (ZeroExt16to32 x) (ZeroExt16to32 y)) 3814 for { 3815 _ = v.Args[1] 3816 x := v.Args[0] 3817 y := v.Args[1] 3818 v.reset(OpMod32u) 3819 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 3820 v0.AddArg(x) 3821 v.AddArg(v0) 3822 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 3823 v1.AddArg(y) 3824 v.AddArg(v1) 3825 return true 3826 } 3827 } 3828 func rewriteValuePPC64_OpMod32_0(v *Value) bool { 3829 b := v.Block 3830 _ = b 3831 typ := &b.Func.Config.Types 3832 _ = typ 3833 // match: (Mod32 x y) 3834 // cond: 3835 // result: (SUB x (MULLW y (DIVW x y))) 3836 for { 3837 _ = v.Args[1] 3838 x := v.Args[0] 3839 y := v.Args[1] 3840 v.reset(OpPPC64SUB) 3841 v.AddArg(x) 3842 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) 3843 v0.AddArg(y) 3844 v1 := b.NewValue0(v.Pos, OpPPC64DIVW, typ.Int32) 3845 v1.AddArg(x) 3846 v1.AddArg(y) 3847 v0.AddArg(v1) 3848 v.AddArg(v0) 3849 return true 3850 } 3851 } 3852 func rewriteValuePPC64_OpMod32u_0(v *Value) bool { 3853 b := v.Block 3854 _ = b 3855 typ := &b.Func.Config.Types 3856 _ = typ 3857 // match: (Mod32u x y) 3858 // cond: 3859 // result: (SUB x (MULLW y (DIVWU x y))) 3860 for { 3861 _ = v.Args[1] 3862 x := v.Args[0] 3863 y := v.Args[1] 3864 v.reset(OpPPC64SUB) 3865 v.AddArg(x) 3866 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) 3867 v0.AddArg(y) 3868 v1 := b.NewValue0(v.Pos, OpPPC64DIVWU, typ.Int32) 3869 v1.AddArg(x) 3870 v1.AddArg(y) 3871 v0.AddArg(v1) 3872 v.AddArg(v0) 3873 return true 3874 } 3875 } 3876 func rewriteValuePPC64_OpMod64_0(v *Value) bool { 3877 b := v.Block 3878 _ = b 3879 typ := &b.Func.Config.Types 3880 _ = typ 3881 // match: (Mod64 x y) 3882 // cond: 3883 // result: (SUB x (MULLD y (DIVD x y))) 3884 for { 3885 _ = v.Args[1] 3886 x := v.Args[0] 3887 y := v.Args[1] 3888 v.reset(OpPPC64SUB) 3889 v.AddArg(x) 3890 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) 3891 v0.AddArg(y) 3892 v1 := b.NewValue0(v.Pos, OpPPC64DIVD, typ.Int64) 3893 v1.AddArg(x) 3894 v1.AddArg(y) 3895 v0.AddArg(v1) 3896 v.AddArg(v0) 3897 return true 3898 } 3899 } 3900 func rewriteValuePPC64_OpMod64u_0(v *Value) bool { 3901 b := v.Block 3902 _ = b 3903 typ := &b.Func.Config.Types 3904 _ = typ 3905 // match: (Mod64u x y) 3906 // cond: 3907 // result: (SUB x (MULLD y (DIVDU x y))) 3908 for { 3909 _ = v.Args[1] 3910 x := v.Args[0] 3911 y := v.Args[1] 3912 v.reset(OpPPC64SUB) 3913 v.AddArg(x) 3914 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) 3915 v0.AddArg(y) 3916 v1 := b.NewValue0(v.Pos, OpPPC64DIVDU, typ.Int64) 3917 v1.AddArg(x) 3918 v1.AddArg(y) 3919 v0.AddArg(v1) 3920 v.AddArg(v0) 3921 return true 3922 } 3923 } 3924 func rewriteValuePPC64_OpMod8_0(v *Value) bool { 3925 b := v.Block 3926 _ = b 3927 typ := &b.Func.Config.Types 3928 _ = typ 3929 // match: (Mod8 x y) 3930 // cond: 3931 // result: (Mod32 (SignExt8to32 x) (SignExt8to32 y)) 3932 for { 3933 _ = v.Args[1] 3934 x := v.Args[0] 3935 y := v.Args[1] 3936 v.reset(OpMod32) 3937 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 3938 v0.AddArg(x) 3939 v.AddArg(v0) 3940 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 3941 v1.AddArg(y) 3942 v.AddArg(v1) 3943 return true 3944 } 3945 } 3946 func rewriteValuePPC64_OpMod8u_0(v *Value) bool { 3947 b := v.Block 3948 _ = b 3949 typ := &b.Func.Config.Types 3950 _ = typ 3951 // match: (Mod8u x y) 3952 // cond: 3953 // result: (Mod32u (ZeroExt8to32 x) (ZeroExt8to32 y)) 3954 for { 3955 _ = v.Args[1] 3956 x := v.Args[0] 3957 y := v.Args[1] 3958 v.reset(OpMod32u) 3959 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 3960 v0.AddArg(x) 3961 v.AddArg(v0) 3962 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 3963 v1.AddArg(y) 3964 v.AddArg(v1) 3965 return true 3966 } 3967 } 3968 func rewriteValuePPC64_OpMove_0(v *Value) bool { 3969 b := v.Block 3970 _ = b 3971 typ := &b.Func.Config.Types 3972 _ = typ 3973 // match: (Move [0] _ _ mem) 3974 // cond: 3975 // result: mem 3976 for { 3977 if v.AuxInt != 0 { 3978 break 3979 } 3980 _ = v.Args[2] 3981 mem := v.Args[2] 3982 v.reset(OpCopy) 3983 v.Type = mem.Type 3984 v.AddArg(mem) 3985 return true 3986 } 3987 // match: (Move [1] dst src mem) 3988 // cond: 3989 // result: (MOVBstore dst (MOVBZload src mem) mem) 3990 for { 3991 if v.AuxInt != 1 { 3992 break 3993 } 3994 _ = v.Args[2] 3995 dst := v.Args[0] 3996 src := v.Args[1] 3997 mem := v.Args[2] 3998 v.reset(OpPPC64MOVBstore) 3999 v.AddArg(dst) 4000 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4001 v0.AddArg(src) 4002 v0.AddArg(mem) 4003 v.AddArg(v0) 4004 v.AddArg(mem) 4005 return true 4006 } 4007 // match: (Move [2] dst src mem) 4008 // cond: 4009 // result: (MOVHstore dst (MOVHZload src mem) mem) 4010 for { 4011 if v.AuxInt != 2 { 4012 break 4013 } 4014 _ = v.Args[2] 4015 dst := v.Args[0] 4016 src := v.Args[1] 4017 mem := v.Args[2] 4018 v.reset(OpPPC64MOVHstore) 4019 v.AddArg(dst) 4020 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4021 v0.AddArg(src) 4022 v0.AddArg(mem) 4023 v.AddArg(v0) 4024 v.AddArg(mem) 4025 return true 4026 } 4027 // match: (Move [4] dst src mem) 4028 // cond: 4029 // result: (MOVWstore dst (MOVWZload src mem) mem) 4030 for { 4031 if v.AuxInt != 4 { 4032 break 4033 } 4034 _ = v.Args[2] 4035 dst := v.Args[0] 4036 src := v.Args[1] 4037 mem := v.Args[2] 4038 v.reset(OpPPC64MOVWstore) 4039 v.AddArg(dst) 4040 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4041 v0.AddArg(src) 4042 v0.AddArg(mem) 4043 v.AddArg(v0) 4044 v.AddArg(mem) 4045 return true 4046 } 4047 // match: (Move [8] {t} dst src mem) 4048 // cond: t.(*types.Type).Alignment()%4 == 0 4049 // result: (MOVDstore dst (MOVDload src mem) mem) 4050 for { 4051 if v.AuxInt != 8 { 4052 break 4053 } 4054 t := v.Aux 4055 _ = v.Args[2] 4056 dst := v.Args[0] 4057 src := v.Args[1] 4058 mem := v.Args[2] 4059 if !(t.(*types.Type).Alignment()%4 == 0) { 4060 break 4061 } 4062 v.reset(OpPPC64MOVDstore) 4063 v.AddArg(dst) 4064 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, typ.Int64) 4065 v0.AddArg(src) 4066 v0.AddArg(mem) 4067 v.AddArg(v0) 4068 v.AddArg(mem) 4069 return true 4070 } 4071 // match: (Move [8] dst src mem) 4072 // cond: 4073 // result: (MOVWstore [4] dst (MOVWZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4074 for { 4075 if v.AuxInt != 8 { 4076 break 4077 } 4078 _ = v.Args[2] 4079 dst := v.Args[0] 4080 src := v.Args[1] 4081 mem := v.Args[2] 4082 v.reset(OpPPC64MOVWstore) 4083 v.AuxInt = 4 4084 v.AddArg(dst) 4085 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4086 v0.AuxInt = 4 4087 v0.AddArg(src) 4088 v0.AddArg(mem) 4089 v.AddArg(v0) 4090 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4091 v1.AddArg(dst) 4092 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4093 v2.AddArg(src) 4094 v2.AddArg(mem) 4095 v1.AddArg(v2) 4096 v1.AddArg(mem) 4097 v.AddArg(v1) 4098 return true 4099 } 4100 // match: (Move [3] dst src mem) 4101 // cond: 4102 // result: (MOVBstore [2] dst (MOVBZload [2] src mem) (MOVHstore dst (MOVHload src mem) mem)) 4103 for { 4104 if v.AuxInt != 3 { 4105 break 4106 } 4107 _ = v.Args[2] 4108 dst := v.Args[0] 4109 src := v.Args[1] 4110 mem := v.Args[2] 4111 v.reset(OpPPC64MOVBstore) 4112 v.AuxInt = 2 4113 v.AddArg(dst) 4114 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4115 v0.AuxInt = 2 4116 v0.AddArg(src) 4117 v0.AddArg(mem) 4118 v.AddArg(v0) 4119 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem) 4120 v1.AddArg(dst) 4121 v2 := b.NewValue0(v.Pos, OpPPC64MOVHload, typ.Int16) 4122 v2.AddArg(src) 4123 v2.AddArg(mem) 4124 v1.AddArg(v2) 4125 v1.AddArg(mem) 4126 v.AddArg(v1) 4127 return true 4128 } 4129 // match: (Move [5] dst src mem) 4130 // cond: 4131 // result: (MOVBstore [4] dst (MOVBZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4132 for { 4133 if v.AuxInt != 5 { 4134 break 4135 } 4136 _ = v.Args[2] 4137 dst := v.Args[0] 4138 src := v.Args[1] 4139 mem := v.Args[2] 4140 v.reset(OpPPC64MOVBstore) 4141 v.AuxInt = 4 4142 v.AddArg(dst) 4143 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4144 v0.AuxInt = 4 4145 v0.AddArg(src) 4146 v0.AddArg(mem) 4147 v.AddArg(v0) 4148 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4149 v1.AddArg(dst) 4150 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4151 v2.AddArg(src) 4152 v2.AddArg(mem) 4153 v1.AddArg(v2) 4154 v1.AddArg(mem) 4155 v.AddArg(v1) 4156 return true 4157 } 4158 // match: (Move [6] dst src mem) 4159 // cond: 4160 // result: (MOVHstore [4] dst (MOVHZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4161 for { 4162 if v.AuxInt != 6 { 4163 break 4164 } 4165 _ = v.Args[2] 4166 dst := v.Args[0] 4167 src := v.Args[1] 4168 mem := v.Args[2] 4169 v.reset(OpPPC64MOVHstore) 4170 v.AuxInt = 4 4171 v.AddArg(dst) 4172 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4173 v0.AuxInt = 4 4174 v0.AddArg(src) 4175 v0.AddArg(mem) 4176 v.AddArg(v0) 4177 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4178 v1.AddArg(dst) 4179 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4180 v2.AddArg(src) 4181 v2.AddArg(mem) 4182 v1.AddArg(v2) 4183 v1.AddArg(mem) 4184 v.AddArg(v1) 4185 return true 4186 } 4187 // match: (Move [7] dst src mem) 4188 // cond: 4189 // result: (MOVBstore [6] dst (MOVBZload [6] src mem) (MOVHstore [4] dst (MOVHZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem))) 4190 for { 4191 if v.AuxInt != 7 { 4192 break 4193 } 4194 _ = v.Args[2] 4195 dst := v.Args[0] 4196 src := v.Args[1] 4197 mem := v.Args[2] 4198 v.reset(OpPPC64MOVBstore) 4199 v.AuxInt = 6 4200 v.AddArg(dst) 4201 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4202 v0.AuxInt = 6 4203 v0.AddArg(src) 4204 v0.AddArg(mem) 4205 v.AddArg(v0) 4206 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem) 4207 v1.AuxInt = 4 4208 v1.AddArg(dst) 4209 v2 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4210 v2.AuxInt = 4 4211 v2.AddArg(src) 4212 v2.AddArg(mem) 4213 v1.AddArg(v2) 4214 v3 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4215 v3.AddArg(dst) 4216 v4 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4217 v4.AddArg(src) 4218 v4.AddArg(mem) 4219 v3.AddArg(v4) 4220 v3.AddArg(mem) 4221 v1.AddArg(v3) 4222 v.AddArg(v1) 4223 return true 4224 } 4225 return false 4226 } 4227 func rewriteValuePPC64_OpMove_10(v *Value) bool { 4228 // match: (Move [s] dst src mem) 4229 // cond: s > 8 4230 // result: (LoweredMove [s] dst src mem) 4231 for { 4232 s := v.AuxInt 4233 _ = v.Args[2] 4234 dst := v.Args[0] 4235 src := v.Args[1] 4236 mem := v.Args[2] 4237 if !(s > 8) { 4238 break 4239 } 4240 v.reset(OpPPC64LoweredMove) 4241 v.AuxInt = s 4242 v.AddArg(dst) 4243 v.AddArg(src) 4244 v.AddArg(mem) 4245 return true 4246 } 4247 return false 4248 } 4249 func rewriteValuePPC64_OpMul16_0(v *Value) bool { 4250 // match: (Mul16 x y) 4251 // cond: 4252 // result: (MULLW x y) 4253 for { 4254 _ = v.Args[1] 4255 x := v.Args[0] 4256 y := v.Args[1] 4257 v.reset(OpPPC64MULLW) 4258 v.AddArg(x) 4259 v.AddArg(y) 4260 return true 4261 } 4262 } 4263 func rewriteValuePPC64_OpMul32_0(v *Value) bool { 4264 // match: (Mul32 x y) 4265 // cond: 4266 // result: (MULLW x y) 4267 for { 4268 _ = v.Args[1] 4269 x := v.Args[0] 4270 y := v.Args[1] 4271 v.reset(OpPPC64MULLW) 4272 v.AddArg(x) 4273 v.AddArg(y) 4274 return true 4275 } 4276 } 4277 func rewriteValuePPC64_OpMul32F_0(v *Value) bool { 4278 // match: (Mul32F x y) 4279 // cond: 4280 // result: (FMULS x y) 4281 for { 4282 _ = v.Args[1] 4283 x := v.Args[0] 4284 y := v.Args[1] 4285 v.reset(OpPPC64FMULS) 4286 v.AddArg(x) 4287 v.AddArg(y) 4288 return true 4289 } 4290 } 4291 func rewriteValuePPC64_OpMul64_0(v *Value) bool { 4292 // match: (Mul64 x y) 4293 // cond: 4294 // result: (MULLD x y) 4295 for { 4296 _ = v.Args[1] 4297 x := v.Args[0] 4298 y := v.Args[1] 4299 v.reset(OpPPC64MULLD) 4300 v.AddArg(x) 4301 v.AddArg(y) 4302 return true 4303 } 4304 } 4305 func rewriteValuePPC64_OpMul64F_0(v *Value) bool { 4306 // match: (Mul64F x y) 4307 // cond: 4308 // result: (FMUL x y) 4309 for { 4310 _ = v.Args[1] 4311 x := v.Args[0] 4312 y := v.Args[1] 4313 v.reset(OpPPC64FMUL) 4314 v.AddArg(x) 4315 v.AddArg(y) 4316 return true 4317 } 4318 } 4319 func rewriteValuePPC64_OpMul8_0(v *Value) bool { 4320 // match: (Mul8 x y) 4321 // cond: 4322 // result: (MULLW x y) 4323 for { 4324 _ = v.Args[1] 4325 x := v.Args[0] 4326 y := v.Args[1] 4327 v.reset(OpPPC64MULLW) 4328 v.AddArg(x) 4329 v.AddArg(y) 4330 return true 4331 } 4332 } 4333 func rewriteValuePPC64_OpNeg16_0(v *Value) bool { 4334 // match: (Neg16 x) 4335 // cond: 4336 // result: (NEG x) 4337 for { 4338 x := v.Args[0] 4339 v.reset(OpPPC64NEG) 4340 v.AddArg(x) 4341 return true 4342 } 4343 } 4344 func rewriteValuePPC64_OpNeg32_0(v *Value) bool { 4345 // match: (Neg32 x) 4346 // cond: 4347 // result: (NEG x) 4348 for { 4349 x := v.Args[0] 4350 v.reset(OpPPC64NEG) 4351 v.AddArg(x) 4352 return true 4353 } 4354 } 4355 func rewriteValuePPC64_OpNeg32F_0(v *Value) bool { 4356 // match: (Neg32F x) 4357 // cond: 4358 // result: (FNEG x) 4359 for { 4360 x := v.Args[0] 4361 v.reset(OpPPC64FNEG) 4362 v.AddArg(x) 4363 return true 4364 } 4365 } 4366 func rewriteValuePPC64_OpNeg64_0(v *Value) bool { 4367 // match: (Neg64 x) 4368 // cond: 4369 // result: (NEG x) 4370 for { 4371 x := v.Args[0] 4372 v.reset(OpPPC64NEG) 4373 v.AddArg(x) 4374 return true 4375 } 4376 } 4377 func rewriteValuePPC64_OpNeg64F_0(v *Value) bool { 4378 // match: (Neg64F x) 4379 // cond: 4380 // result: (FNEG x) 4381 for { 4382 x := v.Args[0] 4383 v.reset(OpPPC64FNEG) 4384 v.AddArg(x) 4385 return true 4386 } 4387 } 4388 func rewriteValuePPC64_OpNeg8_0(v *Value) bool { 4389 // match: (Neg8 x) 4390 // cond: 4391 // result: (NEG x) 4392 for { 4393 x := v.Args[0] 4394 v.reset(OpPPC64NEG) 4395 v.AddArg(x) 4396 return true 4397 } 4398 } 4399 func rewriteValuePPC64_OpNeq16_0(v *Value) bool { 4400 b := v.Block 4401 _ = b 4402 typ := &b.Func.Config.Types 4403 _ = typ 4404 // match: (Neq16 x y) 4405 // cond: isSigned(x.Type) && isSigned(y.Type) 4406 // result: (NotEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 4407 for { 4408 _ = v.Args[1] 4409 x := v.Args[0] 4410 y := v.Args[1] 4411 if !(isSigned(x.Type) && isSigned(y.Type)) { 4412 break 4413 } 4414 v.reset(OpPPC64NotEqual) 4415 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4416 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4417 v1.AddArg(x) 4418 v0.AddArg(v1) 4419 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4420 v2.AddArg(y) 4421 v0.AddArg(v2) 4422 v.AddArg(v0) 4423 return true 4424 } 4425 // match: (Neq16 x y) 4426 // cond: 4427 // result: (NotEqual (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) 4428 for { 4429 _ = v.Args[1] 4430 x := v.Args[0] 4431 y := v.Args[1] 4432 v.reset(OpPPC64NotEqual) 4433 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4434 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4435 v1.AddArg(x) 4436 v0.AddArg(v1) 4437 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4438 v2.AddArg(y) 4439 v0.AddArg(v2) 4440 v.AddArg(v0) 4441 return true 4442 } 4443 } 4444 func rewriteValuePPC64_OpNeq32_0(v *Value) bool { 4445 b := v.Block 4446 _ = b 4447 // match: (Neq32 x y) 4448 // cond: 4449 // result: (NotEqual (CMPW x y)) 4450 for { 4451 _ = v.Args[1] 4452 x := v.Args[0] 4453 y := v.Args[1] 4454 v.reset(OpPPC64NotEqual) 4455 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4456 v0.AddArg(x) 4457 v0.AddArg(y) 4458 v.AddArg(v0) 4459 return true 4460 } 4461 } 4462 func rewriteValuePPC64_OpNeq32F_0(v *Value) bool { 4463 b := v.Block 4464 _ = b 4465 // match: (Neq32F x y) 4466 // cond: 4467 // result: (NotEqual (FCMPU x y)) 4468 for { 4469 _ = v.Args[1] 4470 x := v.Args[0] 4471 y := v.Args[1] 4472 v.reset(OpPPC64NotEqual) 4473 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 4474 v0.AddArg(x) 4475 v0.AddArg(y) 4476 v.AddArg(v0) 4477 return true 4478 } 4479 } 4480 func rewriteValuePPC64_OpNeq64_0(v *Value) bool { 4481 b := v.Block 4482 _ = b 4483 // match: (Neq64 x y) 4484 // cond: 4485 // result: (NotEqual (CMP x y)) 4486 for { 4487 _ = v.Args[1] 4488 x := v.Args[0] 4489 y := v.Args[1] 4490 v.reset(OpPPC64NotEqual) 4491 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 4492 v0.AddArg(x) 4493 v0.AddArg(y) 4494 v.AddArg(v0) 4495 return true 4496 } 4497 } 4498 func rewriteValuePPC64_OpNeq64F_0(v *Value) bool { 4499 b := v.Block 4500 _ = b 4501 // match: (Neq64F x y) 4502 // cond: 4503 // result: (NotEqual (FCMPU x y)) 4504 for { 4505 _ = v.Args[1] 4506 x := v.Args[0] 4507 y := v.Args[1] 4508 v.reset(OpPPC64NotEqual) 4509 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 4510 v0.AddArg(x) 4511 v0.AddArg(y) 4512 v.AddArg(v0) 4513 return true 4514 } 4515 } 4516 func rewriteValuePPC64_OpNeq8_0(v *Value) bool { 4517 b := v.Block 4518 _ = b 4519 typ := &b.Func.Config.Types 4520 _ = typ 4521 // match: (Neq8 x y) 4522 // cond: isSigned(x.Type) && isSigned(y.Type) 4523 // result: (NotEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 4524 for { 4525 _ = v.Args[1] 4526 x := v.Args[0] 4527 y := v.Args[1] 4528 if !(isSigned(x.Type) && isSigned(y.Type)) { 4529 break 4530 } 4531 v.reset(OpPPC64NotEqual) 4532 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4533 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4534 v1.AddArg(x) 4535 v0.AddArg(v1) 4536 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4537 v2.AddArg(y) 4538 v0.AddArg(v2) 4539 v.AddArg(v0) 4540 return true 4541 } 4542 // match: (Neq8 x y) 4543 // cond: 4544 // result: (NotEqual (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) 4545 for { 4546 _ = v.Args[1] 4547 x := v.Args[0] 4548 y := v.Args[1] 4549 v.reset(OpPPC64NotEqual) 4550 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4551 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4552 v1.AddArg(x) 4553 v0.AddArg(v1) 4554 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4555 v2.AddArg(y) 4556 v0.AddArg(v2) 4557 v.AddArg(v0) 4558 return true 4559 } 4560 } 4561 func rewriteValuePPC64_OpNeqB_0(v *Value) bool { 4562 // match: (NeqB x y) 4563 // cond: 4564 // result: (XOR x y) 4565 for { 4566 _ = v.Args[1] 4567 x := v.Args[0] 4568 y := v.Args[1] 4569 v.reset(OpPPC64XOR) 4570 v.AddArg(x) 4571 v.AddArg(y) 4572 return true 4573 } 4574 } 4575 func rewriteValuePPC64_OpNeqPtr_0(v *Value) bool { 4576 b := v.Block 4577 _ = b 4578 // match: (NeqPtr x y) 4579 // cond: 4580 // result: (NotEqual (CMP x y)) 4581 for { 4582 _ = v.Args[1] 4583 x := v.Args[0] 4584 y := v.Args[1] 4585 v.reset(OpPPC64NotEqual) 4586 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 4587 v0.AddArg(x) 4588 v0.AddArg(y) 4589 v.AddArg(v0) 4590 return true 4591 } 4592 } 4593 func rewriteValuePPC64_OpNilCheck_0(v *Value) bool { 4594 // match: (NilCheck ptr mem) 4595 // cond: 4596 // result: (LoweredNilCheck ptr mem) 4597 for { 4598 _ = v.Args[1] 4599 ptr := v.Args[0] 4600 mem := v.Args[1] 4601 v.reset(OpPPC64LoweredNilCheck) 4602 v.AddArg(ptr) 4603 v.AddArg(mem) 4604 return true 4605 } 4606 } 4607 func rewriteValuePPC64_OpNot_0(v *Value) bool { 4608 // match: (Not x) 4609 // cond: 4610 // result: (XORconst [1] x) 4611 for { 4612 x := v.Args[0] 4613 v.reset(OpPPC64XORconst) 4614 v.AuxInt = 1 4615 v.AddArg(x) 4616 return true 4617 } 4618 } 4619 func rewriteValuePPC64_OpOffPtr_0(v *Value) bool { 4620 b := v.Block 4621 _ = b 4622 typ := &b.Func.Config.Types 4623 _ = typ 4624 // match: (OffPtr [off] ptr) 4625 // cond: 4626 // result: (ADD (MOVDconst <typ.Int64> [off]) ptr) 4627 for { 4628 off := v.AuxInt 4629 ptr := v.Args[0] 4630 v.reset(OpPPC64ADD) 4631 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 4632 v0.AuxInt = off 4633 v.AddArg(v0) 4634 v.AddArg(ptr) 4635 return true 4636 } 4637 } 4638 func rewriteValuePPC64_OpOr16_0(v *Value) bool { 4639 // match: (Or16 x y) 4640 // cond: 4641 // result: (OR x y) 4642 for { 4643 _ = v.Args[1] 4644 x := v.Args[0] 4645 y := v.Args[1] 4646 v.reset(OpPPC64OR) 4647 v.AddArg(x) 4648 v.AddArg(y) 4649 return true 4650 } 4651 } 4652 func rewriteValuePPC64_OpOr32_0(v *Value) bool { 4653 // match: (Or32 x y) 4654 // cond: 4655 // result: (OR x y) 4656 for { 4657 _ = v.Args[1] 4658 x := v.Args[0] 4659 y := v.Args[1] 4660 v.reset(OpPPC64OR) 4661 v.AddArg(x) 4662 v.AddArg(y) 4663 return true 4664 } 4665 } 4666 func rewriteValuePPC64_OpOr64_0(v *Value) bool { 4667 // match: (Or64 x y) 4668 // cond: 4669 // result: (OR x y) 4670 for { 4671 _ = v.Args[1] 4672 x := v.Args[0] 4673 y := v.Args[1] 4674 v.reset(OpPPC64OR) 4675 v.AddArg(x) 4676 v.AddArg(y) 4677 return true 4678 } 4679 } 4680 func rewriteValuePPC64_OpOr8_0(v *Value) bool { 4681 // match: (Or8 x y) 4682 // cond: 4683 // result: (OR x y) 4684 for { 4685 _ = v.Args[1] 4686 x := v.Args[0] 4687 y := v.Args[1] 4688 v.reset(OpPPC64OR) 4689 v.AddArg(x) 4690 v.AddArg(y) 4691 return true 4692 } 4693 } 4694 func rewriteValuePPC64_OpOrB_0(v *Value) bool { 4695 // match: (OrB x y) 4696 // cond: 4697 // result: (OR x y) 4698 for { 4699 _ = v.Args[1] 4700 x := v.Args[0] 4701 y := v.Args[1] 4702 v.reset(OpPPC64OR) 4703 v.AddArg(x) 4704 v.AddArg(y) 4705 return true 4706 } 4707 } 4708 func rewriteValuePPC64_OpPPC64ADD_0(v *Value) bool { 4709 // match: (ADD (SLDconst x [c]) (SRDconst x [d])) 4710 // cond: d == 64-c 4711 // result: (ROTLconst [c] x) 4712 for { 4713 _ = v.Args[1] 4714 v_0 := v.Args[0] 4715 if v_0.Op != OpPPC64SLDconst { 4716 break 4717 } 4718 c := v_0.AuxInt 4719 x := v_0.Args[0] 4720 v_1 := v.Args[1] 4721 if v_1.Op != OpPPC64SRDconst { 4722 break 4723 } 4724 d := v_1.AuxInt 4725 if x != v_1.Args[0] { 4726 break 4727 } 4728 if !(d == 64-c) { 4729 break 4730 } 4731 v.reset(OpPPC64ROTLconst) 4732 v.AuxInt = c 4733 v.AddArg(x) 4734 return true 4735 } 4736 // match: (ADD (SRDconst x [d]) (SLDconst x [c])) 4737 // cond: d == 64-c 4738 // result: (ROTLconst [c] x) 4739 for { 4740 _ = v.Args[1] 4741 v_0 := v.Args[0] 4742 if v_0.Op != OpPPC64SRDconst { 4743 break 4744 } 4745 d := v_0.AuxInt 4746 x := v_0.Args[0] 4747 v_1 := v.Args[1] 4748 if v_1.Op != OpPPC64SLDconst { 4749 break 4750 } 4751 c := v_1.AuxInt 4752 if x != v_1.Args[0] { 4753 break 4754 } 4755 if !(d == 64-c) { 4756 break 4757 } 4758 v.reset(OpPPC64ROTLconst) 4759 v.AuxInt = c 4760 v.AddArg(x) 4761 return true 4762 } 4763 // match: (ADD (SLWconst x [c]) (SRWconst x [d])) 4764 // cond: d == 32-c 4765 // result: (ROTLWconst [c] x) 4766 for { 4767 _ = v.Args[1] 4768 v_0 := v.Args[0] 4769 if v_0.Op != OpPPC64SLWconst { 4770 break 4771 } 4772 c := v_0.AuxInt 4773 x := v_0.Args[0] 4774 v_1 := v.Args[1] 4775 if v_1.Op != OpPPC64SRWconst { 4776 break 4777 } 4778 d := v_1.AuxInt 4779 if x != v_1.Args[0] { 4780 break 4781 } 4782 if !(d == 32-c) { 4783 break 4784 } 4785 v.reset(OpPPC64ROTLWconst) 4786 v.AuxInt = c 4787 v.AddArg(x) 4788 return true 4789 } 4790 // match: (ADD (SRWconst x [d]) (SLWconst x [c])) 4791 // cond: d == 32-c 4792 // result: (ROTLWconst [c] x) 4793 for { 4794 _ = v.Args[1] 4795 v_0 := v.Args[0] 4796 if v_0.Op != OpPPC64SRWconst { 4797 break 4798 } 4799 d := v_0.AuxInt 4800 x := v_0.Args[0] 4801 v_1 := v.Args[1] 4802 if v_1.Op != OpPPC64SLWconst { 4803 break 4804 } 4805 c := v_1.AuxInt 4806 if x != v_1.Args[0] { 4807 break 4808 } 4809 if !(d == 32-c) { 4810 break 4811 } 4812 v.reset(OpPPC64ROTLWconst) 4813 v.AuxInt = c 4814 v.AddArg(x) 4815 return true 4816 } 4817 // match: (ADD x (MOVDconst [c])) 4818 // cond: is32Bit(c) 4819 // result: (ADDconst [c] x) 4820 for { 4821 _ = v.Args[1] 4822 x := v.Args[0] 4823 v_1 := v.Args[1] 4824 if v_1.Op != OpPPC64MOVDconst { 4825 break 4826 } 4827 c := v_1.AuxInt 4828 if !(is32Bit(c)) { 4829 break 4830 } 4831 v.reset(OpPPC64ADDconst) 4832 v.AuxInt = c 4833 v.AddArg(x) 4834 return true 4835 } 4836 // match: (ADD (MOVDconst [c]) x) 4837 // cond: is32Bit(c) 4838 // result: (ADDconst [c] x) 4839 for { 4840 _ = v.Args[1] 4841 v_0 := v.Args[0] 4842 if v_0.Op != OpPPC64MOVDconst { 4843 break 4844 } 4845 c := v_0.AuxInt 4846 x := v.Args[1] 4847 if !(is32Bit(c)) { 4848 break 4849 } 4850 v.reset(OpPPC64ADDconst) 4851 v.AuxInt = c 4852 v.AddArg(x) 4853 return true 4854 } 4855 return false 4856 } 4857 func rewriteValuePPC64_OpPPC64ADDconst_0(v *Value) bool { 4858 // match: (ADDconst [c] (ADDconst [d] x)) 4859 // cond: is32Bit(c+d) 4860 // result: (ADDconst [c+d] x) 4861 for { 4862 c := v.AuxInt 4863 v_0 := v.Args[0] 4864 if v_0.Op != OpPPC64ADDconst { 4865 break 4866 } 4867 d := v_0.AuxInt 4868 x := v_0.Args[0] 4869 if !(is32Bit(c + d)) { 4870 break 4871 } 4872 v.reset(OpPPC64ADDconst) 4873 v.AuxInt = c + d 4874 v.AddArg(x) 4875 return true 4876 } 4877 // match: (ADDconst [0] x) 4878 // cond: 4879 // result: x 4880 for { 4881 if v.AuxInt != 0 { 4882 break 4883 } 4884 x := v.Args[0] 4885 v.reset(OpCopy) 4886 v.Type = x.Type 4887 v.AddArg(x) 4888 return true 4889 } 4890 // match: (ADDconst [c] (MOVDaddr [d] {sym} x)) 4891 // cond: 4892 // result: (MOVDaddr [c+d] {sym} x) 4893 for { 4894 c := v.AuxInt 4895 v_0 := v.Args[0] 4896 if v_0.Op != OpPPC64MOVDaddr { 4897 break 4898 } 4899 d := v_0.AuxInt 4900 sym := v_0.Aux 4901 x := v_0.Args[0] 4902 v.reset(OpPPC64MOVDaddr) 4903 v.AuxInt = c + d 4904 v.Aux = sym 4905 v.AddArg(x) 4906 return true 4907 } 4908 return false 4909 } 4910 func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool { 4911 // match: (AND x (NOR y y)) 4912 // cond: 4913 // result: (ANDN x y) 4914 for { 4915 _ = v.Args[1] 4916 x := v.Args[0] 4917 v_1 := v.Args[1] 4918 if v_1.Op != OpPPC64NOR { 4919 break 4920 } 4921 _ = v_1.Args[1] 4922 y := v_1.Args[0] 4923 if y != v_1.Args[1] { 4924 break 4925 } 4926 v.reset(OpPPC64ANDN) 4927 v.AddArg(x) 4928 v.AddArg(y) 4929 return true 4930 } 4931 // match: (AND (NOR y y) x) 4932 // cond: 4933 // result: (ANDN x y) 4934 for { 4935 _ = v.Args[1] 4936 v_0 := v.Args[0] 4937 if v_0.Op != OpPPC64NOR { 4938 break 4939 } 4940 _ = v_0.Args[1] 4941 y := v_0.Args[0] 4942 if y != v_0.Args[1] { 4943 break 4944 } 4945 x := v.Args[1] 4946 v.reset(OpPPC64ANDN) 4947 v.AddArg(x) 4948 v.AddArg(y) 4949 return true 4950 } 4951 // match: (AND (MOVDconst [c]) (MOVDconst [d])) 4952 // cond: 4953 // result: (MOVDconst [c&d]) 4954 for { 4955 _ = v.Args[1] 4956 v_0 := v.Args[0] 4957 if v_0.Op != OpPPC64MOVDconst { 4958 break 4959 } 4960 c := v_0.AuxInt 4961 v_1 := v.Args[1] 4962 if v_1.Op != OpPPC64MOVDconst { 4963 break 4964 } 4965 d := v_1.AuxInt 4966 v.reset(OpPPC64MOVDconst) 4967 v.AuxInt = c & d 4968 return true 4969 } 4970 // match: (AND (MOVDconst [d]) (MOVDconst [c])) 4971 // cond: 4972 // result: (MOVDconst [c&d]) 4973 for { 4974 _ = v.Args[1] 4975 v_0 := v.Args[0] 4976 if v_0.Op != OpPPC64MOVDconst { 4977 break 4978 } 4979 d := v_0.AuxInt 4980 v_1 := v.Args[1] 4981 if v_1.Op != OpPPC64MOVDconst { 4982 break 4983 } 4984 c := v_1.AuxInt 4985 v.reset(OpPPC64MOVDconst) 4986 v.AuxInt = c & d 4987 return true 4988 } 4989 // match: (AND x (MOVDconst [c])) 4990 // cond: isU16Bit(c) 4991 // result: (ANDconst [c] x) 4992 for { 4993 _ = v.Args[1] 4994 x := v.Args[0] 4995 v_1 := v.Args[1] 4996 if v_1.Op != OpPPC64MOVDconst { 4997 break 4998 } 4999 c := v_1.AuxInt 5000 if !(isU16Bit(c)) { 5001 break 5002 } 5003 v.reset(OpPPC64ANDconst) 5004 v.AuxInt = c 5005 v.AddArg(x) 5006 return true 5007 } 5008 // match: (AND (MOVDconst [c]) x) 5009 // cond: isU16Bit(c) 5010 // result: (ANDconst [c] x) 5011 for { 5012 _ = v.Args[1] 5013 v_0 := v.Args[0] 5014 if v_0.Op != OpPPC64MOVDconst { 5015 break 5016 } 5017 c := v_0.AuxInt 5018 x := v.Args[1] 5019 if !(isU16Bit(c)) { 5020 break 5021 } 5022 v.reset(OpPPC64ANDconst) 5023 v.AuxInt = c 5024 v.AddArg(x) 5025 return true 5026 } 5027 // match: (AND (MOVDconst [c]) x:(MOVBZload _ _)) 5028 // cond: 5029 // result: (ANDconst [c&0xFF] x) 5030 for { 5031 _ = v.Args[1] 5032 v_0 := v.Args[0] 5033 if v_0.Op != OpPPC64MOVDconst { 5034 break 5035 } 5036 c := v_0.AuxInt 5037 x := v.Args[1] 5038 if x.Op != OpPPC64MOVBZload { 5039 break 5040 } 5041 _ = x.Args[1] 5042 v.reset(OpPPC64ANDconst) 5043 v.AuxInt = c & 0xFF 5044 v.AddArg(x) 5045 return true 5046 } 5047 // match: (AND x:(MOVBZload _ _) (MOVDconst [c])) 5048 // cond: 5049 // result: (ANDconst [c&0xFF] x) 5050 for { 5051 _ = v.Args[1] 5052 x := v.Args[0] 5053 if x.Op != OpPPC64MOVBZload { 5054 break 5055 } 5056 _ = x.Args[1] 5057 v_1 := v.Args[1] 5058 if v_1.Op != OpPPC64MOVDconst { 5059 break 5060 } 5061 c := v_1.AuxInt 5062 v.reset(OpPPC64ANDconst) 5063 v.AuxInt = c & 0xFF 5064 v.AddArg(x) 5065 return true 5066 } 5067 // match: (AND x:(MOVBZload _ _) (MOVDconst [c])) 5068 // cond: 5069 // result: (ANDconst [c&0xFF] x) 5070 for { 5071 _ = v.Args[1] 5072 x := v.Args[0] 5073 if x.Op != OpPPC64MOVBZload { 5074 break 5075 } 5076 _ = x.Args[1] 5077 v_1 := v.Args[1] 5078 if v_1.Op != OpPPC64MOVDconst { 5079 break 5080 } 5081 c := v_1.AuxInt 5082 v.reset(OpPPC64ANDconst) 5083 v.AuxInt = c & 0xFF 5084 v.AddArg(x) 5085 return true 5086 } 5087 // match: (AND (MOVDconst [c]) x:(MOVBZload _ _)) 5088 // cond: 5089 // result: (ANDconst [c&0xFF] x) 5090 for { 5091 _ = v.Args[1] 5092 v_0 := v.Args[0] 5093 if v_0.Op != OpPPC64MOVDconst { 5094 break 5095 } 5096 c := v_0.AuxInt 5097 x := v.Args[1] 5098 if x.Op != OpPPC64MOVBZload { 5099 break 5100 } 5101 _ = x.Args[1] 5102 v.reset(OpPPC64ANDconst) 5103 v.AuxInt = c & 0xFF 5104 v.AddArg(x) 5105 return true 5106 } 5107 return false 5108 } 5109 func rewriteValuePPC64_OpPPC64ANDconst_0(v *Value) bool { 5110 // match: (ANDconst [c] (ANDconst [d] x)) 5111 // cond: 5112 // result: (ANDconst [c&d] x) 5113 for { 5114 c := v.AuxInt 5115 v_0 := v.Args[0] 5116 if v_0.Op != OpPPC64ANDconst { 5117 break 5118 } 5119 d := v_0.AuxInt 5120 x := v_0.Args[0] 5121 v.reset(OpPPC64ANDconst) 5122 v.AuxInt = c & d 5123 v.AddArg(x) 5124 return true 5125 } 5126 // match: (ANDconst [-1] x) 5127 // cond: 5128 // result: x 5129 for { 5130 if v.AuxInt != -1 { 5131 break 5132 } 5133 x := v.Args[0] 5134 v.reset(OpCopy) 5135 v.Type = x.Type 5136 v.AddArg(x) 5137 return true 5138 } 5139 // match: (ANDconst [0] _) 5140 // cond: 5141 // result: (MOVDconst [0]) 5142 for { 5143 if v.AuxInt != 0 { 5144 break 5145 } 5146 v.reset(OpPPC64MOVDconst) 5147 v.AuxInt = 0 5148 return true 5149 } 5150 // match: (ANDconst [c] y:(MOVBZreg _)) 5151 // cond: c&0xFF == 0xFF 5152 // result: y 5153 for { 5154 c := v.AuxInt 5155 y := v.Args[0] 5156 if y.Op != OpPPC64MOVBZreg { 5157 break 5158 } 5159 if !(c&0xFF == 0xFF) { 5160 break 5161 } 5162 v.reset(OpCopy) 5163 v.Type = y.Type 5164 v.AddArg(y) 5165 return true 5166 } 5167 // match: (ANDconst [c] y:(MOVHZreg _)) 5168 // cond: c&0xFFFF == 0xFFFF 5169 // result: y 5170 for { 5171 c := v.AuxInt 5172 y := v.Args[0] 5173 if y.Op != OpPPC64MOVHZreg { 5174 break 5175 } 5176 if !(c&0xFFFF == 0xFFFF) { 5177 break 5178 } 5179 v.reset(OpCopy) 5180 v.Type = y.Type 5181 v.AddArg(y) 5182 return true 5183 } 5184 // match: (ANDconst [c] y:(MOVWZreg _)) 5185 // cond: c&0xFFFFFFFF == 0xFFFFFFFF 5186 // result: y 5187 for { 5188 c := v.AuxInt 5189 y := v.Args[0] 5190 if y.Op != OpPPC64MOVWZreg { 5191 break 5192 } 5193 if !(c&0xFFFFFFFF == 0xFFFFFFFF) { 5194 break 5195 } 5196 v.reset(OpCopy) 5197 v.Type = y.Type 5198 v.AddArg(y) 5199 return true 5200 } 5201 // match: (ANDconst [c] (MOVBZreg x)) 5202 // cond: 5203 // result: (ANDconst [c&0xFF] x) 5204 for { 5205 c := v.AuxInt 5206 v_0 := v.Args[0] 5207 if v_0.Op != OpPPC64MOVBZreg { 5208 break 5209 } 5210 x := v_0.Args[0] 5211 v.reset(OpPPC64ANDconst) 5212 v.AuxInt = c & 0xFF 5213 v.AddArg(x) 5214 return true 5215 } 5216 // match: (ANDconst [c] (MOVHZreg x)) 5217 // cond: 5218 // result: (ANDconst [c&0xFFFF] x) 5219 for { 5220 c := v.AuxInt 5221 v_0 := v.Args[0] 5222 if v_0.Op != OpPPC64MOVHZreg { 5223 break 5224 } 5225 x := v_0.Args[0] 5226 v.reset(OpPPC64ANDconst) 5227 v.AuxInt = c & 0xFFFF 5228 v.AddArg(x) 5229 return true 5230 } 5231 // match: (ANDconst [c] (MOVWZreg x)) 5232 // cond: 5233 // result: (ANDconst [c&0xFFFFFFFF] x) 5234 for { 5235 c := v.AuxInt 5236 v_0 := v.Args[0] 5237 if v_0.Op != OpPPC64MOVWZreg { 5238 break 5239 } 5240 x := v_0.Args[0] 5241 v.reset(OpPPC64ANDconst) 5242 v.AuxInt = c & 0xFFFFFFFF 5243 v.AddArg(x) 5244 return true 5245 } 5246 return false 5247 } 5248 func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool { 5249 b := v.Block 5250 _ = b 5251 // match: (CMP x (MOVDconst [c])) 5252 // cond: is16Bit(c) 5253 // result: (CMPconst x [c]) 5254 for { 5255 _ = v.Args[1] 5256 x := v.Args[0] 5257 v_1 := v.Args[1] 5258 if v_1.Op != OpPPC64MOVDconst { 5259 break 5260 } 5261 c := v_1.AuxInt 5262 if !(is16Bit(c)) { 5263 break 5264 } 5265 v.reset(OpPPC64CMPconst) 5266 v.AuxInt = c 5267 v.AddArg(x) 5268 return true 5269 } 5270 // match: (CMP (MOVDconst [c]) y) 5271 // cond: is16Bit(c) 5272 // result: (InvertFlags (CMPconst y [c])) 5273 for { 5274 _ = v.Args[1] 5275 v_0 := v.Args[0] 5276 if v_0.Op != OpPPC64MOVDconst { 5277 break 5278 } 5279 c := v_0.AuxInt 5280 y := v.Args[1] 5281 if !(is16Bit(c)) { 5282 break 5283 } 5284 v.reset(OpPPC64InvertFlags) 5285 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags) 5286 v0.AuxInt = c 5287 v0.AddArg(y) 5288 v.AddArg(v0) 5289 return true 5290 } 5291 return false 5292 } 5293 func rewriteValuePPC64_OpPPC64CMPU_0(v *Value) bool { 5294 b := v.Block 5295 _ = b 5296 // match: (CMPU x (MOVDconst [c])) 5297 // cond: isU16Bit(c) 5298 // result: (CMPUconst x [c]) 5299 for { 5300 _ = v.Args[1] 5301 x := v.Args[0] 5302 v_1 := v.Args[1] 5303 if v_1.Op != OpPPC64MOVDconst { 5304 break 5305 } 5306 c := v_1.AuxInt 5307 if !(isU16Bit(c)) { 5308 break 5309 } 5310 v.reset(OpPPC64CMPUconst) 5311 v.AuxInt = c 5312 v.AddArg(x) 5313 return true 5314 } 5315 // match: (CMPU (MOVDconst [c]) y) 5316 // cond: isU16Bit(c) 5317 // result: (InvertFlags (CMPUconst y [c])) 5318 for { 5319 _ = v.Args[1] 5320 v_0 := v.Args[0] 5321 if v_0.Op != OpPPC64MOVDconst { 5322 break 5323 } 5324 c := v_0.AuxInt 5325 y := v.Args[1] 5326 if !(isU16Bit(c)) { 5327 break 5328 } 5329 v.reset(OpPPC64InvertFlags) 5330 v0 := b.NewValue0(v.Pos, OpPPC64CMPUconst, types.TypeFlags) 5331 v0.AuxInt = c 5332 v0.AddArg(y) 5333 v.AddArg(v0) 5334 return true 5335 } 5336 return false 5337 } 5338 func rewriteValuePPC64_OpPPC64CMPUconst_0(v *Value) bool { 5339 // match: (CMPUconst (MOVDconst [x]) [y]) 5340 // cond: int64(x)==int64(y) 5341 // result: (FlagEQ) 5342 for { 5343 y := v.AuxInt 5344 v_0 := v.Args[0] 5345 if v_0.Op != OpPPC64MOVDconst { 5346 break 5347 } 5348 x := v_0.AuxInt 5349 if !(int64(x) == int64(y)) { 5350 break 5351 } 5352 v.reset(OpPPC64FlagEQ) 5353 return true 5354 } 5355 // match: (CMPUconst (MOVDconst [x]) [y]) 5356 // cond: uint64(x)<uint64(y) 5357 // result: (FlagLT) 5358 for { 5359 y := v.AuxInt 5360 v_0 := v.Args[0] 5361 if v_0.Op != OpPPC64MOVDconst { 5362 break 5363 } 5364 x := v_0.AuxInt 5365 if !(uint64(x) < uint64(y)) { 5366 break 5367 } 5368 v.reset(OpPPC64FlagLT) 5369 return true 5370 } 5371 // match: (CMPUconst (MOVDconst [x]) [y]) 5372 // cond: uint64(x)>uint64(y) 5373 // result: (FlagGT) 5374 for { 5375 y := v.AuxInt 5376 v_0 := v.Args[0] 5377 if v_0.Op != OpPPC64MOVDconst { 5378 break 5379 } 5380 x := v_0.AuxInt 5381 if !(uint64(x) > uint64(y)) { 5382 break 5383 } 5384 v.reset(OpPPC64FlagGT) 5385 return true 5386 } 5387 return false 5388 } 5389 func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { 5390 b := v.Block 5391 _ = b 5392 // match: (CMPW x (MOVWreg y)) 5393 // cond: 5394 // result: (CMPW x y) 5395 for { 5396 _ = v.Args[1] 5397 x := v.Args[0] 5398 v_1 := v.Args[1] 5399 if v_1.Op != OpPPC64MOVWreg { 5400 break 5401 } 5402 y := v_1.Args[0] 5403 v.reset(OpPPC64CMPW) 5404 v.AddArg(x) 5405 v.AddArg(y) 5406 return true 5407 } 5408 // match: (CMPW (MOVWreg x) y) 5409 // cond: 5410 // result: (CMPW x y) 5411 for { 5412 _ = v.Args[1] 5413 v_0 := v.Args[0] 5414 if v_0.Op != OpPPC64MOVWreg { 5415 break 5416 } 5417 x := v_0.Args[0] 5418 y := v.Args[1] 5419 v.reset(OpPPC64CMPW) 5420 v.AddArg(x) 5421 v.AddArg(y) 5422 return true 5423 } 5424 // match: (CMPW x (MOVDconst [c])) 5425 // cond: is16Bit(c) 5426 // result: (CMPWconst x [c]) 5427 for { 5428 _ = v.Args[1] 5429 x := v.Args[0] 5430 v_1 := v.Args[1] 5431 if v_1.Op != OpPPC64MOVDconst { 5432 break 5433 } 5434 c := v_1.AuxInt 5435 if !(is16Bit(c)) { 5436 break 5437 } 5438 v.reset(OpPPC64CMPWconst) 5439 v.AuxInt = c 5440 v.AddArg(x) 5441 return true 5442 } 5443 // match: (CMPW (MOVDconst [c]) y) 5444 // cond: is16Bit(c) 5445 // result: (InvertFlags (CMPWconst y [c])) 5446 for { 5447 _ = v.Args[1] 5448 v_0 := v.Args[0] 5449 if v_0.Op != OpPPC64MOVDconst { 5450 break 5451 } 5452 c := v_0.AuxInt 5453 y := v.Args[1] 5454 if !(is16Bit(c)) { 5455 break 5456 } 5457 v.reset(OpPPC64InvertFlags) 5458 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags) 5459 v0.AuxInt = c 5460 v0.AddArg(y) 5461 v.AddArg(v0) 5462 return true 5463 } 5464 return false 5465 } 5466 func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool { 5467 b := v.Block 5468 _ = b 5469 // match: (CMPWU x (MOVWZreg y)) 5470 // cond: 5471 // result: (CMPWU x y) 5472 for { 5473 _ = v.Args[1] 5474 x := v.Args[0] 5475 v_1 := v.Args[1] 5476 if v_1.Op != OpPPC64MOVWZreg { 5477 break 5478 } 5479 y := v_1.Args[0] 5480 v.reset(OpPPC64CMPWU) 5481 v.AddArg(x) 5482 v.AddArg(y) 5483 return true 5484 } 5485 // match: (CMPWU (MOVWZreg x) y) 5486 // cond: 5487 // result: (CMPWU x y) 5488 for { 5489 _ = v.Args[1] 5490 v_0 := v.Args[0] 5491 if v_0.Op != OpPPC64MOVWZreg { 5492 break 5493 } 5494 x := v_0.Args[0] 5495 y := v.Args[1] 5496 v.reset(OpPPC64CMPWU) 5497 v.AddArg(x) 5498 v.AddArg(y) 5499 return true 5500 } 5501 // match: (CMPWU x (MOVDconst [c])) 5502 // cond: isU16Bit(c) 5503 // result: (CMPWUconst x [c]) 5504 for { 5505 _ = v.Args[1] 5506 x := v.Args[0] 5507 v_1 := v.Args[1] 5508 if v_1.Op != OpPPC64MOVDconst { 5509 break 5510 } 5511 c := v_1.AuxInt 5512 if !(isU16Bit(c)) { 5513 break 5514 } 5515 v.reset(OpPPC64CMPWUconst) 5516 v.AuxInt = c 5517 v.AddArg(x) 5518 return true 5519 } 5520 // match: (CMPWU (MOVDconst [c]) y) 5521 // cond: isU16Bit(c) 5522 // result: (InvertFlags (CMPWUconst y [c])) 5523 for { 5524 _ = v.Args[1] 5525 v_0 := v.Args[0] 5526 if v_0.Op != OpPPC64MOVDconst { 5527 break 5528 } 5529 c := v_0.AuxInt 5530 y := v.Args[1] 5531 if !(isU16Bit(c)) { 5532 break 5533 } 5534 v.reset(OpPPC64InvertFlags) 5535 v0 := b.NewValue0(v.Pos, OpPPC64CMPWUconst, types.TypeFlags) 5536 v0.AuxInt = c 5537 v0.AddArg(y) 5538 v.AddArg(v0) 5539 return true 5540 } 5541 return false 5542 } 5543 func rewriteValuePPC64_OpPPC64CMPWUconst_0(v *Value) bool { 5544 // match: (CMPWUconst (MOVDconst [x]) [y]) 5545 // cond: int32(x)==int32(y) 5546 // result: (FlagEQ) 5547 for { 5548 y := v.AuxInt 5549 v_0 := v.Args[0] 5550 if v_0.Op != OpPPC64MOVDconst { 5551 break 5552 } 5553 x := v_0.AuxInt 5554 if !(int32(x) == int32(y)) { 5555 break 5556 } 5557 v.reset(OpPPC64FlagEQ) 5558 return true 5559 } 5560 // match: (CMPWUconst (MOVDconst [x]) [y]) 5561 // cond: uint32(x)<uint32(y) 5562 // result: (FlagLT) 5563 for { 5564 y := v.AuxInt 5565 v_0 := v.Args[0] 5566 if v_0.Op != OpPPC64MOVDconst { 5567 break 5568 } 5569 x := v_0.AuxInt 5570 if !(uint32(x) < uint32(y)) { 5571 break 5572 } 5573 v.reset(OpPPC64FlagLT) 5574 return true 5575 } 5576 // match: (CMPWUconst (MOVDconst [x]) [y]) 5577 // cond: uint32(x)>uint32(y) 5578 // result: (FlagGT) 5579 for { 5580 y := v.AuxInt 5581 v_0 := v.Args[0] 5582 if v_0.Op != OpPPC64MOVDconst { 5583 break 5584 } 5585 x := v_0.AuxInt 5586 if !(uint32(x) > uint32(y)) { 5587 break 5588 } 5589 v.reset(OpPPC64FlagGT) 5590 return true 5591 } 5592 return false 5593 } 5594 func rewriteValuePPC64_OpPPC64CMPWconst_0(v *Value) bool { 5595 // match: (CMPWconst (MOVDconst [x]) [y]) 5596 // cond: int32(x)==int32(y) 5597 // result: (FlagEQ) 5598 for { 5599 y := v.AuxInt 5600 v_0 := v.Args[0] 5601 if v_0.Op != OpPPC64MOVDconst { 5602 break 5603 } 5604 x := v_0.AuxInt 5605 if !(int32(x) == int32(y)) { 5606 break 5607 } 5608 v.reset(OpPPC64FlagEQ) 5609 return true 5610 } 5611 // match: (CMPWconst (MOVDconst [x]) [y]) 5612 // cond: int32(x)<int32(y) 5613 // result: (FlagLT) 5614 for { 5615 y := v.AuxInt 5616 v_0 := v.Args[0] 5617 if v_0.Op != OpPPC64MOVDconst { 5618 break 5619 } 5620 x := v_0.AuxInt 5621 if !(int32(x) < int32(y)) { 5622 break 5623 } 5624 v.reset(OpPPC64FlagLT) 5625 return true 5626 } 5627 // match: (CMPWconst (MOVDconst [x]) [y]) 5628 // cond: int32(x)>int32(y) 5629 // result: (FlagGT) 5630 for { 5631 y := v.AuxInt 5632 v_0 := v.Args[0] 5633 if v_0.Op != OpPPC64MOVDconst { 5634 break 5635 } 5636 x := v_0.AuxInt 5637 if !(int32(x) > int32(y)) { 5638 break 5639 } 5640 v.reset(OpPPC64FlagGT) 5641 return true 5642 } 5643 return false 5644 } 5645 func rewriteValuePPC64_OpPPC64CMPconst_0(v *Value) bool { 5646 // match: (CMPconst (MOVDconst [x]) [y]) 5647 // cond: int64(x)==int64(y) 5648 // result: (FlagEQ) 5649 for { 5650 y := v.AuxInt 5651 v_0 := v.Args[0] 5652 if v_0.Op != OpPPC64MOVDconst { 5653 break 5654 } 5655 x := v_0.AuxInt 5656 if !(int64(x) == int64(y)) { 5657 break 5658 } 5659 v.reset(OpPPC64FlagEQ) 5660 return true 5661 } 5662 // match: (CMPconst (MOVDconst [x]) [y]) 5663 // cond: int64(x)<int64(y) 5664 // result: (FlagLT) 5665 for { 5666 y := v.AuxInt 5667 v_0 := v.Args[0] 5668 if v_0.Op != OpPPC64MOVDconst { 5669 break 5670 } 5671 x := v_0.AuxInt 5672 if !(int64(x) < int64(y)) { 5673 break 5674 } 5675 v.reset(OpPPC64FlagLT) 5676 return true 5677 } 5678 // match: (CMPconst (MOVDconst [x]) [y]) 5679 // cond: int64(x)>int64(y) 5680 // result: (FlagGT) 5681 for { 5682 y := v.AuxInt 5683 v_0 := v.Args[0] 5684 if v_0.Op != OpPPC64MOVDconst { 5685 break 5686 } 5687 x := v_0.AuxInt 5688 if !(int64(x) > int64(y)) { 5689 break 5690 } 5691 v.reset(OpPPC64FlagGT) 5692 return true 5693 } 5694 return false 5695 } 5696 func rewriteValuePPC64_OpPPC64Equal_0(v *Value) bool { 5697 // match: (Equal (FlagEQ)) 5698 // cond: 5699 // result: (MOVDconst [1]) 5700 for { 5701 v_0 := v.Args[0] 5702 if v_0.Op != OpPPC64FlagEQ { 5703 break 5704 } 5705 v.reset(OpPPC64MOVDconst) 5706 v.AuxInt = 1 5707 return true 5708 } 5709 // match: (Equal (FlagLT)) 5710 // cond: 5711 // result: (MOVDconst [0]) 5712 for { 5713 v_0 := v.Args[0] 5714 if v_0.Op != OpPPC64FlagLT { 5715 break 5716 } 5717 v.reset(OpPPC64MOVDconst) 5718 v.AuxInt = 0 5719 return true 5720 } 5721 // match: (Equal (FlagGT)) 5722 // cond: 5723 // result: (MOVDconst [0]) 5724 for { 5725 v_0 := v.Args[0] 5726 if v_0.Op != OpPPC64FlagGT { 5727 break 5728 } 5729 v.reset(OpPPC64MOVDconst) 5730 v.AuxInt = 0 5731 return true 5732 } 5733 // match: (Equal (InvertFlags x)) 5734 // cond: 5735 // result: (Equal x) 5736 for { 5737 v_0 := v.Args[0] 5738 if v_0.Op != OpPPC64InvertFlags { 5739 break 5740 } 5741 x := v_0.Args[0] 5742 v.reset(OpPPC64Equal) 5743 v.AddArg(x) 5744 return true 5745 } 5746 return false 5747 } 5748 func rewriteValuePPC64_OpPPC64FADD_0(v *Value) bool { 5749 // match: (FADD (FMUL x y) z) 5750 // cond: 5751 // result: (FMADD x y z) 5752 for { 5753 _ = v.Args[1] 5754 v_0 := v.Args[0] 5755 if v_0.Op != OpPPC64FMUL { 5756 break 5757 } 5758 _ = v_0.Args[1] 5759 x := v_0.Args[0] 5760 y := v_0.Args[1] 5761 z := v.Args[1] 5762 v.reset(OpPPC64FMADD) 5763 v.AddArg(x) 5764 v.AddArg(y) 5765 v.AddArg(z) 5766 return true 5767 } 5768 // match: (FADD z (FMUL x y)) 5769 // cond: 5770 // result: (FMADD x y z) 5771 for { 5772 _ = v.Args[1] 5773 z := v.Args[0] 5774 v_1 := v.Args[1] 5775 if v_1.Op != OpPPC64FMUL { 5776 break 5777 } 5778 _ = v_1.Args[1] 5779 x := v_1.Args[0] 5780 y := v_1.Args[1] 5781 v.reset(OpPPC64FMADD) 5782 v.AddArg(x) 5783 v.AddArg(y) 5784 v.AddArg(z) 5785 return true 5786 } 5787 return false 5788 } 5789 func rewriteValuePPC64_OpPPC64FADDS_0(v *Value) bool { 5790 // match: (FADDS (FMULS x y) z) 5791 // cond: 5792 // result: (FMADDS x y z) 5793 for { 5794 _ = v.Args[1] 5795 v_0 := v.Args[0] 5796 if v_0.Op != OpPPC64FMULS { 5797 break 5798 } 5799 _ = v_0.Args[1] 5800 x := v_0.Args[0] 5801 y := v_0.Args[1] 5802 z := v.Args[1] 5803 v.reset(OpPPC64FMADDS) 5804 v.AddArg(x) 5805 v.AddArg(y) 5806 v.AddArg(z) 5807 return true 5808 } 5809 // match: (FADDS z (FMULS x y)) 5810 // cond: 5811 // result: (FMADDS x y z) 5812 for { 5813 _ = v.Args[1] 5814 z := v.Args[0] 5815 v_1 := v.Args[1] 5816 if v_1.Op != OpPPC64FMULS { 5817 break 5818 } 5819 _ = v_1.Args[1] 5820 x := v_1.Args[0] 5821 y := v_1.Args[1] 5822 v.reset(OpPPC64FMADDS) 5823 v.AddArg(x) 5824 v.AddArg(y) 5825 v.AddArg(z) 5826 return true 5827 } 5828 return false 5829 } 5830 func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool { 5831 // match: (FMOVDload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 5832 // cond: canMergeSym(sym1,sym2) 5833 // result: (FMOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 5834 for { 5835 off1 := v.AuxInt 5836 sym1 := v.Aux 5837 _ = v.Args[1] 5838 v_0 := v.Args[0] 5839 if v_0.Op != OpPPC64MOVDaddr { 5840 break 5841 } 5842 off2 := v_0.AuxInt 5843 sym2 := v_0.Aux 5844 ptr := v_0.Args[0] 5845 mem := v.Args[1] 5846 if !(canMergeSym(sym1, sym2)) { 5847 break 5848 } 5849 v.reset(OpPPC64FMOVDload) 5850 v.AuxInt = off1 + off2 5851 v.Aux = mergeSym(sym1, sym2) 5852 v.AddArg(ptr) 5853 v.AddArg(mem) 5854 return true 5855 } 5856 // match: (FMOVDload [off1] {sym} (ADDconst [off2] ptr) mem) 5857 // cond: is16Bit(off1+off2) 5858 // result: (FMOVDload [off1+off2] {sym} ptr mem) 5859 for { 5860 off1 := v.AuxInt 5861 sym := v.Aux 5862 _ = v.Args[1] 5863 v_0 := v.Args[0] 5864 if v_0.Op != OpPPC64ADDconst { 5865 break 5866 } 5867 off2 := v_0.AuxInt 5868 ptr := v_0.Args[0] 5869 mem := v.Args[1] 5870 if !(is16Bit(off1 + off2)) { 5871 break 5872 } 5873 v.reset(OpPPC64FMOVDload) 5874 v.AuxInt = off1 + off2 5875 v.Aux = sym 5876 v.AddArg(ptr) 5877 v.AddArg(mem) 5878 return true 5879 } 5880 return false 5881 } 5882 func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { 5883 // match: (FMOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) 5884 // cond: is16Bit(off1+off2) 5885 // result: (FMOVDstore [off1+off2] {sym} ptr val mem) 5886 for { 5887 off1 := v.AuxInt 5888 sym := v.Aux 5889 _ = v.Args[2] 5890 v_0 := v.Args[0] 5891 if v_0.Op != OpPPC64ADDconst { 5892 break 5893 } 5894 off2 := v_0.AuxInt 5895 ptr := v_0.Args[0] 5896 val := v.Args[1] 5897 mem := v.Args[2] 5898 if !(is16Bit(off1 + off2)) { 5899 break 5900 } 5901 v.reset(OpPPC64FMOVDstore) 5902 v.AuxInt = off1 + off2 5903 v.Aux = sym 5904 v.AddArg(ptr) 5905 v.AddArg(val) 5906 v.AddArg(mem) 5907 return true 5908 } 5909 // match: (FMOVDstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 5910 // cond: canMergeSym(sym1,sym2) 5911 // result: (FMOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 5912 for { 5913 off1 := v.AuxInt 5914 sym1 := v.Aux 5915 _ = v.Args[2] 5916 v_0 := v.Args[0] 5917 if v_0.Op != OpPPC64MOVDaddr { 5918 break 5919 } 5920 off2 := v_0.AuxInt 5921 sym2 := v_0.Aux 5922 ptr := v_0.Args[0] 5923 val := v.Args[1] 5924 mem := v.Args[2] 5925 if !(canMergeSym(sym1, sym2)) { 5926 break 5927 } 5928 v.reset(OpPPC64FMOVDstore) 5929 v.AuxInt = off1 + off2 5930 v.Aux = mergeSym(sym1, sym2) 5931 v.AddArg(ptr) 5932 v.AddArg(val) 5933 v.AddArg(mem) 5934 return true 5935 } 5936 return false 5937 } 5938 func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool { 5939 // match: (FMOVSload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 5940 // cond: canMergeSym(sym1,sym2) 5941 // result: (FMOVSload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 5942 for { 5943 off1 := v.AuxInt 5944 sym1 := v.Aux 5945 _ = v.Args[1] 5946 v_0 := v.Args[0] 5947 if v_0.Op != OpPPC64MOVDaddr { 5948 break 5949 } 5950 off2 := v_0.AuxInt 5951 sym2 := v_0.Aux 5952 ptr := v_0.Args[0] 5953 mem := v.Args[1] 5954 if !(canMergeSym(sym1, sym2)) { 5955 break 5956 } 5957 v.reset(OpPPC64FMOVSload) 5958 v.AuxInt = off1 + off2 5959 v.Aux = mergeSym(sym1, sym2) 5960 v.AddArg(ptr) 5961 v.AddArg(mem) 5962 return true 5963 } 5964 // match: (FMOVSload [off1] {sym} (ADDconst [off2] ptr) mem) 5965 // cond: is16Bit(off1+off2) 5966 // result: (FMOVSload [off1+off2] {sym} ptr mem) 5967 for { 5968 off1 := v.AuxInt 5969 sym := v.Aux 5970 _ = v.Args[1] 5971 v_0 := v.Args[0] 5972 if v_0.Op != OpPPC64ADDconst { 5973 break 5974 } 5975 off2 := v_0.AuxInt 5976 ptr := v_0.Args[0] 5977 mem := v.Args[1] 5978 if !(is16Bit(off1 + off2)) { 5979 break 5980 } 5981 v.reset(OpPPC64FMOVSload) 5982 v.AuxInt = off1 + off2 5983 v.Aux = sym 5984 v.AddArg(ptr) 5985 v.AddArg(mem) 5986 return true 5987 } 5988 return false 5989 } 5990 func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { 5991 // match: (FMOVSstore [off1] {sym} (ADDconst [off2] ptr) val mem) 5992 // cond: is16Bit(off1+off2) 5993 // result: (FMOVSstore [off1+off2] {sym} ptr val mem) 5994 for { 5995 off1 := v.AuxInt 5996 sym := v.Aux 5997 _ = v.Args[2] 5998 v_0 := v.Args[0] 5999 if v_0.Op != OpPPC64ADDconst { 6000 break 6001 } 6002 off2 := v_0.AuxInt 6003 ptr := v_0.Args[0] 6004 val := v.Args[1] 6005 mem := v.Args[2] 6006 if !(is16Bit(off1 + off2)) { 6007 break 6008 } 6009 v.reset(OpPPC64FMOVSstore) 6010 v.AuxInt = off1 + off2 6011 v.Aux = sym 6012 v.AddArg(ptr) 6013 v.AddArg(val) 6014 v.AddArg(mem) 6015 return true 6016 } 6017 // match: (FMOVSstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 6018 // cond: canMergeSym(sym1,sym2) 6019 // result: (FMOVSstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 6020 for { 6021 off1 := v.AuxInt 6022 sym1 := v.Aux 6023 _ = v.Args[2] 6024 v_0 := v.Args[0] 6025 if v_0.Op != OpPPC64MOVDaddr { 6026 break 6027 } 6028 off2 := v_0.AuxInt 6029 sym2 := v_0.Aux 6030 ptr := v_0.Args[0] 6031 val := v.Args[1] 6032 mem := v.Args[2] 6033 if !(canMergeSym(sym1, sym2)) { 6034 break 6035 } 6036 v.reset(OpPPC64FMOVSstore) 6037 v.AuxInt = off1 + off2 6038 v.Aux = mergeSym(sym1, sym2) 6039 v.AddArg(ptr) 6040 v.AddArg(val) 6041 v.AddArg(mem) 6042 return true 6043 } 6044 return false 6045 } 6046 func rewriteValuePPC64_OpPPC64FSUB_0(v *Value) bool { 6047 // match: (FSUB (FMUL x y) z) 6048 // cond: 6049 // result: (FMSUB x y z) 6050 for { 6051 _ = v.Args[1] 6052 v_0 := v.Args[0] 6053 if v_0.Op != OpPPC64FMUL { 6054 break 6055 } 6056 _ = v_0.Args[1] 6057 x := v_0.Args[0] 6058 y := v_0.Args[1] 6059 z := v.Args[1] 6060 v.reset(OpPPC64FMSUB) 6061 v.AddArg(x) 6062 v.AddArg(y) 6063 v.AddArg(z) 6064 return true 6065 } 6066 return false 6067 } 6068 func rewriteValuePPC64_OpPPC64FSUBS_0(v *Value) bool { 6069 // match: (FSUBS (FMULS x y) z) 6070 // cond: 6071 // result: (FMSUBS x y z) 6072 for { 6073 _ = v.Args[1] 6074 v_0 := v.Args[0] 6075 if v_0.Op != OpPPC64FMULS { 6076 break 6077 } 6078 _ = v_0.Args[1] 6079 x := v_0.Args[0] 6080 y := v_0.Args[1] 6081 z := v.Args[1] 6082 v.reset(OpPPC64FMSUBS) 6083 v.AddArg(x) 6084 v.AddArg(y) 6085 v.AddArg(z) 6086 return true 6087 } 6088 return false 6089 } 6090 func rewriteValuePPC64_OpPPC64GreaterEqual_0(v *Value) bool { 6091 // match: (GreaterEqual (FlagEQ)) 6092 // cond: 6093 // result: (MOVDconst [1]) 6094 for { 6095 v_0 := v.Args[0] 6096 if v_0.Op != OpPPC64FlagEQ { 6097 break 6098 } 6099 v.reset(OpPPC64MOVDconst) 6100 v.AuxInt = 1 6101 return true 6102 } 6103 // match: (GreaterEqual (FlagLT)) 6104 // cond: 6105 // result: (MOVDconst [0]) 6106 for { 6107 v_0 := v.Args[0] 6108 if v_0.Op != OpPPC64FlagLT { 6109 break 6110 } 6111 v.reset(OpPPC64MOVDconst) 6112 v.AuxInt = 0 6113 return true 6114 } 6115 // match: (GreaterEqual (FlagGT)) 6116 // cond: 6117 // result: (MOVDconst [1]) 6118 for { 6119 v_0 := v.Args[0] 6120 if v_0.Op != OpPPC64FlagGT { 6121 break 6122 } 6123 v.reset(OpPPC64MOVDconst) 6124 v.AuxInt = 1 6125 return true 6126 } 6127 // match: (GreaterEqual (InvertFlags x)) 6128 // cond: 6129 // result: (LessEqual x) 6130 for { 6131 v_0 := v.Args[0] 6132 if v_0.Op != OpPPC64InvertFlags { 6133 break 6134 } 6135 x := v_0.Args[0] 6136 v.reset(OpPPC64LessEqual) 6137 v.AddArg(x) 6138 return true 6139 } 6140 return false 6141 } 6142 func rewriteValuePPC64_OpPPC64GreaterThan_0(v *Value) bool { 6143 // match: (GreaterThan (FlagEQ)) 6144 // cond: 6145 // result: (MOVDconst [0]) 6146 for { 6147 v_0 := v.Args[0] 6148 if v_0.Op != OpPPC64FlagEQ { 6149 break 6150 } 6151 v.reset(OpPPC64MOVDconst) 6152 v.AuxInt = 0 6153 return true 6154 } 6155 // match: (GreaterThan (FlagLT)) 6156 // cond: 6157 // result: (MOVDconst [0]) 6158 for { 6159 v_0 := v.Args[0] 6160 if v_0.Op != OpPPC64FlagLT { 6161 break 6162 } 6163 v.reset(OpPPC64MOVDconst) 6164 v.AuxInt = 0 6165 return true 6166 } 6167 // match: (GreaterThan (FlagGT)) 6168 // cond: 6169 // result: (MOVDconst [1]) 6170 for { 6171 v_0 := v.Args[0] 6172 if v_0.Op != OpPPC64FlagGT { 6173 break 6174 } 6175 v.reset(OpPPC64MOVDconst) 6176 v.AuxInt = 1 6177 return true 6178 } 6179 // match: (GreaterThan (InvertFlags x)) 6180 // cond: 6181 // result: (LessThan x) 6182 for { 6183 v_0 := v.Args[0] 6184 if v_0.Op != OpPPC64InvertFlags { 6185 break 6186 } 6187 x := v_0.Args[0] 6188 v.reset(OpPPC64LessThan) 6189 v.AddArg(x) 6190 return true 6191 } 6192 return false 6193 } 6194 func rewriteValuePPC64_OpPPC64LessEqual_0(v *Value) bool { 6195 // match: (LessEqual (FlagEQ)) 6196 // cond: 6197 // result: (MOVDconst [1]) 6198 for { 6199 v_0 := v.Args[0] 6200 if v_0.Op != OpPPC64FlagEQ { 6201 break 6202 } 6203 v.reset(OpPPC64MOVDconst) 6204 v.AuxInt = 1 6205 return true 6206 } 6207 // match: (LessEqual (FlagLT)) 6208 // cond: 6209 // result: (MOVDconst [1]) 6210 for { 6211 v_0 := v.Args[0] 6212 if v_0.Op != OpPPC64FlagLT { 6213 break 6214 } 6215 v.reset(OpPPC64MOVDconst) 6216 v.AuxInt = 1 6217 return true 6218 } 6219 // match: (LessEqual (FlagGT)) 6220 // cond: 6221 // result: (MOVDconst [0]) 6222 for { 6223 v_0 := v.Args[0] 6224 if v_0.Op != OpPPC64FlagGT { 6225 break 6226 } 6227 v.reset(OpPPC64MOVDconst) 6228 v.AuxInt = 0 6229 return true 6230 } 6231 // match: (LessEqual (InvertFlags x)) 6232 // cond: 6233 // result: (GreaterEqual x) 6234 for { 6235 v_0 := v.Args[0] 6236 if v_0.Op != OpPPC64InvertFlags { 6237 break 6238 } 6239 x := v_0.Args[0] 6240 v.reset(OpPPC64GreaterEqual) 6241 v.AddArg(x) 6242 return true 6243 } 6244 return false 6245 } 6246 func rewriteValuePPC64_OpPPC64LessThan_0(v *Value) bool { 6247 // match: (LessThan (FlagEQ)) 6248 // cond: 6249 // result: (MOVDconst [0]) 6250 for { 6251 v_0 := v.Args[0] 6252 if v_0.Op != OpPPC64FlagEQ { 6253 break 6254 } 6255 v.reset(OpPPC64MOVDconst) 6256 v.AuxInt = 0 6257 return true 6258 } 6259 // match: (LessThan (FlagLT)) 6260 // cond: 6261 // result: (MOVDconst [1]) 6262 for { 6263 v_0 := v.Args[0] 6264 if v_0.Op != OpPPC64FlagLT { 6265 break 6266 } 6267 v.reset(OpPPC64MOVDconst) 6268 v.AuxInt = 1 6269 return true 6270 } 6271 // match: (LessThan (FlagGT)) 6272 // cond: 6273 // result: (MOVDconst [0]) 6274 for { 6275 v_0 := v.Args[0] 6276 if v_0.Op != OpPPC64FlagGT { 6277 break 6278 } 6279 v.reset(OpPPC64MOVDconst) 6280 v.AuxInt = 0 6281 return true 6282 } 6283 // match: (LessThan (InvertFlags x)) 6284 // cond: 6285 // result: (GreaterThan x) 6286 for { 6287 v_0 := v.Args[0] 6288 if v_0.Op != OpPPC64InvertFlags { 6289 break 6290 } 6291 x := v_0.Args[0] 6292 v.reset(OpPPC64GreaterThan) 6293 v.AddArg(x) 6294 return true 6295 } 6296 return false 6297 } 6298 func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { 6299 // match: (MOVBZload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 6300 // cond: canMergeSym(sym1,sym2) 6301 // result: (MOVBZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6302 for { 6303 off1 := v.AuxInt 6304 sym1 := v.Aux 6305 _ = v.Args[1] 6306 v_0 := v.Args[0] 6307 if v_0.Op != OpPPC64MOVDaddr { 6308 break 6309 } 6310 off2 := v_0.AuxInt 6311 sym2 := v_0.Aux 6312 ptr := v_0.Args[0] 6313 mem := v.Args[1] 6314 if !(canMergeSym(sym1, sym2)) { 6315 break 6316 } 6317 v.reset(OpPPC64MOVBZload) 6318 v.AuxInt = off1 + off2 6319 v.Aux = mergeSym(sym1, sym2) 6320 v.AddArg(ptr) 6321 v.AddArg(mem) 6322 return true 6323 } 6324 // match: (MOVBZload [off1] {sym} (ADDconst [off2] x) mem) 6325 // cond: is16Bit(off1+off2) 6326 // result: (MOVBZload [off1+off2] {sym} x mem) 6327 for { 6328 off1 := v.AuxInt 6329 sym := v.Aux 6330 _ = v.Args[1] 6331 v_0 := v.Args[0] 6332 if v_0.Op != OpPPC64ADDconst { 6333 break 6334 } 6335 off2 := v_0.AuxInt 6336 x := v_0.Args[0] 6337 mem := v.Args[1] 6338 if !(is16Bit(off1 + off2)) { 6339 break 6340 } 6341 v.reset(OpPPC64MOVBZload) 6342 v.AuxInt = off1 + off2 6343 v.Aux = sym 6344 v.AddArg(x) 6345 v.AddArg(mem) 6346 return true 6347 } 6348 return false 6349 } 6350 func rewriteValuePPC64_OpPPC64MOVBZreg_0(v *Value) bool { 6351 // match: (MOVBZreg y:(ANDconst [c] _)) 6352 // cond: uint64(c) <= 0xFF 6353 // result: y 6354 for { 6355 y := v.Args[0] 6356 if y.Op != OpPPC64ANDconst { 6357 break 6358 } 6359 c := y.AuxInt 6360 if !(uint64(c) <= 0xFF) { 6361 break 6362 } 6363 v.reset(OpCopy) 6364 v.Type = y.Type 6365 v.AddArg(y) 6366 return true 6367 } 6368 // match: (MOVBZreg y:(MOVBZreg _)) 6369 // cond: 6370 // result: y 6371 for { 6372 y := v.Args[0] 6373 if y.Op != OpPPC64MOVBZreg { 6374 break 6375 } 6376 v.reset(OpCopy) 6377 v.Type = y.Type 6378 v.AddArg(y) 6379 return true 6380 } 6381 // match: (MOVBZreg (MOVBreg x)) 6382 // cond: 6383 // result: (MOVBZreg x) 6384 for { 6385 v_0 := v.Args[0] 6386 if v_0.Op != OpPPC64MOVBreg { 6387 break 6388 } 6389 x := v_0.Args[0] 6390 v.reset(OpPPC64MOVBZreg) 6391 v.AddArg(x) 6392 return true 6393 } 6394 // match: (MOVBZreg x:(MOVBZload _ _)) 6395 // cond: 6396 // result: x 6397 for { 6398 x := v.Args[0] 6399 if x.Op != OpPPC64MOVBZload { 6400 break 6401 } 6402 _ = x.Args[1] 6403 v.reset(OpCopy) 6404 v.Type = x.Type 6405 v.AddArg(x) 6406 return true 6407 } 6408 // match: (MOVBZreg (MOVDconst [c])) 6409 // cond: 6410 // result: (MOVDconst [int64(uint8(c))]) 6411 for { 6412 v_0 := v.Args[0] 6413 if v_0.Op != OpPPC64MOVDconst { 6414 break 6415 } 6416 c := v_0.AuxInt 6417 v.reset(OpPPC64MOVDconst) 6418 v.AuxInt = int64(uint8(c)) 6419 return true 6420 } 6421 return false 6422 } 6423 func rewriteValuePPC64_OpPPC64MOVBreg_0(v *Value) bool { 6424 // match: (MOVBreg y:(ANDconst [c] _)) 6425 // cond: uint64(c) <= 0x7F 6426 // result: y 6427 for { 6428 y := v.Args[0] 6429 if y.Op != OpPPC64ANDconst { 6430 break 6431 } 6432 c := y.AuxInt 6433 if !(uint64(c) <= 0x7F) { 6434 break 6435 } 6436 v.reset(OpCopy) 6437 v.Type = y.Type 6438 v.AddArg(y) 6439 return true 6440 } 6441 // match: (MOVBreg y:(MOVBreg _)) 6442 // cond: 6443 // result: y 6444 for { 6445 y := v.Args[0] 6446 if y.Op != OpPPC64MOVBreg { 6447 break 6448 } 6449 v.reset(OpCopy) 6450 v.Type = y.Type 6451 v.AddArg(y) 6452 return true 6453 } 6454 // match: (MOVBreg (MOVBZreg x)) 6455 // cond: 6456 // result: (MOVBreg x) 6457 for { 6458 v_0 := v.Args[0] 6459 if v_0.Op != OpPPC64MOVBZreg { 6460 break 6461 } 6462 x := v_0.Args[0] 6463 v.reset(OpPPC64MOVBreg) 6464 v.AddArg(x) 6465 return true 6466 } 6467 // match: (MOVBreg (MOVDconst [c])) 6468 // cond: 6469 // result: (MOVDconst [int64(int8(c))]) 6470 for { 6471 v_0 := v.Args[0] 6472 if v_0.Op != OpPPC64MOVDconst { 6473 break 6474 } 6475 c := v_0.AuxInt 6476 v.reset(OpPPC64MOVDconst) 6477 v.AuxInt = int64(int8(c)) 6478 return true 6479 } 6480 return false 6481 } 6482 func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { 6483 // match: (MOVBstore [off1] {sym} (ADDconst [off2] x) val mem) 6484 // cond: is16Bit(off1+off2) 6485 // result: (MOVBstore [off1+off2] {sym} x val mem) 6486 for { 6487 off1 := v.AuxInt 6488 sym := v.Aux 6489 _ = v.Args[2] 6490 v_0 := v.Args[0] 6491 if v_0.Op != OpPPC64ADDconst { 6492 break 6493 } 6494 off2 := v_0.AuxInt 6495 x := v_0.Args[0] 6496 val := v.Args[1] 6497 mem := v.Args[2] 6498 if !(is16Bit(off1 + off2)) { 6499 break 6500 } 6501 v.reset(OpPPC64MOVBstore) 6502 v.AuxInt = off1 + off2 6503 v.Aux = sym 6504 v.AddArg(x) 6505 v.AddArg(val) 6506 v.AddArg(mem) 6507 return true 6508 } 6509 // match: (MOVBstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 6510 // cond: canMergeSym(sym1,sym2) 6511 // result: (MOVBstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 6512 for { 6513 off1 := v.AuxInt 6514 sym1 := v.Aux 6515 _ = v.Args[2] 6516 v_0 := v.Args[0] 6517 if v_0.Op != OpPPC64MOVDaddr { 6518 break 6519 } 6520 off2 := v_0.AuxInt 6521 sym2 := v_0.Aux 6522 ptr := v_0.Args[0] 6523 val := v.Args[1] 6524 mem := v.Args[2] 6525 if !(canMergeSym(sym1, sym2)) { 6526 break 6527 } 6528 v.reset(OpPPC64MOVBstore) 6529 v.AuxInt = off1 + off2 6530 v.Aux = mergeSym(sym1, sym2) 6531 v.AddArg(ptr) 6532 v.AddArg(val) 6533 v.AddArg(mem) 6534 return true 6535 } 6536 // match: (MOVBstore [off] {sym} ptr (MOVDconst [c]) mem) 6537 // cond: c == 0 6538 // result: (MOVBstorezero [off] {sym} ptr mem) 6539 for { 6540 off := v.AuxInt 6541 sym := v.Aux 6542 _ = v.Args[2] 6543 ptr := v.Args[0] 6544 v_1 := v.Args[1] 6545 if v_1.Op != OpPPC64MOVDconst { 6546 break 6547 } 6548 c := v_1.AuxInt 6549 mem := v.Args[2] 6550 if !(c == 0) { 6551 break 6552 } 6553 v.reset(OpPPC64MOVBstorezero) 6554 v.AuxInt = off 6555 v.Aux = sym 6556 v.AddArg(ptr) 6557 v.AddArg(mem) 6558 return true 6559 } 6560 // match: (MOVBstore [off] {sym} ptr (MOVBreg x) mem) 6561 // cond: 6562 // result: (MOVBstore [off] {sym} ptr x mem) 6563 for { 6564 off := v.AuxInt 6565 sym := v.Aux 6566 _ = v.Args[2] 6567 ptr := v.Args[0] 6568 v_1 := v.Args[1] 6569 if v_1.Op != OpPPC64MOVBreg { 6570 break 6571 } 6572 x := v_1.Args[0] 6573 mem := v.Args[2] 6574 v.reset(OpPPC64MOVBstore) 6575 v.AuxInt = off 6576 v.Aux = sym 6577 v.AddArg(ptr) 6578 v.AddArg(x) 6579 v.AddArg(mem) 6580 return true 6581 } 6582 // match: (MOVBstore [off] {sym} ptr (MOVBZreg x) mem) 6583 // cond: 6584 // result: (MOVBstore [off] {sym} ptr x mem) 6585 for { 6586 off := v.AuxInt 6587 sym := v.Aux 6588 _ = v.Args[2] 6589 ptr := v.Args[0] 6590 v_1 := v.Args[1] 6591 if v_1.Op != OpPPC64MOVBZreg { 6592 break 6593 } 6594 x := v_1.Args[0] 6595 mem := v.Args[2] 6596 v.reset(OpPPC64MOVBstore) 6597 v.AuxInt = off 6598 v.Aux = sym 6599 v.AddArg(ptr) 6600 v.AddArg(x) 6601 v.AddArg(mem) 6602 return true 6603 } 6604 return false 6605 } 6606 func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool { 6607 // match: (MOVBstorezero [off1] {sym} (ADDconst [off2] x) mem) 6608 // cond: is16Bit(off1+off2) 6609 // result: (MOVBstorezero [off1+off2] {sym} x mem) 6610 for { 6611 off1 := v.AuxInt 6612 sym := v.Aux 6613 _ = v.Args[1] 6614 v_0 := v.Args[0] 6615 if v_0.Op != OpPPC64ADDconst { 6616 break 6617 } 6618 off2 := v_0.AuxInt 6619 x := v_0.Args[0] 6620 mem := v.Args[1] 6621 if !(is16Bit(off1 + off2)) { 6622 break 6623 } 6624 v.reset(OpPPC64MOVBstorezero) 6625 v.AuxInt = off1 + off2 6626 v.Aux = sym 6627 v.AddArg(x) 6628 v.AddArg(mem) 6629 return true 6630 } 6631 // match: (MOVBstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} x) mem) 6632 // cond: canMergeSym(sym1,sym2) 6633 // result: (MOVBstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 6634 for { 6635 off1 := v.AuxInt 6636 sym1 := v.Aux 6637 _ = v.Args[1] 6638 v_0 := v.Args[0] 6639 if v_0.Op != OpPPC64MOVDaddr { 6640 break 6641 } 6642 off2 := v_0.AuxInt 6643 sym2 := v_0.Aux 6644 x := v_0.Args[0] 6645 mem := v.Args[1] 6646 if !(canMergeSym(sym1, sym2)) { 6647 break 6648 } 6649 v.reset(OpPPC64MOVBstorezero) 6650 v.AuxInt = off1 + off2 6651 v.Aux = mergeSym(sym1, sym2) 6652 v.AddArg(x) 6653 v.AddArg(mem) 6654 return true 6655 } 6656 return false 6657 } 6658 func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { 6659 // match: (MOVDload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 6660 // cond: canMergeSym(sym1,sym2) 6661 // result: (MOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6662 for { 6663 off1 := v.AuxInt 6664 sym1 := v.Aux 6665 _ = v.Args[1] 6666 v_0 := v.Args[0] 6667 if v_0.Op != OpPPC64MOVDaddr { 6668 break 6669 } 6670 off2 := v_0.AuxInt 6671 sym2 := v_0.Aux 6672 ptr := v_0.Args[0] 6673 mem := v.Args[1] 6674 if !(canMergeSym(sym1, sym2)) { 6675 break 6676 } 6677 v.reset(OpPPC64MOVDload) 6678 v.AuxInt = off1 + off2 6679 v.Aux = mergeSym(sym1, sym2) 6680 v.AddArg(ptr) 6681 v.AddArg(mem) 6682 return true 6683 } 6684 // match: (MOVDload [off1] {sym} (ADDconst [off2] x) mem) 6685 // cond: is16Bit(off1+off2) 6686 // result: (MOVDload [off1+off2] {sym} x mem) 6687 for { 6688 off1 := v.AuxInt 6689 sym := v.Aux 6690 _ = v.Args[1] 6691 v_0 := v.Args[0] 6692 if v_0.Op != OpPPC64ADDconst { 6693 break 6694 } 6695 off2 := v_0.AuxInt 6696 x := v_0.Args[0] 6697 mem := v.Args[1] 6698 if !(is16Bit(off1 + off2)) { 6699 break 6700 } 6701 v.reset(OpPPC64MOVDload) 6702 v.AuxInt = off1 + off2 6703 v.Aux = sym 6704 v.AddArg(x) 6705 v.AddArg(mem) 6706 return true 6707 } 6708 return false 6709 } 6710 func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { 6711 // match: (MOVDstore [off1] {sym} (ADDconst [off2] x) val mem) 6712 // cond: is16Bit(off1+off2) 6713 // result: (MOVDstore [off1+off2] {sym} x val mem) 6714 for { 6715 off1 := v.AuxInt 6716 sym := v.Aux 6717 _ = v.Args[2] 6718 v_0 := v.Args[0] 6719 if v_0.Op != OpPPC64ADDconst { 6720 break 6721 } 6722 off2 := v_0.AuxInt 6723 x := v_0.Args[0] 6724 val := v.Args[1] 6725 mem := v.Args[2] 6726 if !(is16Bit(off1 + off2)) { 6727 break 6728 } 6729 v.reset(OpPPC64MOVDstore) 6730 v.AuxInt = off1 + off2 6731 v.Aux = sym 6732 v.AddArg(x) 6733 v.AddArg(val) 6734 v.AddArg(mem) 6735 return true 6736 } 6737 // match: (MOVDstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 6738 // cond: canMergeSym(sym1,sym2) 6739 // result: (MOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 6740 for { 6741 off1 := v.AuxInt 6742 sym1 := v.Aux 6743 _ = v.Args[2] 6744 v_0 := v.Args[0] 6745 if v_0.Op != OpPPC64MOVDaddr { 6746 break 6747 } 6748 off2 := v_0.AuxInt 6749 sym2 := v_0.Aux 6750 ptr := v_0.Args[0] 6751 val := v.Args[1] 6752 mem := v.Args[2] 6753 if !(canMergeSym(sym1, sym2)) { 6754 break 6755 } 6756 v.reset(OpPPC64MOVDstore) 6757 v.AuxInt = off1 + off2 6758 v.Aux = mergeSym(sym1, sym2) 6759 v.AddArg(ptr) 6760 v.AddArg(val) 6761 v.AddArg(mem) 6762 return true 6763 } 6764 // match: (MOVDstore [off] {sym} ptr (MOVDconst [c]) mem) 6765 // cond: c == 0 6766 // result: (MOVDstorezero [off] {sym} ptr mem) 6767 for { 6768 off := v.AuxInt 6769 sym := v.Aux 6770 _ = v.Args[2] 6771 ptr := v.Args[0] 6772 v_1 := v.Args[1] 6773 if v_1.Op != OpPPC64MOVDconst { 6774 break 6775 } 6776 c := v_1.AuxInt 6777 mem := v.Args[2] 6778 if !(c == 0) { 6779 break 6780 } 6781 v.reset(OpPPC64MOVDstorezero) 6782 v.AuxInt = off 6783 v.Aux = sym 6784 v.AddArg(ptr) 6785 v.AddArg(mem) 6786 return true 6787 } 6788 return false 6789 } 6790 func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool { 6791 // match: (MOVDstorezero [off1] {sym} (ADDconst [off2] x) mem) 6792 // cond: is16Bit(off1+off2) 6793 // result: (MOVDstorezero [off1+off2] {sym} x mem) 6794 for { 6795 off1 := v.AuxInt 6796 sym := v.Aux 6797 _ = v.Args[1] 6798 v_0 := v.Args[0] 6799 if v_0.Op != OpPPC64ADDconst { 6800 break 6801 } 6802 off2 := v_0.AuxInt 6803 x := v_0.Args[0] 6804 mem := v.Args[1] 6805 if !(is16Bit(off1 + off2)) { 6806 break 6807 } 6808 v.reset(OpPPC64MOVDstorezero) 6809 v.AuxInt = off1 + off2 6810 v.Aux = sym 6811 v.AddArg(x) 6812 v.AddArg(mem) 6813 return true 6814 } 6815 // match: (MOVDstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} x) mem) 6816 // cond: canMergeSym(sym1,sym2) 6817 // result: (MOVDstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 6818 for { 6819 off1 := v.AuxInt 6820 sym1 := v.Aux 6821 _ = v.Args[1] 6822 v_0 := v.Args[0] 6823 if v_0.Op != OpPPC64MOVDaddr { 6824 break 6825 } 6826 off2 := v_0.AuxInt 6827 sym2 := v_0.Aux 6828 x := v_0.Args[0] 6829 mem := v.Args[1] 6830 if !(canMergeSym(sym1, sym2)) { 6831 break 6832 } 6833 v.reset(OpPPC64MOVDstorezero) 6834 v.AuxInt = off1 + off2 6835 v.Aux = mergeSym(sym1, sym2) 6836 v.AddArg(x) 6837 v.AddArg(mem) 6838 return true 6839 } 6840 return false 6841 } 6842 func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { 6843 // match: (MOVHZload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 6844 // cond: canMergeSym(sym1,sym2) 6845 // result: (MOVHZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6846 for { 6847 off1 := v.AuxInt 6848 sym1 := v.Aux 6849 _ = v.Args[1] 6850 v_0 := v.Args[0] 6851 if v_0.Op != OpPPC64MOVDaddr { 6852 break 6853 } 6854 off2 := v_0.AuxInt 6855 sym2 := v_0.Aux 6856 ptr := v_0.Args[0] 6857 mem := v.Args[1] 6858 if !(canMergeSym(sym1, sym2)) { 6859 break 6860 } 6861 v.reset(OpPPC64MOVHZload) 6862 v.AuxInt = off1 + off2 6863 v.Aux = mergeSym(sym1, sym2) 6864 v.AddArg(ptr) 6865 v.AddArg(mem) 6866 return true 6867 } 6868 // match: (MOVHZload [off1] {sym} (ADDconst [off2] x) mem) 6869 // cond: is16Bit(off1+off2) 6870 // result: (MOVHZload [off1+off2] {sym} x mem) 6871 for { 6872 off1 := v.AuxInt 6873 sym := v.Aux 6874 _ = v.Args[1] 6875 v_0 := v.Args[0] 6876 if v_0.Op != OpPPC64ADDconst { 6877 break 6878 } 6879 off2 := v_0.AuxInt 6880 x := v_0.Args[0] 6881 mem := v.Args[1] 6882 if !(is16Bit(off1 + off2)) { 6883 break 6884 } 6885 v.reset(OpPPC64MOVHZload) 6886 v.AuxInt = off1 + off2 6887 v.Aux = sym 6888 v.AddArg(x) 6889 v.AddArg(mem) 6890 return true 6891 } 6892 return false 6893 } 6894 func rewriteValuePPC64_OpPPC64MOVHZreg_0(v *Value) bool { 6895 // match: (MOVHZreg y:(ANDconst [c] _)) 6896 // cond: uint64(c) <= 0xFFFF 6897 // result: y 6898 for { 6899 y := v.Args[0] 6900 if y.Op != OpPPC64ANDconst { 6901 break 6902 } 6903 c := y.AuxInt 6904 if !(uint64(c) <= 0xFFFF) { 6905 break 6906 } 6907 v.reset(OpCopy) 6908 v.Type = y.Type 6909 v.AddArg(y) 6910 return true 6911 } 6912 // match: (MOVHZreg y:(MOVHZreg _)) 6913 // cond: 6914 // result: y 6915 for { 6916 y := v.Args[0] 6917 if y.Op != OpPPC64MOVHZreg { 6918 break 6919 } 6920 v.reset(OpCopy) 6921 v.Type = y.Type 6922 v.AddArg(y) 6923 return true 6924 } 6925 // match: (MOVHZreg y:(MOVBZreg _)) 6926 // cond: 6927 // result: y 6928 for { 6929 y := v.Args[0] 6930 if y.Op != OpPPC64MOVBZreg { 6931 break 6932 } 6933 v.reset(OpCopy) 6934 v.Type = y.Type 6935 v.AddArg(y) 6936 return true 6937 } 6938 // match: (MOVHZreg y:(MOVHreg x)) 6939 // cond: 6940 // result: (MOVHZreg x) 6941 for { 6942 y := v.Args[0] 6943 if y.Op != OpPPC64MOVHreg { 6944 break 6945 } 6946 x := y.Args[0] 6947 v.reset(OpPPC64MOVHZreg) 6948 v.AddArg(x) 6949 return true 6950 } 6951 // match: (MOVHZreg x:(MOVHZload _ _)) 6952 // cond: 6953 // result: x 6954 for { 6955 x := v.Args[0] 6956 if x.Op != OpPPC64MOVHZload { 6957 break 6958 } 6959 _ = x.Args[1] 6960 v.reset(OpCopy) 6961 v.Type = x.Type 6962 v.AddArg(x) 6963 return true 6964 } 6965 // match: (MOVHZreg (MOVDconst [c])) 6966 // cond: 6967 // result: (MOVDconst [int64(uint16(c))]) 6968 for { 6969 v_0 := v.Args[0] 6970 if v_0.Op != OpPPC64MOVDconst { 6971 break 6972 } 6973 c := v_0.AuxInt 6974 v.reset(OpPPC64MOVDconst) 6975 v.AuxInt = int64(uint16(c)) 6976 return true 6977 } 6978 return false 6979 } 6980 func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { 6981 // match: (MOVHload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 6982 // cond: canMergeSym(sym1,sym2) 6983 // result: (MOVHload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6984 for { 6985 off1 := v.AuxInt 6986 sym1 := v.Aux 6987 _ = v.Args[1] 6988 v_0 := v.Args[0] 6989 if v_0.Op != OpPPC64MOVDaddr { 6990 break 6991 } 6992 off2 := v_0.AuxInt 6993 sym2 := v_0.Aux 6994 ptr := v_0.Args[0] 6995 mem := v.Args[1] 6996 if !(canMergeSym(sym1, sym2)) { 6997 break 6998 } 6999 v.reset(OpPPC64MOVHload) 7000 v.AuxInt = off1 + off2 7001 v.Aux = mergeSym(sym1, sym2) 7002 v.AddArg(ptr) 7003 v.AddArg(mem) 7004 return true 7005 } 7006 // match: (MOVHload [off1] {sym} (ADDconst [off2] x) mem) 7007 // cond: is16Bit(off1+off2) 7008 // result: (MOVHload [off1+off2] {sym} x mem) 7009 for { 7010 off1 := v.AuxInt 7011 sym := v.Aux 7012 _ = v.Args[1] 7013 v_0 := v.Args[0] 7014 if v_0.Op != OpPPC64ADDconst { 7015 break 7016 } 7017 off2 := v_0.AuxInt 7018 x := v_0.Args[0] 7019 mem := v.Args[1] 7020 if !(is16Bit(off1 + off2)) { 7021 break 7022 } 7023 v.reset(OpPPC64MOVHload) 7024 v.AuxInt = off1 + off2 7025 v.Aux = sym 7026 v.AddArg(x) 7027 v.AddArg(mem) 7028 return true 7029 } 7030 return false 7031 } 7032 func rewriteValuePPC64_OpPPC64MOVHreg_0(v *Value) bool { 7033 // match: (MOVHreg y:(ANDconst [c] _)) 7034 // cond: uint64(c) <= 0x7FFF 7035 // result: y 7036 for { 7037 y := v.Args[0] 7038 if y.Op != OpPPC64ANDconst { 7039 break 7040 } 7041 c := y.AuxInt 7042 if !(uint64(c) <= 0x7FFF) { 7043 break 7044 } 7045 v.reset(OpCopy) 7046 v.Type = y.Type 7047 v.AddArg(y) 7048 return true 7049 } 7050 // match: (MOVHreg y:(MOVHreg _)) 7051 // cond: 7052 // result: y 7053 for { 7054 y := v.Args[0] 7055 if y.Op != OpPPC64MOVHreg { 7056 break 7057 } 7058 v.reset(OpCopy) 7059 v.Type = y.Type 7060 v.AddArg(y) 7061 return true 7062 } 7063 // match: (MOVHreg y:(MOVBreg _)) 7064 // cond: 7065 // result: y 7066 for { 7067 y := v.Args[0] 7068 if y.Op != OpPPC64MOVBreg { 7069 break 7070 } 7071 v.reset(OpCopy) 7072 v.Type = y.Type 7073 v.AddArg(y) 7074 return true 7075 } 7076 // match: (MOVHreg y:(MOVHZreg x)) 7077 // cond: 7078 // result: (MOVHreg x) 7079 for { 7080 y := v.Args[0] 7081 if y.Op != OpPPC64MOVHZreg { 7082 break 7083 } 7084 x := y.Args[0] 7085 v.reset(OpPPC64MOVHreg) 7086 v.AddArg(x) 7087 return true 7088 } 7089 // match: (MOVHreg x:(MOVHload _ _)) 7090 // cond: 7091 // result: x 7092 for { 7093 x := v.Args[0] 7094 if x.Op != OpPPC64MOVHload { 7095 break 7096 } 7097 _ = x.Args[1] 7098 v.reset(OpCopy) 7099 v.Type = x.Type 7100 v.AddArg(x) 7101 return true 7102 } 7103 // match: (MOVHreg (MOVDconst [c])) 7104 // cond: 7105 // result: (MOVDconst [int64(int16(c))]) 7106 for { 7107 v_0 := v.Args[0] 7108 if v_0.Op != OpPPC64MOVDconst { 7109 break 7110 } 7111 c := v_0.AuxInt 7112 v.reset(OpPPC64MOVDconst) 7113 v.AuxInt = int64(int16(c)) 7114 return true 7115 } 7116 return false 7117 } 7118 func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { 7119 // match: (MOVHstore [off1] {sym} (ADDconst [off2] x) val mem) 7120 // cond: is16Bit(off1+off2) 7121 // result: (MOVHstore [off1+off2] {sym} x val mem) 7122 for { 7123 off1 := v.AuxInt 7124 sym := v.Aux 7125 _ = v.Args[2] 7126 v_0 := v.Args[0] 7127 if v_0.Op != OpPPC64ADDconst { 7128 break 7129 } 7130 off2 := v_0.AuxInt 7131 x := v_0.Args[0] 7132 val := v.Args[1] 7133 mem := v.Args[2] 7134 if !(is16Bit(off1 + off2)) { 7135 break 7136 } 7137 v.reset(OpPPC64MOVHstore) 7138 v.AuxInt = off1 + off2 7139 v.Aux = sym 7140 v.AddArg(x) 7141 v.AddArg(val) 7142 v.AddArg(mem) 7143 return true 7144 } 7145 // match: (MOVHstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 7146 // cond: canMergeSym(sym1,sym2) 7147 // result: (MOVHstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 7148 for { 7149 off1 := v.AuxInt 7150 sym1 := v.Aux 7151 _ = v.Args[2] 7152 v_0 := v.Args[0] 7153 if v_0.Op != OpPPC64MOVDaddr { 7154 break 7155 } 7156 off2 := v_0.AuxInt 7157 sym2 := v_0.Aux 7158 ptr := v_0.Args[0] 7159 val := v.Args[1] 7160 mem := v.Args[2] 7161 if !(canMergeSym(sym1, sym2)) { 7162 break 7163 } 7164 v.reset(OpPPC64MOVHstore) 7165 v.AuxInt = off1 + off2 7166 v.Aux = mergeSym(sym1, sym2) 7167 v.AddArg(ptr) 7168 v.AddArg(val) 7169 v.AddArg(mem) 7170 return true 7171 } 7172 // match: (MOVHstore [off] {sym} ptr (MOVDconst [c]) mem) 7173 // cond: c == 0 7174 // result: (MOVHstorezero [off] {sym} ptr mem) 7175 for { 7176 off := v.AuxInt 7177 sym := v.Aux 7178 _ = v.Args[2] 7179 ptr := v.Args[0] 7180 v_1 := v.Args[1] 7181 if v_1.Op != OpPPC64MOVDconst { 7182 break 7183 } 7184 c := v_1.AuxInt 7185 mem := v.Args[2] 7186 if !(c == 0) { 7187 break 7188 } 7189 v.reset(OpPPC64MOVHstorezero) 7190 v.AuxInt = off 7191 v.Aux = sym 7192 v.AddArg(ptr) 7193 v.AddArg(mem) 7194 return true 7195 } 7196 // match: (MOVHstore [off] {sym} ptr (MOVHreg x) mem) 7197 // cond: 7198 // result: (MOVHstore [off] {sym} ptr x mem) 7199 for { 7200 off := v.AuxInt 7201 sym := v.Aux 7202 _ = v.Args[2] 7203 ptr := v.Args[0] 7204 v_1 := v.Args[1] 7205 if v_1.Op != OpPPC64MOVHreg { 7206 break 7207 } 7208 x := v_1.Args[0] 7209 mem := v.Args[2] 7210 v.reset(OpPPC64MOVHstore) 7211 v.AuxInt = off 7212 v.Aux = sym 7213 v.AddArg(ptr) 7214 v.AddArg(x) 7215 v.AddArg(mem) 7216 return true 7217 } 7218 // match: (MOVHstore [off] {sym} ptr (MOVHZreg x) mem) 7219 // cond: 7220 // result: (MOVHstore [off] {sym} ptr x mem) 7221 for { 7222 off := v.AuxInt 7223 sym := v.Aux 7224 _ = v.Args[2] 7225 ptr := v.Args[0] 7226 v_1 := v.Args[1] 7227 if v_1.Op != OpPPC64MOVHZreg { 7228 break 7229 } 7230 x := v_1.Args[0] 7231 mem := v.Args[2] 7232 v.reset(OpPPC64MOVHstore) 7233 v.AuxInt = off 7234 v.Aux = sym 7235 v.AddArg(ptr) 7236 v.AddArg(x) 7237 v.AddArg(mem) 7238 return true 7239 } 7240 return false 7241 } 7242 func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool { 7243 // match: (MOVHstorezero [off1] {sym} (ADDconst [off2] x) mem) 7244 // cond: is16Bit(off1+off2) 7245 // result: (MOVHstorezero [off1+off2] {sym} x mem) 7246 for { 7247 off1 := v.AuxInt 7248 sym := v.Aux 7249 _ = v.Args[1] 7250 v_0 := v.Args[0] 7251 if v_0.Op != OpPPC64ADDconst { 7252 break 7253 } 7254 off2 := v_0.AuxInt 7255 x := v_0.Args[0] 7256 mem := v.Args[1] 7257 if !(is16Bit(off1 + off2)) { 7258 break 7259 } 7260 v.reset(OpPPC64MOVHstorezero) 7261 v.AuxInt = off1 + off2 7262 v.Aux = sym 7263 v.AddArg(x) 7264 v.AddArg(mem) 7265 return true 7266 } 7267 // match: (MOVHstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} x) mem) 7268 // cond: canMergeSym(sym1,sym2) 7269 // result: (MOVHstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 7270 for { 7271 off1 := v.AuxInt 7272 sym1 := v.Aux 7273 _ = v.Args[1] 7274 v_0 := v.Args[0] 7275 if v_0.Op != OpPPC64MOVDaddr { 7276 break 7277 } 7278 off2 := v_0.AuxInt 7279 sym2 := v_0.Aux 7280 x := v_0.Args[0] 7281 mem := v.Args[1] 7282 if !(canMergeSym(sym1, sym2)) { 7283 break 7284 } 7285 v.reset(OpPPC64MOVHstorezero) 7286 v.AuxInt = off1 + off2 7287 v.Aux = mergeSym(sym1, sym2) 7288 v.AddArg(x) 7289 v.AddArg(mem) 7290 return true 7291 } 7292 return false 7293 } 7294 func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { 7295 // match: (MOVWZload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 7296 // cond: canMergeSym(sym1,sym2) 7297 // result: (MOVWZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 7298 for { 7299 off1 := v.AuxInt 7300 sym1 := v.Aux 7301 _ = v.Args[1] 7302 v_0 := v.Args[0] 7303 if v_0.Op != OpPPC64MOVDaddr { 7304 break 7305 } 7306 off2 := v_0.AuxInt 7307 sym2 := v_0.Aux 7308 ptr := v_0.Args[0] 7309 mem := v.Args[1] 7310 if !(canMergeSym(sym1, sym2)) { 7311 break 7312 } 7313 v.reset(OpPPC64MOVWZload) 7314 v.AuxInt = off1 + off2 7315 v.Aux = mergeSym(sym1, sym2) 7316 v.AddArg(ptr) 7317 v.AddArg(mem) 7318 return true 7319 } 7320 // match: (MOVWZload [off1] {sym} (ADDconst [off2] x) mem) 7321 // cond: is16Bit(off1+off2) 7322 // result: (MOVWZload [off1+off2] {sym} x mem) 7323 for { 7324 off1 := v.AuxInt 7325 sym := v.Aux 7326 _ = v.Args[1] 7327 v_0 := v.Args[0] 7328 if v_0.Op != OpPPC64ADDconst { 7329 break 7330 } 7331 off2 := v_0.AuxInt 7332 x := v_0.Args[0] 7333 mem := v.Args[1] 7334 if !(is16Bit(off1 + off2)) { 7335 break 7336 } 7337 v.reset(OpPPC64MOVWZload) 7338 v.AuxInt = off1 + off2 7339 v.Aux = sym 7340 v.AddArg(x) 7341 v.AddArg(mem) 7342 return true 7343 } 7344 return false 7345 } 7346 func rewriteValuePPC64_OpPPC64MOVWZreg_0(v *Value) bool { 7347 // match: (MOVWZreg y:(ANDconst [c] _)) 7348 // cond: uint64(c) <= 0xFFFFFFFF 7349 // result: y 7350 for { 7351 y := v.Args[0] 7352 if y.Op != OpPPC64ANDconst { 7353 break 7354 } 7355 c := y.AuxInt 7356 if !(uint64(c) <= 0xFFFFFFFF) { 7357 break 7358 } 7359 v.reset(OpCopy) 7360 v.Type = y.Type 7361 v.AddArg(y) 7362 return true 7363 } 7364 // match: (MOVWZreg y:(AND (MOVDconst [c]) _)) 7365 // cond: uint64(c) <= 0xFFFFFFFF 7366 // result: y 7367 for { 7368 y := v.Args[0] 7369 if y.Op != OpPPC64AND { 7370 break 7371 } 7372 _ = y.Args[1] 7373 y_0 := y.Args[0] 7374 if y_0.Op != OpPPC64MOVDconst { 7375 break 7376 } 7377 c := y_0.AuxInt 7378 if !(uint64(c) <= 0xFFFFFFFF) { 7379 break 7380 } 7381 v.reset(OpCopy) 7382 v.Type = y.Type 7383 v.AddArg(y) 7384 return true 7385 } 7386 // match: (MOVWZreg y:(AND _ (MOVDconst [c]))) 7387 // cond: uint64(c) <= 0xFFFFFFFF 7388 // result: y 7389 for { 7390 y := v.Args[0] 7391 if y.Op != OpPPC64AND { 7392 break 7393 } 7394 _ = y.Args[1] 7395 y_1 := y.Args[1] 7396 if y_1.Op != OpPPC64MOVDconst { 7397 break 7398 } 7399 c := y_1.AuxInt 7400 if !(uint64(c) <= 0xFFFFFFFF) { 7401 break 7402 } 7403 v.reset(OpCopy) 7404 v.Type = y.Type 7405 v.AddArg(y) 7406 return true 7407 } 7408 // match: (MOVWZreg y:(MOVWZreg _)) 7409 // cond: 7410 // result: y 7411 for { 7412 y := v.Args[0] 7413 if y.Op != OpPPC64MOVWZreg { 7414 break 7415 } 7416 v.reset(OpCopy) 7417 v.Type = y.Type 7418 v.AddArg(y) 7419 return true 7420 } 7421 // match: (MOVWZreg y:(MOVHZreg _)) 7422 // cond: 7423 // result: y 7424 for { 7425 y := v.Args[0] 7426 if y.Op != OpPPC64MOVHZreg { 7427 break 7428 } 7429 v.reset(OpCopy) 7430 v.Type = y.Type 7431 v.AddArg(y) 7432 return true 7433 } 7434 // match: (MOVWZreg y:(MOVBZreg _)) 7435 // cond: 7436 // result: y 7437 for { 7438 y := v.Args[0] 7439 if y.Op != OpPPC64MOVBZreg { 7440 break 7441 } 7442 v.reset(OpCopy) 7443 v.Type = y.Type 7444 v.AddArg(y) 7445 return true 7446 } 7447 // match: (MOVWZreg y:(MOVWreg x)) 7448 // cond: 7449 // result: (MOVWZreg x) 7450 for { 7451 y := v.Args[0] 7452 if y.Op != OpPPC64MOVWreg { 7453 break 7454 } 7455 x := y.Args[0] 7456 v.reset(OpPPC64MOVWZreg) 7457 v.AddArg(x) 7458 return true 7459 } 7460 return false 7461 } 7462 func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { 7463 // match: (MOVWload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) 7464 // cond: canMergeSym(sym1,sym2) 7465 // result: (MOVWload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 7466 for { 7467 off1 := v.AuxInt 7468 sym1 := v.Aux 7469 _ = v.Args[1] 7470 v_0 := v.Args[0] 7471 if v_0.Op != OpPPC64MOVDaddr { 7472 break 7473 } 7474 off2 := v_0.AuxInt 7475 sym2 := v_0.Aux 7476 ptr := v_0.Args[0] 7477 mem := v.Args[1] 7478 if !(canMergeSym(sym1, sym2)) { 7479 break 7480 } 7481 v.reset(OpPPC64MOVWload) 7482 v.AuxInt = off1 + off2 7483 v.Aux = mergeSym(sym1, sym2) 7484 v.AddArg(ptr) 7485 v.AddArg(mem) 7486 return true 7487 } 7488 // match: (MOVWload [off1] {sym} (ADDconst [off2] x) mem) 7489 // cond: is16Bit(off1+off2) 7490 // result: (MOVWload [off1+off2] {sym} x mem) 7491 for { 7492 off1 := v.AuxInt 7493 sym := v.Aux 7494 _ = v.Args[1] 7495 v_0 := v.Args[0] 7496 if v_0.Op != OpPPC64ADDconst { 7497 break 7498 } 7499 off2 := v_0.AuxInt 7500 x := v_0.Args[0] 7501 mem := v.Args[1] 7502 if !(is16Bit(off1 + off2)) { 7503 break 7504 } 7505 v.reset(OpPPC64MOVWload) 7506 v.AuxInt = off1 + off2 7507 v.Aux = sym 7508 v.AddArg(x) 7509 v.AddArg(mem) 7510 return true 7511 } 7512 return false 7513 } 7514 func rewriteValuePPC64_OpPPC64MOVWreg_0(v *Value) bool { 7515 // match: (MOVWreg y:(ANDconst [c] _)) 7516 // cond: uint64(c) <= 0xFFFF 7517 // result: y 7518 for { 7519 y := v.Args[0] 7520 if y.Op != OpPPC64ANDconst { 7521 break 7522 } 7523 c := y.AuxInt 7524 if !(uint64(c) <= 0xFFFF) { 7525 break 7526 } 7527 v.reset(OpCopy) 7528 v.Type = y.Type 7529 v.AddArg(y) 7530 return true 7531 } 7532 // match: (MOVWreg y:(AND (MOVDconst [c]) _)) 7533 // cond: uint64(c) <= 0x7FFFFFFF 7534 // result: y 7535 for { 7536 y := v.Args[0] 7537 if y.Op != OpPPC64AND { 7538 break 7539 } 7540 _ = y.Args[1] 7541 y_0 := y.Args[0] 7542 if y_0.Op != OpPPC64MOVDconst { 7543 break 7544 } 7545 c := y_0.AuxInt 7546 if !(uint64(c) <= 0x7FFFFFFF) { 7547 break 7548 } 7549 v.reset(OpCopy) 7550 v.Type = y.Type 7551 v.AddArg(y) 7552 return true 7553 } 7554 // match: (MOVWreg y:(AND _ (MOVDconst [c]))) 7555 // cond: uint64(c) <= 0x7FFFFFFF 7556 // result: y 7557 for { 7558 y := v.Args[0] 7559 if y.Op != OpPPC64AND { 7560 break 7561 } 7562 _ = y.Args[1] 7563 y_1 := y.Args[1] 7564 if y_1.Op != OpPPC64MOVDconst { 7565 break 7566 } 7567 c := y_1.AuxInt 7568 if !(uint64(c) <= 0x7FFFFFFF) { 7569 break 7570 } 7571 v.reset(OpCopy) 7572 v.Type = y.Type 7573 v.AddArg(y) 7574 return true 7575 } 7576 // match: (MOVWreg y:(MOVWreg _)) 7577 // cond: 7578 // result: y 7579 for { 7580 y := v.Args[0] 7581 if y.Op != OpPPC64MOVWreg { 7582 break 7583 } 7584 v.reset(OpCopy) 7585 v.Type = y.Type 7586 v.AddArg(y) 7587 return true 7588 } 7589 // match: (MOVWreg y:(MOVHreg _)) 7590 // cond: 7591 // result: y 7592 for { 7593 y := v.Args[0] 7594 if y.Op != OpPPC64MOVHreg { 7595 break 7596 } 7597 v.reset(OpCopy) 7598 v.Type = y.Type 7599 v.AddArg(y) 7600 return true 7601 } 7602 // match: (MOVWreg y:(MOVBreg _)) 7603 // cond: 7604 // result: y 7605 for { 7606 y := v.Args[0] 7607 if y.Op != OpPPC64MOVBreg { 7608 break 7609 } 7610 v.reset(OpCopy) 7611 v.Type = y.Type 7612 v.AddArg(y) 7613 return true 7614 } 7615 // match: (MOVWreg y:(MOVWZreg x)) 7616 // cond: 7617 // result: (MOVWreg x) 7618 for { 7619 y := v.Args[0] 7620 if y.Op != OpPPC64MOVWZreg { 7621 break 7622 } 7623 x := y.Args[0] 7624 v.reset(OpPPC64MOVWreg) 7625 v.AddArg(x) 7626 return true 7627 } 7628 return false 7629 } 7630 func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { 7631 // match: (MOVWstore [off1] {sym} (ADDconst [off2] x) val mem) 7632 // cond: is16Bit(off1+off2) 7633 // result: (MOVWstore [off1+off2] {sym} x val mem) 7634 for { 7635 off1 := v.AuxInt 7636 sym := v.Aux 7637 _ = v.Args[2] 7638 v_0 := v.Args[0] 7639 if v_0.Op != OpPPC64ADDconst { 7640 break 7641 } 7642 off2 := v_0.AuxInt 7643 x := v_0.Args[0] 7644 val := v.Args[1] 7645 mem := v.Args[2] 7646 if !(is16Bit(off1 + off2)) { 7647 break 7648 } 7649 v.reset(OpPPC64MOVWstore) 7650 v.AuxInt = off1 + off2 7651 v.Aux = sym 7652 v.AddArg(x) 7653 v.AddArg(val) 7654 v.AddArg(mem) 7655 return true 7656 } 7657 // match: (MOVWstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) 7658 // cond: canMergeSym(sym1,sym2) 7659 // result: (MOVWstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 7660 for { 7661 off1 := v.AuxInt 7662 sym1 := v.Aux 7663 _ = v.Args[2] 7664 v_0 := v.Args[0] 7665 if v_0.Op != OpPPC64MOVDaddr { 7666 break 7667 } 7668 off2 := v_0.AuxInt 7669 sym2 := v_0.Aux 7670 ptr := v_0.Args[0] 7671 val := v.Args[1] 7672 mem := v.Args[2] 7673 if !(canMergeSym(sym1, sym2)) { 7674 break 7675 } 7676 v.reset(OpPPC64MOVWstore) 7677 v.AuxInt = off1 + off2 7678 v.Aux = mergeSym(sym1, sym2) 7679 v.AddArg(ptr) 7680 v.AddArg(val) 7681 v.AddArg(mem) 7682 return true 7683 } 7684 // match: (MOVWstore [off] {sym} ptr (MOVDconst [c]) mem) 7685 // cond: c == 0 7686 // result: (MOVWstorezero [off] {sym} ptr mem) 7687 for { 7688 off := v.AuxInt 7689 sym := v.Aux 7690 _ = v.Args[2] 7691 ptr := v.Args[0] 7692 v_1 := v.Args[1] 7693 if v_1.Op != OpPPC64MOVDconst { 7694 break 7695 } 7696 c := v_1.AuxInt 7697 mem := v.Args[2] 7698 if !(c == 0) { 7699 break 7700 } 7701 v.reset(OpPPC64MOVWstorezero) 7702 v.AuxInt = off 7703 v.Aux = sym 7704 v.AddArg(ptr) 7705 v.AddArg(mem) 7706 return true 7707 } 7708 // match: (MOVWstore [off] {sym} ptr (MOVWreg x) mem) 7709 // cond: 7710 // result: (MOVWstore [off] {sym} ptr x mem) 7711 for { 7712 off := v.AuxInt 7713 sym := v.Aux 7714 _ = v.Args[2] 7715 ptr := v.Args[0] 7716 v_1 := v.Args[1] 7717 if v_1.Op != OpPPC64MOVWreg { 7718 break 7719 } 7720 x := v_1.Args[0] 7721 mem := v.Args[2] 7722 v.reset(OpPPC64MOVWstore) 7723 v.AuxInt = off 7724 v.Aux = sym 7725 v.AddArg(ptr) 7726 v.AddArg(x) 7727 v.AddArg(mem) 7728 return true 7729 } 7730 // match: (MOVWstore [off] {sym} ptr (MOVWZreg x) mem) 7731 // cond: 7732 // result: (MOVWstore [off] {sym} ptr x mem) 7733 for { 7734 off := v.AuxInt 7735 sym := v.Aux 7736 _ = v.Args[2] 7737 ptr := v.Args[0] 7738 v_1 := v.Args[1] 7739 if v_1.Op != OpPPC64MOVWZreg { 7740 break 7741 } 7742 x := v_1.Args[0] 7743 mem := v.Args[2] 7744 v.reset(OpPPC64MOVWstore) 7745 v.AuxInt = off 7746 v.Aux = sym 7747 v.AddArg(ptr) 7748 v.AddArg(x) 7749 v.AddArg(mem) 7750 return true 7751 } 7752 return false 7753 } 7754 func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { 7755 // match: (MOVWstorezero [off1] {sym} (ADDconst [off2] x) mem) 7756 // cond: is16Bit(off1+off2) 7757 // result: (MOVWstorezero [off1+off2] {sym} x mem) 7758 for { 7759 off1 := v.AuxInt 7760 sym := v.Aux 7761 _ = v.Args[1] 7762 v_0 := v.Args[0] 7763 if v_0.Op != OpPPC64ADDconst { 7764 break 7765 } 7766 off2 := v_0.AuxInt 7767 x := v_0.Args[0] 7768 mem := v.Args[1] 7769 if !(is16Bit(off1 + off2)) { 7770 break 7771 } 7772 v.reset(OpPPC64MOVWstorezero) 7773 v.AuxInt = off1 + off2 7774 v.Aux = sym 7775 v.AddArg(x) 7776 v.AddArg(mem) 7777 return true 7778 } 7779 // match: (MOVWstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} x) mem) 7780 // cond: canMergeSym(sym1,sym2) 7781 // result: (MOVWstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 7782 for { 7783 off1 := v.AuxInt 7784 sym1 := v.Aux 7785 _ = v.Args[1] 7786 v_0 := v.Args[0] 7787 if v_0.Op != OpPPC64MOVDaddr { 7788 break 7789 } 7790 off2 := v_0.AuxInt 7791 sym2 := v_0.Aux 7792 x := v_0.Args[0] 7793 mem := v.Args[1] 7794 if !(canMergeSym(sym1, sym2)) { 7795 break 7796 } 7797 v.reset(OpPPC64MOVWstorezero) 7798 v.AuxInt = off1 + off2 7799 v.Aux = mergeSym(sym1, sym2) 7800 v.AddArg(x) 7801 v.AddArg(mem) 7802 return true 7803 } 7804 return false 7805 } 7806 func rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v *Value) bool { 7807 // match: (MaskIfNotCarry (ADDconstForCarry [c] (ANDconst [d] _))) 7808 // cond: c < 0 && d > 0 && c + d < 0 7809 // result: (MOVDconst [-1]) 7810 for { 7811 v_0 := v.Args[0] 7812 if v_0.Op != OpPPC64ADDconstForCarry { 7813 break 7814 } 7815 c := v_0.AuxInt 7816 v_0_0 := v_0.Args[0] 7817 if v_0_0.Op != OpPPC64ANDconst { 7818 break 7819 } 7820 d := v_0_0.AuxInt 7821 if !(c < 0 && d > 0 && c+d < 0) { 7822 break 7823 } 7824 v.reset(OpPPC64MOVDconst) 7825 v.AuxInt = -1 7826 return true 7827 } 7828 return false 7829 } 7830 func rewriteValuePPC64_OpPPC64NotEqual_0(v *Value) bool { 7831 // match: (NotEqual (FlagEQ)) 7832 // cond: 7833 // result: (MOVDconst [0]) 7834 for { 7835 v_0 := v.Args[0] 7836 if v_0.Op != OpPPC64FlagEQ { 7837 break 7838 } 7839 v.reset(OpPPC64MOVDconst) 7840 v.AuxInt = 0 7841 return true 7842 } 7843 // match: (NotEqual (FlagLT)) 7844 // cond: 7845 // result: (MOVDconst [1]) 7846 for { 7847 v_0 := v.Args[0] 7848 if v_0.Op != OpPPC64FlagLT { 7849 break 7850 } 7851 v.reset(OpPPC64MOVDconst) 7852 v.AuxInt = 1 7853 return true 7854 } 7855 // match: (NotEqual (FlagGT)) 7856 // cond: 7857 // result: (MOVDconst [1]) 7858 for { 7859 v_0 := v.Args[0] 7860 if v_0.Op != OpPPC64FlagGT { 7861 break 7862 } 7863 v.reset(OpPPC64MOVDconst) 7864 v.AuxInt = 1 7865 return true 7866 } 7867 // match: (NotEqual (InvertFlags x)) 7868 // cond: 7869 // result: (NotEqual x) 7870 for { 7871 v_0 := v.Args[0] 7872 if v_0.Op != OpPPC64InvertFlags { 7873 break 7874 } 7875 x := v_0.Args[0] 7876 v.reset(OpPPC64NotEqual) 7877 v.AddArg(x) 7878 return true 7879 } 7880 return false 7881 } 7882 func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool { 7883 // match: (OR (SLDconst x [c]) (SRDconst x [d])) 7884 // cond: d == 64-c 7885 // result: (ROTLconst [c] x) 7886 for { 7887 _ = v.Args[1] 7888 v_0 := v.Args[0] 7889 if v_0.Op != OpPPC64SLDconst { 7890 break 7891 } 7892 c := v_0.AuxInt 7893 x := v_0.Args[0] 7894 v_1 := v.Args[1] 7895 if v_1.Op != OpPPC64SRDconst { 7896 break 7897 } 7898 d := v_1.AuxInt 7899 if x != v_1.Args[0] { 7900 break 7901 } 7902 if !(d == 64-c) { 7903 break 7904 } 7905 v.reset(OpPPC64ROTLconst) 7906 v.AuxInt = c 7907 v.AddArg(x) 7908 return true 7909 } 7910 // match: (OR (SRDconst x [d]) (SLDconst x [c])) 7911 // cond: d == 64-c 7912 // result: (ROTLconst [c] x) 7913 for { 7914 _ = v.Args[1] 7915 v_0 := v.Args[0] 7916 if v_0.Op != OpPPC64SRDconst { 7917 break 7918 } 7919 d := v_0.AuxInt 7920 x := v_0.Args[0] 7921 v_1 := v.Args[1] 7922 if v_1.Op != OpPPC64SLDconst { 7923 break 7924 } 7925 c := v_1.AuxInt 7926 if x != v_1.Args[0] { 7927 break 7928 } 7929 if !(d == 64-c) { 7930 break 7931 } 7932 v.reset(OpPPC64ROTLconst) 7933 v.AuxInt = c 7934 v.AddArg(x) 7935 return true 7936 } 7937 // match: (OR (SLWconst x [c]) (SRWconst x [d])) 7938 // cond: d == 32-c 7939 // result: (ROTLWconst [c] x) 7940 for { 7941 _ = v.Args[1] 7942 v_0 := v.Args[0] 7943 if v_0.Op != OpPPC64SLWconst { 7944 break 7945 } 7946 c := v_0.AuxInt 7947 x := v_0.Args[0] 7948 v_1 := v.Args[1] 7949 if v_1.Op != OpPPC64SRWconst { 7950 break 7951 } 7952 d := v_1.AuxInt 7953 if x != v_1.Args[0] { 7954 break 7955 } 7956 if !(d == 32-c) { 7957 break 7958 } 7959 v.reset(OpPPC64ROTLWconst) 7960 v.AuxInt = c 7961 v.AddArg(x) 7962 return true 7963 } 7964 // match: (OR (SRWconst x [d]) (SLWconst x [c])) 7965 // cond: d == 32-c 7966 // result: (ROTLWconst [c] x) 7967 for { 7968 _ = v.Args[1] 7969 v_0 := v.Args[0] 7970 if v_0.Op != OpPPC64SRWconst { 7971 break 7972 } 7973 d := v_0.AuxInt 7974 x := v_0.Args[0] 7975 v_1 := v.Args[1] 7976 if v_1.Op != OpPPC64SLWconst { 7977 break 7978 } 7979 c := v_1.AuxInt 7980 if x != v_1.Args[0] { 7981 break 7982 } 7983 if !(d == 32-c) { 7984 break 7985 } 7986 v.reset(OpPPC64ROTLWconst) 7987 v.AuxInt = c 7988 v.AddArg(x) 7989 return true 7990 } 7991 // match: (OR (MOVDconst [c]) (MOVDconst [d])) 7992 // cond: 7993 // result: (MOVDconst [c|d]) 7994 for { 7995 _ = v.Args[1] 7996 v_0 := v.Args[0] 7997 if v_0.Op != OpPPC64MOVDconst { 7998 break 7999 } 8000 c := v_0.AuxInt 8001 v_1 := v.Args[1] 8002 if v_1.Op != OpPPC64MOVDconst { 8003 break 8004 } 8005 d := v_1.AuxInt 8006 v.reset(OpPPC64MOVDconst) 8007 v.AuxInt = c | d 8008 return true 8009 } 8010 // match: (OR (MOVDconst [d]) (MOVDconst [c])) 8011 // cond: 8012 // result: (MOVDconst [c|d]) 8013 for { 8014 _ = v.Args[1] 8015 v_0 := v.Args[0] 8016 if v_0.Op != OpPPC64MOVDconst { 8017 break 8018 } 8019 d := v_0.AuxInt 8020 v_1 := v.Args[1] 8021 if v_1.Op != OpPPC64MOVDconst { 8022 break 8023 } 8024 c := v_1.AuxInt 8025 v.reset(OpPPC64MOVDconst) 8026 v.AuxInt = c | d 8027 return true 8028 } 8029 // match: (OR x (MOVDconst [c])) 8030 // cond: isU32Bit(c) 8031 // result: (ORconst [c] x) 8032 for { 8033 _ = v.Args[1] 8034 x := v.Args[0] 8035 v_1 := v.Args[1] 8036 if v_1.Op != OpPPC64MOVDconst { 8037 break 8038 } 8039 c := v_1.AuxInt 8040 if !(isU32Bit(c)) { 8041 break 8042 } 8043 v.reset(OpPPC64ORconst) 8044 v.AuxInt = c 8045 v.AddArg(x) 8046 return true 8047 } 8048 // match: (OR (MOVDconst [c]) x) 8049 // cond: isU32Bit(c) 8050 // result: (ORconst [c] x) 8051 for { 8052 _ = v.Args[1] 8053 v_0 := v.Args[0] 8054 if v_0.Op != OpPPC64MOVDconst { 8055 break 8056 } 8057 c := v_0.AuxInt 8058 x := v.Args[1] 8059 if !(isU32Bit(c)) { 8060 break 8061 } 8062 v.reset(OpPPC64ORconst) 8063 v.AuxInt = c 8064 v.AddArg(x) 8065 return true 8066 } 8067 return false 8068 } 8069 func rewriteValuePPC64_OpPPC64ORN_0(v *Value) bool { 8070 // match: (ORN x (MOVDconst [-1])) 8071 // cond: 8072 // result: x 8073 for { 8074 _ = v.Args[1] 8075 x := v.Args[0] 8076 v_1 := v.Args[1] 8077 if v_1.Op != OpPPC64MOVDconst { 8078 break 8079 } 8080 if v_1.AuxInt != -1 { 8081 break 8082 } 8083 v.reset(OpCopy) 8084 v.Type = x.Type 8085 v.AddArg(x) 8086 return true 8087 } 8088 return false 8089 } 8090 func rewriteValuePPC64_OpPPC64ORconst_0(v *Value) bool { 8091 // match: (ORconst [c] (ORconst [d] x)) 8092 // cond: 8093 // result: (ORconst [c|d] x) 8094 for { 8095 c := v.AuxInt 8096 v_0 := v.Args[0] 8097 if v_0.Op != OpPPC64ORconst { 8098 break 8099 } 8100 d := v_0.AuxInt 8101 x := v_0.Args[0] 8102 v.reset(OpPPC64ORconst) 8103 v.AuxInt = c | d 8104 v.AddArg(x) 8105 return true 8106 } 8107 // match: (ORconst [-1] _) 8108 // cond: 8109 // result: (MOVDconst [-1]) 8110 for { 8111 if v.AuxInt != -1 { 8112 break 8113 } 8114 v.reset(OpPPC64MOVDconst) 8115 v.AuxInt = -1 8116 return true 8117 } 8118 // match: (ORconst [0] x) 8119 // cond: 8120 // result: x 8121 for { 8122 if v.AuxInt != 0 { 8123 break 8124 } 8125 x := v.Args[0] 8126 v.reset(OpCopy) 8127 v.Type = x.Type 8128 v.AddArg(x) 8129 return true 8130 } 8131 return false 8132 } 8133 func rewriteValuePPC64_OpPPC64SUB_0(v *Value) bool { 8134 // match: (SUB x (MOVDconst [c])) 8135 // cond: is32Bit(-c) 8136 // result: (ADDconst [-c] x) 8137 for { 8138 _ = v.Args[1] 8139 x := v.Args[0] 8140 v_1 := v.Args[1] 8141 if v_1.Op != OpPPC64MOVDconst { 8142 break 8143 } 8144 c := v_1.AuxInt 8145 if !(is32Bit(-c)) { 8146 break 8147 } 8148 v.reset(OpPPC64ADDconst) 8149 v.AuxInt = -c 8150 v.AddArg(x) 8151 return true 8152 } 8153 return false 8154 } 8155 func rewriteValuePPC64_OpPPC64XOR_0(v *Value) bool { 8156 // match: (XOR (SLDconst x [c]) (SRDconst x [d])) 8157 // cond: d == 64-c 8158 // result: (ROTLconst [c] x) 8159 for { 8160 _ = v.Args[1] 8161 v_0 := v.Args[0] 8162 if v_0.Op != OpPPC64SLDconst { 8163 break 8164 } 8165 c := v_0.AuxInt 8166 x := v_0.Args[0] 8167 v_1 := v.Args[1] 8168 if v_1.Op != OpPPC64SRDconst { 8169 break 8170 } 8171 d := v_1.AuxInt 8172 if x != v_1.Args[0] { 8173 break 8174 } 8175 if !(d == 64-c) { 8176 break 8177 } 8178 v.reset(OpPPC64ROTLconst) 8179 v.AuxInt = c 8180 v.AddArg(x) 8181 return true 8182 } 8183 // match: (XOR (SRDconst x [d]) (SLDconst x [c])) 8184 // cond: d == 64-c 8185 // result: (ROTLconst [c] x) 8186 for { 8187 _ = v.Args[1] 8188 v_0 := v.Args[0] 8189 if v_0.Op != OpPPC64SRDconst { 8190 break 8191 } 8192 d := v_0.AuxInt 8193 x := v_0.Args[0] 8194 v_1 := v.Args[1] 8195 if v_1.Op != OpPPC64SLDconst { 8196 break 8197 } 8198 c := v_1.AuxInt 8199 if x != v_1.Args[0] { 8200 break 8201 } 8202 if !(d == 64-c) { 8203 break 8204 } 8205 v.reset(OpPPC64ROTLconst) 8206 v.AuxInt = c 8207 v.AddArg(x) 8208 return true 8209 } 8210 // match: (XOR (SLWconst x [c]) (SRWconst x [d])) 8211 // cond: d == 32-c 8212 // result: (ROTLWconst [c] x) 8213 for { 8214 _ = v.Args[1] 8215 v_0 := v.Args[0] 8216 if v_0.Op != OpPPC64SLWconst { 8217 break 8218 } 8219 c := v_0.AuxInt 8220 x := v_0.Args[0] 8221 v_1 := v.Args[1] 8222 if v_1.Op != OpPPC64SRWconst { 8223 break 8224 } 8225 d := v_1.AuxInt 8226 if x != v_1.Args[0] { 8227 break 8228 } 8229 if !(d == 32-c) { 8230 break 8231 } 8232 v.reset(OpPPC64ROTLWconst) 8233 v.AuxInt = c 8234 v.AddArg(x) 8235 return true 8236 } 8237 // match: (XOR (SRWconst x [d]) (SLWconst x [c])) 8238 // cond: d == 32-c 8239 // result: (ROTLWconst [c] x) 8240 for { 8241 _ = v.Args[1] 8242 v_0 := v.Args[0] 8243 if v_0.Op != OpPPC64SRWconst { 8244 break 8245 } 8246 d := v_0.AuxInt 8247 x := v_0.Args[0] 8248 v_1 := v.Args[1] 8249 if v_1.Op != OpPPC64SLWconst { 8250 break 8251 } 8252 c := v_1.AuxInt 8253 if x != v_1.Args[0] { 8254 break 8255 } 8256 if !(d == 32-c) { 8257 break 8258 } 8259 v.reset(OpPPC64ROTLWconst) 8260 v.AuxInt = c 8261 v.AddArg(x) 8262 return true 8263 } 8264 // match: (XOR (MOVDconst [c]) (MOVDconst [d])) 8265 // cond: 8266 // result: (MOVDconst [c^d]) 8267 for { 8268 _ = v.Args[1] 8269 v_0 := v.Args[0] 8270 if v_0.Op != OpPPC64MOVDconst { 8271 break 8272 } 8273 c := v_0.AuxInt 8274 v_1 := v.Args[1] 8275 if v_1.Op != OpPPC64MOVDconst { 8276 break 8277 } 8278 d := v_1.AuxInt 8279 v.reset(OpPPC64MOVDconst) 8280 v.AuxInt = c ^ d 8281 return true 8282 } 8283 // match: (XOR (MOVDconst [d]) (MOVDconst [c])) 8284 // cond: 8285 // result: (MOVDconst [c^d]) 8286 for { 8287 _ = v.Args[1] 8288 v_0 := v.Args[0] 8289 if v_0.Op != OpPPC64MOVDconst { 8290 break 8291 } 8292 d := v_0.AuxInt 8293 v_1 := v.Args[1] 8294 if v_1.Op != OpPPC64MOVDconst { 8295 break 8296 } 8297 c := v_1.AuxInt 8298 v.reset(OpPPC64MOVDconst) 8299 v.AuxInt = c ^ d 8300 return true 8301 } 8302 // match: (XOR x (MOVDconst [c])) 8303 // cond: isU32Bit(c) 8304 // result: (XORconst [c] x) 8305 for { 8306 _ = v.Args[1] 8307 x := v.Args[0] 8308 v_1 := v.Args[1] 8309 if v_1.Op != OpPPC64MOVDconst { 8310 break 8311 } 8312 c := v_1.AuxInt 8313 if !(isU32Bit(c)) { 8314 break 8315 } 8316 v.reset(OpPPC64XORconst) 8317 v.AuxInt = c 8318 v.AddArg(x) 8319 return true 8320 } 8321 // match: (XOR (MOVDconst [c]) x) 8322 // cond: isU32Bit(c) 8323 // result: (XORconst [c] x) 8324 for { 8325 _ = v.Args[1] 8326 v_0 := v.Args[0] 8327 if v_0.Op != OpPPC64MOVDconst { 8328 break 8329 } 8330 c := v_0.AuxInt 8331 x := v.Args[1] 8332 if !(isU32Bit(c)) { 8333 break 8334 } 8335 v.reset(OpPPC64XORconst) 8336 v.AuxInt = c 8337 v.AddArg(x) 8338 return true 8339 } 8340 return false 8341 } 8342 func rewriteValuePPC64_OpPPC64XORconst_0(v *Value) bool { 8343 // match: (XORconst [c] (XORconst [d] x)) 8344 // cond: 8345 // result: (XORconst [c^d] x) 8346 for { 8347 c := v.AuxInt 8348 v_0 := v.Args[0] 8349 if v_0.Op != OpPPC64XORconst { 8350 break 8351 } 8352 d := v_0.AuxInt 8353 x := v_0.Args[0] 8354 v.reset(OpPPC64XORconst) 8355 v.AuxInt = c ^ d 8356 v.AddArg(x) 8357 return true 8358 } 8359 // match: (XORconst [0] x) 8360 // cond: 8361 // result: x 8362 for { 8363 if v.AuxInt != 0 { 8364 break 8365 } 8366 x := v.Args[0] 8367 v.reset(OpCopy) 8368 v.Type = x.Type 8369 v.AddArg(x) 8370 return true 8371 } 8372 return false 8373 } 8374 func rewriteValuePPC64_OpPopCount16_0(v *Value) bool { 8375 b := v.Block 8376 _ = b 8377 typ := &b.Func.Config.Types 8378 _ = typ 8379 // match: (PopCount16 x) 8380 // cond: 8381 // result: (POPCNTW (MOVHZreg x)) 8382 for { 8383 x := v.Args[0] 8384 v.reset(OpPPC64POPCNTW) 8385 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64) 8386 v0.AddArg(x) 8387 v.AddArg(v0) 8388 return true 8389 } 8390 } 8391 func rewriteValuePPC64_OpPopCount32_0(v *Value) bool { 8392 b := v.Block 8393 _ = b 8394 typ := &b.Func.Config.Types 8395 _ = typ 8396 // match: (PopCount32 x) 8397 // cond: 8398 // result: (POPCNTW (MOVWZreg x)) 8399 for { 8400 x := v.Args[0] 8401 v.reset(OpPPC64POPCNTW) 8402 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) 8403 v0.AddArg(x) 8404 v.AddArg(v0) 8405 return true 8406 } 8407 } 8408 func rewriteValuePPC64_OpPopCount64_0(v *Value) bool { 8409 // match: (PopCount64 x) 8410 // cond: 8411 // result: (POPCNTD x) 8412 for { 8413 x := v.Args[0] 8414 v.reset(OpPPC64POPCNTD) 8415 v.AddArg(x) 8416 return true 8417 } 8418 } 8419 func rewriteValuePPC64_OpPopCount8_0(v *Value) bool { 8420 b := v.Block 8421 _ = b 8422 typ := &b.Func.Config.Types 8423 _ = typ 8424 // match: (PopCount8 x) 8425 // cond: 8426 // result: (POPCNTB (MOVBreg x)) 8427 for { 8428 x := v.Args[0] 8429 v.reset(OpPPC64POPCNTB) 8430 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64) 8431 v0.AddArg(x) 8432 v.AddArg(v0) 8433 return true 8434 } 8435 } 8436 func rewriteValuePPC64_OpRound32F_0(v *Value) bool { 8437 // match: (Round32F x) 8438 // cond: 8439 // result: (LoweredRound32F x) 8440 for { 8441 x := v.Args[0] 8442 v.reset(OpPPC64LoweredRound32F) 8443 v.AddArg(x) 8444 return true 8445 } 8446 } 8447 func rewriteValuePPC64_OpRound64F_0(v *Value) bool { 8448 // match: (Round64F x) 8449 // cond: 8450 // result: (LoweredRound64F x) 8451 for { 8452 x := v.Args[0] 8453 v.reset(OpPPC64LoweredRound64F) 8454 v.AddArg(x) 8455 return true 8456 } 8457 } 8458 func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool { 8459 b := v.Block 8460 _ = b 8461 typ := &b.Func.Config.Types 8462 _ = typ 8463 // match: (Rsh16Ux16 x y) 8464 // cond: 8465 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 8466 for { 8467 _ = v.Args[1] 8468 x := v.Args[0] 8469 y := v.Args[1] 8470 v.reset(OpPPC64SRW) 8471 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8472 v0.AddArg(x) 8473 v.AddArg(v0) 8474 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8475 v1.AddArg(y) 8476 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8477 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8478 v3.AuxInt = -16 8479 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 8480 v4.AddArg(y) 8481 v3.AddArg(v4) 8482 v2.AddArg(v3) 8483 v1.AddArg(v2) 8484 v.AddArg(v1) 8485 return true 8486 } 8487 } 8488 func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { 8489 b := v.Block 8490 _ = b 8491 typ := &b.Func.Config.Types 8492 _ = typ 8493 // match: (Rsh16Ux32 x (Const64 [c])) 8494 // cond: uint32(c) < 16 8495 // result: (SRWconst (ZeroExt16to32 x) [c]) 8496 for { 8497 _ = v.Args[1] 8498 x := v.Args[0] 8499 v_1 := v.Args[1] 8500 if v_1.Op != OpConst64 { 8501 break 8502 } 8503 c := v_1.AuxInt 8504 if !(uint32(c) < 16) { 8505 break 8506 } 8507 v.reset(OpPPC64SRWconst) 8508 v.AuxInt = c 8509 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8510 v0.AddArg(x) 8511 v.AddArg(v0) 8512 return true 8513 } 8514 // match: (Rsh16Ux32 x (MOVDconst [c])) 8515 // cond: uint32(c) < 16 8516 // result: (SRWconst (ZeroExt16to32 x) [c]) 8517 for { 8518 _ = v.Args[1] 8519 x := v.Args[0] 8520 v_1 := v.Args[1] 8521 if v_1.Op != OpPPC64MOVDconst { 8522 break 8523 } 8524 c := v_1.AuxInt 8525 if !(uint32(c) < 16) { 8526 break 8527 } 8528 v.reset(OpPPC64SRWconst) 8529 v.AuxInt = c 8530 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8531 v0.AddArg(x) 8532 v.AddArg(v0) 8533 return true 8534 } 8535 // match: (Rsh16Ux32 x y) 8536 // cond: 8537 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 8538 for { 8539 _ = v.Args[1] 8540 x := v.Args[0] 8541 y := v.Args[1] 8542 v.reset(OpPPC64SRW) 8543 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8544 v0.AddArg(x) 8545 v.AddArg(v0) 8546 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8547 v1.AddArg(y) 8548 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8549 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8550 v3.AuxInt = -16 8551 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 8552 v4.AddArg(y) 8553 v3.AddArg(v4) 8554 v2.AddArg(v3) 8555 v1.AddArg(v2) 8556 v.AddArg(v1) 8557 return true 8558 } 8559 } 8560 func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { 8561 b := v.Block 8562 _ = b 8563 typ := &b.Func.Config.Types 8564 _ = typ 8565 // match: (Rsh16Ux64 x (Const64 [c])) 8566 // cond: uint64(c) < 16 8567 // result: (SRWconst (ZeroExt16to32 x) [c]) 8568 for { 8569 _ = v.Args[1] 8570 x := v.Args[0] 8571 v_1 := v.Args[1] 8572 if v_1.Op != OpConst64 { 8573 break 8574 } 8575 c := v_1.AuxInt 8576 if !(uint64(c) < 16) { 8577 break 8578 } 8579 v.reset(OpPPC64SRWconst) 8580 v.AuxInt = c 8581 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8582 v0.AddArg(x) 8583 v.AddArg(v0) 8584 return true 8585 } 8586 // match: (Rsh16Ux64 _ (Const64 [c])) 8587 // cond: uint64(c) >= 16 8588 // result: (MOVDconst [0]) 8589 for { 8590 _ = v.Args[1] 8591 v_1 := v.Args[1] 8592 if v_1.Op != OpConst64 { 8593 break 8594 } 8595 c := v_1.AuxInt 8596 if !(uint64(c) >= 16) { 8597 break 8598 } 8599 v.reset(OpPPC64MOVDconst) 8600 v.AuxInt = 0 8601 return true 8602 } 8603 // match: (Rsh16Ux64 x (MOVDconst [c])) 8604 // cond: uint64(c) < 16 8605 // result: (SRWconst (ZeroExt16to32 x) [c]) 8606 for { 8607 _ = v.Args[1] 8608 x := v.Args[0] 8609 v_1 := v.Args[1] 8610 if v_1.Op != OpPPC64MOVDconst { 8611 break 8612 } 8613 c := v_1.AuxInt 8614 if !(uint64(c) < 16) { 8615 break 8616 } 8617 v.reset(OpPPC64SRWconst) 8618 v.AuxInt = c 8619 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8620 v0.AddArg(x) 8621 v.AddArg(v0) 8622 return true 8623 } 8624 // match: (Rsh16Ux64 x y) 8625 // cond: 8626 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 8627 for { 8628 _ = v.Args[1] 8629 x := v.Args[0] 8630 y := v.Args[1] 8631 v.reset(OpPPC64SRW) 8632 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8633 v0.AddArg(x) 8634 v.AddArg(v0) 8635 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8636 v1.AddArg(y) 8637 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8638 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8639 v3.AuxInt = -16 8640 v3.AddArg(y) 8641 v2.AddArg(v3) 8642 v1.AddArg(v2) 8643 v.AddArg(v1) 8644 return true 8645 } 8646 } 8647 func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool { 8648 b := v.Block 8649 _ = b 8650 typ := &b.Func.Config.Types 8651 _ = typ 8652 // match: (Rsh16Ux8 x y) 8653 // cond: 8654 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 8655 for { 8656 _ = v.Args[1] 8657 x := v.Args[0] 8658 y := v.Args[1] 8659 v.reset(OpPPC64SRW) 8660 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 8661 v0.AddArg(x) 8662 v.AddArg(v0) 8663 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8664 v1.AddArg(y) 8665 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8666 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8667 v3.AuxInt = -16 8668 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 8669 v4.AddArg(y) 8670 v3.AddArg(v4) 8671 v2.AddArg(v3) 8672 v1.AddArg(v2) 8673 v.AddArg(v1) 8674 return true 8675 } 8676 } 8677 func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool { 8678 b := v.Block 8679 _ = b 8680 typ := &b.Func.Config.Types 8681 _ = typ 8682 // match: (Rsh16x16 x y) 8683 // cond: 8684 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 8685 for { 8686 _ = v.Args[1] 8687 x := v.Args[0] 8688 y := v.Args[1] 8689 v.reset(OpPPC64SRAW) 8690 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8691 v0.AddArg(x) 8692 v.AddArg(v0) 8693 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8694 v1.AddArg(y) 8695 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8696 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8697 v3.AuxInt = -16 8698 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 8699 v4.AddArg(y) 8700 v3.AddArg(v4) 8701 v2.AddArg(v3) 8702 v1.AddArg(v2) 8703 v.AddArg(v1) 8704 return true 8705 } 8706 } 8707 func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { 8708 b := v.Block 8709 _ = b 8710 typ := &b.Func.Config.Types 8711 _ = typ 8712 // match: (Rsh16x32 x (Const64 [c])) 8713 // cond: uint32(c) < 16 8714 // result: (SRAWconst (SignExt16to32 x) [c]) 8715 for { 8716 _ = v.Args[1] 8717 x := v.Args[0] 8718 v_1 := v.Args[1] 8719 if v_1.Op != OpConst64 { 8720 break 8721 } 8722 c := v_1.AuxInt 8723 if !(uint32(c) < 16) { 8724 break 8725 } 8726 v.reset(OpPPC64SRAWconst) 8727 v.AuxInt = c 8728 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8729 v0.AddArg(x) 8730 v.AddArg(v0) 8731 return true 8732 } 8733 // match: (Rsh16x32 x (MOVDconst [c])) 8734 // cond: uint32(c) < 16 8735 // result: (SRAWconst (SignExt16to32 x) [c]) 8736 for { 8737 _ = v.Args[1] 8738 x := v.Args[0] 8739 v_1 := v.Args[1] 8740 if v_1.Op != OpPPC64MOVDconst { 8741 break 8742 } 8743 c := v_1.AuxInt 8744 if !(uint32(c) < 16) { 8745 break 8746 } 8747 v.reset(OpPPC64SRAWconst) 8748 v.AuxInt = c 8749 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8750 v0.AddArg(x) 8751 v.AddArg(v0) 8752 return true 8753 } 8754 // match: (Rsh16x32 x y) 8755 // cond: 8756 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 8757 for { 8758 _ = v.Args[1] 8759 x := v.Args[0] 8760 y := v.Args[1] 8761 v.reset(OpPPC64SRAW) 8762 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8763 v0.AddArg(x) 8764 v.AddArg(v0) 8765 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8766 v1.AddArg(y) 8767 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8768 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8769 v3.AuxInt = -16 8770 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 8771 v4.AddArg(y) 8772 v3.AddArg(v4) 8773 v2.AddArg(v3) 8774 v1.AddArg(v2) 8775 v.AddArg(v1) 8776 return true 8777 } 8778 } 8779 func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { 8780 b := v.Block 8781 _ = b 8782 typ := &b.Func.Config.Types 8783 _ = typ 8784 // match: (Rsh16x64 x (Const64 [c])) 8785 // cond: uint64(c) < 16 8786 // result: (SRAWconst (SignExt16to32 x) [c]) 8787 for { 8788 _ = v.Args[1] 8789 x := v.Args[0] 8790 v_1 := v.Args[1] 8791 if v_1.Op != OpConst64 { 8792 break 8793 } 8794 c := v_1.AuxInt 8795 if !(uint64(c) < 16) { 8796 break 8797 } 8798 v.reset(OpPPC64SRAWconst) 8799 v.AuxInt = c 8800 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8801 v0.AddArg(x) 8802 v.AddArg(v0) 8803 return true 8804 } 8805 // match: (Rsh16x64 x (Const64 [c])) 8806 // cond: uint64(c) >= 16 8807 // result: (SRAWconst (SignExt16to32 x) [63]) 8808 for { 8809 _ = v.Args[1] 8810 x := v.Args[0] 8811 v_1 := v.Args[1] 8812 if v_1.Op != OpConst64 { 8813 break 8814 } 8815 c := v_1.AuxInt 8816 if !(uint64(c) >= 16) { 8817 break 8818 } 8819 v.reset(OpPPC64SRAWconst) 8820 v.AuxInt = 63 8821 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8822 v0.AddArg(x) 8823 v.AddArg(v0) 8824 return true 8825 } 8826 // match: (Rsh16x64 x (MOVDconst [c])) 8827 // cond: uint64(c) < 16 8828 // result: (SRAWconst (SignExt16to32 x) [c]) 8829 for { 8830 _ = v.Args[1] 8831 x := v.Args[0] 8832 v_1 := v.Args[1] 8833 if v_1.Op != OpPPC64MOVDconst { 8834 break 8835 } 8836 c := v_1.AuxInt 8837 if !(uint64(c) < 16) { 8838 break 8839 } 8840 v.reset(OpPPC64SRAWconst) 8841 v.AuxInt = c 8842 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8843 v0.AddArg(x) 8844 v.AddArg(v0) 8845 return true 8846 } 8847 // match: (Rsh16x64 x y) 8848 // cond: 8849 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 8850 for { 8851 _ = v.Args[1] 8852 x := v.Args[0] 8853 y := v.Args[1] 8854 v.reset(OpPPC64SRAW) 8855 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8856 v0.AddArg(x) 8857 v.AddArg(v0) 8858 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8859 v1.AddArg(y) 8860 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8861 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8862 v3.AuxInt = -16 8863 v3.AddArg(y) 8864 v2.AddArg(v3) 8865 v1.AddArg(v2) 8866 v.AddArg(v1) 8867 return true 8868 } 8869 } 8870 func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool { 8871 b := v.Block 8872 _ = b 8873 typ := &b.Func.Config.Types 8874 _ = typ 8875 // match: (Rsh16x8 x y) 8876 // cond: 8877 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 8878 for { 8879 _ = v.Args[1] 8880 x := v.Args[0] 8881 y := v.Args[1] 8882 v.reset(OpPPC64SRAW) 8883 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 8884 v0.AddArg(x) 8885 v.AddArg(v0) 8886 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8887 v1.AddArg(y) 8888 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8889 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8890 v3.AuxInt = -16 8891 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 8892 v4.AddArg(y) 8893 v3.AddArg(v4) 8894 v2.AddArg(v3) 8895 v1.AddArg(v2) 8896 v.AddArg(v1) 8897 return true 8898 } 8899 } 8900 func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool { 8901 b := v.Block 8902 _ = b 8903 typ := &b.Func.Config.Types 8904 _ = typ 8905 // match: (Rsh32Ux16 x y) 8906 // cond: 8907 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 8908 for { 8909 _ = v.Args[1] 8910 x := v.Args[0] 8911 y := v.Args[1] 8912 v.reset(OpPPC64SRW) 8913 v.AddArg(x) 8914 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8915 v0.AddArg(y) 8916 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8917 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8918 v2.AuxInt = -32 8919 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 8920 v3.AddArg(y) 8921 v2.AddArg(v3) 8922 v1.AddArg(v2) 8923 v0.AddArg(v1) 8924 v.AddArg(v0) 8925 return true 8926 } 8927 } 8928 func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { 8929 b := v.Block 8930 _ = b 8931 typ := &b.Func.Config.Types 8932 _ = typ 8933 // match: (Rsh32Ux32 x (Const64 [c])) 8934 // cond: uint32(c) < 32 8935 // result: (SRWconst x [c]) 8936 for { 8937 _ = v.Args[1] 8938 x := v.Args[0] 8939 v_1 := v.Args[1] 8940 if v_1.Op != OpConst64 { 8941 break 8942 } 8943 c := v_1.AuxInt 8944 if !(uint32(c) < 32) { 8945 break 8946 } 8947 v.reset(OpPPC64SRWconst) 8948 v.AuxInt = c 8949 v.AddArg(x) 8950 return true 8951 } 8952 // match: (Rsh32Ux32 x (MOVDconst [c])) 8953 // cond: uint32(c) < 32 8954 // result: (SRWconst x [c]) 8955 for { 8956 _ = v.Args[1] 8957 x := v.Args[0] 8958 v_1 := v.Args[1] 8959 if v_1.Op != OpPPC64MOVDconst { 8960 break 8961 } 8962 c := v_1.AuxInt 8963 if !(uint32(c) < 32) { 8964 break 8965 } 8966 v.reset(OpPPC64SRWconst) 8967 v.AuxInt = c 8968 v.AddArg(x) 8969 return true 8970 } 8971 // match: (Rsh32Ux32 x y) 8972 // cond: 8973 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 8974 for { 8975 _ = v.Args[1] 8976 x := v.Args[0] 8977 y := v.Args[1] 8978 v.reset(OpPPC64SRW) 8979 v.AddArg(x) 8980 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 8981 v0.AddArg(y) 8982 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 8983 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 8984 v2.AuxInt = -32 8985 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 8986 v3.AddArg(y) 8987 v2.AddArg(v3) 8988 v1.AddArg(v2) 8989 v0.AddArg(v1) 8990 v.AddArg(v0) 8991 return true 8992 } 8993 } 8994 func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { 8995 b := v.Block 8996 _ = b 8997 typ := &b.Func.Config.Types 8998 _ = typ 8999 // match: (Rsh32Ux64 x (Const64 [c])) 9000 // cond: uint64(c) < 32 9001 // result: (SRWconst x [c]) 9002 for { 9003 _ = v.Args[1] 9004 x := v.Args[0] 9005 v_1 := v.Args[1] 9006 if v_1.Op != OpConst64 { 9007 break 9008 } 9009 c := v_1.AuxInt 9010 if !(uint64(c) < 32) { 9011 break 9012 } 9013 v.reset(OpPPC64SRWconst) 9014 v.AuxInt = c 9015 v.AddArg(x) 9016 return true 9017 } 9018 // match: (Rsh32Ux64 _ (Const64 [c])) 9019 // cond: uint64(c) >= 32 9020 // result: (MOVDconst [0]) 9021 for { 9022 _ = v.Args[1] 9023 v_1 := v.Args[1] 9024 if v_1.Op != OpConst64 { 9025 break 9026 } 9027 c := v_1.AuxInt 9028 if !(uint64(c) >= 32) { 9029 break 9030 } 9031 v.reset(OpPPC64MOVDconst) 9032 v.AuxInt = 0 9033 return true 9034 } 9035 // match: (Rsh32Ux64 x (MOVDconst [c])) 9036 // cond: uint64(c) < 32 9037 // result: (SRWconst x [c]) 9038 for { 9039 _ = v.Args[1] 9040 x := v.Args[0] 9041 v_1 := v.Args[1] 9042 if v_1.Op != OpPPC64MOVDconst { 9043 break 9044 } 9045 c := v_1.AuxInt 9046 if !(uint64(c) < 32) { 9047 break 9048 } 9049 v.reset(OpPPC64SRWconst) 9050 v.AuxInt = c 9051 v.AddArg(x) 9052 return true 9053 } 9054 // match: (Rsh32Ux64 x y) 9055 // cond: 9056 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 9057 for { 9058 _ = v.Args[1] 9059 x := v.Args[0] 9060 y := v.Args[1] 9061 v.reset(OpPPC64SRW) 9062 v.AddArg(x) 9063 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9064 v0.AddArg(y) 9065 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9066 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9067 v2.AuxInt = -32 9068 v2.AddArg(y) 9069 v1.AddArg(v2) 9070 v0.AddArg(v1) 9071 v.AddArg(v0) 9072 return true 9073 } 9074 } 9075 func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool { 9076 b := v.Block 9077 _ = b 9078 typ := &b.Func.Config.Types 9079 _ = typ 9080 // match: (Rsh32Ux8 x y) 9081 // cond: 9082 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 9083 for { 9084 _ = v.Args[1] 9085 x := v.Args[0] 9086 y := v.Args[1] 9087 v.reset(OpPPC64SRW) 9088 v.AddArg(x) 9089 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9090 v0.AddArg(y) 9091 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9092 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9093 v2.AuxInt = -32 9094 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 9095 v3.AddArg(y) 9096 v2.AddArg(v3) 9097 v1.AddArg(v2) 9098 v0.AddArg(v1) 9099 v.AddArg(v0) 9100 return true 9101 } 9102 } 9103 func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool { 9104 b := v.Block 9105 _ = b 9106 typ := &b.Func.Config.Types 9107 _ = typ 9108 // match: (Rsh32x16 x y) 9109 // cond: 9110 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 9111 for { 9112 _ = v.Args[1] 9113 x := v.Args[0] 9114 y := v.Args[1] 9115 v.reset(OpPPC64SRAW) 9116 v.AddArg(x) 9117 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9118 v0.AddArg(y) 9119 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9120 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9121 v2.AuxInt = -32 9122 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 9123 v3.AddArg(y) 9124 v2.AddArg(v3) 9125 v1.AddArg(v2) 9126 v0.AddArg(v1) 9127 v.AddArg(v0) 9128 return true 9129 } 9130 } 9131 func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { 9132 b := v.Block 9133 _ = b 9134 typ := &b.Func.Config.Types 9135 _ = typ 9136 // match: (Rsh32x32 x (Const64 [c])) 9137 // cond: uint32(c) < 32 9138 // result: (SRAWconst x [c]) 9139 for { 9140 _ = v.Args[1] 9141 x := v.Args[0] 9142 v_1 := v.Args[1] 9143 if v_1.Op != OpConst64 { 9144 break 9145 } 9146 c := v_1.AuxInt 9147 if !(uint32(c) < 32) { 9148 break 9149 } 9150 v.reset(OpPPC64SRAWconst) 9151 v.AuxInt = c 9152 v.AddArg(x) 9153 return true 9154 } 9155 // match: (Rsh32x32 x (MOVDconst [c])) 9156 // cond: uint32(c) < 32 9157 // result: (SRAWconst x [c]) 9158 for { 9159 _ = v.Args[1] 9160 x := v.Args[0] 9161 v_1 := v.Args[1] 9162 if v_1.Op != OpPPC64MOVDconst { 9163 break 9164 } 9165 c := v_1.AuxInt 9166 if !(uint32(c) < 32) { 9167 break 9168 } 9169 v.reset(OpPPC64SRAWconst) 9170 v.AuxInt = c 9171 v.AddArg(x) 9172 return true 9173 } 9174 // match: (Rsh32x32 x y) 9175 // cond: 9176 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 9177 for { 9178 _ = v.Args[1] 9179 x := v.Args[0] 9180 y := v.Args[1] 9181 v.reset(OpPPC64SRAW) 9182 v.AddArg(x) 9183 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9184 v0.AddArg(y) 9185 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9186 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9187 v2.AuxInt = -32 9188 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 9189 v3.AddArg(y) 9190 v2.AddArg(v3) 9191 v1.AddArg(v2) 9192 v0.AddArg(v1) 9193 v.AddArg(v0) 9194 return true 9195 } 9196 } 9197 func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { 9198 b := v.Block 9199 _ = b 9200 typ := &b.Func.Config.Types 9201 _ = typ 9202 // match: (Rsh32x64 x (Const64 [c])) 9203 // cond: uint64(c) < 32 9204 // result: (SRAWconst x [c]) 9205 for { 9206 _ = v.Args[1] 9207 x := v.Args[0] 9208 v_1 := v.Args[1] 9209 if v_1.Op != OpConst64 { 9210 break 9211 } 9212 c := v_1.AuxInt 9213 if !(uint64(c) < 32) { 9214 break 9215 } 9216 v.reset(OpPPC64SRAWconst) 9217 v.AuxInt = c 9218 v.AddArg(x) 9219 return true 9220 } 9221 // match: (Rsh32x64 x (Const64 [c])) 9222 // cond: uint64(c) >= 32 9223 // result: (SRAWconst x [63]) 9224 for { 9225 _ = v.Args[1] 9226 x := v.Args[0] 9227 v_1 := v.Args[1] 9228 if v_1.Op != OpConst64 { 9229 break 9230 } 9231 c := v_1.AuxInt 9232 if !(uint64(c) >= 32) { 9233 break 9234 } 9235 v.reset(OpPPC64SRAWconst) 9236 v.AuxInt = 63 9237 v.AddArg(x) 9238 return true 9239 } 9240 // match: (Rsh32x64 x (MOVDconst [c])) 9241 // cond: uint64(c) < 32 9242 // result: (SRAWconst x [c]) 9243 for { 9244 _ = v.Args[1] 9245 x := v.Args[0] 9246 v_1 := v.Args[1] 9247 if v_1.Op != OpPPC64MOVDconst { 9248 break 9249 } 9250 c := v_1.AuxInt 9251 if !(uint64(c) < 32) { 9252 break 9253 } 9254 v.reset(OpPPC64SRAWconst) 9255 v.AuxInt = c 9256 v.AddArg(x) 9257 return true 9258 } 9259 // match: (Rsh32x64 x y) 9260 // cond: 9261 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 9262 for { 9263 _ = v.Args[1] 9264 x := v.Args[0] 9265 y := v.Args[1] 9266 v.reset(OpPPC64SRAW) 9267 v.AddArg(x) 9268 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9269 v0.AddArg(y) 9270 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9271 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9272 v2.AuxInt = -32 9273 v2.AddArg(y) 9274 v1.AddArg(v2) 9275 v0.AddArg(v1) 9276 v.AddArg(v0) 9277 return true 9278 } 9279 } 9280 func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool { 9281 b := v.Block 9282 _ = b 9283 typ := &b.Func.Config.Types 9284 _ = typ 9285 // match: (Rsh32x8 x y) 9286 // cond: 9287 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 9288 for { 9289 _ = v.Args[1] 9290 x := v.Args[0] 9291 y := v.Args[1] 9292 v.reset(OpPPC64SRAW) 9293 v.AddArg(x) 9294 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9295 v0.AddArg(y) 9296 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9297 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9298 v2.AuxInt = -32 9299 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 9300 v3.AddArg(y) 9301 v2.AddArg(v3) 9302 v1.AddArg(v2) 9303 v0.AddArg(v1) 9304 v.AddArg(v0) 9305 return true 9306 } 9307 } 9308 func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool { 9309 b := v.Block 9310 _ = b 9311 typ := &b.Func.Config.Types 9312 _ = typ 9313 // match: (Rsh64Ux16 x y) 9314 // cond: 9315 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 9316 for { 9317 _ = v.Args[1] 9318 x := v.Args[0] 9319 y := v.Args[1] 9320 v.reset(OpPPC64SRD) 9321 v.AddArg(x) 9322 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9323 v0.AddArg(y) 9324 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9325 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9326 v2.AuxInt = -64 9327 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 9328 v3.AddArg(y) 9329 v2.AddArg(v3) 9330 v1.AddArg(v2) 9331 v0.AddArg(v1) 9332 v.AddArg(v0) 9333 return true 9334 } 9335 } 9336 func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { 9337 b := v.Block 9338 _ = b 9339 typ := &b.Func.Config.Types 9340 _ = typ 9341 // match: (Rsh64Ux32 x (Const64 [c])) 9342 // cond: uint32(c) < 64 9343 // result: (SRDconst x [c]) 9344 for { 9345 _ = v.Args[1] 9346 x := v.Args[0] 9347 v_1 := v.Args[1] 9348 if v_1.Op != OpConst64 { 9349 break 9350 } 9351 c := v_1.AuxInt 9352 if !(uint32(c) < 64) { 9353 break 9354 } 9355 v.reset(OpPPC64SRDconst) 9356 v.AuxInt = c 9357 v.AddArg(x) 9358 return true 9359 } 9360 // match: (Rsh64Ux32 x (MOVDconst [c])) 9361 // cond: uint32(c) < 64 9362 // result: (SRDconst x [c]) 9363 for { 9364 _ = v.Args[1] 9365 x := v.Args[0] 9366 v_1 := v.Args[1] 9367 if v_1.Op != OpPPC64MOVDconst { 9368 break 9369 } 9370 c := v_1.AuxInt 9371 if !(uint32(c) < 64) { 9372 break 9373 } 9374 v.reset(OpPPC64SRDconst) 9375 v.AuxInt = c 9376 v.AddArg(x) 9377 return true 9378 } 9379 // match: (Rsh64Ux32 x y) 9380 // cond: 9381 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 9382 for { 9383 _ = v.Args[1] 9384 x := v.Args[0] 9385 y := v.Args[1] 9386 v.reset(OpPPC64SRD) 9387 v.AddArg(x) 9388 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9389 v0.AddArg(y) 9390 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9391 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9392 v2.AuxInt = -64 9393 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 9394 v3.AddArg(y) 9395 v2.AddArg(v3) 9396 v1.AddArg(v2) 9397 v0.AddArg(v1) 9398 v.AddArg(v0) 9399 return true 9400 } 9401 } 9402 func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { 9403 b := v.Block 9404 _ = b 9405 typ := &b.Func.Config.Types 9406 _ = typ 9407 // match: (Rsh64Ux64 x (Const64 [c])) 9408 // cond: uint64(c) < 64 9409 // result: (SRDconst x [c]) 9410 for { 9411 _ = v.Args[1] 9412 x := v.Args[0] 9413 v_1 := v.Args[1] 9414 if v_1.Op != OpConst64 { 9415 break 9416 } 9417 c := v_1.AuxInt 9418 if !(uint64(c) < 64) { 9419 break 9420 } 9421 v.reset(OpPPC64SRDconst) 9422 v.AuxInt = c 9423 v.AddArg(x) 9424 return true 9425 } 9426 // match: (Rsh64Ux64 _ (Const64 [c])) 9427 // cond: uint64(c) >= 64 9428 // result: (MOVDconst [0]) 9429 for { 9430 _ = v.Args[1] 9431 v_1 := v.Args[1] 9432 if v_1.Op != OpConst64 { 9433 break 9434 } 9435 c := v_1.AuxInt 9436 if !(uint64(c) >= 64) { 9437 break 9438 } 9439 v.reset(OpPPC64MOVDconst) 9440 v.AuxInt = 0 9441 return true 9442 } 9443 // match: (Rsh64Ux64 x (MOVDconst [c])) 9444 // cond: uint64(c) < 64 9445 // result: (SRDconst x [c]) 9446 for { 9447 _ = v.Args[1] 9448 x := v.Args[0] 9449 v_1 := v.Args[1] 9450 if v_1.Op != OpPPC64MOVDconst { 9451 break 9452 } 9453 c := v_1.AuxInt 9454 if !(uint64(c) < 64) { 9455 break 9456 } 9457 v.reset(OpPPC64SRDconst) 9458 v.AuxInt = c 9459 v.AddArg(x) 9460 return true 9461 } 9462 // match: (Rsh64Ux64 x y) 9463 // cond: 9464 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 9465 for { 9466 _ = v.Args[1] 9467 x := v.Args[0] 9468 y := v.Args[1] 9469 v.reset(OpPPC64SRD) 9470 v.AddArg(x) 9471 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9472 v0.AddArg(y) 9473 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9474 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9475 v2.AuxInt = -64 9476 v2.AddArg(y) 9477 v1.AddArg(v2) 9478 v0.AddArg(v1) 9479 v.AddArg(v0) 9480 return true 9481 } 9482 } 9483 func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool { 9484 b := v.Block 9485 _ = b 9486 typ := &b.Func.Config.Types 9487 _ = typ 9488 // match: (Rsh64Ux8 x y) 9489 // cond: 9490 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 9491 for { 9492 _ = v.Args[1] 9493 x := v.Args[0] 9494 y := v.Args[1] 9495 v.reset(OpPPC64SRD) 9496 v.AddArg(x) 9497 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9498 v0.AddArg(y) 9499 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9500 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9501 v2.AuxInt = -64 9502 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 9503 v3.AddArg(y) 9504 v2.AddArg(v3) 9505 v1.AddArg(v2) 9506 v0.AddArg(v1) 9507 v.AddArg(v0) 9508 return true 9509 } 9510 } 9511 func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool { 9512 b := v.Block 9513 _ = b 9514 typ := &b.Func.Config.Types 9515 _ = typ 9516 // match: (Rsh64x16 x y) 9517 // cond: 9518 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 9519 for { 9520 _ = v.Args[1] 9521 x := v.Args[0] 9522 y := v.Args[1] 9523 v.reset(OpPPC64SRAD) 9524 v.AddArg(x) 9525 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9526 v0.AddArg(y) 9527 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9528 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9529 v2.AuxInt = -64 9530 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 9531 v3.AddArg(y) 9532 v2.AddArg(v3) 9533 v1.AddArg(v2) 9534 v0.AddArg(v1) 9535 v.AddArg(v0) 9536 return true 9537 } 9538 } 9539 func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { 9540 b := v.Block 9541 _ = b 9542 typ := &b.Func.Config.Types 9543 _ = typ 9544 // match: (Rsh64x32 x (Const64 [c])) 9545 // cond: uint32(c) < 64 9546 // result: (SRADconst x [c]) 9547 for { 9548 _ = v.Args[1] 9549 x := v.Args[0] 9550 v_1 := v.Args[1] 9551 if v_1.Op != OpConst64 { 9552 break 9553 } 9554 c := v_1.AuxInt 9555 if !(uint32(c) < 64) { 9556 break 9557 } 9558 v.reset(OpPPC64SRADconst) 9559 v.AuxInt = c 9560 v.AddArg(x) 9561 return true 9562 } 9563 // match: (Rsh64x32 x (MOVDconst [c])) 9564 // cond: uint32(c) < 64 9565 // result: (SRADconst x [c]) 9566 for { 9567 _ = v.Args[1] 9568 x := v.Args[0] 9569 v_1 := v.Args[1] 9570 if v_1.Op != OpPPC64MOVDconst { 9571 break 9572 } 9573 c := v_1.AuxInt 9574 if !(uint32(c) < 64) { 9575 break 9576 } 9577 v.reset(OpPPC64SRADconst) 9578 v.AuxInt = c 9579 v.AddArg(x) 9580 return true 9581 } 9582 // match: (Rsh64x32 x y) 9583 // cond: 9584 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 9585 for { 9586 _ = v.Args[1] 9587 x := v.Args[0] 9588 y := v.Args[1] 9589 v.reset(OpPPC64SRAD) 9590 v.AddArg(x) 9591 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9592 v0.AddArg(y) 9593 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9594 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9595 v2.AuxInt = -64 9596 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 9597 v3.AddArg(y) 9598 v2.AddArg(v3) 9599 v1.AddArg(v2) 9600 v0.AddArg(v1) 9601 v.AddArg(v0) 9602 return true 9603 } 9604 } 9605 func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { 9606 b := v.Block 9607 _ = b 9608 typ := &b.Func.Config.Types 9609 _ = typ 9610 // match: (Rsh64x64 x (Const64 [c])) 9611 // cond: uint64(c) < 64 9612 // result: (SRADconst x [c]) 9613 for { 9614 _ = v.Args[1] 9615 x := v.Args[0] 9616 v_1 := v.Args[1] 9617 if v_1.Op != OpConst64 { 9618 break 9619 } 9620 c := v_1.AuxInt 9621 if !(uint64(c) < 64) { 9622 break 9623 } 9624 v.reset(OpPPC64SRADconst) 9625 v.AuxInt = c 9626 v.AddArg(x) 9627 return true 9628 } 9629 // match: (Rsh64x64 x (Const64 [c])) 9630 // cond: uint64(c) >= 64 9631 // result: (SRADconst x [63]) 9632 for { 9633 _ = v.Args[1] 9634 x := v.Args[0] 9635 v_1 := v.Args[1] 9636 if v_1.Op != OpConst64 { 9637 break 9638 } 9639 c := v_1.AuxInt 9640 if !(uint64(c) >= 64) { 9641 break 9642 } 9643 v.reset(OpPPC64SRADconst) 9644 v.AuxInt = 63 9645 v.AddArg(x) 9646 return true 9647 } 9648 // match: (Rsh64x64 x (MOVDconst [c])) 9649 // cond: uint64(c) < 64 9650 // result: (SRADconst x [c]) 9651 for { 9652 _ = v.Args[1] 9653 x := v.Args[0] 9654 v_1 := v.Args[1] 9655 if v_1.Op != OpPPC64MOVDconst { 9656 break 9657 } 9658 c := v_1.AuxInt 9659 if !(uint64(c) < 64) { 9660 break 9661 } 9662 v.reset(OpPPC64SRADconst) 9663 v.AuxInt = c 9664 v.AddArg(x) 9665 return true 9666 } 9667 // match: (Rsh64x64 x y) 9668 // cond: 9669 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 9670 for { 9671 _ = v.Args[1] 9672 x := v.Args[0] 9673 y := v.Args[1] 9674 v.reset(OpPPC64SRAD) 9675 v.AddArg(x) 9676 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9677 v0.AddArg(y) 9678 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9679 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9680 v2.AuxInt = -64 9681 v2.AddArg(y) 9682 v1.AddArg(v2) 9683 v0.AddArg(v1) 9684 v.AddArg(v0) 9685 return true 9686 } 9687 } 9688 func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool { 9689 b := v.Block 9690 _ = b 9691 typ := &b.Func.Config.Types 9692 _ = typ 9693 // match: (Rsh64x8 x y) 9694 // cond: 9695 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 9696 for { 9697 _ = v.Args[1] 9698 x := v.Args[0] 9699 y := v.Args[1] 9700 v.reset(OpPPC64SRAD) 9701 v.AddArg(x) 9702 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9703 v0.AddArg(y) 9704 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9705 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9706 v2.AuxInt = -64 9707 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 9708 v3.AddArg(y) 9709 v2.AddArg(v3) 9710 v1.AddArg(v2) 9711 v0.AddArg(v1) 9712 v.AddArg(v0) 9713 return true 9714 } 9715 } 9716 func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool { 9717 b := v.Block 9718 _ = b 9719 typ := &b.Func.Config.Types 9720 _ = typ 9721 // match: (Rsh8Ux16 x y) 9722 // cond: 9723 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 9724 for { 9725 _ = v.Args[1] 9726 x := v.Args[0] 9727 y := v.Args[1] 9728 v.reset(OpPPC64SRW) 9729 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9730 v0.AddArg(x) 9731 v.AddArg(v0) 9732 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9733 v1.AddArg(y) 9734 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9735 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9736 v3.AuxInt = -8 9737 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 9738 v4.AddArg(y) 9739 v3.AddArg(v4) 9740 v2.AddArg(v3) 9741 v1.AddArg(v2) 9742 v.AddArg(v1) 9743 return true 9744 } 9745 } 9746 func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { 9747 b := v.Block 9748 _ = b 9749 typ := &b.Func.Config.Types 9750 _ = typ 9751 // match: (Rsh8Ux32 x (Const64 [c])) 9752 // cond: uint32(c) < 8 9753 // result: (SRWconst (ZeroExt8to32 x) [c]) 9754 for { 9755 _ = v.Args[1] 9756 x := v.Args[0] 9757 v_1 := v.Args[1] 9758 if v_1.Op != OpConst64 { 9759 break 9760 } 9761 c := v_1.AuxInt 9762 if !(uint32(c) < 8) { 9763 break 9764 } 9765 v.reset(OpPPC64SRWconst) 9766 v.AuxInt = c 9767 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9768 v0.AddArg(x) 9769 v.AddArg(v0) 9770 return true 9771 } 9772 // match: (Rsh8Ux32 x (MOVDconst [c])) 9773 // cond: uint32(c) < 8 9774 // result: (SRWconst (ZeroExt8to32 x) [c]) 9775 for { 9776 _ = v.Args[1] 9777 x := v.Args[0] 9778 v_1 := v.Args[1] 9779 if v_1.Op != OpPPC64MOVDconst { 9780 break 9781 } 9782 c := v_1.AuxInt 9783 if !(uint32(c) < 8) { 9784 break 9785 } 9786 v.reset(OpPPC64SRWconst) 9787 v.AuxInt = c 9788 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9789 v0.AddArg(x) 9790 v.AddArg(v0) 9791 return true 9792 } 9793 // match: (Rsh8Ux32 x y) 9794 // cond: 9795 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 9796 for { 9797 _ = v.Args[1] 9798 x := v.Args[0] 9799 y := v.Args[1] 9800 v.reset(OpPPC64SRW) 9801 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9802 v0.AddArg(x) 9803 v.AddArg(v0) 9804 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9805 v1.AddArg(y) 9806 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9807 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9808 v3.AuxInt = -8 9809 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 9810 v4.AddArg(y) 9811 v3.AddArg(v4) 9812 v2.AddArg(v3) 9813 v1.AddArg(v2) 9814 v.AddArg(v1) 9815 return true 9816 } 9817 } 9818 func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { 9819 b := v.Block 9820 _ = b 9821 typ := &b.Func.Config.Types 9822 _ = typ 9823 // match: (Rsh8Ux64 x (Const64 [c])) 9824 // cond: uint64(c) < 8 9825 // result: (SRWconst (ZeroExt8to32 x) [c]) 9826 for { 9827 _ = v.Args[1] 9828 x := v.Args[0] 9829 v_1 := v.Args[1] 9830 if v_1.Op != OpConst64 { 9831 break 9832 } 9833 c := v_1.AuxInt 9834 if !(uint64(c) < 8) { 9835 break 9836 } 9837 v.reset(OpPPC64SRWconst) 9838 v.AuxInt = c 9839 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9840 v0.AddArg(x) 9841 v.AddArg(v0) 9842 return true 9843 } 9844 // match: (Rsh8Ux64 _ (Const64 [c])) 9845 // cond: uint64(c) >= 8 9846 // result: (MOVDconst [0]) 9847 for { 9848 _ = v.Args[1] 9849 v_1 := v.Args[1] 9850 if v_1.Op != OpConst64 { 9851 break 9852 } 9853 c := v_1.AuxInt 9854 if !(uint64(c) >= 8) { 9855 break 9856 } 9857 v.reset(OpPPC64MOVDconst) 9858 v.AuxInt = 0 9859 return true 9860 } 9861 // match: (Rsh8Ux64 x (MOVDconst [c])) 9862 // cond: uint64(c) < 8 9863 // result: (SRWconst (ZeroExt8to32 x) [c]) 9864 for { 9865 _ = v.Args[1] 9866 x := v.Args[0] 9867 v_1 := v.Args[1] 9868 if v_1.Op != OpPPC64MOVDconst { 9869 break 9870 } 9871 c := v_1.AuxInt 9872 if !(uint64(c) < 8) { 9873 break 9874 } 9875 v.reset(OpPPC64SRWconst) 9876 v.AuxInt = c 9877 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9878 v0.AddArg(x) 9879 v.AddArg(v0) 9880 return true 9881 } 9882 // match: (Rsh8Ux64 x y) 9883 // cond: 9884 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 9885 for { 9886 _ = v.Args[1] 9887 x := v.Args[0] 9888 y := v.Args[1] 9889 v.reset(OpPPC64SRW) 9890 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9891 v0.AddArg(x) 9892 v.AddArg(v0) 9893 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9894 v1.AddArg(y) 9895 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9896 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9897 v3.AuxInt = -8 9898 v3.AddArg(y) 9899 v2.AddArg(v3) 9900 v1.AddArg(v2) 9901 v.AddArg(v1) 9902 return true 9903 } 9904 } 9905 func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool { 9906 b := v.Block 9907 _ = b 9908 typ := &b.Func.Config.Types 9909 _ = typ 9910 // match: (Rsh8Ux8 x y) 9911 // cond: 9912 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 9913 for { 9914 _ = v.Args[1] 9915 x := v.Args[0] 9916 y := v.Args[1] 9917 v.reset(OpPPC64SRW) 9918 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 9919 v0.AddArg(x) 9920 v.AddArg(v0) 9921 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9922 v1.AddArg(y) 9923 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9924 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9925 v3.AuxInt = -8 9926 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 9927 v4.AddArg(y) 9928 v3.AddArg(v4) 9929 v2.AddArg(v3) 9930 v1.AddArg(v2) 9931 v.AddArg(v1) 9932 return true 9933 } 9934 } 9935 func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool { 9936 b := v.Block 9937 _ = b 9938 typ := &b.Func.Config.Types 9939 _ = typ 9940 // match: (Rsh8x16 x y) 9941 // cond: 9942 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 9943 for { 9944 _ = v.Args[1] 9945 x := v.Args[0] 9946 y := v.Args[1] 9947 v.reset(OpPPC64SRAW) 9948 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 9949 v0.AddArg(x) 9950 v.AddArg(v0) 9951 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 9952 v1.AddArg(y) 9953 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 9954 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 9955 v3.AuxInt = -8 9956 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 9957 v4.AddArg(y) 9958 v3.AddArg(v4) 9959 v2.AddArg(v3) 9960 v1.AddArg(v2) 9961 v.AddArg(v1) 9962 return true 9963 } 9964 } 9965 func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { 9966 b := v.Block 9967 _ = b 9968 typ := &b.Func.Config.Types 9969 _ = typ 9970 // match: (Rsh8x32 x (Const64 [c])) 9971 // cond: uint32(c) < 8 9972 // result: (SRAWconst (SignExt8to32 x) [c]) 9973 for { 9974 _ = v.Args[1] 9975 x := v.Args[0] 9976 v_1 := v.Args[1] 9977 if v_1.Op != OpConst64 { 9978 break 9979 } 9980 c := v_1.AuxInt 9981 if !(uint32(c) < 8) { 9982 break 9983 } 9984 v.reset(OpPPC64SRAWconst) 9985 v.AuxInt = c 9986 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 9987 v0.AddArg(x) 9988 v.AddArg(v0) 9989 return true 9990 } 9991 // match: (Rsh8x32 x (MOVDconst [c])) 9992 // cond: uint32(c) < 8 9993 // result: (SRAWconst (SignExt8to32 x) [c]) 9994 for { 9995 _ = v.Args[1] 9996 x := v.Args[0] 9997 v_1 := v.Args[1] 9998 if v_1.Op != OpPPC64MOVDconst { 9999 break 10000 } 10001 c := v_1.AuxInt 10002 if !(uint32(c) < 8) { 10003 break 10004 } 10005 v.reset(OpPPC64SRAWconst) 10006 v.AuxInt = c 10007 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10008 v0.AddArg(x) 10009 v.AddArg(v0) 10010 return true 10011 } 10012 // match: (Rsh8x32 x y) 10013 // cond: 10014 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 10015 for { 10016 _ = v.Args[1] 10017 x := v.Args[0] 10018 y := v.Args[1] 10019 v.reset(OpPPC64SRAW) 10020 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10021 v0.AddArg(x) 10022 v.AddArg(v0) 10023 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 10024 v1.AddArg(y) 10025 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 10026 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 10027 v3.AuxInt = -8 10028 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 10029 v4.AddArg(y) 10030 v3.AddArg(v4) 10031 v2.AddArg(v3) 10032 v1.AddArg(v2) 10033 v.AddArg(v1) 10034 return true 10035 } 10036 } 10037 func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { 10038 b := v.Block 10039 _ = b 10040 typ := &b.Func.Config.Types 10041 _ = typ 10042 // match: (Rsh8x64 x (Const64 [c])) 10043 // cond: uint64(c) < 8 10044 // result: (SRAWconst (SignExt8to32 x) [c]) 10045 for { 10046 _ = v.Args[1] 10047 x := v.Args[0] 10048 v_1 := v.Args[1] 10049 if v_1.Op != OpConst64 { 10050 break 10051 } 10052 c := v_1.AuxInt 10053 if !(uint64(c) < 8) { 10054 break 10055 } 10056 v.reset(OpPPC64SRAWconst) 10057 v.AuxInt = c 10058 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10059 v0.AddArg(x) 10060 v.AddArg(v0) 10061 return true 10062 } 10063 // match: (Rsh8x64 x (Const64 [c])) 10064 // cond: uint64(c) >= 8 10065 // result: (SRAWconst (SignExt8to32 x) [63]) 10066 for { 10067 _ = v.Args[1] 10068 x := v.Args[0] 10069 v_1 := v.Args[1] 10070 if v_1.Op != OpConst64 { 10071 break 10072 } 10073 c := v_1.AuxInt 10074 if !(uint64(c) >= 8) { 10075 break 10076 } 10077 v.reset(OpPPC64SRAWconst) 10078 v.AuxInt = 63 10079 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10080 v0.AddArg(x) 10081 v.AddArg(v0) 10082 return true 10083 } 10084 // match: (Rsh8x64 x (MOVDconst [c])) 10085 // cond: uint64(c) < 8 10086 // result: (SRAWconst (SignExt8to32 x) [c]) 10087 for { 10088 _ = v.Args[1] 10089 x := v.Args[0] 10090 v_1 := v.Args[1] 10091 if v_1.Op != OpPPC64MOVDconst { 10092 break 10093 } 10094 c := v_1.AuxInt 10095 if !(uint64(c) < 8) { 10096 break 10097 } 10098 v.reset(OpPPC64SRAWconst) 10099 v.AuxInt = c 10100 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10101 v0.AddArg(x) 10102 v.AddArg(v0) 10103 return true 10104 } 10105 // match: (Rsh8x64 x y) 10106 // cond: 10107 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 10108 for { 10109 _ = v.Args[1] 10110 x := v.Args[0] 10111 y := v.Args[1] 10112 v.reset(OpPPC64SRAW) 10113 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10114 v0.AddArg(x) 10115 v.AddArg(v0) 10116 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 10117 v1.AddArg(y) 10118 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 10119 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 10120 v3.AuxInt = -8 10121 v3.AddArg(y) 10122 v2.AddArg(v3) 10123 v1.AddArg(v2) 10124 v.AddArg(v1) 10125 return true 10126 } 10127 } 10128 func rewriteValuePPC64_OpRsh8x8_0(v *Value) bool { 10129 b := v.Block 10130 _ = b 10131 typ := &b.Func.Config.Types 10132 _ = typ 10133 // match: (Rsh8x8 x y) 10134 // cond: 10135 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 10136 for { 10137 _ = v.Args[1] 10138 x := v.Args[0] 10139 y := v.Args[1] 10140 v.reset(OpPPC64SRAW) 10141 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 10142 v0.AddArg(x) 10143 v.AddArg(v0) 10144 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 10145 v1.AddArg(y) 10146 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 10147 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 10148 v3.AuxInt = -8 10149 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 10150 v4.AddArg(y) 10151 v3.AddArg(v4) 10152 v2.AddArg(v3) 10153 v1.AddArg(v2) 10154 v.AddArg(v1) 10155 return true 10156 } 10157 } 10158 func rewriteValuePPC64_OpSignExt16to32_0(v *Value) bool { 10159 // match: (SignExt16to32 x) 10160 // cond: 10161 // result: (MOVHreg x) 10162 for { 10163 x := v.Args[0] 10164 v.reset(OpPPC64MOVHreg) 10165 v.AddArg(x) 10166 return true 10167 } 10168 } 10169 func rewriteValuePPC64_OpSignExt16to64_0(v *Value) bool { 10170 // match: (SignExt16to64 x) 10171 // cond: 10172 // result: (MOVHreg x) 10173 for { 10174 x := v.Args[0] 10175 v.reset(OpPPC64MOVHreg) 10176 v.AddArg(x) 10177 return true 10178 } 10179 } 10180 func rewriteValuePPC64_OpSignExt32to64_0(v *Value) bool { 10181 // match: (SignExt32to64 x) 10182 // cond: 10183 // result: (MOVWreg x) 10184 for { 10185 x := v.Args[0] 10186 v.reset(OpPPC64MOVWreg) 10187 v.AddArg(x) 10188 return true 10189 } 10190 } 10191 func rewriteValuePPC64_OpSignExt8to16_0(v *Value) bool { 10192 // match: (SignExt8to16 x) 10193 // cond: 10194 // result: (MOVBreg x) 10195 for { 10196 x := v.Args[0] 10197 v.reset(OpPPC64MOVBreg) 10198 v.AddArg(x) 10199 return true 10200 } 10201 } 10202 func rewriteValuePPC64_OpSignExt8to32_0(v *Value) bool { 10203 // match: (SignExt8to32 x) 10204 // cond: 10205 // result: (MOVBreg x) 10206 for { 10207 x := v.Args[0] 10208 v.reset(OpPPC64MOVBreg) 10209 v.AddArg(x) 10210 return true 10211 } 10212 } 10213 func rewriteValuePPC64_OpSignExt8to64_0(v *Value) bool { 10214 // match: (SignExt8to64 x) 10215 // cond: 10216 // result: (MOVBreg x) 10217 for { 10218 x := v.Args[0] 10219 v.reset(OpPPC64MOVBreg) 10220 v.AddArg(x) 10221 return true 10222 } 10223 } 10224 func rewriteValuePPC64_OpSlicemask_0(v *Value) bool { 10225 b := v.Block 10226 _ = b 10227 // match: (Slicemask <t> x) 10228 // cond: 10229 // result: (SRADconst (NEG <t> x) [63]) 10230 for { 10231 t := v.Type 10232 x := v.Args[0] 10233 v.reset(OpPPC64SRADconst) 10234 v.AuxInt = 63 10235 v0 := b.NewValue0(v.Pos, OpPPC64NEG, t) 10236 v0.AddArg(x) 10237 v.AddArg(v0) 10238 return true 10239 } 10240 } 10241 func rewriteValuePPC64_OpSqrt_0(v *Value) bool { 10242 // match: (Sqrt x) 10243 // cond: 10244 // result: (FSQRT x) 10245 for { 10246 x := v.Args[0] 10247 v.reset(OpPPC64FSQRT) 10248 v.AddArg(x) 10249 return true 10250 } 10251 } 10252 func rewriteValuePPC64_OpStaticCall_0(v *Value) bool { 10253 // match: (StaticCall [argwid] {target} mem) 10254 // cond: 10255 // result: (CALLstatic [argwid] {target} mem) 10256 for { 10257 argwid := v.AuxInt 10258 target := v.Aux 10259 mem := v.Args[0] 10260 v.reset(OpPPC64CALLstatic) 10261 v.AuxInt = argwid 10262 v.Aux = target 10263 v.AddArg(mem) 10264 return true 10265 } 10266 } 10267 func rewriteValuePPC64_OpStore_0(v *Value) bool { 10268 // match: (Store {t} ptr val mem) 10269 // cond: t.(*types.Type).Size() == 8 && is64BitFloat(val.Type) 10270 // result: (FMOVDstore ptr val mem) 10271 for { 10272 t := v.Aux 10273 _ = v.Args[2] 10274 ptr := v.Args[0] 10275 val := v.Args[1] 10276 mem := v.Args[2] 10277 if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { 10278 break 10279 } 10280 v.reset(OpPPC64FMOVDstore) 10281 v.AddArg(ptr) 10282 v.AddArg(val) 10283 v.AddArg(mem) 10284 return true 10285 } 10286 // match: (Store {t} ptr val mem) 10287 // cond: t.(*types.Type).Size() == 8 && is32BitFloat(val.Type) 10288 // result: (FMOVDstore ptr val mem) 10289 for { 10290 t := v.Aux 10291 _ = v.Args[2] 10292 ptr := v.Args[0] 10293 val := v.Args[1] 10294 mem := v.Args[2] 10295 if !(t.(*types.Type).Size() == 8 && is32BitFloat(val.Type)) { 10296 break 10297 } 10298 v.reset(OpPPC64FMOVDstore) 10299 v.AddArg(ptr) 10300 v.AddArg(val) 10301 v.AddArg(mem) 10302 return true 10303 } 10304 // match: (Store {t} ptr val mem) 10305 // cond: t.(*types.Type).Size() == 4 && is32BitFloat(val.Type) 10306 // result: (FMOVSstore ptr val mem) 10307 for { 10308 t := v.Aux 10309 _ = v.Args[2] 10310 ptr := v.Args[0] 10311 val := v.Args[1] 10312 mem := v.Args[2] 10313 if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { 10314 break 10315 } 10316 v.reset(OpPPC64FMOVSstore) 10317 v.AddArg(ptr) 10318 v.AddArg(val) 10319 v.AddArg(mem) 10320 return true 10321 } 10322 // match: (Store {t} ptr val mem) 10323 // cond: t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type)) 10324 // result: (MOVDstore ptr val mem) 10325 for { 10326 t := v.Aux 10327 _ = v.Args[2] 10328 ptr := v.Args[0] 10329 val := v.Args[1] 10330 mem := v.Args[2] 10331 if !(t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type))) { 10332 break 10333 } 10334 v.reset(OpPPC64MOVDstore) 10335 v.AddArg(ptr) 10336 v.AddArg(val) 10337 v.AddArg(mem) 10338 return true 10339 } 10340 // match: (Store {t} ptr val mem) 10341 // cond: t.(*types.Type).Size() == 4 && is32BitInt(val.Type) 10342 // result: (MOVWstore ptr val mem) 10343 for { 10344 t := v.Aux 10345 _ = v.Args[2] 10346 ptr := v.Args[0] 10347 val := v.Args[1] 10348 mem := v.Args[2] 10349 if !(t.(*types.Type).Size() == 4 && is32BitInt(val.Type)) { 10350 break 10351 } 10352 v.reset(OpPPC64MOVWstore) 10353 v.AddArg(ptr) 10354 v.AddArg(val) 10355 v.AddArg(mem) 10356 return true 10357 } 10358 // match: (Store {t} ptr val mem) 10359 // cond: t.(*types.Type).Size() == 2 10360 // result: (MOVHstore ptr val mem) 10361 for { 10362 t := v.Aux 10363 _ = v.Args[2] 10364 ptr := v.Args[0] 10365 val := v.Args[1] 10366 mem := v.Args[2] 10367 if !(t.(*types.Type).Size() == 2) { 10368 break 10369 } 10370 v.reset(OpPPC64MOVHstore) 10371 v.AddArg(ptr) 10372 v.AddArg(val) 10373 v.AddArg(mem) 10374 return true 10375 } 10376 // match: (Store {t} ptr val mem) 10377 // cond: t.(*types.Type).Size() == 1 10378 // result: (MOVBstore ptr val mem) 10379 for { 10380 t := v.Aux 10381 _ = v.Args[2] 10382 ptr := v.Args[0] 10383 val := v.Args[1] 10384 mem := v.Args[2] 10385 if !(t.(*types.Type).Size() == 1) { 10386 break 10387 } 10388 v.reset(OpPPC64MOVBstore) 10389 v.AddArg(ptr) 10390 v.AddArg(val) 10391 v.AddArg(mem) 10392 return true 10393 } 10394 return false 10395 } 10396 func rewriteValuePPC64_OpSub16_0(v *Value) bool { 10397 // match: (Sub16 x y) 10398 // cond: 10399 // result: (SUB x y) 10400 for { 10401 _ = v.Args[1] 10402 x := v.Args[0] 10403 y := v.Args[1] 10404 v.reset(OpPPC64SUB) 10405 v.AddArg(x) 10406 v.AddArg(y) 10407 return true 10408 } 10409 } 10410 func rewriteValuePPC64_OpSub32_0(v *Value) bool { 10411 // match: (Sub32 x y) 10412 // cond: 10413 // result: (SUB x y) 10414 for { 10415 _ = v.Args[1] 10416 x := v.Args[0] 10417 y := v.Args[1] 10418 v.reset(OpPPC64SUB) 10419 v.AddArg(x) 10420 v.AddArg(y) 10421 return true 10422 } 10423 } 10424 func rewriteValuePPC64_OpSub32F_0(v *Value) bool { 10425 // match: (Sub32F x y) 10426 // cond: 10427 // result: (FSUBS x y) 10428 for { 10429 _ = v.Args[1] 10430 x := v.Args[0] 10431 y := v.Args[1] 10432 v.reset(OpPPC64FSUBS) 10433 v.AddArg(x) 10434 v.AddArg(y) 10435 return true 10436 } 10437 } 10438 func rewriteValuePPC64_OpSub64_0(v *Value) bool { 10439 // match: (Sub64 x y) 10440 // cond: 10441 // result: (SUB x y) 10442 for { 10443 _ = v.Args[1] 10444 x := v.Args[0] 10445 y := v.Args[1] 10446 v.reset(OpPPC64SUB) 10447 v.AddArg(x) 10448 v.AddArg(y) 10449 return true 10450 } 10451 } 10452 func rewriteValuePPC64_OpSub64F_0(v *Value) bool { 10453 // match: (Sub64F x y) 10454 // cond: 10455 // result: (FSUB x y) 10456 for { 10457 _ = v.Args[1] 10458 x := v.Args[0] 10459 y := v.Args[1] 10460 v.reset(OpPPC64FSUB) 10461 v.AddArg(x) 10462 v.AddArg(y) 10463 return true 10464 } 10465 } 10466 func rewriteValuePPC64_OpSub8_0(v *Value) bool { 10467 // match: (Sub8 x y) 10468 // cond: 10469 // result: (SUB x y) 10470 for { 10471 _ = v.Args[1] 10472 x := v.Args[0] 10473 y := v.Args[1] 10474 v.reset(OpPPC64SUB) 10475 v.AddArg(x) 10476 v.AddArg(y) 10477 return true 10478 } 10479 } 10480 func rewriteValuePPC64_OpSubPtr_0(v *Value) bool { 10481 // match: (SubPtr x y) 10482 // cond: 10483 // result: (SUB x y) 10484 for { 10485 _ = v.Args[1] 10486 x := v.Args[0] 10487 y := v.Args[1] 10488 v.reset(OpPPC64SUB) 10489 v.AddArg(x) 10490 v.AddArg(y) 10491 return true 10492 } 10493 } 10494 func rewriteValuePPC64_OpTrunc_0(v *Value) bool { 10495 // match: (Trunc x) 10496 // cond: 10497 // result: (FTRUNC x) 10498 for { 10499 x := v.Args[0] 10500 v.reset(OpPPC64FTRUNC) 10501 v.AddArg(x) 10502 return true 10503 } 10504 } 10505 func rewriteValuePPC64_OpTrunc16to8_0(v *Value) bool { 10506 // match: (Trunc16to8 x) 10507 // cond: 10508 // result: (MOVBreg x) 10509 for { 10510 x := v.Args[0] 10511 v.reset(OpPPC64MOVBreg) 10512 v.AddArg(x) 10513 return true 10514 } 10515 } 10516 func rewriteValuePPC64_OpTrunc32to16_0(v *Value) bool { 10517 // match: (Trunc32to16 x) 10518 // cond: 10519 // result: (MOVHreg x) 10520 for { 10521 x := v.Args[0] 10522 v.reset(OpPPC64MOVHreg) 10523 v.AddArg(x) 10524 return true 10525 } 10526 } 10527 func rewriteValuePPC64_OpTrunc32to8_0(v *Value) bool { 10528 // match: (Trunc32to8 x) 10529 // cond: 10530 // result: (MOVBreg x) 10531 for { 10532 x := v.Args[0] 10533 v.reset(OpPPC64MOVBreg) 10534 v.AddArg(x) 10535 return true 10536 } 10537 } 10538 func rewriteValuePPC64_OpTrunc64to16_0(v *Value) bool { 10539 // match: (Trunc64to16 x) 10540 // cond: 10541 // result: (MOVHreg x) 10542 for { 10543 x := v.Args[0] 10544 v.reset(OpPPC64MOVHreg) 10545 v.AddArg(x) 10546 return true 10547 } 10548 } 10549 func rewriteValuePPC64_OpTrunc64to32_0(v *Value) bool { 10550 // match: (Trunc64to32 x) 10551 // cond: 10552 // result: (MOVWreg x) 10553 for { 10554 x := v.Args[0] 10555 v.reset(OpPPC64MOVWreg) 10556 v.AddArg(x) 10557 return true 10558 } 10559 } 10560 func rewriteValuePPC64_OpTrunc64to8_0(v *Value) bool { 10561 // match: (Trunc64to8 x) 10562 // cond: 10563 // result: (MOVBreg x) 10564 for { 10565 x := v.Args[0] 10566 v.reset(OpPPC64MOVBreg) 10567 v.AddArg(x) 10568 return true 10569 } 10570 } 10571 func rewriteValuePPC64_OpXor16_0(v *Value) bool { 10572 // match: (Xor16 x y) 10573 // cond: 10574 // result: (XOR x y) 10575 for { 10576 _ = v.Args[1] 10577 x := v.Args[0] 10578 y := v.Args[1] 10579 v.reset(OpPPC64XOR) 10580 v.AddArg(x) 10581 v.AddArg(y) 10582 return true 10583 } 10584 } 10585 func rewriteValuePPC64_OpXor32_0(v *Value) bool { 10586 // match: (Xor32 x y) 10587 // cond: 10588 // result: (XOR x y) 10589 for { 10590 _ = v.Args[1] 10591 x := v.Args[0] 10592 y := v.Args[1] 10593 v.reset(OpPPC64XOR) 10594 v.AddArg(x) 10595 v.AddArg(y) 10596 return true 10597 } 10598 } 10599 func rewriteValuePPC64_OpXor64_0(v *Value) bool { 10600 // match: (Xor64 x y) 10601 // cond: 10602 // result: (XOR x y) 10603 for { 10604 _ = v.Args[1] 10605 x := v.Args[0] 10606 y := v.Args[1] 10607 v.reset(OpPPC64XOR) 10608 v.AddArg(x) 10609 v.AddArg(y) 10610 return true 10611 } 10612 } 10613 func rewriteValuePPC64_OpXor8_0(v *Value) bool { 10614 // match: (Xor8 x y) 10615 // cond: 10616 // result: (XOR x y) 10617 for { 10618 _ = v.Args[1] 10619 x := v.Args[0] 10620 y := v.Args[1] 10621 v.reset(OpPPC64XOR) 10622 v.AddArg(x) 10623 v.AddArg(y) 10624 return true 10625 } 10626 } 10627 func rewriteValuePPC64_OpZero_0(v *Value) bool { 10628 b := v.Block 10629 _ = b 10630 // match: (Zero [0] _ mem) 10631 // cond: 10632 // result: mem 10633 for { 10634 if v.AuxInt != 0 { 10635 break 10636 } 10637 _ = v.Args[1] 10638 mem := v.Args[1] 10639 v.reset(OpCopy) 10640 v.Type = mem.Type 10641 v.AddArg(mem) 10642 return true 10643 } 10644 // match: (Zero [1] destptr mem) 10645 // cond: 10646 // result: (MOVBstorezero destptr mem) 10647 for { 10648 if v.AuxInt != 1 { 10649 break 10650 } 10651 _ = v.Args[1] 10652 destptr := v.Args[0] 10653 mem := v.Args[1] 10654 v.reset(OpPPC64MOVBstorezero) 10655 v.AddArg(destptr) 10656 v.AddArg(mem) 10657 return true 10658 } 10659 // match: (Zero [2] destptr mem) 10660 // cond: 10661 // result: (MOVHstorezero destptr mem) 10662 for { 10663 if v.AuxInt != 2 { 10664 break 10665 } 10666 _ = v.Args[1] 10667 destptr := v.Args[0] 10668 mem := v.Args[1] 10669 v.reset(OpPPC64MOVHstorezero) 10670 v.AddArg(destptr) 10671 v.AddArg(mem) 10672 return true 10673 } 10674 // match: (Zero [3] destptr mem) 10675 // cond: 10676 // result: (MOVBstorezero [2] destptr (MOVHstorezero destptr mem)) 10677 for { 10678 if v.AuxInt != 3 { 10679 break 10680 } 10681 _ = v.Args[1] 10682 destptr := v.Args[0] 10683 mem := v.Args[1] 10684 v.reset(OpPPC64MOVBstorezero) 10685 v.AuxInt = 2 10686 v.AddArg(destptr) 10687 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem) 10688 v0.AddArg(destptr) 10689 v0.AddArg(mem) 10690 v.AddArg(v0) 10691 return true 10692 } 10693 // match: (Zero [4] destptr mem) 10694 // cond: 10695 // result: (MOVWstorezero destptr mem) 10696 for { 10697 if v.AuxInt != 4 { 10698 break 10699 } 10700 _ = v.Args[1] 10701 destptr := v.Args[0] 10702 mem := v.Args[1] 10703 v.reset(OpPPC64MOVWstorezero) 10704 v.AddArg(destptr) 10705 v.AddArg(mem) 10706 return true 10707 } 10708 // match: (Zero [5] destptr mem) 10709 // cond: 10710 // result: (MOVBstorezero [4] destptr (MOVWstorezero destptr mem)) 10711 for { 10712 if v.AuxInt != 5 { 10713 break 10714 } 10715 _ = v.Args[1] 10716 destptr := v.Args[0] 10717 mem := v.Args[1] 10718 v.reset(OpPPC64MOVBstorezero) 10719 v.AuxInt = 4 10720 v.AddArg(destptr) 10721 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 10722 v0.AddArg(destptr) 10723 v0.AddArg(mem) 10724 v.AddArg(v0) 10725 return true 10726 } 10727 // match: (Zero [6] destptr mem) 10728 // cond: 10729 // result: (MOVHstorezero [4] destptr (MOVWstorezero destptr mem)) 10730 for { 10731 if v.AuxInt != 6 { 10732 break 10733 } 10734 _ = v.Args[1] 10735 destptr := v.Args[0] 10736 mem := v.Args[1] 10737 v.reset(OpPPC64MOVHstorezero) 10738 v.AuxInt = 4 10739 v.AddArg(destptr) 10740 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 10741 v0.AddArg(destptr) 10742 v0.AddArg(mem) 10743 v.AddArg(v0) 10744 return true 10745 } 10746 // match: (Zero [7] destptr mem) 10747 // cond: 10748 // result: (MOVBstorezero [6] destptr (MOVHstorezero [4] destptr (MOVWstorezero destptr mem))) 10749 for { 10750 if v.AuxInt != 7 { 10751 break 10752 } 10753 _ = v.Args[1] 10754 destptr := v.Args[0] 10755 mem := v.Args[1] 10756 v.reset(OpPPC64MOVBstorezero) 10757 v.AuxInt = 6 10758 v.AddArg(destptr) 10759 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem) 10760 v0.AuxInt = 4 10761 v0.AddArg(destptr) 10762 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 10763 v1.AddArg(destptr) 10764 v1.AddArg(mem) 10765 v0.AddArg(v1) 10766 v.AddArg(v0) 10767 return true 10768 } 10769 // match: (Zero [8] destptr mem) 10770 // cond: 10771 // result: (MOVDstorezero destptr mem) 10772 for { 10773 if v.AuxInt != 8 { 10774 break 10775 } 10776 _ = v.Args[1] 10777 destptr := v.Args[0] 10778 mem := v.Args[1] 10779 v.reset(OpPPC64MOVDstorezero) 10780 v.AddArg(destptr) 10781 v.AddArg(mem) 10782 return true 10783 } 10784 // match: (Zero [12] destptr mem) 10785 // cond: 10786 // result: (MOVWstorezero [8] destptr (MOVDstorezero [0] destptr mem)) 10787 for { 10788 if v.AuxInt != 12 { 10789 break 10790 } 10791 _ = v.Args[1] 10792 destptr := v.Args[0] 10793 mem := v.Args[1] 10794 v.reset(OpPPC64MOVWstorezero) 10795 v.AuxInt = 8 10796 v.AddArg(destptr) 10797 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10798 v0.AuxInt = 0 10799 v0.AddArg(destptr) 10800 v0.AddArg(mem) 10801 v.AddArg(v0) 10802 return true 10803 } 10804 return false 10805 } 10806 func rewriteValuePPC64_OpZero_10(v *Value) bool { 10807 b := v.Block 10808 _ = b 10809 // match: (Zero [16] destptr mem) 10810 // cond: 10811 // result: (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)) 10812 for { 10813 if v.AuxInt != 16 { 10814 break 10815 } 10816 _ = v.Args[1] 10817 destptr := v.Args[0] 10818 mem := v.Args[1] 10819 v.reset(OpPPC64MOVDstorezero) 10820 v.AuxInt = 8 10821 v.AddArg(destptr) 10822 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10823 v0.AuxInt = 0 10824 v0.AddArg(destptr) 10825 v0.AddArg(mem) 10826 v.AddArg(v0) 10827 return true 10828 } 10829 // match: (Zero [24] destptr mem) 10830 // cond: 10831 // result: (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))) 10832 for { 10833 if v.AuxInt != 24 { 10834 break 10835 } 10836 _ = v.Args[1] 10837 destptr := v.Args[0] 10838 mem := v.Args[1] 10839 v.reset(OpPPC64MOVDstorezero) 10840 v.AuxInt = 16 10841 v.AddArg(destptr) 10842 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10843 v0.AuxInt = 8 10844 v0.AddArg(destptr) 10845 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10846 v1.AuxInt = 0 10847 v1.AddArg(destptr) 10848 v1.AddArg(mem) 10849 v0.AddArg(v1) 10850 v.AddArg(v0) 10851 return true 10852 } 10853 // match: (Zero [32] destptr mem) 10854 // cond: 10855 // result: (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))) 10856 for { 10857 if v.AuxInt != 32 { 10858 break 10859 } 10860 _ = v.Args[1] 10861 destptr := v.Args[0] 10862 mem := v.Args[1] 10863 v.reset(OpPPC64MOVDstorezero) 10864 v.AuxInt = 24 10865 v.AddArg(destptr) 10866 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10867 v0.AuxInt = 16 10868 v0.AddArg(destptr) 10869 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10870 v1.AuxInt = 8 10871 v1.AddArg(destptr) 10872 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10873 v2.AuxInt = 0 10874 v2.AddArg(destptr) 10875 v2.AddArg(mem) 10876 v1.AddArg(v2) 10877 v0.AddArg(v1) 10878 v.AddArg(v0) 10879 return true 10880 } 10881 // match: (Zero [40] destptr mem) 10882 // cond: 10883 // result: (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))))) 10884 for { 10885 if v.AuxInt != 40 { 10886 break 10887 } 10888 _ = v.Args[1] 10889 destptr := v.Args[0] 10890 mem := v.Args[1] 10891 v.reset(OpPPC64MOVDstorezero) 10892 v.AuxInt = 32 10893 v.AddArg(destptr) 10894 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10895 v0.AuxInt = 24 10896 v0.AddArg(destptr) 10897 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10898 v1.AuxInt = 16 10899 v1.AddArg(destptr) 10900 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10901 v2.AuxInt = 8 10902 v2.AddArg(destptr) 10903 v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10904 v3.AuxInt = 0 10905 v3.AddArg(destptr) 10906 v3.AddArg(mem) 10907 v2.AddArg(v3) 10908 v1.AddArg(v2) 10909 v0.AddArg(v1) 10910 v.AddArg(v0) 10911 return true 10912 } 10913 // match: (Zero [48] destptr mem) 10914 // cond: 10915 // result: (MOVDstorezero [40] destptr (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))))) 10916 for { 10917 if v.AuxInt != 48 { 10918 break 10919 } 10920 _ = v.Args[1] 10921 destptr := v.Args[0] 10922 mem := v.Args[1] 10923 v.reset(OpPPC64MOVDstorezero) 10924 v.AuxInt = 40 10925 v.AddArg(destptr) 10926 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10927 v0.AuxInt = 32 10928 v0.AddArg(destptr) 10929 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10930 v1.AuxInt = 24 10931 v1.AddArg(destptr) 10932 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10933 v2.AuxInt = 16 10934 v2.AddArg(destptr) 10935 v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10936 v3.AuxInt = 8 10937 v3.AddArg(destptr) 10938 v4 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10939 v4.AuxInt = 0 10940 v4.AddArg(destptr) 10941 v4.AddArg(mem) 10942 v3.AddArg(v4) 10943 v2.AddArg(v3) 10944 v1.AddArg(v2) 10945 v0.AddArg(v1) 10946 v.AddArg(v0) 10947 return true 10948 } 10949 // match: (Zero [56] destptr mem) 10950 // cond: 10951 // result: (MOVDstorezero [48] destptr (MOVDstorezero [40] destptr (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))))))) 10952 for { 10953 if v.AuxInt != 56 { 10954 break 10955 } 10956 _ = v.Args[1] 10957 destptr := v.Args[0] 10958 mem := v.Args[1] 10959 v.reset(OpPPC64MOVDstorezero) 10960 v.AuxInt = 48 10961 v.AddArg(destptr) 10962 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10963 v0.AuxInt = 40 10964 v0.AddArg(destptr) 10965 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10966 v1.AuxInt = 32 10967 v1.AddArg(destptr) 10968 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10969 v2.AuxInt = 24 10970 v2.AddArg(destptr) 10971 v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10972 v3.AuxInt = 16 10973 v3.AddArg(destptr) 10974 v4 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10975 v4.AuxInt = 8 10976 v4.AddArg(destptr) 10977 v5 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 10978 v5.AuxInt = 0 10979 v5.AddArg(destptr) 10980 v5.AddArg(mem) 10981 v4.AddArg(v5) 10982 v3.AddArg(v4) 10983 v2.AddArg(v3) 10984 v1.AddArg(v2) 10985 v0.AddArg(v1) 10986 v.AddArg(v0) 10987 return true 10988 } 10989 // match: (Zero [s] ptr mem) 10990 // cond: 10991 // result: (LoweredZero [s] ptr mem) 10992 for { 10993 s := v.AuxInt 10994 _ = v.Args[1] 10995 ptr := v.Args[0] 10996 mem := v.Args[1] 10997 v.reset(OpPPC64LoweredZero) 10998 v.AuxInt = s 10999 v.AddArg(ptr) 11000 v.AddArg(mem) 11001 return true 11002 } 11003 } 11004 func rewriteValuePPC64_OpZeroExt16to32_0(v *Value) bool { 11005 // match: (ZeroExt16to32 x) 11006 // cond: 11007 // result: (MOVHZreg x) 11008 for { 11009 x := v.Args[0] 11010 v.reset(OpPPC64MOVHZreg) 11011 v.AddArg(x) 11012 return true 11013 } 11014 } 11015 func rewriteValuePPC64_OpZeroExt16to64_0(v *Value) bool { 11016 // match: (ZeroExt16to64 x) 11017 // cond: 11018 // result: (MOVHZreg x) 11019 for { 11020 x := v.Args[0] 11021 v.reset(OpPPC64MOVHZreg) 11022 v.AddArg(x) 11023 return true 11024 } 11025 } 11026 func rewriteValuePPC64_OpZeroExt32to64_0(v *Value) bool { 11027 // match: (ZeroExt32to64 x) 11028 // cond: 11029 // result: (MOVWZreg x) 11030 for { 11031 x := v.Args[0] 11032 v.reset(OpPPC64MOVWZreg) 11033 v.AddArg(x) 11034 return true 11035 } 11036 } 11037 func rewriteValuePPC64_OpZeroExt8to16_0(v *Value) bool { 11038 // match: (ZeroExt8to16 x) 11039 // cond: 11040 // result: (MOVBZreg x) 11041 for { 11042 x := v.Args[0] 11043 v.reset(OpPPC64MOVBZreg) 11044 v.AddArg(x) 11045 return true 11046 } 11047 } 11048 func rewriteValuePPC64_OpZeroExt8to32_0(v *Value) bool { 11049 // match: (ZeroExt8to32 x) 11050 // cond: 11051 // result: (MOVBZreg x) 11052 for { 11053 x := v.Args[0] 11054 v.reset(OpPPC64MOVBZreg) 11055 v.AddArg(x) 11056 return true 11057 } 11058 } 11059 func rewriteValuePPC64_OpZeroExt8to64_0(v *Value) bool { 11060 // match: (ZeroExt8to64 x) 11061 // cond: 11062 // result: (MOVBZreg x) 11063 for { 11064 x := v.Args[0] 11065 v.reset(OpPPC64MOVBZreg) 11066 v.AddArg(x) 11067 return true 11068 } 11069 } 11070 func rewriteBlockPPC64(b *Block) bool { 11071 config := b.Func.Config 11072 _ = config 11073 fe := b.Func.fe 11074 _ = fe 11075 typ := &config.Types 11076 _ = typ 11077 switch b.Kind { 11078 case BlockPPC64EQ: 11079 // match: (EQ (CMPconst [0] (ANDconst [c] x)) yes no) 11080 // cond: 11081 // result: (EQ (ANDCCconst [c] x) yes no) 11082 for { 11083 v := b.Control 11084 if v.Op != OpPPC64CMPconst { 11085 break 11086 } 11087 if v.AuxInt != 0 { 11088 break 11089 } 11090 v_0 := v.Args[0] 11091 if v_0.Op != OpPPC64ANDconst { 11092 break 11093 } 11094 c := v_0.AuxInt 11095 x := v_0.Args[0] 11096 b.Kind = BlockPPC64EQ 11097 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 11098 v0.AuxInt = c 11099 v0.AddArg(x) 11100 b.SetControl(v0) 11101 b.Aux = nil 11102 return true 11103 } 11104 // match: (EQ (CMPWconst [0] (ANDconst [c] x)) yes no) 11105 // cond: 11106 // result: (EQ (ANDCCconst [c] x) yes no) 11107 for { 11108 v := b.Control 11109 if v.Op != OpPPC64CMPWconst { 11110 break 11111 } 11112 if v.AuxInt != 0 { 11113 break 11114 } 11115 v_0 := v.Args[0] 11116 if v_0.Op != OpPPC64ANDconst { 11117 break 11118 } 11119 c := v_0.AuxInt 11120 x := v_0.Args[0] 11121 b.Kind = BlockPPC64EQ 11122 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 11123 v0.AuxInt = c 11124 v0.AddArg(x) 11125 b.SetControl(v0) 11126 b.Aux = nil 11127 return true 11128 } 11129 // match: (EQ (FlagEQ) yes no) 11130 // cond: 11131 // result: (First nil yes no) 11132 for { 11133 v := b.Control 11134 if v.Op != OpPPC64FlagEQ { 11135 break 11136 } 11137 b.Kind = BlockFirst 11138 b.SetControl(nil) 11139 b.Aux = nil 11140 return true 11141 } 11142 // match: (EQ (FlagLT) yes no) 11143 // cond: 11144 // result: (First nil no yes) 11145 for { 11146 v := b.Control 11147 if v.Op != OpPPC64FlagLT { 11148 break 11149 } 11150 b.Kind = BlockFirst 11151 b.SetControl(nil) 11152 b.Aux = nil 11153 b.swapSuccessors() 11154 return true 11155 } 11156 // match: (EQ (FlagGT) yes no) 11157 // cond: 11158 // result: (First nil no yes) 11159 for { 11160 v := b.Control 11161 if v.Op != OpPPC64FlagGT { 11162 break 11163 } 11164 b.Kind = BlockFirst 11165 b.SetControl(nil) 11166 b.Aux = nil 11167 b.swapSuccessors() 11168 return true 11169 } 11170 // match: (EQ (InvertFlags cmp) yes no) 11171 // cond: 11172 // result: (EQ cmp yes no) 11173 for { 11174 v := b.Control 11175 if v.Op != OpPPC64InvertFlags { 11176 break 11177 } 11178 cmp := v.Args[0] 11179 b.Kind = BlockPPC64EQ 11180 b.SetControl(cmp) 11181 b.Aux = nil 11182 return true 11183 } 11184 case BlockPPC64GE: 11185 // match: (GE (FlagEQ) yes no) 11186 // cond: 11187 // result: (First nil yes no) 11188 for { 11189 v := b.Control 11190 if v.Op != OpPPC64FlagEQ { 11191 break 11192 } 11193 b.Kind = BlockFirst 11194 b.SetControl(nil) 11195 b.Aux = nil 11196 return true 11197 } 11198 // match: (GE (FlagLT) yes no) 11199 // cond: 11200 // result: (First nil no yes) 11201 for { 11202 v := b.Control 11203 if v.Op != OpPPC64FlagLT { 11204 break 11205 } 11206 b.Kind = BlockFirst 11207 b.SetControl(nil) 11208 b.Aux = nil 11209 b.swapSuccessors() 11210 return true 11211 } 11212 // match: (GE (FlagGT) yes no) 11213 // cond: 11214 // result: (First nil yes no) 11215 for { 11216 v := b.Control 11217 if v.Op != OpPPC64FlagGT { 11218 break 11219 } 11220 b.Kind = BlockFirst 11221 b.SetControl(nil) 11222 b.Aux = nil 11223 return true 11224 } 11225 // match: (GE (InvertFlags cmp) yes no) 11226 // cond: 11227 // result: (LE cmp yes no) 11228 for { 11229 v := b.Control 11230 if v.Op != OpPPC64InvertFlags { 11231 break 11232 } 11233 cmp := v.Args[0] 11234 b.Kind = BlockPPC64LE 11235 b.SetControl(cmp) 11236 b.Aux = nil 11237 return true 11238 } 11239 case BlockPPC64GT: 11240 // match: (GT (FlagEQ) yes no) 11241 // cond: 11242 // result: (First nil no yes) 11243 for { 11244 v := b.Control 11245 if v.Op != OpPPC64FlagEQ { 11246 break 11247 } 11248 b.Kind = BlockFirst 11249 b.SetControl(nil) 11250 b.Aux = nil 11251 b.swapSuccessors() 11252 return true 11253 } 11254 // match: (GT (FlagLT) yes no) 11255 // cond: 11256 // result: (First nil no yes) 11257 for { 11258 v := b.Control 11259 if v.Op != OpPPC64FlagLT { 11260 break 11261 } 11262 b.Kind = BlockFirst 11263 b.SetControl(nil) 11264 b.Aux = nil 11265 b.swapSuccessors() 11266 return true 11267 } 11268 // match: (GT (FlagGT) yes no) 11269 // cond: 11270 // result: (First nil yes no) 11271 for { 11272 v := b.Control 11273 if v.Op != OpPPC64FlagGT { 11274 break 11275 } 11276 b.Kind = BlockFirst 11277 b.SetControl(nil) 11278 b.Aux = nil 11279 return true 11280 } 11281 // match: (GT (InvertFlags cmp) yes no) 11282 // cond: 11283 // result: (LT cmp yes no) 11284 for { 11285 v := b.Control 11286 if v.Op != OpPPC64InvertFlags { 11287 break 11288 } 11289 cmp := v.Args[0] 11290 b.Kind = BlockPPC64LT 11291 b.SetControl(cmp) 11292 b.Aux = nil 11293 return true 11294 } 11295 case BlockIf: 11296 // match: (If (Equal cc) yes no) 11297 // cond: 11298 // result: (EQ cc yes no) 11299 for { 11300 v := b.Control 11301 if v.Op != OpPPC64Equal { 11302 break 11303 } 11304 cc := v.Args[0] 11305 b.Kind = BlockPPC64EQ 11306 b.SetControl(cc) 11307 b.Aux = nil 11308 return true 11309 } 11310 // match: (If (NotEqual cc) yes no) 11311 // cond: 11312 // result: (NE cc yes no) 11313 for { 11314 v := b.Control 11315 if v.Op != OpPPC64NotEqual { 11316 break 11317 } 11318 cc := v.Args[0] 11319 b.Kind = BlockPPC64NE 11320 b.SetControl(cc) 11321 b.Aux = nil 11322 return true 11323 } 11324 // match: (If (LessThan cc) yes no) 11325 // cond: 11326 // result: (LT cc yes no) 11327 for { 11328 v := b.Control 11329 if v.Op != OpPPC64LessThan { 11330 break 11331 } 11332 cc := v.Args[0] 11333 b.Kind = BlockPPC64LT 11334 b.SetControl(cc) 11335 b.Aux = nil 11336 return true 11337 } 11338 // match: (If (LessEqual cc) yes no) 11339 // cond: 11340 // result: (LE cc yes no) 11341 for { 11342 v := b.Control 11343 if v.Op != OpPPC64LessEqual { 11344 break 11345 } 11346 cc := v.Args[0] 11347 b.Kind = BlockPPC64LE 11348 b.SetControl(cc) 11349 b.Aux = nil 11350 return true 11351 } 11352 // match: (If (GreaterThan cc) yes no) 11353 // cond: 11354 // result: (GT cc yes no) 11355 for { 11356 v := b.Control 11357 if v.Op != OpPPC64GreaterThan { 11358 break 11359 } 11360 cc := v.Args[0] 11361 b.Kind = BlockPPC64GT 11362 b.SetControl(cc) 11363 b.Aux = nil 11364 return true 11365 } 11366 // match: (If (GreaterEqual cc) yes no) 11367 // cond: 11368 // result: (GE cc yes no) 11369 for { 11370 v := b.Control 11371 if v.Op != OpPPC64GreaterEqual { 11372 break 11373 } 11374 cc := v.Args[0] 11375 b.Kind = BlockPPC64GE 11376 b.SetControl(cc) 11377 b.Aux = nil 11378 return true 11379 } 11380 // match: (If (FLessThan cc) yes no) 11381 // cond: 11382 // result: (FLT cc yes no) 11383 for { 11384 v := b.Control 11385 if v.Op != OpPPC64FLessThan { 11386 break 11387 } 11388 cc := v.Args[0] 11389 b.Kind = BlockPPC64FLT 11390 b.SetControl(cc) 11391 b.Aux = nil 11392 return true 11393 } 11394 // match: (If (FLessEqual cc) yes no) 11395 // cond: 11396 // result: (FLE cc yes no) 11397 for { 11398 v := b.Control 11399 if v.Op != OpPPC64FLessEqual { 11400 break 11401 } 11402 cc := v.Args[0] 11403 b.Kind = BlockPPC64FLE 11404 b.SetControl(cc) 11405 b.Aux = nil 11406 return true 11407 } 11408 // match: (If (FGreaterThan cc) yes no) 11409 // cond: 11410 // result: (FGT cc yes no) 11411 for { 11412 v := b.Control 11413 if v.Op != OpPPC64FGreaterThan { 11414 break 11415 } 11416 cc := v.Args[0] 11417 b.Kind = BlockPPC64FGT 11418 b.SetControl(cc) 11419 b.Aux = nil 11420 return true 11421 } 11422 // match: (If (FGreaterEqual cc) yes no) 11423 // cond: 11424 // result: (FGE cc yes no) 11425 for { 11426 v := b.Control 11427 if v.Op != OpPPC64FGreaterEqual { 11428 break 11429 } 11430 cc := v.Args[0] 11431 b.Kind = BlockPPC64FGE 11432 b.SetControl(cc) 11433 b.Aux = nil 11434 return true 11435 } 11436 // match: (If cond yes no) 11437 // cond: 11438 // result: (NE (CMPWconst [0] cond) yes no) 11439 for { 11440 v := b.Control 11441 _ = v 11442 cond := b.Control 11443 b.Kind = BlockPPC64NE 11444 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags) 11445 v0.AuxInt = 0 11446 v0.AddArg(cond) 11447 b.SetControl(v0) 11448 b.Aux = nil 11449 return true 11450 } 11451 case BlockPPC64LE: 11452 // match: (LE (FlagEQ) yes no) 11453 // cond: 11454 // result: (First nil yes no) 11455 for { 11456 v := b.Control 11457 if v.Op != OpPPC64FlagEQ { 11458 break 11459 } 11460 b.Kind = BlockFirst 11461 b.SetControl(nil) 11462 b.Aux = nil 11463 return true 11464 } 11465 // match: (LE (FlagLT) yes no) 11466 // cond: 11467 // result: (First nil yes no) 11468 for { 11469 v := b.Control 11470 if v.Op != OpPPC64FlagLT { 11471 break 11472 } 11473 b.Kind = BlockFirst 11474 b.SetControl(nil) 11475 b.Aux = nil 11476 return true 11477 } 11478 // match: (LE (FlagGT) yes no) 11479 // cond: 11480 // result: (First nil no yes) 11481 for { 11482 v := b.Control 11483 if v.Op != OpPPC64FlagGT { 11484 break 11485 } 11486 b.Kind = BlockFirst 11487 b.SetControl(nil) 11488 b.Aux = nil 11489 b.swapSuccessors() 11490 return true 11491 } 11492 // match: (LE (InvertFlags cmp) yes no) 11493 // cond: 11494 // result: (GE cmp yes no) 11495 for { 11496 v := b.Control 11497 if v.Op != OpPPC64InvertFlags { 11498 break 11499 } 11500 cmp := v.Args[0] 11501 b.Kind = BlockPPC64GE 11502 b.SetControl(cmp) 11503 b.Aux = nil 11504 return true 11505 } 11506 case BlockPPC64LT: 11507 // match: (LT (FlagEQ) yes no) 11508 // cond: 11509 // result: (First nil no yes) 11510 for { 11511 v := b.Control 11512 if v.Op != OpPPC64FlagEQ { 11513 break 11514 } 11515 b.Kind = BlockFirst 11516 b.SetControl(nil) 11517 b.Aux = nil 11518 b.swapSuccessors() 11519 return true 11520 } 11521 // match: (LT (FlagLT) yes no) 11522 // cond: 11523 // result: (First nil yes no) 11524 for { 11525 v := b.Control 11526 if v.Op != OpPPC64FlagLT { 11527 break 11528 } 11529 b.Kind = BlockFirst 11530 b.SetControl(nil) 11531 b.Aux = nil 11532 return true 11533 } 11534 // match: (LT (FlagGT) yes no) 11535 // cond: 11536 // result: (First nil no yes) 11537 for { 11538 v := b.Control 11539 if v.Op != OpPPC64FlagGT { 11540 break 11541 } 11542 b.Kind = BlockFirst 11543 b.SetControl(nil) 11544 b.Aux = nil 11545 b.swapSuccessors() 11546 return true 11547 } 11548 // match: (LT (InvertFlags cmp) yes no) 11549 // cond: 11550 // result: (GT cmp yes no) 11551 for { 11552 v := b.Control 11553 if v.Op != OpPPC64InvertFlags { 11554 break 11555 } 11556 cmp := v.Args[0] 11557 b.Kind = BlockPPC64GT 11558 b.SetControl(cmp) 11559 b.Aux = nil 11560 return true 11561 } 11562 case BlockPPC64NE: 11563 // match: (NE (CMPWconst [0] (Equal cc)) yes no) 11564 // cond: 11565 // result: (EQ cc yes no) 11566 for { 11567 v := b.Control 11568 if v.Op != OpPPC64CMPWconst { 11569 break 11570 } 11571 if v.AuxInt != 0 { 11572 break 11573 } 11574 v_0 := v.Args[0] 11575 if v_0.Op != OpPPC64Equal { 11576 break 11577 } 11578 cc := v_0.Args[0] 11579 b.Kind = BlockPPC64EQ 11580 b.SetControl(cc) 11581 b.Aux = nil 11582 return true 11583 } 11584 // match: (NE (CMPWconst [0] (NotEqual cc)) yes no) 11585 // cond: 11586 // result: (NE cc yes no) 11587 for { 11588 v := b.Control 11589 if v.Op != OpPPC64CMPWconst { 11590 break 11591 } 11592 if v.AuxInt != 0 { 11593 break 11594 } 11595 v_0 := v.Args[0] 11596 if v_0.Op != OpPPC64NotEqual { 11597 break 11598 } 11599 cc := v_0.Args[0] 11600 b.Kind = BlockPPC64NE 11601 b.SetControl(cc) 11602 b.Aux = nil 11603 return true 11604 } 11605 // match: (NE (CMPWconst [0] (LessThan cc)) yes no) 11606 // cond: 11607 // result: (LT cc yes no) 11608 for { 11609 v := b.Control 11610 if v.Op != OpPPC64CMPWconst { 11611 break 11612 } 11613 if v.AuxInt != 0 { 11614 break 11615 } 11616 v_0 := v.Args[0] 11617 if v_0.Op != OpPPC64LessThan { 11618 break 11619 } 11620 cc := v_0.Args[0] 11621 b.Kind = BlockPPC64LT 11622 b.SetControl(cc) 11623 b.Aux = nil 11624 return true 11625 } 11626 // match: (NE (CMPWconst [0] (LessEqual cc)) yes no) 11627 // cond: 11628 // result: (LE cc yes no) 11629 for { 11630 v := b.Control 11631 if v.Op != OpPPC64CMPWconst { 11632 break 11633 } 11634 if v.AuxInt != 0 { 11635 break 11636 } 11637 v_0 := v.Args[0] 11638 if v_0.Op != OpPPC64LessEqual { 11639 break 11640 } 11641 cc := v_0.Args[0] 11642 b.Kind = BlockPPC64LE 11643 b.SetControl(cc) 11644 b.Aux = nil 11645 return true 11646 } 11647 // match: (NE (CMPWconst [0] (GreaterThan cc)) yes no) 11648 // cond: 11649 // result: (GT cc yes no) 11650 for { 11651 v := b.Control 11652 if v.Op != OpPPC64CMPWconst { 11653 break 11654 } 11655 if v.AuxInt != 0 { 11656 break 11657 } 11658 v_0 := v.Args[0] 11659 if v_0.Op != OpPPC64GreaterThan { 11660 break 11661 } 11662 cc := v_0.Args[0] 11663 b.Kind = BlockPPC64GT 11664 b.SetControl(cc) 11665 b.Aux = nil 11666 return true 11667 } 11668 // match: (NE (CMPWconst [0] (GreaterEqual cc)) yes no) 11669 // cond: 11670 // result: (GE cc yes no) 11671 for { 11672 v := b.Control 11673 if v.Op != OpPPC64CMPWconst { 11674 break 11675 } 11676 if v.AuxInt != 0 { 11677 break 11678 } 11679 v_0 := v.Args[0] 11680 if v_0.Op != OpPPC64GreaterEqual { 11681 break 11682 } 11683 cc := v_0.Args[0] 11684 b.Kind = BlockPPC64GE 11685 b.SetControl(cc) 11686 b.Aux = nil 11687 return true 11688 } 11689 // match: (NE (CMPWconst [0] (FLessThan cc)) yes no) 11690 // cond: 11691 // result: (FLT cc yes no) 11692 for { 11693 v := b.Control 11694 if v.Op != OpPPC64CMPWconst { 11695 break 11696 } 11697 if v.AuxInt != 0 { 11698 break 11699 } 11700 v_0 := v.Args[0] 11701 if v_0.Op != OpPPC64FLessThan { 11702 break 11703 } 11704 cc := v_0.Args[0] 11705 b.Kind = BlockPPC64FLT 11706 b.SetControl(cc) 11707 b.Aux = nil 11708 return true 11709 } 11710 // match: (NE (CMPWconst [0] (FLessEqual cc)) yes no) 11711 // cond: 11712 // result: (FLE cc yes no) 11713 for { 11714 v := b.Control 11715 if v.Op != OpPPC64CMPWconst { 11716 break 11717 } 11718 if v.AuxInt != 0 { 11719 break 11720 } 11721 v_0 := v.Args[0] 11722 if v_0.Op != OpPPC64FLessEqual { 11723 break 11724 } 11725 cc := v_0.Args[0] 11726 b.Kind = BlockPPC64FLE 11727 b.SetControl(cc) 11728 b.Aux = nil 11729 return true 11730 } 11731 // match: (NE (CMPWconst [0] (FGreaterThan cc)) yes no) 11732 // cond: 11733 // result: (FGT cc yes no) 11734 for { 11735 v := b.Control 11736 if v.Op != OpPPC64CMPWconst { 11737 break 11738 } 11739 if v.AuxInt != 0 { 11740 break 11741 } 11742 v_0 := v.Args[0] 11743 if v_0.Op != OpPPC64FGreaterThan { 11744 break 11745 } 11746 cc := v_0.Args[0] 11747 b.Kind = BlockPPC64FGT 11748 b.SetControl(cc) 11749 b.Aux = nil 11750 return true 11751 } 11752 // match: (NE (CMPWconst [0] (FGreaterEqual cc)) yes no) 11753 // cond: 11754 // result: (FGE cc yes no) 11755 for { 11756 v := b.Control 11757 if v.Op != OpPPC64CMPWconst { 11758 break 11759 } 11760 if v.AuxInt != 0 { 11761 break 11762 } 11763 v_0 := v.Args[0] 11764 if v_0.Op != OpPPC64FGreaterEqual { 11765 break 11766 } 11767 cc := v_0.Args[0] 11768 b.Kind = BlockPPC64FGE 11769 b.SetControl(cc) 11770 b.Aux = nil 11771 return true 11772 } 11773 // match: (NE (CMPconst [0] (ANDconst [c] x)) yes no) 11774 // cond: 11775 // result: (NE (ANDCCconst [c] x) yes no) 11776 for { 11777 v := b.Control 11778 if v.Op != OpPPC64CMPconst { 11779 break 11780 } 11781 if v.AuxInt != 0 { 11782 break 11783 } 11784 v_0 := v.Args[0] 11785 if v_0.Op != OpPPC64ANDconst { 11786 break 11787 } 11788 c := v_0.AuxInt 11789 x := v_0.Args[0] 11790 b.Kind = BlockPPC64NE 11791 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 11792 v0.AuxInt = c 11793 v0.AddArg(x) 11794 b.SetControl(v0) 11795 b.Aux = nil 11796 return true 11797 } 11798 // match: (NE (CMPWconst [0] (ANDconst [c] x)) yes no) 11799 // cond: 11800 // result: (NE (ANDCCconst [c] x) yes no) 11801 for { 11802 v := b.Control 11803 if v.Op != OpPPC64CMPWconst { 11804 break 11805 } 11806 if v.AuxInt != 0 { 11807 break 11808 } 11809 v_0 := v.Args[0] 11810 if v_0.Op != OpPPC64ANDconst { 11811 break 11812 } 11813 c := v_0.AuxInt 11814 x := v_0.Args[0] 11815 b.Kind = BlockPPC64NE 11816 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 11817 v0.AuxInt = c 11818 v0.AddArg(x) 11819 b.SetControl(v0) 11820 b.Aux = nil 11821 return true 11822 } 11823 // match: (NE (FlagEQ) yes no) 11824 // cond: 11825 // result: (First nil no yes) 11826 for { 11827 v := b.Control 11828 if v.Op != OpPPC64FlagEQ { 11829 break 11830 } 11831 b.Kind = BlockFirst 11832 b.SetControl(nil) 11833 b.Aux = nil 11834 b.swapSuccessors() 11835 return true 11836 } 11837 // match: (NE (FlagLT) yes no) 11838 // cond: 11839 // result: (First nil yes no) 11840 for { 11841 v := b.Control 11842 if v.Op != OpPPC64FlagLT { 11843 break 11844 } 11845 b.Kind = BlockFirst 11846 b.SetControl(nil) 11847 b.Aux = nil 11848 return true 11849 } 11850 // match: (NE (FlagGT) yes no) 11851 // cond: 11852 // result: (First nil yes no) 11853 for { 11854 v := b.Control 11855 if v.Op != OpPPC64FlagGT { 11856 break 11857 } 11858 b.Kind = BlockFirst 11859 b.SetControl(nil) 11860 b.Aux = nil 11861 return true 11862 } 11863 // match: (NE (InvertFlags cmp) yes no) 11864 // cond: 11865 // result: (NE cmp yes no) 11866 for { 11867 v := b.Control 11868 if v.Op != OpPPC64InvertFlags { 11869 break 11870 } 11871 cmp := v.Args[0] 11872 b.Kind = BlockPPC64NE 11873 b.SetControl(cmp) 11874 b.Aux = nil 11875 return true 11876 } 11877 } 11878 return false 11879 }