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