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