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