Home | History | Annotate | Download | only in ssa
      1 // Code generated from gen/386.rules; DO NOT EDIT.
      2 // generated with: cd gen; go run *.go
      3 
      4 package ssa
      5 
      6 import "math"
      7 import "cmd/internal/obj"
      8 import "cmd/internal/objabi"
      9 import "cmd/compile/internal/types"
     10 
     11 var _ = math.MinInt8  // in case not otherwise used
     12 var _ = obj.ANOP      // in case not otherwise used
     13 var _ = objabi.GOROOT // in case not otherwise used
     14 var _ = types.TypeMem // in case not otherwise used
     15 
     16 func rewriteValue386(v *Value) bool {
     17 	switch v.Op {
     18 	case Op386ADCL:
     19 		return rewriteValue386_Op386ADCL_0(v)
     20 	case Op386ADDL:
     21 		return rewriteValue386_Op386ADDL_0(v) || rewriteValue386_Op386ADDL_10(v) || rewriteValue386_Op386ADDL_20(v)
     22 	case Op386ADDLcarry:
     23 		return rewriteValue386_Op386ADDLcarry_0(v)
     24 	case Op386ADDLconst:
     25 		return rewriteValue386_Op386ADDLconst_0(v)
     26 	case Op386ANDL:
     27 		return rewriteValue386_Op386ANDL_0(v)
     28 	case Op386ANDLconst:
     29 		return rewriteValue386_Op386ANDLconst_0(v)
     30 	case Op386CMPB:
     31 		return rewriteValue386_Op386CMPB_0(v)
     32 	case Op386CMPBconst:
     33 		return rewriteValue386_Op386CMPBconst_0(v)
     34 	case Op386CMPL:
     35 		return rewriteValue386_Op386CMPL_0(v)
     36 	case Op386CMPLconst:
     37 		return rewriteValue386_Op386CMPLconst_0(v)
     38 	case Op386CMPW:
     39 		return rewriteValue386_Op386CMPW_0(v)
     40 	case Op386CMPWconst:
     41 		return rewriteValue386_Op386CMPWconst_0(v)
     42 	case Op386LEAL:
     43 		return rewriteValue386_Op386LEAL_0(v)
     44 	case Op386LEAL1:
     45 		return rewriteValue386_Op386LEAL1_0(v)
     46 	case Op386LEAL2:
     47 		return rewriteValue386_Op386LEAL2_0(v)
     48 	case Op386LEAL4:
     49 		return rewriteValue386_Op386LEAL4_0(v)
     50 	case Op386LEAL8:
     51 		return rewriteValue386_Op386LEAL8_0(v)
     52 	case Op386MOVBLSX:
     53 		return rewriteValue386_Op386MOVBLSX_0(v)
     54 	case Op386MOVBLSXload:
     55 		return rewriteValue386_Op386MOVBLSXload_0(v)
     56 	case Op386MOVBLZX:
     57 		return rewriteValue386_Op386MOVBLZX_0(v)
     58 	case Op386MOVBload:
     59 		return rewriteValue386_Op386MOVBload_0(v)
     60 	case Op386MOVBloadidx1:
     61 		return rewriteValue386_Op386MOVBloadidx1_0(v)
     62 	case Op386MOVBstore:
     63 		return rewriteValue386_Op386MOVBstore_0(v)
     64 	case Op386MOVBstoreconst:
     65 		return rewriteValue386_Op386MOVBstoreconst_0(v)
     66 	case Op386MOVBstoreconstidx1:
     67 		return rewriteValue386_Op386MOVBstoreconstidx1_0(v)
     68 	case Op386MOVBstoreidx1:
     69 		return rewriteValue386_Op386MOVBstoreidx1_0(v) || rewriteValue386_Op386MOVBstoreidx1_10(v)
     70 	case Op386MOVLload:
     71 		return rewriteValue386_Op386MOVLload_0(v)
     72 	case Op386MOVLloadidx1:
     73 		return rewriteValue386_Op386MOVLloadidx1_0(v)
     74 	case Op386MOVLloadidx4:
     75 		return rewriteValue386_Op386MOVLloadidx4_0(v)
     76 	case Op386MOVLstore:
     77 		return rewriteValue386_Op386MOVLstore_0(v)
     78 	case Op386MOVLstoreconst:
     79 		return rewriteValue386_Op386MOVLstoreconst_0(v)
     80 	case Op386MOVLstoreconstidx1:
     81 		return rewriteValue386_Op386MOVLstoreconstidx1_0(v)
     82 	case Op386MOVLstoreconstidx4:
     83 		return rewriteValue386_Op386MOVLstoreconstidx4_0(v)
     84 	case Op386MOVLstoreidx1:
     85 		return rewriteValue386_Op386MOVLstoreidx1_0(v)
     86 	case Op386MOVLstoreidx4:
     87 		return rewriteValue386_Op386MOVLstoreidx4_0(v)
     88 	case Op386MOVSDconst:
     89 		return rewriteValue386_Op386MOVSDconst_0(v)
     90 	case Op386MOVSDload:
     91 		return rewriteValue386_Op386MOVSDload_0(v)
     92 	case Op386MOVSDloadidx1:
     93 		return rewriteValue386_Op386MOVSDloadidx1_0(v)
     94 	case Op386MOVSDloadidx8:
     95 		return rewriteValue386_Op386MOVSDloadidx8_0(v)
     96 	case Op386MOVSDstore:
     97 		return rewriteValue386_Op386MOVSDstore_0(v)
     98 	case Op386MOVSDstoreidx1:
     99 		return rewriteValue386_Op386MOVSDstoreidx1_0(v)
    100 	case Op386MOVSDstoreidx8:
    101 		return rewriteValue386_Op386MOVSDstoreidx8_0(v)
    102 	case Op386MOVSSconst:
    103 		return rewriteValue386_Op386MOVSSconst_0(v)
    104 	case Op386MOVSSload:
    105 		return rewriteValue386_Op386MOVSSload_0(v)
    106 	case Op386MOVSSloadidx1:
    107 		return rewriteValue386_Op386MOVSSloadidx1_0(v)
    108 	case Op386MOVSSloadidx4:
    109 		return rewriteValue386_Op386MOVSSloadidx4_0(v)
    110 	case Op386MOVSSstore:
    111 		return rewriteValue386_Op386MOVSSstore_0(v)
    112 	case Op386MOVSSstoreidx1:
    113 		return rewriteValue386_Op386MOVSSstoreidx1_0(v)
    114 	case Op386MOVSSstoreidx4:
    115 		return rewriteValue386_Op386MOVSSstoreidx4_0(v)
    116 	case Op386MOVWLSX:
    117 		return rewriteValue386_Op386MOVWLSX_0(v)
    118 	case Op386MOVWLSXload:
    119 		return rewriteValue386_Op386MOVWLSXload_0(v)
    120 	case Op386MOVWLZX:
    121 		return rewriteValue386_Op386MOVWLZX_0(v)
    122 	case Op386MOVWload:
    123 		return rewriteValue386_Op386MOVWload_0(v)
    124 	case Op386MOVWloadidx1:
    125 		return rewriteValue386_Op386MOVWloadidx1_0(v)
    126 	case Op386MOVWloadidx2:
    127 		return rewriteValue386_Op386MOVWloadidx2_0(v)
    128 	case Op386MOVWstore:
    129 		return rewriteValue386_Op386MOVWstore_0(v)
    130 	case Op386MOVWstoreconst:
    131 		return rewriteValue386_Op386MOVWstoreconst_0(v)
    132 	case Op386MOVWstoreconstidx1:
    133 		return rewriteValue386_Op386MOVWstoreconstidx1_0(v)
    134 	case Op386MOVWstoreconstidx2:
    135 		return rewriteValue386_Op386MOVWstoreconstidx2_0(v)
    136 	case Op386MOVWstoreidx1:
    137 		return rewriteValue386_Op386MOVWstoreidx1_0(v) || rewriteValue386_Op386MOVWstoreidx1_10(v)
    138 	case Op386MOVWstoreidx2:
    139 		return rewriteValue386_Op386MOVWstoreidx2_0(v)
    140 	case Op386MULL:
    141 		return rewriteValue386_Op386MULL_0(v)
    142 	case Op386MULLconst:
    143 		return rewriteValue386_Op386MULLconst_0(v) || rewriteValue386_Op386MULLconst_10(v) || rewriteValue386_Op386MULLconst_20(v)
    144 	case Op386NEGL:
    145 		return rewriteValue386_Op386NEGL_0(v)
    146 	case Op386NOTL:
    147 		return rewriteValue386_Op386NOTL_0(v)
    148 	case Op386ORL:
    149 		return rewriteValue386_Op386ORL_0(v) || rewriteValue386_Op386ORL_10(v) || rewriteValue386_Op386ORL_20(v) || rewriteValue386_Op386ORL_30(v) || rewriteValue386_Op386ORL_40(v) || rewriteValue386_Op386ORL_50(v)
    150 	case Op386ORLconst:
    151 		return rewriteValue386_Op386ORLconst_0(v)
    152 	case Op386ROLBconst:
    153 		return rewriteValue386_Op386ROLBconst_0(v)
    154 	case Op386ROLLconst:
    155 		return rewriteValue386_Op386ROLLconst_0(v)
    156 	case Op386ROLWconst:
    157 		return rewriteValue386_Op386ROLWconst_0(v)
    158 	case Op386SARB:
    159 		return rewriteValue386_Op386SARB_0(v)
    160 	case Op386SARBconst:
    161 		return rewriteValue386_Op386SARBconst_0(v)
    162 	case Op386SARL:
    163 		return rewriteValue386_Op386SARL_0(v)
    164 	case Op386SARLconst:
    165 		return rewriteValue386_Op386SARLconst_0(v)
    166 	case Op386SARW:
    167 		return rewriteValue386_Op386SARW_0(v)
    168 	case Op386SARWconst:
    169 		return rewriteValue386_Op386SARWconst_0(v)
    170 	case Op386SBBL:
    171 		return rewriteValue386_Op386SBBL_0(v)
    172 	case Op386SBBLcarrymask:
    173 		return rewriteValue386_Op386SBBLcarrymask_0(v)
    174 	case Op386SETA:
    175 		return rewriteValue386_Op386SETA_0(v)
    176 	case Op386SETAE:
    177 		return rewriteValue386_Op386SETAE_0(v)
    178 	case Op386SETB:
    179 		return rewriteValue386_Op386SETB_0(v)
    180 	case Op386SETBE:
    181 		return rewriteValue386_Op386SETBE_0(v)
    182 	case Op386SETEQ:
    183 		return rewriteValue386_Op386SETEQ_0(v)
    184 	case Op386SETG:
    185 		return rewriteValue386_Op386SETG_0(v)
    186 	case Op386SETGE:
    187 		return rewriteValue386_Op386SETGE_0(v)
    188 	case Op386SETL:
    189 		return rewriteValue386_Op386SETL_0(v)
    190 	case Op386SETLE:
    191 		return rewriteValue386_Op386SETLE_0(v)
    192 	case Op386SETNE:
    193 		return rewriteValue386_Op386SETNE_0(v)
    194 	case Op386SHLL:
    195 		return rewriteValue386_Op386SHLL_0(v)
    196 	case Op386SHLLconst:
    197 		return rewriteValue386_Op386SHLLconst_0(v)
    198 	case Op386SHRB:
    199 		return rewriteValue386_Op386SHRB_0(v)
    200 	case Op386SHRBconst:
    201 		return rewriteValue386_Op386SHRBconst_0(v)
    202 	case Op386SHRL:
    203 		return rewriteValue386_Op386SHRL_0(v)
    204 	case Op386SHRLconst:
    205 		return rewriteValue386_Op386SHRLconst_0(v)
    206 	case Op386SHRW:
    207 		return rewriteValue386_Op386SHRW_0(v)
    208 	case Op386SHRWconst:
    209 		return rewriteValue386_Op386SHRWconst_0(v)
    210 	case Op386SUBL:
    211 		return rewriteValue386_Op386SUBL_0(v)
    212 	case Op386SUBLcarry:
    213 		return rewriteValue386_Op386SUBLcarry_0(v)
    214 	case Op386SUBLconst:
    215 		return rewriteValue386_Op386SUBLconst_0(v)
    216 	case Op386XORL:
    217 		return rewriteValue386_Op386XORL_0(v)
    218 	case Op386XORLconst:
    219 		return rewriteValue386_Op386XORLconst_0(v)
    220 	case OpAdd16:
    221 		return rewriteValue386_OpAdd16_0(v)
    222 	case OpAdd32:
    223 		return rewriteValue386_OpAdd32_0(v)
    224 	case OpAdd32F:
    225 		return rewriteValue386_OpAdd32F_0(v)
    226 	case OpAdd32carry:
    227 		return rewriteValue386_OpAdd32carry_0(v)
    228 	case OpAdd32withcarry:
    229 		return rewriteValue386_OpAdd32withcarry_0(v)
    230 	case OpAdd64F:
    231 		return rewriteValue386_OpAdd64F_0(v)
    232 	case OpAdd8:
    233 		return rewriteValue386_OpAdd8_0(v)
    234 	case OpAddPtr:
    235 		return rewriteValue386_OpAddPtr_0(v)
    236 	case OpAddr:
    237 		return rewriteValue386_OpAddr_0(v)
    238 	case OpAnd16:
    239 		return rewriteValue386_OpAnd16_0(v)
    240 	case OpAnd32:
    241 		return rewriteValue386_OpAnd32_0(v)
    242 	case OpAnd8:
    243 		return rewriteValue386_OpAnd8_0(v)
    244 	case OpAndB:
    245 		return rewriteValue386_OpAndB_0(v)
    246 	case OpAvg32u:
    247 		return rewriteValue386_OpAvg32u_0(v)
    248 	case OpBswap32:
    249 		return rewriteValue386_OpBswap32_0(v)
    250 	case OpClosureCall:
    251 		return rewriteValue386_OpClosureCall_0(v)
    252 	case OpCom16:
    253 		return rewriteValue386_OpCom16_0(v)
    254 	case OpCom32:
    255 		return rewriteValue386_OpCom32_0(v)
    256 	case OpCom8:
    257 		return rewriteValue386_OpCom8_0(v)
    258 	case OpConst16:
    259 		return rewriteValue386_OpConst16_0(v)
    260 	case OpConst32:
    261 		return rewriteValue386_OpConst32_0(v)
    262 	case OpConst32F:
    263 		return rewriteValue386_OpConst32F_0(v)
    264 	case OpConst64F:
    265 		return rewriteValue386_OpConst64F_0(v)
    266 	case OpConst8:
    267 		return rewriteValue386_OpConst8_0(v)
    268 	case OpConstBool:
    269 		return rewriteValue386_OpConstBool_0(v)
    270 	case OpConstNil:
    271 		return rewriteValue386_OpConstNil_0(v)
    272 	case OpConvert:
    273 		return rewriteValue386_OpConvert_0(v)
    274 	case OpCvt32Fto32:
    275 		return rewriteValue386_OpCvt32Fto32_0(v)
    276 	case OpCvt32Fto64F:
    277 		return rewriteValue386_OpCvt32Fto64F_0(v)
    278 	case OpCvt32to32F:
    279 		return rewriteValue386_OpCvt32to32F_0(v)
    280 	case OpCvt32to64F:
    281 		return rewriteValue386_OpCvt32to64F_0(v)
    282 	case OpCvt64Fto32:
    283 		return rewriteValue386_OpCvt64Fto32_0(v)
    284 	case OpCvt64Fto32F:
    285 		return rewriteValue386_OpCvt64Fto32F_0(v)
    286 	case OpDiv16:
    287 		return rewriteValue386_OpDiv16_0(v)
    288 	case OpDiv16u:
    289 		return rewriteValue386_OpDiv16u_0(v)
    290 	case OpDiv32:
    291 		return rewriteValue386_OpDiv32_0(v)
    292 	case OpDiv32F:
    293 		return rewriteValue386_OpDiv32F_0(v)
    294 	case OpDiv32u:
    295 		return rewriteValue386_OpDiv32u_0(v)
    296 	case OpDiv64F:
    297 		return rewriteValue386_OpDiv64F_0(v)
    298 	case OpDiv8:
    299 		return rewriteValue386_OpDiv8_0(v)
    300 	case OpDiv8u:
    301 		return rewriteValue386_OpDiv8u_0(v)
    302 	case OpEq16:
    303 		return rewriteValue386_OpEq16_0(v)
    304 	case OpEq32:
    305 		return rewriteValue386_OpEq32_0(v)
    306 	case OpEq32F:
    307 		return rewriteValue386_OpEq32F_0(v)
    308 	case OpEq64F:
    309 		return rewriteValue386_OpEq64F_0(v)
    310 	case OpEq8:
    311 		return rewriteValue386_OpEq8_0(v)
    312 	case OpEqB:
    313 		return rewriteValue386_OpEqB_0(v)
    314 	case OpEqPtr:
    315 		return rewriteValue386_OpEqPtr_0(v)
    316 	case OpGeq16:
    317 		return rewriteValue386_OpGeq16_0(v)
    318 	case OpGeq16U:
    319 		return rewriteValue386_OpGeq16U_0(v)
    320 	case OpGeq32:
    321 		return rewriteValue386_OpGeq32_0(v)
    322 	case OpGeq32F:
    323 		return rewriteValue386_OpGeq32F_0(v)
    324 	case OpGeq32U:
    325 		return rewriteValue386_OpGeq32U_0(v)
    326 	case OpGeq64F:
    327 		return rewriteValue386_OpGeq64F_0(v)
    328 	case OpGeq8:
    329 		return rewriteValue386_OpGeq8_0(v)
    330 	case OpGeq8U:
    331 		return rewriteValue386_OpGeq8U_0(v)
    332 	case OpGetCallerPC:
    333 		return rewriteValue386_OpGetCallerPC_0(v)
    334 	case OpGetCallerSP:
    335 		return rewriteValue386_OpGetCallerSP_0(v)
    336 	case OpGetClosurePtr:
    337 		return rewriteValue386_OpGetClosurePtr_0(v)
    338 	case OpGetG:
    339 		return rewriteValue386_OpGetG_0(v)
    340 	case OpGreater16:
    341 		return rewriteValue386_OpGreater16_0(v)
    342 	case OpGreater16U:
    343 		return rewriteValue386_OpGreater16U_0(v)
    344 	case OpGreater32:
    345 		return rewriteValue386_OpGreater32_0(v)
    346 	case OpGreater32F:
    347 		return rewriteValue386_OpGreater32F_0(v)
    348 	case OpGreater32U:
    349 		return rewriteValue386_OpGreater32U_0(v)
    350 	case OpGreater64F:
    351 		return rewriteValue386_OpGreater64F_0(v)
    352 	case OpGreater8:
    353 		return rewriteValue386_OpGreater8_0(v)
    354 	case OpGreater8U:
    355 		return rewriteValue386_OpGreater8U_0(v)
    356 	case OpHmul32:
    357 		return rewriteValue386_OpHmul32_0(v)
    358 	case OpHmul32u:
    359 		return rewriteValue386_OpHmul32u_0(v)
    360 	case OpInterCall:
    361 		return rewriteValue386_OpInterCall_0(v)
    362 	case OpIsInBounds:
    363 		return rewriteValue386_OpIsInBounds_0(v)
    364 	case OpIsNonNil:
    365 		return rewriteValue386_OpIsNonNil_0(v)
    366 	case OpIsSliceInBounds:
    367 		return rewriteValue386_OpIsSliceInBounds_0(v)
    368 	case OpLeq16:
    369 		return rewriteValue386_OpLeq16_0(v)
    370 	case OpLeq16U:
    371 		return rewriteValue386_OpLeq16U_0(v)
    372 	case OpLeq32:
    373 		return rewriteValue386_OpLeq32_0(v)
    374 	case OpLeq32F:
    375 		return rewriteValue386_OpLeq32F_0(v)
    376 	case OpLeq32U:
    377 		return rewriteValue386_OpLeq32U_0(v)
    378 	case OpLeq64F:
    379 		return rewriteValue386_OpLeq64F_0(v)
    380 	case OpLeq8:
    381 		return rewriteValue386_OpLeq8_0(v)
    382 	case OpLeq8U:
    383 		return rewriteValue386_OpLeq8U_0(v)
    384 	case OpLess16:
    385 		return rewriteValue386_OpLess16_0(v)
    386 	case OpLess16U:
    387 		return rewriteValue386_OpLess16U_0(v)
    388 	case OpLess32:
    389 		return rewriteValue386_OpLess32_0(v)
    390 	case OpLess32F:
    391 		return rewriteValue386_OpLess32F_0(v)
    392 	case OpLess32U:
    393 		return rewriteValue386_OpLess32U_0(v)
    394 	case OpLess64F:
    395 		return rewriteValue386_OpLess64F_0(v)
    396 	case OpLess8:
    397 		return rewriteValue386_OpLess8_0(v)
    398 	case OpLess8U:
    399 		return rewriteValue386_OpLess8U_0(v)
    400 	case OpLoad:
    401 		return rewriteValue386_OpLoad_0(v)
    402 	case OpLsh16x16:
    403 		return rewriteValue386_OpLsh16x16_0(v)
    404 	case OpLsh16x32:
    405 		return rewriteValue386_OpLsh16x32_0(v)
    406 	case OpLsh16x64:
    407 		return rewriteValue386_OpLsh16x64_0(v)
    408 	case OpLsh16x8:
    409 		return rewriteValue386_OpLsh16x8_0(v)
    410 	case OpLsh32x16:
    411 		return rewriteValue386_OpLsh32x16_0(v)
    412 	case OpLsh32x32:
    413 		return rewriteValue386_OpLsh32x32_0(v)
    414 	case OpLsh32x64:
    415 		return rewriteValue386_OpLsh32x64_0(v)
    416 	case OpLsh32x8:
    417 		return rewriteValue386_OpLsh32x8_0(v)
    418 	case OpLsh8x16:
    419 		return rewriteValue386_OpLsh8x16_0(v)
    420 	case OpLsh8x32:
    421 		return rewriteValue386_OpLsh8x32_0(v)
    422 	case OpLsh8x64:
    423 		return rewriteValue386_OpLsh8x64_0(v)
    424 	case OpLsh8x8:
    425 		return rewriteValue386_OpLsh8x8_0(v)
    426 	case OpMod16:
    427 		return rewriteValue386_OpMod16_0(v)
    428 	case OpMod16u:
    429 		return rewriteValue386_OpMod16u_0(v)
    430 	case OpMod32:
    431 		return rewriteValue386_OpMod32_0(v)
    432 	case OpMod32u:
    433 		return rewriteValue386_OpMod32u_0(v)
    434 	case OpMod8:
    435 		return rewriteValue386_OpMod8_0(v)
    436 	case OpMod8u:
    437 		return rewriteValue386_OpMod8u_0(v)
    438 	case OpMove:
    439 		return rewriteValue386_OpMove_0(v) || rewriteValue386_OpMove_10(v)
    440 	case OpMul16:
    441 		return rewriteValue386_OpMul16_0(v)
    442 	case OpMul32:
    443 		return rewriteValue386_OpMul32_0(v)
    444 	case OpMul32F:
    445 		return rewriteValue386_OpMul32F_0(v)
    446 	case OpMul32uhilo:
    447 		return rewriteValue386_OpMul32uhilo_0(v)
    448 	case OpMul64F:
    449 		return rewriteValue386_OpMul64F_0(v)
    450 	case OpMul8:
    451 		return rewriteValue386_OpMul8_0(v)
    452 	case OpNeg16:
    453 		return rewriteValue386_OpNeg16_0(v)
    454 	case OpNeg32:
    455 		return rewriteValue386_OpNeg32_0(v)
    456 	case OpNeg32F:
    457 		return rewriteValue386_OpNeg32F_0(v)
    458 	case OpNeg64F:
    459 		return rewriteValue386_OpNeg64F_0(v)
    460 	case OpNeg8:
    461 		return rewriteValue386_OpNeg8_0(v)
    462 	case OpNeq16:
    463 		return rewriteValue386_OpNeq16_0(v)
    464 	case OpNeq32:
    465 		return rewriteValue386_OpNeq32_0(v)
    466 	case OpNeq32F:
    467 		return rewriteValue386_OpNeq32F_0(v)
    468 	case OpNeq64F:
    469 		return rewriteValue386_OpNeq64F_0(v)
    470 	case OpNeq8:
    471 		return rewriteValue386_OpNeq8_0(v)
    472 	case OpNeqB:
    473 		return rewriteValue386_OpNeqB_0(v)
    474 	case OpNeqPtr:
    475 		return rewriteValue386_OpNeqPtr_0(v)
    476 	case OpNilCheck:
    477 		return rewriteValue386_OpNilCheck_0(v)
    478 	case OpNot:
    479 		return rewriteValue386_OpNot_0(v)
    480 	case OpOffPtr:
    481 		return rewriteValue386_OpOffPtr_0(v)
    482 	case OpOr16:
    483 		return rewriteValue386_OpOr16_0(v)
    484 	case OpOr32:
    485 		return rewriteValue386_OpOr32_0(v)
    486 	case OpOr8:
    487 		return rewriteValue386_OpOr8_0(v)
    488 	case OpOrB:
    489 		return rewriteValue386_OpOrB_0(v)
    490 	case OpRound32F:
    491 		return rewriteValue386_OpRound32F_0(v)
    492 	case OpRound64F:
    493 		return rewriteValue386_OpRound64F_0(v)
    494 	case OpRsh16Ux16:
    495 		return rewriteValue386_OpRsh16Ux16_0(v)
    496 	case OpRsh16Ux32:
    497 		return rewriteValue386_OpRsh16Ux32_0(v)
    498 	case OpRsh16Ux64:
    499 		return rewriteValue386_OpRsh16Ux64_0(v)
    500 	case OpRsh16Ux8:
    501 		return rewriteValue386_OpRsh16Ux8_0(v)
    502 	case OpRsh16x16:
    503 		return rewriteValue386_OpRsh16x16_0(v)
    504 	case OpRsh16x32:
    505 		return rewriteValue386_OpRsh16x32_0(v)
    506 	case OpRsh16x64:
    507 		return rewriteValue386_OpRsh16x64_0(v)
    508 	case OpRsh16x8:
    509 		return rewriteValue386_OpRsh16x8_0(v)
    510 	case OpRsh32Ux16:
    511 		return rewriteValue386_OpRsh32Ux16_0(v)
    512 	case OpRsh32Ux32:
    513 		return rewriteValue386_OpRsh32Ux32_0(v)
    514 	case OpRsh32Ux64:
    515 		return rewriteValue386_OpRsh32Ux64_0(v)
    516 	case OpRsh32Ux8:
    517 		return rewriteValue386_OpRsh32Ux8_0(v)
    518 	case OpRsh32x16:
    519 		return rewriteValue386_OpRsh32x16_0(v)
    520 	case OpRsh32x32:
    521 		return rewriteValue386_OpRsh32x32_0(v)
    522 	case OpRsh32x64:
    523 		return rewriteValue386_OpRsh32x64_0(v)
    524 	case OpRsh32x8:
    525 		return rewriteValue386_OpRsh32x8_0(v)
    526 	case OpRsh8Ux16:
    527 		return rewriteValue386_OpRsh8Ux16_0(v)
    528 	case OpRsh8Ux32:
    529 		return rewriteValue386_OpRsh8Ux32_0(v)
    530 	case OpRsh8Ux64:
    531 		return rewriteValue386_OpRsh8Ux64_0(v)
    532 	case OpRsh8Ux8:
    533 		return rewriteValue386_OpRsh8Ux8_0(v)
    534 	case OpRsh8x16:
    535 		return rewriteValue386_OpRsh8x16_0(v)
    536 	case OpRsh8x32:
    537 		return rewriteValue386_OpRsh8x32_0(v)
    538 	case OpRsh8x64:
    539 		return rewriteValue386_OpRsh8x64_0(v)
    540 	case OpRsh8x8:
    541 		return rewriteValue386_OpRsh8x8_0(v)
    542 	case OpSignExt16to32:
    543 		return rewriteValue386_OpSignExt16to32_0(v)
    544 	case OpSignExt8to16:
    545 		return rewriteValue386_OpSignExt8to16_0(v)
    546 	case OpSignExt8to32:
    547 		return rewriteValue386_OpSignExt8to32_0(v)
    548 	case OpSignmask:
    549 		return rewriteValue386_OpSignmask_0(v)
    550 	case OpSlicemask:
    551 		return rewriteValue386_OpSlicemask_0(v)
    552 	case OpSqrt:
    553 		return rewriteValue386_OpSqrt_0(v)
    554 	case OpStaticCall:
    555 		return rewriteValue386_OpStaticCall_0(v)
    556 	case OpStore:
    557 		return rewriteValue386_OpStore_0(v)
    558 	case OpSub16:
    559 		return rewriteValue386_OpSub16_0(v)
    560 	case OpSub32:
    561 		return rewriteValue386_OpSub32_0(v)
    562 	case OpSub32F:
    563 		return rewriteValue386_OpSub32F_0(v)
    564 	case OpSub32carry:
    565 		return rewriteValue386_OpSub32carry_0(v)
    566 	case OpSub32withcarry:
    567 		return rewriteValue386_OpSub32withcarry_0(v)
    568 	case OpSub64F:
    569 		return rewriteValue386_OpSub64F_0(v)
    570 	case OpSub8:
    571 		return rewriteValue386_OpSub8_0(v)
    572 	case OpSubPtr:
    573 		return rewriteValue386_OpSubPtr_0(v)
    574 	case OpTrunc16to8:
    575 		return rewriteValue386_OpTrunc16to8_0(v)
    576 	case OpTrunc32to16:
    577 		return rewriteValue386_OpTrunc32to16_0(v)
    578 	case OpTrunc32to8:
    579 		return rewriteValue386_OpTrunc32to8_0(v)
    580 	case OpXor16:
    581 		return rewriteValue386_OpXor16_0(v)
    582 	case OpXor32:
    583 		return rewriteValue386_OpXor32_0(v)
    584 	case OpXor8:
    585 		return rewriteValue386_OpXor8_0(v)
    586 	case OpZero:
    587 		return rewriteValue386_OpZero_0(v) || rewriteValue386_OpZero_10(v)
    588 	case OpZeroExt16to32:
    589 		return rewriteValue386_OpZeroExt16to32_0(v)
    590 	case OpZeroExt8to16:
    591 		return rewriteValue386_OpZeroExt8to16_0(v)
    592 	case OpZeroExt8to32:
    593 		return rewriteValue386_OpZeroExt8to32_0(v)
    594 	case OpZeromask:
    595 		return rewriteValue386_OpZeromask_0(v)
    596 	}
    597 	return false
    598 }
    599 func rewriteValue386_Op386ADCL_0(v *Value) bool {
    600 	// match: (ADCL x (MOVLconst [c]) f)
    601 	// cond:
    602 	// result: (ADCLconst [c] x f)
    603 	for {
    604 		_ = v.Args[2]
    605 		x := v.Args[0]
    606 		v_1 := v.Args[1]
    607 		if v_1.Op != Op386MOVLconst {
    608 			break
    609 		}
    610 		c := v_1.AuxInt
    611 		f := v.Args[2]
    612 		v.reset(Op386ADCLconst)
    613 		v.AuxInt = c
    614 		v.AddArg(x)
    615 		v.AddArg(f)
    616 		return true
    617 	}
    618 	// match: (ADCL (MOVLconst [c]) x f)
    619 	// cond:
    620 	// result: (ADCLconst [c] x f)
    621 	for {
    622 		_ = v.Args[2]
    623 		v_0 := v.Args[0]
    624 		if v_0.Op != Op386MOVLconst {
    625 			break
    626 		}
    627 		c := v_0.AuxInt
    628 		x := v.Args[1]
    629 		f := v.Args[2]
    630 		v.reset(Op386ADCLconst)
    631 		v.AuxInt = c
    632 		v.AddArg(x)
    633 		v.AddArg(f)
    634 		return true
    635 	}
    636 	// match: (ADCL (MOVLconst [c]) x f)
    637 	// cond:
    638 	// result: (ADCLconst [c] x f)
    639 	for {
    640 		_ = v.Args[2]
    641 		v_0 := v.Args[0]
    642 		if v_0.Op != Op386MOVLconst {
    643 			break
    644 		}
    645 		c := v_0.AuxInt
    646 		x := v.Args[1]
    647 		f := v.Args[2]
    648 		v.reset(Op386ADCLconst)
    649 		v.AuxInt = c
    650 		v.AddArg(x)
    651 		v.AddArg(f)
    652 		return true
    653 	}
    654 	// match: (ADCL x (MOVLconst [c]) f)
    655 	// cond:
    656 	// result: (ADCLconst [c] x f)
    657 	for {
    658 		_ = v.Args[2]
    659 		x := v.Args[0]
    660 		v_1 := v.Args[1]
    661 		if v_1.Op != Op386MOVLconst {
    662 			break
    663 		}
    664 		c := v_1.AuxInt
    665 		f := v.Args[2]
    666 		v.reset(Op386ADCLconst)
    667 		v.AuxInt = c
    668 		v.AddArg(x)
    669 		v.AddArg(f)
    670 		return true
    671 	}
    672 	return false
    673 }
    674 func rewriteValue386_Op386ADDL_0(v *Value) bool {
    675 	// match: (ADDL x (MOVLconst [c]))
    676 	// cond:
    677 	// result: (ADDLconst [c] x)
    678 	for {
    679 		_ = v.Args[1]
    680 		x := v.Args[0]
    681 		v_1 := v.Args[1]
    682 		if v_1.Op != Op386MOVLconst {
    683 			break
    684 		}
    685 		c := v_1.AuxInt
    686 		v.reset(Op386ADDLconst)
    687 		v.AuxInt = c
    688 		v.AddArg(x)
    689 		return true
    690 	}
    691 	// match: (ADDL (MOVLconst [c]) x)
    692 	// cond:
    693 	// result: (ADDLconst [c] x)
    694 	for {
    695 		_ = v.Args[1]
    696 		v_0 := v.Args[0]
    697 		if v_0.Op != Op386MOVLconst {
    698 			break
    699 		}
    700 		c := v_0.AuxInt
    701 		x := v.Args[1]
    702 		v.reset(Op386ADDLconst)
    703 		v.AuxInt = c
    704 		v.AddArg(x)
    705 		return true
    706 	}
    707 	// match: (ADDL (SHLLconst [c] x) (SHRLconst [d] x))
    708 	// cond: d == 32-c
    709 	// result: (ROLLconst [c] x)
    710 	for {
    711 		_ = v.Args[1]
    712 		v_0 := v.Args[0]
    713 		if v_0.Op != Op386SHLLconst {
    714 			break
    715 		}
    716 		c := v_0.AuxInt
    717 		x := v_0.Args[0]
    718 		v_1 := v.Args[1]
    719 		if v_1.Op != Op386SHRLconst {
    720 			break
    721 		}
    722 		d := v_1.AuxInt
    723 		if x != v_1.Args[0] {
    724 			break
    725 		}
    726 		if !(d == 32-c) {
    727 			break
    728 		}
    729 		v.reset(Op386ROLLconst)
    730 		v.AuxInt = c
    731 		v.AddArg(x)
    732 		return true
    733 	}
    734 	// match: (ADDL (SHRLconst [d] x) (SHLLconst [c] x))
    735 	// cond: d == 32-c
    736 	// result: (ROLLconst [c] x)
    737 	for {
    738 		_ = v.Args[1]
    739 		v_0 := v.Args[0]
    740 		if v_0.Op != Op386SHRLconst {
    741 			break
    742 		}
    743 		d := v_0.AuxInt
    744 		x := v_0.Args[0]
    745 		v_1 := v.Args[1]
    746 		if v_1.Op != Op386SHLLconst {
    747 			break
    748 		}
    749 		c := v_1.AuxInt
    750 		if x != v_1.Args[0] {
    751 			break
    752 		}
    753 		if !(d == 32-c) {
    754 			break
    755 		}
    756 		v.reset(Op386ROLLconst)
    757 		v.AuxInt = c
    758 		v.AddArg(x)
    759 		return true
    760 	}
    761 	// match: (ADDL <t> (SHLLconst x [c]) (SHRWconst x [d]))
    762 	// cond: c < 16 && d == 16-c && t.Size() == 2
    763 	// result: (ROLWconst x [c])
    764 	for {
    765 		t := v.Type
    766 		_ = v.Args[1]
    767 		v_0 := v.Args[0]
    768 		if v_0.Op != Op386SHLLconst {
    769 			break
    770 		}
    771 		c := v_0.AuxInt
    772 		x := v_0.Args[0]
    773 		v_1 := v.Args[1]
    774 		if v_1.Op != Op386SHRWconst {
    775 			break
    776 		}
    777 		d := v_1.AuxInt
    778 		if x != v_1.Args[0] {
    779 			break
    780 		}
    781 		if !(c < 16 && d == 16-c && t.Size() == 2) {
    782 			break
    783 		}
    784 		v.reset(Op386ROLWconst)
    785 		v.AuxInt = c
    786 		v.AddArg(x)
    787 		return true
    788 	}
    789 	// match: (ADDL <t> (SHRWconst x [d]) (SHLLconst x [c]))
    790 	// cond: c < 16 && d == 16-c && t.Size() == 2
    791 	// result: (ROLWconst x [c])
    792 	for {
    793 		t := v.Type
    794 		_ = v.Args[1]
    795 		v_0 := v.Args[0]
    796 		if v_0.Op != Op386SHRWconst {
    797 			break
    798 		}
    799 		d := v_0.AuxInt
    800 		x := v_0.Args[0]
    801 		v_1 := v.Args[1]
    802 		if v_1.Op != Op386SHLLconst {
    803 			break
    804 		}
    805 		c := v_1.AuxInt
    806 		if x != v_1.Args[0] {
    807 			break
    808 		}
    809 		if !(c < 16 && d == 16-c && t.Size() == 2) {
    810 			break
    811 		}
    812 		v.reset(Op386ROLWconst)
    813 		v.AuxInt = c
    814 		v.AddArg(x)
    815 		return true
    816 	}
    817 	// match: (ADDL <t> (SHLLconst x [c]) (SHRBconst x [d]))
    818 	// cond: c < 8 && d == 8-c && t.Size() == 1
    819 	// result: (ROLBconst x [c])
    820 	for {
    821 		t := v.Type
    822 		_ = v.Args[1]
    823 		v_0 := v.Args[0]
    824 		if v_0.Op != Op386SHLLconst {
    825 			break
    826 		}
    827 		c := v_0.AuxInt
    828 		x := v_0.Args[0]
    829 		v_1 := v.Args[1]
    830 		if v_1.Op != Op386SHRBconst {
    831 			break
    832 		}
    833 		d := v_1.AuxInt
    834 		if x != v_1.Args[0] {
    835 			break
    836 		}
    837 		if !(c < 8 && d == 8-c && t.Size() == 1) {
    838 			break
    839 		}
    840 		v.reset(Op386ROLBconst)
    841 		v.AuxInt = c
    842 		v.AddArg(x)
    843 		return true
    844 	}
    845 	// match: (ADDL <t> (SHRBconst x [d]) (SHLLconst x [c]))
    846 	// cond: c < 8 && d == 8-c && t.Size() == 1
    847 	// result: (ROLBconst x [c])
    848 	for {
    849 		t := v.Type
    850 		_ = v.Args[1]
    851 		v_0 := v.Args[0]
    852 		if v_0.Op != Op386SHRBconst {
    853 			break
    854 		}
    855 		d := v_0.AuxInt
    856 		x := v_0.Args[0]
    857 		v_1 := v.Args[1]
    858 		if v_1.Op != Op386SHLLconst {
    859 			break
    860 		}
    861 		c := v_1.AuxInt
    862 		if x != v_1.Args[0] {
    863 			break
    864 		}
    865 		if !(c < 8 && d == 8-c && t.Size() == 1) {
    866 			break
    867 		}
    868 		v.reset(Op386ROLBconst)
    869 		v.AuxInt = c
    870 		v.AddArg(x)
    871 		return true
    872 	}
    873 	// match: (ADDL x (SHLLconst [3] y))
    874 	// cond:
    875 	// result: (LEAL8 x y)
    876 	for {
    877 		_ = v.Args[1]
    878 		x := v.Args[0]
    879 		v_1 := v.Args[1]
    880 		if v_1.Op != Op386SHLLconst {
    881 			break
    882 		}
    883 		if v_1.AuxInt != 3 {
    884 			break
    885 		}
    886 		y := v_1.Args[0]
    887 		v.reset(Op386LEAL8)
    888 		v.AddArg(x)
    889 		v.AddArg(y)
    890 		return true
    891 	}
    892 	// match: (ADDL (SHLLconst [3] y) x)
    893 	// cond:
    894 	// result: (LEAL8 x y)
    895 	for {
    896 		_ = v.Args[1]
    897 		v_0 := v.Args[0]
    898 		if v_0.Op != Op386SHLLconst {
    899 			break
    900 		}
    901 		if v_0.AuxInt != 3 {
    902 			break
    903 		}
    904 		y := v_0.Args[0]
    905 		x := v.Args[1]
    906 		v.reset(Op386LEAL8)
    907 		v.AddArg(x)
    908 		v.AddArg(y)
    909 		return true
    910 	}
    911 	return false
    912 }
    913 func rewriteValue386_Op386ADDL_10(v *Value) bool {
    914 	// match: (ADDL x (SHLLconst [2] y))
    915 	// cond:
    916 	// result: (LEAL4 x y)
    917 	for {
    918 		_ = v.Args[1]
    919 		x := v.Args[0]
    920 		v_1 := v.Args[1]
    921 		if v_1.Op != Op386SHLLconst {
    922 			break
    923 		}
    924 		if v_1.AuxInt != 2 {
    925 			break
    926 		}
    927 		y := v_1.Args[0]
    928 		v.reset(Op386LEAL4)
    929 		v.AddArg(x)
    930 		v.AddArg(y)
    931 		return true
    932 	}
    933 	// match: (ADDL (SHLLconst [2] y) x)
    934 	// cond:
    935 	// result: (LEAL4 x y)
    936 	for {
    937 		_ = v.Args[1]
    938 		v_0 := v.Args[0]
    939 		if v_0.Op != Op386SHLLconst {
    940 			break
    941 		}
    942 		if v_0.AuxInt != 2 {
    943 			break
    944 		}
    945 		y := v_0.Args[0]
    946 		x := v.Args[1]
    947 		v.reset(Op386LEAL4)
    948 		v.AddArg(x)
    949 		v.AddArg(y)
    950 		return true
    951 	}
    952 	// match: (ADDL x (SHLLconst [1] y))
    953 	// cond:
    954 	// result: (LEAL2 x y)
    955 	for {
    956 		_ = v.Args[1]
    957 		x := v.Args[0]
    958 		v_1 := v.Args[1]
    959 		if v_1.Op != Op386SHLLconst {
    960 			break
    961 		}
    962 		if v_1.AuxInt != 1 {
    963 			break
    964 		}
    965 		y := v_1.Args[0]
    966 		v.reset(Op386LEAL2)
    967 		v.AddArg(x)
    968 		v.AddArg(y)
    969 		return true
    970 	}
    971 	// match: (ADDL (SHLLconst [1] y) x)
    972 	// cond:
    973 	// result: (LEAL2 x y)
    974 	for {
    975 		_ = v.Args[1]
    976 		v_0 := v.Args[0]
    977 		if v_0.Op != Op386SHLLconst {
    978 			break
    979 		}
    980 		if v_0.AuxInt != 1 {
    981 			break
    982 		}
    983 		y := v_0.Args[0]
    984 		x := v.Args[1]
    985 		v.reset(Op386LEAL2)
    986 		v.AddArg(x)
    987 		v.AddArg(y)
    988 		return true
    989 	}
    990 	// match: (ADDL x (ADDL y y))
    991 	// cond:
    992 	// result: (LEAL2 x y)
    993 	for {
    994 		_ = v.Args[1]
    995 		x := v.Args[0]
    996 		v_1 := v.Args[1]
    997 		if v_1.Op != Op386ADDL {
    998 			break
    999 		}
   1000 		_ = v_1.Args[1]
   1001 		y := v_1.Args[0]
   1002 		if y != v_1.Args[1] {
   1003 			break
   1004 		}
   1005 		v.reset(Op386LEAL2)
   1006 		v.AddArg(x)
   1007 		v.AddArg(y)
   1008 		return true
   1009 	}
   1010 	// match: (ADDL (ADDL y y) x)
   1011 	// cond:
   1012 	// result: (LEAL2 x y)
   1013 	for {
   1014 		_ = v.Args[1]
   1015 		v_0 := v.Args[0]
   1016 		if v_0.Op != Op386ADDL {
   1017 			break
   1018 		}
   1019 		_ = v_0.Args[1]
   1020 		y := v_0.Args[0]
   1021 		if y != v_0.Args[1] {
   1022 			break
   1023 		}
   1024 		x := v.Args[1]
   1025 		v.reset(Op386LEAL2)
   1026 		v.AddArg(x)
   1027 		v.AddArg(y)
   1028 		return true
   1029 	}
   1030 	// match: (ADDL x (ADDL x y))
   1031 	// cond:
   1032 	// result: (LEAL2 y x)
   1033 	for {
   1034 		_ = v.Args[1]
   1035 		x := v.Args[0]
   1036 		v_1 := v.Args[1]
   1037 		if v_1.Op != Op386ADDL {
   1038 			break
   1039 		}
   1040 		_ = v_1.Args[1]
   1041 		if x != v_1.Args[0] {
   1042 			break
   1043 		}
   1044 		y := v_1.Args[1]
   1045 		v.reset(Op386LEAL2)
   1046 		v.AddArg(y)
   1047 		v.AddArg(x)
   1048 		return true
   1049 	}
   1050 	// match: (ADDL x (ADDL y x))
   1051 	// cond:
   1052 	// result: (LEAL2 y x)
   1053 	for {
   1054 		_ = v.Args[1]
   1055 		x := v.Args[0]
   1056 		v_1 := v.Args[1]
   1057 		if v_1.Op != Op386ADDL {
   1058 			break
   1059 		}
   1060 		_ = v_1.Args[1]
   1061 		y := v_1.Args[0]
   1062 		if x != v_1.Args[1] {
   1063 			break
   1064 		}
   1065 		v.reset(Op386LEAL2)
   1066 		v.AddArg(y)
   1067 		v.AddArg(x)
   1068 		return true
   1069 	}
   1070 	// match: (ADDL (ADDL x y) x)
   1071 	// cond:
   1072 	// result: (LEAL2 y x)
   1073 	for {
   1074 		_ = v.Args[1]
   1075 		v_0 := v.Args[0]
   1076 		if v_0.Op != Op386ADDL {
   1077 			break
   1078 		}
   1079 		_ = v_0.Args[1]
   1080 		x := v_0.Args[0]
   1081 		y := v_0.Args[1]
   1082 		if x != v.Args[1] {
   1083 			break
   1084 		}
   1085 		v.reset(Op386LEAL2)
   1086 		v.AddArg(y)
   1087 		v.AddArg(x)
   1088 		return true
   1089 	}
   1090 	// match: (ADDL (ADDL y x) x)
   1091 	// cond:
   1092 	// result: (LEAL2 y x)
   1093 	for {
   1094 		_ = v.Args[1]
   1095 		v_0 := v.Args[0]
   1096 		if v_0.Op != Op386ADDL {
   1097 			break
   1098 		}
   1099 		_ = v_0.Args[1]
   1100 		y := v_0.Args[0]
   1101 		x := v_0.Args[1]
   1102 		if x != v.Args[1] {
   1103 			break
   1104 		}
   1105 		v.reset(Op386LEAL2)
   1106 		v.AddArg(y)
   1107 		v.AddArg(x)
   1108 		return true
   1109 	}
   1110 	return false
   1111 }
   1112 func rewriteValue386_Op386ADDL_20(v *Value) bool {
   1113 	// match: (ADDL (ADDLconst [c] x) y)
   1114 	// cond:
   1115 	// result: (LEAL1 [c] x y)
   1116 	for {
   1117 		_ = v.Args[1]
   1118 		v_0 := v.Args[0]
   1119 		if v_0.Op != Op386ADDLconst {
   1120 			break
   1121 		}
   1122 		c := v_0.AuxInt
   1123 		x := v_0.Args[0]
   1124 		y := v.Args[1]
   1125 		v.reset(Op386LEAL1)
   1126 		v.AuxInt = c
   1127 		v.AddArg(x)
   1128 		v.AddArg(y)
   1129 		return true
   1130 	}
   1131 	// match: (ADDL y (ADDLconst [c] x))
   1132 	// cond:
   1133 	// result: (LEAL1 [c] x y)
   1134 	for {
   1135 		_ = v.Args[1]
   1136 		y := v.Args[0]
   1137 		v_1 := v.Args[1]
   1138 		if v_1.Op != Op386ADDLconst {
   1139 			break
   1140 		}
   1141 		c := v_1.AuxInt
   1142 		x := v_1.Args[0]
   1143 		v.reset(Op386LEAL1)
   1144 		v.AuxInt = c
   1145 		v.AddArg(x)
   1146 		v.AddArg(y)
   1147 		return true
   1148 	}
   1149 	// match: (ADDL x (LEAL [c] {s} y))
   1150 	// cond: x.Op != OpSB && y.Op != OpSB
   1151 	// result: (LEAL1 [c] {s} x y)
   1152 	for {
   1153 		_ = v.Args[1]
   1154 		x := v.Args[0]
   1155 		v_1 := v.Args[1]
   1156 		if v_1.Op != Op386LEAL {
   1157 			break
   1158 		}
   1159 		c := v_1.AuxInt
   1160 		s := v_1.Aux
   1161 		y := v_1.Args[0]
   1162 		if !(x.Op != OpSB && y.Op != OpSB) {
   1163 			break
   1164 		}
   1165 		v.reset(Op386LEAL1)
   1166 		v.AuxInt = c
   1167 		v.Aux = s
   1168 		v.AddArg(x)
   1169 		v.AddArg(y)
   1170 		return true
   1171 	}
   1172 	// match: (ADDL (LEAL [c] {s} y) x)
   1173 	// cond: x.Op != OpSB && y.Op != OpSB
   1174 	// result: (LEAL1 [c] {s} x y)
   1175 	for {
   1176 		_ = v.Args[1]
   1177 		v_0 := v.Args[0]
   1178 		if v_0.Op != Op386LEAL {
   1179 			break
   1180 		}
   1181 		c := v_0.AuxInt
   1182 		s := v_0.Aux
   1183 		y := v_0.Args[0]
   1184 		x := v.Args[1]
   1185 		if !(x.Op != OpSB && y.Op != OpSB) {
   1186 			break
   1187 		}
   1188 		v.reset(Op386LEAL1)
   1189 		v.AuxInt = c
   1190 		v.Aux = s
   1191 		v.AddArg(x)
   1192 		v.AddArg(y)
   1193 		return true
   1194 	}
   1195 	// match: (ADDL x (NEGL y))
   1196 	// cond:
   1197 	// result: (SUBL x y)
   1198 	for {
   1199 		_ = v.Args[1]
   1200 		x := v.Args[0]
   1201 		v_1 := v.Args[1]
   1202 		if v_1.Op != Op386NEGL {
   1203 			break
   1204 		}
   1205 		y := v_1.Args[0]
   1206 		v.reset(Op386SUBL)
   1207 		v.AddArg(x)
   1208 		v.AddArg(y)
   1209 		return true
   1210 	}
   1211 	// match: (ADDL (NEGL y) x)
   1212 	// cond:
   1213 	// result: (SUBL x y)
   1214 	for {
   1215 		_ = v.Args[1]
   1216 		v_0 := v.Args[0]
   1217 		if v_0.Op != Op386NEGL {
   1218 			break
   1219 		}
   1220 		y := v_0.Args[0]
   1221 		x := v.Args[1]
   1222 		v.reset(Op386SUBL)
   1223 		v.AddArg(x)
   1224 		v.AddArg(y)
   1225 		return true
   1226 	}
   1227 	return false
   1228 }
   1229 func rewriteValue386_Op386ADDLcarry_0(v *Value) bool {
   1230 	// match: (ADDLcarry x (MOVLconst [c]))
   1231 	// cond:
   1232 	// result: (ADDLconstcarry [c] x)
   1233 	for {
   1234 		_ = v.Args[1]
   1235 		x := v.Args[0]
   1236 		v_1 := v.Args[1]
   1237 		if v_1.Op != Op386MOVLconst {
   1238 			break
   1239 		}
   1240 		c := v_1.AuxInt
   1241 		v.reset(Op386ADDLconstcarry)
   1242 		v.AuxInt = c
   1243 		v.AddArg(x)
   1244 		return true
   1245 	}
   1246 	// match: (ADDLcarry (MOVLconst [c]) x)
   1247 	// cond:
   1248 	// result: (ADDLconstcarry [c] x)
   1249 	for {
   1250 		_ = v.Args[1]
   1251 		v_0 := v.Args[0]
   1252 		if v_0.Op != Op386MOVLconst {
   1253 			break
   1254 		}
   1255 		c := v_0.AuxInt
   1256 		x := v.Args[1]
   1257 		v.reset(Op386ADDLconstcarry)
   1258 		v.AuxInt = c
   1259 		v.AddArg(x)
   1260 		return true
   1261 	}
   1262 	return false
   1263 }
   1264 func rewriteValue386_Op386ADDLconst_0(v *Value) bool {
   1265 	// match: (ADDLconst [c] (ADDL x y))
   1266 	// cond:
   1267 	// result: (LEAL1 [c] x y)
   1268 	for {
   1269 		c := v.AuxInt
   1270 		v_0 := v.Args[0]
   1271 		if v_0.Op != Op386ADDL {
   1272 			break
   1273 		}
   1274 		_ = v_0.Args[1]
   1275 		x := v_0.Args[0]
   1276 		y := v_0.Args[1]
   1277 		v.reset(Op386LEAL1)
   1278 		v.AuxInt = c
   1279 		v.AddArg(x)
   1280 		v.AddArg(y)
   1281 		return true
   1282 	}
   1283 	// match: (ADDLconst [c] (LEAL [d] {s} x))
   1284 	// cond: is32Bit(c+d)
   1285 	// result: (LEAL [c+d] {s} x)
   1286 	for {
   1287 		c := v.AuxInt
   1288 		v_0 := v.Args[0]
   1289 		if v_0.Op != Op386LEAL {
   1290 			break
   1291 		}
   1292 		d := v_0.AuxInt
   1293 		s := v_0.Aux
   1294 		x := v_0.Args[0]
   1295 		if !(is32Bit(c + d)) {
   1296 			break
   1297 		}
   1298 		v.reset(Op386LEAL)
   1299 		v.AuxInt = c + d
   1300 		v.Aux = s
   1301 		v.AddArg(x)
   1302 		return true
   1303 	}
   1304 	// match: (ADDLconst [c] (LEAL1 [d] {s} x y))
   1305 	// cond: is32Bit(c+d)
   1306 	// result: (LEAL1 [c+d] {s} x y)
   1307 	for {
   1308 		c := v.AuxInt
   1309 		v_0 := v.Args[0]
   1310 		if v_0.Op != Op386LEAL1 {
   1311 			break
   1312 		}
   1313 		d := v_0.AuxInt
   1314 		s := v_0.Aux
   1315 		_ = v_0.Args[1]
   1316 		x := v_0.Args[0]
   1317 		y := v_0.Args[1]
   1318 		if !(is32Bit(c + d)) {
   1319 			break
   1320 		}
   1321 		v.reset(Op386LEAL1)
   1322 		v.AuxInt = c + d
   1323 		v.Aux = s
   1324 		v.AddArg(x)
   1325 		v.AddArg(y)
   1326 		return true
   1327 	}
   1328 	// match: (ADDLconst [c] (LEAL2 [d] {s} x y))
   1329 	// cond: is32Bit(c+d)
   1330 	// result: (LEAL2 [c+d] {s} x y)
   1331 	for {
   1332 		c := v.AuxInt
   1333 		v_0 := v.Args[0]
   1334 		if v_0.Op != Op386LEAL2 {
   1335 			break
   1336 		}
   1337 		d := v_0.AuxInt
   1338 		s := v_0.Aux
   1339 		_ = v_0.Args[1]
   1340 		x := v_0.Args[0]
   1341 		y := v_0.Args[1]
   1342 		if !(is32Bit(c + d)) {
   1343 			break
   1344 		}
   1345 		v.reset(Op386LEAL2)
   1346 		v.AuxInt = c + d
   1347 		v.Aux = s
   1348 		v.AddArg(x)
   1349 		v.AddArg(y)
   1350 		return true
   1351 	}
   1352 	// match: (ADDLconst [c] (LEAL4 [d] {s} x y))
   1353 	// cond: is32Bit(c+d)
   1354 	// result: (LEAL4 [c+d] {s} x y)
   1355 	for {
   1356 		c := v.AuxInt
   1357 		v_0 := v.Args[0]
   1358 		if v_0.Op != Op386LEAL4 {
   1359 			break
   1360 		}
   1361 		d := v_0.AuxInt
   1362 		s := v_0.Aux
   1363 		_ = v_0.Args[1]
   1364 		x := v_0.Args[0]
   1365 		y := v_0.Args[1]
   1366 		if !(is32Bit(c + d)) {
   1367 			break
   1368 		}
   1369 		v.reset(Op386LEAL4)
   1370 		v.AuxInt = c + d
   1371 		v.Aux = s
   1372 		v.AddArg(x)
   1373 		v.AddArg(y)
   1374 		return true
   1375 	}
   1376 	// match: (ADDLconst [c] (LEAL8 [d] {s} x y))
   1377 	// cond: is32Bit(c+d)
   1378 	// result: (LEAL8 [c+d] {s} x y)
   1379 	for {
   1380 		c := v.AuxInt
   1381 		v_0 := v.Args[0]
   1382 		if v_0.Op != Op386LEAL8 {
   1383 			break
   1384 		}
   1385 		d := v_0.AuxInt
   1386 		s := v_0.Aux
   1387 		_ = v_0.Args[1]
   1388 		x := v_0.Args[0]
   1389 		y := v_0.Args[1]
   1390 		if !(is32Bit(c + d)) {
   1391 			break
   1392 		}
   1393 		v.reset(Op386LEAL8)
   1394 		v.AuxInt = c + d
   1395 		v.Aux = s
   1396 		v.AddArg(x)
   1397 		v.AddArg(y)
   1398 		return true
   1399 	}
   1400 	// match: (ADDLconst [c] x)
   1401 	// cond: int32(c)==0
   1402 	// result: x
   1403 	for {
   1404 		c := v.AuxInt
   1405 		x := v.Args[0]
   1406 		if !(int32(c) == 0) {
   1407 			break
   1408 		}
   1409 		v.reset(OpCopy)
   1410 		v.Type = x.Type
   1411 		v.AddArg(x)
   1412 		return true
   1413 	}
   1414 	// match: (ADDLconst [c] (MOVLconst [d]))
   1415 	// cond:
   1416 	// result: (MOVLconst [int64(int32(c+d))])
   1417 	for {
   1418 		c := v.AuxInt
   1419 		v_0 := v.Args[0]
   1420 		if v_0.Op != Op386MOVLconst {
   1421 			break
   1422 		}
   1423 		d := v_0.AuxInt
   1424 		v.reset(Op386MOVLconst)
   1425 		v.AuxInt = int64(int32(c + d))
   1426 		return true
   1427 	}
   1428 	// match: (ADDLconst [c] (ADDLconst [d] x))
   1429 	// cond:
   1430 	// result: (ADDLconst [int64(int32(c+d))] x)
   1431 	for {
   1432 		c := v.AuxInt
   1433 		v_0 := v.Args[0]
   1434 		if v_0.Op != Op386ADDLconst {
   1435 			break
   1436 		}
   1437 		d := v_0.AuxInt
   1438 		x := v_0.Args[0]
   1439 		v.reset(Op386ADDLconst)
   1440 		v.AuxInt = int64(int32(c + d))
   1441 		v.AddArg(x)
   1442 		return true
   1443 	}
   1444 	return false
   1445 }
   1446 func rewriteValue386_Op386ANDL_0(v *Value) bool {
   1447 	// match: (ANDL x (MOVLconst [c]))
   1448 	// cond:
   1449 	// result: (ANDLconst [c] x)
   1450 	for {
   1451 		_ = v.Args[1]
   1452 		x := v.Args[0]
   1453 		v_1 := v.Args[1]
   1454 		if v_1.Op != Op386MOVLconst {
   1455 			break
   1456 		}
   1457 		c := v_1.AuxInt
   1458 		v.reset(Op386ANDLconst)
   1459 		v.AuxInt = c
   1460 		v.AddArg(x)
   1461 		return true
   1462 	}
   1463 	// match: (ANDL (MOVLconst [c]) x)
   1464 	// cond:
   1465 	// result: (ANDLconst [c] x)
   1466 	for {
   1467 		_ = v.Args[1]
   1468 		v_0 := v.Args[0]
   1469 		if v_0.Op != Op386MOVLconst {
   1470 			break
   1471 		}
   1472 		c := v_0.AuxInt
   1473 		x := v.Args[1]
   1474 		v.reset(Op386ANDLconst)
   1475 		v.AuxInt = c
   1476 		v.AddArg(x)
   1477 		return true
   1478 	}
   1479 	// match: (ANDL x x)
   1480 	// cond:
   1481 	// result: x
   1482 	for {
   1483 		_ = v.Args[1]
   1484 		x := v.Args[0]
   1485 		if x != v.Args[1] {
   1486 			break
   1487 		}
   1488 		v.reset(OpCopy)
   1489 		v.Type = x.Type
   1490 		v.AddArg(x)
   1491 		return true
   1492 	}
   1493 	return false
   1494 }
   1495 func rewriteValue386_Op386ANDLconst_0(v *Value) bool {
   1496 	// match: (ANDLconst [c] (ANDLconst [d] x))
   1497 	// cond:
   1498 	// result: (ANDLconst [c & d] x)
   1499 	for {
   1500 		c := v.AuxInt
   1501 		v_0 := v.Args[0]
   1502 		if v_0.Op != Op386ANDLconst {
   1503 			break
   1504 		}
   1505 		d := v_0.AuxInt
   1506 		x := v_0.Args[0]
   1507 		v.reset(Op386ANDLconst)
   1508 		v.AuxInt = c & d
   1509 		v.AddArg(x)
   1510 		return true
   1511 	}
   1512 	// match: (ANDLconst [c] _)
   1513 	// cond: int32(c)==0
   1514 	// result: (MOVLconst [0])
   1515 	for {
   1516 		c := v.AuxInt
   1517 		if !(int32(c) == 0) {
   1518 			break
   1519 		}
   1520 		v.reset(Op386MOVLconst)
   1521 		v.AuxInt = 0
   1522 		return true
   1523 	}
   1524 	// match: (ANDLconst [c] x)
   1525 	// cond: int32(c)==-1
   1526 	// result: x
   1527 	for {
   1528 		c := v.AuxInt
   1529 		x := v.Args[0]
   1530 		if !(int32(c) == -1) {
   1531 			break
   1532 		}
   1533 		v.reset(OpCopy)
   1534 		v.Type = x.Type
   1535 		v.AddArg(x)
   1536 		return true
   1537 	}
   1538 	// match: (ANDLconst [c] (MOVLconst [d]))
   1539 	// cond:
   1540 	// result: (MOVLconst [c&d])
   1541 	for {
   1542 		c := v.AuxInt
   1543 		v_0 := v.Args[0]
   1544 		if v_0.Op != Op386MOVLconst {
   1545 			break
   1546 		}
   1547 		d := v_0.AuxInt
   1548 		v.reset(Op386MOVLconst)
   1549 		v.AuxInt = c & d
   1550 		return true
   1551 	}
   1552 	return false
   1553 }
   1554 func rewriteValue386_Op386CMPB_0(v *Value) bool {
   1555 	b := v.Block
   1556 	_ = b
   1557 	// match: (CMPB x (MOVLconst [c]))
   1558 	// cond:
   1559 	// result: (CMPBconst x [int64(int8(c))])
   1560 	for {
   1561 		_ = v.Args[1]
   1562 		x := v.Args[0]
   1563 		v_1 := v.Args[1]
   1564 		if v_1.Op != Op386MOVLconst {
   1565 			break
   1566 		}
   1567 		c := v_1.AuxInt
   1568 		v.reset(Op386CMPBconst)
   1569 		v.AuxInt = int64(int8(c))
   1570 		v.AddArg(x)
   1571 		return true
   1572 	}
   1573 	// match: (CMPB (MOVLconst [c]) x)
   1574 	// cond:
   1575 	// result: (InvertFlags (CMPBconst x [int64(int8(c))]))
   1576 	for {
   1577 		_ = v.Args[1]
   1578 		v_0 := v.Args[0]
   1579 		if v_0.Op != Op386MOVLconst {
   1580 			break
   1581 		}
   1582 		c := v_0.AuxInt
   1583 		x := v.Args[1]
   1584 		v.reset(Op386InvertFlags)
   1585 		v0 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   1586 		v0.AuxInt = int64(int8(c))
   1587 		v0.AddArg(x)
   1588 		v.AddArg(v0)
   1589 		return true
   1590 	}
   1591 	return false
   1592 }
   1593 func rewriteValue386_Op386CMPBconst_0(v *Value) bool {
   1594 	// match: (CMPBconst (MOVLconst [x]) [y])
   1595 	// cond: int8(x)==int8(y)
   1596 	// result: (FlagEQ)
   1597 	for {
   1598 		y := v.AuxInt
   1599 		v_0 := v.Args[0]
   1600 		if v_0.Op != Op386MOVLconst {
   1601 			break
   1602 		}
   1603 		x := v_0.AuxInt
   1604 		if !(int8(x) == int8(y)) {
   1605 			break
   1606 		}
   1607 		v.reset(Op386FlagEQ)
   1608 		return true
   1609 	}
   1610 	// match: (CMPBconst (MOVLconst [x]) [y])
   1611 	// cond: int8(x)<int8(y) && uint8(x)<uint8(y)
   1612 	// result: (FlagLT_ULT)
   1613 	for {
   1614 		y := v.AuxInt
   1615 		v_0 := v.Args[0]
   1616 		if v_0.Op != Op386MOVLconst {
   1617 			break
   1618 		}
   1619 		x := v_0.AuxInt
   1620 		if !(int8(x) < int8(y) && uint8(x) < uint8(y)) {
   1621 			break
   1622 		}
   1623 		v.reset(Op386FlagLT_ULT)
   1624 		return true
   1625 	}
   1626 	// match: (CMPBconst (MOVLconst [x]) [y])
   1627 	// cond: int8(x)<int8(y) && uint8(x)>uint8(y)
   1628 	// result: (FlagLT_UGT)
   1629 	for {
   1630 		y := v.AuxInt
   1631 		v_0 := v.Args[0]
   1632 		if v_0.Op != Op386MOVLconst {
   1633 			break
   1634 		}
   1635 		x := v_0.AuxInt
   1636 		if !(int8(x) < int8(y) && uint8(x) > uint8(y)) {
   1637 			break
   1638 		}
   1639 		v.reset(Op386FlagLT_UGT)
   1640 		return true
   1641 	}
   1642 	// match: (CMPBconst (MOVLconst [x]) [y])
   1643 	// cond: int8(x)>int8(y) && uint8(x)<uint8(y)
   1644 	// result: (FlagGT_ULT)
   1645 	for {
   1646 		y := v.AuxInt
   1647 		v_0 := v.Args[0]
   1648 		if v_0.Op != Op386MOVLconst {
   1649 			break
   1650 		}
   1651 		x := v_0.AuxInt
   1652 		if !(int8(x) > int8(y) && uint8(x) < uint8(y)) {
   1653 			break
   1654 		}
   1655 		v.reset(Op386FlagGT_ULT)
   1656 		return true
   1657 	}
   1658 	// match: (CMPBconst (MOVLconst [x]) [y])
   1659 	// cond: int8(x)>int8(y) && uint8(x)>uint8(y)
   1660 	// result: (FlagGT_UGT)
   1661 	for {
   1662 		y := v.AuxInt
   1663 		v_0 := v.Args[0]
   1664 		if v_0.Op != Op386MOVLconst {
   1665 			break
   1666 		}
   1667 		x := v_0.AuxInt
   1668 		if !(int8(x) > int8(y) && uint8(x) > uint8(y)) {
   1669 			break
   1670 		}
   1671 		v.reset(Op386FlagGT_UGT)
   1672 		return true
   1673 	}
   1674 	// match: (CMPBconst (ANDLconst _ [m]) [n])
   1675 	// cond: 0 <= int8(m) && int8(m) < int8(n)
   1676 	// result: (FlagLT_ULT)
   1677 	for {
   1678 		n := v.AuxInt
   1679 		v_0 := v.Args[0]
   1680 		if v_0.Op != Op386ANDLconst {
   1681 			break
   1682 		}
   1683 		m := v_0.AuxInt
   1684 		if !(0 <= int8(m) && int8(m) < int8(n)) {
   1685 			break
   1686 		}
   1687 		v.reset(Op386FlagLT_ULT)
   1688 		return true
   1689 	}
   1690 	// match: (CMPBconst (ANDL x y) [0])
   1691 	// cond:
   1692 	// result: (TESTB x y)
   1693 	for {
   1694 		if v.AuxInt != 0 {
   1695 			break
   1696 		}
   1697 		v_0 := v.Args[0]
   1698 		if v_0.Op != Op386ANDL {
   1699 			break
   1700 		}
   1701 		_ = v_0.Args[1]
   1702 		x := v_0.Args[0]
   1703 		y := v_0.Args[1]
   1704 		v.reset(Op386TESTB)
   1705 		v.AddArg(x)
   1706 		v.AddArg(y)
   1707 		return true
   1708 	}
   1709 	// match: (CMPBconst (ANDLconst [c] x) [0])
   1710 	// cond:
   1711 	// result: (TESTBconst [int64(int8(c))] x)
   1712 	for {
   1713 		if v.AuxInt != 0 {
   1714 			break
   1715 		}
   1716 		v_0 := v.Args[0]
   1717 		if v_0.Op != Op386ANDLconst {
   1718 			break
   1719 		}
   1720 		c := v_0.AuxInt
   1721 		x := v_0.Args[0]
   1722 		v.reset(Op386TESTBconst)
   1723 		v.AuxInt = int64(int8(c))
   1724 		v.AddArg(x)
   1725 		return true
   1726 	}
   1727 	// match: (CMPBconst x [0])
   1728 	// cond:
   1729 	// result: (TESTB x x)
   1730 	for {
   1731 		if v.AuxInt != 0 {
   1732 			break
   1733 		}
   1734 		x := v.Args[0]
   1735 		v.reset(Op386TESTB)
   1736 		v.AddArg(x)
   1737 		v.AddArg(x)
   1738 		return true
   1739 	}
   1740 	return false
   1741 }
   1742 func rewriteValue386_Op386CMPL_0(v *Value) bool {
   1743 	b := v.Block
   1744 	_ = b
   1745 	// match: (CMPL x (MOVLconst [c]))
   1746 	// cond:
   1747 	// result: (CMPLconst x [c])
   1748 	for {
   1749 		_ = v.Args[1]
   1750 		x := v.Args[0]
   1751 		v_1 := v.Args[1]
   1752 		if v_1.Op != Op386MOVLconst {
   1753 			break
   1754 		}
   1755 		c := v_1.AuxInt
   1756 		v.reset(Op386CMPLconst)
   1757 		v.AuxInt = c
   1758 		v.AddArg(x)
   1759 		return true
   1760 	}
   1761 	// match: (CMPL (MOVLconst [c]) x)
   1762 	// cond:
   1763 	// result: (InvertFlags (CMPLconst x [c]))
   1764 	for {
   1765 		_ = v.Args[1]
   1766 		v_0 := v.Args[0]
   1767 		if v_0.Op != Op386MOVLconst {
   1768 			break
   1769 		}
   1770 		c := v_0.AuxInt
   1771 		x := v.Args[1]
   1772 		v.reset(Op386InvertFlags)
   1773 		v0 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   1774 		v0.AuxInt = c
   1775 		v0.AddArg(x)
   1776 		v.AddArg(v0)
   1777 		return true
   1778 	}
   1779 	return false
   1780 }
   1781 func rewriteValue386_Op386CMPLconst_0(v *Value) bool {
   1782 	// match: (CMPLconst (MOVLconst [x]) [y])
   1783 	// cond: int32(x)==int32(y)
   1784 	// result: (FlagEQ)
   1785 	for {
   1786 		y := v.AuxInt
   1787 		v_0 := v.Args[0]
   1788 		if v_0.Op != Op386MOVLconst {
   1789 			break
   1790 		}
   1791 		x := v_0.AuxInt
   1792 		if !(int32(x) == int32(y)) {
   1793 			break
   1794 		}
   1795 		v.reset(Op386FlagEQ)
   1796 		return true
   1797 	}
   1798 	// match: (CMPLconst (MOVLconst [x]) [y])
   1799 	// cond: int32(x)<int32(y) && uint32(x)<uint32(y)
   1800 	// result: (FlagLT_ULT)
   1801 	for {
   1802 		y := v.AuxInt
   1803 		v_0 := v.Args[0]
   1804 		if v_0.Op != Op386MOVLconst {
   1805 			break
   1806 		}
   1807 		x := v_0.AuxInt
   1808 		if !(int32(x) < int32(y) && uint32(x) < uint32(y)) {
   1809 			break
   1810 		}
   1811 		v.reset(Op386FlagLT_ULT)
   1812 		return true
   1813 	}
   1814 	// match: (CMPLconst (MOVLconst [x]) [y])
   1815 	// cond: int32(x)<int32(y) && uint32(x)>uint32(y)
   1816 	// result: (FlagLT_UGT)
   1817 	for {
   1818 		y := v.AuxInt
   1819 		v_0 := v.Args[0]
   1820 		if v_0.Op != Op386MOVLconst {
   1821 			break
   1822 		}
   1823 		x := v_0.AuxInt
   1824 		if !(int32(x) < int32(y) && uint32(x) > uint32(y)) {
   1825 			break
   1826 		}
   1827 		v.reset(Op386FlagLT_UGT)
   1828 		return true
   1829 	}
   1830 	// match: (CMPLconst (MOVLconst [x]) [y])
   1831 	// cond: int32(x)>int32(y) && uint32(x)<uint32(y)
   1832 	// result: (FlagGT_ULT)
   1833 	for {
   1834 		y := v.AuxInt
   1835 		v_0 := v.Args[0]
   1836 		if v_0.Op != Op386MOVLconst {
   1837 			break
   1838 		}
   1839 		x := v_0.AuxInt
   1840 		if !(int32(x) > int32(y) && uint32(x) < uint32(y)) {
   1841 			break
   1842 		}
   1843 		v.reset(Op386FlagGT_ULT)
   1844 		return true
   1845 	}
   1846 	// match: (CMPLconst (MOVLconst [x]) [y])
   1847 	// cond: int32(x)>int32(y) && uint32(x)>uint32(y)
   1848 	// result: (FlagGT_UGT)
   1849 	for {
   1850 		y := v.AuxInt
   1851 		v_0 := v.Args[0]
   1852 		if v_0.Op != Op386MOVLconst {
   1853 			break
   1854 		}
   1855 		x := v_0.AuxInt
   1856 		if !(int32(x) > int32(y) && uint32(x) > uint32(y)) {
   1857 			break
   1858 		}
   1859 		v.reset(Op386FlagGT_UGT)
   1860 		return true
   1861 	}
   1862 	// match: (CMPLconst (SHRLconst _ [c]) [n])
   1863 	// cond: 0 <= n && 0 < c && c <= 32 && (1<<uint64(32-c)) <= uint64(n)
   1864 	// result: (FlagLT_ULT)
   1865 	for {
   1866 		n := v.AuxInt
   1867 		v_0 := v.Args[0]
   1868 		if v_0.Op != Op386SHRLconst {
   1869 			break
   1870 		}
   1871 		c := v_0.AuxInt
   1872 		if !(0 <= n && 0 < c && c <= 32 && (1<<uint64(32-c)) <= uint64(n)) {
   1873 			break
   1874 		}
   1875 		v.reset(Op386FlagLT_ULT)
   1876 		return true
   1877 	}
   1878 	// match: (CMPLconst (ANDLconst _ [m]) [n])
   1879 	// cond: 0 <= int32(m) && int32(m) < int32(n)
   1880 	// result: (FlagLT_ULT)
   1881 	for {
   1882 		n := v.AuxInt
   1883 		v_0 := v.Args[0]
   1884 		if v_0.Op != Op386ANDLconst {
   1885 			break
   1886 		}
   1887 		m := v_0.AuxInt
   1888 		if !(0 <= int32(m) && int32(m) < int32(n)) {
   1889 			break
   1890 		}
   1891 		v.reset(Op386FlagLT_ULT)
   1892 		return true
   1893 	}
   1894 	// match: (CMPLconst (ANDL x y) [0])
   1895 	// cond:
   1896 	// result: (TESTL x y)
   1897 	for {
   1898 		if v.AuxInt != 0 {
   1899 			break
   1900 		}
   1901 		v_0 := v.Args[0]
   1902 		if v_0.Op != Op386ANDL {
   1903 			break
   1904 		}
   1905 		_ = v_0.Args[1]
   1906 		x := v_0.Args[0]
   1907 		y := v_0.Args[1]
   1908 		v.reset(Op386TESTL)
   1909 		v.AddArg(x)
   1910 		v.AddArg(y)
   1911 		return true
   1912 	}
   1913 	// match: (CMPLconst (ANDLconst [c] x) [0])
   1914 	// cond:
   1915 	// result: (TESTLconst [c] x)
   1916 	for {
   1917 		if v.AuxInt != 0 {
   1918 			break
   1919 		}
   1920 		v_0 := v.Args[0]
   1921 		if v_0.Op != Op386ANDLconst {
   1922 			break
   1923 		}
   1924 		c := v_0.AuxInt
   1925 		x := v_0.Args[0]
   1926 		v.reset(Op386TESTLconst)
   1927 		v.AuxInt = c
   1928 		v.AddArg(x)
   1929 		return true
   1930 	}
   1931 	// match: (CMPLconst x [0])
   1932 	// cond:
   1933 	// result: (TESTL x x)
   1934 	for {
   1935 		if v.AuxInt != 0 {
   1936 			break
   1937 		}
   1938 		x := v.Args[0]
   1939 		v.reset(Op386TESTL)
   1940 		v.AddArg(x)
   1941 		v.AddArg(x)
   1942 		return true
   1943 	}
   1944 	return false
   1945 }
   1946 func rewriteValue386_Op386CMPW_0(v *Value) bool {
   1947 	b := v.Block
   1948 	_ = b
   1949 	// match: (CMPW x (MOVLconst [c]))
   1950 	// cond:
   1951 	// result: (CMPWconst x [int64(int16(c))])
   1952 	for {
   1953 		_ = v.Args[1]
   1954 		x := v.Args[0]
   1955 		v_1 := v.Args[1]
   1956 		if v_1.Op != Op386MOVLconst {
   1957 			break
   1958 		}
   1959 		c := v_1.AuxInt
   1960 		v.reset(Op386CMPWconst)
   1961 		v.AuxInt = int64(int16(c))
   1962 		v.AddArg(x)
   1963 		return true
   1964 	}
   1965 	// match: (CMPW (MOVLconst [c]) x)
   1966 	// cond:
   1967 	// result: (InvertFlags (CMPWconst x [int64(int16(c))]))
   1968 	for {
   1969 		_ = v.Args[1]
   1970 		v_0 := v.Args[0]
   1971 		if v_0.Op != Op386MOVLconst {
   1972 			break
   1973 		}
   1974 		c := v_0.AuxInt
   1975 		x := v.Args[1]
   1976 		v.reset(Op386InvertFlags)
   1977 		v0 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   1978 		v0.AuxInt = int64(int16(c))
   1979 		v0.AddArg(x)
   1980 		v.AddArg(v0)
   1981 		return true
   1982 	}
   1983 	return false
   1984 }
   1985 func rewriteValue386_Op386CMPWconst_0(v *Value) bool {
   1986 	// match: (CMPWconst (MOVLconst [x]) [y])
   1987 	// cond: int16(x)==int16(y)
   1988 	// result: (FlagEQ)
   1989 	for {
   1990 		y := v.AuxInt
   1991 		v_0 := v.Args[0]
   1992 		if v_0.Op != Op386MOVLconst {
   1993 			break
   1994 		}
   1995 		x := v_0.AuxInt
   1996 		if !(int16(x) == int16(y)) {
   1997 			break
   1998 		}
   1999 		v.reset(Op386FlagEQ)
   2000 		return true
   2001 	}
   2002 	// match: (CMPWconst (MOVLconst [x]) [y])
   2003 	// cond: int16(x)<int16(y) && uint16(x)<uint16(y)
   2004 	// result: (FlagLT_ULT)
   2005 	for {
   2006 		y := v.AuxInt
   2007 		v_0 := v.Args[0]
   2008 		if v_0.Op != Op386MOVLconst {
   2009 			break
   2010 		}
   2011 		x := v_0.AuxInt
   2012 		if !(int16(x) < int16(y) && uint16(x) < uint16(y)) {
   2013 			break
   2014 		}
   2015 		v.reset(Op386FlagLT_ULT)
   2016 		return true
   2017 	}
   2018 	// match: (CMPWconst (MOVLconst [x]) [y])
   2019 	// cond: int16(x)<int16(y) && uint16(x)>uint16(y)
   2020 	// result: (FlagLT_UGT)
   2021 	for {
   2022 		y := v.AuxInt
   2023 		v_0 := v.Args[0]
   2024 		if v_0.Op != Op386MOVLconst {
   2025 			break
   2026 		}
   2027 		x := v_0.AuxInt
   2028 		if !(int16(x) < int16(y) && uint16(x) > uint16(y)) {
   2029 			break
   2030 		}
   2031 		v.reset(Op386FlagLT_UGT)
   2032 		return true
   2033 	}
   2034 	// match: (CMPWconst (MOVLconst [x]) [y])
   2035 	// cond: int16(x)>int16(y) && uint16(x)<uint16(y)
   2036 	// result: (FlagGT_ULT)
   2037 	for {
   2038 		y := v.AuxInt
   2039 		v_0 := v.Args[0]
   2040 		if v_0.Op != Op386MOVLconst {
   2041 			break
   2042 		}
   2043 		x := v_0.AuxInt
   2044 		if !(int16(x) > int16(y) && uint16(x) < uint16(y)) {
   2045 			break
   2046 		}
   2047 		v.reset(Op386FlagGT_ULT)
   2048 		return true
   2049 	}
   2050 	// match: (CMPWconst (MOVLconst [x]) [y])
   2051 	// cond: int16(x)>int16(y) && uint16(x)>uint16(y)
   2052 	// result: (FlagGT_UGT)
   2053 	for {
   2054 		y := v.AuxInt
   2055 		v_0 := v.Args[0]
   2056 		if v_0.Op != Op386MOVLconst {
   2057 			break
   2058 		}
   2059 		x := v_0.AuxInt
   2060 		if !(int16(x) > int16(y) && uint16(x) > uint16(y)) {
   2061 			break
   2062 		}
   2063 		v.reset(Op386FlagGT_UGT)
   2064 		return true
   2065 	}
   2066 	// match: (CMPWconst (ANDLconst _ [m]) [n])
   2067 	// cond: 0 <= int16(m) && int16(m) < int16(n)
   2068 	// result: (FlagLT_ULT)
   2069 	for {
   2070 		n := v.AuxInt
   2071 		v_0 := v.Args[0]
   2072 		if v_0.Op != Op386ANDLconst {
   2073 			break
   2074 		}
   2075 		m := v_0.AuxInt
   2076 		if !(0 <= int16(m) && int16(m) < int16(n)) {
   2077 			break
   2078 		}
   2079 		v.reset(Op386FlagLT_ULT)
   2080 		return true
   2081 	}
   2082 	// match: (CMPWconst (ANDL x y) [0])
   2083 	// cond:
   2084 	// result: (TESTW x y)
   2085 	for {
   2086 		if v.AuxInt != 0 {
   2087 			break
   2088 		}
   2089 		v_0 := v.Args[0]
   2090 		if v_0.Op != Op386ANDL {
   2091 			break
   2092 		}
   2093 		_ = v_0.Args[1]
   2094 		x := v_0.Args[0]
   2095 		y := v_0.Args[1]
   2096 		v.reset(Op386TESTW)
   2097 		v.AddArg(x)
   2098 		v.AddArg(y)
   2099 		return true
   2100 	}
   2101 	// match: (CMPWconst (ANDLconst [c] x) [0])
   2102 	// cond:
   2103 	// result: (TESTWconst [int64(int16(c))] x)
   2104 	for {
   2105 		if v.AuxInt != 0 {
   2106 			break
   2107 		}
   2108 		v_0 := v.Args[0]
   2109 		if v_0.Op != Op386ANDLconst {
   2110 			break
   2111 		}
   2112 		c := v_0.AuxInt
   2113 		x := v_0.Args[0]
   2114 		v.reset(Op386TESTWconst)
   2115 		v.AuxInt = int64(int16(c))
   2116 		v.AddArg(x)
   2117 		return true
   2118 	}
   2119 	// match: (CMPWconst x [0])
   2120 	// cond:
   2121 	// result: (TESTW x x)
   2122 	for {
   2123 		if v.AuxInt != 0 {
   2124 			break
   2125 		}
   2126 		x := v.Args[0]
   2127 		v.reset(Op386TESTW)
   2128 		v.AddArg(x)
   2129 		v.AddArg(x)
   2130 		return true
   2131 	}
   2132 	return false
   2133 }
   2134 func rewriteValue386_Op386LEAL_0(v *Value) bool {
   2135 	// match: (LEAL [c] {s} (ADDLconst [d] x))
   2136 	// cond: is32Bit(c+d)
   2137 	// result: (LEAL [c+d] {s} x)
   2138 	for {
   2139 		c := v.AuxInt
   2140 		s := v.Aux
   2141 		v_0 := v.Args[0]
   2142 		if v_0.Op != Op386ADDLconst {
   2143 			break
   2144 		}
   2145 		d := v_0.AuxInt
   2146 		x := v_0.Args[0]
   2147 		if !(is32Bit(c + d)) {
   2148 			break
   2149 		}
   2150 		v.reset(Op386LEAL)
   2151 		v.AuxInt = c + d
   2152 		v.Aux = s
   2153 		v.AddArg(x)
   2154 		return true
   2155 	}
   2156 	// match: (LEAL [c] {s} (ADDL x y))
   2157 	// cond: x.Op != OpSB && y.Op != OpSB
   2158 	// result: (LEAL1 [c] {s} x y)
   2159 	for {
   2160 		c := v.AuxInt
   2161 		s := v.Aux
   2162 		v_0 := v.Args[0]
   2163 		if v_0.Op != Op386ADDL {
   2164 			break
   2165 		}
   2166 		_ = v_0.Args[1]
   2167 		x := v_0.Args[0]
   2168 		y := v_0.Args[1]
   2169 		if !(x.Op != OpSB && y.Op != OpSB) {
   2170 			break
   2171 		}
   2172 		v.reset(Op386LEAL1)
   2173 		v.AuxInt = c
   2174 		v.Aux = s
   2175 		v.AddArg(x)
   2176 		v.AddArg(y)
   2177 		return true
   2178 	}
   2179 	// match: (LEAL [off1] {sym1} (LEAL [off2] {sym2} x))
   2180 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   2181 	// result: (LEAL [off1+off2] {mergeSym(sym1,sym2)} x)
   2182 	for {
   2183 		off1 := v.AuxInt
   2184 		sym1 := v.Aux
   2185 		v_0 := v.Args[0]
   2186 		if v_0.Op != Op386LEAL {
   2187 			break
   2188 		}
   2189 		off2 := v_0.AuxInt
   2190 		sym2 := v_0.Aux
   2191 		x := v_0.Args[0]
   2192 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   2193 			break
   2194 		}
   2195 		v.reset(Op386LEAL)
   2196 		v.AuxInt = off1 + off2
   2197 		v.Aux = mergeSym(sym1, sym2)
   2198 		v.AddArg(x)
   2199 		return true
   2200 	}
   2201 	// match: (LEAL [off1] {sym1} (LEAL1 [off2] {sym2} x y))
   2202 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   2203 	// result: (LEAL1 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2204 	for {
   2205 		off1 := v.AuxInt
   2206 		sym1 := v.Aux
   2207 		v_0 := v.Args[0]
   2208 		if v_0.Op != Op386LEAL1 {
   2209 			break
   2210 		}
   2211 		off2 := v_0.AuxInt
   2212 		sym2 := v_0.Aux
   2213 		_ = v_0.Args[1]
   2214 		x := v_0.Args[0]
   2215 		y := v_0.Args[1]
   2216 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   2217 			break
   2218 		}
   2219 		v.reset(Op386LEAL1)
   2220 		v.AuxInt = off1 + off2
   2221 		v.Aux = mergeSym(sym1, sym2)
   2222 		v.AddArg(x)
   2223 		v.AddArg(y)
   2224 		return true
   2225 	}
   2226 	// match: (LEAL [off1] {sym1} (LEAL2 [off2] {sym2} x y))
   2227 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   2228 	// result: (LEAL2 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2229 	for {
   2230 		off1 := v.AuxInt
   2231 		sym1 := v.Aux
   2232 		v_0 := v.Args[0]
   2233 		if v_0.Op != Op386LEAL2 {
   2234 			break
   2235 		}
   2236 		off2 := v_0.AuxInt
   2237 		sym2 := v_0.Aux
   2238 		_ = v_0.Args[1]
   2239 		x := v_0.Args[0]
   2240 		y := v_0.Args[1]
   2241 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   2242 			break
   2243 		}
   2244 		v.reset(Op386LEAL2)
   2245 		v.AuxInt = off1 + off2
   2246 		v.Aux = mergeSym(sym1, sym2)
   2247 		v.AddArg(x)
   2248 		v.AddArg(y)
   2249 		return true
   2250 	}
   2251 	// match: (LEAL [off1] {sym1} (LEAL4 [off2] {sym2} x y))
   2252 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   2253 	// result: (LEAL4 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2254 	for {
   2255 		off1 := v.AuxInt
   2256 		sym1 := v.Aux
   2257 		v_0 := v.Args[0]
   2258 		if v_0.Op != Op386LEAL4 {
   2259 			break
   2260 		}
   2261 		off2 := v_0.AuxInt
   2262 		sym2 := v_0.Aux
   2263 		_ = v_0.Args[1]
   2264 		x := v_0.Args[0]
   2265 		y := v_0.Args[1]
   2266 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   2267 			break
   2268 		}
   2269 		v.reset(Op386LEAL4)
   2270 		v.AuxInt = off1 + off2
   2271 		v.Aux = mergeSym(sym1, sym2)
   2272 		v.AddArg(x)
   2273 		v.AddArg(y)
   2274 		return true
   2275 	}
   2276 	// match: (LEAL [off1] {sym1} (LEAL8 [off2] {sym2} x y))
   2277 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   2278 	// result: (LEAL8 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2279 	for {
   2280 		off1 := v.AuxInt
   2281 		sym1 := v.Aux
   2282 		v_0 := v.Args[0]
   2283 		if v_0.Op != Op386LEAL8 {
   2284 			break
   2285 		}
   2286 		off2 := v_0.AuxInt
   2287 		sym2 := v_0.Aux
   2288 		_ = v_0.Args[1]
   2289 		x := v_0.Args[0]
   2290 		y := v_0.Args[1]
   2291 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   2292 			break
   2293 		}
   2294 		v.reset(Op386LEAL8)
   2295 		v.AuxInt = off1 + off2
   2296 		v.Aux = mergeSym(sym1, sym2)
   2297 		v.AddArg(x)
   2298 		v.AddArg(y)
   2299 		return true
   2300 	}
   2301 	return false
   2302 }
   2303 func rewriteValue386_Op386LEAL1_0(v *Value) bool {
   2304 	// match: (LEAL1 [c] {s} (ADDLconst [d] x) y)
   2305 	// cond: is32Bit(c+d)   && x.Op != OpSB
   2306 	// result: (LEAL1 [c+d] {s} x y)
   2307 	for {
   2308 		c := v.AuxInt
   2309 		s := v.Aux
   2310 		_ = v.Args[1]
   2311 		v_0 := v.Args[0]
   2312 		if v_0.Op != Op386ADDLconst {
   2313 			break
   2314 		}
   2315 		d := v_0.AuxInt
   2316 		x := v_0.Args[0]
   2317 		y := v.Args[1]
   2318 		if !(is32Bit(c+d) && x.Op != OpSB) {
   2319 			break
   2320 		}
   2321 		v.reset(Op386LEAL1)
   2322 		v.AuxInt = c + d
   2323 		v.Aux = s
   2324 		v.AddArg(x)
   2325 		v.AddArg(y)
   2326 		return true
   2327 	}
   2328 	// match: (LEAL1 [c] {s} y (ADDLconst [d] x))
   2329 	// cond: is32Bit(c+d)   && x.Op != OpSB
   2330 	// result: (LEAL1 [c+d] {s} x y)
   2331 	for {
   2332 		c := v.AuxInt
   2333 		s := v.Aux
   2334 		_ = v.Args[1]
   2335 		y := v.Args[0]
   2336 		v_1 := v.Args[1]
   2337 		if v_1.Op != Op386ADDLconst {
   2338 			break
   2339 		}
   2340 		d := v_1.AuxInt
   2341 		x := v_1.Args[0]
   2342 		if !(is32Bit(c+d) && x.Op != OpSB) {
   2343 			break
   2344 		}
   2345 		v.reset(Op386LEAL1)
   2346 		v.AuxInt = c + d
   2347 		v.Aux = s
   2348 		v.AddArg(x)
   2349 		v.AddArg(y)
   2350 		return true
   2351 	}
   2352 	// match: (LEAL1 [c] {s} x (SHLLconst [1] y))
   2353 	// cond:
   2354 	// result: (LEAL2 [c] {s} x y)
   2355 	for {
   2356 		c := v.AuxInt
   2357 		s := v.Aux
   2358 		_ = v.Args[1]
   2359 		x := v.Args[0]
   2360 		v_1 := v.Args[1]
   2361 		if v_1.Op != Op386SHLLconst {
   2362 			break
   2363 		}
   2364 		if v_1.AuxInt != 1 {
   2365 			break
   2366 		}
   2367 		y := v_1.Args[0]
   2368 		v.reset(Op386LEAL2)
   2369 		v.AuxInt = c
   2370 		v.Aux = s
   2371 		v.AddArg(x)
   2372 		v.AddArg(y)
   2373 		return true
   2374 	}
   2375 	// match: (LEAL1 [c] {s} (SHLLconst [1] y) x)
   2376 	// cond:
   2377 	// result: (LEAL2 [c] {s} x y)
   2378 	for {
   2379 		c := v.AuxInt
   2380 		s := v.Aux
   2381 		_ = v.Args[1]
   2382 		v_0 := v.Args[0]
   2383 		if v_0.Op != Op386SHLLconst {
   2384 			break
   2385 		}
   2386 		if v_0.AuxInt != 1 {
   2387 			break
   2388 		}
   2389 		y := v_0.Args[0]
   2390 		x := v.Args[1]
   2391 		v.reset(Op386LEAL2)
   2392 		v.AuxInt = c
   2393 		v.Aux = s
   2394 		v.AddArg(x)
   2395 		v.AddArg(y)
   2396 		return true
   2397 	}
   2398 	// match: (LEAL1 [c] {s} x (SHLLconst [2] y))
   2399 	// cond:
   2400 	// result: (LEAL4 [c] {s} x y)
   2401 	for {
   2402 		c := v.AuxInt
   2403 		s := v.Aux
   2404 		_ = v.Args[1]
   2405 		x := v.Args[0]
   2406 		v_1 := v.Args[1]
   2407 		if v_1.Op != Op386SHLLconst {
   2408 			break
   2409 		}
   2410 		if v_1.AuxInt != 2 {
   2411 			break
   2412 		}
   2413 		y := v_1.Args[0]
   2414 		v.reset(Op386LEAL4)
   2415 		v.AuxInt = c
   2416 		v.Aux = s
   2417 		v.AddArg(x)
   2418 		v.AddArg(y)
   2419 		return true
   2420 	}
   2421 	// match: (LEAL1 [c] {s} (SHLLconst [2] y) x)
   2422 	// cond:
   2423 	// result: (LEAL4 [c] {s} x y)
   2424 	for {
   2425 		c := v.AuxInt
   2426 		s := v.Aux
   2427 		_ = v.Args[1]
   2428 		v_0 := v.Args[0]
   2429 		if v_0.Op != Op386SHLLconst {
   2430 			break
   2431 		}
   2432 		if v_0.AuxInt != 2 {
   2433 			break
   2434 		}
   2435 		y := v_0.Args[0]
   2436 		x := v.Args[1]
   2437 		v.reset(Op386LEAL4)
   2438 		v.AuxInt = c
   2439 		v.Aux = s
   2440 		v.AddArg(x)
   2441 		v.AddArg(y)
   2442 		return true
   2443 	}
   2444 	// match: (LEAL1 [c] {s} x (SHLLconst [3] y))
   2445 	// cond:
   2446 	// result: (LEAL8 [c] {s} x y)
   2447 	for {
   2448 		c := v.AuxInt
   2449 		s := v.Aux
   2450 		_ = v.Args[1]
   2451 		x := v.Args[0]
   2452 		v_1 := v.Args[1]
   2453 		if v_1.Op != Op386SHLLconst {
   2454 			break
   2455 		}
   2456 		if v_1.AuxInt != 3 {
   2457 			break
   2458 		}
   2459 		y := v_1.Args[0]
   2460 		v.reset(Op386LEAL8)
   2461 		v.AuxInt = c
   2462 		v.Aux = s
   2463 		v.AddArg(x)
   2464 		v.AddArg(y)
   2465 		return true
   2466 	}
   2467 	// match: (LEAL1 [c] {s} (SHLLconst [3] y) x)
   2468 	// cond:
   2469 	// result: (LEAL8 [c] {s} x y)
   2470 	for {
   2471 		c := v.AuxInt
   2472 		s := v.Aux
   2473 		_ = v.Args[1]
   2474 		v_0 := v.Args[0]
   2475 		if v_0.Op != Op386SHLLconst {
   2476 			break
   2477 		}
   2478 		if v_0.AuxInt != 3 {
   2479 			break
   2480 		}
   2481 		y := v_0.Args[0]
   2482 		x := v.Args[1]
   2483 		v.reset(Op386LEAL8)
   2484 		v.AuxInt = c
   2485 		v.Aux = s
   2486 		v.AddArg(x)
   2487 		v.AddArg(y)
   2488 		return true
   2489 	}
   2490 	// match: (LEAL1 [off1] {sym1} (LEAL [off2] {sym2} x) y)
   2491 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB
   2492 	// result: (LEAL1 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2493 	for {
   2494 		off1 := v.AuxInt
   2495 		sym1 := v.Aux
   2496 		_ = v.Args[1]
   2497 		v_0 := v.Args[0]
   2498 		if v_0.Op != Op386LEAL {
   2499 			break
   2500 		}
   2501 		off2 := v_0.AuxInt
   2502 		sym2 := v_0.Aux
   2503 		x := v_0.Args[0]
   2504 		y := v.Args[1]
   2505 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) {
   2506 			break
   2507 		}
   2508 		v.reset(Op386LEAL1)
   2509 		v.AuxInt = off1 + off2
   2510 		v.Aux = mergeSym(sym1, sym2)
   2511 		v.AddArg(x)
   2512 		v.AddArg(y)
   2513 		return true
   2514 	}
   2515 	// match: (LEAL1 [off1] {sym1} y (LEAL [off2] {sym2} x))
   2516 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB
   2517 	// result: (LEAL1 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2518 	for {
   2519 		off1 := v.AuxInt
   2520 		sym1 := v.Aux
   2521 		_ = v.Args[1]
   2522 		y := v.Args[0]
   2523 		v_1 := v.Args[1]
   2524 		if v_1.Op != Op386LEAL {
   2525 			break
   2526 		}
   2527 		off2 := v_1.AuxInt
   2528 		sym2 := v_1.Aux
   2529 		x := v_1.Args[0]
   2530 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) {
   2531 			break
   2532 		}
   2533 		v.reset(Op386LEAL1)
   2534 		v.AuxInt = off1 + off2
   2535 		v.Aux = mergeSym(sym1, sym2)
   2536 		v.AddArg(x)
   2537 		v.AddArg(y)
   2538 		return true
   2539 	}
   2540 	return false
   2541 }
   2542 func rewriteValue386_Op386LEAL2_0(v *Value) bool {
   2543 	// match: (LEAL2 [c] {s} (ADDLconst [d] x) y)
   2544 	// cond: is32Bit(c+d)   && x.Op != OpSB
   2545 	// result: (LEAL2 [c+d] {s} x y)
   2546 	for {
   2547 		c := v.AuxInt
   2548 		s := v.Aux
   2549 		_ = v.Args[1]
   2550 		v_0 := v.Args[0]
   2551 		if v_0.Op != Op386ADDLconst {
   2552 			break
   2553 		}
   2554 		d := v_0.AuxInt
   2555 		x := v_0.Args[0]
   2556 		y := v.Args[1]
   2557 		if !(is32Bit(c+d) && x.Op != OpSB) {
   2558 			break
   2559 		}
   2560 		v.reset(Op386LEAL2)
   2561 		v.AuxInt = c + d
   2562 		v.Aux = s
   2563 		v.AddArg(x)
   2564 		v.AddArg(y)
   2565 		return true
   2566 	}
   2567 	// match: (LEAL2 [c] {s} x (ADDLconst [d] y))
   2568 	// cond: is32Bit(c+2*d) && y.Op != OpSB
   2569 	// result: (LEAL2 [c+2*d] {s} x y)
   2570 	for {
   2571 		c := v.AuxInt
   2572 		s := v.Aux
   2573 		_ = v.Args[1]
   2574 		x := v.Args[0]
   2575 		v_1 := v.Args[1]
   2576 		if v_1.Op != Op386ADDLconst {
   2577 			break
   2578 		}
   2579 		d := v_1.AuxInt
   2580 		y := v_1.Args[0]
   2581 		if !(is32Bit(c+2*d) && y.Op != OpSB) {
   2582 			break
   2583 		}
   2584 		v.reset(Op386LEAL2)
   2585 		v.AuxInt = c + 2*d
   2586 		v.Aux = s
   2587 		v.AddArg(x)
   2588 		v.AddArg(y)
   2589 		return true
   2590 	}
   2591 	// match: (LEAL2 [c] {s} x (SHLLconst [1] y))
   2592 	// cond:
   2593 	// result: (LEAL4 [c] {s} x y)
   2594 	for {
   2595 		c := v.AuxInt
   2596 		s := v.Aux
   2597 		_ = v.Args[1]
   2598 		x := v.Args[0]
   2599 		v_1 := v.Args[1]
   2600 		if v_1.Op != Op386SHLLconst {
   2601 			break
   2602 		}
   2603 		if v_1.AuxInt != 1 {
   2604 			break
   2605 		}
   2606 		y := v_1.Args[0]
   2607 		v.reset(Op386LEAL4)
   2608 		v.AuxInt = c
   2609 		v.Aux = s
   2610 		v.AddArg(x)
   2611 		v.AddArg(y)
   2612 		return true
   2613 	}
   2614 	// match: (LEAL2 [c] {s} x (SHLLconst [2] y))
   2615 	// cond:
   2616 	// result: (LEAL8 [c] {s} x y)
   2617 	for {
   2618 		c := v.AuxInt
   2619 		s := v.Aux
   2620 		_ = v.Args[1]
   2621 		x := v.Args[0]
   2622 		v_1 := v.Args[1]
   2623 		if v_1.Op != Op386SHLLconst {
   2624 			break
   2625 		}
   2626 		if v_1.AuxInt != 2 {
   2627 			break
   2628 		}
   2629 		y := v_1.Args[0]
   2630 		v.reset(Op386LEAL8)
   2631 		v.AuxInt = c
   2632 		v.Aux = s
   2633 		v.AddArg(x)
   2634 		v.AddArg(y)
   2635 		return true
   2636 	}
   2637 	// match: (LEAL2 [off1] {sym1} (LEAL [off2] {sym2} x) y)
   2638 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB
   2639 	// result: (LEAL2 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2640 	for {
   2641 		off1 := v.AuxInt
   2642 		sym1 := v.Aux
   2643 		_ = v.Args[1]
   2644 		v_0 := v.Args[0]
   2645 		if v_0.Op != Op386LEAL {
   2646 			break
   2647 		}
   2648 		off2 := v_0.AuxInt
   2649 		sym2 := v_0.Aux
   2650 		x := v_0.Args[0]
   2651 		y := v.Args[1]
   2652 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) {
   2653 			break
   2654 		}
   2655 		v.reset(Op386LEAL2)
   2656 		v.AuxInt = off1 + off2
   2657 		v.Aux = mergeSym(sym1, sym2)
   2658 		v.AddArg(x)
   2659 		v.AddArg(y)
   2660 		return true
   2661 	}
   2662 	return false
   2663 }
   2664 func rewriteValue386_Op386LEAL4_0(v *Value) bool {
   2665 	// match: (LEAL4 [c] {s} (ADDLconst [d] x) y)
   2666 	// cond: is32Bit(c+d)   && x.Op != OpSB
   2667 	// result: (LEAL4 [c+d] {s} x y)
   2668 	for {
   2669 		c := v.AuxInt
   2670 		s := v.Aux
   2671 		_ = v.Args[1]
   2672 		v_0 := v.Args[0]
   2673 		if v_0.Op != Op386ADDLconst {
   2674 			break
   2675 		}
   2676 		d := v_0.AuxInt
   2677 		x := v_0.Args[0]
   2678 		y := v.Args[1]
   2679 		if !(is32Bit(c+d) && x.Op != OpSB) {
   2680 			break
   2681 		}
   2682 		v.reset(Op386LEAL4)
   2683 		v.AuxInt = c + d
   2684 		v.Aux = s
   2685 		v.AddArg(x)
   2686 		v.AddArg(y)
   2687 		return true
   2688 	}
   2689 	// match: (LEAL4 [c] {s} x (ADDLconst [d] y))
   2690 	// cond: is32Bit(c+4*d) && y.Op != OpSB
   2691 	// result: (LEAL4 [c+4*d] {s} x y)
   2692 	for {
   2693 		c := v.AuxInt
   2694 		s := v.Aux
   2695 		_ = v.Args[1]
   2696 		x := v.Args[0]
   2697 		v_1 := v.Args[1]
   2698 		if v_1.Op != Op386ADDLconst {
   2699 			break
   2700 		}
   2701 		d := v_1.AuxInt
   2702 		y := v_1.Args[0]
   2703 		if !(is32Bit(c+4*d) && y.Op != OpSB) {
   2704 			break
   2705 		}
   2706 		v.reset(Op386LEAL4)
   2707 		v.AuxInt = c + 4*d
   2708 		v.Aux = s
   2709 		v.AddArg(x)
   2710 		v.AddArg(y)
   2711 		return true
   2712 	}
   2713 	// match: (LEAL4 [c] {s} x (SHLLconst [1] y))
   2714 	// cond:
   2715 	// result: (LEAL8 [c] {s} x y)
   2716 	for {
   2717 		c := v.AuxInt
   2718 		s := v.Aux
   2719 		_ = v.Args[1]
   2720 		x := v.Args[0]
   2721 		v_1 := v.Args[1]
   2722 		if v_1.Op != Op386SHLLconst {
   2723 			break
   2724 		}
   2725 		if v_1.AuxInt != 1 {
   2726 			break
   2727 		}
   2728 		y := v_1.Args[0]
   2729 		v.reset(Op386LEAL8)
   2730 		v.AuxInt = c
   2731 		v.Aux = s
   2732 		v.AddArg(x)
   2733 		v.AddArg(y)
   2734 		return true
   2735 	}
   2736 	// match: (LEAL4 [off1] {sym1} (LEAL [off2] {sym2} x) y)
   2737 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB
   2738 	// result: (LEAL4 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2739 	for {
   2740 		off1 := v.AuxInt
   2741 		sym1 := v.Aux
   2742 		_ = v.Args[1]
   2743 		v_0 := v.Args[0]
   2744 		if v_0.Op != Op386LEAL {
   2745 			break
   2746 		}
   2747 		off2 := v_0.AuxInt
   2748 		sym2 := v_0.Aux
   2749 		x := v_0.Args[0]
   2750 		y := v.Args[1]
   2751 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) {
   2752 			break
   2753 		}
   2754 		v.reset(Op386LEAL4)
   2755 		v.AuxInt = off1 + off2
   2756 		v.Aux = mergeSym(sym1, sym2)
   2757 		v.AddArg(x)
   2758 		v.AddArg(y)
   2759 		return true
   2760 	}
   2761 	return false
   2762 }
   2763 func rewriteValue386_Op386LEAL8_0(v *Value) bool {
   2764 	// match: (LEAL8 [c] {s} (ADDLconst [d] x) y)
   2765 	// cond: is32Bit(c+d)   && x.Op != OpSB
   2766 	// result: (LEAL8 [c+d] {s} x y)
   2767 	for {
   2768 		c := v.AuxInt
   2769 		s := v.Aux
   2770 		_ = v.Args[1]
   2771 		v_0 := v.Args[0]
   2772 		if v_0.Op != Op386ADDLconst {
   2773 			break
   2774 		}
   2775 		d := v_0.AuxInt
   2776 		x := v_0.Args[0]
   2777 		y := v.Args[1]
   2778 		if !(is32Bit(c+d) && x.Op != OpSB) {
   2779 			break
   2780 		}
   2781 		v.reset(Op386LEAL8)
   2782 		v.AuxInt = c + d
   2783 		v.Aux = s
   2784 		v.AddArg(x)
   2785 		v.AddArg(y)
   2786 		return true
   2787 	}
   2788 	// match: (LEAL8 [c] {s} x (ADDLconst [d] y))
   2789 	// cond: is32Bit(c+8*d) && y.Op != OpSB
   2790 	// result: (LEAL8 [c+8*d] {s} x y)
   2791 	for {
   2792 		c := v.AuxInt
   2793 		s := v.Aux
   2794 		_ = v.Args[1]
   2795 		x := v.Args[0]
   2796 		v_1 := v.Args[1]
   2797 		if v_1.Op != Op386ADDLconst {
   2798 			break
   2799 		}
   2800 		d := v_1.AuxInt
   2801 		y := v_1.Args[0]
   2802 		if !(is32Bit(c+8*d) && y.Op != OpSB) {
   2803 			break
   2804 		}
   2805 		v.reset(Op386LEAL8)
   2806 		v.AuxInt = c + 8*d
   2807 		v.Aux = s
   2808 		v.AddArg(x)
   2809 		v.AddArg(y)
   2810 		return true
   2811 	}
   2812 	// match: (LEAL8 [off1] {sym1} (LEAL [off2] {sym2} x) y)
   2813 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB
   2814 	// result: (LEAL8 [off1+off2] {mergeSym(sym1,sym2)} x y)
   2815 	for {
   2816 		off1 := v.AuxInt
   2817 		sym1 := v.Aux
   2818 		_ = v.Args[1]
   2819 		v_0 := v.Args[0]
   2820 		if v_0.Op != Op386LEAL {
   2821 			break
   2822 		}
   2823 		off2 := v_0.AuxInt
   2824 		sym2 := v_0.Aux
   2825 		x := v_0.Args[0]
   2826 		y := v.Args[1]
   2827 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) {
   2828 			break
   2829 		}
   2830 		v.reset(Op386LEAL8)
   2831 		v.AuxInt = off1 + off2
   2832 		v.Aux = mergeSym(sym1, sym2)
   2833 		v.AddArg(x)
   2834 		v.AddArg(y)
   2835 		return true
   2836 	}
   2837 	return false
   2838 }
   2839 func rewriteValue386_Op386MOVBLSX_0(v *Value) bool {
   2840 	b := v.Block
   2841 	_ = b
   2842 	// match: (MOVBLSX x:(MOVBload [off] {sym} ptr mem))
   2843 	// cond: x.Uses == 1 && clobber(x)
   2844 	// result: @x.Block (MOVBLSXload <v.Type> [off] {sym} ptr mem)
   2845 	for {
   2846 		x := v.Args[0]
   2847 		if x.Op != Op386MOVBload {
   2848 			break
   2849 		}
   2850 		off := x.AuxInt
   2851 		sym := x.Aux
   2852 		_ = x.Args[1]
   2853 		ptr := x.Args[0]
   2854 		mem := x.Args[1]
   2855 		if !(x.Uses == 1 && clobber(x)) {
   2856 			break
   2857 		}
   2858 		b = x.Block
   2859 		v0 := b.NewValue0(v.Pos, Op386MOVBLSXload, v.Type)
   2860 		v.reset(OpCopy)
   2861 		v.AddArg(v0)
   2862 		v0.AuxInt = off
   2863 		v0.Aux = sym
   2864 		v0.AddArg(ptr)
   2865 		v0.AddArg(mem)
   2866 		return true
   2867 	}
   2868 	// match: (MOVBLSX (ANDLconst [c] x))
   2869 	// cond: c & 0x80 == 0
   2870 	// result: (ANDLconst [c & 0x7f] x)
   2871 	for {
   2872 		v_0 := v.Args[0]
   2873 		if v_0.Op != Op386ANDLconst {
   2874 			break
   2875 		}
   2876 		c := v_0.AuxInt
   2877 		x := v_0.Args[0]
   2878 		if !(c&0x80 == 0) {
   2879 			break
   2880 		}
   2881 		v.reset(Op386ANDLconst)
   2882 		v.AuxInt = c & 0x7f
   2883 		v.AddArg(x)
   2884 		return true
   2885 	}
   2886 	return false
   2887 }
   2888 func rewriteValue386_Op386MOVBLSXload_0(v *Value) bool {
   2889 	b := v.Block
   2890 	_ = b
   2891 	config := b.Func.Config
   2892 	_ = config
   2893 	// match: (MOVBLSXload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _))
   2894 	// cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)
   2895 	// result: (MOVBLSX x)
   2896 	for {
   2897 		off := v.AuxInt
   2898 		sym := v.Aux
   2899 		_ = v.Args[1]
   2900 		ptr := v.Args[0]
   2901 		v_1 := v.Args[1]
   2902 		if v_1.Op != Op386MOVBstore {
   2903 			break
   2904 		}
   2905 		off2 := v_1.AuxInt
   2906 		sym2 := v_1.Aux
   2907 		_ = v_1.Args[2]
   2908 		ptr2 := v_1.Args[0]
   2909 		x := v_1.Args[1]
   2910 		if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
   2911 			break
   2912 		}
   2913 		v.reset(Op386MOVBLSX)
   2914 		v.AddArg(x)
   2915 		return true
   2916 	}
   2917 	// match: (MOVBLSXload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   2918 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   2919 	// result: (MOVBLSXload [off1+off2] {mergeSym(sym1,sym2)} base mem)
   2920 	for {
   2921 		off1 := v.AuxInt
   2922 		sym1 := v.Aux
   2923 		_ = v.Args[1]
   2924 		v_0 := v.Args[0]
   2925 		if v_0.Op != Op386LEAL {
   2926 			break
   2927 		}
   2928 		off2 := v_0.AuxInt
   2929 		sym2 := v_0.Aux
   2930 		base := v_0.Args[0]
   2931 		mem := v.Args[1]
   2932 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   2933 			break
   2934 		}
   2935 		v.reset(Op386MOVBLSXload)
   2936 		v.AuxInt = off1 + off2
   2937 		v.Aux = mergeSym(sym1, sym2)
   2938 		v.AddArg(base)
   2939 		v.AddArg(mem)
   2940 		return true
   2941 	}
   2942 	return false
   2943 }
   2944 func rewriteValue386_Op386MOVBLZX_0(v *Value) bool {
   2945 	b := v.Block
   2946 	_ = b
   2947 	// match: (MOVBLZX x:(MOVBload [off] {sym} ptr mem))
   2948 	// cond: x.Uses == 1 && clobber(x)
   2949 	// result: @x.Block (MOVBload <v.Type> [off] {sym} ptr mem)
   2950 	for {
   2951 		x := v.Args[0]
   2952 		if x.Op != Op386MOVBload {
   2953 			break
   2954 		}
   2955 		off := x.AuxInt
   2956 		sym := x.Aux
   2957 		_ = x.Args[1]
   2958 		ptr := x.Args[0]
   2959 		mem := x.Args[1]
   2960 		if !(x.Uses == 1 && clobber(x)) {
   2961 			break
   2962 		}
   2963 		b = x.Block
   2964 		v0 := b.NewValue0(v.Pos, Op386MOVBload, v.Type)
   2965 		v.reset(OpCopy)
   2966 		v.AddArg(v0)
   2967 		v0.AuxInt = off
   2968 		v0.Aux = sym
   2969 		v0.AddArg(ptr)
   2970 		v0.AddArg(mem)
   2971 		return true
   2972 	}
   2973 	// match: (MOVBLZX x:(MOVBloadidx1 [off] {sym} ptr idx mem))
   2974 	// cond: x.Uses == 1 && clobber(x)
   2975 	// result: @x.Block (MOVBloadidx1 <v.Type> [off] {sym} ptr idx mem)
   2976 	for {
   2977 		x := v.Args[0]
   2978 		if x.Op != Op386MOVBloadidx1 {
   2979 			break
   2980 		}
   2981 		off := x.AuxInt
   2982 		sym := x.Aux
   2983 		_ = x.Args[2]
   2984 		ptr := x.Args[0]
   2985 		idx := x.Args[1]
   2986 		mem := x.Args[2]
   2987 		if !(x.Uses == 1 && clobber(x)) {
   2988 			break
   2989 		}
   2990 		b = x.Block
   2991 		v0 := b.NewValue0(v.Pos, Op386MOVBloadidx1, v.Type)
   2992 		v.reset(OpCopy)
   2993 		v.AddArg(v0)
   2994 		v0.AuxInt = off
   2995 		v0.Aux = sym
   2996 		v0.AddArg(ptr)
   2997 		v0.AddArg(idx)
   2998 		v0.AddArg(mem)
   2999 		return true
   3000 	}
   3001 	// match: (MOVBLZX (ANDLconst [c] x))
   3002 	// cond:
   3003 	// result: (ANDLconst [c & 0xff] x)
   3004 	for {
   3005 		v_0 := v.Args[0]
   3006 		if v_0.Op != Op386ANDLconst {
   3007 			break
   3008 		}
   3009 		c := v_0.AuxInt
   3010 		x := v_0.Args[0]
   3011 		v.reset(Op386ANDLconst)
   3012 		v.AuxInt = c & 0xff
   3013 		v.AddArg(x)
   3014 		return true
   3015 	}
   3016 	return false
   3017 }
   3018 func rewriteValue386_Op386MOVBload_0(v *Value) bool {
   3019 	b := v.Block
   3020 	_ = b
   3021 	config := b.Func.Config
   3022 	_ = config
   3023 	// match: (MOVBload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _))
   3024 	// cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)
   3025 	// result: (MOVBLZX x)
   3026 	for {
   3027 		off := v.AuxInt
   3028 		sym := v.Aux
   3029 		_ = v.Args[1]
   3030 		ptr := v.Args[0]
   3031 		v_1 := v.Args[1]
   3032 		if v_1.Op != Op386MOVBstore {
   3033 			break
   3034 		}
   3035 		off2 := v_1.AuxInt
   3036 		sym2 := v_1.Aux
   3037 		_ = v_1.Args[2]
   3038 		ptr2 := v_1.Args[0]
   3039 		x := v_1.Args[1]
   3040 		if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
   3041 			break
   3042 		}
   3043 		v.reset(Op386MOVBLZX)
   3044 		v.AddArg(x)
   3045 		return true
   3046 	}
   3047 	// match: (MOVBload [off1] {sym} (ADDLconst [off2] ptr) mem)
   3048 	// cond: is32Bit(off1+off2)
   3049 	// result: (MOVBload  [off1+off2] {sym} ptr mem)
   3050 	for {
   3051 		off1 := v.AuxInt
   3052 		sym := v.Aux
   3053 		_ = v.Args[1]
   3054 		v_0 := v.Args[0]
   3055 		if v_0.Op != Op386ADDLconst {
   3056 			break
   3057 		}
   3058 		off2 := v_0.AuxInt
   3059 		ptr := v_0.Args[0]
   3060 		mem := v.Args[1]
   3061 		if !(is32Bit(off1 + off2)) {
   3062 			break
   3063 		}
   3064 		v.reset(Op386MOVBload)
   3065 		v.AuxInt = off1 + off2
   3066 		v.Aux = sym
   3067 		v.AddArg(ptr)
   3068 		v.AddArg(mem)
   3069 		return true
   3070 	}
   3071 	// match: (MOVBload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   3072 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   3073 	// result: (MOVBload  [off1+off2] {mergeSym(sym1,sym2)} base mem)
   3074 	for {
   3075 		off1 := v.AuxInt
   3076 		sym1 := v.Aux
   3077 		_ = v.Args[1]
   3078 		v_0 := v.Args[0]
   3079 		if v_0.Op != Op386LEAL {
   3080 			break
   3081 		}
   3082 		off2 := v_0.AuxInt
   3083 		sym2 := v_0.Aux
   3084 		base := v_0.Args[0]
   3085 		mem := v.Args[1]
   3086 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   3087 			break
   3088 		}
   3089 		v.reset(Op386MOVBload)
   3090 		v.AuxInt = off1 + off2
   3091 		v.Aux = mergeSym(sym1, sym2)
   3092 		v.AddArg(base)
   3093 		v.AddArg(mem)
   3094 		return true
   3095 	}
   3096 	// match: (MOVBload [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) mem)
   3097 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   3098 	// result: (MOVBloadidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   3099 	for {
   3100 		off1 := v.AuxInt
   3101 		sym1 := v.Aux
   3102 		_ = v.Args[1]
   3103 		v_0 := v.Args[0]
   3104 		if v_0.Op != Op386LEAL1 {
   3105 			break
   3106 		}
   3107 		off2 := v_0.AuxInt
   3108 		sym2 := v_0.Aux
   3109 		_ = v_0.Args[1]
   3110 		ptr := v_0.Args[0]
   3111 		idx := v_0.Args[1]
   3112 		mem := v.Args[1]
   3113 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   3114 			break
   3115 		}
   3116 		v.reset(Op386MOVBloadidx1)
   3117 		v.AuxInt = off1 + off2
   3118 		v.Aux = mergeSym(sym1, sym2)
   3119 		v.AddArg(ptr)
   3120 		v.AddArg(idx)
   3121 		v.AddArg(mem)
   3122 		return true
   3123 	}
   3124 	// match: (MOVBload [off] {sym} (ADDL ptr idx) mem)
   3125 	// cond: ptr.Op != OpSB
   3126 	// result: (MOVBloadidx1 [off] {sym} ptr idx mem)
   3127 	for {
   3128 		off := v.AuxInt
   3129 		sym := v.Aux
   3130 		_ = v.Args[1]
   3131 		v_0 := v.Args[0]
   3132 		if v_0.Op != Op386ADDL {
   3133 			break
   3134 		}
   3135 		_ = v_0.Args[1]
   3136 		ptr := v_0.Args[0]
   3137 		idx := v_0.Args[1]
   3138 		mem := v.Args[1]
   3139 		if !(ptr.Op != OpSB) {
   3140 			break
   3141 		}
   3142 		v.reset(Op386MOVBloadidx1)
   3143 		v.AuxInt = off
   3144 		v.Aux = sym
   3145 		v.AddArg(ptr)
   3146 		v.AddArg(idx)
   3147 		v.AddArg(mem)
   3148 		return true
   3149 	}
   3150 	return false
   3151 }
   3152 func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool {
   3153 	// match: (MOVBloadidx1 [c] {sym} (ADDLconst [d] ptr) idx mem)
   3154 	// cond:
   3155 	// result: (MOVBloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   3156 	for {
   3157 		c := v.AuxInt
   3158 		sym := v.Aux
   3159 		_ = v.Args[2]
   3160 		v_0 := v.Args[0]
   3161 		if v_0.Op != Op386ADDLconst {
   3162 			break
   3163 		}
   3164 		d := v_0.AuxInt
   3165 		ptr := v_0.Args[0]
   3166 		idx := v.Args[1]
   3167 		mem := v.Args[2]
   3168 		v.reset(Op386MOVBloadidx1)
   3169 		v.AuxInt = int64(int32(c + d))
   3170 		v.Aux = sym
   3171 		v.AddArg(ptr)
   3172 		v.AddArg(idx)
   3173 		v.AddArg(mem)
   3174 		return true
   3175 	}
   3176 	// match: (MOVBloadidx1 [c] {sym} idx (ADDLconst [d] ptr) mem)
   3177 	// cond:
   3178 	// result: (MOVBloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   3179 	for {
   3180 		c := v.AuxInt
   3181 		sym := v.Aux
   3182 		_ = v.Args[2]
   3183 		idx := v.Args[0]
   3184 		v_1 := v.Args[1]
   3185 		if v_1.Op != Op386ADDLconst {
   3186 			break
   3187 		}
   3188 		d := v_1.AuxInt
   3189 		ptr := v_1.Args[0]
   3190 		mem := v.Args[2]
   3191 		v.reset(Op386MOVBloadidx1)
   3192 		v.AuxInt = int64(int32(c + d))
   3193 		v.Aux = sym
   3194 		v.AddArg(ptr)
   3195 		v.AddArg(idx)
   3196 		v.AddArg(mem)
   3197 		return true
   3198 	}
   3199 	// match: (MOVBloadidx1 [c] {sym} ptr (ADDLconst [d] idx) mem)
   3200 	// cond:
   3201 	// result: (MOVBloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   3202 	for {
   3203 		c := v.AuxInt
   3204 		sym := v.Aux
   3205 		_ = v.Args[2]
   3206 		ptr := v.Args[0]
   3207 		v_1 := v.Args[1]
   3208 		if v_1.Op != Op386ADDLconst {
   3209 			break
   3210 		}
   3211 		d := v_1.AuxInt
   3212 		idx := v_1.Args[0]
   3213 		mem := v.Args[2]
   3214 		v.reset(Op386MOVBloadidx1)
   3215 		v.AuxInt = int64(int32(c + d))
   3216 		v.Aux = sym
   3217 		v.AddArg(ptr)
   3218 		v.AddArg(idx)
   3219 		v.AddArg(mem)
   3220 		return true
   3221 	}
   3222 	// match: (MOVBloadidx1 [c] {sym} (ADDLconst [d] idx) ptr mem)
   3223 	// cond:
   3224 	// result: (MOVBloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   3225 	for {
   3226 		c := v.AuxInt
   3227 		sym := v.Aux
   3228 		_ = v.Args[2]
   3229 		v_0 := v.Args[0]
   3230 		if v_0.Op != Op386ADDLconst {
   3231 			break
   3232 		}
   3233 		d := v_0.AuxInt
   3234 		idx := v_0.Args[0]
   3235 		ptr := v.Args[1]
   3236 		mem := v.Args[2]
   3237 		v.reset(Op386MOVBloadidx1)
   3238 		v.AuxInt = int64(int32(c + d))
   3239 		v.Aux = sym
   3240 		v.AddArg(ptr)
   3241 		v.AddArg(idx)
   3242 		v.AddArg(mem)
   3243 		return true
   3244 	}
   3245 	return false
   3246 }
   3247 func rewriteValue386_Op386MOVBstore_0(v *Value) bool {
   3248 	b := v.Block
   3249 	_ = b
   3250 	config := b.Func.Config
   3251 	_ = config
   3252 	// match: (MOVBstore [off] {sym} ptr (MOVBLSX x) mem)
   3253 	// cond:
   3254 	// result: (MOVBstore [off] {sym} ptr x mem)
   3255 	for {
   3256 		off := v.AuxInt
   3257 		sym := v.Aux
   3258 		_ = v.Args[2]
   3259 		ptr := v.Args[0]
   3260 		v_1 := v.Args[1]
   3261 		if v_1.Op != Op386MOVBLSX {
   3262 			break
   3263 		}
   3264 		x := v_1.Args[0]
   3265 		mem := v.Args[2]
   3266 		v.reset(Op386MOVBstore)
   3267 		v.AuxInt = off
   3268 		v.Aux = sym
   3269 		v.AddArg(ptr)
   3270 		v.AddArg(x)
   3271 		v.AddArg(mem)
   3272 		return true
   3273 	}
   3274 	// match: (MOVBstore [off] {sym} ptr (MOVBLZX x) mem)
   3275 	// cond:
   3276 	// result: (MOVBstore [off] {sym} ptr x mem)
   3277 	for {
   3278 		off := v.AuxInt
   3279 		sym := v.Aux
   3280 		_ = v.Args[2]
   3281 		ptr := v.Args[0]
   3282 		v_1 := v.Args[1]
   3283 		if v_1.Op != Op386MOVBLZX {
   3284 			break
   3285 		}
   3286 		x := v_1.Args[0]
   3287 		mem := v.Args[2]
   3288 		v.reset(Op386MOVBstore)
   3289 		v.AuxInt = off
   3290 		v.Aux = sym
   3291 		v.AddArg(ptr)
   3292 		v.AddArg(x)
   3293 		v.AddArg(mem)
   3294 		return true
   3295 	}
   3296 	// match: (MOVBstore [off1] {sym} (ADDLconst [off2] ptr) val mem)
   3297 	// cond: is32Bit(off1+off2)
   3298 	// result: (MOVBstore  [off1+off2] {sym} ptr val mem)
   3299 	for {
   3300 		off1 := v.AuxInt
   3301 		sym := v.Aux
   3302 		_ = v.Args[2]
   3303 		v_0 := v.Args[0]
   3304 		if v_0.Op != Op386ADDLconst {
   3305 			break
   3306 		}
   3307 		off2 := v_0.AuxInt
   3308 		ptr := v_0.Args[0]
   3309 		val := v.Args[1]
   3310 		mem := v.Args[2]
   3311 		if !(is32Bit(off1 + off2)) {
   3312 			break
   3313 		}
   3314 		v.reset(Op386MOVBstore)
   3315 		v.AuxInt = off1 + off2
   3316 		v.Aux = sym
   3317 		v.AddArg(ptr)
   3318 		v.AddArg(val)
   3319 		v.AddArg(mem)
   3320 		return true
   3321 	}
   3322 	// match: (MOVBstore [off] {sym} ptr (MOVLconst [c]) mem)
   3323 	// cond: validOff(off)
   3324 	// result: (MOVBstoreconst [makeValAndOff(int64(int8(c)),off)] {sym} ptr mem)
   3325 	for {
   3326 		off := v.AuxInt
   3327 		sym := v.Aux
   3328 		_ = v.Args[2]
   3329 		ptr := v.Args[0]
   3330 		v_1 := v.Args[1]
   3331 		if v_1.Op != Op386MOVLconst {
   3332 			break
   3333 		}
   3334 		c := v_1.AuxInt
   3335 		mem := v.Args[2]
   3336 		if !(validOff(off)) {
   3337 			break
   3338 		}
   3339 		v.reset(Op386MOVBstoreconst)
   3340 		v.AuxInt = makeValAndOff(int64(int8(c)), off)
   3341 		v.Aux = sym
   3342 		v.AddArg(ptr)
   3343 		v.AddArg(mem)
   3344 		return true
   3345 	}
   3346 	// match: (MOVBstore [off1] {sym1} (LEAL [off2] {sym2} base) val mem)
   3347 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   3348 	// result: (MOVBstore  [off1+off2] {mergeSym(sym1,sym2)} base val mem)
   3349 	for {
   3350 		off1 := v.AuxInt
   3351 		sym1 := v.Aux
   3352 		_ = v.Args[2]
   3353 		v_0 := v.Args[0]
   3354 		if v_0.Op != Op386LEAL {
   3355 			break
   3356 		}
   3357 		off2 := v_0.AuxInt
   3358 		sym2 := v_0.Aux
   3359 		base := v_0.Args[0]
   3360 		val := v.Args[1]
   3361 		mem := v.Args[2]
   3362 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   3363 			break
   3364 		}
   3365 		v.reset(Op386MOVBstore)
   3366 		v.AuxInt = off1 + off2
   3367 		v.Aux = mergeSym(sym1, sym2)
   3368 		v.AddArg(base)
   3369 		v.AddArg(val)
   3370 		v.AddArg(mem)
   3371 		return true
   3372 	}
   3373 	// match: (MOVBstore [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) val mem)
   3374 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   3375 	// result: (MOVBstoreidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   3376 	for {
   3377 		off1 := v.AuxInt
   3378 		sym1 := v.Aux
   3379 		_ = v.Args[2]
   3380 		v_0 := v.Args[0]
   3381 		if v_0.Op != Op386LEAL1 {
   3382 			break
   3383 		}
   3384 		off2 := v_0.AuxInt
   3385 		sym2 := v_0.Aux
   3386 		_ = v_0.Args[1]
   3387 		ptr := v_0.Args[0]
   3388 		idx := v_0.Args[1]
   3389 		val := v.Args[1]
   3390 		mem := v.Args[2]
   3391 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   3392 			break
   3393 		}
   3394 		v.reset(Op386MOVBstoreidx1)
   3395 		v.AuxInt = off1 + off2
   3396 		v.Aux = mergeSym(sym1, sym2)
   3397 		v.AddArg(ptr)
   3398 		v.AddArg(idx)
   3399 		v.AddArg(val)
   3400 		v.AddArg(mem)
   3401 		return true
   3402 	}
   3403 	// match: (MOVBstore [off] {sym} (ADDL ptr idx) val mem)
   3404 	// cond: ptr.Op != OpSB
   3405 	// result: (MOVBstoreidx1 [off] {sym} ptr idx val mem)
   3406 	for {
   3407 		off := v.AuxInt
   3408 		sym := v.Aux
   3409 		_ = v.Args[2]
   3410 		v_0 := v.Args[0]
   3411 		if v_0.Op != Op386ADDL {
   3412 			break
   3413 		}
   3414 		_ = v_0.Args[1]
   3415 		ptr := v_0.Args[0]
   3416 		idx := v_0.Args[1]
   3417 		val := v.Args[1]
   3418 		mem := v.Args[2]
   3419 		if !(ptr.Op != OpSB) {
   3420 			break
   3421 		}
   3422 		v.reset(Op386MOVBstoreidx1)
   3423 		v.AuxInt = off
   3424 		v.Aux = sym
   3425 		v.AddArg(ptr)
   3426 		v.AddArg(idx)
   3427 		v.AddArg(val)
   3428 		v.AddArg(mem)
   3429 		return true
   3430 	}
   3431 	// match: (MOVBstore [i] {s} p (SHRLconst [8] w) x:(MOVBstore [i-1] {s} p w mem))
   3432 	// cond: x.Uses == 1   && clobber(x)
   3433 	// result: (MOVWstore [i-1] {s} p w mem)
   3434 	for {
   3435 		i := v.AuxInt
   3436 		s := v.Aux
   3437 		_ = v.Args[2]
   3438 		p := v.Args[0]
   3439 		v_1 := v.Args[1]
   3440 		if v_1.Op != Op386SHRLconst {
   3441 			break
   3442 		}
   3443 		if v_1.AuxInt != 8 {
   3444 			break
   3445 		}
   3446 		w := v_1.Args[0]
   3447 		x := v.Args[2]
   3448 		if x.Op != Op386MOVBstore {
   3449 			break
   3450 		}
   3451 		if x.AuxInt != i-1 {
   3452 			break
   3453 		}
   3454 		if x.Aux != s {
   3455 			break
   3456 		}
   3457 		_ = x.Args[2]
   3458 		if p != x.Args[0] {
   3459 			break
   3460 		}
   3461 		if w != x.Args[1] {
   3462 			break
   3463 		}
   3464 		mem := x.Args[2]
   3465 		if !(x.Uses == 1 && clobber(x)) {
   3466 			break
   3467 		}
   3468 		v.reset(Op386MOVWstore)
   3469 		v.AuxInt = i - 1
   3470 		v.Aux = s
   3471 		v.AddArg(p)
   3472 		v.AddArg(w)
   3473 		v.AddArg(mem)
   3474 		return true
   3475 	}
   3476 	// match: (MOVBstore [i] {s} p (SHRLconst [j] w) x:(MOVBstore [i-1] {s} p w0:(SHRLconst [j-8] w) mem))
   3477 	// cond: x.Uses == 1   && clobber(x)
   3478 	// result: (MOVWstore [i-1] {s} p w0 mem)
   3479 	for {
   3480 		i := v.AuxInt
   3481 		s := v.Aux
   3482 		_ = v.Args[2]
   3483 		p := v.Args[0]
   3484 		v_1 := v.Args[1]
   3485 		if v_1.Op != Op386SHRLconst {
   3486 			break
   3487 		}
   3488 		j := v_1.AuxInt
   3489 		w := v_1.Args[0]
   3490 		x := v.Args[2]
   3491 		if x.Op != Op386MOVBstore {
   3492 			break
   3493 		}
   3494 		if x.AuxInt != i-1 {
   3495 			break
   3496 		}
   3497 		if x.Aux != s {
   3498 			break
   3499 		}
   3500 		_ = x.Args[2]
   3501 		if p != x.Args[0] {
   3502 			break
   3503 		}
   3504 		w0 := x.Args[1]
   3505 		if w0.Op != Op386SHRLconst {
   3506 			break
   3507 		}
   3508 		if w0.AuxInt != j-8 {
   3509 			break
   3510 		}
   3511 		if w != w0.Args[0] {
   3512 			break
   3513 		}
   3514 		mem := x.Args[2]
   3515 		if !(x.Uses == 1 && clobber(x)) {
   3516 			break
   3517 		}
   3518 		v.reset(Op386MOVWstore)
   3519 		v.AuxInt = i - 1
   3520 		v.Aux = s
   3521 		v.AddArg(p)
   3522 		v.AddArg(w0)
   3523 		v.AddArg(mem)
   3524 		return true
   3525 	}
   3526 	return false
   3527 }
   3528 func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool {
   3529 	b := v.Block
   3530 	_ = b
   3531 	config := b.Func.Config
   3532 	_ = config
   3533 	// match: (MOVBstoreconst [sc] {s} (ADDLconst [off] ptr) mem)
   3534 	// cond: ValAndOff(sc).canAdd(off)
   3535 	// result: (MOVBstoreconst [ValAndOff(sc).add(off)] {s} ptr mem)
   3536 	for {
   3537 		sc := v.AuxInt
   3538 		s := v.Aux
   3539 		_ = v.Args[1]
   3540 		v_0 := v.Args[0]
   3541 		if v_0.Op != Op386ADDLconst {
   3542 			break
   3543 		}
   3544 		off := v_0.AuxInt
   3545 		ptr := v_0.Args[0]
   3546 		mem := v.Args[1]
   3547 		if !(ValAndOff(sc).canAdd(off)) {
   3548 			break
   3549 		}
   3550 		v.reset(Op386MOVBstoreconst)
   3551 		v.AuxInt = ValAndOff(sc).add(off)
   3552 		v.Aux = s
   3553 		v.AddArg(ptr)
   3554 		v.AddArg(mem)
   3555 		return true
   3556 	}
   3557 	// match: (MOVBstoreconst [sc] {sym1} (LEAL [off] {sym2} ptr) mem)
   3558 	// cond: canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)   && (ptr.Op != OpSB || !config.ctxt.Flag_shared)
   3559 	// result: (MOVBstoreconst [ValAndOff(sc).add(off)] {mergeSym(sym1, sym2)} ptr mem)
   3560 	for {
   3561 		sc := v.AuxInt
   3562 		sym1 := v.Aux
   3563 		_ = v.Args[1]
   3564 		v_0 := v.Args[0]
   3565 		if v_0.Op != Op386LEAL {
   3566 			break
   3567 		}
   3568 		off := v_0.AuxInt
   3569 		sym2 := v_0.Aux
   3570 		ptr := v_0.Args[0]
   3571 		mem := v.Args[1]
   3572 		if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) {
   3573 			break
   3574 		}
   3575 		v.reset(Op386MOVBstoreconst)
   3576 		v.AuxInt = ValAndOff(sc).add(off)
   3577 		v.Aux = mergeSym(sym1, sym2)
   3578 		v.AddArg(ptr)
   3579 		v.AddArg(mem)
   3580 		return true
   3581 	}
   3582 	// match: (MOVBstoreconst [x] {sym1} (LEAL1 [off] {sym2} ptr idx) mem)
   3583 	// cond: canMergeSym(sym1, sym2)
   3584 	// result: (MOVBstoreconstidx1 [ValAndOff(x).add(off)] {mergeSym(sym1,sym2)} ptr idx mem)
   3585 	for {
   3586 		x := v.AuxInt
   3587 		sym1 := v.Aux
   3588 		_ = v.Args[1]
   3589 		v_0 := v.Args[0]
   3590 		if v_0.Op != Op386LEAL1 {
   3591 			break
   3592 		}
   3593 		off := v_0.AuxInt
   3594 		sym2 := v_0.Aux
   3595 		_ = v_0.Args[1]
   3596 		ptr := v_0.Args[0]
   3597 		idx := v_0.Args[1]
   3598 		mem := v.Args[1]
   3599 		if !(canMergeSym(sym1, sym2)) {
   3600 			break
   3601 		}
   3602 		v.reset(Op386MOVBstoreconstidx1)
   3603 		v.AuxInt = ValAndOff(x).add(off)
   3604 		v.Aux = mergeSym(sym1, sym2)
   3605 		v.AddArg(ptr)
   3606 		v.AddArg(idx)
   3607 		v.AddArg(mem)
   3608 		return true
   3609 	}
   3610 	// match: (MOVBstoreconst [x] {sym} (ADDL ptr idx) mem)
   3611 	// cond:
   3612 	// result: (MOVBstoreconstidx1 [x] {sym} ptr idx mem)
   3613 	for {
   3614 		x := v.AuxInt
   3615 		sym := v.Aux
   3616 		_ = v.Args[1]
   3617 		v_0 := v.Args[0]
   3618 		if v_0.Op != Op386ADDL {
   3619 			break
   3620 		}
   3621 		_ = v_0.Args[1]
   3622 		ptr := v_0.Args[0]
   3623 		idx := v_0.Args[1]
   3624 		mem := v.Args[1]
   3625 		v.reset(Op386MOVBstoreconstidx1)
   3626 		v.AuxInt = x
   3627 		v.Aux = sym
   3628 		v.AddArg(ptr)
   3629 		v.AddArg(idx)
   3630 		v.AddArg(mem)
   3631 		return true
   3632 	}
   3633 	// match: (MOVBstoreconst [c] {s} p x:(MOVBstoreconst [a] {s} p mem))
   3634 	// cond: x.Uses == 1   && ValAndOff(a).Off() + 1 == ValAndOff(c).Off()   && clobber(x)
   3635 	// result: (MOVWstoreconst [makeValAndOff(ValAndOff(a).Val()&0xff | ValAndOff(c).Val()<<8, ValAndOff(a).Off())] {s} p mem)
   3636 	for {
   3637 		c := v.AuxInt
   3638 		s := v.Aux
   3639 		_ = v.Args[1]
   3640 		p := v.Args[0]
   3641 		x := v.Args[1]
   3642 		if x.Op != Op386MOVBstoreconst {
   3643 			break
   3644 		}
   3645 		a := x.AuxInt
   3646 		if x.Aux != s {
   3647 			break
   3648 		}
   3649 		_ = x.Args[1]
   3650 		if p != x.Args[0] {
   3651 			break
   3652 		}
   3653 		mem := x.Args[1]
   3654 		if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) {
   3655 			break
   3656 		}
   3657 		v.reset(Op386MOVWstoreconst)
   3658 		v.AuxInt = makeValAndOff(ValAndOff(a).Val()&0xff|ValAndOff(c).Val()<<8, ValAndOff(a).Off())
   3659 		v.Aux = s
   3660 		v.AddArg(p)
   3661 		v.AddArg(mem)
   3662 		return true
   3663 	}
   3664 	return false
   3665 }
   3666 func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool {
   3667 	// match: (MOVBstoreconstidx1 [x] {sym} (ADDLconst [c] ptr) idx mem)
   3668 	// cond:
   3669 	// result: (MOVBstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   3670 	for {
   3671 		x := v.AuxInt
   3672 		sym := v.Aux
   3673 		_ = v.Args[2]
   3674 		v_0 := v.Args[0]
   3675 		if v_0.Op != Op386ADDLconst {
   3676 			break
   3677 		}
   3678 		c := v_0.AuxInt
   3679 		ptr := v_0.Args[0]
   3680 		idx := v.Args[1]
   3681 		mem := v.Args[2]
   3682 		v.reset(Op386MOVBstoreconstidx1)
   3683 		v.AuxInt = ValAndOff(x).add(c)
   3684 		v.Aux = sym
   3685 		v.AddArg(ptr)
   3686 		v.AddArg(idx)
   3687 		v.AddArg(mem)
   3688 		return true
   3689 	}
   3690 	// match: (MOVBstoreconstidx1 [x] {sym} ptr (ADDLconst [c] idx) mem)
   3691 	// cond:
   3692 	// result: (MOVBstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   3693 	for {
   3694 		x := v.AuxInt
   3695 		sym := v.Aux
   3696 		_ = v.Args[2]
   3697 		ptr := v.Args[0]
   3698 		v_1 := v.Args[1]
   3699 		if v_1.Op != Op386ADDLconst {
   3700 			break
   3701 		}
   3702 		c := v_1.AuxInt
   3703 		idx := v_1.Args[0]
   3704 		mem := v.Args[2]
   3705 		v.reset(Op386MOVBstoreconstidx1)
   3706 		v.AuxInt = ValAndOff(x).add(c)
   3707 		v.Aux = sym
   3708 		v.AddArg(ptr)
   3709 		v.AddArg(idx)
   3710 		v.AddArg(mem)
   3711 		return true
   3712 	}
   3713 	// match: (MOVBstoreconstidx1 [c] {s} p i x:(MOVBstoreconstidx1 [a] {s} p i mem))
   3714 	// cond: x.Uses == 1   && ValAndOff(a).Off() + 1 == ValAndOff(c).Off()   && clobber(x)
   3715 	// result: (MOVWstoreconstidx1 [makeValAndOff(ValAndOff(a).Val()&0xff | ValAndOff(c).Val()<<8, ValAndOff(a).Off())] {s} p i mem)
   3716 	for {
   3717 		c := v.AuxInt
   3718 		s := v.Aux
   3719 		_ = v.Args[2]
   3720 		p := v.Args[0]
   3721 		i := v.Args[1]
   3722 		x := v.Args[2]
   3723 		if x.Op != Op386MOVBstoreconstidx1 {
   3724 			break
   3725 		}
   3726 		a := x.AuxInt
   3727 		if x.Aux != s {
   3728 			break
   3729 		}
   3730 		_ = x.Args[2]
   3731 		if p != x.Args[0] {
   3732 			break
   3733 		}
   3734 		if i != x.Args[1] {
   3735 			break
   3736 		}
   3737 		mem := x.Args[2]
   3738 		if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) {
   3739 			break
   3740 		}
   3741 		v.reset(Op386MOVWstoreconstidx1)
   3742 		v.AuxInt = makeValAndOff(ValAndOff(a).Val()&0xff|ValAndOff(c).Val()<<8, ValAndOff(a).Off())
   3743 		v.Aux = s
   3744 		v.AddArg(p)
   3745 		v.AddArg(i)
   3746 		v.AddArg(mem)
   3747 		return true
   3748 	}
   3749 	return false
   3750 }
   3751 func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool {
   3752 	// match: (MOVBstoreidx1 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   3753 	// cond:
   3754 	// result: (MOVBstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   3755 	for {
   3756 		c := v.AuxInt
   3757 		sym := v.Aux
   3758 		_ = v.Args[3]
   3759 		v_0 := v.Args[0]
   3760 		if v_0.Op != Op386ADDLconst {
   3761 			break
   3762 		}
   3763 		d := v_0.AuxInt
   3764 		ptr := v_0.Args[0]
   3765 		idx := v.Args[1]
   3766 		val := v.Args[2]
   3767 		mem := v.Args[3]
   3768 		v.reset(Op386MOVBstoreidx1)
   3769 		v.AuxInt = int64(int32(c + d))
   3770 		v.Aux = sym
   3771 		v.AddArg(ptr)
   3772 		v.AddArg(idx)
   3773 		v.AddArg(val)
   3774 		v.AddArg(mem)
   3775 		return true
   3776 	}
   3777 	// match: (MOVBstoreidx1 [c] {sym} idx (ADDLconst [d] ptr) val mem)
   3778 	// cond:
   3779 	// result: (MOVBstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   3780 	for {
   3781 		c := v.AuxInt
   3782 		sym := v.Aux
   3783 		_ = v.Args[3]
   3784 		idx := v.Args[0]
   3785 		v_1 := v.Args[1]
   3786 		if v_1.Op != Op386ADDLconst {
   3787 			break
   3788 		}
   3789 		d := v_1.AuxInt
   3790 		ptr := v_1.Args[0]
   3791 		val := v.Args[2]
   3792 		mem := v.Args[3]
   3793 		v.reset(Op386MOVBstoreidx1)
   3794 		v.AuxInt = int64(int32(c + d))
   3795 		v.Aux = sym
   3796 		v.AddArg(ptr)
   3797 		v.AddArg(idx)
   3798 		v.AddArg(val)
   3799 		v.AddArg(mem)
   3800 		return true
   3801 	}
   3802 	// match: (MOVBstoreidx1 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   3803 	// cond:
   3804 	// result: (MOVBstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   3805 	for {
   3806 		c := v.AuxInt
   3807 		sym := v.Aux
   3808 		_ = v.Args[3]
   3809 		ptr := v.Args[0]
   3810 		v_1 := v.Args[1]
   3811 		if v_1.Op != Op386ADDLconst {
   3812 			break
   3813 		}
   3814 		d := v_1.AuxInt
   3815 		idx := v_1.Args[0]
   3816 		val := v.Args[2]
   3817 		mem := v.Args[3]
   3818 		v.reset(Op386MOVBstoreidx1)
   3819 		v.AuxInt = int64(int32(c + d))
   3820 		v.Aux = sym
   3821 		v.AddArg(ptr)
   3822 		v.AddArg(idx)
   3823 		v.AddArg(val)
   3824 		v.AddArg(mem)
   3825 		return true
   3826 	}
   3827 	// match: (MOVBstoreidx1 [c] {sym} (ADDLconst [d] idx) ptr val mem)
   3828 	// cond:
   3829 	// result: (MOVBstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   3830 	for {
   3831 		c := v.AuxInt
   3832 		sym := v.Aux
   3833 		_ = v.Args[3]
   3834 		v_0 := v.Args[0]
   3835 		if v_0.Op != Op386ADDLconst {
   3836 			break
   3837 		}
   3838 		d := v_0.AuxInt
   3839 		idx := v_0.Args[0]
   3840 		ptr := v.Args[1]
   3841 		val := v.Args[2]
   3842 		mem := v.Args[3]
   3843 		v.reset(Op386MOVBstoreidx1)
   3844 		v.AuxInt = int64(int32(c + d))
   3845 		v.Aux = sym
   3846 		v.AddArg(ptr)
   3847 		v.AddArg(idx)
   3848 		v.AddArg(val)
   3849 		v.AddArg(mem)
   3850 		return true
   3851 	}
   3852 	// match: (MOVBstoreidx1 [i] {s} p idx (SHRLconst [8] w) x:(MOVBstoreidx1 [i-1] {s} p idx w mem))
   3853 	// cond: x.Uses == 1   && clobber(x)
   3854 	// result: (MOVWstoreidx1 [i-1] {s} p idx w mem)
   3855 	for {
   3856 		i := v.AuxInt
   3857 		s := v.Aux
   3858 		_ = v.Args[3]
   3859 		p := v.Args[0]
   3860 		idx := v.Args[1]
   3861 		v_2 := v.Args[2]
   3862 		if v_2.Op != Op386SHRLconst {
   3863 			break
   3864 		}
   3865 		if v_2.AuxInt != 8 {
   3866 			break
   3867 		}
   3868 		w := v_2.Args[0]
   3869 		x := v.Args[3]
   3870 		if x.Op != Op386MOVBstoreidx1 {
   3871 			break
   3872 		}
   3873 		if x.AuxInt != i-1 {
   3874 			break
   3875 		}
   3876 		if x.Aux != s {
   3877 			break
   3878 		}
   3879 		_ = x.Args[3]
   3880 		if p != x.Args[0] {
   3881 			break
   3882 		}
   3883 		if idx != x.Args[1] {
   3884 			break
   3885 		}
   3886 		if w != x.Args[2] {
   3887 			break
   3888 		}
   3889 		mem := x.Args[3]
   3890 		if !(x.Uses == 1 && clobber(x)) {
   3891 			break
   3892 		}
   3893 		v.reset(Op386MOVWstoreidx1)
   3894 		v.AuxInt = i - 1
   3895 		v.Aux = s
   3896 		v.AddArg(p)
   3897 		v.AddArg(idx)
   3898 		v.AddArg(w)
   3899 		v.AddArg(mem)
   3900 		return true
   3901 	}
   3902 	// match: (MOVBstoreidx1 [i] {s} p idx (SHRLconst [8] w) x:(MOVBstoreidx1 [i-1] {s} idx p w mem))
   3903 	// cond: x.Uses == 1   && clobber(x)
   3904 	// result: (MOVWstoreidx1 [i-1] {s} p idx w mem)
   3905 	for {
   3906 		i := v.AuxInt
   3907 		s := v.Aux
   3908 		_ = v.Args[3]
   3909 		p := v.Args[0]
   3910 		idx := v.Args[1]
   3911 		v_2 := v.Args[2]
   3912 		if v_2.Op != Op386SHRLconst {
   3913 			break
   3914 		}
   3915 		if v_2.AuxInt != 8 {
   3916 			break
   3917 		}
   3918 		w := v_2.Args[0]
   3919 		x := v.Args[3]
   3920 		if x.Op != Op386MOVBstoreidx1 {
   3921 			break
   3922 		}
   3923 		if x.AuxInt != i-1 {
   3924 			break
   3925 		}
   3926 		if x.Aux != s {
   3927 			break
   3928 		}
   3929 		_ = x.Args[3]
   3930 		if idx != x.Args[0] {
   3931 			break
   3932 		}
   3933 		if p != x.Args[1] {
   3934 			break
   3935 		}
   3936 		if w != x.Args[2] {
   3937 			break
   3938 		}
   3939 		mem := x.Args[3]
   3940 		if !(x.Uses == 1 && clobber(x)) {
   3941 			break
   3942 		}
   3943 		v.reset(Op386MOVWstoreidx1)
   3944 		v.AuxInt = i - 1
   3945 		v.Aux = s
   3946 		v.AddArg(p)
   3947 		v.AddArg(idx)
   3948 		v.AddArg(w)
   3949 		v.AddArg(mem)
   3950 		return true
   3951 	}
   3952 	// match: (MOVBstoreidx1 [i] {s} idx p (SHRLconst [8] w) x:(MOVBstoreidx1 [i-1] {s} p idx w mem))
   3953 	// cond: x.Uses == 1   && clobber(x)
   3954 	// result: (MOVWstoreidx1 [i-1] {s} p idx w mem)
   3955 	for {
   3956 		i := v.AuxInt
   3957 		s := v.Aux
   3958 		_ = v.Args[3]
   3959 		idx := v.Args[0]
   3960 		p := v.Args[1]
   3961 		v_2 := v.Args[2]
   3962 		if v_2.Op != Op386SHRLconst {
   3963 			break
   3964 		}
   3965 		if v_2.AuxInt != 8 {
   3966 			break
   3967 		}
   3968 		w := v_2.Args[0]
   3969 		x := v.Args[3]
   3970 		if x.Op != Op386MOVBstoreidx1 {
   3971 			break
   3972 		}
   3973 		if x.AuxInt != i-1 {
   3974 			break
   3975 		}
   3976 		if x.Aux != s {
   3977 			break
   3978 		}
   3979 		_ = x.Args[3]
   3980 		if p != x.Args[0] {
   3981 			break
   3982 		}
   3983 		if idx != x.Args[1] {
   3984 			break
   3985 		}
   3986 		if w != x.Args[2] {
   3987 			break
   3988 		}
   3989 		mem := x.Args[3]
   3990 		if !(x.Uses == 1 && clobber(x)) {
   3991 			break
   3992 		}
   3993 		v.reset(Op386MOVWstoreidx1)
   3994 		v.AuxInt = i - 1
   3995 		v.Aux = s
   3996 		v.AddArg(p)
   3997 		v.AddArg(idx)
   3998 		v.AddArg(w)
   3999 		v.AddArg(mem)
   4000 		return true
   4001 	}
   4002 	// match: (MOVBstoreidx1 [i] {s} idx p (SHRLconst [8] w) x:(MOVBstoreidx1 [i-1] {s} idx p w mem))
   4003 	// cond: x.Uses == 1   && clobber(x)
   4004 	// result: (MOVWstoreidx1 [i-1] {s} p idx w mem)
   4005 	for {
   4006 		i := v.AuxInt
   4007 		s := v.Aux
   4008 		_ = v.Args[3]
   4009 		idx := v.Args[0]
   4010 		p := v.Args[1]
   4011 		v_2 := v.Args[2]
   4012 		if v_2.Op != Op386SHRLconst {
   4013 			break
   4014 		}
   4015 		if v_2.AuxInt != 8 {
   4016 			break
   4017 		}
   4018 		w := v_2.Args[0]
   4019 		x := v.Args[3]
   4020 		if x.Op != Op386MOVBstoreidx1 {
   4021 			break
   4022 		}
   4023 		if x.AuxInt != i-1 {
   4024 			break
   4025 		}
   4026 		if x.Aux != s {
   4027 			break
   4028 		}
   4029 		_ = x.Args[3]
   4030 		if idx != x.Args[0] {
   4031 			break
   4032 		}
   4033 		if p != x.Args[1] {
   4034 			break
   4035 		}
   4036 		if w != x.Args[2] {
   4037 			break
   4038 		}
   4039 		mem := x.Args[3]
   4040 		if !(x.Uses == 1 && clobber(x)) {
   4041 			break
   4042 		}
   4043 		v.reset(Op386MOVWstoreidx1)
   4044 		v.AuxInt = i - 1
   4045 		v.Aux = s
   4046 		v.AddArg(p)
   4047 		v.AddArg(idx)
   4048 		v.AddArg(w)
   4049 		v.AddArg(mem)
   4050 		return true
   4051 	}
   4052 	// match: (MOVBstoreidx1 [i] {s} p idx (SHRLconst [j] w) x:(MOVBstoreidx1 [i-1] {s} p idx w0:(SHRLconst [j-8] w) mem))
   4053 	// cond: x.Uses == 1   && clobber(x)
   4054 	// result: (MOVWstoreidx1 [i-1] {s} p idx w0 mem)
   4055 	for {
   4056 		i := v.AuxInt
   4057 		s := v.Aux
   4058 		_ = v.Args[3]
   4059 		p := v.Args[0]
   4060 		idx := v.Args[1]
   4061 		v_2 := v.Args[2]
   4062 		if v_2.Op != Op386SHRLconst {
   4063 			break
   4064 		}
   4065 		j := v_2.AuxInt
   4066 		w := v_2.Args[0]
   4067 		x := v.Args[3]
   4068 		if x.Op != Op386MOVBstoreidx1 {
   4069 			break
   4070 		}
   4071 		if x.AuxInt != i-1 {
   4072 			break
   4073 		}
   4074 		if x.Aux != s {
   4075 			break
   4076 		}
   4077 		_ = x.Args[3]
   4078 		if p != x.Args[0] {
   4079 			break
   4080 		}
   4081 		if idx != x.Args[1] {
   4082 			break
   4083 		}
   4084 		w0 := x.Args[2]
   4085 		if w0.Op != Op386SHRLconst {
   4086 			break
   4087 		}
   4088 		if w0.AuxInt != j-8 {
   4089 			break
   4090 		}
   4091 		if w != w0.Args[0] {
   4092 			break
   4093 		}
   4094 		mem := x.Args[3]
   4095 		if !(x.Uses == 1 && clobber(x)) {
   4096 			break
   4097 		}
   4098 		v.reset(Op386MOVWstoreidx1)
   4099 		v.AuxInt = i - 1
   4100 		v.Aux = s
   4101 		v.AddArg(p)
   4102 		v.AddArg(idx)
   4103 		v.AddArg(w0)
   4104 		v.AddArg(mem)
   4105 		return true
   4106 	}
   4107 	// match: (MOVBstoreidx1 [i] {s} p idx (SHRLconst [j] w) x:(MOVBstoreidx1 [i-1] {s} idx p w0:(SHRLconst [j-8] w) mem))
   4108 	// cond: x.Uses == 1   && clobber(x)
   4109 	// result: (MOVWstoreidx1 [i-1] {s} p idx w0 mem)
   4110 	for {
   4111 		i := v.AuxInt
   4112 		s := v.Aux
   4113 		_ = v.Args[3]
   4114 		p := v.Args[0]
   4115 		idx := v.Args[1]
   4116 		v_2 := v.Args[2]
   4117 		if v_2.Op != Op386SHRLconst {
   4118 			break
   4119 		}
   4120 		j := v_2.AuxInt
   4121 		w := v_2.Args[0]
   4122 		x := v.Args[3]
   4123 		if x.Op != Op386MOVBstoreidx1 {
   4124 			break
   4125 		}
   4126 		if x.AuxInt != i-1 {
   4127 			break
   4128 		}
   4129 		if x.Aux != s {
   4130 			break
   4131 		}
   4132 		_ = x.Args[3]
   4133 		if idx != x.Args[0] {
   4134 			break
   4135 		}
   4136 		if p != x.Args[1] {
   4137 			break
   4138 		}
   4139 		w0 := x.Args[2]
   4140 		if w0.Op != Op386SHRLconst {
   4141 			break
   4142 		}
   4143 		if w0.AuxInt != j-8 {
   4144 			break
   4145 		}
   4146 		if w != w0.Args[0] {
   4147 			break
   4148 		}
   4149 		mem := x.Args[3]
   4150 		if !(x.Uses == 1 && clobber(x)) {
   4151 			break
   4152 		}
   4153 		v.reset(Op386MOVWstoreidx1)
   4154 		v.AuxInt = i - 1
   4155 		v.Aux = s
   4156 		v.AddArg(p)
   4157 		v.AddArg(idx)
   4158 		v.AddArg(w0)
   4159 		v.AddArg(mem)
   4160 		return true
   4161 	}
   4162 	return false
   4163 }
   4164 func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool {
   4165 	// match: (MOVBstoreidx1 [i] {s} idx p (SHRLconst [j] w) x:(MOVBstoreidx1 [i-1] {s} p idx w0:(SHRLconst [j-8] w) mem))
   4166 	// cond: x.Uses == 1   && clobber(x)
   4167 	// result: (MOVWstoreidx1 [i-1] {s} p idx w0 mem)
   4168 	for {
   4169 		i := v.AuxInt
   4170 		s := v.Aux
   4171 		_ = v.Args[3]
   4172 		idx := v.Args[0]
   4173 		p := v.Args[1]
   4174 		v_2 := v.Args[2]
   4175 		if v_2.Op != Op386SHRLconst {
   4176 			break
   4177 		}
   4178 		j := v_2.AuxInt
   4179 		w := v_2.Args[0]
   4180 		x := v.Args[3]
   4181 		if x.Op != Op386MOVBstoreidx1 {
   4182 			break
   4183 		}
   4184 		if x.AuxInt != i-1 {
   4185 			break
   4186 		}
   4187 		if x.Aux != s {
   4188 			break
   4189 		}
   4190 		_ = x.Args[3]
   4191 		if p != x.Args[0] {
   4192 			break
   4193 		}
   4194 		if idx != x.Args[1] {
   4195 			break
   4196 		}
   4197 		w0 := x.Args[2]
   4198 		if w0.Op != Op386SHRLconst {
   4199 			break
   4200 		}
   4201 		if w0.AuxInt != j-8 {
   4202 			break
   4203 		}
   4204 		if w != w0.Args[0] {
   4205 			break
   4206 		}
   4207 		mem := x.Args[3]
   4208 		if !(x.Uses == 1 && clobber(x)) {
   4209 			break
   4210 		}
   4211 		v.reset(Op386MOVWstoreidx1)
   4212 		v.AuxInt = i - 1
   4213 		v.Aux = s
   4214 		v.AddArg(p)
   4215 		v.AddArg(idx)
   4216 		v.AddArg(w0)
   4217 		v.AddArg(mem)
   4218 		return true
   4219 	}
   4220 	// match: (MOVBstoreidx1 [i] {s} idx p (SHRLconst [j] w) x:(MOVBstoreidx1 [i-1] {s} idx p w0:(SHRLconst [j-8] w) mem))
   4221 	// cond: x.Uses == 1   && clobber(x)
   4222 	// result: (MOVWstoreidx1 [i-1] {s} p idx w0 mem)
   4223 	for {
   4224 		i := v.AuxInt
   4225 		s := v.Aux
   4226 		_ = v.Args[3]
   4227 		idx := v.Args[0]
   4228 		p := v.Args[1]
   4229 		v_2 := v.Args[2]
   4230 		if v_2.Op != Op386SHRLconst {
   4231 			break
   4232 		}
   4233 		j := v_2.AuxInt
   4234 		w := v_2.Args[0]
   4235 		x := v.Args[3]
   4236 		if x.Op != Op386MOVBstoreidx1 {
   4237 			break
   4238 		}
   4239 		if x.AuxInt != i-1 {
   4240 			break
   4241 		}
   4242 		if x.Aux != s {
   4243 			break
   4244 		}
   4245 		_ = x.Args[3]
   4246 		if idx != x.Args[0] {
   4247 			break
   4248 		}
   4249 		if p != x.Args[1] {
   4250 			break
   4251 		}
   4252 		w0 := x.Args[2]
   4253 		if w0.Op != Op386SHRLconst {
   4254 			break
   4255 		}
   4256 		if w0.AuxInt != j-8 {
   4257 			break
   4258 		}
   4259 		if w != w0.Args[0] {
   4260 			break
   4261 		}
   4262 		mem := x.Args[3]
   4263 		if !(x.Uses == 1 && clobber(x)) {
   4264 			break
   4265 		}
   4266 		v.reset(Op386MOVWstoreidx1)
   4267 		v.AuxInt = i - 1
   4268 		v.Aux = s
   4269 		v.AddArg(p)
   4270 		v.AddArg(idx)
   4271 		v.AddArg(w0)
   4272 		v.AddArg(mem)
   4273 		return true
   4274 	}
   4275 	return false
   4276 }
   4277 func rewriteValue386_Op386MOVLload_0(v *Value) bool {
   4278 	b := v.Block
   4279 	_ = b
   4280 	config := b.Func.Config
   4281 	_ = config
   4282 	// match: (MOVLload [off] {sym} ptr (MOVLstore [off2] {sym2} ptr2 x _))
   4283 	// cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)
   4284 	// result: x
   4285 	for {
   4286 		off := v.AuxInt
   4287 		sym := v.Aux
   4288 		_ = v.Args[1]
   4289 		ptr := v.Args[0]
   4290 		v_1 := v.Args[1]
   4291 		if v_1.Op != Op386MOVLstore {
   4292 			break
   4293 		}
   4294 		off2 := v_1.AuxInt
   4295 		sym2 := v_1.Aux
   4296 		_ = v_1.Args[2]
   4297 		ptr2 := v_1.Args[0]
   4298 		x := v_1.Args[1]
   4299 		if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
   4300 			break
   4301 		}
   4302 		v.reset(OpCopy)
   4303 		v.Type = x.Type
   4304 		v.AddArg(x)
   4305 		return true
   4306 	}
   4307 	// match: (MOVLload [off1] {sym} (ADDLconst [off2] ptr) mem)
   4308 	// cond: is32Bit(off1+off2)
   4309 	// result: (MOVLload  [off1+off2] {sym} ptr mem)
   4310 	for {
   4311 		off1 := v.AuxInt
   4312 		sym := v.Aux
   4313 		_ = v.Args[1]
   4314 		v_0 := v.Args[0]
   4315 		if v_0.Op != Op386ADDLconst {
   4316 			break
   4317 		}
   4318 		off2 := v_0.AuxInt
   4319 		ptr := v_0.Args[0]
   4320 		mem := v.Args[1]
   4321 		if !(is32Bit(off1 + off2)) {
   4322 			break
   4323 		}
   4324 		v.reset(Op386MOVLload)
   4325 		v.AuxInt = off1 + off2
   4326 		v.Aux = sym
   4327 		v.AddArg(ptr)
   4328 		v.AddArg(mem)
   4329 		return true
   4330 	}
   4331 	// match: (MOVLload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   4332 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   4333 	// result: (MOVLload  [off1+off2] {mergeSym(sym1,sym2)} base mem)
   4334 	for {
   4335 		off1 := v.AuxInt
   4336 		sym1 := v.Aux
   4337 		_ = v.Args[1]
   4338 		v_0 := v.Args[0]
   4339 		if v_0.Op != Op386LEAL {
   4340 			break
   4341 		}
   4342 		off2 := v_0.AuxInt
   4343 		sym2 := v_0.Aux
   4344 		base := v_0.Args[0]
   4345 		mem := v.Args[1]
   4346 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   4347 			break
   4348 		}
   4349 		v.reset(Op386MOVLload)
   4350 		v.AuxInt = off1 + off2
   4351 		v.Aux = mergeSym(sym1, sym2)
   4352 		v.AddArg(base)
   4353 		v.AddArg(mem)
   4354 		return true
   4355 	}
   4356 	// match: (MOVLload [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) mem)
   4357 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   4358 	// result: (MOVLloadidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   4359 	for {
   4360 		off1 := v.AuxInt
   4361 		sym1 := v.Aux
   4362 		_ = v.Args[1]
   4363 		v_0 := v.Args[0]
   4364 		if v_0.Op != Op386LEAL1 {
   4365 			break
   4366 		}
   4367 		off2 := v_0.AuxInt
   4368 		sym2 := v_0.Aux
   4369 		_ = v_0.Args[1]
   4370 		ptr := v_0.Args[0]
   4371 		idx := v_0.Args[1]
   4372 		mem := v.Args[1]
   4373 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   4374 			break
   4375 		}
   4376 		v.reset(Op386MOVLloadidx1)
   4377 		v.AuxInt = off1 + off2
   4378 		v.Aux = mergeSym(sym1, sym2)
   4379 		v.AddArg(ptr)
   4380 		v.AddArg(idx)
   4381 		v.AddArg(mem)
   4382 		return true
   4383 	}
   4384 	// match: (MOVLload [off1] {sym1} (LEAL4 [off2] {sym2} ptr idx) mem)
   4385 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   4386 	// result: (MOVLloadidx4 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   4387 	for {
   4388 		off1 := v.AuxInt
   4389 		sym1 := v.Aux
   4390 		_ = v.Args[1]
   4391 		v_0 := v.Args[0]
   4392 		if v_0.Op != Op386LEAL4 {
   4393 			break
   4394 		}
   4395 		off2 := v_0.AuxInt
   4396 		sym2 := v_0.Aux
   4397 		_ = v_0.Args[1]
   4398 		ptr := v_0.Args[0]
   4399 		idx := v_0.Args[1]
   4400 		mem := v.Args[1]
   4401 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   4402 			break
   4403 		}
   4404 		v.reset(Op386MOVLloadidx4)
   4405 		v.AuxInt = off1 + off2
   4406 		v.Aux = mergeSym(sym1, sym2)
   4407 		v.AddArg(ptr)
   4408 		v.AddArg(idx)
   4409 		v.AddArg(mem)
   4410 		return true
   4411 	}
   4412 	// match: (MOVLload [off] {sym} (ADDL ptr idx) mem)
   4413 	// cond: ptr.Op != OpSB
   4414 	// result: (MOVLloadidx1 [off] {sym} ptr idx mem)
   4415 	for {
   4416 		off := v.AuxInt
   4417 		sym := v.Aux
   4418 		_ = v.Args[1]
   4419 		v_0 := v.Args[0]
   4420 		if v_0.Op != Op386ADDL {
   4421 			break
   4422 		}
   4423 		_ = v_0.Args[1]
   4424 		ptr := v_0.Args[0]
   4425 		idx := v_0.Args[1]
   4426 		mem := v.Args[1]
   4427 		if !(ptr.Op != OpSB) {
   4428 			break
   4429 		}
   4430 		v.reset(Op386MOVLloadidx1)
   4431 		v.AuxInt = off
   4432 		v.Aux = sym
   4433 		v.AddArg(ptr)
   4434 		v.AddArg(idx)
   4435 		v.AddArg(mem)
   4436 		return true
   4437 	}
   4438 	return false
   4439 }
   4440 func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool {
   4441 	// match: (MOVLloadidx1 [c] {sym} ptr (SHLLconst [2] idx) mem)
   4442 	// cond:
   4443 	// result: (MOVLloadidx4 [c] {sym} ptr idx mem)
   4444 	for {
   4445 		c := v.AuxInt
   4446 		sym := v.Aux
   4447 		_ = v.Args[2]
   4448 		ptr := v.Args[0]
   4449 		v_1 := v.Args[1]
   4450 		if v_1.Op != Op386SHLLconst {
   4451 			break
   4452 		}
   4453 		if v_1.AuxInt != 2 {
   4454 			break
   4455 		}
   4456 		idx := v_1.Args[0]
   4457 		mem := v.Args[2]
   4458 		v.reset(Op386MOVLloadidx4)
   4459 		v.AuxInt = c
   4460 		v.Aux = sym
   4461 		v.AddArg(ptr)
   4462 		v.AddArg(idx)
   4463 		v.AddArg(mem)
   4464 		return true
   4465 	}
   4466 	// match: (MOVLloadidx1 [c] {sym} (SHLLconst [2] idx) ptr mem)
   4467 	// cond:
   4468 	// result: (MOVLloadidx4 [c] {sym} ptr idx mem)
   4469 	for {
   4470 		c := v.AuxInt
   4471 		sym := v.Aux
   4472 		_ = v.Args[2]
   4473 		v_0 := v.Args[0]
   4474 		if v_0.Op != Op386SHLLconst {
   4475 			break
   4476 		}
   4477 		if v_0.AuxInt != 2 {
   4478 			break
   4479 		}
   4480 		idx := v_0.Args[0]
   4481 		ptr := v.Args[1]
   4482 		mem := v.Args[2]
   4483 		v.reset(Op386MOVLloadidx4)
   4484 		v.AuxInt = c
   4485 		v.Aux = sym
   4486 		v.AddArg(ptr)
   4487 		v.AddArg(idx)
   4488 		v.AddArg(mem)
   4489 		return true
   4490 	}
   4491 	// match: (MOVLloadidx1 [c] {sym} (ADDLconst [d] ptr) idx mem)
   4492 	// cond:
   4493 	// result: (MOVLloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   4494 	for {
   4495 		c := v.AuxInt
   4496 		sym := v.Aux
   4497 		_ = v.Args[2]
   4498 		v_0 := v.Args[0]
   4499 		if v_0.Op != Op386ADDLconst {
   4500 			break
   4501 		}
   4502 		d := v_0.AuxInt
   4503 		ptr := v_0.Args[0]
   4504 		idx := v.Args[1]
   4505 		mem := v.Args[2]
   4506 		v.reset(Op386MOVLloadidx1)
   4507 		v.AuxInt = int64(int32(c + d))
   4508 		v.Aux = sym
   4509 		v.AddArg(ptr)
   4510 		v.AddArg(idx)
   4511 		v.AddArg(mem)
   4512 		return true
   4513 	}
   4514 	// match: (MOVLloadidx1 [c] {sym} idx (ADDLconst [d] ptr) mem)
   4515 	// cond:
   4516 	// result: (MOVLloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   4517 	for {
   4518 		c := v.AuxInt
   4519 		sym := v.Aux
   4520 		_ = v.Args[2]
   4521 		idx := v.Args[0]
   4522 		v_1 := v.Args[1]
   4523 		if v_1.Op != Op386ADDLconst {
   4524 			break
   4525 		}
   4526 		d := v_1.AuxInt
   4527 		ptr := v_1.Args[0]
   4528 		mem := v.Args[2]
   4529 		v.reset(Op386MOVLloadidx1)
   4530 		v.AuxInt = int64(int32(c + d))
   4531 		v.Aux = sym
   4532 		v.AddArg(ptr)
   4533 		v.AddArg(idx)
   4534 		v.AddArg(mem)
   4535 		return true
   4536 	}
   4537 	// match: (MOVLloadidx1 [c] {sym} ptr (ADDLconst [d] idx) mem)
   4538 	// cond:
   4539 	// result: (MOVLloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   4540 	for {
   4541 		c := v.AuxInt
   4542 		sym := v.Aux
   4543 		_ = v.Args[2]
   4544 		ptr := v.Args[0]
   4545 		v_1 := v.Args[1]
   4546 		if v_1.Op != Op386ADDLconst {
   4547 			break
   4548 		}
   4549 		d := v_1.AuxInt
   4550 		idx := v_1.Args[0]
   4551 		mem := v.Args[2]
   4552 		v.reset(Op386MOVLloadidx1)
   4553 		v.AuxInt = int64(int32(c + d))
   4554 		v.Aux = sym
   4555 		v.AddArg(ptr)
   4556 		v.AddArg(idx)
   4557 		v.AddArg(mem)
   4558 		return true
   4559 	}
   4560 	// match: (MOVLloadidx1 [c] {sym} (ADDLconst [d] idx) ptr mem)
   4561 	// cond:
   4562 	// result: (MOVLloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   4563 	for {
   4564 		c := v.AuxInt
   4565 		sym := v.Aux
   4566 		_ = v.Args[2]
   4567 		v_0 := v.Args[0]
   4568 		if v_0.Op != Op386ADDLconst {
   4569 			break
   4570 		}
   4571 		d := v_0.AuxInt
   4572 		idx := v_0.Args[0]
   4573 		ptr := v.Args[1]
   4574 		mem := v.Args[2]
   4575 		v.reset(Op386MOVLloadidx1)
   4576 		v.AuxInt = int64(int32(c + d))
   4577 		v.Aux = sym
   4578 		v.AddArg(ptr)
   4579 		v.AddArg(idx)
   4580 		v.AddArg(mem)
   4581 		return true
   4582 	}
   4583 	return false
   4584 }
   4585 func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool {
   4586 	// match: (MOVLloadidx4 [c] {sym} (ADDLconst [d] ptr) idx mem)
   4587 	// cond:
   4588 	// result: (MOVLloadidx4 [int64(int32(c+d))] {sym} ptr idx mem)
   4589 	for {
   4590 		c := v.AuxInt
   4591 		sym := v.Aux
   4592 		_ = v.Args[2]
   4593 		v_0 := v.Args[0]
   4594 		if v_0.Op != Op386ADDLconst {
   4595 			break
   4596 		}
   4597 		d := v_0.AuxInt
   4598 		ptr := v_0.Args[0]
   4599 		idx := v.Args[1]
   4600 		mem := v.Args[2]
   4601 		v.reset(Op386MOVLloadidx4)
   4602 		v.AuxInt = int64(int32(c + d))
   4603 		v.Aux = sym
   4604 		v.AddArg(ptr)
   4605 		v.AddArg(idx)
   4606 		v.AddArg(mem)
   4607 		return true
   4608 	}
   4609 	// match: (MOVLloadidx4 [c] {sym} ptr (ADDLconst [d] idx) mem)
   4610 	// cond:
   4611 	// result: (MOVLloadidx4  [int64(int32(c+4*d))] {sym} ptr idx mem)
   4612 	for {
   4613 		c := v.AuxInt
   4614 		sym := v.Aux
   4615 		_ = v.Args[2]
   4616 		ptr := v.Args[0]
   4617 		v_1 := v.Args[1]
   4618 		if v_1.Op != Op386ADDLconst {
   4619 			break
   4620 		}
   4621 		d := v_1.AuxInt
   4622 		idx := v_1.Args[0]
   4623 		mem := v.Args[2]
   4624 		v.reset(Op386MOVLloadidx4)
   4625 		v.AuxInt = int64(int32(c + 4*d))
   4626 		v.Aux = sym
   4627 		v.AddArg(ptr)
   4628 		v.AddArg(idx)
   4629 		v.AddArg(mem)
   4630 		return true
   4631 	}
   4632 	return false
   4633 }
   4634 func rewriteValue386_Op386MOVLstore_0(v *Value) bool {
   4635 	b := v.Block
   4636 	_ = b
   4637 	config := b.Func.Config
   4638 	_ = config
   4639 	// match: (MOVLstore [off1] {sym} (ADDLconst [off2] ptr) val mem)
   4640 	// cond: is32Bit(off1+off2)
   4641 	// result: (MOVLstore  [off1+off2] {sym} ptr val mem)
   4642 	for {
   4643 		off1 := v.AuxInt
   4644 		sym := v.Aux
   4645 		_ = v.Args[2]
   4646 		v_0 := v.Args[0]
   4647 		if v_0.Op != Op386ADDLconst {
   4648 			break
   4649 		}
   4650 		off2 := v_0.AuxInt
   4651 		ptr := v_0.Args[0]
   4652 		val := v.Args[1]
   4653 		mem := v.Args[2]
   4654 		if !(is32Bit(off1 + off2)) {
   4655 			break
   4656 		}
   4657 		v.reset(Op386MOVLstore)
   4658 		v.AuxInt = off1 + off2
   4659 		v.Aux = sym
   4660 		v.AddArg(ptr)
   4661 		v.AddArg(val)
   4662 		v.AddArg(mem)
   4663 		return true
   4664 	}
   4665 	// match: (MOVLstore [off] {sym} ptr (MOVLconst [c]) mem)
   4666 	// cond: validOff(off)
   4667 	// result: (MOVLstoreconst [makeValAndOff(int64(int32(c)),off)] {sym} ptr mem)
   4668 	for {
   4669 		off := v.AuxInt
   4670 		sym := v.Aux
   4671 		_ = v.Args[2]
   4672 		ptr := v.Args[0]
   4673 		v_1 := v.Args[1]
   4674 		if v_1.Op != Op386MOVLconst {
   4675 			break
   4676 		}
   4677 		c := v_1.AuxInt
   4678 		mem := v.Args[2]
   4679 		if !(validOff(off)) {
   4680 			break
   4681 		}
   4682 		v.reset(Op386MOVLstoreconst)
   4683 		v.AuxInt = makeValAndOff(int64(int32(c)), off)
   4684 		v.Aux = sym
   4685 		v.AddArg(ptr)
   4686 		v.AddArg(mem)
   4687 		return true
   4688 	}
   4689 	// match: (MOVLstore [off1] {sym1} (LEAL [off2] {sym2} base) val mem)
   4690 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   4691 	// result: (MOVLstore  [off1+off2] {mergeSym(sym1,sym2)} base val mem)
   4692 	for {
   4693 		off1 := v.AuxInt
   4694 		sym1 := v.Aux
   4695 		_ = v.Args[2]
   4696 		v_0 := v.Args[0]
   4697 		if v_0.Op != Op386LEAL {
   4698 			break
   4699 		}
   4700 		off2 := v_0.AuxInt
   4701 		sym2 := v_0.Aux
   4702 		base := v_0.Args[0]
   4703 		val := v.Args[1]
   4704 		mem := v.Args[2]
   4705 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   4706 			break
   4707 		}
   4708 		v.reset(Op386MOVLstore)
   4709 		v.AuxInt = off1 + off2
   4710 		v.Aux = mergeSym(sym1, sym2)
   4711 		v.AddArg(base)
   4712 		v.AddArg(val)
   4713 		v.AddArg(mem)
   4714 		return true
   4715 	}
   4716 	// match: (MOVLstore [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) val mem)
   4717 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   4718 	// result: (MOVLstoreidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   4719 	for {
   4720 		off1 := v.AuxInt
   4721 		sym1 := v.Aux
   4722 		_ = v.Args[2]
   4723 		v_0 := v.Args[0]
   4724 		if v_0.Op != Op386LEAL1 {
   4725 			break
   4726 		}
   4727 		off2 := v_0.AuxInt
   4728 		sym2 := v_0.Aux
   4729 		_ = v_0.Args[1]
   4730 		ptr := v_0.Args[0]
   4731 		idx := v_0.Args[1]
   4732 		val := v.Args[1]
   4733 		mem := v.Args[2]
   4734 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   4735 			break
   4736 		}
   4737 		v.reset(Op386MOVLstoreidx1)
   4738 		v.AuxInt = off1 + off2
   4739 		v.Aux = mergeSym(sym1, sym2)
   4740 		v.AddArg(ptr)
   4741 		v.AddArg(idx)
   4742 		v.AddArg(val)
   4743 		v.AddArg(mem)
   4744 		return true
   4745 	}
   4746 	// match: (MOVLstore [off1] {sym1} (LEAL4 [off2] {sym2} ptr idx) val mem)
   4747 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   4748 	// result: (MOVLstoreidx4 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   4749 	for {
   4750 		off1 := v.AuxInt
   4751 		sym1 := v.Aux
   4752 		_ = v.Args[2]
   4753 		v_0 := v.Args[0]
   4754 		if v_0.Op != Op386LEAL4 {
   4755 			break
   4756 		}
   4757 		off2 := v_0.AuxInt
   4758 		sym2 := v_0.Aux
   4759 		_ = v_0.Args[1]
   4760 		ptr := v_0.Args[0]
   4761 		idx := v_0.Args[1]
   4762 		val := v.Args[1]
   4763 		mem := v.Args[2]
   4764 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   4765 			break
   4766 		}
   4767 		v.reset(Op386MOVLstoreidx4)
   4768 		v.AuxInt = off1 + off2
   4769 		v.Aux = mergeSym(sym1, sym2)
   4770 		v.AddArg(ptr)
   4771 		v.AddArg(idx)
   4772 		v.AddArg(val)
   4773 		v.AddArg(mem)
   4774 		return true
   4775 	}
   4776 	// match: (MOVLstore [off] {sym} (ADDL ptr idx) val mem)
   4777 	// cond: ptr.Op != OpSB
   4778 	// result: (MOVLstoreidx1 [off] {sym} ptr idx val mem)
   4779 	for {
   4780 		off := v.AuxInt
   4781 		sym := v.Aux
   4782 		_ = v.Args[2]
   4783 		v_0 := v.Args[0]
   4784 		if v_0.Op != Op386ADDL {
   4785 			break
   4786 		}
   4787 		_ = v_0.Args[1]
   4788 		ptr := v_0.Args[0]
   4789 		idx := v_0.Args[1]
   4790 		val := v.Args[1]
   4791 		mem := v.Args[2]
   4792 		if !(ptr.Op != OpSB) {
   4793 			break
   4794 		}
   4795 		v.reset(Op386MOVLstoreidx1)
   4796 		v.AuxInt = off
   4797 		v.Aux = sym
   4798 		v.AddArg(ptr)
   4799 		v.AddArg(idx)
   4800 		v.AddArg(val)
   4801 		v.AddArg(mem)
   4802 		return true
   4803 	}
   4804 	return false
   4805 }
   4806 func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool {
   4807 	b := v.Block
   4808 	_ = b
   4809 	config := b.Func.Config
   4810 	_ = config
   4811 	// match: (MOVLstoreconst [sc] {s} (ADDLconst [off] ptr) mem)
   4812 	// cond: ValAndOff(sc).canAdd(off)
   4813 	// result: (MOVLstoreconst [ValAndOff(sc).add(off)] {s} ptr mem)
   4814 	for {
   4815 		sc := v.AuxInt
   4816 		s := v.Aux
   4817 		_ = v.Args[1]
   4818 		v_0 := v.Args[0]
   4819 		if v_0.Op != Op386ADDLconst {
   4820 			break
   4821 		}
   4822 		off := v_0.AuxInt
   4823 		ptr := v_0.Args[0]
   4824 		mem := v.Args[1]
   4825 		if !(ValAndOff(sc).canAdd(off)) {
   4826 			break
   4827 		}
   4828 		v.reset(Op386MOVLstoreconst)
   4829 		v.AuxInt = ValAndOff(sc).add(off)
   4830 		v.Aux = s
   4831 		v.AddArg(ptr)
   4832 		v.AddArg(mem)
   4833 		return true
   4834 	}
   4835 	// match: (MOVLstoreconst [sc] {sym1} (LEAL [off] {sym2} ptr) mem)
   4836 	// cond: canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)   && (ptr.Op != OpSB || !config.ctxt.Flag_shared)
   4837 	// result: (MOVLstoreconst [ValAndOff(sc).add(off)] {mergeSym(sym1, sym2)} ptr mem)
   4838 	for {
   4839 		sc := v.AuxInt
   4840 		sym1 := v.Aux
   4841 		_ = v.Args[1]
   4842 		v_0 := v.Args[0]
   4843 		if v_0.Op != Op386LEAL {
   4844 			break
   4845 		}
   4846 		off := v_0.AuxInt
   4847 		sym2 := v_0.Aux
   4848 		ptr := v_0.Args[0]
   4849 		mem := v.Args[1]
   4850 		if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) {
   4851 			break
   4852 		}
   4853 		v.reset(Op386MOVLstoreconst)
   4854 		v.AuxInt = ValAndOff(sc).add(off)
   4855 		v.Aux = mergeSym(sym1, sym2)
   4856 		v.AddArg(ptr)
   4857 		v.AddArg(mem)
   4858 		return true
   4859 	}
   4860 	// match: (MOVLstoreconst [x] {sym1} (LEAL1 [off] {sym2} ptr idx) mem)
   4861 	// cond: canMergeSym(sym1, sym2)
   4862 	// result: (MOVLstoreconstidx1 [ValAndOff(x).add(off)] {mergeSym(sym1,sym2)} ptr idx mem)
   4863 	for {
   4864 		x := v.AuxInt
   4865 		sym1 := v.Aux
   4866 		_ = v.Args[1]
   4867 		v_0 := v.Args[0]
   4868 		if v_0.Op != Op386LEAL1 {
   4869 			break
   4870 		}
   4871 		off := v_0.AuxInt
   4872 		sym2 := v_0.Aux
   4873 		_ = v_0.Args[1]
   4874 		ptr := v_0.Args[0]
   4875 		idx := v_0.Args[1]
   4876 		mem := v.Args[1]
   4877 		if !(canMergeSym(sym1, sym2)) {
   4878 			break
   4879 		}
   4880 		v.reset(Op386MOVLstoreconstidx1)
   4881 		v.AuxInt = ValAndOff(x).add(off)
   4882 		v.Aux = mergeSym(sym1, sym2)
   4883 		v.AddArg(ptr)
   4884 		v.AddArg(idx)
   4885 		v.AddArg(mem)
   4886 		return true
   4887 	}
   4888 	// match: (MOVLstoreconst [x] {sym1} (LEAL4 [off] {sym2} ptr idx) mem)
   4889 	// cond: canMergeSym(sym1, sym2)
   4890 	// result: (MOVLstoreconstidx4 [ValAndOff(x).add(off)] {mergeSym(sym1,sym2)} ptr idx mem)
   4891 	for {
   4892 		x := v.AuxInt
   4893 		sym1 := v.Aux
   4894 		_ = v.Args[1]
   4895 		v_0 := v.Args[0]
   4896 		if v_0.Op != Op386LEAL4 {
   4897 			break
   4898 		}
   4899 		off := v_0.AuxInt
   4900 		sym2 := v_0.Aux
   4901 		_ = v_0.Args[1]
   4902 		ptr := v_0.Args[0]
   4903 		idx := v_0.Args[1]
   4904 		mem := v.Args[1]
   4905 		if !(canMergeSym(sym1, sym2)) {
   4906 			break
   4907 		}
   4908 		v.reset(Op386MOVLstoreconstidx4)
   4909 		v.AuxInt = ValAndOff(x).add(off)
   4910 		v.Aux = mergeSym(sym1, sym2)
   4911 		v.AddArg(ptr)
   4912 		v.AddArg(idx)
   4913 		v.AddArg(mem)
   4914 		return true
   4915 	}
   4916 	// match: (MOVLstoreconst [x] {sym} (ADDL ptr idx) mem)
   4917 	// cond:
   4918 	// result: (MOVLstoreconstidx1 [x] {sym} ptr idx mem)
   4919 	for {
   4920 		x := v.AuxInt
   4921 		sym := v.Aux
   4922 		_ = v.Args[1]
   4923 		v_0 := v.Args[0]
   4924 		if v_0.Op != Op386ADDL {
   4925 			break
   4926 		}
   4927 		_ = v_0.Args[1]
   4928 		ptr := v_0.Args[0]
   4929 		idx := v_0.Args[1]
   4930 		mem := v.Args[1]
   4931 		v.reset(Op386MOVLstoreconstidx1)
   4932 		v.AuxInt = x
   4933 		v.Aux = sym
   4934 		v.AddArg(ptr)
   4935 		v.AddArg(idx)
   4936 		v.AddArg(mem)
   4937 		return true
   4938 	}
   4939 	return false
   4940 }
   4941 func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool {
   4942 	// match: (MOVLstoreconstidx1 [c] {sym} ptr (SHLLconst [2] idx) mem)
   4943 	// cond:
   4944 	// result: (MOVLstoreconstidx4 [c] {sym} ptr idx mem)
   4945 	for {
   4946 		c := v.AuxInt
   4947 		sym := v.Aux
   4948 		_ = v.Args[2]
   4949 		ptr := v.Args[0]
   4950 		v_1 := v.Args[1]
   4951 		if v_1.Op != Op386SHLLconst {
   4952 			break
   4953 		}
   4954 		if v_1.AuxInt != 2 {
   4955 			break
   4956 		}
   4957 		idx := v_1.Args[0]
   4958 		mem := v.Args[2]
   4959 		v.reset(Op386MOVLstoreconstidx4)
   4960 		v.AuxInt = c
   4961 		v.Aux = sym
   4962 		v.AddArg(ptr)
   4963 		v.AddArg(idx)
   4964 		v.AddArg(mem)
   4965 		return true
   4966 	}
   4967 	// match: (MOVLstoreconstidx1 [x] {sym} (ADDLconst [c] ptr) idx mem)
   4968 	// cond:
   4969 	// result: (MOVLstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   4970 	for {
   4971 		x := v.AuxInt
   4972 		sym := v.Aux
   4973 		_ = v.Args[2]
   4974 		v_0 := v.Args[0]
   4975 		if v_0.Op != Op386ADDLconst {
   4976 			break
   4977 		}
   4978 		c := v_0.AuxInt
   4979 		ptr := v_0.Args[0]
   4980 		idx := v.Args[1]
   4981 		mem := v.Args[2]
   4982 		v.reset(Op386MOVLstoreconstidx1)
   4983 		v.AuxInt = ValAndOff(x).add(c)
   4984 		v.Aux = sym
   4985 		v.AddArg(ptr)
   4986 		v.AddArg(idx)
   4987 		v.AddArg(mem)
   4988 		return true
   4989 	}
   4990 	// match: (MOVLstoreconstidx1 [x] {sym} ptr (ADDLconst [c] idx) mem)
   4991 	// cond:
   4992 	// result: (MOVLstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   4993 	for {
   4994 		x := v.AuxInt
   4995 		sym := v.Aux
   4996 		_ = v.Args[2]
   4997 		ptr := v.Args[0]
   4998 		v_1 := v.Args[1]
   4999 		if v_1.Op != Op386ADDLconst {
   5000 			break
   5001 		}
   5002 		c := v_1.AuxInt
   5003 		idx := v_1.Args[0]
   5004 		mem := v.Args[2]
   5005 		v.reset(Op386MOVLstoreconstidx1)
   5006 		v.AuxInt = ValAndOff(x).add(c)
   5007 		v.Aux = sym
   5008 		v.AddArg(ptr)
   5009 		v.AddArg(idx)
   5010 		v.AddArg(mem)
   5011 		return true
   5012 	}
   5013 	return false
   5014 }
   5015 func rewriteValue386_Op386MOVLstoreconstidx4_0(v *Value) bool {
   5016 	// match: (MOVLstoreconstidx4 [x] {sym} (ADDLconst [c] ptr) idx mem)
   5017 	// cond:
   5018 	// result: (MOVLstoreconstidx4 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   5019 	for {
   5020 		x := v.AuxInt
   5021 		sym := v.Aux
   5022 		_ = v.Args[2]
   5023 		v_0 := v.Args[0]
   5024 		if v_0.Op != Op386ADDLconst {
   5025 			break
   5026 		}
   5027 		c := v_0.AuxInt
   5028 		ptr := v_0.Args[0]
   5029 		idx := v.Args[1]
   5030 		mem := v.Args[2]
   5031 		v.reset(Op386MOVLstoreconstidx4)
   5032 		v.AuxInt = ValAndOff(x).add(c)
   5033 		v.Aux = sym
   5034 		v.AddArg(ptr)
   5035 		v.AddArg(idx)
   5036 		v.AddArg(mem)
   5037 		return true
   5038 	}
   5039 	// match: (MOVLstoreconstidx4 [x] {sym} ptr (ADDLconst [c] idx) mem)
   5040 	// cond:
   5041 	// result: (MOVLstoreconstidx4 [ValAndOff(x).add(4*c)] {sym} ptr idx mem)
   5042 	for {
   5043 		x := v.AuxInt
   5044 		sym := v.Aux
   5045 		_ = v.Args[2]
   5046 		ptr := v.Args[0]
   5047 		v_1 := v.Args[1]
   5048 		if v_1.Op != Op386ADDLconst {
   5049 			break
   5050 		}
   5051 		c := v_1.AuxInt
   5052 		idx := v_1.Args[0]
   5053 		mem := v.Args[2]
   5054 		v.reset(Op386MOVLstoreconstidx4)
   5055 		v.AuxInt = ValAndOff(x).add(4 * c)
   5056 		v.Aux = sym
   5057 		v.AddArg(ptr)
   5058 		v.AddArg(idx)
   5059 		v.AddArg(mem)
   5060 		return true
   5061 	}
   5062 	return false
   5063 }
   5064 func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool {
   5065 	// match: (MOVLstoreidx1 [c] {sym} ptr (SHLLconst [2] idx) val mem)
   5066 	// cond:
   5067 	// result: (MOVLstoreidx4 [c] {sym} ptr idx val mem)
   5068 	for {
   5069 		c := v.AuxInt
   5070 		sym := v.Aux
   5071 		_ = v.Args[3]
   5072 		ptr := v.Args[0]
   5073 		v_1 := v.Args[1]
   5074 		if v_1.Op != Op386SHLLconst {
   5075 			break
   5076 		}
   5077 		if v_1.AuxInt != 2 {
   5078 			break
   5079 		}
   5080 		idx := v_1.Args[0]
   5081 		val := v.Args[2]
   5082 		mem := v.Args[3]
   5083 		v.reset(Op386MOVLstoreidx4)
   5084 		v.AuxInt = c
   5085 		v.Aux = sym
   5086 		v.AddArg(ptr)
   5087 		v.AddArg(idx)
   5088 		v.AddArg(val)
   5089 		v.AddArg(mem)
   5090 		return true
   5091 	}
   5092 	// match: (MOVLstoreidx1 [c] {sym} (SHLLconst [2] idx) ptr val mem)
   5093 	// cond:
   5094 	// result: (MOVLstoreidx4 [c] {sym} ptr idx val mem)
   5095 	for {
   5096 		c := v.AuxInt
   5097 		sym := v.Aux
   5098 		_ = v.Args[3]
   5099 		v_0 := v.Args[0]
   5100 		if v_0.Op != Op386SHLLconst {
   5101 			break
   5102 		}
   5103 		if v_0.AuxInt != 2 {
   5104 			break
   5105 		}
   5106 		idx := v_0.Args[0]
   5107 		ptr := v.Args[1]
   5108 		val := v.Args[2]
   5109 		mem := v.Args[3]
   5110 		v.reset(Op386MOVLstoreidx4)
   5111 		v.AuxInt = c
   5112 		v.Aux = sym
   5113 		v.AddArg(ptr)
   5114 		v.AddArg(idx)
   5115 		v.AddArg(val)
   5116 		v.AddArg(mem)
   5117 		return true
   5118 	}
   5119 	// match: (MOVLstoreidx1 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   5120 	// cond:
   5121 	// result: (MOVLstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   5122 	for {
   5123 		c := v.AuxInt
   5124 		sym := v.Aux
   5125 		_ = v.Args[3]
   5126 		v_0 := v.Args[0]
   5127 		if v_0.Op != Op386ADDLconst {
   5128 			break
   5129 		}
   5130 		d := v_0.AuxInt
   5131 		ptr := v_0.Args[0]
   5132 		idx := v.Args[1]
   5133 		val := v.Args[2]
   5134 		mem := v.Args[3]
   5135 		v.reset(Op386MOVLstoreidx1)
   5136 		v.AuxInt = int64(int32(c + d))
   5137 		v.Aux = sym
   5138 		v.AddArg(ptr)
   5139 		v.AddArg(idx)
   5140 		v.AddArg(val)
   5141 		v.AddArg(mem)
   5142 		return true
   5143 	}
   5144 	// match: (MOVLstoreidx1 [c] {sym} idx (ADDLconst [d] ptr) val mem)
   5145 	// cond:
   5146 	// result: (MOVLstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   5147 	for {
   5148 		c := v.AuxInt
   5149 		sym := v.Aux
   5150 		_ = v.Args[3]
   5151 		idx := v.Args[0]
   5152 		v_1 := v.Args[1]
   5153 		if v_1.Op != Op386ADDLconst {
   5154 			break
   5155 		}
   5156 		d := v_1.AuxInt
   5157 		ptr := v_1.Args[0]
   5158 		val := v.Args[2]
   5159 		mem := v.Args[3]
   5160 		v.reset(Op386MOVLstoreidx1)
   5161 		v.AuxInt = int64(int32(c + d))
   5162 		v.Aux = sym
   5163 		v.AddArg(ptr)
   5164 		v.AddArg(idx)
   5165 		v.AddArg(val)
   5166 		v.AddArg(mem)
   5167 		return true
   5168 	}
   5169 	// match: (MOVLstoreidx1 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   5170 	// cond:
   5171 	// result: (MOVLstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   5172 	for {
   5173 		c := v.AuxInt
   5174 		sym := v.Aux
   5175 		_ = v.Args[3]
   5176 		ptr := v.Args[0]
   5177 		v_1 := v.Args[1]
   5178 		if v_1.Op != Op386ADDLconst {
   5179 			break
   5180 		}
   5181 		d := v_1.AuxInt
   5182 		idx := v_1.Args[0]
   5183 		val := v.Args[2]
   5184 		mem := v.Args[3]
   5185 		v.reset(Op386MOVLstoreidx1)
   5186 		v.AuxInt = int64(int32(c + d))
   5187 		v.Aux = sym
   5188 		v.AddArg(ptr)
   5189 		v.AddArg(idx)
   5190 		v.AddArg(val)
   5191 		v.AddArg(mem)
   5192 		return true
   5193 	}
   5194 	// match: (MOVLstoreidx1 [c] {sym} (ADDLconst [d] idx) ptr val mem)
   5195 	// cond:
   5196 	// result: (MOVLstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   5197 	for {
   5198 		c := v.AuxInt
   5199 		sym := v.Aux
   5200 		_ = v.Args[3]
   5201 		v_0 := v.Args[0]
   5202 		if v_0.Op != Op386ADDLconst {
   5203 			break
   5204 		}
   5205 		d := v_0.AuxInt
   5206 		idx := v_0.Args[0]
   5207 		ptr := v.Args[1]
   5208 		val := v.Args[2]
   5209 		mem := v.Args[3]
   5210 		v.reset(Op386MOVLstoreidx1)
   5211 		v.AuxInt = int64(int32(c + d))
   5212 		v.Aux = sym
   5213 		v.AddArg(ptr)
   5214 		v.AddArg(idx)
   5215 		v.AddArg(val)
   5216 		v.AddArg(mem)
   5217 		return true
   5218 	}
   5219 	return false
   5220 }
   5221 func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool {
   5222 	// match: (MOVLstoreidx4 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   5223 	// cond:
   5224 	// result: (MOVLstoreidx4 [int64(int32(c+d))] {sym} ptr idx val mem)
   5225 	for {
   5226 		c := v.AuxInt
   5227 		sym := v.Aux
   5228 		_ = v.Args[3]
   5229 		v_0 := v.Args[0]
   5230 		if v_0.Op != Op386ADDLconst {
   5231 			break
   5232 		}
   5233 		d := v_0.AuxInt
   5234 		ptr := v_0.Args[0]
   5235 		idx := v.Args[1]
   5236 		val := v.Args[2]
   5237 		mem := v.Args[3]
   5238 		v.reset(Op386MOVLstoreidx4)
   5239 		v.AuxInt = int64(int32(c + d))
   5240 		v.Aux = sym
   5241 		v.AddArg(ptr)
   5242 		v.AddArg(idx)
   5243 		v.AddArg(val)
   5244 		v.AddArg(mem)
   5245 		return true
   5246 	}
   5247 	// match: (MOVLstoreidx4 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   5248 	// cond:
   5249 	// result: (MOVLstoreidx4  [int64(int32(c+4*d))] {sym} ptr idx val mem)
   5250 	for {
   5251 		c := v.AuxInt
   5252 		sym := v.Aux
   5253 		_ = v.Args[3]
   5254 		ptr := v.Args[0]
   5255 		v_1 := v.Args[1]
   5256 		if v_1.Op != Op386ADDLconst {
   5257 			break
   5258 		}
   5259 		d := v_1.AuxInt
   5260 		idx := v_1.Args[0]
   5261 		val := v.Args[2]
   5262 		mem := v.Args[3]
   5263 		v.reset(Op386MOVLstoreidx4)
   5264 		v.AuxInt = int64(int32(c + 4*d))
   5265 		v.Aux = sym
   5266 		v.AddArg(ptr)
   5267 		v.AddArg(idx)
   5268 		v.AddArg(val)
   5269 		v.AddArg(mem)
   5270 		return true
   5271 	}
   5272 	return false
   5273 }
   5274 func rewriteValue386_Op386MOVSDconst_0(v *Value) bool {
   5275 	b := v.Block
   5276 	_ = b
   5277 	config := b.Func.Config
   5278 	_ = config
   5279 	typ := &b.Func.Config.Types
   5280 	_ = typ
   5281 	// match: (MOVSDconst [c])
   5282 	// cond: config.ctxt.Flag_shared
   5283 	// result: (MOVSDconst2 (MOVSDconst1 [c]))
   5284 	for {
   5285 		c := v.AuxInt
   5286 		if !(config.ctxt.Flag_shared) {
   5287 			break
   5288 		}
   5289 		v.reset(Op386MOVSDconst2)
   5290 		v0 := b.NewValue0(v.Pos, Op386MOVSDconst1, typ.UInt32)
   5291 		v0.AuxInt = c
   5292 		v.AddArg(v0)
   5293 		return true
   5294 	}
   5295 	return false
   5296 }
   5297 func rewriteValue386_Op386MOVSDload_0(v *Value) bool {
   5298 	b := v.Block
   5299 	_ = b
   5300 	config := b.Func.Config
   5301 	_ = config
   5302 	// match: (MOVSDload [off1] {sym} (ADDLconst [off2] ptr) mem)
   5303 	// cond: is32Bit(off1+off2)
   5304 	// result: (MOVSDload [off1+off2] {sym} ptr mem)
   5305 	for {
   5306 		off1 := v.AuxInt
   5307 		sym := v.Aux
   5308 		_ = v.Args[1]
   5309 		v_0 := v.Args[0]
   5310 		if v_0.Op != Op386ADDLconst {
   5311 			break
   5312 		}
   5313 		off2 := v_0.AuxInt
   5314 		ptr := v_0.Args[0]
   5315 		mem := v.Args[1]
   5316 		if !(is32Bit(off1 + off2)) {
   5317 			break
   5318 		}
   5319 		v.reset(Op386MOVSDload)
   5320 		v.AuxInt = off1 + off2
   5321 		v.Aux = sym
   5322 		v.AddArg(ptr)
   5323 		v.AddArg(mem)
   5324 		return true
   5325 	}
   5326 	// match: (MOVSDload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   5327 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   5328 	// result: (MOVSDload [off1+off2] {mergeSym(sym1,sym2)} base mem)
   5329 	for {
   5330 		off1 := v.AuxInt
   5331 		sym1 := v.Aux
   5332 		_ = v.Args[1]
   5333 		v_0 := v.Args[0]
   5334 		if v_0.Op != Op386LEAL {
   5335 			break
   5336 		}
   5337 		off2 := v_0.AuxInt
   5338 		sym2 := v_0.Aux
   5339 		base := v_0.Args[0]
   5340 		mem := v.Args[1]
   5341 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   5342 			break
   5343 		}
   5344 		v.reset(Op386MOVSDload)
   5345 		v.AuxInt = off1 + off2
   5346 		v.Aux = mergeSym(sym1, sym2)
   5347 		v.AddArg(base)
   5348 		v.AddArg(mem)
   5349 		return true
   5350 	}
   5351 	// match: (MOVSDload [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) mem)
   5352 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5353 	// result: (MOVSDloadidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   5354 	for {
   5355 		off1 := v.AuxInt
   5356 		sym1 := v.Aux
   5357 		_ = v.Args[1]
   5358 		v_0 := v.Args[0]
   5359 		if v_0.Op != Op386LEAL1 {
   5360 			break
   5361 		}
   5362 		off2 := v_0.AuxInt
   5363 		sym2 := v_0.Aux
   5364 		_ = v_0.Args[1]
   5365 		ptr := v_0.Args[0]
   5366 		idx := v_0.Args[1]
   5367 		mem := v.Args[1]
   5368 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5369 			break
   5370 		}
   5371 		v.reset(Op386MOVSDloadidx1)
   5372 		v.AuxInt = off1 + off2
   5373 		v.Aux = mergeSym(sym1, sym2)
   5374 		v.AddArg(ptr)
   5375 		v.AddArg(idx)
   5376 		v.AddArg(mem)
   5377 		return true
   5378 	}
   5379 	// match: (MOVSDload [off1] {sym1} (LEAL8 [off2] {sym2} ptr idx) mem)
   5380 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5381 	// result: (MOVSDloadidx8 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   5382 	for {
   5383 		off1 := v.AuxInt
   5384 		sym1 := v.Aux
   5385 		_ = v.Args[1]
   5386 		v_0 := v.Args[0]
   5387 		if v_0.Op != Op386LEAL8 {
   5388 			break
   5389 		}
   5390 		off2 := v_0.AuxInt
   5391 		sym2 := v_0.Aux
   5392 		_ = v_0.Args[1]
   5393 		ptr := v_0.Args[0]
   5394 		idx := v_0.Args[1]
   5395 		mem := v.Args[1]
   5396 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5397 			break
   5398 		}
   5399 		v.reset(Op386MOVSDloadidx8)
   5400 		v.AuxInt = off1 + off2
   5401 		v.Aux = mergeSym(sym1, sym2)
   5402 		v.AddArg(ptr)
   5403 		v.AddArg(idx)
   5404 		v.AddArg(mem)
   5405 		return true
   5406 	}
   5407 	// match: (MOVSDload [off] {sym} (ADDL ptr idx) mem)
   5408 	// cond: ptr.Op != OpSB
   5409 	// result: (MOVSDloadidx1 [off] {sym} ptr idx mem)
   5410 	for {
   5411 		off := v.AuxInt
   5412 		sym := v.Aux
   5413 		_ = v.Args[1]
   5414 		v_0 := v.Args[0]
   5415 		if v_0.Op != Op386ADDL {
   5416 			break
   5417 		}
   5418 		_ = v_0.Args[1]
   5419 		ptr := v_0.Args[0]
   5420 		idx := v_0.Args[1]
   5421 		mem := v.Args[1]
   5422 		if !(ptr.Op != OpSB) {
   5423 			break
   5424 		}
   5425 		v.reset(Op386MOVSDloadidx1)
   5426 		v.AuxInt = off
   5427 		v.Aux = sym
   5428 		v.AddArg(ptr)
   5429 		v.AddArg(idx)
   5430 		v.AddArg(mem)
   5431 		return true
   5432 	}
   5433 	return false
   5434 }
   5435 func rewriteValue386_Op386MOVSDloadidx1_0(v *Value) bool {
   5436 	// match: (MOVSDloadidx1 [c] {sym} (ADDLconst [d] ptr) idx mem)
   5437 	// cond:
   5438 	// result: (MOVSDloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   5439 	for {
   5440 		c := v.AuxInt
   5441 		sym := v.Aux
   5442 		_ = v.Args[2]
   5443 		v_0 := v.Args[0]
   5444 		if v_0.Op != Op386ADDLconst {
   5445 			break
   5446 		}
   5447 		d := v_0.AuxInt
   5448 		ptr := v_0.Args[0]
   5449 		idx := v.Args[1]
   5450 		mem := v.Args[2]
   5451 		v.reset(Op386MOVSDloadidx1)
   5452 		v.AuxInt = int64(int32(c + d))
   5453 		v.Aux = sym
   5454 		v.AddArg(ptr)
   5455 		v.AddArg(idx)
   5456 		v.AddArg(mem)
   5457 		return true
   5458 	}
   5459 	// match: (MOVSDloadidx1 [c] {sym} ptr (ADDLconst [d] idx) mem)
   5460 	// cond:
   5461 	// result: (MOVSDloadidx1 [int64(int32(c+d))]   {sym} ptr idx mem)
   5462 	for {
   5463 		c := v.AuxInt
   5464 		sym := v.Aux
   5465 		_ = v.Args[2]
   5466 		ptr := v.Args[0]
   5467 		v_1 := v.Args[1]
   5468 		if v_1.Op != Op386ADDLconst {
   5469 			break
   5470 		}
   5471 		d := v_1.AuxInt
   5472 		idx := v_1.Args[0]
   5473 		mem := v.Args[2]
   5474 		v.reset(Op386MOVSDloadidx1)
   5475 		v.AuxInt = int64(int32(c + d))
   5476 		v.Aux = sym
   5477 		v.AddArg(ptr)
   5478 		v.AddArg(idx)
   5479 		v.AddArg(mem)
   5480 		return true
   5481 	}
   5482 	return false
   5483 }
   5484 func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool {
   5485 	// match: (MOVSDloadidx8 [c] {sym} (ADDLconst [d] ptr) idx mem)
   5486 	// cond:
   5487 	// result: (MOVSDloadidx8 [int64(int32(c+d))] {sym} ptr idx mem)
   5488 	for {
   5489 		c := v.AuxInt
   5490 		sym := v.Aux
   5491 		_ = v.Args[2]
   5492 		v_0 := v.Args[0]
   5493 		if v_0.Op != Op386ADDLconst {
   5494 			break
   5495 		}
   5496 		d := v_0.AuxInt
   5497 		ptr := v_0.Args[0]
   5498 		idx := v.Args[1]
   5499 		mem := v.Args[2]
   5500 		v.reset(Op386MOVSDloadidx8)
   5501 		v.AuxInt = int64(int32(c + d))
   5502 		v.Aux = sym
   5503 		v.AddArg(ptr)
   5504 		v.AddArg(idx)
   5505 		v.AddArg(mem)
   5506 		return true
   5507 	}
   5508 	// match: (MOVSDloadidx8 [c] {sym} ptr (ADDLconst [d] idx) mem)
   5509 	// cond:
   5510 	// result: (MOVSDloadidx8 [int64(int32(c+8*d))] {sym} ptr idx mem)
   5511 	for {
   5512 		c := v.AuxInt
   5513 		sym := v.Aux
   5514 		_ = v.Args[2]
   5515 		ptr := v.Args[0]
   5516 		v_1 := v.Args[1]
   5517 		if v_1.Op != Op386ADDLconst {
   5518 			break
   5519 		}
   5520 		d := v_1.AuxInt
   5521 		idx := v_1.Args[0]
   5522 		mem := v.Args[2]
   5523 		v.reset(Op386MOVSDloadidx8)
   5524 		v.AuxInt = int64(int32(c + 8*d))
   5525 		v.Aux = sym
   5526 		v.AddArg(ptr)
   5527 		v.AddArg(idx)
   5528 		v.AddArg(mem)
   5529 		return true
   5530 	}
   5531 	return false
   5532 }
   5533 func rewriteValue386_Op386MOVSDstore_0(v *Value) bool {
   5534 	b := v.Block
   5535 	_ = b
   5536 	config := b.Func.Config
   5537 	_ = config
   5538 	// match: (MOVSDstore [off1] {sym} (ADDLconst [off2] ptr) val mem)
   5539 	// cond: is32Bit(off1+off2)
   5540 	// result: (MOVSDstore [off1+off2] {sym} ptr val mem)
   5541 	for {
   5542 		off1 := v.AuxInt
   5543 		sym := v.Aux
   5544 		_ = v.Args[2]
   5545 		v_0 := v.Args[0]
   5546 		if v_0.Op != Op386ADDLconst {
   5547 			break
   5548 		}
   5549 		off2 := v_0.AuxInt
   5550 		ptr := v_0.Args[0]
   5551 		val := v.Args[1]
   5552 		mem := v.Args[2]
   5553 		if !(is32Bit(off1 + off2)) {
   5554 			break
   5555 		}
   5556 		v.reset(Op386MOVSDstore)
   5557 		v.AuxInt = off1 + off2
   5558 		v.Aux = sym
   5559 		v.AddArg(ptr)
   5560 		v.AddArg(val)
   5561 		v.AddArg(mem)
   5562 		return true
   5563 	}
   5564 	// match: (MOVSDstore [off1] {sym1} (LEAL [off2] {sym2} base) val mem)
   5565 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   5566 	// result: (MOVSDstore [off1+off2] {mergeSym(sym1,sym2)} base val mem)
   5567 	for {
   5568 		off1 := v.AuxInt
   5569 		sym1 := v.Aux
   5570 		_ = v.Args[2]
   5571 		v_0 := v.Args[0]
   5572 		if v_0.Op != Op386LEAL {
   5573 			break
   5574 		}
   5575 		off2 := v_0.AuxInt
   5576 		sym2 := v_0.Aux
   5577 		base := v_0.Args[0]
   5578 		val := v.Args[1]
   5579 		mem := v.Args[2]
   5580 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   5581 			break
   5582 		}
   5583 		v.reset(Op386MOVSDstore)
   5584 		v.AuxInt = off1 + off2
   5585 		v.Aux = mergeSym(sym1, sym2)
   5586 		v.AddArg(base)
   5587 		v.AddArg(val)
   5588 		v.AddArg(mem)
   5589 		return true
   5590 	}
   5591 	// match: (MOVSDstore [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) val mem)
   5592 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5593 	// result: (MOVSDstoreidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   5594 	for {
   5595 		off1 := v.AuxInt
   5596 		sym1 := v.Aux
   5597 		_ = v.Args[2]
   5598 		v_0 := v.Args[0]
   5599 		if v_0.Op != Op386LEAL1 {
   5600 			break
   5601 		}
   5602 		off2 := v_0.AuxInt
   5603 		sym2 := v_0.Aux
   5604 		_ = v_0.Args[1]
   5605 		ptr := v_0.Args[0]
   5606 		idx := v_0.Args[1]
   5607 		val := v.Args[1]
   5608 		mem := v.Args[2]
   5609 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5610 			break
   5611 		}
   5612 		v.reset(Op386MOVSDstoreidx1)
   5613 		v.AuxInt = off1 + off2
   5614 		v.Aux = mergeSym(sym1, sym2)
   5615 		v.AddArg(ptr)
   5616 		v.AddArg(idx)
   5617 		v.AddArg(val)
   5618 		v.AddArg(mem)
   5619 		return true
   5620 	}
   5621 	// match: (MOVSDstore [off1] {sym1} (LEAL8 [off2] {sym2} ptr idx) val mem)
   5622 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5623 	// result: (MOVSDstoreidx8 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   5624 	for {
   5625 		off1 := v.AuxInt
   5626 		sym1 := v.Aux
   5627 		_ = v.Args[2]
   5628 		v_0 := v.Args[0]
   5629 		if v_0.Op != Op386LEAL8 {
   5630 			break
   5631 		}
   5632 		off2 := v_0.AuxInt
   5633 		sym2 := v_0.Aux
   5634 		_ = v_0.Args[1]
   5635 		ptr := v_0.Args[0]
   5636 		idx := v_0.Args[1]
   5637 		val := v.Args[1]
   5638 		mem := v.Args[2]
   5639 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5640 			break
   5641 		}
   5642 		v.reset(Op386MOVSDstoreidx8)
   5643 		v.AuxInt = off1 + off2
   5644 		v.Aux = mergeSym(sym1, sym2)
   5645 		v.AddArg(ptr)
   5646 		v.AddArg(idx)
   5647 		v.AddArg(val)
   5648 		v.AddArg(mem)
   5649 		return true
   5650 	}
   5651 	// match: (MOVSDstore [off] {sym} (ADDL ptr idx) val mem)
   5652 	// cond: ptr.Op != OpSB
   5653 	// result: (MOVSDstoreidx1 [off] {sym} ptr idx val mem)
   5654 	for {
   5655 		off := v.AuxInt
   5656 		sym := v.Aux
   5657 		_ = v.Args[2]
   5658 		v_0 := v.Args[0]
   5659 		if v_0.Op != Op386ADDL {
   5660 			break
   5661 		}
   5662 		_ = v_0.Args[1]
   5663 		ptr := v_0.Args[0]
   5664 		idx := v_0.Args[1]
   5665 		val := v.Args[1]
   5666 		mem := v.Args[2]
   5667 		if !(ptr.Op != OpSB) {
   5668 			break
   5669 		}
   5670 		v.reset(Op386MOVSDstoreidx1)
   5671 		v.AuxInt = off
   5672 		v.Aux = sym
   5673 		v.AddArg(ptr)
   5674 		v.AddArg(idx)
   5675 		v.AddArg(val)
   5676 		v.AddArg(mem)
   5677 		return true
   5678 	}
   5679 	return false
   5680 }
   5681 func rewriteValue386_Op386MOVSDstoreidx1_0(v *Value) bool {
   5682 	// match: (MOVSDstoreidx1 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   5683 	// cond:
   5684 	// result: (MOVSDstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   5685 	for {
   5686 		c := v.AuxInt
   5687 		sym := v.Aux
   5688 		_ = v.Args[3]
   5689 		v_0 := v.Args[0]
   5690 		if v_0.Op != Op386ADDLconst {
   5691 			break
   5692 		}
   5693 		d := v_0.AuxInt
   5694 		ptr := v_0.Args[0]
   5695 		idx := v.Args[1]
   5696 		val := v.Args[2]
   5697 		mem := v.Args[3]
   5698 		v.reset(Op386MOVSDstoreidx1)
   5699 		v.AuxInt = int64(int32(c + d))
   5700 		v.Aux = sym
   5701 		v.AddArg(ptr)
   5702 		v.AddArg(idx)
   5703 		v.AddArg(val)
   5704 		v.AddArg(mem)
   5705 		return true
   5706 	}
   5707 	// match: (MOVSDstoreidx1 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   5708 	// cond:
   5709 	// result: (MOVSDstoreidx1 [int64(int32(c+d))]   {sym} ptr idx val mem)
   5710 	for {
   5711 		c := v.AuxInt
   5712 		sym := v.Aux
   5713 		_ = v.Args[3]
   5714 		ptr := v.Args[0]
   5715 		v_1 := v.Args[1]
   5716 		if v_1.Op != Op386ADDLconst {
   5717 			break
   5718 		}
   5719 		d := v_1.AuxInt
   5720 		idx := v_1.Args[0]
   5721 		val := v.Args[2]
   5722 		mem := v.Args[3]
   5723 		v.reset(Op386MOVSDstoreidx1)
   5724 		v.AuxInt = int64(int32(c + d))
   5725 		v.Aux = sym
   5726 		v.AddArg(ptr)
   5727 		v.AddArg(idx)
   5728 		v.AddArg(val)
   5729 		v.AddArg(mem)
   5730 		return true
   5731 	}
   5732 	return false
   5733 }
   5734 func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool {
   5735 	// match: (MOVSDstoreidx8 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   5736 	// cond:
   5737 	// result: (MOVSDstoreidx8 [int64(int32(c+d))] {sym} ptr idx val mem)
   5738 	for {
   5739 		c := v.AuxInt
   5740 		sym := v.Aux
   5741 		_ = v.Args[3]
   5742 		v_0 := v.Args[0]
   5743 		if v_0.Op != Op386ADDLconst {
   5744 			break
   5745 		}
   5746 		d := v_0.AuxInt
   5747 		ptr := v_0.Args[0]
   5748 		idx := v.Args[1]
   5749 		val := v.Args[2]
   5750 		mem := v.Args[3]
   5751 		v.reset(Op386MOVSDstoreidx8)
   5752 		v.AuxInt = int64(int32(c + d))
   5753 		v.Aux = sym
   5754 		v.AddArg(ptr)
   5755 		v.AddArg(idx)
   5756 		v.AddArg(val)
   5757 		v.AddArg(mem)
   5758 		return true
   5759 	}
   5760 	// match: (MOVSDstoreidx8 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   5761 	// cond:
   5762 	// result: (MOVSDstoreidx8 [int64(int32(c+8*d))] {sym} ptr idx val mem)
   5763 	for {
   5764 		c := v.AuxInt
   5765 		sym := v.Aux
   5766 		_ = v.Args[3]
   5767 		ptr := v.Args[0]
   5768 		v_1 := v.Args[1]
   5769 		if v_1.Op != Op386ADDLconst {
   5770 			break
   5771 		}
   5772 		d := v_1.AuxInt
   5773 		idx := v_1.Args[0]
   5774 		val := v.Args[2]
   5775 		mem := v.Args[3]
   5776 		v.reset(Op386MOVSDstoreidx8)
   5777 		v.AuxInt = int64(int32(c + 8*d))
   5778 		v.Aux = sym
   5779 		v.AddArg(ptr)
   5780 		v.AddArg(idx)
   5781 		v.AddArg(val)
   5782 		v.AddArg(mem)
   5783 		return true
   5784 	}
   5785 	return false
   5786 }
   5787 func rewriteValue386_Op386MOVSSconst_0(v *Value) bool {
   5788 	b := v.Block
   5789 	_ = b
   5790 	config := b.Func.Config
   5791 	_ = config
   5792 	typ := &b.Func.Config.Types
   5793 	_ = typ
   5794 	// match: (MOVSSconst [c])
   5795 	// cond: config.ctxt.Flag_shared
   5796 	// result: (MOVSSconst2 (MOVSSconst1 [c]))
   5797 	for {
   5798 		c := v.AuxInt
   5799 		if !(config.ctxt.Flag_shared) {
   5800 			break
   5801 		}
   5802 		v.reset(Op386MOVSSconst2)
   5803 		v0 := b.NewValue0(v.Pos, Op386MOVSSconst1, typ.UInt32)
   5804 		v0.AuxInt = c
   5805 		v.AddArg(v0)
   5806 		return true
   5807 	}
   5808 	return false
   5809 }
   5810 func rewriteValue386_Op386MOVSSload_0(v *Value) bool {
   5811 	b := v.Block
   5812 	_ = b
   5813 	config := b.Func.Config
   5814 	_ = config
   5815 	// match: (MOVSSload [off1] {sym} (ADDLconst [off2] ptr) mem)
   5816 	// cond: is32Bit(off1+off2)
   5817 	// result: (MOVSSload [off1+off2] {sym} ptr mem)
   5818 	for {
   5819 		off1 := v.AuxInt
   5820 		sym := v.Aux
   5821 		_ = v.Args[1]
   5822 		v_0 := v.Args[0]
   5823 		if v_0.Op != Op386ADDLconst {
   5824 			break
   5825 		}
   5826 		off2 := v_0.AuxInt
   5827 		ptr := v_0.Args[0]
   5828 		mem := v.Args[1]
   5829 		if !(is32Bit(off1 + off2)) {
   5830 			break
   5831 		}
   5832 		v.reset(Op386MOVSSload)
   5833 		v.AuxInt = off1 + off2
   5834 		v.Aux = sym
   5835 		v.AddArg(ptr)
   5836 		v.AddArg(mem)
   5837 		return true
   5838 	}
   5839 	// match: (MOVSSload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   5840 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   5841 	// result: (MOVSSload [off1+off2] {mergeSym(sym1,sym2)} base mem)
   5842 	for {
   5843 		off1 := v.AuxInt
   5844 		sym1 := v.Aux
   5845 		_ = v.Args[1]
   5846 		v_0 := v.Args[0]
   5847 		if v_0.Op != Op386LEAL {
   5848 			break
   5849 		}
   5850 		off2 := v_0.AuxInt
   5851 		sym2 := v_0.Aux
   5852 		base := v_0.Args[0]
   5853 		mem := v.Args[1]
   5854 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   5855 			break
   5856 		}
   5857 		v.reset(Op386MOVSSload)
   5858 		v.AuxInt = off1 + off2
   5859 		v.Aux = mergeSym(sym1, sym2)
   5860 		v.AddArg(base)
   5861 		v.AddArg(mem)
   5862 		return true
   5863 	}
   5864 	// match: (MOVSSload [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) mem)
   5865 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5866 	// result: (MOVSSloadidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   5867 	for {
   5868 		off1 := v.AuxInt
   5869 		sym1 := v.Aux
   5870 		_ = v.Args[1]
   5871 		v_0 := v.Args[0]
   5872 		if v_0.Op != Op386LEAL1 {
   5873 			break
   5874 		}
   5875 		off2 := v_0.AuxInt
   5876 		sym2 := v_0.Aux
   5877 		_ = v_0.Args[1]
   5878 		ptr := v_0.Args[0]
   5879 		idx := v_0.Args[1]
   5880 		mem := v.Args[1]
   5881 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5882 			break
   5883 		}
   5884 		v.reset(Op386MOVSSloadidx1)
   5885 		v.AuxInt = off1 + off2
   5886 		v.Aux = mergeSym(sym1, sym2)
   5887 		v.AddArg(ptr)
   5888 		v.AddArg(idx)
   5889 		v.AddArg(mem)
   5890 		return true
   5891 	}
   5892 	// match: (MOVSSload [off1] {sym1} (LEAL4 [off2] {sym2} ptr idx) mem)
   5893 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   5894 	// result: (MOVSSloadidx4 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   5895 	for {
   5896 		off1 := v.AuxInt
   5897 		sym1 := v.Aux
   5898 		_ = v.Args[1]
   5899 		v_0 := v.Args[0]
   5900 		if v_0.Op != Op386LEAL4 {
   5901 			break
   5902 		}
   5903 		off2 := v_0.AuxInt
   5904 		sym2 := v_0.Aux
   5905 		_ = v_0.Args[1]
   5906 		ptr := v_0.Args[0]
   5907 		idx := v_0.Args[1]
   5908 		mem := v.Args[1]
   5909 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   5910 			break
   5911 		}
   5912 		v.reset(Op386MOVSSloadidx4)
   5913 		v.AuxInt = off1 + off2
   5914 		v.Aux = mergeSym(sym1, sym2)
   5915 		v.AddArg(ptr)
   5916 		v.AddArg(idx)
   5917 		v.AddArg(mem)
   5918 		return true
   5919 	}
   5920 	// match: (MOVSSload [off] {sym} (ADDL ptr idx) mem)
   5921 	// cond: ptr.Op != OpSB
   5922 	// result: (MOVSSloadidx1 [off] {sym} ptr idx mem)
   5923 	for {
   5924 		off := v.AuxInt
   5925 		sym := v.Aux
   5926 		_ = v.Args[1]
   5927 		v_0 := v.Args[0]
   5928 		if v_0.Op != Op386ADDL {
   5929 			break
   5930 		}
   5931 		_ = v_0.Args[1]
   5932 		ptr := v_0.Args[0]
   5933 		idx := v_0.Args[1]
   5934 		mem := v.Args[1]
   5935 		if !(ptr.Op != OpSB) {
   5936 			break
   5937 		}
   5938 		v.reset(Op386MOVSSloadidx1)
   5939 		v.AuxInt = off
   5940 		v.Aux = sym
   5941 		v.AddArg(ptr)
   5942 		v.AddArg(idx)
   5943 		v.AddArg(mem)
   5944 		return true
   5945 	}
   5946 	return false
   5947 }
   5948 func rewriteValue386_Op386MOVSSloadidx1_0(v *Value) bool {
   5949 	// match: (MOVSSloadidx1 [c] {sym} (ADDLconst [d] ptr) idx mem)
   5950 	// cond:
   5951 	// result: (MOVSSloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   5952 	for {
   5953 		c := v.AuxInt
   5954 		sym := v.Aux
   5955 		_ = v.Args[2]
   5956 		v_0 := v.Args[0]
   5957 		if v_0.Op != Op386ADDLconst {
   5958 			break
   5959 		}
   5960 		d := v_0.AuxInt
   5961 		ptr := v_0.Args[0]
   5962 		idx := v.Args[1]
   5963 		mem := v.Args[2]
   5964 		v.reset(Op386MOVSSloadidx1)
   5965 		v.AuxInt = int64(int32(c + d))
   5966 		v.Aux = sym
   5967 		v.AddArg(ptr)
   5968 		v.AddArg(idx)
   5969 		v.AddArg(mem)
   5970 		return true
   5971 	}
   5972 	// match: (MOVSSloadidx1 [c] {sym} ptr (ADDLconst [d] idx) mem)
   5973 	// cond:
   5974 	// result: (MOVSSloadidx1 [int64(int32(c+d))]   {sym} ptr idx mem)
   5975 	for {
   5976 		c := v.AuxInt
   5977 		sym := v.Aux
   5978 		_ = v.Args[2]
   5979 		ptr := v.Args[0]
   5980 		v_1 := v.Args[1]
   5981 		if v_1.Op != Op386ADDLconst {
   5982 			break
   5983 		}
   5984 		d := v_1.AuxInt
   5985 		idx := v_1.Args[0]
   5986 		mem := v.Args[2]
   5987 		v.reset(Op386MOVSSloadidx1)
   5988 		v.AuxInt = int64(int32(c + d))
   5989 		v.Aux = sym
   5990 		v.AddArg(ptr)
   5991 		v.AddArg(idx)
   5992 		v.AddArg(mem)
   5993 		return true
   5994 	}
   5995 	return false
   5996 }
   5997 func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool {
   5998 	// match: (MOVSSloadidx4 [c] {sym} (ADDLconst [d] ptr) idx mem)
   5999 	// cond:
   6000 	// result: (MOVSSloadidx4 [int64(int32(c+d))] {sym} ptr idx mem)
   6001 	for {
   6002 		c := v.AuxInt
   6003 		sym := v.Aux
   6004 		_ = v.Args[2]
   6005 		v_0 := v.Args[0]
   6006 		if v_0.Op != Op386ADDLconst {
   6007 			break
   6008 		}
   6009 		d := v_0.AuxInt
   6010 		ptr := v_0.Args[0]
   6011 		idx := v.Args[1]
   6012 		mem := v.Args[2]
   6013 		v.reset(Op386MOVSSloadidx4)
   6014 		v.AuxInt = int64(int32(c + d))
   6015 		v.Aux = sym
   6016 		v.AddArg(ptr)
   6017 		v.AddArg(idx)
   6018 		v.AddArg(mem)
   6019 		return true
   6020 	}
   6021 	// match: (MOVSSloadidx4 [c] {sym} ptr (ADDLconst [d] idx) mem)
   6022 	// cond:
   6023 	// result: (MOVSSloadidx4 [int64(int32(c+4*d))] {sym} ptr idx mem)
   6024 	for {
   6025 		c := v.AuxInt
   6026 		sym := v.Aux
   6027 		_ = v.Args[2]
   6028 		ptr := v.Args[0]
   6029 		v_1 := v.Args[1]
   6030 		if v_1.Op != Op386ADDLconst {
   6031 			break
   6032 		}
   6033 		d := v_1.AuxInt
   6034 		idx := v_1.Args[0]
   6035 		mem := v.Args[2]
   6036 		v.reset(Op386MOVSSloadidx4)
   6037 		v.AuxInt = int64(int32(c + 4*d))
   6038 		v.Aux = sym
   6039 		v.AddArg(ptr)
   6040 		v.AddArg(idx)
   6041 		v.AddArg(mem)
   6042 		return true
   6043 	}
   6044 	return false
   6045 }
   6046 func rewriteValue386_Op386MOVSSstore_0(v *Value) bool {
   6047 	b := v.Block
   6048 	_ = b
   6049 	config := b.Func.Config
   6050 	_ = config
   6051 	// match: (MOVSSstore [off1] {sym} (ADDLconst [off2] ptr) val mem)
   6052 	// cond: is32Bit(off1+off2)
   6053 	// result: (MOVSSstore [off1+off2] {sym} ptr val mem)
   6054 	for {
   6055 		off1 := v.AuxInt
   6056 		sym := v.Aux
   6057 		_ = v.Args[2]
   6058 		v_0 := v.Args[0]
   6059 		if v_0.Op != Op386ADDLconst {
   6060 			break
   6061 		}
   6062 		off2 := v_0.AuxInt
   6063 		ptr := v_0.Args[0]
   6064 		val := v.Args[1]
   6065 		mem := v.Args[2]
   6066 		if !(is32Bit(off1 + off2)) {
   6067 			break
   6068 		}
   6069 		v.reset(Op386MOVSSstore)
   6070 		v.AuxInt = off1 + off2
   6071 		v.Aux = sym
   6072 		v.AddArg(ptr)
   6073 		v.AddArg(val)
   6074 		v.AddArg(mem)
   6075 		return true
   6076 	}
   6077 	// match: (MOVSSstore [off1] {sym1} (LEAL [off2] {sym2} base) val mem)
   6078 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   6079 	// result: (MOVSSstore [off1+off2] {mergeSym(sym1,sym2)} base val mem)
   6080 	for {
   6081 		off1 := v.AuxInt
   6082 		sym1 := v.Aux
   6083 		_ = v.Args[2]
   6084 		v_0 := v.Args[0]
   6085 		if v_0.Op != Op386LEAL {
   6086 			break
   6087 		}
   6088 		off2 := v_0.AuxInt
   6089 		sym2 := v_0.Aux
   6090 		base := v_0.Args[0]
   6091 		val := v.Args[1]
   6092 		mem := v.Args[2]
   6093 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   6094 			break
   6095 		}
   6096 		v.reset(Op386MOVSSstore)
   6097 		v.AuxInt = off1 + off2
   6098 		v.Aux = mergeSym(sym1, sym2)
   6099 		v.AddArg(base)
   6100 		v.AddArg(val)
   6101 		v.AddArg(mem)
   6102 		return true
   6103 	}
   6104 	// match: (MOVSSstore [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) val mem)
   6105 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   6106 	// result: (MOVSSstoreidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   6107 	for {
   6108 		off1 := v.AuxInt
   6109 		sym1 := v.Aux
   6110 		_ = v.Args[2]
   6111 		v_0 := v.Args[0]
   6112 		if v_0.Op != Op386LEAL1 {
   6113 			break
   6114 		}
   6115 		off2 := v_0.AuxInt
   6116 		sym2 := v_0.Aux
   6117 		_ = v_0.Args[1]
   6118 		ptr := v_0.Args[0]
   6119 		idx := v_0.Args[1]
   6120 		val := v.Args[1]
   6121 		mem := v.Args[2]
   6122 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   6123 			break
   6124 		}
   6125 		v.reset(Op386MOVSSstoreidx1)
   6126 		v.AuxInt = off1 + off2
   6127 		v.Aux = mergeSym(sym1, sym2)
   6128 		v.AddArg(ptr)
   6129 		v.AddArg(idx)
   6130 		v.AddArg(val)
   6131 		v.AddArg(mem)
   6132 		return true
   6133 	}
   6134 	// match: (MOVSSstore [off1] {sym1} (LEAL4 [off2] {sym2} ptr idx) val mem)
   6135 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   6136 	// result: (MOVSSstoreidx4 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   6137 	for {
   6138 		off1 := v.AuxInt
   6139 		sym1 := v.Aux
   6140 		_ = v.Args[2]
   6141 		v_0 := v.Args[0]
   6142 		if v_0.Op != Op386LEAL4 {
   6143 			break
   6144 		}
   6145 		off2 := v_0.AuxInt
   6146 		sym2 := v_0.Aux
   6147 		_ = v_0.Args[1]
   6148 		ptr := v_0.Args[0]
   6149 		idx := v_0.Args[1]
   6150 		val := v.Args[1]
   6151 		mem := v.Args[2]
   6152 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   6153 			break
   6154 		}
   6155 		v.reset(Op386MOVSSstoreidx4)
   6156 		v.AuxInt = off1 + off2
   6157 		v.Aux = mergeSym(sym1, sym2)
   6158 		v.AddArg(ptr)
   6159 		v.AddArg(idx)
   6160 		v.AddArg(val)
   6161 		v.AddArg(mem)
   6162 		return true
   6163 	}
   6164 	// match: (MOVSSstore [off] {sym} (ADDL ptr idx) val mem)
   6165 	// cond: ptr.Op != OpSB
   6166 	// result: (MOVSSstoreidx1 [off] {sym} ptr idx val mem)
   6167 	for {
   6168 		off := v.AuxInt
   6169 		sym := v.Aux
   6170 		_ = v.Args[2]
   6171 		v_0 := v.Args[0]
   6172 		if v_0.Op != Op386ADDL {
   6173 			break
   6174 		}
   6175 		_ = v_0.Args[1]
   6176 		ptr := v_0.Args[0]
   6177 		idx := v_0.Args[1]
   6178 		val := v.Args[1]
   6179 		mem := v.Args[2]
   6180 		if !(ptr.Op != OpSB) {
   6181 			break
   6182 		}
   6183 		v.reset(Op386MOVSSstoreidx1)
   6184 		v.AuxInt = off
   6185 		v.Aux = sym
   6186 		v.AddArg(ptr)
   6187 		v.AddArg(idx)
   6188 		v.AddArg(val)
   6189 		v.AddArg(mem)
   6190 		return true
   6191 	}
   6192 	return false
   6193 }
   6194 func rewriteValue386_Op386MOVSSstoreidx1_0(v *Value) bool {
   6195 	// match: (MOVSSstoreidx1 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   6196 	// cond:
   6197 	// result: (MOVSSstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   6198 	for {
   6199 		c := v.AuxInt
   6200 		sym := v.Aux
   6201 		_ = v.Args[3]
   6202 		v_0 := v.Args[0]
   6203 		if v_0.Op != Op386ADDLconst {
   6204 			break
   6205 		}
   6206 		d := v_0.AuxInt
   6207 		ptr := v_0.Args[0]
   6208 		idx := v.Args[1]
   6209 		val := v.Args[2]
   6210 		mem := v.Args[3]
   6211 		v.reset(Op386MOVSSstoreidx1)
   6212 		v.AuxInt = int64(int32(c + d))
   6213 		v.Aux = sym
   6214 		v.AddArg(ptr)
   6215 		v.AddArg(idx)
   6216 		v.AddArg(val)
   6217 		v.AddArg(mem)
   6218 		return true
   6219 	}
   6220 	// match: (MOVSSstoreidx1 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   6221 	// cond:
   6222 	// result: (MOVSSstoreidx1 [int64(int32(c+d))]   {sym} ptr idx val mem)
   6223 	for {
   6224 		c := v.AuxInt
   6225 		sym := v.Aux
   6226 		_ = v.Args[3]
   6227 		ptr := v.Args[0]
   6228 		v_1 := v.Args[1]
   6229 		if v_1.Op != Op386ADDLconst {
   6230 			break
   6231 		}
   6232 		d := v_1.AuxInt
   6233 		idx := v_1.Args[0]
   6234 		val := v.Args[2]
   6235 		mem := v.Args[3]
   6236 		v.reset(Op386MOVSSstoreidx1)
   6237 		v.AuxInt = int64(int32(c + d))
   6238 		v.Aux = sym
   6239 		v.AddArg(ptr)
   6240 		v.AddArg(idx)
   6241 		v.AddArg(val)
   6242 		v.AddArg(mem)
   6243 		return true
   6244 	}
   6245 	return false
   6246 }
   6247 func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool {
   6248 	// match: (MOVSSstoreidx4 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   6249 	// cond:
   6250 	// result: (MOVSSstoreidx4 [int64(int32(c+d))] {sym} ptr idx val mem)
   6251 	for {
   6252 		c := v.AuxInt
   6253 		sym := v.Aux
   6254 		_ = v.Args[3]
   6255 		v_0 := v.Args[0]
   6256 		if v_0.Op != Op386ADDLconst {
   6257 			break
   6258 		}
   6259 		d := v_0.AuxInt
   6260 		ptr := v_0.Args[0]
   6261 		idx := v.Args[1]
   6262 		val := v.Args[2]
   6263 		mem := v.Args[3]
   6264 		v.reset(Op386MOVSSstoreidx4)
   6265 		v.AuxInt = int64(int32(c + d))
   6266 		v.Aux = sym
   6267 		v.AddArg(ptr)
   6268 		v.AddArg(idx)
   6269 		v.AddArg(val)
   6270 		v.AddArg(mem)
   6271 		return true
   6272 	}
   6273 	// match: (MOVSSstoreidx4 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   6274 	// cond:
   6275 	// result: (MOVSSstoreidx4 [int64(int32(c+4*d))] {sym} ptr idx val mem)
   6276 	for {
   6277 		c := v.AuxInt
   6278 		sym := v.Aux
   6279 		_ = v.Args[3]
   6280 		ptr := v.Args[0]
   6281 		v_1 := v.Args[1]
   6282 		if v_1.Op != Op386ADDLconst {
   6283 			break
   6284 		}
   6285 		d := v_1.AuxInt
   6286 		idx := v_1.Args[0]
   6287 		val := v.Args[2]
   6288 		mem := v.Args[3]
   6289 		v.reset(Op386MOVSSstoreidx4)
   6290 		v.AuxInt = int64(int32(c + 4*d))
   6291 		v.Aux = sym
   6292 		v.AddArg(ptr)
   6293 		v.AddArg(idx)
   6294 		v.AddArg(val)
   6295 		v.AddArg(mem)
   6296 		return true
   6297 	}
   6298 	return false
   6299 }
   6300 func rewriteValue386_Op386MOVWLSX_0(v *Value) bool {
   6301 	b := v.Block
   6302 	_ = b
   6303 	// match: (MOVWLSX x:(MOVWload [off] {sym} ptr mem))
   6304 	// cond: x.Uses == 1 && clobber(x)
   6305 	// result: @x.Block (MOVWLSXload <v.Type> [off] {sym} ptr mem)
   6306 	for {
   6307 		x := v.Args[0]
   6308 		if x.Op != Op386MOVWload {
   6309 			break
   6310 		}
   6311 		off := x.AuxInt
   6312 		sym := x.Aux
   6313 		_ = x.Args[1]
   6314 		ptr := x.Args[0]
   6315 		mem := x.Args[1]
   6316 		if !(x.Uses == 1 && clobber(x)) {
   6317 			break
   6318 		}
   6319 		b = x.Block
   6320 		v0 := b.NewValue0(v.Pos, Op386MOVWLSXload, v.Type)
   6321 		v.reset(OpCopy)
   6322 		v.AddArg(v0)
   6323 		v0.AuxInt = off
   6324 		v0.Aux = sym
   6325 		v0.AddArg(ptr)
   6326 		v0.AddArg(mem)
   6327 		return true
   6328 	}
   6329 	// match: (MOVWLSX (ANDLconst [c] x))
   6330 	// cond: c & 0x8000 == 0
   6331 	// result: (ANDLconst [c & 0x7fff] x)
   6332 	for {
   6333 		v_0 := v.Args[0]
   6334 		if v_0.Op != Op386ANDLconst {
   6335 			break
   6336 		}
   6337 		c := v_0.AuxInt
   6338 		x := v_0.Args[0]
   6339 		if !(c&0x8000 == 0) {
   6340 			break
   6341 		}
   6342 		v.reset(Op386ANDLconst)
   6343 		v.AuxInt = c & 0x7fff
   6344 		v.AddArg(x)
   6345 		return true
   6346 	}
   6347 	return false
   6348 }
   6349 func rewriteValue386_Op386MOVWLSXload_0(v *Value) bool {
   6350 	b := v.Block
   6351 	_ = b
   6352 	config := b.Func.Config
   6353 	_ = config
   6354 	// match: (MOVWLSXload [off] {sym} ptr (MOVWstore [off2] {sym2} ptr2 x _))
   6355 	// cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)
   6356 	// result: (MOVWLSX x)
   6357 	for {
   6358 		off := v.AuxInt
   6359 		sym := v.Aux
   6360 		_ = v.Args[1]
   6361 		ptr := v.Args[0]
   6362 		v_1 := v.Args[1]
   6363 		if v_1.Op != Op386MOVWstore {
   6364 			break
   6365 		}
   6366 		off2 := v_1.AuxInt
   6367 		sym2 := v_1.Aux
   6368 		_ = v_1.Args[2]
   6369 		ptr2 := v_1.Args[0]
   6370 		x := v_1.Args[1]
   6371 		if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
   6372 			break
   6373 		}
   6374 		v.reset(Op386MOVWLSX)
   6375 		v.AddArg(x)
   6376 		return true
   6377 	}
   6378 	// match: (MOVWLSXload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   6379 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   6380 	// result: (MOVWLSXload [off1+off2] {mergeSym(sym1,sym2)} base mem)
   6381 	for {
   6382 		off1 := v.AuxInt
   6383 		sym1 := v.Aux
   6384 		_ = v.Args[1]
   6385 		v_0 := v.Args[0]
   6386 		if v_0.Op != Op386LEAL {
   6387 			break
   6388 		}
   6389 		off2 := v_0.AuxInt
   6390 		sym2 := v_0.Aux
   6391 		base := v_0.Args[0]
   6392 		mem := v.Args[1]
   6393 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   6394 			break
   6395 		}
   6396 		v.reset(Op386MOVWLSXload)
   6397 		v.AuxInt = off1 + off2
   6398 		v.Aux = mergeSym(sym1, sym2)
   6399 		v.AddArg(base)
   6400 		v.AddArg(mem)
   6401 		return true
   6402 	}
   6403 	return false
   6404 }
   6405 func rewriteValue386_Op386MOVWLZX_0(v *Value) bool {
   6406 	b := v.Block
   6407 	_ = b
   6408 	// match: (MOVWLZX x:(MOVWload [off] {sym} ptr mem))
   6409 	// cond: x.Uses == 1 && clobber(x)
   6410 	// result: @x.Block (MOVWload <v.Type> [off] {sym} ptr mem)
   6411 	for {
   6412 		x := v.Args[0]
   6413 		if x.Op != Op386MOVWload {
   6414 			break
   6415 		}
   6416 		off := x.AuxInt
   6417 		sym := x.Aux
   6418 		_ = x.Args[1]
   6419 		ptr := x.Args[0]
   6420 		mem := x.Args[1]
   6421 		if !(x.Uses == 1 && clobber(x)) {
   6422 			break
   6423 		}
   6424 		b = x.Block
   6425 		v0 := b.NewValue0(v.Pos, Op386MOVWload, v.Type)
   6426 		v.reset(OpCopy)
   6427 		v.AddArg(v0)
   6428 		v0.AuxInt = off
   6429 		v0.Aux = sym
   6430 		v0.AddArg(ptr)
   6431 		v0.AddArg(mem)
   6432 		return true
   6433 	}
   6434 	// match: (MOVWLZX x:(MOVWloadidx1 [off] {sym} ptr idx mem))
   6435 	// cond: x.Uses == 1 && clobber(x)
   6436 	// result: @x.Block (MOVWloadidx1 <v.Type> [off] {sym} ptr idx mem)
   6437 	for {
   6438 		x := v.Args[0]
   6439 		if x.Op != Op386MOVWloadidx1 {
   6440 			break
   6441 		}
   6442 		off := x.AuxInt
   6443 		sym := x.Aux
   6444 		_ = x.Args[2]
   6445 		ptr := x.Args[0]
   6446 		idx := x.Args[1]
   6447 		mem := x.Args[2]
   6448 		if !(x.Uses == 1 && clobber(x)) {
   6449 			break
   6450 		}
   6451 		b = x.Block
   6452 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   6453 		v.reset(OpCopy)
   6454 		v.AddArg(v0)
   6455 		v0.AuxInt = off
   6456 		v0.Aux = sym
   6457 		v0.AddArg(ptr)
   6458 		v0.AddArg(idx)
   6459 		v0.AddArg(mem)
   6460 		return true
   6461 	}
   6462 	// match: (MOVWLZX x:(MOVWloadidx2 [off] {sym} ptr idx mem))
   6463 	// cond: x.Uses == 1 && clobber(x)
   6464 	// result: @x.Block (MOVWloadidx2 <v.Type> [off] {sym} ptr idx mem)
   6465 	for {
   6466 		x := v.Args[0]
   6467 		if x.Op != Op386MOVWloadidx2 {
   6468 			break
   6469 		}
   6470 		off := x.AuxInt
   6471 		sym := x.Aux
   6472 		_ = x.Args[2]
   6473 		ptr := x.Args[0]
   6474 		idx := x.Args[1]
   6475 		mem := x.Args[2]
   6476 		if !(x.Uses == 1 && clobber(x)) {
   6477 			break
   6478 		}
   6479 		b = x.Block
   6480 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx2, v.Type)
   6481 		v.reset(OpCopy)
   6482 		v.AddArg(v0)
   6483 		v0.AuxInt = off
   6484 		v0.Aux = sym
   6485 		v0.AddArg(ptr)
   6486 		v0.AddArg(idx)
   6487 		v0.AddArg(mem)
   6488 		return true
   6489 	}
   6490 	// match: (MOVWLZX (ANDLconst [c] x))
   6491 	// cond:
   6492 	// result: (ANDLconst [c & 0xffff] x)
   6493 	for {
   6494 		v_0 := v.Args[0]
   6495 		if v_0.Op != Op386ANDLconst {
   6496 			break
   6497 		}
   6498 		c := v_0.AuxInt
   6499 		x := v_0.Args[0]
   6500 		v.reset(Op386ANDLconst)
   6501 		v.AuxInt = c & 0xffff
   6502 		v.AddArg(x)
   6503 		return true
   6504 	}
   6505 	return false
   6506 }
   6507 func rewriteValue386_Op386MOVWload_0(v *Value) bool {
   6508 	b := v.Block
   6509 	_ = b
   6510 	config := b.Func.Config
   6511 	_ = config
   6512 	// match: (MOVWload [off] {sym} ptr (MOVWstore [off2] {sym2} ptr2 x _))
   6513 	// cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)
   6514 	// result: (MOVWLZX x)
   6515 	for {
   6516 		off := v.AuxInt
   6517 		sym := v.Aux
   6518 		_ = v.Args[1]
   6519 		ptr := v.Args[0]
   6520 		v_1 := v.Args[1]
   6521 		if v_1.Op != Op386MOVWstore {
   6522 			break
   6523 		}
   6524 		off2 := v_1.AuxInt
   6525 		sym2 := v_1.Aux
   6526 		_ = v_1.Args[2]
   6527 		ptr2 := v_1.Args[0]
   6528 		x := v_1.Args[1]
   6529 		if !(sym == sym2 && off == off2 && isSamePtr(ptr, ptr2)) {
   6530 			break
   6531 		}
   6532 		v.reset(Op386MOVWLZX)
   6533 		v.AddArg(x)
   6534 		return true
   6535 	}
   6536 	// match: (MOVWload [off1] {sym} (ADDLconst [off2] ptr) mem)
   6537 	// cond: is32Bit(off1+off2)
   6538 	// result: (MOVWload  [off1+off2] {sym} ptr mem)
   6539 	for {
   6540 		off1 := v.AuxInt
   6541 		sym := v.Aux
   6542 		_ = v.Args[1]
   6543 		v_0 := v.Args[0]
   6544 		if v_0.Op != Op386ADDLconst {
   6545 			break
   6546 		}
   6547 		off2 := v_0.AuxInt
   6548 		ptr := v_0.Args[0]
   6549 		mem := v.Args[1]
   6550 		if !(is32Bit(off1 + off2)) {
   6551 			break
   6552 		}
   6553 		v.reset(Op386MOVWload)
   6554 		v.AuxInt = off1 + off2
   6555 		v.Aux = sym
   6556 		v.AddArg(ptr)
   6557 		v.AddArg(mem)
   6558 		return true
   6559 	}
   6560 	// match: (MOVWload [off1] {sym1} (LEAL [off2] {sym2} base) mem)
   6561 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   6562 	// result: (MOVWload  [off1+off2] {mergeSym(sym1,sym2)} base mem)
   6563 	for {
   6564 		off1 := v.AuxInt
   6565 		sym1 := v.Aux
   6566 		_ = v.Args[1]
   6567 		v_0 := v.Args[0]
   6568 		if v_0.Op != Op386LEAL {
   6569 			break
   6570 		}
   6571 		off2 := v_0.AuxInt
   6572 		sym2 := v_0.Aux
   6573 		base := v_0.Args[0]
   6574 		mem := v.Args[1]
   6575 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   6576 			break
   6577 		}
   6578 		v.reset(Op386MOVWload)
   6579 		v.AuxInt = off1 + off2
   6580 		v.Aux = mergeSym(sym1, sym2)
   6581 		v.AddArg(base)
   6582 		v.AddArg(mem)
   6583 		return true
   6584 	}
   6585 	// match: (MOVWload [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) mem)
   6586 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   6587 	// result: (MOVWloadidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   6588 	for {
   6589 		off1 := v.AuxInt
   6590 		sym1 := v.Aux
   6591 		_ = v.Args[1]
   6592 		v_0 := v.Args[0]
   6593 		if v_0.Op != Op386LEAL1 {
   6594 			break
   6595 		}
   6596 		off2 := v_0.AuxInt
   6597 		sym2 := v_0.Aux
   6598 		_ = v_0.Args[1]
   6599 		ptr := v_0.Args[0]
   6600 		idx := v_0.Args[1]
   6601 		mem := v.Args[1]
   6602 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   6603 			break
   6604 		}
   6605 		v.reset(Op386MOVWloadidx1)
   6606 		v.AuxInt = off1 + off2
   6607 		v.Aux = mergeSym(sym1, sym2)
   6608 		v.AddArg(ptr)
   6609 		v.AddArg(idx)
   6610 		v.AddArg(mem)
   6611 		return true
   6612 	}
   6613 	// match: (MOVWload [off1] {sym1} (LEAL2 [off2] {sym2} ptr idx) mem)
   6614 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   6615 	// result: (MOVWloadidx2 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
   6616 	for {
   6617 		off1 := v.AuxInt
   6618 		sym1 := v.Aux
   6619 		_ = v.Args[1]
   6620 		v_0 := v.Args[0]
   6621 		if v_0.Op != Op386LEAL2 {
   6622 			break
   6623 		}
   6624 		off2 := v_0.AuxInt
   6625 		sym2 := v_0.Aux
   6626 		_ = v_0.Args[1]
   6627 		ptr := v_0.Args[0]
   6628 		idx := v_0.Args[1]
   6629 		mem := v.Args[1]
   6630 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   6631 			break
   6632 		}
   6633 		v.reset(Op386MOVWloadidx2)
   6634 		v.AuxInt = off1 + off2
   6635 		v.Aux = mergeSym(sym1, sym2)
   6636 		v.AddArg(ptr)
   6637 		v.AddArg(idx)
   6638 		v.AddArg(mem)
   6639 		return true
   6640 	}
   6641 	// match: (MOVWload [off] {sym} (ADDL ptr idx) mem)
   6642 	// cond: ptr.Op != OpSB
   6643 	// result: (MOVWloadidx1 [off] {sym} ptr idx mem)
   6644 	for {
   6645 		off := v.AuxInt
   6646 		sym := v.Aux
   6647 		_ = v.Args[1]
   6648 		v_0 := v.Args[0]
   6649 		if v_0.Op != Op386ADDL {
   6650 			break
   6651 		}
   6652 		_ = v_0.Args[1]
   6653 		ptr := v_0.Args[0]
   6654 		idx := v_0.Args[1]
   6655 		mem := v.Args[1]
   6656 		if !(ptr.Op != OpSB) {
   6657 			break
   6658 		}
   6659 		v.reset(Op386MOVWloadidx1)
   6660 		v.AuxInt = off
   6661 		v.Aux = sym
   6662 		v.AddArg(ptr)
   6663 		v.AddArg(idx)
   6664 		v.AddArg(mem)
   6665 		return true
   6666 	}
   6667 	return false
   6668 }
   6669 func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool {
   6670 	// match: (MOVWloadidx1 [c] {sym} ptr (SHLLconst [1] idx) mem)
   6671 	// cond:
   6672 	// result: (MOVWloadidx2 [c] {sym} ptr idx mem)
   6673 	for {
   6674 		c := v.AuxInt
   6675 		sym := v.Aux
   6676 		_ = v.Args[2]
   6677 		ptr := v.Args[0]
   6678 		v_1 := v.Args[1]
   6679 		if v_1.Op != Op386SHLLconst {
   6680 			break
   6681 		}
   6682 		if v_1.AuxInt != 1 {
   6683 			break
   6684 		}
   6685 		idx := v_1.Args[0]
   6686 		mem := v.Args[2]
   6687 		v.reset(Op386MOVWloadidx2)
   6688 		v.AuxInt = c
   6689 		v.Aux = sym
   6690 		v.AddArg(ptr)
   6691 		v.AddArg(idx)
   6692 		v.AddArg(mem)
   6693 		return true
   6694 	}
   6695 	// match: (MOVWloadidx1 [c] {sym} (SHLLconst [1] idx) ptr mem)
   6696 	// cond:
   6697 	// result: (MOVWloadidx2 [c] {sym} ptr idx mem)
   6698 	for {
   6699 		c := v.AuxInt
   6700 		sym := v.Aux
   6701 		_ = v.Args[2]
   6702 		v_0 := v.Args[0]
   6703 		if v_0.Op != Op386SHLLconst {
   6704 			break
   6705 		}
   6706 		if v_0.AuxInt != 1 {
   6707 			break
   6708 		}
   6709 		idx := v_0.Args[0]
   6710 		ptr := v.Args[1]
   6711 		mem := v.Args[2]
   6712 		v.reset(Op386MOVWloadidx2)
   6713 		v.AuxInt = c
   6714 		v.Aux = sym
   6715 		v.AddArg(ptr)
   6716 		v.AddArg(idx)
   6717 		v.AddArg(mem)
   6718 		return true
   6719 	}
   6720 	// match: (MOVWloadidx1 [c] {sym} (ADDLconst [d] ptr) idx mem)
   6721 	// cond:
   6722 	// result: (MOVWloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   6723 	for {
   6724 		c := v.AuxInt
   6725 		sym := v.Aux
   6726 		_ = v.Args[2]
   6727 		v_0 := v.Args[0]
   6728 		if v_0.Op != Op386ADDLconst {
   6729 			break
   6730 		}
   6731 		d := v_0.AuxInt
   6732 		ptr := v_0.Args[0]
   6733 		idx := v.Args[1]
   6734 		mem := v.Args[2]
   6735 		v.reset(Op386MOVWloadidx1)
   6736 		v.AuxInt = int64(int32(c + d))
   6737 		v.Aux = sym
   6738 		v.AddArg(ptr)
   6739 		v.AddArg(idx)
   6740 		v.AddArg(mem)
   6741 		return true
   6742 	}
   6743 	// match: (MOVWloadidx1 [c] {sym} idx (ADDLconst [d] ptr) mem)
   6744 	// cond:
   6745 	// result: (MOVWloadidx1 [int64(int32(c+d))] {sym} ptr idx mem)
   6746 	for {
   6747 		c := v.AuxInt
   6748 		sym := v.Aux
   6749 		_ = v.Args[2]
   6750 		idx := v.Args[0]
   6751 		v_1 := v.Args[1]
   6752 		if v_1.Op != Op386ADDLconst {
   6753 			break
   6754 		}
   6755 		d := v_1.AuxInt
   6756 		ptr := v_1.Args[0]
   6757 		mem := v.Args[2]
   6758 		v.reset(Op386MOVWloadidx1)
   6759 		v.AuxInt = int64(int32(c + d))
   6760 		v.Aux = sym
   6761 		v.AddArg(ptr)
   6762 		v.AddArg(idx)
   6763 		v.AddArg(mem)
   6764 		return true
   6765 	}
   6766 	// match: (MOVWloadidx1 [c] {sym} ptr (ADDLconst [d] idx) mem)
   6767 	// cond:
   6768 	// result: (MOVWloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   6769 	for {
   6770 		c := v.AuxInt
   6771 		sym := v.Aux
   6772 		_ = v.Args[2]
   6773 		ptr := v.Args[0]
   6774 		v_1 := v.Args[1]
   6775 		if v_1.Op != Op386ADDLconst {
   6776 			break
   6777 		}
   6778 		d := v_1.AuxInt
   6779 		idx := v_1.Args[0]
   6780 		mem := v.Args[2]
   6781 		v.reset(Op386MOVWloadidx1)
   6782 		v.AuxInt = int64(int32(c + d))
   6783 		v.Aux = sym
   6784 		v.AddArg(ptr)
   6785 		v.AddArg(idx)
   6786 		v.AddArg(mem)
   6787 		return true
   6788 	}
   6789 	// match: (MOVWloadidx1 [c] {sym} (ADDLconst [d] idx) ptr mem)
   6790 	// cond:
   6791 	// result: (MOVWloadidx1  [int64(int32(c+d))]   {sym} ptr idx mem)
   6792 	for {
   6793 		c := v.AuxInt
   6794 		sym := v.Aux
   6795 		_ = v.Args[2]
   6796 		v_0 := v.Args[0]
   6797 		if v_0.Op != Op386ADDLconst {
   6798 			break
   6799 		}
   6800 		d := v_0.AuxInt
   6801 		idx := v_0.Args[0]
   6802 		ptr := v.Args[1]
   6803 		mem := v.Args[2]
   6804 		v.reset(Op386MOVWloadidx1)
   6805 		v.AuxInt = int64(int32(c + d))
   6806 		v.Aux = sym
   6807 		v.AddArg(ptr)
   6808 		v.AddArg(idx)
   6809 		v.AddArg(mem)
   6810 		return true
   6811 	}
   6812 	return false
   6813 }
   6814 func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool {
   6815 	// match: (MOVWloadidx2 [c] {sym} (ADDLconst [d] ptr) idx mem)
   6816 	// cond:
   6817 	// result: (MOVWloadidx2 [int64(int32(c+d))] {sym} ptr idx mem)
   6818 	for {
   6819 		c := v.AuxInt
   6820 		sym := v.Aux
   6821 		_ = v.Args[2]
   6822 		v_0 := v.Args[0]
   6823 		if v_0.Op != Op386ADDLconst {
   6824 			break
   6825 		}
   6826 		d := v_0.AuxInt
   6827 		ptr := v_0.Args[0]
   6828 		idx := v.Args[1]
   6829 		mem := v.Args[2]
   6830 		v.reset(Op386MOVWloadidx2)
   6831 		v.AuxInt = int64(int32(c + d))
   6832 		v.Aux = sym
   6833 		v.AddArg(ptr)
   6834 		v.AddArg(idx)
   6835 		v.AddArg(mem)
   6836 		return true
   6837 	}
   6838 	// match: (MOVWloadidx2 [c] {sym} ptr (ADDLconst [d] idx) mem)
   6839 	// cond:
   6840 	// result: (MOVWloadidx2  [int64(int32(c+2*d))] {sym} ptr idx mem)
   6841 	for {
   6842 		c := v.AuxInt
   6843 		sym := v.Aux
   6844 		_ = v.Args[2]
   6845 		ptr := v.Args[0]
   6846 		v_1 := v.Args[1]
   6847 		if v_1.Op != Op386ADDLconst {
   6848 			break
   6849 		}
   6850 		d := v_1.AuxInt
   6851 		idx := v_1.Args[0]
   6852 		mem := v.Args[2]
   6853 		v.reset(Op386MOVWloadidx2)
   6854 		v.AuxInt = int64(int32(c + 2*d))
   6855 		v.Aux = sym
   6856 		v.AddArg(ptr)
   6857 		v.AddArg(idx)
   6858 		v.AddArg(mem)
   6859 		return true
   6860 	}
   6861 	return false
   6862 }
   6863 func rewriteValue386_Op386MOVWstore_0(v *Value) bool {
   6864 	b := v.Block
   6865 	_ = b
   6866 	config := b.Func.Config
   6867 	_ = config
   6868 	// match: (MOVWstore [off] {sym} ptr (MOVWLSX x) mem)
   6869 	// cond:
   6870 	// result: (MOVWstore [off] {sym} ptr x mem)
   6871 	for {
   6872 		off := v.AuxInt
   6873 		sym := v.Aux
   6874 		_ = v.Args[2]
   6875 		ptr := v.Args[0]
   6876 		v_1 := v.Args[1]
   6877 		if v_1.Op != Op386MOVWLSX {
   6878 			break
   6879 		}
   6880 		x := v_1.Args[0]
   6881 		mem := v.Args[2]
   6882 		v.reset(Op386MOVWstore)
   6883 		v.AuxInt = off
   6884 		v.Aux = sym
   6885 		v.AddArg(ptr)
   6886 		v.AddArg(x)
   6887 		v.AddArg(mem)
   6888 		return true
   6889 	}
   6890 	// match: (MOVWstore [off] {sym} ptr (MOVWLZX x) mem)
   6891 	// cond:
   6892 	// result: (MOVWstore [off] {sym} ptr x mem)
   6893 	for {
   6894 		off := v.AuxInt
   6895 		sym := v.Aux
   6896 		_ = v.Args[2]
   6897 		ptr := v.Args[0]
   6898 		v_1 := v.Args[1]
   6899 		if v_1.Op != Op386MOVWLZX {
   6900 			break
   6901 		}
   6902 		x := v_1.Args[0]
   6903 		mem := v.Args[2]
   6904 		v.reset(Op386MOVWstore)
   6905 		v.AuxInt = off
   6906 		v.Aux = sym
   6907 		v.AddArg(ptr)
   6908 		v.AddArg(x)
   6909 		v.AddArg(mem)
   6910 		return true
   6911 	}
   6912 	// match: (MOVWstore [off1] {sym} (ADDLconst [off2] ptr) val mem)
   6913 	// cond: is32Bit(off1+off2)
   6914 	// result: (MOVWstore  [off1+off2] {sym} ptr val mem)
   6915 	for {
   6916 		off1 := v.AuxInt
   6917 		sym := v.Aux
   6918 		_ = v.Args[2]
   6919 		v_0 := v.Args[0]
   6920 		if v_0.Op != Op386ADDLconst {
   6921 			break
   6922 		}
   6923 		off2 := v_0.AuxInt
   6924 		ptr := v_0.Args[0]
   6925 		val := v.Args[1]
   6926 		mem := v.Args[2]
   6927 		if !(is32Bit(off1 + off2)) {
   6928 			break
   6929 		}
   6930 		v.reset(Op386MOVWstore)
   6931 		v.AuxInt = off1 + off2
   6932 		v.Aux = sym
   6933 		v.AddArg(ptr)
   6934 		v.AddArg(val)
   6935 		v.AddArg(mem)
   6936 		return true
   6937 	}
   6938 	// match: (MOVWstore [off] {sym} ptr (MOVLconst [c]) mem)
   6939 	// cond: validOff(off)
   6940 	// result: (MOVWstoreconst [makeValAndOff(int64(int16(c)),off)] {sym} ptr mem)
   6941 	for {
   6942 		off := v.AuxInt
   6943 		sym := v.Aux
   6944 		_ = v.Args[2]
   6945 		ptr := v.Args[0]
   6946 		v_1 := v.Args[1]
   6947 		if v_1.Op != Op386MOVLconst {
   6948 			break
   6949 		}
   6950 		c := v_1.AuxInt
   6951 		mem := v.Args[2]
   6952 		if !(validOff(off)) {
   6953 			break
   6954 		}
   6955 		v.reset(Op386MOVWstoreconst)
   6956 		v.AuxInt = makeValAndOff(int64(int16(c)), off)
   6957 		v.Aux = sym
   6958 		v.AddArg(ptr)
   6959 		v.AddArg(mem)
   6960 		return true
   6961 	}
   6962 	// match: (MOVWstore [off1] {sym1} (LEAL [off2] {sym2} base) val mem)
   6963 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)   && (base.Op != OpSB || !config.ctxt.Flag_shared)
   6964 	// result: (MOVWstore  [off1+off2] {mergeSym(sym1,sym2)} base val mem)
   6965 	for {
   6966 		off1 := v.AuxInt
   6967 		sym1 := v.Aux
   6968 		_ = v.Args[2]
   6969 		v_0 := v.Args[0]
   6970 		if v_0.Op != Op386LEAL {
   6971 			break
   6972 		}
   6973 		off2 := v_0.AuxInt
   6974 		sym2 := v_0.Aux
   6975 		base := v_0.Args[0]
   6976 		val := v.Args[1]
   6977 		mem := v.Args[2]
   6978 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) {
   6979 			break
   6980 		}
   6981 		v.reset(Op386MOVWstore)
   6982 		v.AuxInt = off1 + off2
   6983 		v.Aux = mergeSym(sym1, sym2)
   6984 		v.AddArg(base)
   6985 		v.AddArg(val)
   6986 		v.AddArg(mem)
   6987 		return true
   6988 	}
   6989 	// match: (MOVWstore [off1] {sym1} (LEAL1 [off2] {sym2} ptr idx) val mem)
   6990 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   6991 	// result: (MOVWstoreidx1 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   6992 	for {
   6993 		off1 := v.AuxInt
   6994 		sym1 := v.Aux
   6995 		_ = v.Args[2]
   6996 		v_0 := v.Args[0]
   6997 		if v_0.Op != Op386LEAL1 {
   6998 			break
   6999 		}
   7000 		off2 := v_0.AuxInt
   7001 		sym2 := v_0.Aux
   7002 		_ = v_0.Args[1]
   7003 		ptr := v_0.Args[0]
   7004 		idx := v_0.Args[1]
   7005 		val := v.Args[1]
   7006 		mem := v.Args[2]
   7007 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   7008 			break
   7009 		}
   7010 		v.reset(Op386MOVWstoreidx1)
   7011 		v.AuxInt = off1 + off2
   7012 		v.Aux = mergeSym(sym1, sym2)
   7013 		v.AddArg(ptr)
   7014 		v.AddArg(idx)
   7015 		v.AddArg(val)
   7016 		v.AddArg(mem)
   7017 		return true
   7018 	}
   7019 	// match: (MOVWstore [off1] {sym1} (LEAL2 [off2] {sym2} ptr idx) val mem)
   7020 	// cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2)
   7021 	// result: (MOVWstoreidx2 [off1+off2] {mergeSym(sym1,sym2)} ptr idx val mem)
   7022 	for {
   7023 		off1 := v.AuxInt
   7024 		sym1 := v.Aux
   7025 		_ = v.Args[2]
   7026 		v_0 := v.Args[0]
   7027 		if v_0.Op != Op386LEAL2 {
   7028 			break
   7029 		}
   7030 		off2 := v_0.AuxInt
   7031 		sym2 := v_0.Aux
   7032 		_ = v_0.Args[1]
   7033 		ptr := v_0.Args[0]
   7034 		idx := v_0.Args[1]
   7035 		val := v.Args[1]
   7036 		mem := v.Args[2]
   7037 		if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) {
   7038 			break
   7039 		}
   7040 		v.reset(Op386MOVWstoreidx2)
   7041 		v.AuxInt = off1 + off2
   7042 		v.Aux = mergeSym(sym1, sym2)
   7043 		v.AddArg(ptr)
   7044 		v.AddArg(idx)
   7045 		v.AddArg(val)
   7046 		v.AddArg(mem)
   7047 		return true
   7048 	}
   7049 	// match: (MOVWstore [off] {sym} (ADDL ptr idx) val mem)
   7050 	// cond: ptr.Op != OpSB
   7051 	// result: (MOVWstoreidx1 [off] {sym} ptr idx val mem)
   7052 	for {
   7053 		off := v.AuxInt
   7054 		sym := v.Aux
   7055 		_ = v.Args[2]
   7056 		v_0 := v.Args[0]
   7057 		if v_0.Op != Op386ADDL {
   7058 			break
   7059 		}
   7060 		_ = v_0.Args[1]
   7061 		ptr := v_0.Args[0]
   7062 		idx := v_0.Args[1]
   7063 		val := v.Args[1]
   7064 		mem := v.Args[2]
   7065 		if !(ptr.Op != OpSB) {
   7066 			break
   7067 		}
   7068 		v.reset(Op386MOVWstoreidx1)
   7069 		v.AuxInt = off
   7070 		v.Aux = sym
   7071 		v.AddArg(ptr)
   7072 		v.AddArg(idx)
   7073 		v.AddArg(val)
   7074 		v.AddArg(mem)
   7075 		return true
   7076 	}
   7077 	// match: (MOVWstore [i] {s} p (SHRLconst [16] w) x:(MOVWstore [i-2] {s} p w mem))
   7078 	// cond: x.Uses == 1   && clobber(x)
   7079 	// result: (MOVLstore [i-2] {s} p w mem)
   7080 	for {
   7081 		i := v.AuxInt
   7082 		s := v.Aux
   7083 		_ = v.Args[2]
   7084 		p := v.Args[0]
   7085 		v_1 := v.Args[1]
   7086 		if v_1.Op != Op386SHRLconst {
   7087 			break
   7088 		}
   7089 		if v_1.AuxInt != 16 {
   7090 			break
   7091 		}
   7092 		w := v_1.Args[0]
   7093 		x := v.Args[2]
   7094 		if x.Op != Op386MOVWstore {
   7095 			break
   7096 		}
   7097 		if x.AuxInt != i-2 {
   7098 			break
   7099 		}
   7100 		if x.Aux != s {
   7101 			break
   7102 		}
   7103 		_ = x.Args[2]
   7104 		if p != x.Args[0] {
   7105 			break
   7106 		}
   7107 		if w != x.Args[1] {
   7108 			break
   7109 		}
   7110 		mem := x.Args[2]
   7111 		if !(x.Uses == 1 && clobber(x)) {
   7112 			break
   7113 		}
   7114 		v.reset(Op386MOVLstore)
   7115 		v.AuxInt = i - 2
   7116 		v.Aux = s
   7117 		v.AddArg(p)
   7118 		v.AddArg(w)
   7119 		v.AddArg(mem)
   7120 		return true
   7121 	}
   7122 	// match: (MOVWstore [i] {s} p (SHRLconst [j] w) x:(MOVWstore [i-2] {s} p w0:(SHRLconst [j-16] w) mem))
   7123 	// cond: x.Uses == 1   && clobber(x)
   7124 	// result: (MOVLstore [i-2] {s} p w0 mem)
   7125 	for {
   7126 		i := v.AuxInt
   7127 		s := v.Aux
   7128 		_ = v.Args[2]
   7129 		p := v.Args[0]
   7130 		v_1 := v.Args[1]
   7131 		if v_1.Op != Op386SHRLconst {
   7132 			break
   7133 		}
   7134 		j := v_1.AuxInt
   7135 		w := v_1.Args[0]
   7136 		x := v.Args[2]
   7137 		if x.Op != Op386MOVWstore {
   7138 			break
   7139 		}
   7140 		if x.AuxInt != i-2 {
   7141 			break
   7142 		}
   7143 		if x.Aux != s {
   7144 			break
   7145 		}
   7146 		_ = x.Args[2]
   7147 		if p != x.Args[0] {
   7148 			break
   7149 		}
   7150 		w0 := x.Args[1]
   7151 		if w0.Op != Op386SHRLconst {
   7152 			break
   7153 		}
   7154 		if w0.AuxInt != j-16 {
   7155 			break
   7156 		}
   7157 		if w != w0.Args[0] {
   7158 			break
   7159 		}
   7160 		mem := x.Args[2]
   7161 		if !(x.Uses == 1 && clobber(x)) {
   7162 			break
   7163 		}
   7164 		v.reset(Op386MOVLstore)
   7165 		v.AuxInt = i - 2
   7166 		v.Aux = s
   7167 		v.AddArg(p)
   7168 		v.AddArg(w0)
   7169 		v.AddArg(mem)
   7170 		return true
   7171 	}
   7172 	return false
   7173 }
   7174 func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool {
   7175 	b := v.Block
   7176 	_ = b
   7177 	config := b.Func.Config
   7178 	_ = config
   7179 	// match: (MOVWstoreconst [sc] {s} (ADDLconst [off] ptr) mem)
   7180 	// cond: ValAndOff(sc).canAdd(off)
   7181 	// result: (MOVWstoreconst [ValAndOff(sc).add(off)] {s} ptr mem)
   7182 	for {
   7183 		sc := v.AuxInt
   7184 		s := v.Aux
   7185 		_ = v.Args[1]
   7186 		v_0 := v.Args[0]
   7187 		if v_0.Op != Op386ADDLconst {
   7188 			break
   7189 		}
   7190 		off := v_0.AuxInt
   7191 		ptr := v_0.Args[0]
   7192 		mem := v.Args[1]
   7193 		if !(ValAndOff(sc).canAdd(off)) {
   7194 			break
   7195 		}
   7196 		v.reset(Op386MOVWstoreconst)
   7197 		v.AuxInt = ValAndOff(sc).add(off)
   7198 		v.Aux = s
   7199 		v.AddArg(ptr)
   7200 		v.AddArg(mem)
   7201 		return true
   7202 	}
   7203 	// match: (MOVWstoreconst [sc] {sym1} (LEAL [off] {sym2} ptr) mem)
   7204 	// cond: canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)   && (ptr.Op != OpSB || !config.ctxt.Flag_shared)
   7205 	// result: (MOVWstoreconst [ValAndOff(sc).add(off)] {mergeSym(sym1, sym2)} ptr mem)
   7206 	for {
   7207 		sc := v.AuxInt
   7208 		sym1 := v.Aux
   7209 		_ = v.Args[1]
   7210 		v_0 := v.Args[0]
   7211 		if v_0.Op != Op386LEAL {
   7212 			break
   7213 		}
   7214 		off := v_0.AuxInt
   7215 		sym2 := v_0.Aux
   7216 		ptr := v_0.Args[0]
   7217 		mem := v.Args[1]
   7218 		if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) {
   7219 			break
   7220 		}
   7221 		v.reset(Op386MOVWstoreconst)
   7222 		v.AuxInt = ValAndOff(sc).add(off)
   7223 		v.Aux = mergeSym(sym1, sym2)
   7224 		v.AddArg(ptr)
   7225 		v.AddArg(mem)
   7226 		return true
   7227 	}
   7228 	// match: (MOVWstoreconst [x] {sym1} (LEAL1 [off] {sym2} ptr idx) mem)
   7229 	// cond: canMergeSym(sym1, sym2)
   7230 	// result: (MOVWstoreconstidx1 [ValAndOff(x).add(off)] {mergeSym(sym1,sym2)} ptr idx mem)
   7231 	for {
   7232 		x := v.AuxInt
   7233 		sym1 := v.Aux
   7234 		_ = v.Args[1]
   7235 		v_0 := v.Args[0]
   7236 		if v_0.Op != Op386LEAL1 {
   7237 			break
   7238 		}
   7239 		off := v_0.AuxInt
   7240 		sym2 := v_0.Aux
   7241 		_ = v_0.Args[1]
   7242 		ptr := v_0.Args[0]
   7243 		idx := v_0.Args[1]
   7244 		mem := v.Args[1]
   7245 		if !(canMergeSym(sym1, sym2)) {
   7246 			break
   7247 		}
   7248 		v.reset(Op386MOVWstoreconstidx1)
   7249 		v.AuxInt = ValAndOff(x).add(off)
   7250 		v.Aux = mergeSym(sym1, sym2)
   7251 		v.AddArg(ptr)
   7252 		v.AddArg(idx)
   7253 		v.AddArg(mem)
   7254 		return true
   7255 	}
   7256 	// match: (MOVWstoreconst [x] {sym1} (LEAL2 [off] {sym2} ptr idx) mem)
   7257 	// cond: canMergeSym(sym1, sym2)
   7258 	// result: (MOVWstoreconstidx2 [ValAndOff(x).add(off)] {mergeSym(sym1,sym2)} ptr idx mem)
   7259 	for {
   7260 		x := v.AuxInt
   7261 		sym1 := v.Aux
   7262 		_ = v.Args[1]
   7263 		v_0 := v.Args[0]
   7264 		if v_0.Op != Op386LEAL2 {
   7265 			break
   7266 		}
   7267 		off := v_0.AuxInt
   7268 		sym2 := v_0.Aux
   7269 		_ = v_0.Args[1]
   7270 		ptr := v_0.Args[0]
   7271 		idx := v_0.Args[1]
   7272 		mem := v.Args[1]
   7273 		if !(canMergeSym(sym1, sym2)) {
   7274 			break
   7275 		}
   7276 		v.reset(Op386MOVWstoreconstidx2)
   7277 		v.AuxInt = ValAndOff(x).add(off)
   7278 		v.Aux = mergeSym(sym1, sym2)
   7279 		v.AddArg(ptr)
   7280 		v.AddArg(idx)
   7281 		v.AddArg(mem)
   7282 		return true
   7283 	}
   7284 	// match: (MOVWstoreconst [x] {sym} (ADDL ptr idx) mem)
   7285 	// cond:
   7286 	// result: (MOVWstoreconstidx1 [x] {sym} ptr idx mem)
   7287 	for {
   7288 		x := v.AuxInt
   7289 		sym := v.Aux
   7290 		_ = v.Args[1]
   7291 		v_0 := v.Args[0]
   7292 		if v_0.Op != Op386ADDL {
   7293 			break
   7294 		}
   7295 		_ = v_0.Args[1]
   7296 		ptr := v_0.Args[0]
   7297 		idx := v_0.Args[1]
   7298 		mem := v.Args[1]
   7299 		v.reset(Op386MOVWstoreconstidx1)
   7300 		v.AuxInt = x
   7301 		v.Aux = sym
   7302 		v.AddArg(ptr)
   7303 		v.AddArg(idx)
   7304 		v.AddArg(mem)
   7305 		return true
   7306 	}
   7307 	// match: (MOVWstoreconst [c] {s} p x:(MOVWstoreconst [a] {s} p mem))
   7308 	// cond: x.Uses == 1   && ValAndOff(a).Off() + 2 == ValAndOff(c).Off()   && clobber(x)
   7309 	// result: (MOVLstoreconst [makeValAndOff(ValAndOff(a).Val()&0xffff | ValAndOff(c).Val()<<16, ValAndOff(a).Off())] {s} p mem)
   7310 	for {
   7311 		c := v.AuxInt
   7312 		s := v.Aux
   7313 		_ = v.Args[1]
   7314 		p := v.Args[0]
   7315 		x := v.Args[1]
   7316 		if x.Op != Op386MOVWstoreconst {
   7317 			break
   7318 		}
   7319 		a := x.AuxInt
   7320 		if x.Aux != s {
   7321 			break
   7322 		}
   7323 		_ = x.Args[1]
   7324 		if p != x.Args[0] {
   7325 			break
   7326 		}
   7327 		mem := x.Args[1]
   7328 		if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) {
   7329 			break
   7330 		}
   7331 		v.reset(Op386MOVLstoreconst)
   7332 		v.AuxInt = makeValAndOff(ValAndOff(a).Val()&0xffff|ValAndOff(c).Val()<<16, ValAndOff(a).Off())
   7333 		v.Aux = s
   7334 		v.AddArg(p)
   7335 		v.AddArg(mem)
   7336 		return true
   7337 	}
   7338 	return false
   7339 }
   7340 func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool {
   7341 	// match: (MOVWstoreconstidx1 [c] {sym} ptr (SHLLconst [1] idx) mem)
   7342 	// cond:
   7343 	// result: (MOVWstoreconstidx2 [c] {sym} ptr idx mem)
   7344 	for {
   7345 		c := v.AuxInt
   7346 		sym := v.Aux
   7347 		_ = v.Args[2]
   7348 		ptr := v.Args[0]
   7349 		v_1 := v.Args[1]
   7350 		if v_1.Op != Op386SHLLconst {
   7351 			break
   7352 		}
   7353 		if v_1.AuxInt != 1 {
   7354 			break
   7355 		}
   7356 		idx := v_1.Args[0]
   7357 		mem := v.Args[2]
   7358 		v.reset(Op386MOVWstoreconstidx2)
   7359 		v.AuxInt = c
   7360 		v.Aux = sym
   7361 		v.AddArg(ptr)
   7362 		v.AddArg(idx)
   7363 		v.AddArg(mem)
   7364 		return true
   7365 	}
   7366 	// match: (MOVWstoreconstidx1 [x] {sym} (ADDLconst [c] ptr) idx mem)
   7367 	// cond:
   7368 	// result: (MOVWstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   7369 	for {
   7370 		x := v.AuxInt
   7371 		sym := v.Aux
   7372 		_ = v.Args[2]
   7373 		v_0 := v.Args[0]
   7374 		if v_0.Op != Op386ADDLconst {
   7375 			break
   7376 		}
   7377 		c := v_0.AuxInt
   7378 		ptr := v_0.Args[0]
   7379 		idx := v.Args[1]
   7380 		mem := v.Args[2]
   7381 		v.reset(Op386MOVWstoreconstidx1)
   7382 		v.AuxInt = ValAndOff(x).add(c)
   7383 		v.Aux = sym
   7384 		v.AddArg(ptr)
   7385 		v.AddArg(idx)
   7386 		v.AddArg(mem)
   7387 		return true
   7388 	}
   7389 	// match: (MOVWstoreconstidx1 [x] {sym} ptr (ADDLconst [c] idx) mem)
   7390 	// cond:
   7391 	// result: (MOVWstoreconstidx1 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   7392 	for {
   7393 		x := v.AuxInt
   7394 		sym := v.Aux
   7395 		_ = v.Args[2]
   7396 		ptr := v.Args[0]
   7397 		v_1 := v.Args[1]
   7398 		if v_1.Op != Op386ADDLconst {
   7399 			break
   7400 		}
   7401 		c := v_1.AuxInt
   7402 		idx := v_1.Args[0]
   7403 		mem := v.Args[2]
   7404 		v.reset(Op386MOVWstoreconstidx1)
   7405 		v.AuxInt = ValAndOff(x).add(c)
   7406 		v.Aux = sym
   7407 		v.AddArg(ptr)
   7408 		v.AddArg(idx)
   7409 		v.AddArg(mem)
   7410 		return true
   7411 	}
   7412 	// match: (MOVWstoreconstidx1 [c] {s} p i x:(MOVWstoreconstidx1 [a] {s} p i mem))
   7413 	// cond: x.Uses == 1   && ValAndOff(a).Off() + 2 == ValAndOff(c).Off()   && clobber(x)
   7414 	// result: (MOVLstoreconstidx1 [makeValAndOff(ValAndOff(a).Val()&0xffff | ValAndOff(c).Val()<<16, ValAndOff(a).Off())] {s} p i mem)
   7415 	for {
   7416 		c := v.AuxInt
   7417 		s := v.Aux
   7418 		_ = v.Args[2]
   7419 		p := v.Args[0]
   7420 		i := v.Args[1]
   7421 		x := v.Args[2]
   7422 		if x.Op != Op386MOVWstoreconstidx1 {
   7423 			break
   7424 		}
   7425 		a := x.AuxInt
   7426 		if x.Aux != s {
   7427 			break
   7428 		}
   7429 		_ = x.Args[2]
   7430 		if p != x.Args[0] {
   7431 			break
   7432 		}
   7433 		if i != x.Args[1] {
   7434 			break
   7435 		}
   7436 		mem := x.Args[2]
   7437 		if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) {
   7438 			break
   7439 		}
   7440 		v.reset(Op386MOVLstoreconstidx1)
   7441 		v.AuxInt = makeValAndOff(ValAndOff(a).Val()&0xffff|ValAndOff(c).Val()<<16, ValAndOff(a).Off())
   7442 		v.Aux = s
   7443 		v.AddArg(p)
   7444 		v.AddArg(i)
   7445 		v.AddArg(mem)
   7446 		return true
   7447 	}
   7448 	return false
   7449 }
   7450 func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool {
   7451 	b := v.Block
   7452 	_ = b
   7453 	// match: (MOVWstoreconstidx2 [x] {sym} (ADDLconst [c] ptr) idx mem)
   7454 	// cond:
   7455 	// result: (MOVWstoreconstidx2 [ValAndOff(x).add(c)] {sym} ptr idx mem)
   7456 	for {
   7457 		x := v.AuxInt
   7458 		sym := v.Aux
   7459 		_ = v.Args[2]
   7460 		v_0 := v.Args[0]
   7461 		if v_0.Op != Op386ADDLconst {
   7462 			break
   7463 		}
   7464 		c := v_0.AuxInt
   7465 		ptr := v_0.Args[0]
   7466 		idx := v.Args[1]
   7467 		mem := v.Args[2]
   7468 		v.reset(Op386MOVWstoreconstidx2)
   7469 		v.AuxInt = ValAndOff(x).add(c)
   7470 		v.Aux = sym
   7471 		v.AddArg(ptr)
   7472 		v.AddArg(idx)
   7473 		v.AddArg(mem)
   7474 		return true
   7475 	}
   7476 	// match: (MOVWstoreconstidx2 [x] {sym} ptr (ADDLconst [c] idx) mem)
   7477 	// cond:
   7478 	// result: (MOVWstoreconstidx2 [ValAndOff(x).add(2*c)] {sym} ptr idx mem)
   7479 	for {
   7480 		x := v.AuxInt
   7481 		sym := v.Aux
   7482 		_ = v.Args[2]
   7483 		ptr := v.Args[0]
   7484 		v_1 := v.Args[1]
   7485 		if v_1.Op != Op386ADDLconst {
   7486 			break
   7487 		}
   7488 		c := v_1.AuxInt
   7489 		idx := v_1.Args[0]
   7490 		mem := v.Args[2]
   7491 		v.reset(Op386MOVWstoreconstidx2)
   7492 		v.AuxInt = ValAndOff(x).add(2 * c)
   7493 		v.Aux = sym
   7494 		v.AddArg(ptr)
   7495 		v.AddArg(idx)
   7496 		v.AddArg(mem)
   7497 		return true
   7498 	}
   7499 	// match: (MOVWstoreconstidx2 [c] {s} p i x:(MOVWstoreconstidx2 [a] {s} p i mem))
   7500 	// cond: x.Uses == 1   && ValAndOff(a).Off() + 2 == ValAndOff(c).Off()   && clobber(x)
   7501 	// result: (MOVLstoreconstidx1 [makeValAndOff(ValAndOff(a).Val()&0xffff | ValAndOff(c).Val()<<16, ValAndOff(a).Off())] {s} p (SHLLconst <i.Type> [1] i) mem)
   7502 	for {
   7503 		c := v.AuxInt
   7504 		s := v.Aux
   7505 		_ = v.Args[2]
   7506 		p := v.Args[0]
   7507 		i := v.Args[1]
   7508 		x := v.Args[2]
   7509 		if x.Op != Op386MOVWstoreconstidx2 {
   7510 			break
   7511 		}
   7512 		a := x.AuxInt
   7513 		if x.Aux != s {
   7514 			break
   7515 		}
   7516 		_ = x.Args[2]
   7517 		if p != x.Args[0] {
   7518 			break
   7519 		}
   7520 		if i != x.Args[1] {
   7521 			break
   7522 		}
   7523 		mem := x.Args[2]
   7524 		if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) {
   7525 			break
   7526 		}
   7527 		v.reset(Op386MOVLstoreconstidx1)
   7528 		v.AuxInt = makeValAndOff(ValAndOff(a).Val()&0xffff|ValAndOff(c).Val()<<16, ValAndOff(a).Off())
   7529 		v.Aux = s
   7530 		v.AddArg(p)
   7531 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, i.Type)
   7532 		v0.AuxInt = 1
   7533 		v0.AddArg(i)
   7534 		v.AddArg(v0)
   7535 		v.AddArg(mem)
   7536 		return true
   7537 	}
   7538 	return false
   7539 }
   7540 func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool {
   7541 	// match: (MOVWstoreidx1 [c] {sym} ptr (SHLLconst [1] idx) val mem)
   7542 	// cond:
   7543 	// result: (MOVWstoreidx2 [c] {sym} ptr idx val mem)
   7544 	for {
   7545 		c := v.AuxInt
   7546 		sym := v.Aux
   7547 		_ = v.Args[3]
   7548 		ptr := v.Args[0]
   7549 		v_1 := v.Args[1]
   7550 		if v_1.Op != Op386SHLLconst {
   7551 			break
   7552 		}
   7553 		if v_1.AuxInt != 1 {
   7554 			break
   7555 		}
   7556 		idx := v_1.Args[0]
   7557 		val := v.Args[2]
   7558 		mem := v.Args[3]
   7559 		v.reset(Op386MOVWstoreidx2)
   7560 		v.AuxInt = c
   7561 		v.Aux = sym
   7562 		v.AddArg(ptr)
   7563 		v.AddArg(idx)
   7564 		v.AddArg(val)
   7565 		v.AddArg(mem)
   7566 		return true
   7567 	}
   7568 	// match: (MOVWstoreidx1 [c] {sym} (SHLLconst [1] idx) ptr val mem)
   7569 	// cond:
   7570 	// result: (MOVWstoreidx2 [c] {sym} ptr idx val mem)
   7571 	for {
   7572 		c := v.AuxInt
   7573 		sym := v.Aux
   7574 		_ = v.Args[3]
   7575 		v_0 := v.Args[0]
   7576 		if v_0.Op != Op386SHLLconst {
   7577 			break
   7578 		}
   7579 		if v_0.AuxInt != 1 {
   7580 			break
   7581 		}
   7582 		idx := v_0.Args[0]
   7583 		ptr := v.Args[1]
   7584 		val := v.Args[2]
   7585 		mem := v.Args[3]
   7586 		v.reset(Op386MOVWstoreidx2)
   7587 		v.AuxInt = c
   7588 		v.Aux = sym
   7589 		v.AddArg(ptr)
   7590 		v.AddArg(idx)
   7591 		v.AddArg(val)
   7592 		v.AddArg(mem)
   7593 		return true
   7594 	}
   7595 	// match: (MOVWstoreidx1 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   7596 	// cond:
   7597 	// result: (MOVWstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   7598 	for {
   7599 		c := v.AuxInt
   7600 		sym := v.Aux
   7601 		_ = v.Args[3]
   7602 		v_0 := v.Args[0]
   7603 		if v_0.Op != Op386ADDLconst {
   7604 			break
   7605 		}
   7606 		d := v_0.AuxInt
   7607 		ptr := v_0.Args[0]
   7608 		idx := v.Args[1]
   7609 		val := v.Args[2]
   7610 		mem := v.Args[3]
   7611 		v.reset(Op386MOVWstoreidx1)
   7612 		v.AuxInt = int64(int32(c + d))
   7613 		v.Aux = sym
   7614 		v.AddArg(ptr)
   7615 		v.AddArg(idx)
   7616 		v.AddArg(val)
   7617 		v.AddArg(mem)
   7618 		return true
   7619 	}
   7620 	// match: (MOVWstoreidx1 [c] {sym} idx (ADDLconst [d] ptr) val mem)
   7621 	// cond:
   7622 	// result: (MOVWstoreidx1 [int64(int32(c+d))] {sym} ptr idx val mem)
   7623 	for {
   7624 		c := v.AuxInt
   7625 		sym := v.Aux
   7626 		_ = v.Args[3]
   7627 		idx := v.Args[0]
   7628 		v_1 := v.Args[1]
   7629 		if v_1.Op != Op386ADDLconst {
   7630 			break
   7631 		}
   7632 		d := v_1.AuxInt
   7633 		ptr := v_1.Args[0]
   7634 		val := v.Args[2]
   7635 		mem := v.Args[3]
   7636 		v.reset(Op386MOVWstoreidx1)
   7637 		v.AuxInt = int64(int32(c + d))
   7638 		v.Aux = sym
   7639 		v.AddArg(ptr)
   7640 		v.AddArg(idx)
   7641 		v.AddArg(val)
   7642 		v.AddArg(mem)
   7643 		return true
   7644 	}
   7645 	// match: (MOVWstoreidx1 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   7646 	// cond:
   7647 	// result: (MOVWstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   7648 	for {
   7649 		c := v.AuxInt
   7650 		sym := v.Aux
   7651 		_ = v.Args[3]
   7652 		ptr := v.Args[0]
   7653 		v_1 := v.Args[1]
   7654 		if v_1.Op != Op386ADDLconst {
   7655 			break
   7656 		}
   7657 		d := v_1.AuxInt
   7658 		idx := v_1.Args[0]
   7659 		val := v.Args[2]
   7660 		mem := v.Args[3]
   7661 		v.reset(Op386MOVWstoreidx1)
   7662 		v.AuxInt = int64(int32(c + d))
   7663 		v.Aux = sym
   7664 		v.AddArg(ptr)
   7665 		v.AddArg(idx)
   7666 		v.AddArg(val)
   7667 		v.AddArg(mem)
   7668 		return true
   7669 	}
   7670 	// match: (MOVWstoreidx1 [c] {sym} (ADDLconst [d] idx) ptr val mem)
   7671 	// cond:
   7672 	// result: (MOVWstoreidx1  [int64(int32(c+d))]   {sym} ptr idx val mem)
   7673 	for {
   7674 		c := v.AuxInt
   7675 		sym := v.Aux
   7676 		_ = v.Args[3]
   7677 		v_0 := v.Args[0]
   7678 		if v_0.Op != Op386ADDLconst {
   7679 			break
   7680 		}
   7681 		d := v_0.AuxInt
   7682 		idx := v_0.Args[0]
   7683 		ptr := v.Args[1]
   7684 		val := v.Args[2]
   7685 		mem := v.Args[3]
   7686 		v.reset(Op386MOVWstoreidx1)
   7687 		v.AuxInt = int64(int32(c + d))
   7688 		v.Aux = sym
   7689 		v.AddArg(ptr)
   7690 		v.AddArg(idx)
   7691 		v.AddArg(val)
   7692 		v.AddArg(mem)
   7693 		return true
   7694 	}
   7695 	// match: (MOVWstoreidx1 [i] {s} p idx (SHRLconst [16] w) x:(MOVWstoreidx1 [i-2] {s} p idx w mem))
   7696 	// cond: x.Uses == 1   && clobber(x)
   7697 	// result: (MOVLstoreidx1 [i-2] {s} p idx w mem)
   7698 	for {
   7699 		i := v.AuxInt
   7700 		s := v.Aux
   7701 		_ = v.Args[3]
   7702 		p := v.Args[0]
   7703 		idx := v.Args[1]
   7704 		v_2 := v.Args[2]
   7705 		if v_2.Op != Op386SHRLconst {
   7706 			break
   7707 		}
   7708 		if v_2.AuxInt != 16 {
   7709 			break
   7710 		}
   7711 		w := v_2.Args[0]
   7712 		x := v.Args[3]
   7713 		if x.Op != Op386MOVWstoreidx1 {
   7714 			break
   7715 		}
   7716 		if x.AuxInt != i-2 {
   7717 			break
   7718 		}
   7719 		if x.Aux != s {
   7720 			break
   7721 		}
   7722 		_ = x.Args[3]
   7723 		if p != x.Args[0] {
   7724 			break
   7725 		}
   7726 		if idx != x.Args[1] {
   7727 			break
   7728 		}
   7729 		if w != x.Args[2] {
   7730 			break
   7731 		}
   7732 		mem := x.Args[3]
   7733 		if !(x.Uses == 1 && clobber(x)) {
   7734 			break
   7735 		}
   7736 		v.reset(Op386MOVLstoreidx1)
   7737 		v.AuxInt = i - 2
   7738 		v.Aux = s
   7739 		v.AddArg(p)
   7740 		v.AddArg(idx)
   7741 		v.AddArg(w)
   7742 		v.AddArg(mem)
   7743 		return true
   7744 	}
   7745 	// match: (MOVWstoreidx1 [i] {s} p idx (SHRLconst [16] w) x:(MOVWstoreidx1 [i-2] {s} idx p w mem))
   7746 	// cond: x.Uses == 1   && clobber(x)
   7747 	// result: (MOVLstoreidx1 [i-2] {s} p idx w mem)
   7748 	for {
   7749 		i := v.AuxInt
   7750 		s := v.Aux
   7751 		_ = v.Args[3]
   7752 		p := v.Args[0]
   7753 		idx := v.Args[1]
   7754 		v_2 := v.Args[2]
   7755 		if v_2.Op != Op386SHRLconst {
   7756 			break
   7757 		}
   7758 		if v_2.AuxInt != 16 {
   7759 			break
   7760 		}
   7761 		w := v_2.Args[0]
   7762 		x := v.Args[3]
   7763 		if x.Op != Op386MOVWstoreidx1 {
   7764 			break
   7765 		}
   7766 		if x.AuxInt != i-2 {
   7767 			break
   7768 		}
   7769 		if x.Aux != s {
   7770 			break
   7771 		}
   7772 		_ = x.Args[3]
   7773 		if idx != x.Args[0] {
   7774 			break
   7775 		}
   7776 		if p != x.Args[1] {
   7777 			break
   7778 		}
   7779 		if w != x.Args[2] {
   7780 			break
   7781 		}
   7782 		mem := x.Args[3]
   7783 		if !(x.Uses == 1 && clobber(x)) {
   7784 			break
   7785 		}
   7786 		v.reset(Op386MOVLstoreidx1)
   7787 		v.AuxInt = i - 2
   7788 		v.Aux = s
   7789 		v.AddArg(p)
   7790 		v.AddArg(idx)
   7791 		v.AddArg(w)
   7792 		v.AddArg(mem)
   7793 		return true
   7794 	}
   7795 	// match: (MOVWstoreidx1 [i] {s} idx p (SHRLconst [16] w) x:(MOVWstoreidx1 [i-2] {s} p idx w mem))
   7796 	// cond: x.Uses == 1   && clobber(x)
   7797 	// result: (MOVLstoreidx1 [i-2] {s} p idx w mem)
   7798 	for {
   7799 		i := v.AuxInt
   7800 		s := v.Aux
   7801 		_ = v.Args[3]
   7802 		idx := v.Args[0]
   7803 		p := v.Args[1]
   7804 		v_2 := v.Args[2]
   7805 		if v_2.Op != Op386SHRLconst {
   7806 			break
   7807 		}
   7808 		if v_2.AuxInt != 16 {
   7809 			break
   7810 		}
   7811 		w := v_2.Args[0]
   7812 		x := v.Args[3]
   7813 		if x.Op != Op386MOVWstoreidx1 {
   7814 			break
   7815 		}
   7816 		if x.AuxInt != i-2 {
   7817 			break
   7818 		}
   7819 		if x.Aux != s {
   7820 			break
   7821 		}
   7822 		_ = x.Args[3]
   7823 		if p != x.Args[0] {
   7824 			break
   7825 		}
   7826 		if idx != x.Args[1] {
   7827 			break
   7828 		}
   7829 		if w != x.Args[2] {
   7830 			break
   7831 		}
   7832 		mem := x.Args[3]
   7833 		if !(x.Uses == 1 && clobber(x)) {
   7834 			break
   7835 		}
   7836 		v.reset(Op386MOVLstoreidx1)
   7837 		v.AuxInt = i - 2
   7838 		v.Aux = s
   7839 		v.AddArg(p)
   7840 		v.AddArg(idx)
   7841 		v.AddArg(w)
   7842 		v.AddArg(mem)
   7843 		return true
   7844 	}
   7845 	// match: (MOVWstoreidx1 [i] {s} idx p (SHRLconst [16] w) x:(MOVWstoreidx1 [i-2] {s} idx p w mem))
   7846 	// cond: x.Uses == 1   && clobber(x)
   7847 	// result: (MOVLstoreidx1 [i-2] {s} p idx w mem)
   7848 	for {
   7849 		i := v.AuxInt
   7850 		s := v.Aux
   7851 		_ = v.Args[3]
   7852 		idx := v.Args[0]
   7853 		p := v.Args[1]
   7854 		v_2 := v.Args[2]
   7855 		if v_2.Op != Op386SHRLconst {
   7856 			break
   7857 		}
   7858 		if v_2.AuxInt != 16 {
   7859 			break
   7860 		}
   7861 		w := v_2.Args[0]
   7862 		x := v.Args[3]
   7863 		if x.Op != Op386MOVWstoreidx1 {
   7864 			break
   7865 		}
   7866 		if x.AuxInt != i-2 {
   7867 			break
   7868 		}
   7869 		if x.Aux != s {
   7870 			break
   7871 		}
   7872 		_ = x.Args[3]
   7873 		if idx != x.Args[0] {
   7874 			break
   7875 		}
   7876 		if p != x.Args[1] {
   7877 			break
   7878 		}
   7879 		if w != x.Args[2] {
   7880 			break
   7881 		}
   7882 		mem := x.Args[3]
   7883 		if !(x.Uses == 1 && clobber(x)) {
   7884 			break
   7885 		}
   7886 		v.reset(Op386MOVLstoreidx1)
   7887 		v.AuxInt = i - 2
   7888 		v.Aux = s
   7889 		v.AddArg(p)
   7890 		v.AddArg(idx)
   7891 		v.AddArg(w)
   7892 		v.AddArg(mem)
   7893 		return true
   7894 	}
   7895 	return false
   7896 }
   7897 func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool {
   7898 	// match: (MOVWstoreidx1 [i] {s} p idx (SHRLconst [j] w) x:(MOVWstoreidx1 [i-2] {s} p idx w0:(SHRLconst [j-16] w) mem))
   7899 	// cond: x.Uses == 1   && clobber(x)
   7900 	// result: (MOVLstoreidx1 [i-2] {s} p idx w0 mem)
   7901 	for {
   7902 		i := v.AuxInt
   7903 		s := v.Aux
   7904 		_ = v.Args[3]
   7905 		p := v.Args[0]
   7906 		idx := v.Args[1]
   7907 		v_2 := v.Args[2]
   7908 		if v_2.Op != Op386SHRLconst {
   7909 			break
   7910 		}
   7911 		j := v_2.AuxInt
   7912 		w := v_2.Args[0]
   7913 		x := v.Args[3]
   7914 		if x.Op != Op386MOVWstoreidx1 {
   7915 			break
   7916 		}
   7917 		if x.AuxInt != i-2 {
   7918 			break
   7919 		}
   7920 		if x.Aux != s {
   7921 			break
   7922 		}
   7923 		_ = x.Args[3]
   7924 		if p != x.Args[0] {
   7925 			break
   7926 		}
   7927 		if idx != x.Args[1] {
   7928 			break
   7929 		}
   7930 		w0 := x.Args[2]
   7931 		if w0.Op != Op386SHRLconst {
   7932 			break
   7933 		}
   7934 		if w0.AuxInt != j-16 {
   7935 			break
   7936 		}
   7937 		if w != w0.Args[0] {
   7938 			break
   7939 		}
   7940 		mem := x.Args[3]
   7941 		if !(x.Uses == 1 && clobber(x)) {
   7942 			break
   7943 		}
   7944 		v.reset(Op386MOVLstoreidx1)
   7945 		v.AuxInt = i - 2
   7946 		v.Aux = s
   7947 		v.AddArg(p)
   7948 		v.AddArg(idx)
   7949 		v.AddArg(w0)
   7950 		v.AddArg(mem)
   7951 		return true
   7952 	}
   7953 	// match: (MOVWstoreidx1 [i] {s} p idx (SHRLconst [j] w) x:(MOVWstoreidx1 [i-2] {s} idx p w0:(SHRLconst [j-16] w) mem))
   7954 	// cond: x.Uses == 1   && clobber(x)
   7955 	// result: (MOVLstoreidx1 [i-2] {s} p idx w0 mem)
   7956 	for {
   7957 		i := v.AuxInt
   7958 		s := v.Aux
   7959 		_ = v.Args[3]
   7960 		p := v.Args[0]
   7961 		idx := v.Args[1]
   7962 		v_2 := v.Args[2]
   7963 		if v_2.Op != Op386SHRLconst {
   7964 			break
   7965 		}
   7966 		j := v_2.AuxInt
   7967 		w := v_2.Args[0]
   7968 		x := v.Args[3]
   7969 		if x.Op != Op386MOVWstoreidx1 {
   7970 			break
   7971 		}
   7972 		if x.AuxInt != i-2 {
   7973 			break
   7974 		}
   7975 		if x.Aux != s {
   7976 			break
   7977 		}
   7978 		_ = x.Args[3]
   7979 		if idx != x.Args[0] {
   7980 			break
   7981 		}
   7982 		if p != x.Args[1] {
   7983 			break
   7984 		}
   7985 		w0 := x.Args[2]
   7986 		if w0.Op != Op386SHRLconst {
   7987 			break
   7988 		}
   7989 		if w0.AuxInt != j-16 {
   7990 			break
   7991 		}
   7992 		if w != w0.Args[0] {
   7993 			break
   7994 		}
   7995 		mem := x.Args[3]
   7996 		if !(x.Uses == 1 && clobber(x)) {
   7997 			break
   7998 		}
   7999 		v.reset(Op386MOVLstoreidx1)
   8000 		v.AuxInt = i - 2
   8001 		v.Aux = s
   8002 		v.AddArg(p)
   8003 		v.AddArg(idx)
   8004 		v.AddArg(w0)
   8005 		v.AddArg(mem)
   8006 		return true
   8007 	}
   8008 	// match: (MOVWstoreidx1 [i] {s} idx p (SHRLconst [j] w) x:(MOVWstoreidx1 [i-2] {s} p idx w0:(SHRLconst [j-16] w) mem))
   8009 	// cond: x.Uses == 1   && clobber(x)
   8010 	// result: (MOVLstoreidx1 [i-2] {s} p idx w0 mem)
   8011 	for {
   8012 		i := v.AuxInt
   8013 		s := v.Aux
   8014 		_ = v.Args[3]
   8015 		idx := v.Args[0]
   8016 		p := v.Args[1]
   8017 		v_2 := v.Args[2]
   8018 		if v_2.Op != Op386SHRLconst {
   8019 			break
   8020 		}
   8021 		j := v_2.AuxInt
   8022 		w := v_2.Args[0]
   8023 		x := v.Args[3]
   8024 		if x.Op != Op386MOVWstoreidx1 {
   8025 			break
   8026 		}
   8027 		if x.AuxInt != i-2 {
   8028 			break
   8029 		}
   8030 		if x.Aux != s {
   8031 			break
   8032 		}
   8033 		_ = x.Args[3]
   8034 		if p != x.Args[0] {
   8035 			break
   8036 		}
   8037 		if idx != x.Args[1] {
   8038 			break
   8039 		}
   8040 		w0 := x.Args[2]
   8041 		if w0.Op != Op386SHRLconst {
   8042 			break
   8043 		}
   8044 		if w0.AuxInt != j-16 {
   8045 			break
   8046 		}
   8047 		if w != w0.Args[0] {
   8048 			break
   8049 		}
   8050 		mem := x.Args[3]
   8051 		if !(x.Uses == 1 && clobber(x)) {
   8052 			break
   8053 		}
   8054 		v.reset(Op386MOVLstoreidx1)
   8055 		v.AuxInt = i - 2
   8056 		v.Aux = s
   8057 		v.AddArg(p)
   8058 		v.AddArg(idx)
   8059 		v.AddArg(w0)
   8060 		v.AddArg(mem)
   8061 		return true
   8062 	}
   8063 	// match: (MOVWstoreidx1 [i] {s} idx p (SHRLconst [j] w) x:(MOVWstoreidx1 [i-2] {s} idx p w0:(SHRLconst [j-16] w) mem))
   8064 	// cond: x.Uses == 1   && clobber(x)
   8065 	// result: (MOVLstoreidx1 [i-2] {s} p idx w0 mem)
   8066 	for {
   8067 		i := v.AuxInt
   8068 		s := v.Aux
   8069 		_ = v.Args[3]
   8070 		idx := v.Args[0]
   8071 		p := v.Args[1]
   8072 		v_2 := v.Args[2]
   8073 		if v_2.Op != Op386SHRLconst {
   8074 			break
   8075 		}
   8076 		j := v_2.AuxInt
   8077 		w := v_2.Args[0]
   8078 		x := v.Args[3]
   8079 		if x.Op != Op386MOVWstoreidx1 {
   8080 			break
   8081 		}
   8082 		if x.AuxInt != i-2 {
   8083 			break
   8084 		}
   8085 		if x.Aux != s {
   8086 			break
   8087 		}
   8088 		_ = x.Args[3]
   8089 		if idx != x.Args[0] {
   8090 			break
   8091 		}
   8092 		if p != x.Args[1] {
   8093 			break
   8094 		}
   8095 		w0 := x.Args[2]
   8096 		if w0.Op != Op386SHRLconst {
   8097 			break
   8098 		}
   8099 		if w0.AuxInt != j-16 {
   8100 			break
   8101 		}
   8102 		if w != w0.Args[0] {
   8103 			break
   8104 		}
   8105 		mem := x.Args[3]
   8106 		if !(x.Uses == 1 && clobber(x)) {
   8107 			break
   8108 		}
   8109 		v.reset(Op386MOVLstoreidx1)
   8110 		v.AuxInt = i - 2
   8111 		v.Aux = s
   8112 		v.AddArg(p)
   8113 		v.AddArg(idx)
   8114 		v.AddArg(w0)
   8115 		v.AddArg(mem)
   8116 		return true
   8117 	}
   8118 	return false
   8119 }
   8120 func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool {
   8121 	b := v.Block
   8122 	_ = b
   8123 	// match: (MOVWstoreidx2 [c] {sym} (ADDLconst [d] ptr) idx val mem)
   8124 	// cond:
   8125 	// result: (MOVWstoreidx2 [int64(int32(c+d))] {sym} ptr idx val mem)
   8126 	for {
   8127 		c := v.AuxInt
   8128 		sym := v.Aux
   8129 		_ = v.Args[3]
   8130 		v_0 := v.Args[0]
   8131 		if v_0.Op != Op386ADDLconst {
   8132 			break
   8133 		}
   8134 		d := v_0.AuxInt
   8135 		ptr := v_0.Args[0]
   8136 		idx := v.Args[1]
   8137 		val := v.Args[2]
   8138 		mem := v.Args[3]
   8139 		v.reset(Op386MOVWstoreidx2)
   8140 		v.AuxInt = int64(int32(c + d))
   8141 		v.Aux = sym
   8142 		v.AddArg(ptr)
   8143 		v.AddArg(idx)
   8144 		v.AddArg(val)
   8145 		v.AddArg(mem)
   8146 		return true
   8147 	}
   8148 	// match: (MOVWstoreidx2 [c] {sym} ptr (ADDLconst [d] idx) val mem)
   8149 	// cond:
   8150 	// result: (MOVWstoreidx2  [int64(int32(c+2*d))] {sym} ptr idx val mem)
   8151 	for {
   8152 		c := v.AuxInt
   8153 		sym := v.Aux
   8154 		_ = v.Args[3]
   8155 		ptr := v.Args[0]
   8156 		v_1 := v.Args[1]
   8157 		if v_1.Op != Op386ADDLconst {
   8158 			break
   8159 		}
   8160 		d := v_1.AuxInt
   8161 		idx := v_1.Args[0]
   8162 		val := v.Args[2]
   8163 		mem := v.Args[3]
   8164 		v.reset(Op386MOVWstoreidx2)
   8165 		v.AuxInt = int64(int32(c + 2*d))
   8166 		v.Aux = sym
   8167 		v.AddArg(ptr)
   8168 		v.AddArg(idx)
   8169 		v.AddArg(val)
   8170 		v.AddArg(mem)
   8171 		return true
   8172 	}
   8173 	// match: (MOVWstoreidx2 [i] {s} p idx (SHRLconst [16] w) x:(MOVWstoreidx2 [i-2] {s} p idx w mem))
   8174 	// cond: x.Uses == 1   && clobber(x)
   8175 	// result: (MOVLstoreidx1 [i-2] {s} p (SHLLconst <idx.Type> [1] idx) w mem)
   8176 	for {
   8177 		i := v.AuxInt
   8178 		s := v.Aux
   8179 		_ = v.Args[3]
   8180 		p := v.Args[0]
   8181 		idx := v.Args[1]
   8182 		v_2 := v.Args[2]
   8183 		if v_2.Op != Op386SHRLconst {
   8184 			break
   8185 		}
   8186 		if v_2.AuxInt != 16 {
   8187 			break
   8188 		}
   8189 		w := v_2.Args[0]
   8190 		x := v.Args[3]
   8191 		if x.Op != Op386MOVWstoreidx2 {
   8192 			break
   8193 		}
   8194 		if x.AuxInt != i-2 {
   8195 			break
   8196 		}
   8197 		if x.Aux != s {
   8198 			break
   8199 		}
   8200 		_ = x.Args[3]
   8201 		if p != x.Args[0] {
   8202 			break
   8203 		}
   8204 		if idx != x.Args[1] {
   8205 			break
   8206 		}
   8207 		if w != x.Args[2] {
   8208 			break
   8209 		}
   8210 		mem := x.Args[3]
   8211 		if !(x.Uses == 1 && clobber(x)) {
   8212 			break
   8213 		}
   8214 		v.reset(Op386MOVLstoreidx1)
   8215 		v.AuxInt = i - 2
   8216 		v.Aux = s
   8217 		v.AddArg(p)
   8218 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, idx.Type)
   8219 		v0.AuxInt = 1
   8220 		v0.AddArg(idx)
   8221 		v.AddArg(v0)
   8222 		v.AddArg(w)
   8223 		v.AddArg(mem)
   8224 		return true
   8225 	}
   8226 	// match: (MOVWstoreidx2 [i] {s} p idx (SHRLconst [j] w) x:(MOVWstoreidx2 [i-2] {s} p idx w0:(SHRLconst [j-16] w) mem))
   8227 	// cond: x.Uses == 1   && clobber(x)
   8228 	// result: (MOVLstoreidx1 [i-2] {s} p (SHLLconst <idx.Type> [1] idx) w0 mem)
   8229 	for {
   8230 		i := v.AuxInt
   8231 		s := v.Aux
   8232 		_ = v.Args[3]
   8233 		p := v.Args[0]
   8234 		idx := v.Args[1]
   8235 		v_2 := v.Args[2]
   8236 		if v_2.Op != Op386SHRLconst {
   8237 			break
   8238 		}
   8239 		j := v_2.AuxInt
   8240 		w := v_2.Args[0]
   8241 		x := v.Args[3]
   8242 		if x.Op != Op386MOVWstoreidx2 {
   8243 			break
   8244 		}
   8245 		if x.AuxInt != i-2 {
   8246 			break
   8247 		}
   8248 		if x.Aux != s {
   8249 			break
   8250 		}
   8251 		_ = x.Args[3]
   8252 		if p != x.Args[0] {
   8253 			break
   8254 		}
   8255 		if idx != x.Args[1] {
   8256 			break
   8257 		}
   8258 		w0 := x.Args[2]
   8259 		if w0.Op != Op386SHRLconst {
   8260 			break
   8261 		}
   8262 		if w0.AuxInt != j-16 {
   8263 			break
   8264 		}
   8265 		if w != w0.Args[0] {
   8266 			break
   8267 		}
   8268 		mem := x.Args[3]
   8269 		if !(x.Uses == 1 && clobber(x)) {
   8270 			break
   8271 		}
   8272 		v.reset(Op386MOVLstoreidx1)
   8273 		v.AuxInt = i - 2
   8274 		v.Aux = s
   8275 		v.AddArg(p)
   8276 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, idx.Type)
   8277 		v0.AuxInt = 1
   8278 		v0.AddArg(idx)
   8279 		v.AddArg(v0)
   8280 		v.AddArg(w0)
   8281 		v.AddArg(mem)
   8282 		return true
   8283 	}
   8284 	return false
   8285 }
   8286 func rewriteValue386_Op386MULL_0(v *Value) bool {
   8287 	// match: (MULL x (MOVLconst [c]))
   8288 	// cond:
   8289 	// result: (MULLconst [c] x)
   8290 	for {
   8291 		_ = v.Args[1]
   8292 		x := v.Args[0]
   8293 		v_1 := v.Args[1]
   8294 		if v_1.Op != Op386MOVLconst {
   8295 			break
   8296 		}
   8297 		c := v_1.AuxInt
   8298 		v.reset(Op386MULLconst)
   8299 		v.AuxInt = c
   8300 		v.AddArg(x)
   8301 		return true
   8302 	}
   8303 	// match: (MULL (MOVLconst [c]) x)
   8304 	// cond:
   8305 	// result: (MULLconst [c] x)
   8306 	for {
   8307 		_ = v.Args[1]
   8308 		v_0 := v.Args[0]
   8309 		if v_0.Op != Op386MOVLconst {
   8310 			break
   8311 		}
   8312 		c := v_0.AuxInt
   8313 		x := v.Args[1]
   8314 		v.reset(Op386MULLconst)
   8315 		v.AuxInt = c
   8316 		v.AddArg(x)
   8317 		return true
   8318 	}
   8319 	return false
   8320 }
   8321 func rewriteValue386_Op386MULLconst_0(v *Value) bool {
   8322 	b := v.Block
   8323 	_ = b
   8324 	// match: (MULLconst [c] (MULLconst [d] x))
   8325 	// cond:
   8326 	// result: (MULLconst [int64(int32(c * d))] x)
   8327 	for {
   8328 		c := v.AuxInt
   8329 		v_0 := v.Args[0]
   8330 		if v_0.Op != Op386MULLconst {
   8331 			break
   8332 		}
   8333 		d := v_0.AuxInt
   8334 		x := v_0.Args[0]
   8335 		v.reset(Op386MULLconst)
   8336 		v.AuxInt = int64(int32(c * d))
   8337 		v.AddArg(x)
   8338 		return true
   8339 	}
   8340 	// match: (MULLconst [-1] x)
   8341 	// cond:
   8342 	// result: (NEGL x)
   8343 	for {
   8344 		if v.AuxInt != -1 {
   8345 			break
   8346 		}
   8347 		x := v.Args[0]
   8348 		v.reset(Op386NEGL)
   8349 		v.AddArg(x)
   8350 		return true
   8351 	}
   8352 	// match: (MULLconst [0] _)
   8353 	// cond:
   8354 	// result: (MOVLconst [0])
   8355 	for {
   8356 		if v.AuxInt != 0 {
   8357 			break
   8358 		}
   8359 		v.reset(Op386MOVLconst)
   8360 		v.AuxInt = 0
   8361 		return true
   8362 	}
   8363 	// match: (MULLconst [1] x)
   8364 	// cond:
   8365 	// result: x
   8366 	for {
   8367 		if v.AuxInt != 1 {
   8368 			break
   8369 		}
   8370 		x := v.Args[0]
   8371 		v.reset(OpCopy)
   8372 		v.Type = x.Type
   8373 		v.AddArg(x)
   8374 		return true
   8375 	}
   8376 	// match: (MULLconst [3] x)
   8377 	// cond:
   8378 	// result: (LEAL2 x x)
   8379 	for {
   8380 		if v.AuxInt != 3 {
   8381 			break
   8382 		}
   8383 		x := v.Args[0]
   8384 		v.reset(Op386LEAL2)
   8385 		v.AddArg(x)
   8386 		v.AddArg(x)
   8387 		return true
   8388 	}
   8389 	// match: (MULLconst [5] x)
   8390 	// cond:
   8391 	// result: (LEAL4 x x)
   8392 	for {
   8393 		if v.AuxInt != 5 {
   8394 			break
   8395 		}
   8396 		x := v.Args[0]
   8397 		v.reset(Op386LEAL4)
   8398 		v.AddArg(x)
   8399 		v.AddArg(x)
   8400 		return true
   8401 	}
   8402 	// match: (MULLconst [7] x)
   8403 	// cond:
   8404 	// result: (LEAL8 (NEGL <v.Type> x) x)
   8405 	for {
   8406 		if v.AuxInt != 7 {
   8407 			break
   8408 		}
   8409 		x := v.Args[0]
   8410 		v.reset(Op386LEAL8)
   8411 		v0 := b.NewValue0(v.Pos, Op386NEGL, v.Type)
   8412 		v0.AddArg(x)
   8413 		v.AddArg(v0)
   8414 		v.AddArg(x)
   8415 		return true
   8416 	}
   8417 	// match: (MULLconst [9] x)
   8418 	// cond:
   8419 	// result: (LEAL8 x x)
   8420 	for {
   8421 		if v.AuxInt != 9 {
   8422 			break
   8423 		}
   8424 		x := v.Args[0]
   8425 		v.reset(Op386LEAL8)
   8426 		v.AddArg(x)
   8427 		v.AddArg(x)
   8428 		return true
   8429 	}
   8430 	// match: (MULLconst [11] x)
   8431 	// cond:
   8432 	// result: (LEAL2 x (LEAL4 <v.Type> x x))
   8433 	for {
   8434 		if v.AuxInt != 11 {
   8435 			break
   8436 		}
   8437 		x := v.Args[0]
   8438 		v.reset(Op386LEAL2)
   8439 		v.AddArg(x)
   8440 		v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
   8441 		v0.AddArg(x)
   8442 		v0.AddArg(x)
   8443 		v.AddArg(v0)
   8444 		return true
   8445 	}
   8446 	// match: (MULLconst [13] x)
   8447 	// cond:
   8448 	// result: (LEAL4 x (LEAL2 <v.Type> x x))
   8449 	for {
   8450 		if v.AuxInt != 13 {
   8451 			break
   8452 		}
   8453 		x := v.Args[0]
   8454 		v.reset(Op386LEAL4)
   8455 		v.AddArg(x)
   8456 		v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
   8457 		v0.AddArg(x)
   8458 		v0.AddArg(x)
   8459 		v.AddArg(v0)
   8460 		return true
   8461 	}
   8462 	return false
   8463 }
   8464 func rewriteValue386_Op386MULLconst_10(v *Value) bool {
   8465 	b := v.Block
   8466 	_ = b
   8467 	// match: (MULLconst [21] x)
   8468 	// cond:
   8469 	// result: (LEAL4 x (LEAL4 <v.Type> x x))
   8470 	for {
   8471 		if v.AuxInt != 21 {
   8472 			break
   8473 		}
   8474 		x := v.Args[0]
   8475 		v.reset(Op386LEAL4)
   8476 		v.AddArg(x)
   8477 		v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
   8478 		v0.AddArg(x)
   8479 		v0.AddArg(x)
   8480 		v.AddArg(v0)
   8481 		return true
   8482 	}
   8483 	// match: (MULLconst [25] x)
   8484 	// cond:
   8485 	// result: (LEAL8 x (LEAL2 <v.Type> x x))
   8486 	for {
   8487 		if v.AuxInt != 25 {
   8488 			break
   8489 		}
   8490 		x := v.Args[0]
   8491 		v.reset(Op386LEAL8)
   8492 		v.AddArg(x)
   8493 		v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
   8494 		v0.AddArg(x)
   8495 		v0.AddArg(x)
   8496 		v.AddArg(v0)
   8497 		return true
   8498 	}
   8499 	// match: (MULLconst [37] x)
   8500 	// cond:
   8501 	// result: (LEAL4 x (LEAL8 <v.Type> x x))
   8502 	for {
   8503 		if v.AuxInt != 37 {
   8504 			break
   8505 		}
   8506 		x := v.Args[0]
   8507 		v.reset(Op386LEAL4)
   8508 		v.AddArg(x)
   8509 		v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
   8510 		v0.AddArg(x)
   8511 		v0.AddArg(x)
   8512 		v.AddArg(v0)
   8513 		return true
   8514 	}
   8515 	// match: (MULLconst [41] x)
   8516 	// cond:
   8517 	// result: (LEAL8 x (LEAL4 <v.Type> x x))
   8518 	for {
   8519 		if v.AuxInt != 41 {
   8520 			break
   8521 		}
   8522 		x := v.Args[0]
   8523 		v.reset(Op386LEAL8)
   8524 		v.AddArg(x)
   8525 		v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
   8526 		v0.AddArg(x)
   8527 		v0.AddArg(x)
   8528 		v.AddArg(v0)
   8529 		return true
   8530 	}
   8531 	// match: (MULLconst [73] x)
   8532 	// cond:
   8533 	// result: (LEAL8 x (LEAL8 <v.Type> x x))
   8534 	for {
   8535 		if v.AuxInt != 73 {
   8536 			break
   8537 		}
   8538 		x := v.Args[0]
   8539 		v.reset(Op386LEAL8)
   8540 		v.AddArg(x)
   8541 		v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
   8542 		v0.AddArg(x)
   8543 		v0.AddArg(x)
   8544 		v.AddArg(v0)
   8545 		return true
   8546 	}
   8547 	// match: (MULLconst [c] x)
   8548 	// cond: isPowerOfTwo(c+1) && c >= 15
   8549 	// result: (SUBL (SHLLconst <v.Type> [log2(c+1)] x) x)
   8550 	for {
   8551 		c := v.AuxInt
   8552 		x := v.Args[0]
   8553 		if !(isPowerOfTwo(c+1) && c >= 15) {
   8554 			break
   8555 		}
   8556 		v.reset(Op386SUBL)
   8557 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, v.Type)
   8558 		v0.AuxInt = log2(c + 1)
   8559 		v0.AddArg(x)
   8560 		v.AddArg(v0)
   8561 		v.AddArg(x)
   8562 		return true
   8563 	}
   8564 	// match: (MULLconst [c] x)
   8565 	// cond: isPowerOfTwo(c-1) && c >= 17
   8566 	// result: (LEAL1 (SHLLconst <v.Type> [log2(c-1)] x) x)
   8567 	for {
   8568 		c := v.AuxInt
   8569 		x := v.Args[0]
   8570 		if !(isPowerOfTwo(c-1) && c >= 17) {
   8571 			break
   8572 		}
   8573 		v.reset(Op386LEAL1)
   8574 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, v.Type)
   8575 		v0.AuxInt = log2(c - 1)
   8576 		v0.AddArg(x)
   8577 		v.AddArg(v0)
   8578 		v.AddArg(x)
   8579 		return true
   8580 	}
   8581 	// match: (MULLconst [c] x)
   8582 	// cond: isPowerOfTwo(c-2) && c >= 34
   8583 	// result: (LEAL2 (SHLLconst <v.Type> [log2(c-2)] x) x)
   8584 	for {
   8585 		c := v.AuxInt
   8586 		x := v.Args[0]
   8587 		if !(isPowerOfTwo(c-2) && c >= 34) {
   8588 			break
   8589 		}
   8590 		v.reset(Op386LEAL2)
   8591 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, v.Type)
   8592 		v0.AuxInt = log2(c - 2)
   8593 		v0.AddArg(x)
   8594 		v.AddArg(v0)
   8595 		v.AddArg(x)
   8596 		return true
   8597 	}
   8598 	// match: (MULLconst [c] x)
   8599 	// cond: isPowerOfTwo(c-4) && c >= 68
   8600 	// result: (LEAL4 (SHLLconst <v.Type> [log2(c-4)] x) x)
   8601 	for {
   8602 		c := v.AuxInt
   8603 		x := v.Args[0]
   8604 		if !(isPowerOfTwo(c-4) && c >= 68) {
   8605 			break
   8606 		}
   8607 		v.reset(Op386LEAL4)
   8608 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, v.Type)
   8609 		v0.AuxInt = log2(c - 4)
   8610 		v0.AddArg(x)
   8611 		v.AddArg(v0)
   8612 		v.AddArg(x)
   8613 		return true
   8614 	}
   8615 	// match: (MULLconst [c] x)
   8616 	// cond: isPowerOfTwo(c-8) && c >= 136
   8617 	// result: (LEAL8 (SHLLconst <v.Type> [log2(c-8)] x) x)
   8618 	for {
   8619 		c := v.AuxInt
   8620 		x := v.Args[0]
   8621 		if !(isPowerOfTwo(c-8) && c >= 136) {
   8622 			break
   8623 		}
   8624 		v.reset(Op386LEAL8)
   8625 		v0 := b.NewValue0(v.Pos, Op386SHLLconst, v.Type)
   8626 		v0.AuxInt = log2(c - 8)
   8627 		v0.AddArg(x)
   8628 		v.AddArg(v0)
   8629 		v.AddArg(x)
   8630 		return true
   8631 	}
   8632 	return false
   8633 }
   8634 func rewriteValue386_Op386MULLconst_20(v *Value) bool {
   8635 	b := v.Block
   8636 	_ = b
   8637 	// match: (MULLconst [c] x)
   8638 	// cond: c%3 == 0 && isPowerOfTwo(c/3)
   8639 	// result: (SHLLconst [log2(c/3)] (LEAL2 <v.Type> x x))
   8640 	for {
   8641 		c := v.AuxInt
   8642 		x := v.Args[0]
   8643 		if !(c%3 == 0 && isPowerOfTwo(c/3)) {
   8644 			break
   8645 		}
   8646 		v.reset(Op386SHLLconst)
   8647 		v.AuxInt = log2(c / 3)
   8648 		v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
   8649 		v0.AddArg(x)
   8650 		v0.AddArg(x)
   8651 		v.AddArg(v0)
   8652 		return true
   8653 	}
   8654 	// match: (MULLconst [c] x)
   8655 	// cond: c%5 == 0 && isPowerOfTwo(c/5)
   8656 	// result: (SHLLconst [log2(c/5)] (LEAL4 <v.Type> x x))
   8657 	for {
   8658 		c := v.AuxInt
   8659 		x := v.Args[0]
   8660 		if !(c%5 == 0 && isPowerOfTwo(c/5)) {
   8661 			break
   8662 		}
   8663 		v.reset(Op386SHLLconst)
   8664 		v.AuxInt = log2(c / 5)
   8665 		v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
   8666 		v0.AddArg(x)
   8667 		v0.AddArg(x)
   8668 		v.AddArg(v0)
   8669 		return true
   8670 	}
   8671 	// match: (MULLconst [c] x)
   8672 	// cond: c%9 == 0 && isPowerOfTwo(c/9)
   8673 	// result: (SHLLconst [log2(c/9)] (LEAL8 <v.Type> x x))
   8674 	for {
   8675 		c := v.AuxInt
   8676 		x := v.Args[0]
   8677 		if !(c%9 == 0 && isPowerOfTwo(c/9)) {
   8678 			break
   8679 		}
   8680 		v.reset(Op386SHLLconst)
   8681 		v.AuxInt = log2(c / 9)
   8682 		v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
   8683 		v0.AddArg(x)
   8684 		v0.AddArg(x)
   8685 		v.AddArg(v0)
   8686 		return true
   8687 	}
   8688 	// match: (MULLconst [c] (MOVLconst [d]))
   8689 	// cond:
   8690 	// result: (MOVLconst [int64(int32(c*d))])
   8691 	for {
   8692 		c := v.AuxInt
   8693 		v_0 := v.Args[0]
   8694 		if v_0.Op != Op386MOVLconst {
   8695 			break
   8696 		}
   8697 		d := v_0.AuxInt
   8698 		v.reset(Op386MOVLconst)
   8699 		v.AuxInt = int64(int32(c * d))
   8700 		return true
   8701 	}
   8702 	return false
   8703 }
   8704 func rewriteValue386_Op386NEGL_0(v *Value) bool {
   8705 	// match: (NEGL (MOVLconst [c]))
   8706 	// cond:
   8707 	// result: (MOVLconst [int64(int32(-c))])
   8708 	for {
   8709 		v_0 := v.Args[0]
   8710 		if v_0.Op != Op386MOVLconst {
   8711 			break
   8712 		}
   8713 		c := v_0.AuxInt
   8714 		v.reset(Op386MOVLconst)
   8715 		v.AuxInt = int64(int32(-c))
   8716 		return true
   8717 	}
   8718 	return false
   8719 }
   8720 func rewriteValue386_Op386NOTL_0(v *Value) bool {
   8721 	// match: (NOTL (MOVLconst [c]))
   8722 	// cond:
   8723 	// result: (MOVLconst [^c])
   8724 	for {
   8725 		v_0 := v.Args[0]
   8726 		if v_0.Op != Op386MOVLconst {
   8727 			break
   8728 		}
   8729 		c := v_0.AuxInt
   8730 		v.reset(Op386MOVLconst)
   8731 		v.AuxInt = ^c
   8732 		return true
   8733 	}
   8734 	return false
   8735 }
   8736 func rewriteValue386_Op386ORL_0(v *Value) bool {
   8737 	b := v.Block
   8738 	_ = b
   8739 	typ := &b.Func.Config.Types
   8740 	_ = typ
   8741 	// match: (ORL x (MOVLconst [c]))
   8742 	// cond:
   8743 	// result: (ORLconst [c] x)
   8744 	for {
   8745 		_ = v.Args[1]
   8746 		x := v.Args[0]
   8747 		v_1 := v.Args[1]
   8748 		if v_1.Op != Op386MOVLconst {
   8749 			break
   8750 		}
   8751 		c := v_1.AuxInt
   8752 		v.reset(Op386ORLconst)
   8753 		v.AuxInt = c
   8754 		v.AddArg(x)
   8755 		return true
   8756 	}
   8757 	// match: (ORL (MOVLconst [c]) x)
   8758 	// cond:
   8759 	// result: (ORLconst [c] x)
   8760 	for {
   8761 		_ = v.Args[1]
   8762 		v_0 := v.Args[0]
   8763 		if v_0.Op != Op386MOVLconst {
   8764 			break
   8765 		}
   8766 		c := v_0.AuxInt
   8767 		x := v.Args[1]
   8768 		v.reset(Op386ORLconst)
   8769 		v.AuxInt = c
   8770 		v.AddArg(x)
   8771 		return true
   8772 	}
   8773 	// match: (ORL (SHLLconst [c] x) (SHRLconst [d] x))
   8774 	// cond: d == 32-c
   8775 	// result: (ROLLconst [c] x)
   8776 	for {
   8777 		_ = v.Args[1]
   8778 		v_0 := v.Args[0]
   8779 		if v_0.Op != Op386SHLLconst {
   8780 			break
   8781 		}
   8782 		c := v_0.AuxInt
   8783 		x := v_0.Args[0]
   8784 		v_1 := v.Args[1]
   8785 		if v_1.Op != Op386SHRLconst {
   8786 			break
   8787 		}
   8788 		d := v_1.AuxInt
   8789 		if x != v_1.Args[0] {
   8790 			break
   8791 		}
   8792 		if !(d == 32-c) {
   8793 			break
   8794 		}
   8795 		v.reset(Op386ROLLconst)
   8796 		v.AuxInt = c
   8797 		v.AddArg(x)
   8798 		return true
   8799 	}
   8800 	// match: (ORL (SHRLconst [d] x) (SHLLconst [c] x))
   8801 	// cond: d == 32-c
   8802 	// result: (ROLLconst [c] x)
   8803 	for {
   8804 		_ = v.Args[1]
   8805 		v_0 := v.Args[0]
   8806 		if v_0.Op != Op386SHRLconst {
   8807 			break
   8808 		}
   8809 		d := v_0.AuxInt
   8810 		x := v_0.Args[0]
   8811 		v_1 := v.Args[1]
   8812 		if v_1.Op != Op386SHLLconst {
   8813 			break
   8814 		}
   8815 		c := v_1.AuxInt
   8816 		if x != v_1.Args[0] {
   8817 			break
   8818 		}
   8819 		if !(d == 32-c) {
   8820 			break
   8821 		}
   8822 		v.reset(Op386ROLLconst)
   8823 		v.AuxInt = c
   8824 		v.AddArg(x)
   8825 		return true
   8826 	}
   8827 	// match: (ORL <t> (SHLLconst x [c]) (SHRWconst x [d]))
   8828 	// cond: c < 16 && d == 16-c && t.Size() == 2
   8829 	// result: (ROLWconst x [c])
   8830 	for {
   8831 		t := v.Type
   8832 		_ = v.Args[1]
   8833 		v_0 := v.Args[0]
   8834 		if v_0.Op != Op386SHLLconst {
   8835 			break
   8836 		}
   8837 		c := v_0.AuxInt
   8838 		x := v_0.Args[0]
   8839 		v_1 := v.Args[1]
   8840 		if v_1.Op != Op386SHRWconst {
   8841 			break
   8842 		}
   8843 		d := v_1.AuxInt
   8844 		if x != v_1.Args[0] {
   8845 			break
   8846 		}
   8847 		if !(c < 16 && d == 16-c && t.Size() == 2) {
   8848 			break
   8849 		}
   8850 		v.reset(Op386ROLWconst)
   8851 		v.AuxInt = c
   8852 		v.AddArg(x)
   8853 		return true
   8854 	}
   8855 	// match: (ORL <t> (SHRWconst x [d]) (SHLLconst x [c]))
   8856 	// cond: c < 16 && d == 16-c && t.Size() == 2
   8857 	// result: (ROLWconst x [c])
   8858 	for {
   8859 		t := v.Type
   8860 		_ = v.Args[1]
   8861 		v_0 := v.Args[0]
   8862 		if v_0.Op != Op386SHRWconst {
   8863 			break
   8864 		}
   8865 		d := v_0.AuxInt
   8866 		x := v_0.Args[0]
   8867 		v_1 := v.Args[1]
   8868 		if v_1.Op != Op386SHLLconst {
   8869 			break
   8870 		}
   8871 		c := v_1.AuxInt
   8872 		if x != v_1.Args[0] {
   8873 			break
   8874 		}
   8875 		if !(c < 16 && d == 16-c && t.Size() == 2) {
   8876 			break
   8877 		}
   8878 		v.reset(Op386ROLWconst)
   8879 		v.AuxInt = c
   8880 		v.AddArg(x)
   8881 		return true
   8882 	}
   8883 	// match: (ORL <t> (SHLLconst x [c]) (SHRBconst x [d]))
   8884 	// cond: c < 8 && d == 8-c && t.Size() == 1
   8885 	// result: (ROLBconst x [c])
   8886 	for {
   8887 		t := v.Type
   8888 		_ = v.Args[1]
   8889 		v_0 := v.Args[0]
   8890 		if v_0.Op != Op386SHLLconst {
   8891 			break
   8892 		}
   8893 		c := v_0.AuxInt
   8894 		x := v_0.Args[0]
   8895 		v_1 := v.Args[1]
   8896 		if v_1.Op != Op386SHRBconst {
   8897 			break
   8898 		}
   8899 		d := v_1.AuxInt
   8900 		if x != v_1.Args[0] {
   8901 			break
   8902 		}
   8903 		if !(c < 8 && d == 8-c && t.Size() == 1) {
   8904 			break
   8905 		}
   8906 		v.reset(Op386ROLBconst)
   8907 		v.AuxInt = c
   8908 		v.AddArg(x)
   8909 		return true
   8910 	}
   8911 	// match: (ORL <t> (SHRBconst x [d]) (SHLLconst x [c]))
   8912 	// cond: c < 8 && d == 8-c && t.Size() == 1
   8913 	// result: (ROLBconst x [c])
   8914 	for {
   8915 		t := v.Type
   8916 		_ = v.Args[1]
   8917 		v_0 := v.Args[0]
   8918 		if v_0.Op != Op386SHRBconst {
   8919 			break
   8920 		}
   8921 		d := v_0.AuxInt
   8922 		x := v_0.Args[0]
   8923 		v_1 := v.Args[1]
   8924 		if v_1.Op != Op386SHLLconst {
   8925 			break
   8926 		}
   8927 		c := v_1.AuxInt
   8928 		if x != v_1.Args[0] {
   8929 			break
   8930 		}
   8931 		if !(c < 8 && d == 8-c && t.Size() == 1) {
   8932 			break
   8933 		}
   8934 		v.reset(Op386ROLBconst)
   8935 		v.AuxInt = c
   8936 		v.AddArg(x)
   8937 		return true
   8938 	}
   8939 	// match: (ORL x x)
   8940 	// cond:
   8941 	// result: x
   8942 	for {
   8943 		_ = v.Args[1]
   8944 		x := v.Args[0]
   8945 		if x != v.Args[1] {
   8946 			break
   8947 		}
   8948 		v.reset(OpCopy)
   8949 		v.Type = x.Type
   8950 		v.AddArg(x)
   8951 		return true
   8952 	}
   8953 	// match: (ORL x0:(MOVBload [i0] {s} p mem) s0:(SHLLconst [8] x1:(MOVBload [i1] {s} p mem)))
   8954 	// cond: i1 == i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   8955 	// result: @mergePoint(b,x0,x1) (MOVWload [i0] {s} p mem)
   8956 	for {
   8957 		_ = v.Args[1]
   8958 		x0 := v.Args[0]
   8959 		if x0.Op != Op386MOVBload {
   8960 			break
   8961 		}
   8962 		i0 := x0.AuxInt
   8963 		s := x0.Aux
   8964 		_ = x0.Args[1]
   8965 		p := x0.Args[0]
   8966 		mem := x0.Args[1]
   8967 		s0 := v.Args[1]
   8968 		if s0.Op != Op386SHLLconst {
   8969 			break
   8970 		}
   8971 		if s0.AuxInt != 8 {
   8972 			break
   8973 		}
   8974 		x1 := s0.Args[0]
   8975 		if x1.Op != Op386MOVBload {
   8976 			break
   8977 		}
   8978 		i1 := x1.AuxInt
   8979 		if x1.Aux != s {
   8980 			break
   8981 		}
   8982 		_ = x1.Args[1]
   8983 		if p != x1.Args[0] {
   8984 			break
   8985 		}
   8986 		if mem != x1.Args[1] {
   8987 			break
   8988 		}
   8989 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   8990 			break
   8991 		}
   8992 		b = mergePoint(b, x0, x1)
   8993 		v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16)
   8994 		v.reset(OpCopy)
   8995 		v.AddArg(v0)
   8996 		v0.AuxInt = i0
   8997 		v0.Aux = s
   8998 		v0.AddArg(p)
   8999 		v0.AddArg(mem)
   9000 		return true
   9001 	}
   9002 	return false
   9003 }
   9004 func rewriteValue386_Op386ORL_10(v *Value) bool {
   9005 	b := v.Block
   9006 	_ = b
   9007 	typ := &b.Func.Config.Types
   9008 	_ = typ
   9009 	// match: (ORL s0:(SHLLconst [8] x1:(MOVBload [i1] {s} p mem)) x0:(MOVBload [i0] {s} p mem))
   9010 	// cond: i1 == i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9011 	// result: @mergePoint(b,x0,x1) (MOVWload [i0] {s} p mem)
   9012 	for {
   9013 		_ = v.Args[1]
   9014 		s0 := v.Args[0]
   9015 		if s0.Op != Op386SHLLconst {
   9016 			break
   9017 		}
   9018 		if s0.AuxInt != 8 {
   9019 			break
   9020 		}
   9021 		x1 := s0.Args[0]
   9022 		if x1.Op != Op386MOVBload {
   9023 			break
   9024 		}
   9025 		i1 := x1.AuxInt
   9026 		s := x1.Aux
   9027 		_ = x1.Args[1]
   9028 		p := x1.Args[0]
   9029 		mem := x1.Args[1]
   9030 		x0 := v.Args[1]
   9031 		if x0.Op != Op386MOVBload {
   9032 			break
   9033 		}
   9034 		i0 := x0.AuxInt
   9035 		if x0.Aux != s {
   9036 			break
   9037 		}
   9038 		_ = x0.Args[1]
   9039 		if p != x0.Args[0] {
   9040 			break
   9041 		}
   9042 		if mem != x0.Args[1] {
   9043 			break
   9044 		}
   9045 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9046 			break
   9047 		}
   9048 		b = mergePoint(b, x0, x1)
   9049 		v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16)
   9050 		v.reset(OpCopy)
   9051 		v.AddArg(v0)
   9052 		v0.AuxInt = i0
   9053 		v0.Aux = s
   9054 		v0.AddArg(p)
   9055 		v0.AddArg(mem)
   9056 		return true
   9057 	}
   9058 	// match: (ORL o0:(ORL x0:(MOVWload [i0] {s} p mem) s0:(SHLLconst [16] x1:(MOVBload [i2] {s} p mem))) s1:(SHLLconst [24] x2:(MOVBload [i3] {s} p mem)))
   9059 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9060 	// result: @mergePoint(b,x0,x1,x2) (MOVLload [i0] {s} p mem)
   9061 	for {
   9062 		_ = v.Args[1]
   9063 		o0 := v.Args[0]
   9064 		if o0.Op != Op386ORL {
   9065 			break
   9066 		}
   9067 		_ = o0.Args[1]
   9068 		x0 := o0.Args[0]
   9069 		if x0.Op != Op386MOVWload {
   9070 			break
   9071 		}
   9072 		i0 := x0.AuxInt
   9073 		s := x0.Aux
   9074 		_ = x0.Args[1]
   9075 		p := x0.Args[0]
   9076 		mem := x0.Args[1]
   9077 		s0 := o0.Args[1]
   9078 		if s0.Op != Op386SHLLconst {
   9079 			break
   9080 		}
   9081 		if s0.AuxInt != 16 {
   9082 			break
   9083 		}
   9084 		x1 := s0.Args[0]
   9085 		if x1.Op != Op386MOVBload {
   9086 			break
   9087 		}
   9088 		i2 := x1.AuxInt
   9089 		if x1.Aux != s {
   9090 			break
   9091 		}
   9092 		_ = x1.Args[1]
   9093 		if p != x1.Args[0] {
   9094 			break
   9095 		}
   9096 		if mem != x1.Args[1] {
   9097 			break
   9098 		}
   9099 		s1 := v.Args[1]
   9100 		if s1.Op != Op386SHLLconst {
   9101 			break
   9102 		}
   9103 		if s1.AuxInt != 24 {
   9104 			break
   9105 		}
   9106 		x2 := s1.Args[0]
   9107 		if x2.Op != Op386MOVBload {
   9108 			break
   9109 		}
   9110 		i3 := x2.AuxInt
   9111 		if x2.Aux != s {
   9112 			break
   9113 		}
   9114 		_ = x2.Args[1]
   9115 		if p != x2.Args[0] {
   9116 			break
   9117 		}
   9118 		if mem != x2.Args[1] {
   9119 			break
   9120 		}
   9121 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9122 			break
   9123 		}
   9124 		b = mergePoint(b, x0, x1, x2)
   9125 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   9126 		v.reset(OpCopy)
   9127 		v.AddArg(v0)
   9128 		v0.AuxInt = i0
   9129 		v0.Aux = s
   9130 		v0.AddArg(p)
   9131 		v0.AddArg(mem)
   9132 		return true
   9133 	}
   9134 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBload [i2] {s} p mem)) x0:(MOVWload [i0] {s} p mem)) s1:(SHLLconst [24] x2:(MOVBload [i3] {s} p mem)))
   9135 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9136 	// result: @mergePoint(b,x0,x1,x2) (MOVLload [i0] {s} p mem)
   9137 	for {
   9138 		_ = v.Args[1]
   9139 		o0 := v.Args[0]
   9140 		if o0.Op != Op386ORL {
   9141 			break
   9142 		}
   9143 		_ = o0.Args[1]
   9144 		s0 := o0.Args[0]
   9145 		if s0.Op != Op386SHLLconst {
   9146 			break
   9147 		}
   9148 		if s0.AuxInt != 16 {
   9149 			break
   9150 		}
   9151 		x1 := s0.Args[0]
   9152 		if x1.Op != Op386MOVBload {
   9153 			break
   9154 		}
   9155 		i2 := x1.AuxInt
   9156 		s := x1.Aux
   9157 		_ = x1.Args[1]
   9158 		p := x1.Args[0]
   9159 		mem := x1.Args[1]
   9160 		x0 := o0.Args[1]
   9161 		if x0.Op != Op386MOVWload {
   9162 			break
   9163 		}
   9164 		i0 := x0.AuxInt
   9165 		if x0.Aux != s {
   9166 			break
   9167 		}
   9168 		_ = x0.Args[1]
   9169 		if p != x0.Args[0] {
   9170 			break
   9171 		}
   9172 		if mem != x0.Args[1] {
   9173 			break
   9174 		}
   9175 		s1 := v.Args[1]
   9176 		if s1.Op != Op386SHLLconst {
   9177 			break
   9178 		}
   9179 		if s1.AuxInt != 24 {
   9180 			break
   9181 		}
   9182 		x2 := s1.Args[0]
   9183 		if x2.Op != Op386MOVBload {
   9184 			break
   9185 		}
   9186 		i3 := x2.AuxInt
   9187 		if x2.Aux != s {
   9188 			break
   9189 		}
   9190 		_ = x2.Args[1]
   9191 		if p != x2.Args[0] {
   9192 			break
   9193 		}
   9194 		if mem != x2.Args[1] {
   9195 			break
   9196 		}
   9197 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9198 			break
   9199 		}
   9200 		b = mergePoint(b, x0, x1, x2)
   9201 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   9202 		v.reset(OpCopy)
   9203 		v.AddArg(v0)
   9204 		v0.AuxInt = i0
   9205 		v0.Aux = s
   9206 		v0.AddArg(p)
   9207 		v0.AddArg(mem)
   9208 		return true
   9209 	}
   9210 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBload [i3] {s} p mem)) o0:(ORL x0:(MOVWload [i0] {s} p mem) s0:(SHLLconst [16] x1:(MOVBload [i2] {s} p mem))))
   9211 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9212 	// result: @mergePoint(b,x0,x1,x2) (MOVLload [i0] {s} p mem)
   9213 	for {
   9214 		_ = v.Args[1]
   9215 		s1 := v.Args[0]
   9216 		if s1.Op != Op386SHLLconst {
   9217 			break
   9218 		}
   9219 		if s1.AuxInt != 24 {
   9220 			break
   9221 		}
   9222 		x2 := s1.Args[0]
   9223 		if x2.Op != Op386MOVBload {
   9224 			break
   9225 		}
   9226 		i3 := x2.AuxInt
   9227 		s := x2.Aux
   9228 		_ = x2.Args[1]
   9229 		p := x2.Args[0]
   9230 		mem := x2.Args[1]
   9231 		o0 := v.Args[1]
   9232 		if o0.Op != Op386ORL {
   9233 			break
   9234 		}
   9235 		_ = o0.Args[1]
   9236 		x0 := o0.Args[0]
   9237 		if x0.Op != Op386MOVWload {
   9238 			break
   9239 		}
   9240 		i0 := x0.AuxInt
   9241 		if x0.Aux != s {
   9242 			break
   9243 		}
   9244 		_ = x0.Args[1]
   9245 		if p != x0.Args[0] {
   9246 			break
   9247 		}
   9248 		if mem != x0.Args[1] {
   9249 			break
   9250 		}
   9251 		s0 := o0.Args[1]
   9252 		if s0.Op != Op386SHLLconst {
   9253 			break
   9254 		}
   9255 		if s0.AuxInt != 16 {
   9256 			break
   9257 		}
   9258 		x1 := s0.Args[0]
   9259 		if x1.Op != Op386MOVBload {
   9260 			break
   9261 		}
   9262 		i2 := x1.AuxInt
   9263 		if x1.Aux != s {
   9264 			break
   9265 		}
   9266 		_ = x1.Args[1]
   9267 		if p != x1.Args[0] {
   9268 			break
   9269 		}
   9270 		if mem != x1.Args[1] {
   9271 			break
   9272 		}
   9273 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9274 			break
   9275 		}
   9276 		b = mergePoint(b, x0, x1, x2)
   9277 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   9278 		v.reset(OpCopy)
   9279 		v.AddArg(v0)
   9280 		v0.AuxInt = i0
   9281 		v0.Aux = s
   9282 		v0.AddArg(p)
   9283 		v0.AddArg(mem)
   9284 		return true
   9285 	}
   9286 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBload [i3] {s} p mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBload [i2] {s} p mem)) x0:(MOVWload [i0] {s} p mem)))
   9287 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9288 	// result: @mergePoint(b,x0,x1,x2) (MOVLload [i0] {s} p mem)
   9289 	for {
   9290 		_ = v.Args[1]
   9291 		s1 := v.Args[0]
   9292 		if s1.Op != Op386SHLLconst {
   9293 			break
   9294 		}
   9295 		if s1.AuxInt != 24 {
   9296 			break
   9297 		}
   9298 		x2 := s1.Args[0]
   9299 		if x2.Op != Op386MOVBload {
   9300 			break
   9301 		}
   9302 		i3 := x2.AuxInt
   9303 		s := x2.Aux
   9304 		_ = x2.Args[1]
   9305 		p := x2.Args[0]
   9306 		mem := x2.Args[1]
   9307 		o0 := v.Args[1]
   9308 		if o0.Op != Op386ORL {
   9309 			break
   9310 		}
   9311 		_ = o0.Args[1]
   9312 		s0 := o0.Args[0]
   9313 		if s0.Op != Op386SHLLconst {
   9314 			break
   9315 		}
   9316 		if s0.AuxInt != 16 {
   9317 			break
   9318 		}
   9319 		x1 := s0.Args[0]
   9320 		if x1.Op != Op386MOVBload {
   9321 			break
   9322 		}
   9323 		i2 := x1.AuxInt
   9324 		if x1.Aux != s {
   9325 			break
   9326 		}
   9327 		_ = x1.Args[1]
   9328 		if p != x1.Args[0] {
   9329 			break
   9330 		}
   9331 		if mem != x1.Args[1] {
   9332 			break
   9333 		}
   9334 		x0 := o0.Args[1]
   9335 		if x0.Op != Op386MOVWload {
   9336 			break
   9337 		}
   9338 		i0 := x0.AuxInt
   9339 		if x0.Aux != s {
   9340 			break
   9341 		}
   9342 		_ = x0.Args[1]
   9343 		if p != x0.Args[0] {
   9344 			break
   9345 		}
   9346 		if mem != x0.Args[1] {
   9347 			break
   9348 		}
   9349 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9350 			break
   9351 		}
   9352 		b = mergePoint(b, x0, x1, x2)
   9353 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   9354 		v.reset(OpCopy)
   9355 		v.AddArg(v0)
   9356 		v0.AuxInt = i0
   9357 		v0.Aux = s
   9358 		v0.AddArg(p)
   9359 		v0.AddArg(mem)
   9360 		return true
   9361 	}
   9362 	// match: (ORL x0:(MOVBloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem)))
   9363 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9364 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9365 	for {
   9366 		_ = v.Args[1]
   9367 		x0 := v.Args[0]
   9368 		if x0.Op != Op386MOVBloadidx1 {
   9369 			break
   9370 		}
   9371 		i0 := x0.AuxInt
   9372 		s := x0.Aux
   9373 		_ = x0.Args[2]
   9374 		p := x0.Args[0]
   9375 		idx := x0.Args[1]
   9376 		mem := x0.Args[2]
   9377 		s0 := v.Args[1]
   9378 		if s0.Op != Op386SHLLconst {
   9379 			break
   9380 		}
   9381 		if s0.AuxInt != 8 {
   9382 			break
   9383 		}
   9384 		x1 := s0.Args[0]
   9385 		if x1.Op != Op386MOVBloadidx1 {
   9386 			break
   9387 		}
   9388 		i1 := x1.AuxInt
   9389 		if x1.Aux != s {
   9390 			break
   9391 		}
   9392 		_ = x1.Args[2]
   9393 		if p != x1.Args[0] {
   9394 			break
   9395 		}
   9396 		if idx != x1.Args[1] {
   9397 			break
   9398 		}
   9399 		if mem != x1.Args[2] {
   9400 			break
   9401 		}
   9402 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9403 			break
   9404 		}
   9405 		b = mergePoint(b, x0, x1)
   9406 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9407 		v.reset(OpCopy)
   9408 		v.AddArg(v0)
   9409 		v0.AuxInt = i0
   9410 		v0.Aux = s
   9411 		v0.AddArg(p)
   9412 		v0.AddArg(idx)
   9413 		v0.AddArg(mem)
   9414 		return true
   9415 	}
   9416 	// match: (ORL x0:(MOVBloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem)))
   9417 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9418 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9419 	for {
   9420 		_ = v.Args[1]
   9421 		x0 := v.Args[0]
   9422 		if x0.Op != Op386MOVBloadidx1 {
   9423 			break
   9424 		}
   9425 		i0 := x0.AuxInt
   9426 		s := x0.Aux
   9427 		_ = x0.Args[2]
   9428 		idx := x0.Args[0]
   9429 		p := x0.Args[1]
   9430 		mem := x0.Args[2]
   9431 		s0 := v.Args[1]
   9432 		if s0.Op != Op386SHLLconst {
   9433 			break
   9434 		}
   9435 		if s0.AuxInt != 8 {
   9436 			break
   9437 		}
   9438 		x1 := s0.Args[0]
   9439 		if x1.Op != Op386MOVBloadidx1 {
   9440 			break
   9441 		}
   9442 		i1 := x1.AuxInt
   9443 		if x1.Aux != s {
   9444 			break
   9445 		}
   9446 		_ = x1.Args[2]
   9447 		if p != x1.Args[0] {
   9448 			break
   9449 		}
   9450 		if idx != x1.Args[1] {
   9451 			break
   9452 		}
   9453 		if mem != x1.Args[2] {
   9454 			break
   9455 		}
   9456 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9457 			break
   9458 		}
   9459 		b = mergePoint(b, x0, x1)
   9460 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9461 		v.reset(OpCopy)
   9462 		v.AddArg(v0)
   9463 		v0.AuxInt = i0
   9464 		v0.Aux = s
   9465 		v0.AddArg(p)
   9466 		v0.AddArg(idx)
   9467 		v0.AddArg(mem)
   9468 		return true
   9469 	}
   9470 	// match: (ORL x0:(MOVBloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} idx p mem)))
   9471 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9472 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9473 	for {
   9474 		_ = v.Args[1]
   9475 		x0 := v.Args[0]
   9476 		if x0.Op != Op386MOVBloadidx1 {
   9477 			break
   9478 		}
   9479 		i0 := x0.AuxInt
   9480 		s := x0.Aux
   9481 		_ = x0.Args[2]
   9482 		p := x0.Args[0]
   9483 		idx := x0.Args[1]
   9484 		mem := x0.Args[2]
   9485 		s0 := v.Args[1]
   9486 		if s0.Op != Op386SHLLconst {
   9487 			break
   9488 		}
   9489 		if s0.AuxInt != 8 {
   9490 			break
   9491 		}
   9492 		x1 := s0.Args[0]
   9493 		if x1.Op != Op386MOVBloadidx1 {
   9494 			break
   9495 		}
   9496 		i1 := x1.AuxInt
   9497 		if x1.Aux != s {
   9498 			break
   9499 		}
   9500 		_ = x1.Args[2]
   9501 		if idx != x1.Args[0] {
   9502 			break
   9503 		}
   9504 		if p != x1.Args[1] {
   9505 			break
   9506 		}
   9507 		if mem != x1.Args[2] {
   9508 			break
   9509 		}
   9510 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9511 			break
   9512 		}
   9513 		b = mergePoint(b, x0, x1)
   9514 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9515 		v.reset(OpCopy)
   9516 		v.AddArg(v0)
   9517 		v0.AuxInt = i0
   9518 		v0.Aux = s
   9519 		v0.AddArg(p)
   9520 		v0.AddArg(idx)
   9521 		v0.AddArg(mem)
   9522 		return true
   9523 	}
   9524 	// match: (ORL x0:(MOVBloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} idx p mem)))
   9525 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9526 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9527 	for {
   9528 		_ = v.Args[1]
   9529 		x0 := v.Args[0]
   9530 		if x0.Op != Op386MOVBloadidx1 {
   9531 			break
   9532 		}
   9533 		i0 := x0.AuxInt
   9534 		s := x0.Aux
   9535 		_ = x0.Args[2]
   9536 		idx := x0.Args[0]
   9537 		p := x0.Args[1]
   9538 		mem := x0.Args[2]
   9539 		s0 := v.Args[1]
   9540 		if s0.Op != Op386SHLLconst {
   9541 			break
   9542 		}
   9543 		if s0.AuxInt != 8 {
   9544 			break
   9545 		}
   9546 		x1 := s0.Args[0]
   9547 		if x1.Op != Op386MOVBloadidx1 {
   9548 			break
   9549 		}
   9550 		i1 := x1.AuxInt
   9551 		if x1.Aux != s {
   9552 			break
   9553 		}
   9554 		_ = x1.Args[2]
   9555 		if idx != x1.Args[0] {
   9556 			break
   9557 		}
   9558 		if p != x1.Args[1] {
   9559 			break
   9560 		}
   9561 		if mem != x1.Args[2] {
   9562 			break
   9563 		}
   9564 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9565 			break
   9566 		}
   9567 		b = mergePoint(b, x0, x1)
   9568 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9569 		v.reset(OpCopy)
   9570 		v.AddArg(v0)
   9571 		v0.AuxInt = i0
   9572 		v0.Aux = s
   9573 		v0.AddArg(p)
   9574 		v0.AddArg(idx)
   9575 		v0.AddArg(mem)
   9576 		return true
   9577 	}
   9578 	// match: (ORL s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem)) x0:(MOVBloadidx1 [i0] {s} p idx mem))
   9579 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9580 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9581 	for {
   9582 		_ = v.Args[1]
   9583 		s0 := v.Args[0]
   9584 		if s0.Op != Op386SHLLconst {
   9585 			break
   9586 		}
   9587 		if s0.AuxInt != 8 {
   9588 			break
   9589 		}
   9590 		x1 := s0.Args[0]
   9591 		if x1.Op != Op386MOVBloadidx1 {
   9592 			break
   9593 		}
   9594 		i1 := x1.AuxInt
   9595 		s := x1.Aux
   9596 		_ = x1.Args[2]
   9597 		p := x1.Args[0]
   9598 		idx := x1.Args[1]
   9599 		mem := x1.Args[2]
   9600 		x0 := v.Args[1]
   9601 		if x0.Op != Op386MOVBloadidx1 {
   9602 			break
   9603 		}
   9604 		i0 := x0.AuxInt
   9605 		if x0.Aux != s {
   9606 			break
   9607 		}
   9608 		_ = x0.Args[2]
   9609 		if p != x0.Args[0] {
   9610 			break
   9611 		}
   9612 		if idx != x0.Args[1] {
   9613 			break
   9614 		}
   9615 		if mem != x0.Args[2] {
   9616 			break
   9617 		}
   9618 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9619 			break
   9620 		}
   9621 		b = mergePoint(b, x0, x1)
   9622 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9623 		v.reset(OpCopy)
   9624 		v.AddArg(v0)
   9625 		v0.AuxInt = i0
   9626 		v0.Aux = s
   9627 		v0.AddArg(p)
   9628 		v0.AddArg(idx)
   9629 		v0.AddArg(mem)
   9630 		return true
   9631 	}
   9632 	return false
   9633 }
   9634 func rewriteValue386_Op386ORL_20(v *Value) bool {
   9635 	b := v.Block
   9636 	_ = b
   9637 	// match: (ORL s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} idx p mem)) x0:(MOVBloadidx1 [i0] {s} p idx mem))
   9638 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9639 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9640 	for {
   9641 		_ = v.Args[1]
   9642 		s0 := v.Args[0]
   9643 		if s0.Op != Op386SHLLconst {
   9644 			break
   9645 		}
   9646 		if s0.AuxInt != 8 {
   9647 			break
   9648 		}
   9649 		x1 := s0.Args[0]
   9650 		if x1.Op != Op386MOVBloadidx1 {
   9651 			break
   9652 		}
   9653 		i1 := x1.AuxInt
   9654 		s := x1.Aux
   9655 		_ = x1.Args[2]
   9656 		idx := x1.Args[0]
   9657 		p := x1.Args[1]
   9658 		mem := x1.Args[2]
   9659 		x0 := v.Args[1]
   9660 		if x0.Op != Op386MOVBloadidx1 {
   9661 			break
   9662 		}
   9663 		i0 := x0.AuxInt
   9664 		if x0.Aux != s {
   9665 			break
   9666 		}
   9667 		_ = x0.Args[2]
   9668 		if p != x0.Args[0] {
   9669 			break
   9670 		}
   9671 		if idx != x0.Args[1] {
   9672 			break
   9673 		}
   9674 		if mem != x0.Args[2] {
   9675 			break
   9676 		}
   9677 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9678 			break
   9679 		}
   9680 		b = mergePoint(b, x0, x1)
   9681 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9682 		v.reset(OpCopy)
   9683 		v.AddArg(v0)
   9684 		v0.AuxInt = i0
   9685 		v0.Aux = s
   9686 		v0.AddArg(p)
   9687 		v0.AddArg(idx)
   9688 		v0.AddArg(mem)
   9689 		return true
   9690 	}
   9691 	// match: (ORL s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem)) x0:(MOVBloadidx1 [i0] {s} idx p mem))
   9692 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9693 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9694 	for {
   9695 		_ = v.Args[1]
   9696 		s0 := v.Args[0]
   9697 		if s0.Op != Op386SHLLconst {
   9698 			break
   9699 		}
   9700 		if s0.AuxInt != 8 {
   9701 			break
   9702 		}
   9703 		x1 := s0.Args[0]
   9704 		if x1.Op != Op386MOVBloadidx1 {
   9705 			break
   9706 		}
   9707 		i1 := x1.AuxInt
   9708 		s := x1.Aux
   9709 		_ = x1.Args[2]
   9710 		p := x1.Args[0]
   9711 		idx := x1.Args[1]
   9712 		mem := x1.Args[2]
   9713 		x0 := v.Args[1]
   9714 		if x0.Op != Op386MOVBloadidx1 {
   9715 			break
   9716 		}
   9717 		i0 := x0.AuxInt
   9718 		if x0.Aux != s {
   9719 			break
   9720 		}
   9721 		_ = x0.Args[2]
   9722 		if idx != x0.Args[0] {
   9723 			break
   9724 		}
   9725 		if p != x0.Args[1] {
   9726 			break
   9727 		}
   9728 		if mem != x0.Args[2] {
   9729 			break
   9730 		}
   9731 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9732 			break
   9733 		}
   9734 		b = mergePoint(b, x0, x1)
   9735 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9736 		v.reset(OpCopy)
   9737 		v.AddArg(v0)
   9738 		v0.AuxInt = i0
   9739 		v0.Aux = s
   9740 		v0.AddArg(p)
   9741 		v0.AddArg(idx)
   9742 		v0.AddArg(mem)
   9743 		return true
   9744 	}
   9745 	// match: (ORL s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} idx p mem)) x0:(MOVBloadidx1 [i0] {s} idx p mem))
   9746 	// cond: i1==i0+1   && x0.Uses == 1   && x1.Uses == 1   && s0.Uses == 1   && mergePoint(b,x0,x1) != nil   && clobber(x0)   && clobber(x1)   && clobber(s0)
   9747 	// result: @mergePoint(b,x0,x1) (MOVWloadidx1 <v.Type> [i0] {s} p idx mem)
   9748 	for {
   9749 		_ = v.Args[1]
   9750 		s0 := v.Args[0]
   9751 		if s0.Op != Op386SHLLconst {
   9752 			break
   9753 		}
   9754 		if s0.AuxInt != 8 {
   9755 			break
   9756 		}
   9757 		x1 := s0.Args[0]
   9758 		if x1.Op != Op386MOVBloadidx1 {
   9759 			break
   9760 		}
   9761 		i1 := x1.AuxInt
   9762 		s := x1.Aux
   9763 		_ = x1.Args[2]
   9764 		idx := x1.Args[0]
   9765 		p := x1.Args[1]
   9766 		mem := x1.Args[2]
   9767 		x0 := v.Args[1]
   9768 		if x0.Op != Op386MOVBloadidx1 {
   9769 			break
   9770 		}
   9771 		i0 := x0.AuxInt
   9772 		if x0.Aux != s {
   9773 			break
   9774 		}
   9775 		_ = x0.Args[2]
   9776 		if idx != x0.Args[0] {
   9777 			break
   9778 		}
   9779 		if p != x0.Args[1] {
   9780 			break
   9781 		}
   9782 		if mem != x0.Args[2] {
   9783 			break
   9784 		}
   9785 		if !(i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0)) {
   9786 			break
   9787 		}
   9788 		b = mergePoint(b, x0, x1)
   9789 		v0 := b.NewValue0(v.Pos, Op386MOVWloadidx1, v.Type)
   9790 		v.reset(OpCopy)
   9791 		v.AddArg(v0)
   9792 		v0.AuxInt = i0
   9793 		v0.Aux = s
   9794 		v0.AddArg(p)
   9795 		v0.AddArg(idx)
   9796 		v0.AddArg(mem)
   9797 		return true
   9798 	}
   9799 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   9800 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9801 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   9802 	for {
   9803 		_ = v.Args[1]
   9804 		o0 := v.Args[0]
   9805 		if o0.Op != Op386ORL {
   9806 			break
   9807 		}
   9808 		_ = o0.Args[1]
   9809 		x0 := o0.Args[0]
   9810 		if x0.Op != Op386MOVWloadidx1 {
   9811 			break
   9812 		}
   9813 		i0 := x0.AuxInt
   9814 		s := x0.Aux
   9815 		_ = x0.Args[2]
   9816 		p := x0.Args[0]
   9817 		idx := x0.Args[1]
   9818 		mem := x0.Args[2]
   9819 		s0 := o0.Args[1]
   9820 		if s0.Op != Op386SHLLconst {
   9821 			break
   9822 		}
   9823 		if s0.AuxInt != 16 {
   9824 			break
   9825 		}
   9826 		x1 := s0.Args[0]
   9827 		if x1.Op != Op386MOVBloadidx1 {
   9828 			break
   9829 		}
   9830 		i2 := x1.AuxInt
   9831 		if x1.Aux != s {
   9832 			break
   9833 		}
   9834 		_ = x1.Args[2]
   9835 		if p != x1.Args[0] {
   9836 			break
   9837 		}
   9838 		if idx != x1.Args[1] {
   9839 			break
   9840 		}
   9841 		if mem != x1.Args[2] {
   9842 			break
   9843 		}
   9844 		s1 := v.Args[1]
   9845 		if s1.Op != Op386SHLLconst {
   9846 			break
   9847 		}
   9848 		if s1.AuxInt != 24 {
   9849 			break
   9850 		}
   9851 		x2 := s1.Args[0]
   9852 		if x2.Op != Op386MOVBloadidx1 {
   9853 			break
   9854 		}
   9855 		i3 := x2.AuxInt
   9856 		if x2.Aux != s {
   9857 			break
   9858 		}
   9859 		_ = x2.Args[2]
   9860 		if p != x2.Args[0] {
   9861 			break
   9862 		}
   9863 		if idx != x2.Args[1] {
   9864 			break
   9865 		}
   9866 		if mem != x2.Args[2] {
   9867 			break
   9868 		}
   9869 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9870 			break
   9871 		}
   9872 		b = mergePoint(b, x0, x1, x2)
   9873 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   9874 		v.reset(OpCopy)
   9875 		v.AddArg(v0)
   9876 		v0.AuxInt = i0
   9877 		v0.Aux = s
   9878 		v0.AddArg(p)
   9879 		v0.AddArg(idx)
   9880 		v0.AddArg(mem)
   9881 		return true
   9882 	}
   9883 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   9884 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9885 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   9886 	for {
   9887 		_ = v.Args[1]
   9888 		o0 := v.Args[0]
   9889 		if o0.Op != Op386ORL {
   9890 			break
   9891 		}
   9892 		_ = o0.Args[1]
   9893 		x0 := o0.Args[0]
   9894 		if x0.Op != Op386MOVWloadidx1 {
   9895 			break
   9896 		}
   9897 		i0 := x0.AuxInt
   9898 		s := x0.Aux
   9899 		_ = x0.Args[2]
   9900 		idx := x0.Args[0]
   9901 		p := x0.Args[1]
   9902 		mem := x0.Args[2]
   9903 		s0 := o0.Args[1]
   9904 		if s0.Op != Op386SHLLconst {
   9905 			break
   9906 		}
   9907 		if s0.AuxInt != 16 {
   9908 			break
   9909 		}
   9910 		x1 := s0.Args[0]
   9911 		if x1.Op != Op386MOVBloadidx1 {
   9912 			break
   9913 		}
   9914 		i2 := x1.AuxInt
   9915 		if x1.Aux != s {
   9916 			break
   9917 		}
   9918 		_ = x1.Args[2]
   9919 		if p != x1.Args[0] {
   9920 			break
   9921 		}
   9922 		if idx != x1.Args[1] {
   9923 			break
   9924 		}
   9925 		if mem != x1.Args[2] {
   9926 			break
   9927 		}
   9928 		s1 := v.Args[1]
   9929 		if s1.Op != Op386SHLLconst {
   9930 			break
   9931 		}
   9932 		if s1.AuxInt != 24 {
   9933 			break
   9934 		}
   9935 		x2 := s1.Args[0]
   9936 		if x2.Op != Op386MOVBloadidx1 {
   9937 			break
   9938 		}
   9939 		i3 := x2.AuxInt
   9940 		if x2.Aux != s {
   9941 			break
   9942 		}
   9943 		_ = x2.Args[2]
   9944 		if p != x2.Args[0] {
   9945 			break
   9946 		}
   9947 		if idx != x2.Args[1] {
   9948 			break
   9949 		}
   9950 		if mem != x2.Args[2] {
   9951 			break
   9952 		}
   9953 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   9954 			break
   9955 		}
   9956 		b = mergePoint(b, x0, x1, x2)
   9957 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   9958 		v.reset(OpCopy)
   9959 		v.AddArg(v0)
   9960 		v0.AuxInt = i0
   9961 		v0.Aux = s
   9962 		v0.AddArg(p)
   9963 		v0.AddArg(idx)
   9964 		v0.AddArg(mem)
   9965 		return true
   9966 	}
   9967 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   9968 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   9969 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   9970 	for {
   9971 		_ = v.Args[1]
   9972 		o0 := v.Args[0]
   9973 		if o0.Op != Op386ORL {
   9974 			break
   9975 		}
   9976 		_ = o0.Args[1]
   9977 		x0 := o0.Args[0]
   9978 		if x0.Op != Op386MOVWloadidx1 {
   9979 			break
   9980 		}
   9981 		i0 := x0.AuxInt
   9982 		s := x0.Aux
   9983 		_ = x0.Args[2]
   9984 		p := x0.Args[0]
   9985 		idx := x0.Args[1]
   9986 		mem := x0.Args[2]
   9987 		s0 := o0.Args[1]
   9988 		if s0.Op != Op386SHLLconst {
   9989 			break
   9990 		}
   9991 		if s0.AuxInt != 16 {
   9992 			break
   9993 		}
   9994 		x1 := s0.Args[0]
   9995 		if x1.Op != Op386MOVBloadidx1 {
   9996 			break
   9997 		}
   9998 		i2 := x1.AuxInt
   9999 		if x1.Aux != s {
   10000 			break
   10001 		}
   10002 		_ = x1.Args[2]
   10003 		if idx != x1.Args[0] {
   10004 			break
   10005 		}
   10006 		if p != x1.Args[1] {
   10007 			break
   10008 		}
   10009 		if mem != x1.Args[2] {
   10010 			break
   10011 		}
   10012 		s1 := v.Args[1]
   10013 		if s1.Op != Op386SHLLconst {
   10014 			break
   10015 		}
   10016 		if s1.AuxInt != 24 {
   10017 			break
   10018 		}
   10019 		x2 := s1.Args[0]
   10020 		if x2.Op != Op386MOVBloadidx1 {
   10021 			break
   10022 		}
   10023 		i3 := x2.AuxInt
   10024 		if x2.Aux != s {
   10025 			break
   10026 		}
   10027 		_ = x2.Args[2]
   10028 		if p != x2.Args[0] {
   10029 			break
   10030 		}
   10031 		if idx != x2.Args[1] {
   10032 			break
   10033 		}
   10034 		if mem != x2.Args[2] {
   10035 			break
   10036 		}
   10037 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10038 			break
   10039 		}
   10040 		b = mergePoint(b, x0, x1, x2)
   10041 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10042 		v.reset(OpCopy)
   10043 		v.AddArg(v0)
   10044 		v0.AuxInt = i0
   10045 		v0.Aux = s
   10046 		v0.AddArg(p)
   10047 		v0.AddArg(idx)
   10048 		v0.AddArg(mem)
   10049 		return true
   10050 	}
   10051 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   10052 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10053 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10054 	for {
   10055 		_ = v.Args[1]
   10056 		o0 := v.Args[0]
   10057 		if o0.Op != Op386ORL {
   10058 			break
   10059 		}
   10060 		_ = o0.Args[1]
   10061 		x0 := o0.Args[0]
   10062 		if x0.Op != Op386MOVWloadidx1 {
   10063 			break
   10064 		}
   10065 		i0 := x0.AuxInt
   10066 		s := x0.Aux
   10067 		_ = x0.Args[2]
   10068 		idx := x0.Args[0]
   10069 		p := x0.Args[1]
   10070 		mem := x0.Args[2]
   10071 		s0 := o0.Args[1]
   10072 		if s0.Op != Op386SHLLconst {
   10073 			break
   10074 		}
   10075 		if s0.AuxInt != 16 {
   10076 			break
   10077 		}
   10078 		x1 := s0.Args[0]
   10079 		if x1.Op != Op386MOVBloadidx1 {
   10080 			break
   10081 		}
   10082 		i2 := x1.AuxInt
   10083 		if x1.Aux != s {
   10084 			break
   10085 		}
   10086 		_ = x1.Args[2]
   10087 		if idx != x1.Args[0] {
   10088 			break
   10089 		}
   10090 		if p != x1.Args[1] {
   10091 			break
   10092 		}
   10093 		if mem != x1.Args[2] {
   10094 			break
   10095 		}
   10096 		s1 := v.Args[1]
   10097 		if s1.Op != Op386SHLLconst {
   10098 			break
   10099 		}
   10100 		if s1.AuxInt != 24 {
   10101 			break
   10102 		}
   10103 		x2 := s1.Args[0]
   10104 		if x2.Op != Op386MOVBloadidx1 {
   10105 			break
   10106 		}
   10107 		i3 := x2.AuxInt
   10108 		if x2.Aux != s {
   10109 			break
   10110 		}
   10111 		_ = x2.Args[2]
   10112 		if p != x2.Args[0] {
   10113 			break
   10114 		}
   10115 		if idx != x2.Args[1] {
   10116 			break
   10117 		}
   10118 		if mem != x2.Args[2] {
   10119 			break
   10120 		}
   10121 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10122 			break
   10123 		}
   10124 		b = mergePoint(b, x0, x1, x2)
   10125 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10126 		v.reset(OpCopy)
   10127 		v.AddArg(v0)
   10128 		v0.AuxInt = i0
   10129 		v0.Aux = s
   10130 		v0.AddArg(p)
   10131 		v0.AddArg(idx)
   10132 		v0.AddArg(mem)
   10133 		return true
   10134 	}
   10135 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   10136 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10137 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10138 	for {
   10139 		_ = v.Args[1]
   10140 		o0 := v.Args[0]
   10141 		if o0.Op != Op386ORL {
   10142 			break
   10143 		}
   10144 		_ = o0.Args[1]
   10145 		s0 := o0.Args[0]
   10146 		if s0.Op != Op386SHLLconst {
   10147 			break
   10148 		}
   10149 		if s0.AuxInt != 16 {
   10150 			break
   10151 		}
   10152 		x1 := s0.Args[0]
   10153 		if x1.Op != Op386MOVBloadidx1 {
   10154 			break
   10155 		}
   10156 		i2 := x1.AuxInt
   10157 		s := x1.Aux
   10158 		_ = x1.Args[2]
   10159 		p := x1.Args[0]
   10160 		idx := x1.Args[1]
   10161 		mem := x1.Args[2]
   10162 		x0 := o0.Args[1]
   10163 		if x0.Op != Op386MOVWloadidx1 {
   10164 			break
   10165 		}
   10166 		i0 := x0.AuxInt
   10167 		if x0.Aux != s {
   10168 			break
   10169 		}
   10170 		_ = x0.Args[2]
   10171 		if p != x0.Args[0] {
   10172 			break
   10173 		}
   10174 		if idx != x0.Args[1] {
   10175 			break
   10176 		}
   10177 		if mem != x0.Args[2] {
   10178 			break
   10179 		}
   10180 		s1 := v.Args[1]
   10181 		if s1.Op != Op386SHLLconst {
   10182 			break
   10183 		}
   10184 		if s1.AuxInt != 24 {
   10185 			break
   10186 		}
   10187 		x2 := s1.Args[0]
   10188 		if x2.Op != Op386MOVBloadidx1 {
   10189 			break
   10190 		}
   10191 		i3 := x2.AuxInt
   10192 		if x2.Aux != s {
   10193 			break
   10194 		}
   10195 		_ = x2.Args[2]
   10196 		if p != x2.Args[0] {
   10197 			break
   10198 		}
   10199 		if idx != x2.Args[1] {
   10200 			break
   10201 		}
   10202 		if mem != x2.Args[2] {
   10203 			break
   10204 		}
   10205 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10206 			break
   10207 		}
   10208 		b = mergePoint(b, x0, x1, x2)
   10209 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10210 		v.reset(OpCopy)
   10211 		v.AddArg(v0)
   10212 		v0.AuxInt = i0
   10213 		v0.Aux = s
   10214 		v0.AddArg(p)
   10215 		v0.AddArg(idx)
   10216 		v0.AddArg(mem)
   10217 		return true
   10218 	}
   10219 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   10220 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10221 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10222 	for {
   10223 		_ = v.Args[1]
   10224 		o0 := v.Args[0]
   10225 		if o0.Op != Op386ORL {
   10226 			break
   10227 		}
   10228 		_ = o0.Args[1]
   10229 		s0 := o0.Args[0]
   10230 		if s0.Op != Op386SHLLconst {
   10231 			break
   10232 		}
   10233 		if s0.AuxInt != 16 {
   10234 			break
   10235 		}
   10236 		x1 := s0.Args[0]
   10237 		if x1.Op != Op386MOVBloadidx1 {
   10238 			break
   10239 		}
   10240 		i2 := x1.AuxInt
   10241 		s := x1.Aux
   10242 		_ = x1.Args[2]
   10243 		idx := x1.Args[0]
   10244 		p := x1.Args[1]
   10245 		mem := x1.Args[2]
   10246 		x0 := o0.Args[1]
   10247 		if x0.Op != Op386MOVWloadidx1 {
   10248 			break
   10249 		}
   10250 		i0 := x0.AuxInt
   10251 		if x0.Aux != s {
   10252 			break
   10253 		}
   10254 		_ = x0.Args[2]
   10255 		if p != x0.Args[0] {
   10256 			break
   10257 		}
   10258 		if idx != x0.Args[1] {
   10259 			break
   10260 		}
   10261 		if mem != x0.Args[2] {
   10262 			break
   10263 		}
   10264 		s1 := v.Args[1]
   10265 		if s1.Op != Op386SHLLconst {
   10266 			break
   10267 		}
   10268 		if s1.AuxInt != 24 {
   10269 			break
   10270 		}
   10271 		x2 := s1.Args[0]
   10272 		if x2.Op != Op386MOVBloadidx1 {
   10273 			break
   10274 		}
   10275 		i3 := x2.AuxInt
   10276 		if x2.Aux != s {
   10277 			break
   10278 		}
   10279 		_ = x2.Args[2]
   10280 		if p != x2.Args[0] {
   10281 			break
   10282 		}
   10283 		if idx != x2.Args[1] {
   10284 			break
   10285 		}
   10286 		if mem != x2.Args[2] {
   10287 			break
   10288 		}
   10289 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10290 			break
   10291 		}
   10292 		b = mergePoint(b, x0, x1, x2)
   10293 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10294 		v.reset(OpCopy)
   10295 		v.AddArg(v0)
   10296 		v0.AuxInt = i0
   10297 		v0.Aux = s
   10298 		v0.AddArg(p)
   10299 		v0.AddArg(idx)
   10300 		v0.AddArg(mem)
   10301 		return true
   10302 	}
   10303 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   10304 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10305 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10306 	for {
   10307 		_ = v.Args[1]
   10308 		o0 := v.Args[0]
   10309 		if o0.Op != Op386ORL {
   10310 			break
   10311 		}
   10312 		_ = o0.Args[1]
   10313 		s0 := o0.Args[0]
   10314 		if s0.Op != Op386SHLLconst {
   10315 			break
   10316 		}
   10317 		if s0.AuxInt != 16 {
   10318 			break
   10319 		}
   10320 		x1 := s0.Args[0]
   10321 		if x1.Op != Op386MOVBloadidx1 {
   10322 			break
   10323 		}
   10324 		i2 := x1.AuxInt
   10325 		s := x1.Aux
   10326 		_ = x1.Args[2]
   10327 		p := x1.Args[0]
   10328 		idx := x1.Args[1]
   10329 		mem := x1.Args[2]
   10330 		x0 := o0.Args[1]
   10331 		if x0.Op != Op386MOVWloadidx1 {
   10332 			break
   10333 		}
   10334 		i0 := x0.AuxInt
   10335 		if x0.Aux != s {
   10336 			break
   10337 		}
   10338 		_ = x0.Args[2]
   10339 		if idx != x0.Args[0] {
   10340 			break
   10341 		}
   10342 		if p != x0.Args[1] {
   10343 			break
   10344 		}
   10345 		if mem != x0.Args[2] {
   10346 			break
   10347 		}
   10348 		s1 := v.Args[1]
   10349 		if s1.Op != Op386SHLLconst {
   10350 			break
   10351 		}
   10352 		if s1.AuxInt != 24 {
   10353 			break
   10354 		}
   10355 		x2 := s1.Args[0]
   10356 		if x2.Op != Op386MOVBloadidx1 {
   10357 			break
   10358 		}
   10359 		i3 := x2.AuxInt
   10360 		if x2.Aux != s {
   10361 			break
   10362 		}
   10363 		_ = x2.Args[2]
   10364 		if p != x2.Args[0] {
   10365 			break
   10366 		}
   10367 		if idx != x2.Args[1] {
   10368 			break
   10369 		}
   10370 		if mem != x2.Args[2] {
   10371 			break
   10372 		}
   10373 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10374 			break
   10375 		}
   10376 		b = mergePoint(b, x0, x1, x2)
   10377 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10378 		v.reset(OpCopy)
   10379 		v.AddArg(v0)
   10380 		v0.AuxInt = i0
   10381 		v0.Aux = s
   10382 		v0.AddArg(p)
   10383 		v0.AddArg(idx)
   10384 		v0.AddArg(mem)
   10385 		return true
   10386 	}
   10387 	return false
   10388 }
   10389 func rewriteValue386_Op386ORL_30(v *Value) bool {
   10390 	b := v.Block
   10391 	_ = b
   10392 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)))
   10393 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10394 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10395 	for {
   10396 		_ = v.Args[1]
   10397 		o0 := v.Args[0]
   10398 		if o0.Op != Op386ORL {
   10399 			break
   10400 		}
   10401 		_ = o0.Args[1]
   10402 		s0 := o0.Args[0]
   10403 		if s0.Op != Op386SHLLconst {
   10404 			break
   10405 		}
   10406 		if s0.AuxInt != 16 {
   10407 			break
   10408 		}
   10409 		x1 := s0.Args[0]
   10410 		if x1.Op != Op386MOVBloadidx1 {
   10411 			break
   10412 		}
   10413 		i2 := x1.AuxInt
   10414 		s := x1.Aux
   10415 		_ = x1.Args[2]
   10416 		idx := x1.Args[0]
   10417 		p := x1.Args[1]
   10418 		mem := x1.Args[2]
   10419 		x0 := o0.Args[1]
   10420 		if x0.Op != Op386MOVWloadidx1 {
   10421 			break
   10422 		}
   10423 		i0 := x0.AuxInt
   10424 		if x0.Aux != s {
   10425 			break
   10426 		}
   10427 		_ = x0.Args[2]
   10428 		if idx != x0.Args[0] {
   10429 			break
   10430 		}
   10431 		if p != x0.Args[1] {
   10432 			break
   10433 		}
   10434 		if mem != x0.Args[2] {
   10435 			break
   10436 		}
   10437 		s1 := v.Args[1]
   10438 		if s1.Op != Op386SHLLconst {
   10439 			break
   10440 		}
   10441 		if s1.AuxInt != 24 {
   10442 			break
   10443 		}
   10444 		x2 := s1.Args[0]
   10445 		if x2.Op != Op386MOVBloadidx1 {
   10446 			break
   10447 		}
   10448 		i3 := x2.AuxInt
   10449 		if x2.Aux != s {
   10450 			break
   10451 		}
   10452 		_ = x2.Args[2]
   10453 		if p != x2.Args[0] {
   10454 			break
   10455 		}
   10456 		if idx != x2.Args[1] {
   10457 			break
   10458 		}
   10459 		if mem != x2.Args[2] {
   10460 			break
   10461 		}
   10462 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10463 			break
   10464 		}
   10465 		b = mergePoint(b, x0, x1, x2)
   10466 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10467 		v.reset(OpCopy)
   10468 		v.AddArg(v0)
   10469 		v0.AuxInt = i0
   10470 		v0.Aux = s
   10471 		v0.AddArg(p)
   10472 		v0.AddArg(idx)
   10473 		v0.AddArg(mem)
   10474 		return true
   10475 	}
   10476 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10477 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10478 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10479 	for {
   10480 		_ = v.Args[1]
   10481 		o0 := v.Args[0]
   10482 		if o0.Op != Op386ORL {
   10483 			break
   10484 		}
   10485 		_ = o0.Args[1]
   10486 		x0 := o0.Args[0]
   10487 		if x0.Op != Op386MOVWloadidx1 {
   10488 			break
   10489 		}
   10490 		i0 := x0.AuxInt
   10491 		s := x0.Aux
   10492 		_ = x0.Args[2]
   10493 		p := x0.Args[0]
   10494 		idx := x0.Args[1]
   10495 		mem := x0.Args[2]
   10496 		s0 := o0.Args[1]
   10497 		if s0.Op != Op386SHLLconst {
   10498 			break
   10499 		}
   10500 		if s0.AuxInt != 16 {
   10501 			break
   10502 		}
   10503 		x1 := s0.Args[0]
   10504 		if x1.Op != Op386MOVBloadidx1 {
   10505 			break
   10506 		}
   10507 		i2 := x1.AuxInt
   10508 		if x1.Aux != s {
   10509 			break
   10510 		}
   10511 		_ = x1.Args[2]
   10512 		if p != x1.Args[0] {
   10513 			break
   10514 		}
   10515 		if idx != x1.Args[1] {
   10516 			break
   10517 		}
   10518 		if mem != x1.Args[2] {
   10519 			break
   10520 		}
   10521 		s1 := v.Args[1]
   10522 		if s1.Op != Op386SHLLconst {
   10523 			break
   10524 		}
   10525 		if s1.AuxInt != 24 {
   10526 			break
   10527 		}
   10528 		x2 := s1.Args[0]
   10529 		if x2.Op != Op386MOVBloadidx1 {
   10530 			break
   10531 		}
   10532 		i3 := x2.AuxInt
   10533 		if x2.Aux != s {
   10534 			break
   10535 		}
   10536 		_ = x2.Args[2]
   10537 		if idx != x2.Args[0] {
   10538 			break
   10539 		}
   10540 		if p != x2.Args[1] {
   10541 			break
   10542 		}
   10543 		if mem != x2.Args[2] {
   10544 			break
   10545 		}
   10546 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10547 			break
   10548 		}
   10549 		b = mergePoint(b, x0, x1, x2)
   10550 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10551 		v.reset(OpCopy)
   10552 		v.AddArg(v0)
   10553 		v0.AuxInt = i0
   10554 		v0.Aux = s
   10555 		v0.AddArg(p)
   10556 		v0.AddArg(idx)
   10557 		v0.AddArg(mem)
   10558 		return true
   10559 	}
   10560 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10561 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10562 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10563 	for {
   10564 		_ = v.Args[1]
   10565 		o0 := v.Args[0]
   10566 		if o0.Op != Op386ORL {
   10567 			break
   10568 		}
   10569 		_ = o0.Args[1]
   10570 		x0 := o0.Args[0]
   10571 		if x0.Op != Op386MOVWloadidx1 {
   10572 			break
   10573 		}
   10574 		i0 := x0.AuxInt
   10575 		s := x0.Aux
   10576 		_ = x0.Args[2]
   10577 		idx := x0.Args[0]
   10578 		p := x0.Args[1]
   10579 		mem := x0.Args[2]
   10580 		s0 := o0.Args[1]
   10581 		if s0.Op != Op386SHLLconst {
   10582 			break
   10583 		}
   10584 		if s0.AuxInt != 16 {
   10585 			break
   10586 		}
   10587 		x1 := s0.Args[0]
   10588 		if x1.Op != Op386MOVBloadidx1 {
   10589 			break
   10590 		}
   10591 		i2 := x1.AuxInt
   10592 		if x1.Aux != s {
   10593 			break
   10594 		}
   10595 		_ = x1.Args[2]
   10596 		if p != x1.Args[0] {
   10597 			break
   10598 		}
   10599 		if idx != x1.Args[1] {
   10600 			break
   10601 		}
   10602 		if mem != x1.Args[2] {
   10603 			break
   10604 		}
   10605 		s1 := v.Args[1]
   10606 		if s1.Op != Op386SHLLconst {
   10607 			break
   10608 		}
   10609 		if s1.AuxInt != 24 {
   10610 			break
   10611 		}
   10612 		x2 := s1.Args[0]
   10613 		if x2.Op != Op386MOVBloadidx1 {
   10614 			break
   10615 		}
   10616 		i3 := x2.AuxInt
   10617 		if x2.Aux != s {
   10618 			break
   10619 		}
   10620 		_ = x2.Args[2]
   10621 		if idx != x2.Args[0] {
   10622 			break
   10623 		}
   10624 		if p != x2.Args[1] {
   10625 			break
   10626 		}
   10627 		if mem != x2.Args[2] {
   10628 			break
   10629 		}
   10630 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10631 			break
   10632 		}
   10633 		b = mergePoint(b, x0, x1, x2)
   10634 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10635 		v.reset(OpCopy)
   10636 		v.AddArg(v0)
   10637 		v0.AuxInt = i0
   10638 		v0.Aux = s
   10639 		v0.AddArg(p)
   10640 		v0.AddArg(idx)
   10641 		v0.AddArg(mem)
   10642 		return true
   10643 	}
   10644 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10645 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10646 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10647 	for {
   10648 		_ = v.Args[1]
   10649 		o0 := v.Args[0]
   10650 		if o0.Op != Op386ORL {
   10651 			break
   10652 		}
   10653 		_ = o0.Args[1]
   10654 		x0 := o0.Args[0]
   10655 		if x0.Op != Op386MOVWloadidx1 {
   10656 			break
   10657 		}
   10658 		i0 := x0.AuxInt
   10659 		s := x0.Aux
   10660 		_ = x0.Args[2]
   10661 		p := x0.Args[0]
   10662 		idx := x0.Args[1]
   10663 		mem := x0.Args[2]
   10664 		s0 := o0.Args[1]
   10665 		if s0.Op != Op386SHLLconst {
   10666 			break
   10667 		}
   10668 		if s0.AuxInt != 16 {
   10669 			break
   10670 		}
   10671 		x1 := s0.Args[0]
   10672 		if x1.Op != Op386MOVBloadidx1 {
   10673 			break
   10674 		}
   10675 		i2 := x1.AuxInt
   10676 		if x1.Aux != s {
   10677 			break
   10678 		}
   10679 		_ = x1.Args[2]
   10680 		if idx != x1.Args[0] {
   10681 			break
   10682 		}
   10683 		if p != x1.Args[1] {
   10684 			break
   10685 		}
   10686 		if mem != x1.Args[2] {
   10687 			break
   10688 		}
   10689 		s1 := v.Args[1]
   10690 		if s1.Op != Op386SHLLconst {
   10691 			break
   10692 		}
   10693 		if s1.AuxInt != 24 {
   10694 			break
   10695 		}
   10696 		x2 := s1.Args[0]
   10697 		if x2.Op != Op386MOVBloadidx1 {
   10698 			break
   10699 		}
   10700 		i3 := x2.AuxInt
   10701 		if x2.Aux != s {
   10702 			break
   10703 		}
   10704 		_ = x2.Args[2]
   10705 		if idx != x2.Args[0] {
   10706 			break
   10707 		}
   10708 		if p != x2.Args[1] {
   10709 			break
   10710 		}
   10711 		if mem != x2.Args[2] {
   10712 			break
   10713 		}
   10714 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10715 			break
   10716 		}
   10717 		b = mergePoint(b, x0, x1, x2)
   10718 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10719 		v.reset(OpCopy)
   10720 		v.AddArg(v0)
   10721 		v0.AuxInt = i0
   10722 		v0.Aux = s
   10723 		v0.AddArg(p)
   10724 		v0.AddArg(idx)
   10725 		v0.AddArg(mem)
   10726 		return true
   10727 	}
   10728 	// match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10729 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10730 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10731 	for {
   10732 		_ = v.Args[1]
   10733 		o0 := v.Args[0]
   10734 		if o0.Op != Op386ORL {
   10735 			break
   10736 		}
   10737 		_ = o0.Args[1]
   10738 		x0 := o0.Args[0]
   10739 		if x0.Op != Op386MOVWloadidx1 {
   10740 			break
   10741 		}
   10742 		i0 := x0.AuxInt
   10743 		s := x0.Aux
   10744 		_ = x0.Args[2]
   10745 		idx := x0.Args[0]
   10746 		p := x0.Args[1]
   10747 		mem := x0.Args[2]
   10748 		s0 := o0.Args[1]
   10749 		if s0.Op != Op386SHLLconst {
   10750 			break
   10751 		}
   10752 		if s0.AuxInt != 16 {
   10753 			break
   10754 		}
   10755 		x1 := s0.Args[0]
   10756 		if x1.Op != Op386MOVBloadidx1 {
   10757 			break
   10758 		}
   10759 		i2 := x1.AuxInt
   10760 		if x1.Aux != s {
   10761 			break
   10762 		}
   10763 		_ = x1.Args[2]
   10764 		if idx != x1.Args[0] {
   10765 			break
   10766 		}
   10767 		if p != x1.Args[1] {
   10768 			break
   10769 		}
   10770 		if mem != x1.Args[2] {
   10771 			break
   10772 		}
   10773 		s1 := v.Args[1]
   10774 		if s1.Op != Op386SHLLconst {
   10775 			break
   10776 		}
   10777 		if s1.AuxInt != 24 {
   10778 			break
   10779 		}
   10780 		x2 := s1.Args[0]
   10781 		if x2.Op != Op386MOVBloadidx1 {
   10782 			break
   10783 		}
   10784 		i3 := x2.AuxInt
   10785 		if x2.Aux != s {
   10786 			break
   10787 		}
   10788 		_ = x2.Args[2]
   10789 		if idx != x2.Args[0] {
   10790 			break
   10791 		}
   10792 		if p != x2.Args[1] {
   10793 			break
   10794 		}
   10795 		if mem != x2.Args[2] {
   10796 			break
   10797 		}
   10798 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10799 			break
   10800 		}
   10801 		b = mergePoint(b, x0, x1, x2)
   10802 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10803 		v.reset(OpCopy)
   10804 		v.AddArg(v0)
   10805 		v0.AuxInt = i0
   10806 		v0.Aux = s
   10807 		v0.AddArg(p)
   10808 		v0.AddArg(idx)
   10809 		v0.AddArg(mem)
   10810 		return true
   10811 	}
   10812 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10813 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10814 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10815 	for {
   10816 		_ = v.Args[1]
   10817 		o0 := v.Args[0]
   10818 		if o0.Op != Op386ORL {
   10819 			break
   10820 		}
   10821 		_ = o0.Args[1]
   10822 		s0 := o0.Args[0]
   10823 		if s0.Op != Op386SHLLconst {
   10824 			break
   10825 		}
   10826 		if s0.AuxInt != 16 {
   10827 			break
   10828 		}
   10829 		x1 := s0.Args[0]
   10830 		if x1.Op != Op386MOVBloadidx1 {
   10831 			break
   10832 		}
   10833 		i2 := x1.AuxInt
   10834 		s := x1.Aux
   10835 		_ = x1.Args[2]
   10836 		p := x1.Args[0]
   10837 		idx := x1.Args[1]
   10838 		mem := x1.Args[2]
   10839 		x0 := o0.Args[1]
   10840 		if x0.Op != Op386MOVWloadidx1 {
   10841 			break
   10842 		}
   10843 		i0 := x0.AuxInt
   10844 		if x0.Aux != s {
   10845 			break
   10846 		}
   10847 		_ = x0.Args[2]
   10848 		if p != x0.Args[0] {
   10849 			break
   10850 		}
   10851 		if idx != x0.Args[1] {
   10852 			break
   10853 		}
   10854 		if mem != x0.Args[2] {
   10855 			break
   10856 		}
   10857 		s1 := v.Args[1]
   10858 		if s1.Op != Op386SHLLconst {
   10859 			break
   10860 		}
   10861 		if s1.AuxInt != 24 {
   10862 			break
   10863 		}
   10864 		x2 := s1.Args[0]
   10865 		if x2.Op != Op386MOVBloadidx1 {
   10866 			break
   10867 		}
   10868 		i3 := x2.AuxInt
   10869 		if x2.Aux != s {
   10870 			break
   10871 		}
   10872 		_ = x2.Args[2]
   10873 		if idx != x2.Args[0] {
   10874 			break
   10875 		}
   10876 		if p != x2.Args[1] {
   10877 			break
   10878 		}
   10879 		if mem != x2.Args[2] {
   10880 			break
   10881 		}
   10882 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10883 			break
   10884 		}
   10885 		b = mergePoint(b, x0, x1, x2)
   10886 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10887 		v.reset(OpCopy)
   10888 		v.AddArg(v0)
   10889 		v0.AuxInt = i0
   10890 		v0.Aux = s
   10891 		v0.AddArg(p)
   10892 		v0.AddArg(idx)
   10893 		v0.AddArg(mem)
   10894 		return true
   10895 	}
   10896 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10897 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10898 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10899 	for {
   10900 		_ = v.Args[1]
   10901 		o0 := v.Args[0]
   10902 		if o0.Op != Op386ORL {
   10903 			break
   10904 		}
   10905 		_ = o0.Args[1]
   10906 		s0 := o0.Args[0]
   10907 		if s0.Op != Op386SHLLconst {
   10908 			break
   10909 		}
   10910 		if s0.AuxInt != 16 {
   10911 			break
   10912 		}
   10913 		x1 := s0.Args[0]
   10914 		if x1.Op != Op386MOVBloadidx1 {
   10915 			break
   10916 		}
   10917 		i2 := x1.AuxInt
   10918 		s := x1.Aux
   10919 		_ = x1.Args[2]
   10920 		idx := x1.Args[0]
   10921 		p := x1.Args[1]
   10922 		mem := x1.Args[2]
   10923 		x0 := o0.Args[1]
   10924 		if x0.Op != Op386MOVWloadidx1 {
   10925 			break
   10926 		}
   10927 		i0 := x0.AuxInt
   10928 		if x0.Aux != s {
   10929 			break
   10930 		}
   10931 		_ = x0.Args[2]
   10932 		if p != x0.Args[0] {
   10933 			break
   10934 		}
   10935 		if idx != x0.Args[1] {
   10936 			break
   10937 		}
   10938 		if mem != x0.Args[2] {
   10939 			break
   10940 		}
   10941 		s1 := v.Args[1]
   10942 		if s1.Op != Op386SHLLconst {
   10943 			break
   10944 		}
   10945 		if s1.AuxInt != 24 {
   10946 			break
   10947 		}
   10948 		x2 := s1.Args[0]
   10949 		if x2.Op != Op386MOVBloadidx1 {
   10950 			break
   10951 		}
   10952 		i3 := x2.AuxInt
   10953 		if x2.Aux != s {
   10954 			break
   10955 		}
   10956 		_ = x2.Args[2]
   10957 		if idx != x2.Args[0] {
   10958 			break
   10959 		}
   10960 		if p != x2.Args[1] {
   10961 			break
   10962 		}
   10963 		if mem != x2.Args[2] {
   10964 			break
   10965 		}
   10966 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   10967 			break
   10968 		}
   10969 		b = mergePoint(b, x0, x1, x2)
   10970 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   10971 		v.reset(OpCopy)
   10972 		v.AddArg(v0)
   10973 		v0.AuxInt = i0
   10974 		v0.Aux = s
   10975 		v0.AddArg(p)
   10976 		v0.AddArg(idx)
   10977 		v0.AddArg(mem)
   10978 		return true
   10979 	}
   10980 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   10981 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   10982 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   10983 	for {
   10984 		_ = v.Args[1]
   10985 		o0 := v.Args[0]
   10986 		if o0.Op != Op386ORL {
   10987 			break
   10988 		}
   10989 		_ = o0.Args[1]
   10990 		s0 := o0.Args[0]
   10991 		if s0.Op != Op386SHLLconst {
   10992 			break
   10993 		}
   10994 		if s0.AuxInt != 16 {
   10995 			break
   10996 		}
   10997 		x1 := s0.Args[0]
   10998 		if x1.Op != Op386MOVBloadidx1 {
   10999 			break
   11000 		}
   11001 		i2 := x1.AuxInt
   11002 		s := x1.Aux
   11003 		_ = x1.Args[2]
   11004 		p := x1.Args[0]
   11005 		idx := x1.Args[1]
   11006 		mem := x1.Args[2]
   11007 		x0 := o0.Args[1]
   11008 		if x0.Op != Op386MOVWloadidx1 {
   11009 			break
   11010 		}
   11011 		i0 := x0.AuxInt
   11012 		if x0.Aux != s {
   11013 			break
   11014 		}
   11015 		_ = x0.Args[2]
   11016 		if idx != x0.Args[0] {
   11017 			break
   11018 		}
   11019 		if p != x0.Args[1] {
   11020 			break
   11021 		}
   11022 		if mem != x0.Args[2] {
   11023 			break
   11024 		}
   11025 		s1 := v.Args[1]
   11026 		if s1.Op != Op386SHLLconst {
   11027 			break
   11028 		}
   11029 		if s1.AuxInt != 24 {
   11030 			break
   11031 		}
   11032 		x2 := s1.Args[0]
   11033 		if x2.Op != Op386MOVBloadidx1 {
   11034 			break
   11035 		}
   11036 		i3 := x2.AuxInt
   11037 		if x2.Aux != s {
   11038 			break
   11039 		}
   11040 		_ = x2.Args[2]
   11041 		if idx != x2.Args[0] {
   11042 			break
   11043 		}
   11044 		if p != x2.Args[1] {
   11045 			break
   11046 		}
   11047 		if mem != x2.Args[2] {
   11048 			break
   11049 		}
   11050 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11051 			break
   11052 		}
   11053 		b = mergePoint(b, x0, x1, x2)
   11054 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11055 		v.reset(OpCopy)
   11056 		v.AddArg(v0)
   11057 		v0.AuxInt = i0
   11058 		v0.Aux = s
   11059 		v0.AddArg(p)
   11060 		v0.AddArg(idx)
   11061 		v0.AddArg(mem)
   11062 		return true
   11063 	}
   11064 	// match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)))
   11065 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11066 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11067 	for {
   11068 		_ = v.Args[1]
   11069 		o0 := v.Args[0]
   11070 		if o0.Op != Op386ORL {
   11071 			break
   11072 		}
   11073 		_ = o0.Args[1]
   11074 		s0 := o0.Args[0]
   11075 		if s0.Op != Op386SHLLconst {
   11076 			break
   11077 		}
   11078 		if s0.AuxInt != 16 {
   11079 			break
   11080 		}
   11081 		x1 := s0.Args[0]
   11082 		if x1.Op != Op386MOVBloadidx1 {
   11083 			break
   11084 		}
   11085 		i2 := x1.AuxInt
   11086 		s := x1.Aux
   11087 		_ = x1.Args[2]
   11088 		idx := x1.Args[0]
   11089 		p := x1.Args[1]
   11090 		mem := x1.Args[2]
   11091 		x0 := o0.Args[1]
   11092 		if x0.Op != Op386MOVWloadidx1 {
   11093 			break
   11094 		}
   11095 		i0 := x0.AuxInt
   11096 		if x0.Aux != s {
   11097 			break
   11098 		}
   11099 		_ = x0.Args[2]
   11100 		if idx != x0.Args[0] {
   11101 			break
   11102 		}
   11103 		if p != x0.Args[1] {
   11104 			break
   11105 		}
   11106 		if mem != x0.Args[2] {
   11107 			break
   11108 		}
   11109 		s1 := v.Args[1]
   11110 		if s1.Op != Op386SHLLconst {
   11111 			break
   11112 		}
   11113 		if s1.AuxInt != 24 {
   11114 			break
   11115 		}
   11116 		x2 := s1.Args[0]
   11117 		if x2.Op != Op386MOVBloadidx1 {
   11118 			break
   11119 		}
   11120 		i3 := x2.AuxInt
   11121 		if x2.Aux != s {
   11122 			break
   11123 		}
   11124 		_ = x2.Args[2]
   11125 		if idx != x2.Args[0] {
   11126 			break
   11127 		}
   11128 		if p != x2.Args[1] {
   11129 			break
   11130 		}
   11131 		if mem != x2.Args[2] {
   11132 			break
   11133 		}
   11134 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11135 			break
   11136 		}
   11137 		b = mergePoint(b, x0, x1, x2)
   11138 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11139 		v.reset(OpCopy)
   11140 		v.AddArg(v0)
   11141 		v0.AuxInt = i0
   11142 		v0.Aux = s
   11143 		v0.AddArg(p)
   11144 		v0.AddArg(idx)
   11145 		v0.AddArg(mem)
   11146 		return true
   11147 	}
   11148 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))))
   11149 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11150 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11151 	for {
   11152 		_ = v.Args[1]
   11153 		s1 := v.Args[0]
   11154 		if s1.Op != Op386SHLLconst {
   11155 			break
   11156 		}
   11157 		if s1.AuxInt != 24 {
   11158 			break
   11159 		}
   11160 		x2 := s1.Args[0]
   11161 		if x2.Op != Op386MOVBloadidx1 {
   11162 			break
   11163 		}
   11164 		i3 := x2.AuxInt
   11165 		s := x2.Aux
   11166 		_ = x2.Args[2]
   11167 		p := x2.Args[0]
   11168 		idx := x2.Args[1]
   11169 		mem := x2.Args[2]
   11170 		o0 := v.Args[1]
   11171 		if o0.Op != Op386ORL {
   11172 			break
   11173 		}
   11174 		_ = o0.Args[1]
   11175 		x0 := o0.Args[0]
   11176 		if x0.Op != Op386MOVWloadidx1 {
   11177 			break
   11178 		}
   11179 		i0 := x0.AuxInt
   11180 		if x0.Aux != s {
   11181 			break
   11182 		}
   11183 		_ = x0.Args[2]
   11184 		if p != x0.Args[0] {
   11185 			break
   11186 		}
   11187 		if idx != x0.Args[1] {
   11188 			break
   11189 		}
   11190 		if mem != x0.Args[2] {
   11191 			break
   11192 		}
   11193 		s0 := o0.Args[1]
   11194 		if s0.Op != Op386SHLLconst {
   11195 			break
   11196 		}
   11197 		if s0.AuxInt != 16 {
   11198 			break
   11199 		}
   11200 		x1 := s0.Args[0]
   11201 		if x1.Op != Op386MOVBloadidx1 {
   11202 			break
   11203 		}
   11204 		i2 := x1.AuxInt
   11205 		if x1.Aux != s {
   11206 			break
   11207 		}
   11208 		_ = x1.Args[2]
   11209 		if p != x1.Args[0] {
   11210 			break
   11211 		}
   11212 		if idx != x1.Args[1] {
   11213 			break
   11214 		}
   11215 		if mem != x1.Args[2] {
   11216 			break
   11217 		}
   11218 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11219 			break
   11220 		}
   11221 		b = mergePoint(b, x0, x1, x2)
   11222 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11223 		v.reset(OpCopy)
   11224 		v.AddArg(v0)
   11225 		v0.AuxInt = i0
   11226 		v0.Aux = s
   11227 		v0.AddArg(p)
   11228 		v0.AddArg(idx)
   11229 		v0.AddArg(mem)
   11230 		return true
   11231 	}
   11232 	return false
   11233 }
   11234 func rewriteValue386_Op386ORL_40(v *Value) bool {
   11235 	b := v.Block
   11236 	_ = b
   11237 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))))
   11238 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11239 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11240 	for {
   11241 		_ = v.Args[1]
   11242 		s1 := v.Args[0]
   11243 		if s1.Op != Op386SHLLconst {
   11244 			break
   11245 		}
   11246 		if s1.AuxInt != 24 {
   11247 			break
   11248 		}
   11249 		x2 := s1.Args[0]
   11250 		if x2.Op != Op386MOVBloadidx1 {
   11251 			break
   11252 		}
   11253 		i3 := x2.AuxInt
   11254 		s := x2.Aux
   11255 		_ = x2.Args[2]
   11256 		idx := x2.Args[0]
   11257 		p := x2.Args[1]
   11258 		mem := x2.Args[2]
   11259 		o0 := v.Args[1]
   11260 		if o0.Op != Op386ORL {
   11261 			break
   11262 		}
   11263 		_ = o0.Args[1]
   11264 		x0 := o0.Args[0]
   11265 		if x0.Op != Op386MOVWloadidx1 {
   11266 			break
   11267 		}
   11268 		i0 := x0.AuxInt
   11269 		if x0.Aux != s {
   11270 			break
   11271 		}
   11272 		_ = x0.Args[2]
   11273 		if p != x0.Args[0] {
   11274 			break
   11275 		}
   11276 		if idx != x0.Args[1] {
   11277 			break
   11278 		}
   11279 		if mem != x0.Args[2] {
   11280 			break
   11281 		}
   11282 		s0 := o0.Args[1]
   11283 		if s0.Op != Op386SHLLconst {
   11284 			break
   11285 		}
   11286 		if s0.AuxInt != 16 {
   11287 			break
   11288 		}
   11289 		x1 := s0.Args[0]
   11290 		if x1.Op != Op386MOVBloadidx1 {
   11291 			break
   11292 		}
   11293 		i2 := x1.AuxInt
   11294 		if x1.Aux != s {
   11295 			break
   11296 		}
   11297 		_ = x1.Args[2]
   11298 		if p != x1.Args[0] {
   11299 			break
   11300 		}
   11301 		if idx != x1.Args[1] {
   11302 			break
   11303 		}
   11304 		if mem != x1.Args[2] {
   11305 			break
   11306 		}
   11307 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11308 			break
   11309 		}
   11310 		b = mergePoint(b, x0, x1, x2)
   11311 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11312 		v.reset(OpCopy)
   11313 		v.AddArg(v0)
   11314 		v0.AuxInt = i0
   11315 		v0.Aux = s
   11316 		v0.AddArg(p)
   11317 		v0.AddArg(idx)
   11318 		v0.AddArg(mem)
   11319 		return true
   11320 	}
   11321 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))))
   11322 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11323 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11324 	for {
   11325 		_ = v.Args[1]
   11326 		s1 := v.Args[0]
   11327 		if s1.Op != Op386SHLLconst {
   11328 			break
   11329 		}
   11330 		if s1.AuxInt != 24 {
   11331 			break
   11332 		}
   11333 		x2 := s1.Args[0]
   11334 		if x2.Op != Op386MOVBloadidx1 {
   11335 			break
   11336 		}
   11337 		i3 := x2.AuxInt
   11338 		s := x2.Aux
   11339 		_ = x2.Args[2]
   11340 		p := x2.Args[0]
   11341 		idx := x2.Args[1]
   11342 		mem := x2.Args[2]
   11343 		o0 := v.Args[1]
   11344 		if o0.Op != Op386ORL {
   11345 			break
   11346 		}
   11347 		_ = o0.Args[1]
   11348 		x0 := o0.Args[0]
   11349 		if x0.Op != Op386MOVWloadidx1 {
   11350 			break
   11351 		}
   11352 		i0 := x0.AuxInt
   11353 		if x0.Aux != s {
   11354 			break
   11355 		}
   11356 		_ = x0.Args[2]
   11357 		if idx != x0.Args[0] {
   11358 			break
   11359 		}
   11360 		if p != x0.Args[1] {
   11361 			break
   11362 		}
   11363 		if mem != x0.Args[2] {
   11364 			break
   11365 		}
   11366 		s0 := o0.Args[1]
   11367 		if s0.Op != Op386SHLLconst {
   11368 			break
   11369 		}
   11370 		if s0.AuxInt != 16 {
   11371 			break
   11372 		}
   11373 		x1 := s0.Args[0]
   11374 		if x1.Op != Op386MOVBloadidx1 {
   11375 			break
   11376 		}
   11377 		i2 := x1.AuxInt
   11378 		if x1.Aux != s {
   11379 			break
   11380 		}
   11381 		_ = x1.Args[2]
   11382 		if p != x1.Args[0] {
   11383 			break
   11384 		}
   11385 		if idx != x1.Args[1] {
   11386 			break
   11387 		}
   11388 		if mem != x1.Args[2] {
   11389 			break
   11390 		}
   11391 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11392 			break
   11393 		}
   11394 		b = mergePoint(b, x0, x1, x2)
   11395 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11396 		v.reset(OpCopy)
   11397 		v.AddArg(v0)
   11398 		v0.AuxInt = i0
   11399 		v0.Aux = s
   11400 		v0.AddArg(p)
   11401 		v0.AddArg(idx)
   11402 		v0.AddArg(mem)
   11403 		return true
   11404 	}
   11405 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem))))
   11406 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11407 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11408 	for {
   11409 		_ = v.Args[1]
   11410 		s1 := v.Args[0]
   11411 		if s1.Op != Op386SHLLconst {
   11412 			break
   11413 		}
   11414 		if s1.AuxInt != 24 {
   11415 			break
   11416 		}
   11417 		x2 := s1.Args[0]
   11418 		if x2.Op != Op386MOVBloadidx1 {
   11419 			break
   11420 		}
   11421 		i3 := x2.AuxInt
   11422 		s := x2.Aux
   11423 		_ = x2.Args[2]
   11424 		idx := x2.Args[0]
   11425 		p := x2.Args[1]
   11426 		mem := x2.Args[2]
   11427 		o0 := v.Args[1]
   11428 		if o0.Op != Op386ORL {
   11429 			break
   11430 		}
   11431 		_ = o0.Args[1]
   11432 		x0 := o0.Args[0]
   11433 		if x0.Op != Op386MOVWloadidx1 {
   11434 			break
   11435 		}
   11436 		i0 := x0.AuxInt
   11437 		if x0.Aux != s {
   11438 			break
   11439 		}
   11440 		_ = x0.Args[2]
   11441 		if idx != x0.Args[0] {
   11442 			break
   11443 		}
   11444 		if p != x0.Args[1] {
   11445 			break
   11446 		}
   11447 		if mem != x0.Args[2] {
   11448 			break
   11449 		}
   11450 		s0 := o0.Args[1]
   11451 		if s0.Op != Op386SHLLconst {
   11452 			break
   11453 		}
   11454 		if s0.AuxInt != 16 {
   11455 			break
   11456 		}
   11457 		x1 := s0.Args[0]
   11458 		if x1.Op != Op386MOVBloadidx1 {
   11459 			break
   11460 		}
   11461 		i2 := x1.AuxInt
   11462 		if x1.Aux != s {
   11463 			break
   11464 		}
   11465 		_ = x1.Args[2]
   11466 		if p != x1.Args[0] {
   11467 			break
   11468 		}
   11469 		if idx != x1.Args[1] {
   11470 			break
   11471 		}
   11472 		if mem != x1.Args[2] {
   11473 			break
   11474 		}
   11475 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11476 			break
   11477 		}
   11478 		b = mergePoint(b, x0, x1, x2)
   11479 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11480 		v.reset(OpCopy)
   11481 		v.AddArg(v0)
   11482 		v0.AuxInt = i0
   11483 		v0.Aux = s
   11484 		v0.AddArg(p)
   11485 		v0.AddArg(idx)
   11486 		v0.AddArg(mem)
   11487 		return true
   11488 	}
   11489 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))))
   11490 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11491 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11492 	for {
   11493 		_ = v.Args[1]
   11494 		s1 := v.Args[0]
   11495 		if s1.Op != Op386SHLLconst {
   11496 			break
   11497 		}
   11498 		if s1.AuxInt != 24 {
   11499 			break
   11500 		}
   11501 		x2 := s1.Args[0]
   11502 		if x2.Op != Op386MOVBloadidx1 {
   11503 			break
   11504 		}
   11505 		i3 := x2.AuxInt
   11506 		s := x2.Aux
   11507 		_ = x2.Args[2]
   11508 		p := x2.Args[0]
   11509 		idx := x2.Args[1]
   11510 		mem := x2.Args[2]
   11511 		o0 := v.Args[1]
   11512 		if o0.Op != Op386ORL {
   11513 			break
   11514 		}
   11515 		_ = o0.Args[1]
   11516 		x0 := o0.Args[0]
   11517 		if x0.Op != Op386MOVWloadidx1 {
   11518 			break
   11519 		}
   11520 		i0 := x0.AuxInt
   11521 		if x0.Aux != s {
   11522 			break
   11523 		}
   11524 		_ = x0.Args[2]
   11525 		if p != x0.Args[0] {
   11526 			break
   11527 		}
   11528 		if idx != x0.Args[1] {
   11529 			break
   11530 		}
   11531 		if mem != x0.Args[2] {
   11532 			break
   11533 		}
   11534 		s0 := o0.Args[1]
   11535 		if s0.Op != Op386SHLLconst {
   11536 			break
   11537 		}
   11538 		if s0.AuxInt != 16 {
   11539 			break
   11540 		}
   11541 		x1 := s0.Args[0]
   11542 		if x1.Op != Op386MOVBloadidx1 {
   11543 			break
   11544 		}
   11545 		i2 := x1.AuxInt
   11546 		if x1.Aux != s {
   11547 			break
   11548 		}
   11549 		_ = x1.Args[2]
   11550 		if idx != x1.Args[0] {
   11551 			break
   11552 		}
   11553 		if p != x1.Args[1] {
   11554 			break
   11555 		}
   11556 		if mem != x1.Args[2] {
   11557 			break
   11558 		}
   11559 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11560 			break
   11561 		}
   11562 		b = mergePoint(b, x0, x1, x2)
   11563 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11564 		v.reset(OpCopy)
   11565 		v.AddArg(v0)
   11566 		v0.AuxInt = i0
   11567 		v0.Aux = s
   11568 		v0.AddArg(p)
   11569 		v0.AddArg(idx)
   11570 		v0.AddArg(mem)
   11571 		return true
   11572 	}
   11573 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} p idx mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))))
   11574 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11575 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11576 	for {
   11577 		_ = v.Args[1]
   11578 		s1 := v.Args[0]
   11579 		if s1.Op != Op386SHLLconst {
   11580 			break
   11581 		}
   11582 		if s1.AuxInt != 24 {
   11583 			break
   11584 		}
   11585 		x2 := s1.Args[0]
   11586 		if x2.Op != Op386MOVBloadidx1 {
   11587 			break
   11588 		}
   11589 		i3 := x2.AuxInt
   11590 		s := x2.Aux
   11591 		_ = x2.Args[2]
   11592 		idx := x2.Args[0]
   11593 		p := x2.Args[1]
   11594 		mem := x2.Args[2]
   11595 		o0 := v.Args[1]
   11596 		if o0.Op != Op386ORL {
   11597 			break
   11598 		}
   11599 		_ = o0.Args[1]
   11600 		x0 := o0.Args[0]
   11601 		if x0.Op != Op386MOVWloadidx1 {
   11602 			break
   11603 		}
   11604 		i0 := x0.AuxInt
   11605 		if x0.Aux != s {
   11606 			break
   11607 		}
   11608 		_ = x0.Args[2]
   11609 		if p != x0.Args[0] {
   11610 			break
   11611 		}
   11612 		if idx != x0.Args[1] {
   11613 			break
   11614 		}
   11615 		if mem != x0.Args[2] {
   11616 			break
   11617 		}
   11618 		s0 := o0.Args[1]
   11619 		if s0.Op != Op386SHLLconst {
   11620 			break
   11621 		}
   11622 		if s0.AuxInt != 16 {
   11623 			break
   11624 		}
   11625 		x1 := s0.Args[0]
   11626 		if x1.Op != Op386MOVBloadidx1 {
   11627 			break
   11628 		}
   11629 		i2 := x1.AuxInt
   11630 		if x1.Aux != s {
   11631 			break
   11632 		}
   11633 		_ = x1.Args[2]
   11634 		if idx != x1.Args[0] {
   11635 			break
   11636 		}
   11637 		if p != x1.Args[1] {
   11638 			break
   11639 		}
   11640 		if mem != x1.Args[2] {
   11641 			break
   11642 		}
   11643 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11644 			break
   11645 		}
   11646 		b = mergePoint(b, x0, x1, x2)
   11647 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11648 		v.reset(OpCopy)
   11649 		v.AddArg(v0)
   11650 		v0.AuxInt = i0
   11651 		v0.Aux = s
   11652 		v0.AddArg(p)
   11653 		v0.AddArg(idx)
   11654 		v0.AddArg(mem)
   11655 		return true
   11656 	}
   11657 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))))
   11658 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11659 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11660 	for {
   11661 		_ = v.Args[1]
   11662 		s1 := v.Args[0]
   11663 		if s1.Op != Op386SHLLconst {
   11664 			break
   11665 		}
   11666 		if s1.AuxInt != 24 {
   11667 			break
   11668 		}
   11669 		x2 := s1.Args[0]
   11670 		if x2.Op != Op386MOVBloadidx1 {
   11671 			break
   11672 		}
   11673 		i3 := x2.AuxInt
   11674 		s := x2.Aux
   11675 		_ = x2.Args[2]
   11676 		p := x2.Args[0]
   11677 		idx := x2.Args[1]
   11678 		mem := x2.Args[2]
   11679 		o0 := v.Args[1]
   11680 		if o0.Op != Op386ORL {
   11681 			break
   11682 		}
   11683 		_ = o0.Args[1]
   11684 		x0 := o0.Args[0]
   11685 		if x0.Op != Op386MOVWloadidx1 {
   11686 			break
   11687 		}
   11688 		i0 := x0.AuxInt
   11689 		if x0.Aux != s {
   11690 			break
   11691 		}
   11692 		_ = x0.Args[2]
   11693 		if idx != x0.Args[0] {
   11694 			break
   11695 		}
   11696 		if p != x0.Args[1] {
   11697 			break
   11698 		}
   11699 		if mem != x0.Args[2] {
   11700 			break
   11701 		}
   11702 		s0 := o0.Args[1]
   11703 		if s0.Op != Op386SHLLconst {
   11704 			break
   11705 		}
   11706 		if s0.AuxInt != 16 {
   11707 			break
   11708 		}
   11709 		x1 := s0.Args[0]
   11710 		if x1.Op != Op386MOVBloadidx1 {
   11711 			break
   11712 		}
   11713 		i2 := x1.AuxInt
   11714 		if x1.Aux != s {
   11715 			break
   11716 		}
   11717 		_ = x1.Args[2]
   11718 		if idx != x1.Args[0] {
   11719 			break
   11720 		}
   11721 		if p != x1.Args[1] {
   11722 			break
   11723 		}
   11724 		if mem != x1.Args[2] {
   11725 			break
   11726 		}
   11727 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11728 			break
   11729 		}
   11730 		b = mergePoint(b, x0, x1, x2)
   11731 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11732 		v.reset(OpCopy)
   11733 		v.AddArg(v0)
   11734 		v0.AuxInt = i0
   11735 		v0.Aux = s
   11736 		v0.AddArg(p)
   11737 		v0.AddArg(idx)
   11738 		v0.AddArg(mem)
   11739 		return true
   11740 	}
   11741 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))))
   11742 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11743 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11744 	for {
   11745 		_ = v.Args[1]
   11746 		s1 := v.Args[0]
   11747 		if s1.Op != Op386SHLLconst {
   11748 			break
   11749 		}
   11750 		if s1.AuxInt != 24 {
   11751 			break
   11752 		}
   11753 		x2 := s1.Args[0]
   11754 		if x2.Op != Op386MOVBloadidx1 {
   11755 			break
   11756 		}
   11757 		i3 := x2.AuxInt
   11758 		s := x2.Aux
   11759 		_ = x2.Args[2]
   11760 		idx := x2.Args[0]
   11761 		p := x2.Args[1]
   11762 		mem := x2.Args[2]
   11763 		o0 := v.Args[1]
   11764 		if o0.Op != Op386ORL {
   11765 			break
   11766 		}
   11767 		_ = o0.Args[1]
   11768 		x0 := o0.Args[0]
   11769 		if x0.Op != Op386MOVWloadidx1 {
   11770 			break
   11771 		}
   11772 		i0 := x0.AuxInt
   11773 		if x0.Aux != s {
   11774 			break
   11775 		}
   11776 		_ = x0.Args[2]
   11777 		if idx != x0.Args[0] {
   11778 			break
   11779 		}
   11780 		if p != x0.Args[1] {
   11781 			break
   11782 		}
   11783 		if mem != x0.Args[2] {
   11784 			break
   11785 		}
   11786 		s0 := o0.Args[1]
   11787 		if s0.Op != Op386SHLLconst {
   11788 			break
   11789 		}
   11790 		if s0.AuxInt != 16 {
   11791 			break
   11792 		}
   11793 		x1 := s0.Args[0]
   11794 		if x1.Op != Op386MOVBloadidx1 {
   11795 			break
   11796 		}
   11797 		i2 := x1.AuxInt
   11798 		if x1.Aux != s {
   11799 			break
   11800 		}
   11801 		_ = x1.Args[2]
   11802 		if idx != x1.Args[0] {
   11803 			break
   11804 		}
   11805 		if p != x1.Args[1] {
   11806 			break
   11807 		}
   11808 		if mem != x1.Args[2] {
   11809 			break
   11810 		}
   11811 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11812 			break
   11813 		}
   11814 		b = mergePoint(b, x0, x1, x2)
   11815 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11816 		v.reset(OpCopy)
   11817 		v.AddArg(v0)
   11818 		v0.AuxInt = i0
   11819 		v0.Aux = s
   11820 		v0.AddArg(p)
   11821 		v0.AddArg(idx)
   11822 		v0.AddArg(mem)
   11823 		return true
   11824 	}
   11825 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)))
   11826 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11827 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11828 	for {
   11829 		_ = v.Args[1]
   11830 		s1 := v.Args[0]
   11831 		if s1.Op != Op386SHLLconst {
   11832 			break
   11833 		}
   11834 		if s1.AuxInt != 24 {
   11835 			break
   11836 		}
   11837 		x2 := s1.Args[0]
   11838 		if x2.Op != Op386MOVBloadidx1 {
   11839 			break
   11840 		}
   11841 		i3 := x2.AuxInt
   11842 		s := x2.Aux
   11843 		_ = x2.Args[2]
   11844 		p := x2.Args[0]
   11845 		idx := x2.Args[1]
   11846 		mem := x2.Args[2]
   11847 		o0 := v.Args[1]
   11848 		if o0.Op != Op386ORL {
   11849 			break
   11850 		}
   11851 		_ = o0.Args[1]
   11852 		s0 := o0.Args[0]
   11853 		if s0.Op != Op386SHLLconst {
   11854 			break
   11855 		}
   11856 		if s0.AuxInt != 16 {
   11857 			break
   11858 		}
   11859 		x1 := s0.Args[0]
   11860 		if x1.Op != Op386MOVBloadidx1 {
   11861 			break
   11862 		}
   11863 		i2 := x1.AuxInt
   11864 		if x1.Aux != s {
   11865 			break
   11866 		}
   11867 		_ = x1.Args[2]
   11868 		if p != x1.Args[0] {
   11869 			break
   11870 		}
   11871 		if idx != x1.Args[1] {
   11872 			break
   11873 		}
   11874 		if mem != x1.Args[2] {
   11875 			break
   11876 		}
   11877 		x0 := o0.Args[1]
   11878 		if x0.Op != Op386MOVWloadidx1 {
   11879 			break
   11880 		}
   11881 		i0 := x0.AuxInt
   11882 		if x0.Aux != s {
   11883 			break
   11884 		}
   11885 		_ = x0.Args[2]
   11886 		if p != x0.Args[0] {
   11887 			break
   11888 		}
   11889 		if idx != x0.Args[1] {
   11890 			break
   11891 		}
   11892 		if mem != x0.Args[2] {
   11893 			break
   11894 		}
   11895 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11896 			break
   11897 		}
   11898 		b = mergePoint(b, x0, x1, x2)
   11899 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11900 		v.reset(OpCopy)
   11901 		v.AddArg(v0)
   11902 		v0.AuxInt = i0
   11903 		v0.Aux = s
   11904 		v0.AddArg(p)
   11905 		v0.AddArg(idx)
   11906 		v0.AddArg(mem)
   11907 		return true
   11908 	}
   11909 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)))
   11910 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11911 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11912 	for {
   11913 		_ = v.Args[1]
   11914 		s1 := v.Args[0]
   11915 		if s1.Op != Op386SHLLconst {
   11916 			break
   11917 		}
   11918 		if s1.AuxInt != 24 {
   11919 			break
   11920 		}
   11921 		x2 := s1.Args[0]
   11922 		if x2.Op != Op386MOVBloadidx1 {
   11923 			break
   11924 		}
   11925 		i3 := x2.AuxInt
   11926 		s := x2.Aux
   11927 		_ = x2.Args[2]
   11928 		idx := x2.Args[0]
   11929 		p := x2.Args[1]
   11930 		mem := x2.Args[2]
   11931 		o0 := v.Args[1]
   11932 		if o0.Op != Op386ORL {
   11933 			break
   11934 		}
   11935 		_ = o0.Args[1]
   11936 		s0 := o0.Args[0]
   11937 		if s0.Op != Op386SHLLconst {
   11938 			break
   11939 		}
   11940 		if s0.AuxInt != 16 {
   11941 			break
   11942 		}
   11943 		x1 := s0.Args[0]
   11944 		if x1.Op != Op386MOVBloadidx1 {
   11945 			break
   11946 		}
   11947 		i2 := x1.AuxInt
   11948 		if x1.Aux != s {
   11949 			break
   11950 		}
   11951 		_ = x1.Args[2]
   11952 		if p != x1.Args[0] {
   11953 			break
   11954 		}
   11955 		if idx != x1.Args[1] {
   11956 			break
   11957 		}
   11958 		if mem != x1.Args[2] {
   11959 			break
   11960 		}
   11961 		x0 := o0.Args[1]
   11962 		if x0.Op != Op386MOVWloadidx1 {
   11963 			break
   11964 		}
   11965 		i0 := x0.AuxInt
   11966 		if x0.Aux != s {
   11967 			break
   11968 		}
   11969 		_ = x0.Args[2]
   11970 		if p != x0.Args[0] {
   11971 			break
   11972 		}
   11973 		if idx != x0.Args[1] {
   11974 			break
   11975 		}
   11976 		if mem != x0.Args[2] {
   11977 			break
   11978 		}
   11979 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   11980 			break
   11981 		}
   11982 		b = mergePoint(b, x0, x1, x2)
   11983 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   11984 		v.reset(OpCopy)
   11985 		v.AddArg(v0)
   11986 		v0.AuxInt = i0
   11987 		v0.Aux = s
   11988 		v0.AddArg(p)
   11989 		v0.AddArg(idx)
   11990 		v0.AddArg(mem)
   11991 		return true
   11992 	}
   11993 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)))
   11994 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   11995 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   11996 	for {
   11997 		_ = v.Args[1]
   11998 		s1 := v.Args[0]
   11999 		if s1.Op != Op386SHLLconst {
   12000 			break
   12001 		}
   12002 		if s1.AuxInt != 24 {
   12003 			break
   12004 		}
   12005 		x2 := s1.Args[0]
   12006 		if x2.Op != Op386MOVBloadidx1 {
   12007 			break
   12008 		}
   12009 		i3 := x2.AuxInt
   12010 		s := x2.Aux
   12011 		_ = x2.Args[2]
   12012 		p := x2.Args[0]
   12013 		idx := x2.Args[1]
   12014 		mem := x2.Args[2]
   12015 		o0 := v.Args[1]
   12016 		if o0.Op != Op386ORL {
   12017 			break
   12018 		}
   12019 		_ = o0.Args[1]
   12020 		s0 := o0.Args[0]
   12021 		if s0.Op != Op386SHLLconst {
   12022 			break
   12023 		}
   12024 		if s0.AuxInt != 16 {
   12025 			break
   12026 		}
   12027 		x1 := s0.Args[0]
   12028 		if x1.Op != Op386MOVBloadidx1 {
   12029 			break
   12030 		}
   12031 		i2 := x1.AuxInt
   12032 		if x1.Aux != s {
   12033 			break
   12034 		}
   12035 		_ = x1.Args[2]
   12036 		if idx != x1.Args[0] {
   12037 			break
   12038 		}
   12039 		if p != x1.Args[1] {
   12040 			break
   12041 		}
   12042 		if mem != x1.Args[2] {
   12043 			break
   12044 		}
   12045 		x0 := o0.Args[1]
   12046 		if x0.Op != Op386MOVWloadidx1 {
   12047 			break
   12048 		}
   12049 		i0 := x0.AuxInt
   12050 		if x0.Aux != s {
   12051 			break
   12052 		}
   12053 		_ = x0.Args[2]
   12054 		if p != x0.Args[0] {
   12055 			break
   12056 		}
   12057 		if idx != x0.Args[1] {
   12058 			break
   12059 		}
   12060 		if mem != x0.Args[2] {
   12061 			break
   12062 		}
   12063 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12064 			break
   12065 		}
   12066 		b = mergePoint(b, x0, x1, x2)
   12067 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12068 		v.reset(OpCopy)
   12069 		v.AddArg(v0)
   12070 		v0.AuxInt = i0
   12071 		v0.Aux = s
   12072 		v0.AddArg(p)
   12073 		v0.AddArg(idx)
   12074 		v0.AddArg(mem)
   12075 		return true
   12076 	}
   12077 	return false
   12078 }
   12079 func rewriteValue386_Op386ORL_50(v *Value) bool {
   12080 	b := v.Block
   12081 	_ = b
   12082 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)))
   12083 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   12084 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   12085 	for {
   12086 		_ = v.Args[1]
   12087 		s1 := v.Args[0]
   12088 		if s1.Op != Op386SHLLconst {
   12089 			break
   12090 		}
   12091 		if s1.AuxInt != 24 {
   12092 			break
   12093 		}
   12094 		x2 := s1.Args[0]
   12095 		if x2.Op != Op386MOVBloadidx1 {
   12096 			break
   12097 		}
   12098 		i3 := x2.AuxInt
   12099 		s := x2.Aux
   12100 		_ = x2.Args[2]
   12101 		idx := x2.Args[0]
   12102 		p := x2.Args[1]
   12103 		mem := x2.Args[2]
   12104 		o0 := v.Args[1]
   12105 		if o0.Op != Op386ORL {
   12106 			break
   12107 		}
   12108 		_ = o0.Args[1]
   12109 		s0 := o0.Args[0]
   12110 		if s0.Op != Op386SHLLconst {
   12111 			break
   12112 		}
   12113 		if s0.AuxInt != 16 {
   12114 			break
   12115 		}
   12116 		x1 := s0.Args[0]
   12117 		if x1.Op != Op386MOVBloadidx1 {
   12118 			break
   12119 		}
   12120 		i2 := x1.AuxInt
   12121 		if x1.Aux != s {
   12122 			break
   12123 		}
   12124 		_ = x1.Args[2]
   12125 		if idx != x1.Args[0] {
   12126 			break
   12127 		}
   12128 		if p != x1.Args[1] {
   12129 			break
   12130 		}
   12131 		if mem != x1.Args[2] {
   12132 			break
   12133 		}
   12134 		x0 := o0.Args[1]
   12135 		if x0.Op != Op386MOVWloadidx1 {
   12136 			break
   12137 		}
   12138 		i0 := x0.AuxInt
   12139 		if x0.Aux != s {
   12140 			break
   12141 		}
   12142 		_ = x0.Args[2]
   12143 		if p != x0.Args[0] {
   12144 			break
   12145 		}
   12146 		if idx != x0.Args[1] {
   12147 			break
   12148 		}
   12149 		if mem != x0.Args[2] {
   12150 			break
   12151 		}
   12152 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12153 			break
   12154 		}
   12155 		b = mergePoint(b, x0, x1, x2)
   12156 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12157 		v.reset(OpCopy)
   12158 		v.AddArg(v0)
   12159 		v0.AuxInt = i0
   12160 		v0.Aux = s
   12161 		v0.AddArg(p)
   12162 		v0.AddArg(idx)
   12163 		v0.AddArg(mem)
   12164 		return true
   12165 	}
   12166 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)))
   12167 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   12168 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   12169 	for {
   12170 		_ = v.Args[1]
   12171 		s1 := v.Args[0]
   12172 		if s1.Op != Op386SHLLconst {
   12173 			break
   12174 		}
   12175 		if s1.AuxInt != 24 {
   12176 			break
   12177 		}
   12178 		x2 := s1.Args[0]
   12179 		if x2.Op != Op386MOVBloadidx1 {
   12180 			break
   12181 		}
   12182 		i3 := x2.AuxInt
   12183 		s := x2.Aux
   12184 		_ = x2.Args[2]
   12185 		p := x2.Args[0]
   12186 		idx := x2.Args[1]
   12187 		mem := x2.Args[2]
   12188 		o0 := v.Args[1]
   12189 		if o0.Op != Op386ORL {
   12190 			break
   12191 		}
   12192 		_ = o0.Args[1]
   12193 		s0 := o0.Args[0]
   12194 		if s0.Op != Op386SHLLconst {
   12195 			break
   12196 		}
   12197 		if s0.AuxInt != 16 {
   12198 			break
   12199 		}
   12200 		x1 := s0.Args[0]
   12201 		if x1.Op != Op386MOVBloadidx1 {
   12202 			break
   12203 		}
   12204 		i2 := x1.AuxInt
   12205 		if x1.Aux != s {
   12206 			break
   12207 		}
   12208 		_ = x1.Args[2]
   12209 		if p != x1.Args[0] {
   12210 			break
   12211 		}
   12212 		if idx != x1.Args[1] {
   12213 			break
   12214 		}
   12215 		if mem != x1.Args[2] {
   12216 			break
   12217 		}
   12218 		x0 := o0.Args[1]
   12219 		if x0.Op != Op386MOVWloadidx1 {
   12220 			break
   12221 		}
   12222 		i0 := x0.AuxInt
   12223 		if x0.Aux != s {
   12224 			break
   12225 		}
   12226 		_ = x0.Args[2]
   12227 		if idx != x0.Args[0] {
   12228 			break
   12229 		}
   12230 		if p != x0.Args[1] {
   12231 			break
   12232 		}
   12233 		if mem != x0.Args[2] {
   12234 			break
   12235 		}
   12236 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12237 			break
   12238 		}
   12239 		b = mergePoint(b, x0, x1, x2)
   12240 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12241 		v.reset(OpCopy)
   12242 		v.AddArg(v0)
   12243 		v0.AuxInt = i0
   12244 		v0.Aux = s
   12245 		v0.AddArg(p)
   12246 		v0.AddArg(idx)
   12247 		v0.AddArg(mem)
   12248 		return true
   12249 	}
   12250 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} p idx mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)))
   12251 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   12252 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   12253 	for {
   12254 		_ = v.Args[1]
   12255 		s1 := v.Args[0]
   12256 		if s1.Op != Op386SHLLconst {
   12257 			break
   12258 		}
   12259 		if s1.AuxInt != 24 {
   12260 			break
   12261 		}
   12262 		x2 := s1.Args[0]
   12263 		if x2.Op != Op386MOVBloadidx1 {
   12264 			break
   12265 		}
   12266 		i3 := x2.AuxInt
   12267 		s := x2.Aux
   12268 		_ = x2.Args[2]
   12269 		idx := x2.Args[0]
   12270 		p := x2.Args[1]
   12271 		mem := x2.Args[2]
   12272 		o0 := v.Args[1]
   12273 		if o0.Op != Op386ORL {
   12274 			break
   12275 		}
   12276 		_ = o0.Args[1]
   12277 		s0 := o0.Args[0]
   12278 		if s0.Op != Op386SHLLconst {
   12279 			break
   12280 		}
   12281 		if s0.AuxInt != 16 {
   12282 			break
   12283 		}
   12284 		x1 := s0.Args[0]
   12285 		if x1.Op != Op386MOVBloadidx1 {
   12286 			break
   12287 		}
   12288 		i2 := x1.AuxInt
   12289 		if x1.Aux != s {
   12290 			break
   12291 		}
   12292 		_ = x1.Args[2]
   12293 		if p != x1.Args[0] {
   12294 			break
   12295 		}
   12296 		if idx != x1.Args[1] {
   12297 			break
   12298 		}
   12299 		if mem != x1.Args[2] {
   12300 			break
   12301 		}
   12302 		x0 := o0.Args[1]
   12303 		if x0.Op != Op386MOVWloadidx1 {
   12304 			break
   12305 		}
   12306 		i0 := x0.AuxInt
   12307 		if x0.Aux != s {
   12308 			break
   12309 		}
   12310 		_ = x0.Args[2]
   12311 		if idx != x0.Args[0] {
   12312 			break
   12313 		}
   12314 		if p != x0.Args[1] {
   12315 			break
   12316 		}
   12317 		if mem != x0.Args[2] {
   12318 			break
   12319 		}
   12320 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12321 			break
   12322 		}
   12323 		b = mergePoint(b, x0, x1, x2)
   12324 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12325 		v.reset(OpCopy)
   12326 		v.AddArg(v0)
   12327 		v0.AuxInt = i0
   12328 		v0.Aux = s
   12329 		v0.AddArg(p)
   12330 		v0.AddArg(idx)
   12331 		v0.AddArg(mem)
   12332 		return true
   12333 	}
   12334 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)))
   12335 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   12336 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   12337 	for {
   12338 		_ = v.Args[1]
   12339 		s1 := v.Args[0]
   12340 		if s1.Op != Op386SHLLconst {
   12341 			break
   12342 		}
   12343 		if s1.AuxInt != 24 {
   12344 			break
   12345 		}
   12346 		x2 := s1.Args[0]
   12347 		if x2.Op != Op386MOVBloadidx1 {
   12348 			break
   12349 		}
   12350 		i3 := x2.AuxInt
   12351 		s := x2.Aux
   12352 		_ = x2.Args[2]
   12353 		p := x2.Args[0]
   12354 		idx := x2.Args[1]
   12355 		mem := x2.Args[2]
   12356 		o0 := v.Args[1]
   12357 		if o0.Op != Op386ORL {
   12358 			break
   12359 		}
   12360 		_ = o0.Args[1]
   12361 		s0 := o0.Args[0]
   12362 		if s0.Op != Op386SHLLconst {
   12363 			break
   12364 		}
   12365 		if s0.AuxInt != 16 {
   12366 			break
   12367 		}
   12368 		x1 := s0.Args[0]
   12369 		if x1.Op != Op386MOVBloadidx1 {
   12370 			break
   12371 		}
   12372 		i2 := x1.AuxInt
   12373 		if x1.Aux != s {
   12374 			break
   12375 		}
   12376 		_ = x1.Args[2]
   12377 		if idx != x1.Args[0] {
   12378 			break
   12379 		}
   12380 		if p != x1.Args[1] {
   12381 			break
   12382 		}
   12383 		if mem != x1.Args[2] {
   12384 			break
   12385 		}
   12386 		x0 := o0.Args[1]
   12387 		if x0.Op != Op386MOVWloadidx1 {
   12388 			break
   12389 		}
   12390 		i0 := x0.AuxInt
   12391 		if x0.Aux != s {
   12392 			break
   12393 		}
   12394 		_ = x0.Args[2]
   12395 		if idx != x0.Args[0] {
   12396 			break
   12397 		}
   12398 		if p != x0.Args[1] {
   12399 			break
   12400 		}
   12401 		if mem != x0.Args[2] {
   12402 			break
   12403 		}
   12404 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12405 			break
   12406 		}
   12407 		b = mergePoint(b, x0, x1, x2)
   12408 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12409 		v.reset(OpCopy)
   12410 		v.AddArg(v0)
   12411 		v0.AuxInt = i0
   12412 		v0.Aux = s
   12413 		v0.AddArg(p)
   12414 		v0.AddArg(idx)
   12415 		v0.AddArg(mem)
   12416 		return true
   12417 	}
   12418 	// match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} idx p mem)))
   12419 	// cond: i2 == i0+2   && i3 == i0+3   && x0.Uses == 1   && x1.Uses == 1   && x2.Uses == 1   && s0.Uses == 1   && s1.Uses == 1   && o0.Uses == 1   && mergePoint(b,x0,x1,x2) != nil   && clobber(x0)   && clobber(x1)   && clobber(x2)   && clobber(s0)   && clobber(s1)   && clobber(o0)
   12420 	// result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 <v.Type> [i0] {s} p idx mem)
   12421 	for {
   12422 		_ = v.Args[1]
   12423 		s1 := v.Args[0]
   12424 		if s1.Op != Op386SHLLconst {
   12425 			break
   12426 		}
   12427 		if s1.AuxInt != 24 {
   12428 			break
   12429 		}
   12430 		x2 := s1.Args[0]
   12431 		if x2.Op != Op386MOVBloadidx1 {
   12432 			break
   12433 		}
   12434 		i3 := x2.AuxInt
   12435 		s := x2.Aux
   12436 		_ = x2.Args[2]
   12437 		idx := x2.Args[0]
   12438 		p := x2.Args[1]
   12439 		mem := x2.Args[2]
   12440 		o0 := v.Args[1]
   12441 		if o0.Op != Op386ORL {
   12442 			break
   12443 		}
   12444 		_ = o0.Args[1]
   12445 		s0 := o0.Args[0]
   12446 		if s0.Op != Op386SHLLconst {
   12447 			break
   12448 		}
   12449 		if s0.AuxInt != 16 {
   12450 			break
   12451 		}
   12452 		x1 := s0.Args[0]
   12453 		if x1.Op != Op386MOVBloadidx1 {
   12454 			break
   12455 		}
   12456 		i2 := x1.AuxInt
   12457 		if x1.Aux != s {
   12458 			break
   12459 		}
   12460 		_ = x1.Args[2]
   12461 		if idx != x1.Args[0] {
   12462 			break
   12463 		}
   12464 		if p != x1.Args[1] {
   12465 			break
   12466 		}
   12467 		if mem != x1.Args[2] {
   12468 			break
   12469 		}
   12470 		x0 := o0.Args[1]
   12471 		if x0.Op != Op386MOVWloadidx1 {
   12472 			break
   12473 		}
   12474 		i0 := x0.AuxInt
   12475 		if x0.Aux != s {
   12476 			break
   12477 		}
   12478 		_ = x0.Args[2]
   12479 		if idx != x0.Args[0] {
   12480 			break
   12481 		}
   12482 		if p != x0.Args[1] {
   12483 			break
   12484 		}
   12485 		if mem != x0.Args[2] {
   12486 			break
   12487 		}
   12488 		if !(i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
   12489 			break
   12490 		}
   12491 		b = mergePoint(b, x0, x1, x2)
   12492 		v0 := b.NewValue0(v.Pos, Op386MOVLloadidx1, v.Type)
   12493 		v.reset(OpCopy)
   12494 		v.AddArg(v0)
   12495 		v0.AuxInt = i0
   12496 		v0.Aux = s
   12497 		v0.AddArg(p)
   12498 		v0.AddArg(idx)
   12499 		v0.AddArg(mem)
   12500 		return true
   12501 	}
   12502 	return false
   12503 }
   12504 func rewriteValue386_Op386ORLconst_0(v *Value) bool {
   12505 	// match: (ORLconst [c] x)
   12506 	// cond: int32(c)==0
   12507 	// result: x
   12508 	for {
   12509 		c := v.AuxInt
   12510 		x := v.Args[0]
   12511 		if !(int32(c) == 0) {
   12512 			break
   12513 		}
   12514 		v.reset(OpCopy)
   12515 		v.Type = x.Type
   12516 		v.AddArg(x)
   12517 		return true
   12518 	}
   12519 	// match: (ORLconst [c] _)
   12520 	// cond: int32(c)==-1
   12521 	// result: (MOVLconst [-1])
   12522 	for {
   12523 		c := v.AuxInt
   12524 		if !(int32(c) == -1) {
   12525 			break
   12526 		}
   12527 		v.reset(Op386MOVLconst)
   12528 		v.AuxInt = -1
   12529 		return true
   12530 	}
   12531 	// match: (ORLconst [c] (MOVLconst [d]))
   12532 	// cond:
   12533 	// result: (MOVLconst [c|d])
   12534 	for {
   12535 		c := v.AuxInt
   12536 		v_0 := v.Args[0]
   12537 		if v_0.Op != Op386MOVLconst {
   12538 			break
   12539 		}
   12540 		d := v_0.AuxInt
   12541 		v.reset(Op386MOVLconst)
   12542 		v.AuxInt = c | d
   12543 		return true
   12544 	}
   12545 	return false
   12546 }
   12547 func rewriteValue386_Op386ROLBconst_0(v *Value) bool {
   12548 	// match: (ROLBconst [c] (ROLBconst [d] x))
   12549 	// cond:
   12550 	// result: (ROLBconst [(c+d)& 7] x)
   12551 	for {
   12552 		c := v.AuxInt
   12553 		v_0 := v.Args[0]
   12554 		if v_0.Op != Op386ROLBconst {
   12555 			break
   12556 		}
   12557 		d := v_0.AuxInt
   12558 		x := v_0.Args[0]
   12559 		v.reset(Op386ROLBconst)
   12560 		v.AuxInt = (c + d) & 7
   12561 		v.AddArg(x)
   12562 		return true
   12563 	}
   12564 	// match: (ROLBconst [0] x)
   12565 	// cond:
   12566 	// result: x
   12567 	for {
   12568 		if v.AuxInt != 0 {
   12569 			break
   12570 		}
   12571 		x := v.Args[0]
   12572 		v.reset(OpCopy)
   12573 		v.Type = x.Type
   12574 		v.AddArg(x)
   12575 		return true
   12576 	}
   12577 	return false
   12578 }
   12579 func rewriteValue386_Op386ROLLconst_0(v *Value) bool {
   12580 	// match: (ROLLconst [c] (ROLLconst [d] x))
   12581 	// cond:
   12582 	// result: (ROLLconst [(c+d)&31] x)
   12583 	for {
   12584 		c := v.AuxInt
   12585 		v_0 := v.Args[0]
   12586 		if v_0.Op != Op386ROLLconst {
   12587 			break
   12588 		}
   12589 		d := v_0.AuxInt
   12590 		x := v_0.Args[0]
   12591 		v.reset(Op386ROLLconst)
   12592 		v.AuxInt = (c + d) & 31
   12593 		v.AddArg(x)
   12594 		return true
   12595 	}
   12596 	// match: (ROLLconst [0] x)
   12597 	// cond:
   12598 	// result: x
   12599 	for {
   12600 		if v.AuxInt != 0 {
   12601 			break
   12602 		}
   12603 		x := v.Args[0]
   12604 		v.reset(OpCopy)
   12605 		v.Type = x.Type
   12606 		v.AddArg(x)
   12607 		return true
   12608 	}
   12609 	return false
   12610 }
   12611 func rewriteValue386_Op386ROLWconst_0(v *Value) bool {
   12612 	// match: (ROLWconst [c] (ROLWconst [d] x))
   12613 	// cond:
   12614 	// result: (ROLWconst [(c+d)&15] x)
   12615 	for {
   12616 		c := v.AuxInt
   12617 		v_0 := v.Args[0]
   12618 		if v_0.Op != Op386ROLWconst {
   12619 			break
   12620 		}
   12621 		d := v_0.AuxInt
   12622 		x := v_0.Args[0]
   12623 		v.reset(Op386ROLWconst)
   12624 		v.AuxInt = (c + d) & 15
   12625 		v.AddArg(x)
   12626 		return true
   12627 	}
   12628 	// match: (ROLWconst [0] x)
   12629 	// cond:
   12630 	// result: x
   12631 	for {
   12632 		if v.AuxInt != 0 {
   12633 			break
   12634 		}
   12635 		x := v.Args[0]
   12636 		v.reset(OpCopy)
   12637 		v.Type = x.Type
   12638 		v.AddArg(x)
   12639 		return true
   12640 	}
   12641 	return false
   12642 }
   12643 func rewriteValue386_Op386SARB_0(v *Value) bool {
   12644 	// match: (SARB x (MOVLconst [c]))
   12645 	// cond:
   12646 	// result: (SARBconst [min(c&31,7)] x)
   12647 	for {
   12648 		_ = v.Args[1]
   12649 		x := v.Args[0]
   12650 		v_1 := v.Args[1]
   12651 		if v_1.Op != Op386MOVLconst {
   12652 			break
   12653 		}
   12654 		c := v_1.AuxInt
   12655 		v.reset(Op386SARBconst)
   12656 		v.AuxInt = min(c&31, 7)
   12657 		v.AddArg(x)
   12658 		return true
   12659 	}
   12660 	return false
   12661 }
   12662 func rewriteValue386_Op386SARBconst_0(v *Value) bool {
   12663 	// match: (SARBconst x [0])
   12664 	// cond:
   12665 	// result: x
   12666 	for {
   12667 		if v.AuxInt != 0 {
   12668 			break
   12669 		}
   12670 		x := v.Args[0]
   12671 		v.reset(OpCopy)
   12672 		v.Type = x.Type
   12673 		v.AddArg(x)
   12674 		return true
   12675 	}
   12676 	// match: (SARBconst [c] (MOVLconst [d]))
   12677 	// cond:
   12678 	// result: (MOVLconst [d>>uint64(c)])
   12679 	for {
   12680 		c := v.AuxInt
   12681 		v_0 := v.Args[0]
   12682 		if v_0.Op != Op386MOVLconst {
   12683 			break
   12684 		}
   12685 		d := v_0.AuxInt
   12686 		v.reset(Op386MOVLconst)
   12687 		v.AuxInt = d >> uint64(c)
   12688 		return true
   12689 	}
   12690 	return false
   12691 }
   12692 func rewriteValue386_Op386SARL_0(v *Value) bool {
   12693 	// match: (SARL x (MOVLconst [c]))
   12694 	// cond:
   12695 	// result: (SARLconst [c&31] x)
   12696 	for {
   12697 		_ = v.Args[1]
   12698 		x := v.Args[0]
   12699 		v_1 := v.Args[1]
   12700 		if v_1.Op != Op386MOVLconst {
   12701 			break
   12702 		}
   12703 		c := v_1.AuxInt
   12704 		v.reset(Op386SARLconst)
   12705 		v.AuxInt = c & 31
   12706 		v.AddArg(x)
   12707 		return true
   12708 	}
   12709 	// match: (SARL x (ANDLconst [31] y))
   12710 	// cond:
   12711 	// result: (SARL x y)
   12712 	for {
   12713 		_ = v.Args[1]
   12714 		x := v.Args[0]
   12715 		v_1 := v.Args[1]
   12716 		if v_1.Op != Op386ANDLconst {
   12717 			break
   12718 		}
   12719 		if v_1.AuxInt != 31 {
   12720 			break
   12721 		}
   12722 		y := v_1.Args[0]
   12723 		v.reset(Op386SARL)
   12724 		v.AddArg(x)
   12725 		v.AddArg(y)
   12726 		return true
   12727 	}
   12728 	return false
   12729 }
   12730 func rewriteValue386_Op386SARLconst_0(v *Value) bool {
   12731 	// match: (SARLconst x [0])
   12732 	// cond:
   12733 	// result: x
   12734 	for {
   12735 		if v.AuxInt != 0 {
   12736 			break
   12737 		}
   12738 		x := v.Args[0]
   12739 		v.reset(OpCopy)
   12740 		v.Type = x.Type
   12741 		v.AddArg(x)
   12742 		return true
   12743 	}
   12744 	// match: (SARLconst [c] (MOVLconst [d]))
   12745 	// cond:
   12746 	// result: (MOVLconst [d>>uint64(c)])
   12747 	for {
   12748 		c := v.AuxInt
   12749 		v_0 := v.Args[0]
   12750 		if v_0.Op != Op386MOVLconst {
   12751 			break
   12752 		}
   12753 		d := v_0.AuxInt
   12754 		v.reset(Op386MOVLconst)
   12755 		v.AuxInt = d >> uint64(c)
   12756 		return true
   12757 	}
   12758 	return false
   12759 }
   12760 func rewriteValue386_Op386SARW_0(v *Value) bool {
   12761 	// match: (SARW x (MOVLconst [c]))
   12762 	// cond:
   12763 	// result: (SARWconst [min(c&31,15)] x)
   12764 	for {
   12765 		_ = v.Args[1]
   12766 		x := v.Args[0]
   12767 		v_1 := v.Args[1]
   12768 		if v_1.Op != Op386MOVLconst {
   12769 			break
   12770 		}
   12771 		c := v_1.AuxInt
   12772 		v.reset(Op386SARWconst)
   12773 		v.AuxInt = min(c&31, 15)
   12774 		v.AddArg(x)
   12775 		return true
   12776 	}
   12777 	return false
   12778 }
   12779 func rewriteValue386_Op386SARWconst_0(v *Value) bool {
   12780 	// match: (SARWconst x [0])
   12781 	// cond:
   12782 	// result: x
   12783 	for {
   12784 		if v.AuxInt != 0 {
   12785 			break
   12786 		}
   12787 		x := v.Args[0]
   12788 		v.reset(OpCopy)
   12789 		v.Type = x.Type
   12790 		v.AddArg(x)
   12791 		return true
   12792 	}
   12793 	// match: (SARWconst [c] (MOVLconst [d]))
   12794 	// cond:
   12795 	// result: (MOVLconst [d>>uint64(c)])
   12796 	for {
   12797 		c := v.AuxInt
   12798 		v_0 := v.Args[0]
   12799 		if v_0.Op != Op386MOVLconst {
   12800 			break
   12801 		}
   12802 		d := v_0.AuxInt
   12803 		v.reset(Op386MOVLconst)
   12804 		v.AuxInt = d >> uint64(c)
   12805 		return true
   12806 	}
   12807 	return false
   12808 }
   12809 func rewriteValue386_Op386SBBL_0(v *Value) bool {
   12810 	// match: (SBBL x (MOVLconst [c]) f)
   12811 	// cond:
   12812 	// result: (SBBLconst [c] x f)
   12813 	for {
   12814 		_ = v.Args[2]
   12815 		x := v.Args[0]
   12816 		v_1 := v.Args[1]
   12817 		if v_1.Op != Op386MOVLconst {
   12818 			break
   12819 		}
   12820 		c := v_1.AuxInt
   12821 		f := v.Args[2]
   12822 		v.reset(Op386SBBLconst)
   12823 		v.AuxInt = c
   12824 		v.AddArg(x)
   12825 		v.AddArg(f)
   12826 		return true
   12827 	}
   12828 	return false
   12829 }
   12830 func rewriteValue386_Op386SBBLcarrymask_0(v *Value) bool {
   12831 	// match: (SBBLcarrymask (FlagEQ))
   12832 	// cond:
   12833 	// result: (MOVLconst [0])
   12834 	for {
   12835 		v_0 := v.Args[0]
   12836 		if v_0.Op != Op386FlagEQ {
   12837 			break
   12838 		}
   12839 		v.reset(Op386MOVLconst)
   12840 		v.AuxInt = 0
   12841 		return true
   12842 	}
   12843 	// match: (SBBLcarrymask (FlagLT_ULT))
   12844 	// cond:
   12845 	// result: (MOVLconst [-1])
   12846 	for {
   12847 		v_0 := v.Args[0]
   12848 		if v_0.Op != Op386FlagLT_ULT {
   12849 			break
   12850 		}
   12851 		v.reset(Op386MOVLconst)
   12852 		v.AuxInt = -1
   12853 		return true
   12854 	}
   12855 	// match: (SBBLcarrymask (FlagLT_UGT))
   12856 	// cond:
   12857 	// result: (MOVLconst [0])
   12858 	for {
   12859 		v_0 := v.Args[0]
   12860 		if v_0.Op != Op386FlagLT_UGT {
   12861 			break
   12862 		}
   12863 		v.reset(Op386MOVLconst)
   12864 		v.AuxInt = 0
   12865 		return true
   12866 	}
   12867 	// match: (SBBLcarrymask (FlagGT_ULT))
   12868 	// cond:
   12869 	// result: (MOVLconst [-1])
   12870 	for {
   12871 		v_0 := v.Args[0]
   12872 		if v_0.Op != Op386FlagGT_ULT {
   12873 			break
   12874 		}
   12875 		v.reset(Op386MOVLconst)
   12876 		v.AuxInt = -1
   12877 		return true
   12878 	}
   12879 	// match: (SBBLcarrymask (FlagGT_UGT))
   12880 	// cond:
   12881 	// result: (MOVLconst [0])
   12882 	for {
   12883 		v_0 := v.Args[0]
   12884 		if v_0.Op != Op386FlagGT_UGT {
   12885 			break
   12886 		}
   12887 		v.reset(Op386MOVLconst)
   12888 		v.AuxInt = 0
   12889 		return true
   12890 	}
   12891 	return false
   12892 }
   12893 func rewriteValue386_Op386SETA_0(v *Value) bool {
   12894 	// match: (SETA (InvertFlags x))
   12895 	// cond:
   12896 	// result: (SETB x)
   12897 	for {
   12898 		v_0 := v.Args[0]
   12899 		if v_0.Op != Op386InvertFlags {
   12900 			break
   12901 		}
   12902 		x := v_0.Args[0]
   12903 		v.reset(Op386SETB)
   12904 		v.AddArg(x)
   12905 		return true
   12906 	}
   12907 	// match: (SETA (FlagEQ))
   12908 	// cond:
   12909 	// result: (MOVLconst [0])
   12910 	for {
   12911 		v_0 := v.Args[0]
   12912 		if v_0.Op != Op386FlagEQ {
   12913 			break
   12914 		}
   12915 		v.reset(Op386MOVLconst)
   12916 		v.AuxInt = 0
   12917 		return true
   12918 	}
   12919 	// match: (SETA (FlagLT_ULT))
   12920 	// cond:
   12921 	// result: (MOVLconst [0])
   12922 	for {
   12923 		v_0 := v.Args[0]
   12924 		if v_0.Op != Op386FlagLT_ULT {
   12925 			break
   12926 		}
   12927 		v.reset(Op386MOVLconst)
   12928 		v.AuxInt = 0
   12929 		return true
   12930 	}
   12931 	// match: (SETA (FlagLT_UGT))
   12932 	// cond:
   12933 	// result: (MOVLconst [1])
   12934 	for {
   12935 		v_0 := v.Args[0]
   12936 		if v_0.Op != Op386FlagLT_UGT {
   12937 			break
   12938 		}
   12939 		v.reset(Op386MOVLconst)
   12940 		v.AuxInt = 1
   12941 		return true
   12942 	}
   12943 	// match: (SETA (FlagGT_ULT))
   12944 	// cond:
   12945 	// result: (MOVLconst [0])
   12946 	for {
   12947 		v_0 := v.Args[0]
   12948 		if v_0.Op != Op386FlagGT_ULT {
   12949 			break
   12950 		}
   12951 		v.reset(Op386MOVLconst)
   12952 		v.AuxInt = 0
   12953 		return true
   12954 	}
   12955 	// match: (SETA (FlagGT_UGT))
   12956 	// cond:
   12957 	// result: (MOVLconst [1])
   12958 	for {
   12959 		v_0 := v.Args[0]
   12960 		if v_0.Op != Op386FlagGT_UGT {
   12961 			break
   12962 		}
   12963 		v.reset(Op386MOVLconst)
   12964 		v.AuxInt = 1
   12965 		return true
   12966 	}
   12967 	return false
   12968 }
   12969 func rewriteValue386_Op386SETAE_0(v *Value) bool {
   12970 	// match: (SETAE (InvertFlags x))
   12971 	// cond:
   12972 	// result: (SETBE x)
   12973 	for {
   12974 		v_0 := v.Args[0]
   12975 		if v_0.Op != Op386InvertFlags {
   12976 			break
   12977 		}
   12978 		x := v_0.Args[0]
   12979 		v.reset(Op386SETBE)
   12980 		v.AddArg(x)
   12981 		return true
   12982 	}
   12983 	// match: (SETAE (FlagEQ))
   12984 	// cond:
   12985 	// result: (MOVLconst [1])
   12986 	for {
   12987 		v_0 := v.Args[0]
   12988 		if v_0.Op != Op386FlagEQ {
   12989 			break
   12990 		}
   12991 		v.reset(Op386MOVLconst)
   12992 		v.AuxInt = 1
   12993 		return true
   12994 	}
   12995 	// match: (SETAE (FlagLT_ULT))
   12996 	// cond:
   12997 	// result: (MOVLconst [0])
   12998 	for {
   12999 		v_0 := v.Args[0]
   13000 		if v_0.Op != Op386FlagLT_ULT {
   13001 			break
   13002 		}
   13003 		v.reset(Op386MOVLconst)
   13004 		v.AuxInt = 0
   13005 		return true
   13006 	}
   13007 	// match: (SETAE (FlagLT_UGT))
   13008 	// cond:
   13009 	// result: (MOVLconst [1])
   13010 	for {
   13011 		v_0 := v.Args[0]
   13012 		if v_0.Op != Op386FlagLT_UGT {
   13013 			break
   13014 		}
   13015 		v.reset(Op386MOVLconst)
   13016 		v.AuxInt = 1
   13017 		return true
   13018 	}
   13019 	// match: (SETAE (FlagGT_ULT))
   13020 	// cond:
   13021 	// result: (MOVLconst [0])
   13022 	for {
   13023 		v_0 := v.Args[0]
   13024 		if v_0.Op != Op386FlagGT_ULT {
   13025 			break
   13026 		}
   13027 		v.reset(Op386MOVLconst)
   13028 		v.AuxInt = 0
   13029 		return true
   13030 	}
   13031 	// match: (SETAE (FlagGT_UGT))
   13032 	// cond:
   13033 	// result: (MOVLconst [1])
   13034 	for {
   13035 		v_0 := v.Args[0]
   13036 		if v_0.Op != Op386FlagGT_UGT {
   13037 			break
   13038 		}
   13039 		v.reset(Op386MOVLconst)
   13040 		v.AuxInt = 1
   13041 		return true
   13042 	}
   13043 	return false
   13044 }
   13045 func rewriteValue386_Op386SETB_0(v *Value) bool {
   13046 	// match: (SETB (InvertFlags x))
   13047 	// cond:
   13048 	// result: (SETA x)
   13049 	for {
   13050 		v_0 := v.Args[0]
   13051 		if v_0.Op != Op386InvertFlags {
   13052 			break
   13053 		}
   13054 		x := v_0.Args[0]
   13055 		v.reset(Op386SETA)
   13056 		v.AddArg(x)
   13057 		return true
   13058 	}
   13059 	// match: (SETB (FlagEQ))
   13060 	// cond:
   13061 	// result: (MOVLconst [0])
   13062 	for {
   13063 		v_0 := v.Args[0]
   13064 		if v_0.Op != Op386FlagEQ {
   13065 			break
   13066 		}
   13067 		v.reset(Op386MOVLconst)
   13068 		v.AuxInt = 0
   13069 		return true
   13070 	}
   13071 	// match: (SETB (FlagLT_ULT))
   13072 	// cond:
   13073 	// result: (MOVLconst [1])
   13074 	for {
   13075 		v_0 := v.Args[0]
   13076 		if v_0.Op != Op386FlagLT_ULT {
   13077 			break
   13078 		}
   13079 		v.reset(Op386MOVLconst)
   13080 		v.AuxInt = 1
   13081 		return true
   13082 	}
   13083 	// match: (SETB (FlagLT_UGT))
   13084 	// cond:
   13085 	// result: (MOVLconst [0])
   13086 	for {
   13087 		v_0 := v.Args[0]
   13088 		if v_0.Op != Op386FlagLT_UGT {
   13089 			break
   13090 		}
   13091 		v.reset(Op386MOVLconst)
   13092 		v.AuxInt = 0
   13093 		return true
   13094 	}
   13095 	// match: (SETB (FlagGT_ULT))
   13096 	// cond:
   13097 	// result: (MOVLconst [1])
   13098 	for {
   13099 		v_0 := v.Args[0]
   13100 		if v_0.Op != Op386FlagGT_ULT {
   13101 			break
   13102 		}
   13103 		v.reset(Op386MOVLconst)
   13104 		v.AuxInt = 1
   13105 		return true
   13106 	}
   13107 	// match: (SETB (FlagGT_UGT))
   13108 	// cond:
   13109 	// result: (MOVLconst [0])
   13110 	for {
   13111 		v_0 := v.Args[0]
   13112 		if v_0.Op != Op386FlagGT_UGT {
   13113 			break
   13114 		}
   13115 		v.reset(Op386MOVLconst)
   13116 		v.AuxInt = 0
   13117 		return true
   13118 	}
   13119 	return false
   13120 }
   13121 func rewriteValue386_Op386SETBE_0(v *Value) bool {
   13122 	// match: (SETBE (InvertFlags x))
   13123 	// cond:
   13124 	// result: (SETAE x)
   13125 	for {
   13126 		v_0 := v.Args[0]
   13127 		if v_0.Op != Op386InvertFlags {
   13128 			break
   13129 		}
   13130 		x := v_0.Args[0]
   13131 		v.reset(Op386SETAE)
   13132 		v.AddArg(x)
   13133 		return true
   13134 	}
   13135 	// match: (SETBE (FlagEQ))
   13136 	// cond:
   13137 	// result: (MOVLconst [1])
   13138 	for {
   13139 		v_0 := v.Args[0]
   13140 		if v_0.Op != Op386FlagEQ {
   13141 			break
   13142 		}
   13143 		v.reset(Op386MOVLconst)
   13144 		v.AuxInt = 1
   13145 		return true
   13146 	}
   13147 	// match: (SETBE (FlagLT_ULT))
   13148 	// cond:
   13149 	// result: (MOVLconst [1])
   13150 	for {
   13151 		v_0 := v.Args[0]
   13152 		if v_0.Op != Op386FlagLT_ULT {
   13153 			break
   13154 		}
   13155 		v.reset(Op386MOVLconst)
   13156 		v.AuxInt = 1
   13157 		return true
   13158 	}
   13159 	// match: (SETBE (FlagLT_UGT))
   13160 	// cond:
   13161 	// result: (MOVLconst [0])
   13162 	for {
   13163 		v_0 := v.Args[0]
   13164 		if v_0.Op != Op386FlagLT_UGT {
   13165 			break
   13166 		}
   13167 		v.reset(Op386MOVLconst)
   13168 		v.AuxInt = 0
   13169 		return true
   13170 	}
   13171 	// match: (SETBE (FlagGT_ULT))
   13172 	// cond:
   13173 	// result: (MOVLconst [1])
   13174 	for {
   13175 		v_0 := v.Args[0]
   13176 		if v_0.Op != Op386FlagGT_ULT {
   13177 			break
   13178 		}
   13179 		v.reset(Op386MOVLconst)
   13180 		v.AuxInt = 1
   13181 		return true
   13182 	}
   13183 	// match: (SETBE (FlagGT_UGT))
   13184 	// cond:
   13185 	// result: (MOVLconst [0])
   13186 	for {
   13187 		v_0 := v.Args[0]
   13188 		if v_0.Op != Op386FlagGT_UGT {
   13189 			break
   13190 		}
   13191 		v.reset(Op386MOVLconst)
   13192 		v.AuxInt = 0
   13193 		return true
   13194 	}
   13195 	return false
   13196 }
   13197 func rewriteValue386_Op386SETEQ_0(v *Value) bool {
   13198 	// match: (SETEQ (InvertFlags x))
   13199 	// cond:
   13200 	// result: (SETEQ x)
   13201 	for {
   13202 		v_0 := v.Args[0]
   13203 		if v_0.Op != Op386InvertFlags {
   13204 			break
   13205 		}
   13206 		x := v_0.Args[0]
   13207 		v.reset(Op386SETEQ)
   13208 		v.AddArg(x)
   13209 		return true
   13210 	}
   13211 	// match: (SETEQ (FlagEQ))
   13212 	// cond:
   13213 	// result: (MOVLconst [1])
   13214 	for {
   13215 		v_0 := v.Args[0]
   13216 		if v_0.Op != Op386FlagEQ {
   13217 			break
   13218 		}
   13219 		v.reset(Op386MOVLconst)
   13220 		v.AuxInt = 1
   13221 		return true
   13222 	}
   13223 	// match: (SETEQ (FlagLT_ULT))
   13224 	// cond:
   13225 	// result: (MOVLconst [0])
   13226 	for {
   13227 		v_0 := v.Args[0]
   13228 		if v_0.Op != Op386FlagLT_ULT {
   13229 			break
   13230 		}
   13231 		v.reset(Op386MOVLconst)
   13232 		v.AuxInt = 0
   13233 		return true
   13234 	}
   13235 	// match: (SETEQ (FlagLT_UGT))
   13236 	// cond:
   13237 	// result: (MOVLconst [0])
   13238 	for {
   13239 		v_0 := v.Args[0]
   13240 		if v_0.Op != Op386FlagLT_UGT {
   13241 			break
   13242 		}
   13243 		v.reset(Op386MOVLconst)
   13244 		v.AuxInt = 0
   13245 		return true
   13246 	}
   13247 	// match: (SETEQ (FlagGT_ULT))
   13248 	// cond:
   13249 	// result: (MOVLconst [0])
   13250 	for {
   13251 		v_0 := v.Args[0]
   13252 		if v_0.Op != Op386FlagGT_ULT {
   13253 			break
   13254 		}
   13255 		v.reset(Op386MOVLconst)
   13256 		v.AuxInt = 0
   13257 		return true
   13258 	}
   13259 	// match: (SETEQ (FlagGT_UGT))
   13260 	// cond:
   13261 	// result: (MOVLconst [0])
   13262 	for {
   13263 		v_0 := v.Args[0]
   13264 		if v_0.Op != Op386FlagGT_UGT {
   13265 			break
   13266 		}
   13267 		v.reset(Op386MOVLconst)
   13268 		v.AuxInt = 0
   13269 		return true
   13270 	}
   13271 	return false
   13272 }
   13273 func rewriteValue386_Op386SETG_0(v *Value) bool {
   13274 	// match: (SETG (InvertFlags x))
   13275 	// cond:
   13276 	// result: (SETL x)
   13277 	for {
   13278 		v_0 := v.Args[0]
   13279 		if v_0.Op != Op386InvertFlags {
   13280 			break
   13281 		}
   13282 		x := v_0.Args[0]
   13283 		v.reset(Op386SETL)
   13284 		v.AddArg(x)
   13285 		return true
   13286 	}
   13287 	// match: (SETG (FlagEQ))
   13288 	// cond:
   13289 	// result: (MOVLconst [0])
   13290 	for {
   13291 		v_0 := v.Args[0]
   13292 		if v_0.Op != Op386FlagEQ {
   13293 			break
   13294 		}
   13295 		v.reset(Op386MOVLconst)
   13296 		v.AuxInt = 0
   13297 		return true
   13298 	}
   13299 	// match: (SETG (FlagLT_ULT))
   13300 	// cond:
   13301 	// result: (MOVLconst [0])
   13302 	for {
   13303 		v_0 := v.Args[0]
   13304 		if v_0.Op != Op386FlagLT_ULT {
   13305 			break
   13306 		}
   13307 		v.reset(Op386MOVLconst)
   13308 		v.AuxInt = 0
   13309 		return true
   13310 	}
   13311 	// match: (SETG (FlagLT_UGT))
   13312 	// cond:
   13313 	// result: (MOVLconst [0])
   13314 	for {
   13315 		v_0 := v.Args[0]
   13316 		if v_0.Op != Op386FlagLT_UGT {
   13317 			break
   13318 		}
   13319 		v.reset(Op386MOVLconst)
   13320 		v.AuxInt = 0
   13321 		return true
   13322 	}
   13323 	// match: (SETG (FlagGT_ULT))
   13324 	// cond:
   13325 	// result: (MOVLconst [1])
   13326 	for {
   13327 		v_0 := v.Args[0]
   13328 		if v_0.Op != Op386FlagGT_ULT {
   13329 			break
   13330 		}
   13331 		v.reset(Op386MOVLconst)
   13332 		v.AuxInt = 1
   13333 		return true
   13334 	}
   13335 	// match: (SETG (FlagGT_UGT))
   13336 	// cond:
   13337 	// result: (MOVLconst [1])
   13338 	for {
   13339 		v_0 := v.Args[0]
   13340 		if v_0.Op != Op386FlagGT_UGT {
   13341 			break
   13342 		}
   13343 		v.reset(Op386MOVLconst)
   13344 		v.AuxInt = 1
   13345 		return true
   13346 	}
   13347 	return false
   13348 }
   13349 func rewriteValue386_Op386SETGE_0(v *Value) bool {
   13350 	// match: (SETGE (InvertFlags x))
   13351 	// cond:
   13352 	// result: (SETLE x)
   13353 	for {
   13354 		v_0 := v.Args[0]
   13355 		if v_0.Op != Op386InvertFlags {
   13356 			break
   13357 		}
   13358 		x := v_0.Args[0]
   13359 		v.reset(Op386SETLE)
   13360 		v.AddArg(x)
   13361 		return true
   13362 	}
   13363 	// match: (SETGE (FlagEQ))
   13364 	// cond:
   13365 	// result: (MOVLconst [1])
   13366 	for {
   13367 		v_0 := v.Args[0]
   13368 		if v_0.Op != Op386FlagEQ {
   13369 			break
   13370 		}
   13371 		v.reset(Op386MOVLconst)
   13372 		v.AuxInt = 1
   13373 		return true
   13374 	}
   13375 	// match: (SETGE (FlagLT_ULT))
   13376 	// cond:
   13377 	// result: (MOVLconst [0])
   13378 	for {
   13379 		v_0 := v.Args[0]
   13380 		if v_0.Op != Op386FlagLT_ULT {
   13381 			break
   13382 		}
   13383 		v.reset(Op386MOVLconst)
   13384 		v.AuxInt = 0
   13385 		return true
   13386 	}
   13387 	// match: (SETGE (FlagLT_UGT))
   13388 	// cond:
   13389 	// result: (MOVLconst [0])
   13390 	for {
   13391 		v_0 := v.Args[0]
   13392 		if v_0.Op != Op386FlagLT_UGT {
   13393 			break
   13394 		}
   13395 		v.reset(Op386MOVLconst)
   13396 		v.AuxInt = 0
   13397 		return true
   13398 	}
   13399 	// match: (SETGE (FlagGT_ULT))
   13400 	// cond:
   13401 	// result: (MOVLconst [1])
   13402 	for {
   13403 		v_0 := v.Args[0]
   13404 		if v_0.Op != Op386FlagGT_ULT {
   13405 			break
   13406 		}
   13407 		v.reset(Op386MOVLconst)
   13408 		v.AuxInt = 1
   13409 		return true
   13410 	}
   13411 	// match: (SETGE (FlagGT_UGT))
   13412 	// cond:
   13413 	// result: (MOVLconst [1])
   13414 	for {
   13415 		v_0 := v.Args[0]
   13416 		if v_0.Op != Op386FlagGT_UGT {
   13417 			break
   13418 		}
   13419 		v.reset(Op386MOVLconst)
   13420 		v.AuxInt = 1
   13421 		return true
   13422 	}
   13423 	return false
   13424 }
   13425 func rewriteValue386_Op386SETL_0(v *Value) bool {
   13426 	// match: (SETL (InvertFlags x))
   13427 	// cond:
   13428 	// result: (SETG x)
   13429 	for {
   13430 		v_0 := v.Args[0]
   13431 		if v_0.Op != Op386InvertFlags {
   13432 			break
   13433 		}
   13434 		x := v_0.Args[0]
   13435 		v.reset(Op386SETG)
   13436 		v.AddArg(x)
   13437 		return true
   13438 	}
   13439 	// match: (SETL (FlagEQ))
   13440 	// cond:
   13441 	// result: (MOVLconst [0])
   13442 	for {
   13443 		v_0 := v.Args[0]
   13444 		if v_0.Op != Op386FlagEQ {
   13445 			break
   13446 		}
   13447 		v.reset(Op386MOVLconst)
   13448 		v.AuxInt = 0
   13449 		return true
   13450 	}
   13451 	// match: (SETL (FlagLT_ULT))
   13452 	// cond:
   13453 	// result: (MOVLconst [1])
   13454 	for {
   13455 		v_0 := v.Args[0]
   13456 		if v_0.Op != Op386FlagLT_ULT {
   13457 			break
   13458 		}
   13459 		v.reset(Op386MOVLconst)
   13460 		v.AuxInt = 1
   13461 		return true
   13462 	}
   13463 	// match: (SETL (FlagLT_UGT))
   13464 	// cond:
   13465 	// result: (MOVLconst [1])
   13466 	for {
   13467 		v_0 := v.Args[0]
   13468 		if v_0.Op != Op386FlagLT_UGT {
   13469 			break
   13470 		}
   13471 		v.reset(Op386MOVLconst)
   13472 		v.AuxInt = 1
   13473 		return true
   13474 	}
   13475 	// match: (SETL (FlagGT_ULT))
   13476 	// cond:
   13477 	// result: (MOVLconst [0])
   13478 	for {
   13479 		v_0 := v.Args[0]
   13480 		if v_0.Op != Op386FlagGT_ULT {
   13481 			break
   13482 		}
   13483 		v.reset(Op386MOVLconst)
   13484 		v.AuxInt = 0
   13485 		return true
   13486 	}
   13487 	// match: (SETL (FlagGT_UGT))
   13488 	// cond:
   13489 	// result: (MOVLconst [0])
   13490 	for {
   13491 		v_0 := v.Args[0]
   13492 		if v_0.Op != Op386FlagGT_UGT {
   13493 			break
   13494 		}
   13495 		v.reset(Op386MOVLconst)
   13496 		v.AuxInt = 0
   13497 		return true
   13498 	}
   13499 	return false
   13500 }
   13501 func rewriteValue386_Op386SETLE_0(v *Value) bool {
   13502 	// match: (SETLE (InvertFlags x))
   13503 	// cond:
   13504 	// result: (SETGE x)
   13505 	for {
   13506 		v_0 := v.Args[0]
   13507 		if v_0.Op != Op386InvertFlags {
   13508 			break
   13509 		}
   13510 		x := v_0.Args[0]
   13511 		v.reset(Op386SETGE)
   13512 		v.AddArg(x)
   13513 		return true
   13514 	}
   13515 	// match: (SETLE (FlagEQ))
   13516 	// cond:
   13517 	// result: (MOVLconst [1])
   13518 	for {
   13519 		v_0 := v.Args[0]
   13520 		if v_0.Op != Op386FlagEQ {
   13521 			break
   13522 		}
   13523 		v.reset(Op386MOVLconst)
   13524 		v.AuxInt = 1
   13525 		return true
   13526 	}
   13527 	// match: (SETLE (FlagLT_ULT))
   13528 	// cond:
   13529 	// result: (MOVLconst [1])
   13530 	for {
   13531 		v_0 := v.Args[0]
   13532 		if v_0.Op != Op386FlagLT_ULT {
   13533 			break
   13534 		}
   13535 		v.reset(Op386MOVLconst)
   13536 		v.AuxInt = 1
   13537 		return true
   13538 	}
   13539 	// match: (SETLE (FlagLT_UGT))
   13540 	// cond:
   13541 	// result: (MOVLconst [1])
   13542 	for {
   13543 		v_0 := v.Args[0]
   13544 		if v_0.Op != Op386FlagLT_UGT {
   13545 			break
   13546 		}
   13547 		v.reset(Op386MOVLconst)
   13548 		v.AuxInt = 1
   13549 		return true
   13550 	}
   13551 	// match: (SETLE (FlagGT_ULT))
   13552 	// cond:
   13553 	// result: (MOVLconst [0])
   13554 	for {
   13555 		v_0 := v.Args[0]
   13556 		if v_0.Op != Op386FlagGT_ULT {
   13557 			break
   13558 		}
   13559 		v.reset(Op386MOVLconst)
   13560 		v.AuxInt = 0
   13561 		return true
   13562 	}
   13563 	// match: (SETLE (FlagGT_UGT))
   13564 	// cond:
   13565 	// result: (MOVLconst [0])
   13566 	for {
   13567 		v_0 := v.Args[0]
   13568 		if v_0.Op != Op386FlagGT_UGT {
   13569 			break
   13570 		}
   13571 		v.reset(Op386MOVLconst)
   13572 		v.AuxInt = 0
   13573 		return true
   13574 	}
   13575 	return false
   13576 }
   13577 func rewriteValue386_Op386SETNE_0(v *Value) bool {
   13578 	// match: (SETNE (InvertFlags x))
   13579 	// cond:
   13580 	// result: (SETNE x)
   13581 	for {
   13582 		v_0 := v.Args[0]
   13583 		if v_0.Op != Op386InvertFlags {
   13584 			break
   13585 		}
   13586 		x := v_0.Args[0]
   13587 		v.reset(Op386SETNE)
   13588 		v.AddArg(x)
   13589 		return true
   13590 	}
   13591 	// match: (SETNE (FlagEQ))
   13592 	// cond:
   13593 	// result: (MOVLconst [0])
   13594 	for {
   13595 		v_0 := v.Args[0]
   13596 		if v_0.Op != Op386FlagEQ {
   13597 			break
   13598 		}
   13599 		v.reset(Op386MOVLconst)
   13600 		v.AuxInt = 0
   13601 		return true
   13602 	}
   13603 	// match: (SETNE (FlagLT_ULT))
   13604 	// cond:
   13605 	// result: (MOVLconst [1])
   13606 	for {
   13607 		v_0 := v.Args[0]
   13608 		if v_0.Op != Op386FlagLT_ULT {
   13609 			break
   13610 		}
   13611 		v.reset(Op386MOVLconst)
   13612 		v.AuxInt = 1
   13613 		return true
   13614 	}
   13615 	// match: (SETNE (FlagLT_UGT))
   13616 	// cond:
   13617 	// result: (MOVLconst [1])
   13618 	for {
   13619 		v_0 := v.Args[0]
   13620 		if v_0.Op != Op386FlagLT_UGT {
   13621 			break
   13622 		}
   13623 		v.reset(Op386MOVLconst)
   13624 		v.AuxInt = 1
   13625 		return true
   13626 	}
   13627 	// match: (SETNE (FlagGT_ULT))
   13628 	// cond:
   13629 	// result: (MOVLconst [1])
   13630 	for {
   13631 		v_0 := v.Args[0]
   13632 		if v_0.Op != Op386FlagGT_ULT {
   13633 			break
   13634 		}
   13635 		v.reset(Op386MOVLconst)
   13636 		v.AuxInt = 1
   13637 		return true
   13638 	}
   13639 	// match: (SETNE (FlagGT_UGT))
   13640 	// cond:
   13641 	// result: (MOVLconst [1])
   13642 	for {
   13643 		v_0 := v.Args[0]
   13644 		if v_0.Op != Op386FlagGT_UGT {
   13645 			break
   13646 		}
   13647 		v.reset(Op386MOVLconst)
   13648 		v.AuxInt = 1
   13649 		return true
   13650 	}
   13651 	return false
   13652 }
   13653 func rewriteValue386_Op386SHLL_0(v *Value) bool {
   13654 	// match: (SHLL x (MOVLconst [c]))
   13655 	// cond:
   13656 	// result: (SHLLconst [c&31] x)
   13657 	for {
   13658 		_ = v.Args[1]
   13659 		x := v.Args[0]
   13660 		v_1 := v.Args[1]
   13661 		if v_1.Op != Op386MOVLconst {
   13662 			break
   13663 		}
   13664 		c := v_1.AuxInt
   13665 		v.reset(Op386SHLLconst)
   13666 		v.AuxInt = c & 31
   13667 		v.AddArg(x)
   13668 		return true
   13669 	}
   13670 	// match: (SHLL x (ANDLconst [31] y))
   13671 	// cond:
   13672 	// result: (SHLL x y)
   13673 	for {
   13674 		_ = v.Args[1]
   13675 		x := v.Args[0]
   13676 		v_1 := v.Args[1]
   13677 		if v_1.Op != Op386ANDLconst {
   13678 			break
   13679 		}
   13680 		if v_1.AuxInt != 31 {
   13681 			break
   13682 		}
   13683 		y := v_1.Args[0]
   13684 		v.reset(Op386SHLL)
   13685 		v.AddArg(x)
   13686 		v.AddArg(y)
   13687 		return true
   13688 	}
   13689 	return false
   13690 }
   13691 func rewriteValue386_Op386SHLLconst_0(v *Value) bool {
   13692 	// match: (SHLLconst x [0])
   13693 	// cond:
   13694 	// result: x
   13695 	for {
   13696 		if v.AuxInt != 0 {
   13697 			break
   13698 		}
   13699 		x := v.Args[0]
   13700 		v.reset(OpCopy)
   13701 		v.Type = x.Type
   13702 		v.AddArg(x)
   13703 		return true
   13704 	}
   13705 	return false
   13706 }
   13707 func rewriteValue386_Op386SHRB_0(v *Value) bool {
   13708 	// match: (SHRB x (MOVLconst [c]))
   13709 	// cond: c&31 < 8
   13710 	// result: (SHRBconst [c&31] x)
   13711 	for {
   13712 		_ = v.Args[1]
   13713 		x := v.Args[0]
   13714 		v_1 := v.Args[1]
   13715 		if v_1.Op != Op386MOVLconst {
   13716 			break
   13717 		}
   13718 		c := v_1.AuxInt
   13719 		if !(c&31 < 8) {
   13720 			break
   13721 		}
   13722 		v.reset(Op386SHRBconst)
   13723 		v.AuxInt = c & 31
   13724 		v.AddArg(x)
   13725 		return true
   13726 	}
   13727 	// match: (SHRB _ (MOVLconst [c]))
   13728 	// cond: c&31 >= 8
   13729 	// result: (MOVLconst [0])
   13730 	for {
   13731 		_ = v.Args[1]
   13732 		v_1 := v.Args[1]
   13733 		if v_1.Op != Op386MOVLconst {
   13734 			break
   13735 		}
   13736 		c := v_1.AuxInt
   13737 		if !(c&31 >= 8) {
   13738 			break
   13739 		}
   13740 		v.reset(Op386MOVLconst)
   13741 		v.AuxInt = 0
   13742 		return true
   13743 	}
   13744 	return false
   13745 }
   13746 func rewriteValue386_Op386SHRBconst_0(v *Value) bool {
   13747 	// match: (SHRBconst x [0])
   13748 	// cond:
   13749 	// result: x
   13750 	for {
   13751 		if v.AuxInt != 0 {
   13752 			break
   13753 		}
   13754 		x := v.Args[0]
   13755 		v.reset(OpCopy)
   13756 		v.Type = x.Type
   13757 		v.AddArg(x)
   13758 		return true
   13759 	}
   13760 	return false
   13761 }
   13762 func rewriteValue386_Op386SHRL_0(v *Value) bool {
   13763 	// match: (SHRL x (MOVLconst [c]))
   13764 	// cond:
   13765 	// result: (SHRLconst [c&31] x)
   13766 	for {
   13767 		_ = v.Args[1]
   13768 		x := v.Args[0]
   13769 		v_1 := v.Args[1]
   13770 		if v_1.Op != Op386MOVLconst {
   13771 			break
   13772 		}
   13773 		c := v_1.AuxInt
   13774 		v.reset(Op386SHRLconst)
   13775 		v.AuxInt = c & 31
   13776 		v.AddArg(x)
   13777 		return true
   13778 	}
   13779 	// match: (SHRL x (ANDLconst [31] y))
   13780 	// cond:
   13781 	// result: (SHRL x y)
   13782 	for {
   13783 		_ = v.Args[1]
   13784 		x := v.Args[0]
   13785 		v_1 := v.Args[1]
   13786 		if v_1.Op != Op386ANDLconst {
   13787 			break
   13788 		}
   13789 		if v_1.AuxInt != 31 {
   13790 			break
   13791 		}
   13792 		y := v_1.Args[0]
   13793 		v.reset(Op386SHRL)
   13794 		v.AddArg(x)
   13795 		v.AddArg(y)
   13796 		return true
   13797 	}
   13798 	return false
   13799 }
   13800 func rewriteValue386_Op386SHRLconst_0(v *Value) bool {
   13801 	// match: (SHRLconst x [0])
   13802 	// cond:
   13803 	// result: x
   13804 	for {
   13805 		if v.AuxInt != 0 {
   13806 			break
   13807 		}
   13808 		x := v.Args[0]
   13809 		v.reset(OpCopy)
   13810 		v.Type = x.Type
   13811 		v.AddArg(x)
   13812 		return true
   13813 	}
   13814 	return false
   13815 }
   13816 func rewriteValue386_Op386SHRW_0(v *Value) bool {
   13817 	// match: (SHRW x (MOVLconst [c]))
   13818 	// cond: c&31 < 16
   13819 	// result: (SHRWconst [c&31] x)
   13820 	for {
   13821 		_ = v.Args[1]
   13822 		x := v.Args[0]
   13823 		v_1 := v.Args[1]
   13824 		if v_1.Op != Op386MOVLconst {
   13825 			break
   13826 		}
   13827 		c := v_1.AuxInt
   13828 		if !(c&31 < 16) {
   13829 			break
   13830 		}
   13831 		v.reset(Op386SHRWconst)
   13832 		v.AuxInt = c & 31
   13833 		v.AddArg(x)
   13834 		return true
   13835 	}
   13836 	// match: (SHRW _ (MOVLconst [c]))
   13837 	// cond: c&31 >= 16
   13838 	// result: (MOVLconst [0])
   13839 	for {
   13840 		_ = v.Args[1]
   13841 		v_1 := v.Args[1]
   13842 		if v_1.Op != Op386MOVLconst {
   13843 			break
   13844 		}
   13845 		c := v_1.AuxInt
   13846 		if !(c&31 >= 16) {
   13847 			break
   13848 		}
   13849 		v.reset(Op386MOVLconst)
   13850 		v.AuxInt = 0
   13851 		return true
   13852 	}
   13853 	return false
   13854 }
   13855 func rewriteValue386_Op386SHRWconst_0(v *Value) bool {
   13856 	// match: (SHRWconst x [0])
   13857 	// cond:
   13858 	// result: x
   13859 	for {
   13860 		if v.AuxInt != 0 {
   13861 			break
   13862 		}
   13863 		x := v.Args[0]
   13864 		v.reset(OpCopy)
   13865 		v.Type = x.Type
   13866 		v.AddArg(x)
   13867 		return true
   13868 	}
   13869 	return false
   13870 }
   13871 func rewriteValue386_Op386SUBL_0(v *Value) bool {
   13872 	b := v.Block
   13873 	_ = b
   13874 	// match: (SUBL x (MOVLconst [c]))
   13875 	// cond:
   13876 	// result: (SUBLconst x [c])
   13877 	for {
   13878 		_ = v.Args[1]
   13879 		x := v.Args[0]
   13880 		v_1 := v.Args[1]
   13881 		if v_1.Op != Op386MOVLconst {
   13882 			break
   13883 		}
   13884 		c := v_1.AuxInt
   13885 		v.reset(Op386SUBLconst)
   13886 		v.AuxInt = c
   13887 		v.AddArg(x)
   13888 		return true
   13889 	}
   13890 	// match: (SUBL (MOVLconst [c]) x)
   13891 	// cond:
   13892 	// result: (NEGL (SUBLconst <v.Type> x [c]))
   13893 	for {
   13894 		_ = v.Args[1]
   13895 		v_0 := v.Args[0]
   13896 		if v_0.Op != Op386MOVLconst {
   13897 			break
   13898 		}
   13899 		c := v_0.AuxInt
   13900 		x := v.Args[1]
   13901 		v.reset(Op386NEGL)
   13902 		v0 := b.NewValue0(v.Pos, Op386SUBLconst, v.Type)
   13903 		v0.AuxInt = c
   13904 		v0.AddArg(x)
   13905 		v.AddArg(v0)
   13906 		return true
   13907 	}
   13908 	// match: (SUBL x x)
   13909 	// cond:
   13910 	// result: (MOVLconst [0])
   13911 	for {
   13912 		_ = v.Args[1]
   13913 		x := v.Args[0]
   13914 		if x != v.Args[1] {
   13915 			break
   13916 		}
   13917 		v.reset(Op386MOVLconst)
   13918 		v.AuxInt = 0
   13919 		return true
   13920 	}
   13921 	return false
   13922 }
   13923 func rewriteValue386_Op386SUBLcarry_0(v *Value) bool {
   13924 	// match: (SUBLcarry x (MOVLconst [c]))
   13925 	// cond:
   13926 	// result: (SUBLconstcarry [c] x)
   13927 	for {
   13928 		_ = v.Args[1]
   13929 		x := v.Args[0]
   13930 		v_1 := v.Args[1]
   13931 		if v_1.Op != Op386MOVLconst {
   13932 			break
   13933 		}
   13934 		c := v_1.AuxInt
   13935 		v.reset(Op386SUBLconstcarry)
   13936 		v.AuxInt = c
   13937 		v.AddArg(x)
   13938 		return true
   13939 	}
   13940 	return false
   13941 }
   13942 func rewriteValue386_Op386SUBLconst_0(v *Value) bool {
   13943 	// match: (SUBLconst [c] x)
   13944 	// cond: int32(c) == 0
   13945 	// result: x
   13946 	for {
   13947 		c := v.AuxInt
   13948 		x := v.Args[0]
   13949 		if !(int32(c) == 0) {
   13950 			break
   13951 		}
   13952 		v.reset(OpCopy)
   13953 		v.Type = x.Type
   13954 		v.AddArg(x)
   13955 		return true
   13956 	}
   13957 	// match: (SUBLconst [c] x)
   13958 	// cond:
   13959 	// result: (ADDLconst [int64(int32(-c))] x)
   13960 	for {
   13961 		c := v.AuxInt
   13962 		x := v.Args[0]
   13963 		v.reset(Op386ADDLconst)
   13964 		v.AuxInt = int64(int32(-c))
   13965 		v.AddArg(x)
   13966 		return true
   13967 	}
   13968 }
   13969 func rewriteValue386_Op386XORL_0(v *Value) bool {
   13970 	// match: (XORL x (MOVLconst [c]))
   13971 	// cond:
   13972 	// result: (XORLconst [c] x)
   13973 	for {
   13974 		_ = v.Args[1]
   13975 		x := v.Args[0]
   13976 		v_1 := v.Args[1]
   13977 		if v_1.Op != Op386MOVLconst {
   13978 			break
   13979 		}
   13980 		c := v_1.AuxInt
   13981 		v.reset(Op386XORLconst)
   13982 		v.AuxInt = c
   13983 		v.AddArg(x)
   13984 		return true
   13985 	}
   13986 	// match: (XORL (MOVLconst [c]) x)
   13987 	// cond:
   13988 	// result: (XORLconst [c] x)
   13989 	for {
   13990 		_ = v.Args[1]
   13991 		v_0 := v.Args[0]
   13992 		if v_0.Op != Op386MOVLconst {
   13993 			break
   13994 		}
   13995 		c := v_0.AuxInt
   13996 		x := v.Args[1]
   13997 		v.reset(Op386XORLconst)
   13998 		v.AuxInt = c
   13999 		v.AddArg(x)
   14000 		return true
   14001 	}
   14002 	// match: (XORL (SHLLconst [c] x) (SHRLconst [d] x))
   14003 	// cond: d == 32-c
   14004 	// result: (ROLLconst [c] x)
   14005 	for {
   14006 		_ = v.Args[1]
   14007 		v_0 := v.Args[0]
   14008 		if v_0.Op != Op386SHLLconst {
   14009 			break
   14010 		}
   14011 		c := v_0.AuxInt
   14012 		x := v_0.Args[0]
   14013 		v_1 := v.Args[1]
   14014 		if v_1.Op != Op386SHRLconst {
   14015 			break
   14016 		}
   14017 		d := v_1.AuxInt
   14018 		if x != v_1.Args[0] {
   14019 			break
   14020 		}
   14021 		if !(d == 32-c) {
   14022 			break
   14023 		}
   14024 		v.reset(Op386ROLLconst)
   14025 		v.AuxInt = c
   14026 		v.AddArg(x)
   14027 		return true
   14028 	}
   14029 	// match: (XORL (SHRLconst [d] x) (SHLLconst [c] x))
   14030 	// cond: d == 32-c
   14031 	// result: (ROLLconst [c] x)
   14032 	for {
   14033 		_ = v.Args[1]
   14034 		v_0 := v.Args[0]
   14035 		if v_0.Op != Op386SHRLconst {
   14036 			break
   14037 		}
   14038 		d := v_0.AuxInt
   14039 		x := v_0.Args[0]
   14040 		v_1 := v.Args[1]
   14041 		if v_1.Op != Op386SHLLconst {
   14042 			break
   14043 		}
   14044 		c := v_1.AuxInt
   14045 		if x != v_1.Args[0] {
   14046 			break
   14047 		}
   14048 		if !(d == 32-c) {
   14049 			break
   14050 		}
   14051 		v.reset(Op386ROLLconst)
   14052 		v.AuxInt = c
   14053 		v.AddArg(x)
   14054 		return true
   14055 	}
   14056 	// match: (XORL <t> (SHLLconst x [c]) (SHRWconst x [d]))
   14057 	// cond: c < 16 && d == 16-c && t.Size() == 2
   14058 	// result: (ROLWconst x [c])
   14059 	for {
   14060 		t := v.Type
   14061 		_ = v.Args[1]
   14062 		v_0 := v.Args[0]
   14063 		if v_0.Op != Op386SHLLconst {
   14064 			break
   14065 		}
   14066 		c := v_0.AuxInt
   14067 		x := v_0.Args[0]
   14068 		v_1 := v.Args[1]
   14069 		if v_1.Op != Op386SHRWconst {
   14070 			break
   14071 		}
   14072 		d := v_1.AuxInt
   14073 		if x != v_1.Args[0] {
   14074 			break
   14075 		}
   14076 		if !(c < 16 && d == 16-c && t.Size() == 2) {
   14077 			break
   14078 		}
   14079 		v.reset(Op386ROLWconst)
   14080 		v.AuxInt = c
   14081 		v.AddArg(x)
   14082 		return true
   14083 	}
   14084 	// match: (XORL <t> (SHRWconst x [d]) (SHLLconst x [c]))
   14085 	// cond: c < 16 && d == 16-c && t.Size() == 2
   14086 	// result: (ROLWconst x [c])
   14087 	for {
   14088 		t := v.Type
   14089 		_ = v.Args[1]
   14090 		v_0 := v.Args[0]
   14091 		if v_0.Op != Op386SHRWconst {
   14092 			break
   14093 		}
   14094 		d := v_0.AuxInt
   14095 		x := v_0.Args[0]
   14096 		v_1 := v.Args[1]
   14097 		if v_1.Op != Op386SHLLconst {
   14098 			break
   14099 		}
   14100 		c := v_1.AuxInt
   14101 		if x != v_1.Args[0] {
   14102 			break
   14103 		}
   14104 		if !(c < 16 && d == 16-c && t.Size() == 2) {
   14105 			break
   14106 		}
   14107 		v.reset(Op386ROLWconst)
   14108 		v.AuxInt = c
   14109 		v.AddArg(x)
   14110 		return true
   14111 	}
   14112 	// match: (XORL <t> (SHLLconst x [c]) (SHRBconst x [d]))
   14113 	// cond: c < 8 && d == 8-c && t.Size() == 1
   14114 	// result: (ROLBconst x [c])
   14115 	for {
   14116 		t := v.Type
   14117 		_ = v.Args[1]
   14118 		v_0 := v.Args[0]
   14119 		if v_0.Op != Op386SHLLconst {
   14120 			break
   14121 		}
   14122 		c := v_0.AuxInt
   14123 		x := v_0.Args[0]
   14124 		v_1 := v.Args[1]
   14125 		if v_1.Op != Op386SHRBconst {
   14126 			break
   14127 		}
   14128 		d := v_1.AuxInt
   14129 		if x != v_1.Args[0] {
   14130 			break
   14131 		}
   14132 		if !(c < 8 && d == 8-c && t.Size() == 1) {
   14133 			break
   14134 		}
   14135 		v.reset(Op386ROLBconst)
   14136 		v.AuxInt = c
   14137 		v.AddArg(x)
   14138 		return true
   14139 	}
   14140 	// match: (XORL <t> (SHRBconst x [d]) (SHLLconst x [c]))
   14141 	// cond: c < 8 && d == 8-c && t.Size() == 1
   14142 	// result: (ROLBconst x [c])
   14143 	for {
   14144 		t := v.Type
   14145 		_ = v.Args[1]
   14146 		v_0 := v.Args[0]
   14147 		if v_0.Op != Op386SHRBconst {
   14148 			break
   14149 		}
   14150 		d := v_0.AuxInt
   14151 		x := v_0.Args[0]
   14152 		v_1 := v.Args[1]
   14153 		if v_1.Op != Op386SHLLconst {
   14154 			break
   14155 		}
   14156 		c := v_1.AuxInt
   14157 		if x != v_1.Args[0] {
   14158 			break
   14159 		}
   14160 		if !(c < 8 && d == 8-c && t.Size() == 1) {
   14161 			break
   14162 		}
   14163 		v.reset(Op386ROLBconst)
   14164 		v.AuxInt = c
   14165 		v.AddArg(x)
   14166 		return true
   14167 	}
   14168 	// match: (XORL x x)
   14169 	// cond:
   14170 	// result: (MOVLconst [0])
   14171 	for {
   14172 		_ = v.Args[1]
   14173 		x := v.Args[0]
   14174 		if x != v.Args[1] {
   14175 			break
   14176 		}
   14177 		v.reset(Op386MOVLconst)
   14178 		v.AuxInt = 0
   14179 		return true
   14180 	}
   14181 	return false
   14182 }
   14183 func rewriteValue386_Op386XORLconst_0(v *Value) bool {
   14184 	// match: (XORLconst [c] (XORLconst [d] x))
   14185 	// cond:
   14186 	// result: (XORLconst [c ^ d] x)
   14187 	for {
   14188 		c := v.AuxInt
   14189 		v_0 := v.Args[0]
   14190 		if v_0.Op != Op386XORLconst {
   14191 			break
   14192 		}
   14193 		d := v_0.AuxInt
   14194 		x := v_0.Args[0]
   14195 		v.reset(Op386XORLconst)
   14196 		v.AuxInt = c ^ d
   14197 		v.AddArg(x)
   14198 		return true
   14199 	}
   14200 	// match: (XORLconst [c] x)
   14201 	// cond: int32(c)==0
   14202 	// result: x
   14203 	for {
   14204 		c := v.AuxInt
   14205 		x := v.Args[0]
   14206 		if !(int32(c) == 0) {
   14207 			break
   14208 		}
   14209 		v.reset(OpCopy)
   14210 		v.Type = x.Type
   14211 		v.AddArg(x)
   14212 		return true
   14213 	}
   14214 	// match: (XORLconst [c] (MOVLconst [d]))
   14215 	// cond:
   14216 	// result: (MOVLconst [c^d])
   14217 	for {
   14218 		c := v.AuxInt
   14219 		v_0 := v.Args[0]
   14220 		if v_0.Op != Op386MOVLconst {
   14221 			break
   14222 		}
   14223 		d := v_0.AuxInt
   14224 		v.reset(Op386MOVLconst)
   14225 		v.AuxInt = c ^ d
   14226 		return true
   14227 	}
   14228 	return false
   14229 }
   14230 func rewriteValue386_OpAdd16_0(v *Value) bool {
   14231 	// match: (Add16 x y)
   14232 	// cond:
   14233 	// result: (ADDL  x y)
   14234 	for {
   14235 		_ = v.Args[1]
   14236 		x := v.Args[0]
   14237 		y := v.Args[1]
   14238 		v.reset(Op386ADDL)
   14239 		v.AddArg(x)
   14240 		v.AddArg(y)
   14241 		return true
   14242 	}
   14243 }
   14244 func rewriteValue386_OpAdd32_0(v *Value) bool {
   14245 	// match: (Add32 x y)
   14246 	// cond:
   14247 	// result: (ADDL  x y)
   14248 	for {
   14249 		_ = v.Args[1]
   14250 		x := v.Args[0]
   14251 		y := v.Args[1]
   14252 		v.reset(Op386ADDL)
   14253 		v.AddArg(x)
   14254 		v.AddArg(y)
   14255 		return true
   14256 	}
   14257 }
   14258 func rewriteValue386_OpAdd32F_0(v *Value) bool {
   14259 	// match: (Add32F x y)
   14260 	// cond:
   14261 	// result: (ADDSS x y)
   14262 	for {
   14263 		_ = v.Args[1]
   14264 		x := v.Args[0]
   14265 		y := v.Args[1]
   14266 		v.reset(Op386ADDSS)
   14267 		v.AddArg(x)
   14268 		v.AddArg(y)
   14269 		return true
   14270 	}
   14271 }
   14272 func rewriteValue386_OpAdd32carry_0(v *Value) bool {
   14273 	// match: (Add32carry x y)
   14274 	// cond:
   14275 	// result: (ADDLcarry x y)
   14276 	for {
   14277 		_ = v.Args[1]
   14278 		x := v.Args[0]
   14279 		y := v.Args[1]
   14280 		v.reset(Op386ADDLcarry)
   14281 		v.AddArg(x)
   14282 		v.AddArg(y)
   14283 		return true
   14284 	}
   14285 }
   14286 func rewriteValue386_OpAdd32withcarry_0(v *Value) bool {
   14287 	// match: (Add32withcarry x y c)
   14288 	// cond:
   14289 	// result: (ADCL x y c)
   14290 	for {
   14291 		_ = v.Args[2]
   14292 		x := v.Args[0]
   14293 		y := v.Args[1]
   14294 		c := v.Args[2]
   14295 		v.reset(Op386ADCL)
   14296 		v.AddArg(x)
   14297 		v.AddArg(y)
   14298 		v.AddArg(c)
   14299 		return true
   14300 	}
   14301 }
   14302 func rewriteValue386_OpAdd64F_0(v *Value) bool {
   14303 	// match: (Add64F x y)
   14304 	// cond:
   14305 	// result: (ADDSD x y)
   14306 	for {
   14307 		_ = v.Args[1]
   14308 		x := v.Args[0]
   14309 		y := v.Args[1]
   14310 		v.reset(Op386ADDSD)
   14311 		v.AddArg(x)
   14312 		v.AddArg(y)
   14313 		return true
   14314 	}
   14315 }
   14316 func rewriteValue386_OpAdd8_0(v *Value) bool {
   14317 	// match: (Add8 x y)
   14318 	// cond:
   14319 	// result: (ADDL  x y)
   14320 	for {
   14321 		_ = v.Args[1]
   14322 		x := v.Args[0]
   14323 		y := v.Args[1]
   14324 		v.reset(Op386ADDL)
   14325 		v.AddArg(x)
   14326 		v.AddArg(y)
   14327 		return true
   14328 	}
   14329 }
   14330 func rewriteValue386_OpAddPtr_0(v *Value) bool {
   14331 	// match: (AddPtr x y)
   14332 	// cond:
   14333 	// result: (ADDL  x y)
   14334 	for {
   14335 		_ = v.Args[1]
   14336 		x := v.Args[0]
   14337 		y := v.Args[1]
   14338 		v.reset(Op386ADDL)
   14339 		v.AddArg(x)
   14340 		v.AddArg(y)
   14341 		return true
   14342 	}
   14343 }
   14344 func rewriteValue386_OpAddr_0(v *Value) bool {
   14345 	// match: (Addr {sym} base)
   14346 	// cond:
   14347 	// result: (LEAL {sym} base)
   14348 	for {
   14349 		sym := v.Aux
   14350 		base := v.Args[0]
   14351 		v.reset(Op386LEAL)
   14352 		v.Aux = sym
   14353 		v.AddArg(base)
   14354 		return true
   14355 	}
   14356 }
   14357 func rewriteValue386_OpAnd16_0(v *Value) bool {
   14358 	// match: (And16 x y)
   14359 	// cond:
   14360 	// result: (ANDL x y)
   14361 	for {
   14362 		_ = v.Args[1]
   14363 		x := v.Args[0]
   14364 		y := v.Args[1]
   14365 		v.reset(Op386ANDL)
   14366 		v.AddArg(x)
   14367 		v.AddArg(y)
   14368 		return true
   14369 	}
   14370 }
   14371 func rewriteValue386_OpAnd32_0(v *Value) bool {
   14372 	// match: (And32 x y)
   14373 	// cond:
   14374 	// result: (ANDL x y)
   14375 	for {
   14376 		_ = v.Args[1]
   14377 		x := v.Args[0]
   14378 		y := v.Args[1]
   14379 		v.reset(Op386ANDL)
   14380 		v.AddArg(x)
   14381 		v.AddArg(y)
   14382 		return true
   14383 	}
   14384 }
   14385 func rewriteValue386_OpAnd8_0(v *Value) bool {
   14386 	// match: (And8 x y)
   14387 	// cond:
   14388 	// result: (ANDL x y)
   14389 	for {
   14390 		_ = v.Args[1]
   14391 		x := v.Args[0]
   14392 		y := v.Args[1]
   14393 		v.reset(Op386ANDL)
   14394 		v.AddArg(x)
   14395 		v.AddArg(y)
   14396 		return true
   14397 	}
   14398 }
   14399 func rewriteValue386_OpAndB_0(v *Value) bool {
   14400 	// match: (AndB x y)
   14401 	// cond:
   14402 	// result: (ANDL x y)
   14403 	for {
   14404 		_ = v.Args[1]
   14405 		x := v.Args[0]
   14406 		y := v.Args[1]
   14407 		v.reset(Op386ANDL)
   14408 		v.AddArg(x)
   14409 		v.AddArg(y)
   14410 		return true
   14411 	}
   14412 }
   14413 func rewriteValue386_OpAvg32u_0(v *Value) bool {
   14414 	// match: (Avg32u x y)
   14415 	// cond:
   14416 	// result: (AVGLU x y)
   14417 	for {
   14418 		_ = v.Args[1]
   14419 		x := v.Args[0]
   14420 		y := v.Args[1]
   14421 		v.reset(Op386AVGLU)
   14422 		v.AddArg(x)
   14423 		v.AddArg(y)
   14424 		return true
   14425 	}
   14426 }
   14427 func rewriteValue386_OpBswap32_0(v *Value) bool {
   14428 	// match: (Bswap32 x)
   14429 	// cond:
   14430 	// result: (BSWAPL x)
   14431 	for {
   14432 		x := v.Args[0]
   14433 		v.reset(Op386BSWAPL)
   14434 		v.AddArg(x)
   14435 		return true
   14436 	}
   14437 }
   14438 func rewriteValue386_OpClosureCall_0(v *Value) bool {
   14439 	// match: (ClosureCall [argwid] entry closure mem)
   14440 	// cond:
   14441 	// result: (CALLclosure [argwid] entry closure mem)
   14442 	for {
   14443 		argwid := v.AuxInt
   14444 		_ = v.Args[2]
   14445 		entry := v.Args[0]
   14446 		closure := v.Args[1]
   14447 		mem := v.Args[2]
   14448 		v.reset(Op386CALLclosure)
   14449 		v.AuxInt = argwid
   14450 		v.AddArg(entry)
   14451 		v.AddArg(closure)
   14452 		v.AddArg(mem)
   14453 		return true
   14454 	}
   14455 }
   14456 func rewriteValue386_OpCom16_0(v *Value) bool {
   14457 	// match: (Com16 x)
   14458 	// cond:
   14459 	// result: (NOTL x)
   14460 	for {
   14461 		x := v.Args[0]
   14462 		v.reset(Op386NOTL)
   14463 		v.AddArg(x)
   14464 		return true
   14465 	}
   14466 }
   14467 func rewriteValue386_OpCom32_0(v *Value) bool {
   14468 	// match: (Com32 x)
   14469 	// cond:
   14470 	// result: (NOTL x)
   14471 	for {
   14472 		x := v.Args[0]
   14473 		v.reset(Op386NOTL)
   14474 		v.AddArg(x)
   14475 		return true
   14476 	}
   14477 }
   14478 func rewriteValue386_OpCom8_0(v *Value) bool {
   14479 	// match: (Com8 x)
   14480 	// cond:
   14481 	// result: (NOTL x)
   14482 	for {
   14483 		x := v.Args[0]
   14484 		v.reset(Op386NOTL)
   14485 		v.AddArg(x)
   14486 		return true
   14487 	}
   14488 }
   14489 func rewriteValue386_OpConst16_0(v *Value) bool {
   14490 	// match: (Const16 [val])
   14491 	// cond:
   14492 	// result: (MOVLconst [val])
   14493 	for {
   14494 		val := v.AuxInt
   14495 		v.reset(Op386MOVLconst)
   14496 		v.AuxInt = val
   14497 		return true
   14498 	}
   14499 }
   14500 func rewriteValue386_OpConst32_0(v *Value) bool {
   14501 	// match: (Const32 [val])
   14502 	// cond:
   14503 	// result: (MOVLconst [val])
   14504 	for {
   14505 		val := v.AuxInt
   14506 		v.reset(Op386MOVLconst)
   14507 		v.AuxInt = val
   14508 		return true
   14509 	}
   14510 }
   14511 func rewriteValue386_OpConst32F_0(v *Value) bool {
   14512 	// match: (Const32F [val])
   14513 	// cond:
   14514 	// result: (MOVSSconst [val])
   14515 	for {
   14516 		val := v.AuxInt
   14517 		v.reset(Op386MOVSSconst)
   14518 		v.AuxInt = val
   14519 		return true
   14520 	}
   14521 }
   14522 func rewriteValue386_OpConst64F_0(v *Value) bool {
   14523 	// match: (Const64F [val])
   14524 	// cond:
   14525 	// result: (MOVSDconst [val])
   14526 	for {
   14527 		val := v.AuxInt
   14528 		v.reset(Op386MOVSDconst)
   14529 		v.AuxInt = val
   14530 		return true
   14531 	}
   14532 }
   14533 func rewriteValue386_OpConst8_0(v *Value) bool {
   14534 	// match: (Const8 [val])
   14535 	// cond:
   14536 	// result: (MOVLconst [val])
   14537 	for {
   14538 		val := v.AuxInt
   14539 		v.reset(Op386MOVLconst)
   14540 		v.AuxInt = val
   14541 		return true
   14542 	}
   14543 }
   14544 func rewriteValue386_OpConstBool_0(v *Value) bool {
   14545 	// match: (ConstBool [b])
   14546 	// cond:
   14547 	// result: (MOVLconst [b])
   14548 	for {
   14549 		b := v.AuxInt
   14550 		v.reset(Op386MOVLconst)
   14551 		v.AuxInt = b
   14552 		return true
   14553 	}
   14554 }
   14555 func rewriteValue386_OpConstNil_0(v *Value) bool {
   14556 	// match: (ConstNil)
   14557 	// cond:
   14558 	// result: (MOVLconst [0])
   14559 	for {
   14560 		v.reset(Op386MOVLconst)
   14561 		v.AuxInt = 0
   14562 		return true
   14563 	}
   14564 }
   14565 func rewriteValue386_OpConvert_0(v *Value) bool {
   14566 	// match: (Convert <t> x mem)
   14567 	// cond:
   14568 	// result: (MOVLconvert <t> x mem)
   14569 	for {
   14570 		t := v.Type
   14571 		_ = v.Args[1]
   14572 		x := v.Args[0]
   14573 		mem := v.Args[1]
   14574 		v.reset(Op386MOVLconvert)
   14575 		v.Type = t
   14576 		v.AddArg(x)
   14577 		v.AddArg(mem)
   14578 		return true
   14579 	}
   14580 }
   14581 func rewriteValue386_OpCvt32Fto32_0(v *Value) bool {
   14582 	// match: (Cvt32Fto32 x)
   14583 	// cond:
   14584 	// result: (CVTTSS2SL x)
   14585 	for {
   14586 		x := v.Args[0]
   14587 		v.reset(Op386CVTTSS2SL)
   14588 		v.AddArg(x)
   14589 		return true
   14590 	}
   14591 }
   14592 func rewriteValue386_OpCvt32Fto64F_0(v *Value) bool {
   14593 	// match: (Cvt32Fto64F x)
   14594 	// cond:
   14595 	// result: (CVTSS2SD x)
   14596 	for {
   14597 		x := v.Args[0]
   14598 		v.reset(Op386CVTSS2SD)
   14599 		v.AddArg(x)
   14600 		return true
   14601 	}
   14602 }
   14603 func rewriteValue386_OpCvt32to32F_0(v *Value) bool {
   14604 	// match: (Cvt32to32F x)
   14605 	// cond:
   14606 	// result: (CVTSL2SS x)
   14607 	for {
   14608 		x := v.Args[0]
   14609 		v.reset(Op386CVTSL2SS)
   14610 		v.AddArg(x)
   14611 		return true
   14612 	}
   14613 }
   14614 func rewriteValue386_OpCvt32to64F_0(v *Value) bool {
   14615 	// match: (Cvt32to64F x)
   14616 	// cond:
   14617 	// result: (CVTSL2SD x)
   14618 	for {
   14619 		x := v.Args[0]
   14620 		v.reset(Op386CVTSL2SD)
   14621 		v.AddArg(x)
   14622 		return true
   14623 	}
   14624 }
   14625 func rewriteValue386_OpCvt64Fto32_0(v *Value) bool {
   14626 	// match: (Cvt64Fto32 x)
   14627 	// cond:
   14628 	// result: (CVTTSD2SL x)
   14629 	for {
   14630 		x := v.Args[0]
   14631 		v.reset(Op386CVTTSD2SL)
   14632 		v.AddArg(x)
   14633 		return true
   14634 	}
   14635 }
   14636 func rewriteValue386_OpCvt64Fto32F_0(v *Value) bool {
   14637 	// match: (Cvt64Fto32F x)
   14638 	// cond:
   14639 	// result: (CVTSD2SS x)
   14640 	for {
   14641 		x := v.Args[0]
   14642 		v.reset(Op386CVTSD2SS)
   14643 		v.AddArg(x)
   14644 		return true
   14645 	}
   14646 }
   14647 func rewriteValue386_OpDiv16_0(v *Value) bool {
   14648 	// match: (Div16 x y)
   14649 	// cond:
   14650 	// result: (DIVW  x y)
   14651 	for {
   14652 		_ = v.Args[1]
   14653 		x := v.Args[0]
   14654 		y := v.Args[1]
   14655 		v.reset(Op386DIVW)
   14656 		v.AddArg(x)
   14657 		v.AddArg(y)
   14658 		return true
   14659 	}
   14660 }
   14661 func rewriteValue386_OpDiv16u_0(v *Value) bool {
   14662 	// match: (Div16u x y)
   14663 	// cond:
   14664 	// result: (DIVWU x y)
   14665 	for {
   14666 		_ = v.Args[1]
   14667 		x := v.Args[0]
   14668 		y := v.Args[1]
   14669 		v.reset(Op386DIVWU)
   14670 		v.AddArg(x)
   14671 		v.AddArg(y)
   14672 		return true
   14673 	}
   14674 }
   14675 func rewriteValue386_OpDiv32_0(v *Value) bool {
   14676 	// match: (Div32 x y)
   14677 	// cond:
   14678 	// result: (DIVL  x y)
   14679 	for {
   14680 		_ = v.Args[1]
   14681 		x := v.Args[0]
   14682 		y := v.Args[1]
   14683 		v.reset(Op386DIVL)
   14684 		v.AddArg(x)
   14685 		v.AddArg(y)
   14686 		return true
   14687 	}
   14688 }
   14689 func rewriteValue386_OpDiv32F_0(v *Value) bool {
   14690 	// match: (Div32F x y)
   14691 	// cond:
   14692 	// result: (DIVSS x y)
   14693 	for {
   14694 		_ = v.Args[1]
   14695 		x := v.Args[0]
   14696 		y := v.Args[1]
   14697 		v.reset(Op386DIVSS)
   14698 		v.AddArg(x)
   14699 		v.AddArg(y)
   14700 		return true
   14701 	}
   14702 }
   14703 func rewriteValue386_OpDiv32u_0(v *Value) bool {
   14704 	// match: (Div32u x y)
   14705 	// cond:
   14706 	// result: (DIVLU x y)
   14707 	for {
   14708 		_ = v.Args[1]
   14709 		x := v.Args[0]
   14710 		y := v.Args[1]
   14711 		v.reset(Op386DIVLU)
   14712 		v.AddArg(x)
   14713 		v.AddArg(y)
   14714 		return true
   14715 	}
   14716 }
   14717 func rewriteValue386_OpDiv64F_0(v *Value) bool {
   14718 	// match: (Div64F x y)
   14719 	// cond:
   14720 	// result: (DIVSD x y)
   14721 	for {
   14722 		_ = v.Args[1]
   14723 		x := v.Args[0]
   14724 		y := v.Args[1]
   14725 		v.reset(Op386DIVSD)
   14726 		v.AddArg(x)
   14727 		v.AddArg(y)
   14728 		return true
   14729 	}
   14730 }
   14731 func rewriteValue386_OpDiv8_0(v *Value) bool {
   14732 	b := v.Block
   14733 	_ = b
   14734 	typ := &b.Func.Config.Types
   14735 	_ = typ
   14736 	// match: (Div8 x y)
   14737 	// cond:
   14738 	// result: (DIVW  (SignExt8to16 x) (SignExt8to16 y))
   14739 	for {
   14740 		_ = v.Args[1]
   14741 		x := v.Args[0]
   14742 		y := v.Args[1]
   14743 		v.reset(Op386DIVW)
   14744 		v0 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16)
   14745 		v0.AddArg(x)
   14746 		v.AddArg(v0)
   14747 		v1 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16)
   14748 		v1.AddArg(y)
   14749 		v.AddArg(v1)
   14750 		return true
   14751 	}
   14752 }
   14753 func rewriteValue386_OpDiv8u_0(v *Value) bool {
   14754 	b := v.Block
   14755 	_ = b
   14756 	typ := &b.Func.Config.Types
   14757 	_ = typ
   14758 	// match: (Div8u x y)
   14759 	// cond:
   14760 	// result: (DIVWU (ZeroExt8to16 x) (ZeroExt8to16 y))
   14761 	for {
   14762 		_ = v.Args[1]
   14763 		x := v.Args[0]
   14764 		y := v.Args[1]
   14765 		v.reset(Op386DIVWU)
   14766 		v0 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16)
   14767 		v0.AddArg(x)
   14768 		v.AddArg(v0)
   14769 		v1 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16)
   14770 		v1.AddArg(y)
   14771 		v.AddArg(v1)
   14772 		return true
   14773 	}
   14774 }
   14775 func rewriteValue386_OpEq16_0(v *Value) bool {
   14776 	b := v.Block
   14777 	_ = b
   14778 	// match: (Eq16 x y)
   14779 	// cond:
   14780 	// result: (SETEQ (CMPW x y))
   14781 	for {
   14782 		_ = v.Args[1]
   14783 		x := v.Args[0]
   14784 		y := v.Args[1]
   14785 		v.reset(Op386SETEQ)
   14786 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   14787 		v0.AddArg(x)
   14788 		v0.AddArg(y)
   14789 		v.AddArg(v0)
   14790 		return true
   14791 	}
   14792 }
   14793 func rewriteValue386_OpEq32_0(v *Value) bool {
   14794 	b := v.Block
   14795 	_ = b
   14796 	// match: (Eq32 x y)
   14797 	// cond:
   14798 	// result: (SETEQ (CMPL x y))
   14799 	for {
   14800 		_ = v.Args[1]
   14801 		x := v.Args[0]
   14802 		y := v.Args[1]
   14803 		v.reset(Op386SETEQ)
   14804 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   14805 		v0.AddArg(x)
   14806 		v0.AddArg(y)
   14807 		v.AddArg(v0)
   14808 		return true
   14809 	}
   14810 }
   14811 func rewriteValue386_OpEq32F_0(v *Value) bool {
   14812 	b := v.Block
   14813 	_ = b
   14814 	// match: (Eq32F x y)
   14815 	// cond:
   14816 	// result: (SETEQF (UCOMISS x y))
   14817 	for {
   14818 		_ = v.Args[1]
   14819 		x := v.Args[0]
   14820 		y := v.Args[1]
   14821 		v.reset(Op386SETEQF)
   14822 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   14823 		v0.AddArg(x)
   14824 		v0.AddArg(y)
   14825 		v.AddArg(v0)
   14826 		return true
   14827 	}
   14828 }
   14829 func rewriteValue386_OpEq64F_0(v *Value) bool {
   14830 	b := v.Block
   14831 	_ = b
   14832 	// match: (Eq64F x y)
   14833 	// cond:
   14834 	// result: (SETEQF (UCOMISD x y))
   14835 	for {
   14836 		_ = v.Args[1]
   14837 		x := v.Args[0]
   14838 		y := v.Args[1]
   14839 		v.reset(Op386SETEQF)
   14840 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   14841 		v0.AddArg(x)
   14842 		v0.AddArg(y)
   14843 		v.AddArg(v0)
   14844 		return true
   14845 	}
   14846 }
   14847 func rewriteValue386_OpEq8_0(v *Value) bool {
   14848 	b := v.Block
   14849 	_ = b
   14850 	// match: (Eq8 x y)
   14851 	// cond:
   14852 	// result: (SETEQ (CMPB x y))
   14853 	for {
   14854 		_ = v.Args[1]
   14855 		x := v.Args[0]
   14856 		y := v.Args[1]
   14857 		v.reset(Op386SETEQ)
   14858 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   14859 		v0.AddArg(x)
   14860 		v0.AddArg(y)
   14861 		v.AddArg(v0)
   14862 		return true
   14863 	}
   14864 }
   14865 func rewriteValue386_OpEqB_0(v *Value) bool {
   14866 	b := v.Block
   14867 	_ = b
   14868 	// match: (EqB x y)
   14869 	// cond:
   14870 	// result: (SETEQ (CMPB x y))
   14871 	for {
   14872 		_ = v.Args[1]
   14873 		x := v.Args[0]
   14874 		y := v.Args[1]
   14875 		v.reset(Op386SETEQ)
   14876 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   14877 		v0.AddArg(x)
   14878 		v0.AddArg(y)
   14879 		v.AddArg(v0)
   14880 		return true
   14881 	}
   14882 }
   14883 func rewriteValue386_OpEqPtr_0(v *Value) bool {
   14884 	b := v.Block
   14885 	_ = b
   14886 	// match: (EqPtr x y)
   14887 	// cond:
   14888 	// result: (SETEQ (CMPL x y))
   14889 	for {
   14890 		_ = v.Args[1]
   14891 		x := v.Args[0]
   14892 		y := v.Args[1]
   14893 		v.reset(Op386SETEQ)
   14894 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   14895 		v0.AddArg(x)
   14896 		v0.AddArg(y)
   14897 		v.AddArg(v0)
   14898 		return true
   14899 	}
   14900 }
   14901 func rewriteValue386_OpGeq16_0(v *Value) bool {
   14902 	b := v.Block
   14903 	_ = b
   14904 	// match: (Geq16 x y)
   14905 	// cond:
   14906 	// result: (SETGE (CMPW x y))
   14907 	for {
   14908 		_ = v.Args[1]
   14909 		x := v.Args[0]
   14910 		y := v.Args[1]
   14911 		v.reset(Op386SETGE)
   14912 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   14913 		v0.AddArg(x)
   14914 		v0.AddArg(y)
   14915 		v.AddArg(v0)
   14916 		return true
   14917 	}
   14918 }
   14919 func rewriteValue386_OpGeq16U_0(v *Value) bool {
   14920 	b := v.Block
   14921 	_ = b
   14922 	// match: (Geq16U x y)
   14923 	// cond:
   14924 	// result: (SETAE (CMPW x y))
   14925 	for {
   14926 		_ = v.Args[1]
   14927 		x := v.Args[0]
   14928 		y := v.Args[1]
   14929 		v.reset(Op386SETAE)
   14930 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   14931 		v0.AddArg(x)
   14932 		v0.AddArg(y)
   14933 		v.AddArg(v0)
   14934 		return true
   14935 	}
   14936 }
   14937 func rewriteValue386_OpGeq32_0(v *Value) bool {
   14938 	b := v.Block
   14939 	_ = b
   14940 	// match: (Geq32 x y)
   14941 	// cond:
   14942 	// result: (SETGE (CMPL x y))
   14943 	for {
   14944 		_ = v.Args[1]
   14945 		x := v.Args[0]
   14946 		y := v.Args[1]
   14947 		v.reset(Op386SETGE)
   14948 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   14949 		v0.AddArg(x)
   14950 		v0.AddArg(y)
   14951 		v.AddArg(v0)
   14952 		return true
   14953 	}
   14954 }
   14955 func rewriteValue386_OpGeq32F_0(v *Value) bool {
   14956 	b := v.Block
   14957 	_ = b
   14958 	// match: (Geq32F x y)
   14959 	// cond:
   14960 	// result: (SETGEF (UCOMISS x y))
   14961 	for {
   14962 		_ = v.Args[1]
   14963 		x := v.Args[0]
   14964 		y := v.Args[1]
   14965 		v.reset(Op386SETGEF)
   14966 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   14967 		v0.AddArg(x)
   14968 		v0.AddArg(y)
   14969 		v.AddArg(v0)
   14970 		return true
   14971 	}
   14972 }
   14973 func rewriteValue386_OpGeq32U_0(v *Value) bool {
   14974 	b := v.Block
   14975 	_ = b
   14976 	// match: (Geq32U x y)
   14977 	// cond:
   14978 	// result: (SETAE (CMPL x y))
   14979 	for {
   14980 		_ = v.Args[1]
   14981 		x := v.Args[0]
   14982 		y := v.Args[1]
   14983 		v.reset(Op386SETAE)
   14984 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   14985 		v0.AddArg(x)
   14986 		v0.AddArg(y)
   14987 		v.AddArg(v0)
   14988 		return true
   14989 	}
   14990 }
   14991 func rewriteValue386_OpGeq64F_0(v *Value) bool {
   14992 	b := v.Block
   14993 	_ = b
   14994 	// match: (Geq64F x y)
   14995 	// cond:
   14996 	// result: (SETGEF (UCOMISD x y))
   14997 	for {
   14998 		_ = v.Args[1]
   14999 		x := v.Args[0]
   15000 		y := v.Args[1]
   15001 		v.reset(Op386SETGEF)
   15002 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   15003 		v0.AddArg(x)
   15004 		v0.AddArg(y)
   15005 		v.AddArg(v0)
   15006 		return true
   15007 	}
   15008 }
   15009 func rewriteValue386_OpGeq8_0(v *Value) bool {
   15010 	b := v.Block
   15011 	_ = b
   15012 	// match: (Geq8 x y)
   15013 	// cond:
   15014 	// result: (SETGE (CMPB x y))
   15015 	for {
   15016 		_ = v.Args[1]
   15017 		x := v.Args[0]
   15018 		y := v.Args[1]
   15019 		v.reset(Op386SETGE)
   15020 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15021 		v0.AddArg(x)
   15022 		v0.AddArg(y)
   15023 		v.AddArg(v0)
   15024 		return true
   15025 	}
   15026 }
   15027 func rewriteValue386_OpGeq8U_0(v *Value) bool {
   15028 	b := v.Block
   15029 	_ = b
   15030 	// match: (Geq8U x y)
   15031 	// cond:
   15032 	// result: (SETAE (CMPB x y))
   15033 	for {
   15034 		_ = v.Args[1]
   15035 		x := v.Args[0]
   15036 		y := v.Args[1]
   15037 		v.reset(Op386SETAE)
   15038 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15039 		v0.AddArg(x)
   15040 		v0.AddArg(y)
   15041 		v.AddArg(v0)
   15042 		return true
   15043 	}
   15044 }
   15045 func rewriteValue386_OpGetCallerPC_0(v *Value) bool {
   15046 	// match: (GetCallerPC)
   15047 	// cond:
   15048 	// result: (LoweredGetCallerPC)
   15049 	for {
   15050 		v.reset(Op386LoweredGetCallerPC)
   15051 		return true
   15052 	}
   15053 }
   15054 func rewriteValue386_OpGetCallerSP_0(v *Value) bool {
   15055 	// match: (GetCallerSP)
   15056 	// cond:
   15057 	// result: (LoweredGetCallerSP)
   15058 	for {
   15059 		v.reset(Op386LoweredGetCallerSP)
   15060 		return true
   15061 	}
   15062 }
   15063 func rewriteValue386_OpGetClosurePtr_0(v *Value) bool {
   15064 	// match: (GetClosurePtr)
   15065 	// cond:
   15066 	// result: (LoweredGetClosurePtr)
   15067 	for {
   15068 		v.reset(Op386LoweredGetClosurePtr)
   15069 		return true
   15070 	}
   15071 }
   15072 func rewriteValue386_OpGetG_0(v *Value) bool {
   15073 	// match: (GetG mem)
   15074 	// cond:
   15075 	// result: (LoweredGetG mem)
   15076 	for {
   15077 		mem := v.Args[0]
   15078 		v.reset(Op386LoweredGetG)
   15079 		v.AddArg(mem)
   15080 		return true
   15081 	}
   15082 }
   15083 func rewriteValue386_OpGreater16_0(v *Value) bool {
   15084 	b := v.Block
   15085 	_ = b
   15086 	// match: (Greater16 x y)
   15087 	// cond:
   15088 	// result: (SETG (CMPW x y))
   15089 	for {
   15090 		_ = v.Args[1]
   15091 		x := v.Args[0]
   15092 		y := v.Args[1]
   15093 		v.reset(Op386SETG)
   15094 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15095 		v0.AddArg(x)
   15096 		v0.AddArg(y)
   15097 		v.AddArg(v0)
   15098 		return true
   15099 	}
   15100 }
   15101 func rewriteValue386_OpGreater16U_0(v *Value) bool {
   15102 	b := v.Block
   15103 	_ = b
   15104 	// match: (Greater16U x y)
   15105 	// cond:
   15106 	// result: (SETA (CMPW x y))
   15107 	for {
   15108 		_ = v.Args[1]
   15109 		x := v.Args[0]
   15110 		y := v.Args[1]
   15111 		v.reset(Op386SETA)
   15112 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15113 		v0.AddArg(x)
   15114 		v0.AddArg(y)
   15115 		v.AddArg(v0)
   15116 		return true
   15117 	}
   15118 }
   15119 func rewriteValue386_OpGreater32_0(v *Value) bool {
   15120 	b := v.Block
   15121 	_ = b
   15122 	// match: (Greater32 x y)
   15123 	// cond:
   15124 	// result: (SETG (CMPL x y))
   15125 	for {
   15126 		_ = v.Args[1]
   15127 		x := v.Args[0]
   15128 		y := v.Args[1]
   15129 		v.reset(Op386SETG)
   15130 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15131 		v0.AddArg(x)
   15132 		v0.AddArg(y)
   15133 		v.AddArg(v0)
   15134 		return true
   15135 	}
   15136 }
   15137 func rewriteValue386_OpGreater32F_0(v *Value) bool {
   15138 	b := v.Block
   15139 	_ = b
   15140 	// match: (Greater32F x y)
   15141 	// cond:
   15142 	// result: (SETGF (UCOMISS x y))
   15143 	for {
   15144 		_ = v.Args[1]
   15145 		x := v.Args[0]
   15146 		y := v.Args[1]
   15147 		v.reset(Op386SETGF)
   15148 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   15149 		v0.AddArg(x)
   15150 		v0.AddArg(y)
   15151 		v.AddArg(v0)
   15152 		return true
   15153 	}
   15154 }
   15155 func rewriteValue386_OpGreater32U_0(v *Value) bool {
   15156 	b := v.Block
   15157 	_ = b
   15158 	// match: (Greater32U x y)
   15159 	// cond:
   15160 	// result: (SETA (CMPL x y))
   15161 	for {
   15162 		_ = v.Args[1]
   15163 		x := v.Args[0]
   15164 		y := v.Args[1]
   15165 		v.reset(Op386SETA)
   15166 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15167 		v0.AddArg(x)
   15168 		v0.AddArg(y)
   15169 		v.AddArg(v0)
   15170 		return true
   15171 	}
   15172 }
   15173 func rewriteValue386_OpGreater64F_0(v *Value) bool {
   15174 	b := v.Block
   15175 	_ = b
   15176 	// match: (Greater64F x y)
   15177 	// cond:
   15178 	// result: (SETGF (UCOMISD x y))
   15179 	for {
   15180 		_ = v.Args[1]
   15181 		x := v.Args[0]
   15182 		y := v.Args[1]
   15183 		v.reset(Op386SETGF)
   15184 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   15185 		v0.AddArg(x)
   15186 		v0.AddArg(y)
   15187 		v.AddArg(v0)
   15188 		return true
   15189 	}
   15190 }
   15191 func rewriteValue386_OpGreater8_0(v *Value) bool {
   15192 	b := v.Block
   15193 	_ = b
   15194 	// match: (Greater8 x y)
   15195 	// cond:
   15196 	// result: (SETG (CMPB x y))
   15197 	for {
   15198 		_ = v.Args[1]
   15199 		x := v.Args[0]
   15200 		y := v.Args[1]
   15201 		v.reset(Op386SETG)
   15202 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15203 		v0.AddArg(x)
   15204 		v0.AddArg(y)
   15205 		v.AddArg(v0)
   15206 		return true
   15207 	}
   15208 }
   15209 func rewriteValue386_OpGreater8U_0(v *Value) bool {
   15210 	b := v.Block
   15211 	_ = b
   15212 	// match: (Greater8U x y)
   15213 	// cond:
   15214 	// result: (SETA (CMPB x y))
   15215 	for {
   15216 		_ = v.Args[1]
   15217 		x := v.Args[0]
   15218 		y := v.Args[1]
   15219 		v.reset(Op386SETA)
   15220 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15221 		v0.AddArg(x)
   15222 		v0.AddArg(y)
   15223 		v.AddArg(v0)
   15224 		return true
   15225 	}
   15226 }
   15227 func rewriteValue386_OpHmul32_0(v *Value) bool {
   15228 	// match: (Hmul32 x y)
   15229 	// cond:
   15230 	// result: (HMULL  x y)
   15231 	for {
   15232 		_ = v.Args[1]
   15233 		x := v.Args[0]
   15234 		y := v.Args[1]
   15235 		v.reset(Op386HMULL)
   15236 		v.AddArg(x)
   15237 		v.AddArg(y)
   15238 		return true
   15239 	}
   15240 }
   15241 func rewriteValue386_OpHmul32u_0(v *Value) bool {
   15242 	// match: (Hmul32u x y)
   15243 	// cond:
   15244 	// result: (HMULLU x y)
   15245 	for {
   15246 		_ = v.Args[1]
   15247 		x := v.Args[0]
   15248 		y := v.Args[1]
   15249 		v.reset(Op386HMULLU)
   15250 		v.AddArg(x)
   15251 		v.AddArg(y)
   15252 		return true
   15253 	}
   15254 }
   15255 func rewriteValue386_OpInterCall_0(v *Value) bool {
   15256 	// match: (InterCall [argwid] entry mem)
   15257 	// cond:
   15258 	// result: (CALLinter [argwid] entry mem)
   15259 	for {
   15260 		argwid := v.AuxInt
   15261 		_ = v.Args[1]
   15262 		entry := v.Args[0]
   15263 		mem := v.Args[1]
   15264 		v.reset(Op386CALLinter)
   15265 		v.AuxInt = argwid
   15266 		v.AddArg(entry)
   15267 		v.AddArg(mem)
   15268 		return true
   15269 	}
   15270 }
   15271 func rewriteValue386_OpIsInBounds_0(v *Value) bool {
   15272 	b := v.Block
   15273 	_ = b
   15274 	// match: (IsInBounds idx len)
   15275 	// cond:
   15276 	// result: (SETB (CMPL idx len))
   15277 	for {
   15278 		_ = v.Args[1]
   15279 		idx := v.Args[0]
   15280 		len := v.Args[1]
   15281 		v.reset(Op386SETB)
   15282 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15283 		v0.AddArg(idx)
   15284 		v0.AddArg(len)
   15285 		v.AddArg(v0)
   15286 		return true
   15287 	}
   15288 }
   15289 func rewriteValue386_OpIsNonNil_0(v *Value) bool {
   15290 	b := v.Block
   15291 	_ = b
   15292 	// match: (IsNonNil p)
   15293 	// cond:
   15294 	// result: (SETNE (TESTL p p))
   15295 	for {
   15296 		p := v.Args[0]
   15297 		v.reset(Op386SETNE)
   15298 		v0 := b.NewValue0(v.Pos, Op386TESTL, types.TypeFlags)
   15299 		v0.AddArg(p)
   15300 		v0.AddArg(p)
   15301 		v.AddArg(v0)
   15302 		return true
   15303 	}
   15304 }
   15305 func rewriteValue386_OpIsSliceInBounds_0(v *Value) bool {
   15306 	b := v.Block
   15307 	_ = b
   15308 	// match: (IsSliceInBounds idx len)
   15309 	// cond:
   15310 	// result: (SETBE (CMPL idx len))
   15311 	for {
   15312 		_ = v.Args[1]
   15313 		idx := v.Args[0]
   15314 		len := v.Args[1]
   15315 		v.reset(Op386SETBE)
   15316 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15317 		v0.AddArg(idx)
   15318 		v0.AddArg(len)
   15319 		v.AddArg(v0)
   15320 		return true
   15321 	}
   15322 }
   15323 func rewriteValue386_OpLeq16_0(v *Value) bool {
   15324 	b := v.Block
   15325 	_ = b
   15326 	// match: (Leq16 x y)
   15327 	// cond:
   15328 	// result: (SETLE (CMPW x y))
   15329 	for {
   15330 		_ = v.Args[1]
   15331 		x := v.Args[0]
   15332 		y := v.Args[1]
   15333 		v.reset(Op386SETLE)
   15334 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15335 		v0.AddArg(x)
   15336 		v0.AddArg(y)
   15337 		v.AddArg(v0)
   15338 		return true
   15339 	}
   15340 }
   15341 func rewriteValue386_OpLeq16U_0(v *Value) bool {
   15342 	b := v.Block
   15343 	_ = b
   15344 	// match: (Leq16U x y)
   15345 	// cond:
   15346 	// result: (SETBE (CMPW x y))
   15347 	for {
   15348 		_ = v.Args[1]
   15349 		x := v.Args[0]
   15350 		y := v.Args[1]
   15351 		v.reset(Op386SETBE)
   15352 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15353 		v0.AddArg(x)
   15354 		v0.AddArg(y)
   15355 		v.AddArg(v0)
   15356 		return true
   15357 	}
   15358 }
   15359 func rewriteValue386_OpLeq32_0(v *Value) bool {
   15360 	b := v.Block
   15361 	_ = b
   15362 	// match: (Leq32 x y)
   15363 	// cond:
   15364 	// result: (SETLE (CMPL x y))
   15365 	for {
   15366 		_ = v.Args[1]
   15367 		x := v.Args[0]
   15368 		y := v.Args[1]
   15369 		v.reset(Op386SETLE)
   15370 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15371 		v0.AddArg(x)
   15372 		v0.AddArg(y)
   15373 		v.AddArg(v0)
   15374 		return true
   15375 	}
   15376 }
   15377 func rewriteValue386_OpLeq32F_0(v *Value) bool {
   15378 	b := v.Block
   15379 	_ = b
   15380 	// match: (Leq32F x y)
   15381 	// cond:
   15382 	// result: (SETGEF (UCOMISS y x))
   15383 	for {
   15384 		_ = v.Args[1]
   15385 		x := v.Args[0]
   15386 		y := v.Args[1]
   15387 		v.reset(Op386SETGEF)
   15388 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   15389 		v0.AddArg(y)
   15390 		v0.AddArg(x)
   15391 		v.AddArg(v0)
   15392 		return true
   15393 	}
   15394 }
   15395 func rewriteValue386_OpLeq32U_0(v *Value) bool {
   15396 	b := v.Block
   15397 	_ = b
   15398 	// match: (Leq32U x y)
   15399 	// cond:
   15400 	// result: (SETBE (CMPL x y))
   15401 	for {
   15402 		_ = v.Args[1]
   15403 		x := v.Args[0]
   15404 		y := v.Args[1]
   15405 		v.reset(Op386SETBE)
   15406 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15407 		v0.AddArg(x)
   15408 		v0.AddArg(y)
   15409 		v.AddArg(v0)
   15410 		return true
   15411 	}
   15412 }
   15413 func rewriteValue386_OpLeq64F_0(v *Value) bool {
   15414 	b := v.Block
   15415 	_ = b
   15416 	// match: (Leq64F x y)
   15417 	// cond:
   15418 	// result: (SETGEF (UCOMISD y x))
   15419 	for {
   15420 		_ = v.Args[1]
   15421 		x := v.Args[0]
   15422 		y := v.Args[1]
   15423 		v.reset(Op386SETGEF)
   15424 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   15425 		v0.AddArg(y)
   15426 		v0.AddArg(x)
   15427 		v.AddArg(v0)
   15428 		return true
   15429 	}
   15430 }
   15431 func rewriteValue386_OpLeq8_0(v *Value) bool {
   15432 	b := v.Block
   15433 	_ = b
   15434 	// match: (Leq8 x y)
   15435 	// cond:
   15436 	// result: (SETLE (CMPB x y))
   15437 	for {
   15438 		_ = v.Args[1]
   15439 		x := v.Args[0]
   15440 		y := v.Args[1]
   15441 		v.reset(Op386SETLE)
   15442 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15443 		v0.AddArg(x)
   15444 		v0.AddArg(y)
   15445 		v.AddArg(v0)
   15446 		return true
   15447 	}
   15448 }
   15449 func rewriteValue386_OpLeq8U_0(v *Value) bool {
   15450 	b := v.Block
   15451 	_ = b
   15452 	// match: (Leq8U x y)
   15453 	// cond:
   15454 	// result: (SETBE (CMPB x y))
   15455 	for {
   15456 		_ = v.Args[1]
   15457 		x := v.Args[0]
   15458 		y := v.Args[1]
   15459 		v.reset(Op386SETBE)
   15460 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15461 		v0.AddArg(x)
   15462 		v0.AddArg(y)
   15463 		v.AddArg(v0)
   15464 		return true
   15465 	}
   15466 }
   15467 func rewriteValue386_OpLess16_0(v *Value) bool {
   15468 	b := v.Block
   15469 	_ = b
   15470 	// match: (Less16 x y)
   15471 	// cond:
   15472 	// result: (SETL (CMPW x y))
   15473 	for {
   15474 		_ = v.Args[1]
   15475 		x := v.Args[0]
   15476 		y := v.Args[1]
   15477 		v.reset(Op386SETL)
   15478 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15479 		v0.AddArg(x)
   15480 		v0.AddArg(y)
   15481 		v.AddArg(v0)
   15482 		return true
   15483 	}
   15484 }
   15485 func rewriteValue386_OpLess16U_0(v *Value) bool {
   15486 	b := v.Block
   15487 	_ = b
   15488 	// match: (Less16U x y)
   15489 	// cond:
   15490 	// result: (SETB (CMPW x y))
   15491 	for {
   15492 		_ = v.Args[1]
   15493 		x := v.Args[0]
   15494 		y := v.Args[1]
   15495 		v.reset(Op386SETB)
   15496 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   15497 		v0.AddArg(x)
   15498 		v0.AddArg(y)
   15499 		v.AddArg(v0)
   15500 		return true
   15501 	}
   15502 }
   15503 func rewriteValue386_OpLess32_0(v *Value) bool {
   15504 	b := v.Block
   15505 	_ = b
   15506 	// match: (Less32 x y)
   15507 	// cond:
   15508 	// result: (SETL (CMPL x y))
   15509 	for {
   15510 		_ = v.Args[1]
   15511 		x := v.Args[0]
   15512 		y := v.Args[1]
   15513 		v.reset(Op386SETL)
   15514 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15515 		v0.AddArg(x)
   15516 		v0.AddArg(y)
   15517 		v.AddArg(v0)
   15518 		return true
   15519 	}
   15520 }
   15521 func rewriteValue386_OpLess32F_0(v *Value) bool {
   15522 	b := v.Block
   15523 	_ = b
   15524 	// match: (Less32F x y)
   15525 	// cond:
   15526 	// result: (SETGF (UCOMISS y x))
   15527 	for {
   15528 		_ = v.Args[1]
   15529 		x := v.Args[0]
   15530 		y := v.Args[1]
   15531 		v.reset(Op386SETGF)
   15532 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   15533 		v0.AddArg(y)
   15534 		v0.AddArg(x)
   15535 		v.AddArg(v0)
   15536 		return true
   15537 	}
   15538 }
   15539 func rewriteValue386_OpLess32U_0(v *Value) bool {
   15540 	b := v.Block
   15541 	_ = b
   15542 	// match: (Less32U x y)
   15543 	// cond:
   15544 	// result: (SETB (CMPL x y))
   15545 	for {
   15546 		_ = v.Args[1]
   15547 		x := v.Args[0]
   15548 		y := v.Args[1]
   15549 		v.reset(Op386SETB)
   15550 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   15551 		v0.AddArg(x)
   15552 		v0.AddArg(y)
   15553 		v.AddArg(v0)
   15554 		return true
   15555 	}
   15556 }
   15557 func rewriteValue386_OpLess64F_0(v *Value) bool {
   15558 	b := v.Block
   15559 	_ = b
   15560 	// match: (Less64F x y)
   15561 	// cond:
   15562 	// result: (SETGF (UCOMISD y x))
   15563 	for {
   15564 		_ = v.Args[1]
   15565 		x := v.Args[0]
   15566 		y := v.Args[1]
   15567 		v.reset(Op386SETGF)
   15568 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   15569 		v0.AddArg(y)
   15570 		v0.AddArg(x)
   15571 		v.AddArg(v0)
   15572 		return true
   15573 	}
   15574 }
   15575 func rewriteValue386_OpLess8_0(v *Value) bool {
   15576 	b := v.Block
   15577 	_ = b
   15578 	// match: (Less8 x y)
   15579 	// cond:
   15580 	// result: (SETL (CMPB x y))
   15581 	for {
   15582 		_ = v.Args[1]
   15583 		x := v.Args[0]
   15584 		y := v.Args[1]
   15585 		v.reset(Op386SETL)
   15586 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15587 		v0.AddArg(x)
   15588 		v0.AddArg(y)
   15589 		v.AddArg(v0)
   15590 		return true
   15591 	}
   15592 }
   15593 func rewriteValue386_OpLess8U_0(v *Value) bool {
   15594 	b := v.Block
   15595 	_ = b
   15596 	// match: (Less8U x y)
   15597 	// cond:
   15598 	// result: (SETB (CMPB x y))
   15599 	for {
   15600 		_ = v.Args[1]
   15601 		x := v.Args[0]
   15602 		y := v.Args[1]
   15603 		v.reset(Op386SETB)
   15604 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   15605 		v0.AddArg(x)
   15606 		v0.AddArg(y)
   15607 		v.AddArg(v0)
   15608 		return true
   15609 	}
   15610 }
   15611 func rewriteValue386_OpLoad_0(v *Value) bool {
   15612 	// match: (Load <t> ptr mem)
   15613 	// cond: (is32BitInt(t) || isPtr(t))
   15614 	// result: (MOVLload ptr mem)
   15615 	for {
   15616 		t := v.Type
   15617 		_ = v.Args[1]
   15618 		ptr := v.Args[0]
   15619 		mem := v.Args[1]
   15620 		if !(is32BitInt(t) || isPtr(t)) {
   15621 			break
   15622 		}
   15623 		v.reset(Op386MOVLload)
   15624 		v.AddArg(ptr)
   15625 		v.AddArg(mem)
   15626 		return true
   15627 	}
   15628 	// match: (Load <t> ptr mem)
   15629 	// cond: is16BitInt(t)
   15630 	// result: (MOVWload ptr mem)
   15631 	for {
   15632 		t := v.Type
   15633 		_ = v.Args[1]
   15634 		ptr := v.Args[0]
   15635 		mem := v.Args[1]
   15636 		if !(is16BitInt(t)) {
   15637 			break
   15638 		}
   15639 		v.reset(Op386MOVWload)
   15640 		v.AddArg(ptr)
   15641 		v.AddArg(mem)
   15642 		return true
   15643 	}
   15644 	// match: (Load <t> ptr mem)
   15645 	// cond: (t.IsBoolean() || is8BitInt(t))
   15646 	// result: (MOVBload ptr mem)
   15647 	for {
   15648 		t := v.Type
   15649 		_ = v.Args[1]
   15650 		ptr := v.Args[0]
   15651 		mem := v.Args[1]
   15652 		if !(t.IsBoolean() || is8BitInt(t)) {
   15653 			break
   15654 		}
   15655 		v.reset(Op386MOVBload)
   15656 		v.AddArg(ptr)
   15657 		v.AddArg(mem)
   15658 		return true
   15659 	}
   15660 	// match: (Load <t> ptr mem)
   15661 	// cond: is32BitFloat(t)
   15662 	// result: (MOVSSload ptr mem)
   15663 	for {
   15664 		t := v.Type
   15665 		_ = v.Args[1]
   15666 		ptr := v.Args[0]
   15667 		mem := v.Args[1]
   15668 		if !(is32BitFloat(t)) {
   15669 			break
   15670 		}
   15671 		v.reset(Op386MOVSSload)
   15672 		v.AddArg(ptr)
   15673 		v.AddArg(mem)
   15674 		return true
   15675 	}
   15676 	// match: (Load <t> ptr mem)
   15677 	// cond: is64BitFloat(t)
   15678 	// result: (MOVSDload ptr mem)
   15679 	for {
   15680 		t := v.Type
   15681 		_ = v.Args[1]
   15682 		ptr := v.Args[0]
   15683 		mem := v.Args[1]
   15684 		if !(is64BitFloat(t)) {
   15685 			break
   15686 		}
   15687 		v.reset(Op386MOVSDload)
   15688 		v.AddArg(ptr)
   15689 		v.AddArg(mem)
   15690 		return true
   15691 	}
   15692 	return false
   15693 }
   15694 func rewriteValue386_OpLsh16x16_0(v *Value) bool {
   15695 	b := v.Block
   15696 	_ = b
   15697 	// match: (Lsh16x16 <t> x y)
   15698 	// cond:
   15699 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPWconst y [32])))
   15700 	for {
   15701 		t := v.Type
   15702 		_ = v.Args[1]
   15703 		x := v.Args[0]
   15704 		y := v.Args[1]
   15705 		v.reset(Op386ANDL)
   15706 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15707 		v0.AddArg(x)
   15708 		v0.AddArg(y)
   15709 		v.AddArg(v0)
   15710 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15711 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   15712 		v2.AuxInt = 32
   15713 		v2.AddArg(y)
   15714 		v1.AddArg(v2)
   15715 		v.AddArg(v1)
   15716 		return true
   15717 	}
   15718 }
   15719 func rewriteValue386_OpLsh16x32_0(v *Value) bool {
   15720 	b := v.Block
   15721 	_ = b
   15722 	// match: (Lsh16x32 <t> x y)
   15723 	// cond:
   15724 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPLconst y [32])))
   15725 	for {
   15726 		t := v.Type
   15727 		_ = v.Args[1]
   15728 		x := v.Args[0]
   15729 		y := v.Args[1]
   15730 		v.reset(Op386ANDL)
   15731 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15732 		v0.AddArg(x)
   15733 		v0.AddArg(y)
   15734 		v.AddArg(v0)
   15735 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15736 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   15737 		v2.AuxInt = 32
   15738 		v2.AddArg(y)
   15739 		v1.AddArg(v2)
   15740 		v.AddArg(v1)
   15741 		return true
   15742 	}
   15743 }
   15744 func rewriteValue386_OpLsh16x64_0(v *Value) bool {
   15745 	// match: (Lsh16x64 x (Const64 [c]))
   15746 	// cond: uint64(c) < 16
   15747 	// result: (SHLLconst x [c])
   15748 	for {
   15749 		_ = v.Args[1]
   15750 		x := v.Args[0]
   15751 		v_1 := v.Args[1]
   15752 		if v_1.Op != OpConst64 {
   15753 			break
   15754 		}
   15755 		c := v_1.AuxInt
   15756 		if !(uint64(c) < 16) {
   15757 			break
   15758 		}
   15759 		v.reset(Op386SHLLconst)
   15760 		v.AuxInt = c
   15761 		v.AddArg(x)
   15762 		return true
   15763 	}
   15764 	// match: (Lsh16x64 _ (Const64 [c]))
   15765 	// cond: uint64(c) >= 16
   15766 	// result: (Const16 [0])
   15767 	for {
   15768 		_ = v.Args[1]
   15769 		v_1 := v.Args[1]
   15770 		if v_1.Op != OpConst64 {
   15771 			break
   15772 		}
   15773 		c := v_1.AuxInt
   15774 		if !(uint64(c) >= 16) {
   15775 			break
   15776 		}
   15777 		v.reset(OpConst16)
   15778 		v.AuxInt = 0
   15779 		return true
   15780 	}
   15781 	return false
   15782 }
   15783 func rewriteValue386_OpLsh16x8_0(v *Value) bool {
   15784 	b := v.Block
   15785 	_ = b
   15786 	// match: (Lsh16x8 <t> x y)
   15787 	// cond:
   15788 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPBconst y [32])))
   15789 	for {
   15790 		t := v.Type
   15791 		_ = v.Args[1]
   15792 		x := v.Args[0]
   15793 		y := v.Args[1]
   15794 		v.reset(Op386ANDL)
   15795 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15796 		v0.AddArg(x)
   15797 		v0.AddArg(y)
   15798 		v.AddArg(v0)
   15799 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15800 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   15801 		v2.AuxInt = 32
   15802 		v2.AddArg(y)
   15803 		v1.AddArg(v2)
   15804 		v.AddArg(v1)
   15805 		return true
   15806 	}
   15807 }
   15808 func rewriteValue386_OpLsh32x16_0(v *Value) bool {
   15809 	b := v.Block
   15810 	_ = b
   15811 	// match: (Lsh32x16 <t> x y)
   15812 	// cond:
   15813 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPWconst y [32])))
   15814 	for {
   15815 		t := v.Type
   15816 		_ = v.Args[1]
   15817 		x := v.Args[0]
   15818 		y := v.Args[1]
   15819 		v.reset(Op386ANDL)
   15820 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15821 		v0.AddArg(x)
   15822 		v0.AddArg(y)
   15823 		v.AddArg(v0)
   15824 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15825 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   15826 		v2.AuxInt = 32
   15827 		v2.AddArg(y)
   15828 		v1.AddArg(v2)
   15829 		v.AddArg(v1)
   15830 		return true
   15831 	}
   15832 }
   15833 func rewriteValue386_OpLsh32x32_0(v *Value) bool {
   15834 	b := v.Block
   15835 	_ = b
   15836 	// match: (Lsh32x32 <t> x y)
   15837 	// cond:
   15838 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPLconst y [32])))
   15839 	for {
   15840 		t := v.Type
   15841 		_ = v.Args[1]
   15842 		x := v.Args[0]
   15843 		y := v.Args[1]
   15844 		v.reset(Op386ANDL)
   15845 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15846 		v0.AddArg(x)
   15847 		v0.AddArg(y)
   15848 		v.AddArg(v0)
   15849 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15850 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   15851 		v2.AuxInt = 32
   15852 		v2.AddArg(y)
   15853 		v1.AddArg(v2)
   15854 		v.AddArg(v1)
   15855 		return true
   15856 	}
   15857 }
   15858 func rewriteValue386_OpLsh32x64_0(v *Value) bool {
   15859 	// match: (Lsh32x64 x (Const64 [c]))
   15860 	// cond: uint64(c) < 32
   15861 	// result: (SHLLconst x [c])
   15862 	for {
   15863 		_ = v.Args[1]
   15864 		x := v.Args[0]
   15865 		v_1 := v.Args[1]
   15866 		if v_1.Op != OpConst64 {
   15867 			break
   15868 		}
   15869 		c := v_1.AuxInt
   15870 		if !(uint64(c) < 32) {
   15871 			break
   15872 		}
   15873 		v.reset(Op386SHLLconst)
   15874 		v.AuxInt = c
   15875 		v.AddArg(x)
   15876 		return true
   15877 	}
   15878 	// match: (Lsh32x64 _ (Const64 [c]))
   15879 	// cond: uint64(c) >= 32
   15880 	// result: (Const32 [0])
   15881 	for {
   15882 		_ = v.Args[1]
   15883 		v_1 := v.Args[1]
   15884 		if v_1.Op != OpConst64 {
   15885 			break
   15886 		}
   15887 		c := v_1.AuxInt
   15888 		if !(uint64(c) >= 32) {
   15889 			break
   15890 		}
   15891 		v.reset(OpConst32)
   15892 		v.AuxInt = 0
   15893 		return true
   15894 	}
   15895 	return false
   15896 }
   15897 func rewriteValue386_OpLsh32x8_0(v *Value) bool {
   15898 	b := v.Block
   15899 	_ = b
   15900 	// match: (Lsh32x8 <t> x y)
   15901 	// cond:
   15902 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPBconst y [32])))
   15903 	for {
   15904 		t := v.Type
   15905 		_ = v.Args[1]
   15906 		x := v.Args[0]
   15907 		y := v.Args[1]
   15908 		v.reset(Op386ANDL)
   15909 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15910 		v0.AddArg(x)
   15911 		v0.AddArg(y)
   15912 		v.AddArg(v0)
   15913 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15914 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   15915 		v2.AuxInt = 32
   15916 		v2.AddArg(y)
   15917 		v1.AddArg(v2)
   15918 		v.AddArg(v1)
   15919 		return true
   15920 	}
   15921 }
   15922 func rewriteValue386_OpLsh8x16_0(v *Value) bool {
   15923 	b := v.Block
   15924 	_ = b
   15925 	// match: (Lsh8x16 <t> x y)
   15926 	// cond:
   15927 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPWconst y [32])))
   15928 	for {
   15929 		t := v.Type
   15930 		_ = v.Args[1]
   15931 		x := v.Args[0]
   15932 		y := v.Args[1]
   15933 		v.reset(Op386ANDL)
   15934 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15935 		v0.AddArg(x)
   15936 		v0.AddArg(y)
   15937 		v.AddArg(v0)
   15938 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15939 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   15940 		v2.AuxInt = 32
   15941 		v2.AddArg(y)
   15942 		v1.AddArg(v2)
   15943 		v.AddArg(v1)
   15944 		return true
   15945 	}
   15946 }
   15947 func rewriteValue386_OpLsh8x32_0(v *Value) bool {
   15948 	b := v.Block
   15949 	_ = b
   15950 	// match: (Lsh8x32 <t> x y)
   15951 	// cond:
   15952 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPLconst y [32])))
   15953 	for {
   15954 		t := v.Type
   15955 		_ = v.Args[1]
   15956 		x := v.Args[0]
   15957 		y := v.Args[1]
   15958 		v.reset(Op386ANDL)
   15959 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   15960 		v0.AddArg(x)
   15961 		v0.AddArg(y)
   15962 		v.AddArg(v0)
   15963 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   15964 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   15965 		v2.AuxInt = 32
   15966 		v2.AddArg(y)
   15967 		v1.AddArg(v2)
   15968 		v.AddArg(v1)
   15969 		return true
   15970 	}
   15971 }
   15972 func rewriteValue386_OpLsh8x64_0(v *Value) bool {
   15973 	// match: (Lsh8x64 x (Const64 [c]))
   15974 	// cond: uint64(c) < 8
   15975 	// result: (SHLLconst x [c])
   15976 	for {
   15977 		_ = v.Args[1]
   15978 		x := v.Args[0]
   15979 		v_1 := v.Args[1]
   15980 		if v_1.Op != OpConst64 {
   15981 			break
   15982 		}
   15983 		c := v_1.AuxInt
   15984 		if !(uint64(c) < 8) {
   15985 			break
   15986 		}
   15987 		v.reset(Op386SHLLconst)
   15988 		v.AuxInt = c
   15989 		v.AddArg(x)
   15990 		return true
   15991 	}
   15992 	// match: (Lsh8x64 _ (Const64 [c]))
   15993 	// cond: uint64(c) >= 8
   15994 	// result: (Const8 [0])
   15995 	for {
   15996 		_ = v.Args[1]
   15997 		v_1 := v.Args[1]
   15998 		if v_1.Op != OpConst64 {
   15999 			break
   16000 		}
   16001 		c := v_1.AuxInt
   16002 		if !(uint64(c) >= 8) {
   16003 			break
   16004 		}
   16005 		v.reset(OpConst8)
   16006 		v.AuxInt = 0
   16007 		return true
   16008 	}
   16009 	return false
   16010 }
   16011 func rewriteValue386_OpLsh8x8_0(v *Value) bool {
   16012 	b := v.Block
   16013 	_ = b
   16014 	// match: (Lsh8x8 <t> x y)
   16015 	// cond:
   16016 	// result: (ANDL (SHLL <t> x y) (SBBLcarrymask <t> (CMPBconst y [32])))
   16017 	for {
   16018 		t := v.Type
   16019 		_ = v.Args[1]
   16020 		x := v.Args[0]
   16021 		y := v.Args[1]
   16022 		v.reset(Op386ANDL)
   16023 		v0 := b.NewValue0(v.Pos, Op386SHLL, t)
   16024 		v0.AddArg(x)
   16025 		v0.AddArg(y)
   16026 		v.AddArg(v0)
   16027 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   16028 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   16029 		v2.AuxInt = 32
   16030 		v2.AddArg(y)
   16031 		v1.AddArg(v2)
   16032 		v.AddArg(v1)
   16033 		return true
   16034 	}
   16035 }
   16036 func rewriteValue386_OpMod16_0(v *Value) bool {
   16037 	// match: (Mod16 x y)
   16038 	// cond:
   16039 	// result: (MODW  x y)
   16040 	for {
   16041 		_ = v.Args[1]
   16042 		x := v.Args[0]
   16043 		y := v.Args[1]
   16044 		v.reset(Op386MODW)
   16045 		v.AddArg(x)
   16046 		v.AddArg(y)
   16047 		return true
   16048 	}
   16049 }
   16050 func rewriteValue386_OpMod16u_0(v *Value) bool {
   16051 	// match: (Mod16u x y)
   16052 	// cond:
   16053 	// result: (MODWU x y)
   16054 	for {
   16055 		_ = v.Args[1]
   16056 		x := v.Args[0]
   16057 		y := v.Args[1]
   16058 		v.reset(Op386MODWU)
   16059 		v.AddArg(x)
   16060 		v.AddArg(y)
   16061 		return true
   16062 	}
   16063 }
   16064 func rewriteValue386_OpMod32_0(v *Value) bool {
   16065 	// match: (Mod32 x y)
   16066 	// cond:
   16067 	// result: (MODL  x y)
   16068 	for {
   16069 		_ = v.Args[1]
   16070 		x := v.Args[0]
   16071 		y := v.Args[1]
   16072 		v.reset(Op386MODL)
   16073 		v.AddArg(x)
   16074 		v.AddArg(y)
   16075 		return true
   16076 	}
   16077 }
   16078 func rewriteValue386_OpMod32u_0(v *Value) bool {
   16079 	// match: (Mod32u x y)
   16080 	// cond:
   16081 	// result: (MODLU x y)
   16082 	for {
   16083 		_ = v.Args[1]
   16084 		x := v.Args[0]
   16085 		y := v.Args[1]
   16086 		v.reset(Op386MODLU)
   16087 		v.AddArg(x)
   16088 		v.AddArg(y)
   16089 		return true
   16090 	}
   16091 }
   16092 func rewriteValue386_OpMod8_0(v *Value) bool {
   16093 	b := v.Block
   16094 	_ = b
   16095 	typ := &b.Func.Config.Types
   16096 	_ = typ
   16097 	// match: (Mod8 x y)
   16098 	// cond:
   16099 	// result: (MODW  (SignExt8to16 x) (SignExt8to16 y))
   16100 	for {
   16101 		_ = v.Args[1]
   16102 		x := v.Args[0]
   16103 		y := v.Args[1]
   16104 		v.reset(Op386MODW)
   16105 		v0 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16)
   16106 		v0.AddArg(x)
   16107 		v.AddArg(v0)
   16108 		v1 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16)
   16109 		v1.AddArg(y)
   16110 		v.AddArg(v1)
   16111 		return true
   16112 	}
   16113 }
   16114 func rewriteValue386_OpMod8u_0(v *Value) bool {
   16115 	b := v.Block
   16116 	_ = b
   16117 	typ := &b.Func.Config.Types
   16118 	_ = typ
   16119 	// match: (Mod8u x y)
   16120 	// cond:
   16121 	// result: (MODWU (ZeroExt8to16 x) (ZeroExt8to16 y))
   16122 	for {
   16123 		_ = v.Args[1]
   16124 		x := v.Args[0]
   16125 		y := v.Args[1]
   16126 		v.reset(Op386MODWU)
   16127 		v0 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16)
   16128 		v0.AddArg(x)
   16129 		v.AddArg(v0)
   16130 		v1 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16)
   16131 		v1.AddArg(y)
   16132 		v.AddArg(v1)
   16133 		return true
   16134 	}
   16135 }
   16136 func rewriteValue386_OpMove_0(v *Value) bool {
   16137 	b := v.Block
   16138 	_ = b
   16139 	typ := &b.Func.Config.Types
   16140 	_ = typ
   16141 	// match: (Move [0] _ _ mem)
   16142 	// cond:
   16143 	// result: mem
   16144 	for {
   16145 		if v.AuxInt != 0 {
   16146 			break
   16147 		}
   16148 		_ = v.Args[2]
   16149 		mem := v.Args[2]
   16150 		v.reset(OpCopy)
   16151 		v.Type = mem.Type
   16152 		v.AddArg(mem)
   16153 		return true
   16154 	}
   16155 	// match: (Move [1] dst src mem)
   16156 	// cond:
   16157 	// result: (MOVBstore dst (MOVBload src mem) mem)
   16158 	for {
   16159 		if v.AuxInt != 1 {
   16160 			break
   16161 		}
   16162 		_ = v.Args[2]
   16163 		dst := v.Args[0]
   16164 		src := v.Args[1]
   16165 		mem := v.Args[2]
   16166 		v.reset(Op386MOVBstore)
   16167 		v.AddArg(dst)
   16168 		v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8)
   16169 		v0.AddArg(src)
   16170 		v0.AddArg(mem)
   16171 		v.AddArg(v0)
   16172 		v.AddArg(mem)
   16173 		return true
   16174 	}
   16175 	// match: (Move [2] dst src mem)
   16176 	// cond:
   16177 	// result: (MOVWstore dst (MOVWload src mem) mem)
   16178 	for {
   16179 		if v.AuxInt != 2 {
   16180 			break
   16181 		}
   16182 		_ = v.Args[2]
   16183 		dst := v.Args[0]
   16184 		src := v.Args[1]
   16185 		mem := v.Args[2]
   16186 		v.reset(Op386MOVWstore)
   16187 		v.AddArg(dst)
   16188 		v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16)
   16189 		v0.AddArg(src)
   16190 		v0.AddArg(mem)
   16191 		v.AddArg(v0)
   16192 		v.AddArg(mem)
   16193 		return true
   16194 	}
   16195 	// match: (Move [4] dst src mem)
   16196 	// cond:
   16197 	// result: (MOVLstore dst (MOVLload src mem) mem)
   16198 	for {
   16199 		if v.AuxInt != 4 {
   16200 			break
   16201 		}
   16202 		_ = v.Args[2]
   16203 		dst := v.Args[0]
   16204 		src := v.Args[1]
   16205 		mem := v.Args[2]
   16206 		v.reset(Op386MOVLstore)
   16207 		v.AddArg(dst)
   16208 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16209 		v0.AddArg(src)
   16210 		v0.AddArg(mem)
   16211 		v.AddArg(v0)
   16212 		v.AddArg(mem)
   16213 		return true
   16214 	}
   16215 	// match: (Move [3] dst src mem)
   16216 	// cond:
   16217 	// result: (MOVBstore [2] dst (MOVBload [2] src mem) 		(MOVWstore dst (MOVWload src mem) mem))
   16218 	for {
   16219 		if v.AuxInt != 3 {
   16220 			break
   16221 		}
   16222 		_ = v.Args[2]
   16223 		dst := v.Args[0]
   16224 		src := v.Args[1]
   16225 		mem := v.Args[2]
   16226 		v.reset(Op386MOVBstore)
   16227 		v.AuxInt = 2
   16228 		v.AddArg(dst)
   16229 		v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8)
   16230 		v0.AuxInt = 2
   16231 		v0.AddArg(src)
   16232 		v0.AddArg(mem)
   16233 		v.AddArg(v0)
   16234 		v1 := b.NewValue0(v.Pos, Op386MOVWstore, types.TypeMem)
   16235 		v1.AddArg(dst)
   16236 		v2 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16)
   16237 		v2.AddArg(src)
   16238 		v2.AddArg(mem)
   16239 		v1.AddArg(v2)
   16240 		v1.AddArg(mem)
   16241 		v.AddArg(v1)
   16242 		return true
   16243 	}
   16244 	// match: (Move [5] dst src mem)
   16245 	// cond:
   16246 	// result: (MOVBstore [4] dst (MOVBload [4] src mem) 		(MOVLstore dst (MOVLload src mem) mem))
   16247 	for {
   16248 		if v.AuxInt != 5 {
   16249 			break
   16250 		}
   16251 		_ = v.Args[2]
   16252 		dst := v.Args[0]
   16253 		src := v.Args[1]
   16254 		mem := v.Args[2]
   16255 		v.reset(Op386MOVBstore)
   16256 		v.AuxInt = 4
   16257 		v.AddArg(dst)
   16258 		v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8)
   16259 		v0.AuxInt = 4
   16260 		v0.AddArg(src)
   16261 		v0.AddArg(mem)
   16262 		v.AddArg(v0)
   16263 		v1 := b.NewValue0(v.Pos, Op386MOVLstore, types.TypeMem)
   16264 		v1.AddArg(dst)
   16265 		v2 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16266 		v2.AddArg(src)
   16267 		v2.AddArg(mem)
   16268 		v1.AddArg(v2)
   16269 		v1.AddArg(mem)
   16270 		v.AddArg(v1)
   16271 		return true
   16272 	}
   16273 	// match: (Move [6] dst src mem)
   16274 	// cond:
   16275 	// result: (MOVWstore [4] dst (MOVWload [4] src mem) 		(MOVLstore dst (MOVLload src mem) mem))
   16276 	for {
   16277 		if v.AuxInt != 6 {
   16278 			break
   16279 		}
   16280 		_ = v.Args[2]
   16281 		dst := v.Args[0]
   16282 		src := v.Args[1]
   16283 		mem := v.Args[2]
   16284 		v.reset(Op386MOVWstore)
   16285 		v.AuxInt = 4
   16286 		v.AddArg(dst)
   16287 		v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16)
   16288 		v0.AuxInt = 4
   16289 		v0.AddArg(src)
   16290 		v0.AddArg(mem)
   16291 		v.AddArg(v0)
   16292 		v1 := b.NewValue0(v.Pos, Op386MOVLstore, types.TypeMem)
   16293 		v1.AddArg(dst)
   16294 		v2 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16295 		v2.AddArg(src)
   16296 		v2.AddArg(mem)
   16297 		v1.AddArg(v2)
   16298 		v1.AddArg(mem)
   16299 		v.AddArg(v1)
   16300 		return true
   16301 	}
   16302 	// match: (Move [7] dst src mem)
   16303 	// cond:
   16304 	// result: (MOVLstore [3] dst (MOVLload [3] src mem) 		(MOVLstore dst (MOVLload src mem) mem))
   16305 	for {
   16306 		if v.AuxInt != 7 {
   16307 			break
   16308 		}
   16309 		_ = v.Args[2]
   16310 		dst := v.Args[0]
   16311 		src := v.Args[1]
   16312 		mem := v.Args[2]
   16313 		v.reset(Op386MOVLstore)
   16314 		v.AuxInt = 3
   16315 		v.AddArg(dst)
   16316 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16317 		v0.AuxInt = 3
   16318 		v0.AddArg(src)
   16319 		v0.AddArg(mem)
   16320 		v.AddArg(v0)
   16321 		v1 := b.NewValue0(v.Pos, Op386MOVLstore, types.TypeMem)
   16322 		v1.AddArg(dst)
   16323 		v2 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16324 		v2.AddArg(src)
   16325 		v2.AddArg(mem)
   16326 		v1.AddArg(v2)
   16327 		v1.AddArg(mem)
   16328 		v.AddArg(v1)
   16329 		return true
   16330 	}
   16331 	// match: (Move [8] dst src mem)
   16332 	// cond:
   16333 	// result: (MOVLstore [4] dst (MOVLload [4] src mem) 		(MOVLstore dst (MOVLload src mem) mem))
   16334 	for {
   16335 		if v.AuxInt != 8 {
   16336 			break
   16337 		}
   16338 		_ = v.Args[2]
   16339 		dst := v.Args[0]
   16340 		src := v.Args[1]
   16341 		mem := v.Args[2]
   16342 		v.reset(Op386MOVLstore)
   16343 		v.AuxInt = 4
   16344 		v.AddArg(dst)
   16345 		v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16346 		v0.AuxInt = 4
   16347 		v0.AddArg(src)
   16348 		v0.AddArg(mem)
   16349 		v.AddArg(v0)
   16350 		v1 := b.NewValue0(v.Pos, Op386MOVLstore, types.TypeMem)
   16351 		v1.AddArg(dst)
   16352 		v2 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16353 		v2.AddArg(src)
   16354 		v2.AddArg(mem)
   16355 		v1.AddArg(v2)
   16356 		v1.AddArg(mem)
   16357 		v.AddArg(v1)
   16358 		return true
   16359 	}
   16360 	// match: (Move [s] dst src mem)
   16361 	// cond: s > 8 && s%4 != 0
   16362 	// result: (Move [s-s%4] 		(ADDLconst <dst.Type> dst [s%4]) 		(ADDLconst <src.Type> src [s%4]) 		(MOVLstore dst (MOVLload src mem) mem))
   16363 	for {
   16364 		s := v.AuxInt
   16365 		_ = v.Args[2]
   16366 		dst := v.Args[0]
   16367 		src := v.Args[1]
   16368 		mem := v.Args[2]
   16369 		if !(s > 8 && s%4 != 0) {
   16370 			break
   16371 		}
   16372 		v.reset(OpMove)
   16373 		v.AuxInt = s - s%4
   16374 		v0 := b.NewValue0(v.Pos, Op386ADDLconst, dst.Type)
   16375 		v0.AuxInt = s % 4
   16376 		v0.AddArg(dst)
   16377 		v.AddArg(v0)
   16378 		v1 := b.NewValue0(v.Pos, Op386ADDLconst, src.Type)
   16379 		v1.AuxInt = s % 4
   16380 		v1.AddArg(src)
   16381 		v.AddArg(v1)
   16382 		v2 := b.NewValue0(v.Pos, Op386MOVLstore, types.TypeMem)
   16383 		v2.AddArg(dst)
   16384 		v3 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32)
   16385 		v3.AddArg(src)
   16386 		v3.AddArg(mem)
   16387 		v2.AddArg(v3)
   16388 		v2.AddArg(mem)
   16389 		v.AddArg(v2)
   16390 		return true
   16391 	}
   16392 	return false
   16393 }
   16394 func rewriteValue386_OpMove_10(v *Value) bool {
   16395 	b := v.Block
   16396 	_ = b
   16397 	config := b.Func.Config
   16398 	_ = config
   16399 	typ := &b.Func.Config.Types
   16400 	_ = typ
   16401 	// match: (Move [s] dst src mem)
   16402 	// cond: s > 8 && s <= 4*128 && s%4 == 0 	&& !config.noDuffDevice
   16403 	// result: (DUFFCOPY [10*(128-s/4)] dst src mem)
   16404 	for {
   16405 		s := v.AuxInt
   16406 		_ = v.Args[2]
   16407 		dst := v.Args[0]
   16408 		src := v.Args[1]
   16409 		mem := v.Args[2]
   16410 		if !(s > 8 && s <= 4*128 && s%4 == 0 && !config.noDuffDevice) {
   16411 			break
   16412 		}
   16413 		v.reset(Op386DUFFCOPY)
   16414 		v.AuxInt = 10 * (128 - s/4)
   16415 		v.AddArg(dst)
   16416 		v.AddArg(src)
   16417 		v.AddArg(mem)
   16418 		return true
   16419 	}
   16420 	// match: (Move [s] dst src mem)
   16421 	// cond: (s > 4*128 || config.noDuffDevice) && s%4 == 0
   16422 	// result: (REPMOVSL dst src (MOVLconst [s/4]) mem)
   16423 	for {
   16424 		s := v.AuxInt
   16425 		_ = v.Args[2]
   16426 		dst := v.Args[0]
   16427 		src := v.Args[1]
   16428 		mem := v.Args[2]
   16429 		if !((s > 4*128 || config.noDuffDevice) && s%4 == 0) {
   16430 			break
   16431 		}
   16432 		v.reset(Op386REPMOVSL)
   16433 		v.AddArg(dst)
   16434 		v.AddArg(src)
   16435 		v0 := b.NewValue0(v.Pos, Op386MOVLconst, typ.UInt32)
   16436 		v0.AuxInt = s / 4
   16437 		v.AddArg(v0)
   16438 		v.AddArg(mem)
   16439 		return true
   16440 	}
   16441 	return false
   16442 }
   16443 func rewriteValue386_OpMul16_0(v *Value) bool {
   16444 	// match: (Mul16 x y)
   16445 	// cond:
   16446 	// result: (MULL  x y)
   16447 	for {
   16448 		_ = v.Args[1]
   16449 		x := v.Args[0]
   16450 		y := v.Args[1]
   16451 		v.reset(Op386MULL)
   16452 		v.AddArg(x)
   16453 		v.AddArg(y)
   16454 		return true
   16455 	}
   16456 }
   16457 func rewriteValue386_OpMul32_0(v *Value) bool {
   16458 	// match: (Mul32 x y)
   16459 	// cond:
   16460 	// result: (MULL  x y)
   16461 	for {
   16462 		_ = v.Args[1]
   16463 		x := v.Args[0]
   16464 		y := v.Args[1]
   16465 		v.reset(Op386MULL)
   16466 		v.AddArg(x)
   16467 		v.AddArg(y)
   16468 		return true
   16469 	}
   16470 }
   16471 func rewriteValue386_OpMul32F_0(v *Value) bool {
   16472 	// match: (Mul32F x y)
   16473 	// cond:
   16474 	// result: (MULSS x y)
   16475 	for {
   16476 		_ = v.Args[1]
   16477 		x := v.Args[0]
   16478 		y := v.Args[1]
   16479 		v.reset(Op386MULSS)
   16480 		v.AddArg(x)
   16481 		v.AddArg(y)
   16482 		return true
   16483 	}
   16484 }
   16485 func rewriteValue386_OpMul32uhilo_0(v *Value) bool {
   16486 	// match: (Mul32uhilo x y)
   16487 	// cond:
   16488 	// result: (MULLQU x y)
   16489 	for {
   16490 		_ = v.Args[1]
   16491 		x := v.Args[0]
   16492 		y := v.Args[1]
   16493 		v.reset(Op386MULLQU)
   16494 		v.AddArg(x)
   16495 		v.AddArg(y)
   16496 		return true
   16497 	}
   16498 }
   16499 func rewriteValue386_OpMul64F_0(v *Value) bool {
   16500 	// match: (Mul64F x y)
   16501 	// cond:
   16502 	// result: (MULSD x y)
   16503 	for {
   16504 		_ = v.Args[1]
   16505 		x := v.Args[0]
   16506 		y := v.Args[1]
   16507 		v.reset(Op386MULSD)
   16508 		v.AddArg(x)
   16509 		v.AddArg(y)
   16510 		return true
   16511 	}
   16512 }
   16513 func rewriteValue386_OpMul8_0(v *Value) bool {
   16514 	// match: (Mul8 x y)
   16515 	// cond:
   16516 	// result: (MULL  x y)
   16517 	for {
   16518 		_ = v.Args[1]
   16519 		x := v.Args[0]
   16520 		y := v.Args[1]
   16521 		v.reset(Op386MULL)
   16522 		v.AddArg(x)
   16523 		v.AddArg(y)
   16524 		return true
   16525 	}
   16526 }
   16527 func rewriteValue386_OpNeg16_0(v *Value) bool {
   16528 	// match: (Neg16 x)
   16529 	// cond:
   16530 	// result: (NEGL x)
   16531 	for {
   16532 		x := v.Args[0]
   16533 		v.reset(Op386NEGL)
   16534 		v.AddArg(x)
   16535 		return true
   16536 	}
   16537 }
   16538 func rewriteValue386_OpNeg32_0(v *Value) bool {
   16539 	// match: (Neg32 x)
   16540 	// cond:
   16541 	// result: (NEGL x)
   16542 	for {
   16543 		x := v.Args[0]
   16544 		v.reset(Op386NEGL)
   16545 		v.AddArg(x)
   16546 		return true
   16547 	}
   16548 }
   16549 func rewriteValue386_OpNeg32F_0(v *Value) bool {
   16550 	b := v.Block
   16551 	_ = b
   16552 	config := b.Func.Config
   16553 	_ = config
   16554 	typ := &b.Func.Config.Types
   16555 	_ = typ
   16556 	// match: (Neg32F x)
   16557 	// cond: !config.use387
   16558 	// result: (PXOR x (MOVSSconst <typ.Float32> [f2i(math.Copysign(0, -1))]))
   16559 	for {
   16560 		x := v.Args[0]
   16561 		if !(!config.use387) {
   16562 			break
   16563 		}
   16564 		v.reset(Op386PXOR)
   16565 		v.AddArg(x)
   16566 		v0 := b.NewValue0(v.Pos, Op386MOVSSconst, typ.Float32)
   16567 		v0.AuxInt = f2i(math.Copysign(0, -1))
   16568 		v.AddArg(v0)
   16569 		return true
   16570 	}
   16571 	// match: (Neg32F x)
   16572 	// cond: config.use387
   16573 	// result: (FCHS x)
   16574 	for {
   16575 		x := v.Args[0]
   16576 		if !(config.use387) {
   16577 			break
   16578 		}
   16579 		v.reset(Op386FCHS)
   16580 		v.AddArg(x)
   16581 		return true
   16582 	}
   16583 	return false
   16584 }
   16585 func rewriteValue386_OpNeg64F_0(v *Value) bool {
   16586 	b := v.Block
   16587 	_ = b
   16588 	config := b.Func.Config
   16589 	_ = config
   16590 	typ := &b.Func.Config.Types
   16591 	_ = typ
   16592 	// match: (Neg64F x)
   16593 	// cond: !config.use387
   16594 	// result: (PXOR x (MOVSDconst <typ.Float64> [f2i(math.Copysign(0, -1))]))
   16595 	for {
   16596 		x := v.Args[0]
   16597 		if !(!config.use387) {
   16598 			break
   16599 		}
   16600 		v.reset(Op386PXOR)
   16601 		v.AddArg(x)
   16602 		v0 := b.NewValue0(v.Pos, Op386MOVSDconst, typ.Float64)
   16603 		v0.AuxInt = f2i(math.Copysign(0, -1))
   16604 		v.AddArg(v0)
   16605 		return true
   16606 	}
   16607 	// match: (Neg64F x)
   16608 	// cond: config.use387
   16609 	// result: (FCHS x)
   16610 	for {
   16611 		x := v.Args[0]
   16612 		if !(config.use387) {
   16613 			break
   16614 		}
   16615 		v.reset(Op386FCHS)
   16616 		v.AddArg(x)
   16617 		return true
   16618 	}
   16619 	return false
   16620 }
   16621 func rewriteValue386_OpNeg8_0(v *Value) bool {
   16622 	// match: (Neg8 x)
   16623 	// cond:
   16624 	// result: (NEGL x)
   16625 	for {
   16626 		x := v.Args[0]
   16627 		v.reset(Op386NEGL)
   16628 		v.AddArg(x)
   16629 		return true
   16630 	}
   16631 }
   16632 func rewriteValue386_OpNeq16_0(v *Value) bool {
   16633 	b := v.Block
   16634 	_ = b
   16635 	// match: (Neq16 x y)
   16636 	// cond:
   16637 	// result: (SETNE (CMPW x y))
   16638 	for {
   16639 		_ = v.Args[1]
   16640 		x := v.Args[0]
   16641 		y := v.Args[1]
   16642 		v.reset(Op386SETNE)
   16643 		v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
   16644 		v0.AddArg(x)
   16645 		v0.AddArg(y)
   16646 		v.AddArg(v0)
   16647 		return true
   16648 	}
   16649 }
   16650 func rewriteValue386_OpNeq32_0(v *Value) bool {
   16651 	b := v.Block
   16652 	_ = b
   16653 	// match: (Neq32 x y)
   16654 	// cond:
   16655 	// result: (SETNE (CMPL x y))
   16656 	for {
   16657 		_ = v.Args[1]
   16658 		x := v.Args[0]
   16659 		y := v.Args[1]
   16660 		v.reset(Op386SETNE)
   16661 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   16662 		v0.AddArg(x)
   16663 		v0.AddArg(y)
   16664 		v.AddArg(v0)
   16665 		return true
   16666 	}
   16667 }
   16668 func rewriteValue386_OpNeq32F_0(v *Value) bool {
   16669 	b := v.Block
   16670 	_ = b
   16671 	// match: (Neq32F x y)
   16672 	// cond:
   16673 	// result: (SETNEF (UCOMISS x y))
   16674 	for {
   16675 		_ = v.Args[1]
   16676 		x := v.Args[0]
   16677 		y := v.Args[1]
   16678 		v.reset(Op386SETNEF)
   16679 		v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags)
   16680 		v0.AddArg(x)
   16681 		v0.AddArg(y)
   16682 		v.AddArg(v0)
   16683 		return true
   16684 	}
   16685 }
   16686 func rewriteValue386_OpNeq64F_0(v *Value) bool {
   16687 	b := v.Block
   16688 	_ = b
   16689 	// match: (Neq64F x y)
   16690 	// cond:
   16691 	// result: (SETNEF (UCOMISD x y))
   16692 	for {
   16693 		_ = v.Args[1]
   16694 		x := v.Args[0]
   16695 		y := v.Args[1]
   16696 		v.reset(Op386SETNEF)
   16697 		v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags)
   16698 		v0.AddArg(x)
   16699 		v0.AddArg(y)
   16700 		v.AddArg(v0)
   16701 		return true
   16702 	}
   16703 }
   16704 func rewriteValue386_OpNeq8_0(v *Value) bool {
   16705 	b := v.Block
   16706 	_ = b
   16707 	// match: (Neq8 x y)
   16708 	// cond:
   16709 	// result: (SETNE (CMPB x y))
   16710 	for {
   16711 		_ = v.Args[1]
   16712 		x := v.Args[0]
   16713 		y := v.Args[1]
   16714 		v.reset(Op386SETNE)
   16715 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   16716 		v0.AddArg(x)
   16717 		v0.AddArg(y)
   16718 		v.AddArg(v0)
   16719 		return true
   16720 	}
   16721 }
   16722 func rewriteValue386_OpNeqB_0(v *Value) bool {
   16723 	b := v.Block
   16724 	_ = b
   16725 	// match: (NeqB x y)
   16726 	// cond:
   16727 	// result: (SETNE (CMPB x y))
   16728 	for {
   16729 		_ = v.Args[1]
   16730 		x := v.Args[0]
   16731 		y := v.Args[1]
   16732 		v.reset(Op386SETNE)
   16733 		v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
   16734 		v0.AddArg(x)
   16735 		v0.AddArg(y)
   16736 		v.AddArg(v0)
   16737 		return true
   16738 	}
   16739 }
   16740 func rewriteValue386_OpNeqPtr_0(v *Value) bool {
   16741 	b := v.Block
   16742 	_ = b
   16743 	// match: (NeqPtr x y)
   16744 	// cond:
   16745 	// result: (SETNE (CMPL x y))
   16746 	for {
   16747 		_ = v.Args[1]
   16748 		x := v.Args[0]
   16749 		y := v.Args[1]
   16750 		v.reset(Op386SETNE)
   16751 		v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
   16752 		v0.AddArg(x)
   16753 		v0.AddArg(y)
   16754 		v.AddArg(v0)
   16755 		return true
   16756 	}
   16757 }
   16758 func rewriteValue386_OpNilCheck_0(v *Value) bool {
   16759 	// match: (NilCheck ptr mem)
   16760 	// cond:
   16761 	// result: (LoweredNilCheck ptr mem)
   16762 	for {
   16763 		_ = v.Args[1]
   16764 		ptr := v.Args[0]
   16765 		mem := v.Args[1]
   16766 		v.reset(Op386LoweredNilCheck)
   16767 		v.AddArg(ptr)
   16768 		v.AddArg(mem)
   16769 		return true
   16770 	}
   16771 }
   16772 func rewriteValue386_OpNot_0(v *Value) bool {
   16773 	// match: (Not x)
   16774 	// cond:
   16775 	// result: (XORLconst [1] x)
   16776 	for {
   16777 		x := v.Args[0]
   16778 		v.reset(Op386XORLconst)
   16779 		v.AuxInt = 1
   16780 		v.AddArg(x)
   16781 		return true
   16782 	}
   16783 }
   16784 func rewriteValue386_OpOffPtr_0(v *Value) bool {
   16785 	// match: (OffPtr [off] ptr)
   16786 	// cond:
   16787 	// result: (ADDLconst [off] ptr)
   16788 	for {
   16789 		off := v.AuxInt
   16790 		ptr := v.Args[0]
   16791 		v.reset(Op386ADDLconst)
   16792 		v.AuxInt = off
   16793 		v.AddArg(ptr)
   16794 		return true
   16795 	}
   16796 }
   16797 func rewriteValue386_OpOr16_0(v *Value) bool {
   16798 	// match: (Or16 x y)
   16799 	// cond:
   16800 	// result: (ORL x y)
   16801 	for {
   16802 		_ = v.Args[1]
   16803 		x := v.Args[0]
   16804 		y := v.Args[1]
   16805 		v.reset(Op386ORL)
   16806 		v.AddArg(x)
   16807 		v.AddArg(y)
   16808 		return true
   16809 	}
   16810 }
   16811 func rewriteValue386_OpOr32_0(v *Value) bool {
   16812 	// match: (Or32 x y)
   16813 	// cond:
   16814 	// result: (ORL x y)
   16815 	for {
   16816 		_ = v.Args[1]
   16817 		x := v.Args[0]
   16818 		y := v.Args[1]
   16819 		v.reset(Op386ORL)
   16820 		v.AddArg(x)
   16821 		v.AddArg(y)
   16822 		return true
   16823 	}
   16824 }
   16825 func rewriteValue386_OpOr8_0(v *Value) bool {
   16826 	// match: (Or8 x y)
   16827 	// cond:
   16828 	// result: (ORL x y)
   16829 	for {
   16830 		_ = v.Args[1]
   16831 		x := v.Args[0]
   16832 		y := v.Args[1]
   16833 		v.reset(Op386ORL)
   16834 		v.AddArg(x)
   16835 		v.AddArg(y)
   16836 		return true
   16837 	}
   16838 }
   16839 func rewriteValue386_OpOrB_0(v *Value) bool {
   16840 	// match: (OrB x y)
   16841 	// cond:
   16842 	// result: (ORL x y)
   16843 	for {
   16844 		_ = v.Args[1]
   16845 		x := v.Args[0]
   16846 		y := v.Args[1]
   16847 		v.reset(Op386ORL)
   16848 		v.AddArg(x)
   16849 		v.AddArg(y)
   16850 		return true
   16851 	}
   16852 }
   16853 func rewriteValue386_OpRound32F_0(v *Value) bool {
   16854 	// match: (Round32F x)
   16855 	// cond:
   16856 	// result: x
   16857 	for {
   16858 		x := v.Args[0]
   16859 		v.reset(OpCopy)
   16860 		v.Type = x.Type
   16861 		v.AddArg(x)
   16862 		return true
   16863 	}
   16864 }
   16865 func rewriteValue386_OpRound64F_0(v *Value) bool {
   16866 	// match: (Round64F x)
   16867 	// cond:
   16868 	// result: x
   16869 	for {
   16870 		x := v.Args[0]
   16871 		v.reset(OpCopy)
   16872 		v.Type = x.Type
   16873 		v.AddArg(x)
   16874 		return true
   16875 	}
   16876 }
   16877 func rewriteValue386_OpRsh16Ux16_0(v *Value) bool {
   16878 	b := v.Block
   16879 	_ = b
   16880 	// match: (Rsh16Ux16 <t> x y)
   16881 	// cond:
   16882 	// result: (ANDL (SHRW <t> x y) (SBBLcarrymask <t> (CMPWconst y [16])))
   16883 	for {
   16884 		t := v.Type
   16885 		_ = v.Args[1]
   16886 		x := v.Args[0]
   16887 		y := v.Args[1]
   16888 		v.reset(Op386ANDL)
   16889 		v0 := b.NewValue0(v.Pos, Op386SHRW, t)
   16890 		v0.AddArg(x)
   16891 		v0.AddArg(y)
   16892 		v.AddArg(v0)
   16893 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   16894 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   16895 		v2.AuxInt = 16
   16896 		v2.AddArg(y)
   16897 		v1.AddArg(v2)
   16898 		v.AddArg(v1)
   16899 		return true
   16900 	}
   16901 }
   16902 func rewriteValue386_OpRsh16Ux32_0(v *Value) bool {
   16903 	b := v.Block
   16904 	_ = b
   16905 	// match: (Rsh16Ux32 <t> x y)
   16906 	// cond:
   16907 	// result: (ANDL (SHRW <t> x y) (SBBLcarrymask <t> (CMPLconst y [16])))
   16908 	for {
   16909 		t := v.Type
   16910 		_ = v.Args[1]
   16911 		x := v.Args[0]
   16912 		y := v.Args[1]
   16913 		v.reset(Op386ANDL)
   16914 		v0 := b.NewValue0(v.Pos, Op386SHRW, t)
   16915 		v0.AddArg(x)
   16916 		v0.AddArg(y)
   16917 		v.AddArg(v0)
   16918 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   16919 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   16920 		v2.AuxInt = 16
   16921 		v2.AddArg(y)
   16922 		v1.AddArg(v2)
   16923 		v.AddArg(v1)
   16924 		return true
   16925 	}
   16926 }
   16927 func rewriteValue386_OpRsh16Ux64_0(v *Value) bool {
   16928 	// match: (Rsh16Ux64 x (Const64 [c]))
   16929 	// cond: uint64(c) < 16
   16930 	// result: (SHRWconst x [c])
   16931 	for {
   16932 		_ = v.Args[1]
   16933 		x := v.Args[0]
   16934 		v_1 := v.Args[1]
   16935 		if v_1.Op != OpConst64 {
   16936 			break
   16937 		}
   16938 		c := v_1.AuxInt
   16939 		if !(uint64(c) < 16) {
   16940 			break
   16941 		}
   16942 		v.reset(Op386SHRWconst)
   16943 		v.AuxInt = c
   16944 		v.AddArg(x)
   16945 		return true
   16946 	}
   16947 	// match: (Rsh16Ux64 _ (Const64 [c]))
   16948 	// cond: uint64(c) >= 16
   16949 	// result: (Const16 [0])
   16950 	for {
   16951 		_ = v.Args[1]
   16952 		v_1 := v.Args[1]
   16953 		if v_1.Op != OpConst64 {
   16954 			break
   16955 		}
   16956 		c := v_1.AuxInt
   16957 		if !(uint64(c) >= 16) {
   16958 			break
   16959 		}
   16960 		v.reset(OpConst16)
   16961 		v.AuxInt = 0
   16962 		return true
   16963 	}
   16964 	return false
   16965 }
   16966 func rewriteValue386_OpRsh16Ux8_0(v *Value) bool {
   16967 	b := v.Block
   16968 	_ = b
   16969 	// match: (Rsh16Ux8 <t> x y)
   16970 	// cond:
   16971 	// result: (ANDL (SHRW <t> x y) (SBBLcarrymask <t> (CMPBconst y [16])))
   16972 	for {
   16973 		t := v.Type
   16974 		_ = v.Args[1]
   16975 		x := v.Args[0]
   16976 		y := v.Args[1]
   16977 		v.reset(Op386ANDL)
   16978 		v0 := b.NewValue0(v.Pos, Op386SHRW, t)
   16979 		v0.AddArg(x)
   16980 		v0.AddArg(y)
   16981 		v.AddArg(v0)
   16982 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   16983 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   16984 		v2.AuxInt = 16
   16985 		v2.AddArg(y)
   16986 		v1.AddArg(v2)
   16987 		v.AddArg(v1)
   16988 		return true
   16989 	}
   16990 }
   16991 func rewriteValue386_OpRsh16x16_0(v *Value) bool {
   16992 	b := v.Block
   16993 	_ = b
   16994 	// match: (Rsh16x16 <t> x y)
   16995 	// cond:
   16996 	// result: (SARW <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPWconst y [16])))))
   16997 	for {
   16998 		t := v.Type
   16999 		_ = v.Args[1]
   17000 		x := v.Args[0]
   17001 		y := v.Args[1]
   17002 		v.reset(Op386SARW)
   17003 		v.Type = t
   17004 		v.AddArg(x)
   17005 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17006 		v0.AddArg(y)
   17007 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17008 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17009 		v3 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   17010 		v3.AuxInt = 16
   17011 		v3.AddArg(y)
   17012 		v2.AddArg(v3)
   17013 		v1.AddArg(v2)
   17014 		v0.AddArg(v1)
   17015 		v.AddArg(v0)
   17016 		return true
   17017 	}
   17018 }
   17019 func rewriteValue386_OpRsh16x32_0(v *Value) bool {
   17020 	b := v.Block
   17021 	_ = b
   17022 	// match: (Rsh16x32 <t> x y)
   17023 	// cond:
   17024 	// result: (SARW <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPLconst y [16])))))
   17025 	for {
   17026 		t := v.Type
   17027 		_ = v.Args[1]
   17028 		x := v.Args[0]
   17029 		y := v.Args[1]
   17030 		v.reset(Op386SARW)
   17031 		v.Type = t
   17032 		v.AddArg(x)
   17033 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17034 		v0.AddArg(y)
   17035 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17036 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17037 		v3 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   17038 		v3.AuxInt = 16
   17039 		v3.AddArg(y)
   17040 		v2.AddArg(v3)
   17041 		v1.AddArg(v2)
   17042 		v0.AddArg(v1)
   17043 		v.AddArg(v0)
   17044 		return true
   17045 	}
   17046 }
   17047 func rewriteValue386_OpRsh16x64_0(v *Value) bool {
   17048 	// match: (Rsh16x64 x (Const64 [c]))
   17049 	// cond: uint64(c) < 16
   17050 	// result: (SARWconst x [c])
   17051 	for {
   17052 		_ = v.Args[1]
   17053 		x := v.Args[0]
   17054 		v_1 := v.Args[1]
   17055 		if v_1.Op != OpConst64 {
   17056 			break
   17057 		}
   17058 		c := v_1.AuxInt
   17059 		if !(uint64(c) < 16) {
   17060 			break
   17061 		}
   17062 		v.reset(Op386SARWconst)
   17063 		v.AuxInt = c
   17064 		v.AddArg(x)
   17065 		return true
   17066 	}
   17067 	// match: (Rsh16x64 x (Const64 [c]))
   17068 	// cond: uint64(c) >= 16
   17069 	// result: (SARWconst x [15])
   17070 	for {
   17071 		_ = v.Args[1]
   17072 		x := v.Args[0]
   17073 		v_1 := v.Args[1]
   17074 		if v_1.Op != OpConst64 {
   17075 			break
   17076 		}
   17077 		c := v_1.AuxInt
   17078 		if !(uint64(c) >= 16) {
   17079 			break
   17080 		}
   17081 		v.reset(Op386SARWconst)
   17082 		v.AuxInt = 15
   17083 		v.AddArg(x)
   17084 		return true
   17085 	}
   17086 	return false
   17087 }
   17088 func rewriteValue386_OpRsh16x8_0(v *Value) bool {
   17089 	b := v.Block
   17090 	_ = b
   17091 	// match: (Rsh16x8 <t> x y)
   17092 	// cond:
   17093 	// result: (SARW <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPBconst y [16])))))
   17094 	for {
   17095 		t := v.Type
   17096 		_ = v.Args[1]
   17097 		x := v.Args[0]
   17098 		y := v.Args[1]
   17099 		v.reset(Op386SARW)
   17100 		v.Type = t
   17101 		v.AddArg(x)
   17102 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17103 		v0.AddArg(y)
   17104 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17105 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17106 		v3 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   17107 		v3.AuxInt = 16
   17108 		v3.AddArg(y)
   17109 		v2.AddArg(v3)
   17110 		v1.AddArg(v2)
   17111 		v0.AddArg(v1)
   17112 		v.AddArg(v0)
   17113 		return true
   17114 	}
   17115 }
   17116 func rewriteValue386_OpRsh32Ux16_0(v *Value) bool {
   17117 	b := v.Block
   17118 	_ = b
   17119 	// match: (Rsh32Ux16 <t> x y)
   17120 	// cond:
   17121 	// result: (ANDL (SHRL <t> x y) (SBBLcarrymask <t> (CMPWconst y [32])))
   17122 	for {
   17123 		t := v.Type
   17124 		_ = v.Args[1]
   17125 		x := v.Args[0]
   17126 		y := v.Args[1]
   17127 		v.reset(Op386ANDL)
   17128 		v0 := b.NewValue0(v.Pos, Op386SHRL, t)
   17129 		v0.AddArg(x)
   17130 		v0.AddArg(y)
   17131 		v.AddArg(v0)
   17132 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17133 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   17134 		v2.AuxInt = 32
   17135 		v2.AddArg(y)
   17136 		v1.AddArg(v2)
   17137 		v.AddArg(v1)
   17138 		return true
   17139 	}
   17140 }
   17141 func rewriteValue386_OpRsh32Ux32_0(v *Value) bool {
   17142 	b := v.Block
   17143 	_ = b
   17144 	// match: (Rsh32Ux32 <t> x y)
   17145 	// cond:
   17146 	// result: (ANDL (SHRL <t> x y) (SBBLcarrymask <t> (CMPLconst y [32])))
   17147 	for {
   17148 		t := v.Type
   17149 		_ = v.Args[1]
   17150 		x := v.Args[0]
   17151 		y := v.Args[1]
   17152 		v.reset(Op386ANDL)
   17153 		v0 := b.NewValue0(v.Pos, Op386SHRL, t)
   17154 		v0.AddArg(x)
   17155 		v0.AddArg(y)
   17156 		v.AddArg(v0)
   17157 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17158 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   17159 		v2.AuxInt = 32
   17160 		v2.AddArg(y)
   17161 		v1.AddArg(v2)
   17162 		v.AddArg(v1)
   17163 		return true
   17164 	}
   17165 }
   17166 func rewriteValue386_OpRsh32Ux64_0(v *Value) bool {
   17167 	// match: (Rsh32Ux64 x (Const64 [c]))
   17168 	// cond: uint64(c) < 32
   17169 	// result: (SHRLconst x [c])
   17170 	for {
   17171 		_ = v.Args[1]
   17172 		x := v.Args[0]
   17173 		v_1 := v.Args[1]
   17174 		if v_1.Op != OpConst64 {
   17175 			break
   17176 		}
   17177 		c := v_1.AuxInt
   17178 		if !(uint64(c) < 32) {
   17179 			break
   17180 		}
   17181 		v.reset(Op386SHRLconst)
   17182 		v.AuxInt = c
   17183 		v.AddArg(x)
   17184 		return true
   17185 	}
   17186 	// match: (Rsh32Ux64 _ (Const64 [c]))
   17187 	// cond: uint64(c) >= 32
   17188 	// result: (Const32 [0])
   17189 	for {
   17190 		_ = v.Args[1]
   17191 		v_1 := v.Args[1]
   17192 		if v_1.Op != OpConst64 {
   17193 			break
   17194 		}
   17195 		c := v_1.AuxInt
   17196 		if !(uint64(c) >= 32) {
   17197 			break
   17198 		}
   17199 		v.reset(OpConst32)
   17200 		v.AuxInt = 0
   17201 		return true
   17202 	}
   17203 	return false
   17204 }
   17205 func rewriteValue386_OpRsh32Ux8_0(v *Value) bool {
   17206 	b := v.Block
   17207 	_ = b
   17208 	// match: (Rsh32Ux8 <t> x y)
   17209 	// cond:
   17210 	// result: (ANDL (SHRL <t> x y) (SBBLcarrymask <t> (CMPBconst y [32])))
   17211 	for {
   17212 		t := v.Type
   17213 		_ = v.Args[1]
   17214 		x := v.Args[0]
   17215 		y := v.Args[1]
   17216 		v.reset(Op386ANDL)
   17217 		v0 := b.NewValue0(v.Pos, Op386SHRL, t)
   17218 		v0.AddArg(x)
   17219 		v0.AddArg(y)
   17220 		v.AddArg(v0)
   17221 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17222 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   17223 		v2.AuxInt = 32
   17224 		v2.AddArg(y)
   17225 		v1.AddArg(v2)
   17226 		v.AddArg(v1)
   17227 		return true
   17228 	}
   17229 }
   17230 func rewriteValue386_OpRsh32x16_0(v *Value) bool {
   17231 	b := v.Block
   17232 	_ = b
   17233 	// match: (Rsh32x16 <t> x y)
   17234 	// cond:
   17235 	// result: (SARL <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPWconst y [32])))))
   17236 	for {
   17237 		t := v.Type
   17238 		_ = v.Args[1]
   17239 		x := v.Args[0]
   17240 		y := v.Args[1]
   17241 		v.reset(Op386SARL)
   17242 		v.Type = t
   17243 		v.AddArg(x)
   17244 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17245 		v0.AddArg(y)
   17246 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17247 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17248 		v3 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   17249 		v3.AuxInt = 32
   17250 		v3.AddArg(y)
   17251 		v2.AddArg(v3)
   17252 		v1.AddArg(v2)
   17253 		v0.AddArg(v1)
   17254 		v.AddArg(v0)
   17255 		return true
   17256 	}
   17257 }
   17258 func rewriteValue386_OpRsh32x32_0(v *Value) bool {
   17259 	b := v.Block
   17260 	_ = b
   17261 	// match: (Rsh32x32 <t> x y)
   17262 	// cond:
   17263 	// result: (SARL <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPLconst y [32])))))
   17264 	for {
   17265 		t := v.Type
   17266 		_ = v.Args[1]
   17267 		x := v.Args[0]
   17268 		y := v.Args[1]
   17269 		v.reset(Op386SARL)
   17270 		v.Type = t
   17271 		v.AddArg(x)
   17272 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17273 		v0.AddArg(y)
   17274 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17275 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17276 		v3 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   17277 		v3.AuxInt = 32
   17278 		v3.AddArg(y)
   17279 		v2.AddArg(v3)
   17280 		v1.AddArg(v2)
   17281 		v0.AddArg(v1)
   17282 		v.AddArg(v0)
   17283 		return true
   17284 	}
   17285 }
   17286 func rewriteValue386_OpRsh32x64_0(v *Value) bool {
   17287 	// match: (Rsh32x64 x (Const64 [c]))
   17288 	// cond: uint64(c) < 32
   17289 	// result: (SARLconst x [c])
   17290 	for {
   17291 		_ = v.Args[1]
   17292 		x := v.Args[0]
   17293 		v_1 := v.Args[1]
   17294 		if v_1.Op != OpConst64 {
   17295 			break
   17296 		}
   17297 		c := v_1.AuxInt
   17298 		if !(uint64(c) < 32) {
   17299 			break
   17300 		}
   17301 		v.reset(Op386SARLconst)
   17302 		v.AuxInt = c
   17303 		v.AddArg(x)
   17304 		return true
   17305 	}
   17306 	// match: (Rsh32x64 x (Const64 [c]))
   17307 	// cond: uint64(c) >= 32
   17308 	// result: (SARLconst x [31])
   17309 	for {
   17310 		_ = v.Args[1]
   17311 		x := v.Args[0]
   17312 		v_1 := v.Args[1]
   17313 		if v_1.Op != OpConst64 {
   17314 			break
   17315 		}
   17316 		c := v_1.AuxInt
   17317 		if !(uint64(c) >= 32) {
   17318 			break
   17319 		}
   17320 		v.reset(Op386SARLconst)
   17321 		v.AuxInt = 31
   17322 		v.AddArg(x)
   17323 		return true
   17324 	}
   17325 	return false
   17326 }
   17327 func rewriteValue386_OpRsh32x8_0(v *Value) bool {
   17328 	b := v.Block
   17329 	_ = b
   17330 	// match: (Rsh32x8 <t> x y)
   17331 	// cond:
   17332 	// result: (SARL <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPBconst y [32])))))
   17333 	for {
   17334 		t := v.Type
   17335 		_ = v.Args[1]
   17336 		x := v.Args[0]
   17337 		y := v.Args[1]
   17338 		v.reset(Op386SARL)
   17339 		v.Type = t
   17340 		v.AddArg(x)
   17341 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17342 		v0.AddArg(y)
   17343 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17344 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17345 		v3 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   17346 		v3.AuxInt = 32
   17347 		v3.AddArg(y)
   17348 		v2.AddArg(v3)
   17349 		v1.AddArg(v2)
   17350 		v0.AddArg(v1)
   17351 		v.AddArg(v0)
   17352 		return true
   17353 	}
   17354 }
   17355 func rewriteValue386_OpRsh8Ux16_0(v *Value) bool {
   17356 	b := v.Block
   17357 	_ = b
   17358 	// match: (Rsh8Ux16 <t> x y)
   17359 	// cond:
   17360 	// result: (ANDL (SHRB <t> x y) (SBBLcarrymask <t> (CMPWconst y [8])))
   17361 	for {
   17362 		t := v.Type
   17363 		_ = v.Args[1]
   17364 		x := v.Args[0]
   17365 		y := v.Args[1]
   17366 		v.reset(Op386ANDL)
   17367 		v0 := b.NewValue0(v.Pos, Op386SHRB, t)
   17368 		v0.AddArg(x)
   17369 		v0.AddArg(y)
   17370 		v.AddArg(v0)
   17371 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17372 		v2 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   17373 		v2.AuxInt = 8
   17374 		v2.AddArg(y)
   17375 		v1.AddArg(v2)
   17376 		v.AddArg(v1)
   17377 		return true
   17378 	}
   17379 }
   17380 func rewriteValue386_OpRsh8Ux32_0(v *Value) bool {
   17381 	b := v.Block
   17382 	_ = b
   17383 	// match: (Rsh8Ux32 <t> x y)
   17384 	// cond:
   17385 	// result: (ANDL (SHRB <t> x y) (SBBLcarrymask <t> (CMPLconst y [8])))
   17386 	for {
   17387 		t := v.Type
   17388 		_ = v.Args[1]
   17389 		x := v.Args[0]
   17390 		y := v.Args[1]
   17391 		v.reset(Op386ANDL)
   17392 		v0 := b.NewValue0(v.Pos, Op386SHRB, t)
   17393 		v0.AddArg(x)
   17394 		v0.AddArg(y)
   17395 		v.AddArg(v0)
   17396 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17397 		v2 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   17398 		v2.AuxInt = 8
   17399 		v2.AddArg(y)
   17400 		v1.AddArg(v2)
   17401 		v.AddArg(v1)
   17402 		return true
   17403 	}
   17404 }
   17405 func rewriteValue386_OpRsh8Ux64_0(v *Value) bool {
   17406 	// match: (Rsh8Ux64 x (Const64 [c]))
   17407 	// cond: uint64(c) < 8
   17408 	// result: (SHRBconst x [c])
   17409 	for {
   17410 		_ = v.Args[1]
   17411 		x := v.Args[0]
   17412 		v_1 := v.Args[1]
   17413 		if v_1.Op != OpConst64 {
   17414 			break
   17415 		}
   17416 		c := v_1.AuxInt
   17417 		if !(uint64(c) < 8) {
   17418 			break
   17419 		}
   17420 		v.reset(Op386SHRBconst)
   17421 		v.AuxInt = c
   17422 		v.AddArg(x)
   17423 		return true
   17424 	}
   17425 	// match: (Rsh8Ux64 _ (Const64 [c]))
   17426 	// cond: uint64(c) >= 8
   17427 	// result: (Const8 [0])
   17428 	for {
   17429 		_ = v.Args[1]
   17430 		v_1 := v.Args[1]
   17431 		if v_1.Op != OpConst64 {
   17432 			break
   17433 		}
   17434 		c := v_1.AuxInt
   17435 		if !(uint64(c) >= 8) {
   17436 			break
   17437 		}
   17438 		v.reset(OpConst8)
   17439 		v.AuxInt = 0
   17440 		return true
   17441 	}
   17442 	return false
   17443 }
   17444 func rewriteValue386_OpRsh8Ux8_0(v *Value) bool {
   17445 	b := v.Block
   17446 	_ = b
   17447 	// match: (Rsh8Ux8 <t> x y)
   17448 	// cond:
   17449 	// result: (ANDL (SHRB <t> x y) (SBBLcarrymask <t> (CMPBconst y [8])))
   17450 	for {
   17451 		t := v.Type
   17452 		_ = v.Args[1]
   17453 		x := v.Args[0]
   17454 		y := v.Args[1]
   17455 		v.reset(Op386ANDL)
   17456 		v0 := b.NewValue0(v.Pos, Op386SHRB, t)
   17457 		v0.AddArg(x)
   17458 		v0.AddArg(y)
   17459 		v.AddArg(v0)
   17460 		v1 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   17461 		v2 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   17462 		v2.AuxInt = 8
   17463 		v2.AddArg(y)
   17464 		v1.AddArg(v2)
   17465 		v.AddArg(v1)
   17466 		return true
   17467 	}
   17468 }
   17469 func rewriteValue386_OpRsh8x16_0(v *Value) bool {
   17470 	b := v.Block
   17471 	_ = b
   17472 	// match: (Rsh8x16 <t> x y)
   17473 	// cond:
   17474 	// result: (SARB <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPWconst y [8])))))
   17475 	for {
   17476 		t := v.Type
   17477 		_ = v.Args[1]
   17478 		x := v.Args[0]
   17479 		y := v.Args[1]
   17480 		v.reset(Op386SARB)
   17481 		v.Type = t
   17482 		v.AddArg(x)
   17483 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17484 		v0.AddArg(y)
   17485 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17486 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17487 		v3 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags)
   17488 		v3.AuxInt = 8
   17489 		v3.AddArg(y)
   17490 		v2.AddArg(v3)
   17491 		v1.AddArg(v2)
   17492 		v0.AddArg(v1)
   17493 		v.AddArg(v0)
   17494 		return true
   17495 	}
   17496 }
   17497 func rewriteValue386_OpRsh8x32_0(v *Value) bool {
   17498 	b := v.Block
   17499 	_ = b
   17500 	// match: (Rsh8x32 <t> x y)
   17501 	// cond:
   17502 	// result: (SARB <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPLconst y [8])))))
   17503 	for {
   17504 		t := v.Type
   17505 		_ = v.Args[1]
   17506 		x := v.Args[0]
   17507 		y := v.Args[1]
   17508 		v.reset(Op386SARB)
   17509 		v.Type = t
   17510 		v.AddArg(x)
   17511 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17512 		v0.AddArg(y)
   17513 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17514 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17515 		v3 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   17516 		v3.AuxInt = 8
   17517 		v3.AddArg(y)
   17518 		v2.AddArg(v3)
   17519 		v1.AddArg(v2)
   17520 		v0.AddArg(v1)
   17521 		v.AddArg(v0)
   17522 		return true
   17523 	}
   17524 }
   17525 func rewriteValue386_OpRsh8x64_0(v *Value) bool {
   17526 	// match: (Rsh8x64 x (Const64 [c]))
   17527 	// cond: uint64(c) < 8
   17528 	// result: (SARBconst x [c])
   17529 	for {
   17530 		_ = v.Args[1]
   17531 		x := v.Args[0]
   17532 		v_1 := v.Args[1]
   17533 		if v_1.Op != OpConst64 {
   17534 			break
   17535 		}
   17536 		c := v_1.AuxInt
   17537 		if !(uint64(c) < 8) {
   17538 			break
   17539 		}
   17540 		v.reset(Op386SARBconst)
   17541 		v.AuxInt = c
   17542 		v.AddArg(x)
   17543 		return true
   17544 	}
   17545 	// match: (Rsh8x64 x (Const64 [c]))
   17546 	// cond: uint64(c) >= 8
   17547 	// result: (SARBconst x [7])
   17548 	for {
   17549 		_ = v.Args[1]
   17550 		x := v.Args[0]
   17551 		v_1 := v.Args[1]
   17552 		if v_1.Op != OpConst64 {
   17553 			break
   17554 		}
   17555 		c := v_1.AuxInt
   17556 		if !(uint64(c) >= 8) {
   17557 			break
   17558 		}
   17559 		v.reset(Op386SARBconst)
   17560 		v.AuxInt = 7
   17561 		v.AddArg(x)
   17562 		return true
   17563 	}
   17564 	return false
   17565 }
   17566 func rewriteValue386_OpRsh8x8_0(v *Value) bool {
   17567 	b := v.Block
   17568 	_ = b
   17569 	// match: (Rsh8x8 <t> x y)
   17570 	// cond:
   17571 	// result: (SARB <t> x (ORL <y.Type> y (NOTL <y.Type> (SBBLcarrymask <y.Type> (CMPBconst y [8])))))
   17572 	for {
   17573 		t := v.Type
   17574 		_ = v.Args[1]
   17575 		x := v.Args[0]
   17576 		y := v.Args[1]
   17577 		v.reset(Op386SARB)
   17578 		v.Type = t
   17579 		v.AddArg(x)
   17580 		v0 := b.NewValue0(v.Pos, Op386ORL, y.Type)
   17581 		v0.AddArg(y)
   17582 		v1 := b.NewValue0(v.Pos, Op386NOTL, y.Type)
   17583 		v2 := b.NewValue0(v.Pos, Op386SBBLcarrymask, y.Type)
   17584 		v3 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags)
   17585 		v3.AuxInt = 8
   17586 		v3.AddArg(y)
   17587 		v2.AddArg(v3)
   17588 		v1.AddArg(v2)
   17589 		v0.AddArg(v1)
   17590 		v.AddArg(v0)
   17591 		return true
   17592 	}
   17593 }
   17594 func rewriteValue386_OpSignExt16to32_0(v *Value) bool {
   17595 	// match: (SignExt16to32 x)
   17596 	// cond:
   17597 	// result: (MOVWLSX x)
   17598 	for {
   17599 		x := v.Args[0]
   17600 		v.reset(Op386MOVWLSX)
   17601 		v.AddArg(x)
   17602 		return true
   17603 	}
   17604 }
   17605 func rewriteValue386_OpSignExt8to16_0(v *Value) bool {
   17606 	// match: (SignExt8to16 x)
   17607 	// cond:
   17608 	// result: (MOVBLSX x)
   17609 	for {
   17610 		x := v.Args[0]
   17611 		v.reset(Op386MOVBLSX)
   17612 		v.AddArg(x)
   17613 		return true
   17614 	}
   17615 }
   17616 func rewriteValue386_OpSignExt8to32_0(v *Value) bool {
   17617 	// match: (SignExt8to32 x)
   17618 	// cond:
   17619 	// result: (MOVBLSX x)
   17620 	for {
   17621 		x := v.Args[0]
   17622 		v.reset(Op386MOVBLSX)
   17623 		v.AddArg(x)
   17624 		return true
   17625 	}
   17626 }
   17627 func rewriteValue386_OpSignmask_0(v *Value) bool {
   17628 	// match: (Signmask x)
   17629 	// cond:
   17630 	// result: (SARLconst x [31])
   17631 	for {
   17632 		x := v.Args[0]
   17633 		v.reset(Op386SARLconst)
   17634 		v.AuxInt = 31
   17635 		v.AddArg(x)
   17636 		return true
   17637 	}
   17638 }
   17639 func rewriteValue386_OpSlicemask_0(v *Value) bool {
   17640 	b := v.Block
   17641 	_ = b
   17642 	// match: (Slicemask <t> x)
   17643 	// cond:
   17644 	// result: (SARLconst (NEGL <t> x) [31])
   17645 	for {
   17646 		t := v.Type
   17647 		x := v.Args[0]
   17648 		v.reset(Op386SARLconst)
   17649 		v.AuxInt = 31
   17650 		v0 := b.NewValue0(v.Pos, Op386NEGL, t)
   17651 		v0.AddArg(x)
   17652 		v.AddArg(v0)
   17653 		return true
   17654 	}
   17655 }
   17656 func rewriteValue386_OpSqrt_0(v *Value) bool {
   17657 	// match: (Sqrt x)
   17658 	// cond:
   17659 	// result: (SQRTSD x)
   17660 	for {
   17661 		x := v.Args[0]
   17662 		v.reset(Op386SQRTSD)
   17663 		v.AddArg(x)
   17664 		return true
   17665 	}
   17666 }
   17667 func rewriteValue386_OpStaticCall_0(v *Value) bool {
   17668 	// match: (StaticCall [argwid] {target} mem)
   17669 	// cond:
   17670 	// result: (CALLstatic [argwid] {target} mem)
   17671 	for {
   17672 		argwid := v.AuxInt
   17673 		target := v.Aux
   17674 		mem := v.Args[0]
   17675 		v.reset(Op386CALLstatic)
   17676 		v.AuxInt = argwid
   17677 		v.Aux = target
   17678 		v.AddArg(mem)
   17679 		return true
   17680 	}
   17681 }
   17682 func rewriteValue386_OpStore_0(v *Value) bool {
   17683 	// match: (Store {t} ptr val mem)
   17684 	// cond: t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)
   17685 	// result: (MOVSDstore ptr val mem)
   17686 	for {
   17687 		t := v.Aux
   17688 		_ = v.Args[2]
   17689 		ptr := v.Args[0]
   17690 		val := v.Args[1]
   17691 		mem := v.Args[2]
   17692 		if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) {
   17693 			break
   17694 		}
   17695 		v.reset(Op386MOVSDstore)
   17696 		v.AddArg(ptr)
   17697 		v.AddArg(val)
   17698 		v.AddArg(mem)
   17699 		return true
   17700 	}
   17701 	// match: (Store {t} ptr val mem)
   17702 	// cond: t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)
   17703 	// result: (MOVSSstore ptr val mem)
   17704 	for {
   17705 		t := v.Aux
   17706 		_ = v.Args[2]
   17707 		ptr := v.Args[0]
   17708 		val := v.Args[1]
   17709 		mem := v.Args[2]
   17710 		if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) {
   17711 			break
   17712 		}
   17713 		v.reset(Op386MOVSSstore)
   17714 		v.AddArg(ptr)
   17715 		v.AddArg(val)
   17716 		v.AddArg(mem)
   17717 		return true
   17718 	}
   17719 	// match: (Store {t} ptr val mem)
   17720 	// cond: t.(*types.Type).Size() == 4
   17721 	// result: (MOVLstore ptr val mem)
   17722 	for {
   17723 		t := v.Aux
   17724 		_ = v.Args[2]
   17725 		ptr := v.Args[0]
   17726 		val := v.Args[1]
   17727 		mem := v.Args[2]
   17728 		if !(t.(*types.Type).Size() == 4) {
   17729 			break
   17730 		}
   17731 		v.reset(Op386MOVLstore)
   17732 		v.AddArg(ptr)
   17733 		v.AddArg(val)
   17734 		v.AddArg(mem)
   17735 		return true
   17736 	}
   17737 	// match: (Store {t} ptr val mem)
   17738 	// cond: t.(*types.Type).Size() == 2
   17739 	// result: (MOVWstore ptr val mem)
   17740 	for {
   17741 		t := v.Aux
   17742 		_ = v.Args[2]
   17743 		ptr := v.Args[0]
   17744 		val := v.Args[1]
   17745 		mem := v.Args[2]
   17746 		if !(t.(*types.Type).Size() == 2) {
   17747 			break
   17748 		}
   17749 		v.reset(Op386MOVWstore)
   17750 		v.AddArg(ptr)
   17751 		v.AddArg(val)
   17752 		v.AddArg(mem)
   17753 		return true
   17754 	}
   17755 	// match: (Store {t} ptr val mem)
   17756 	// cond: t.(*types.Type).Size() == 1
   17757 	// result: (MOVBstore ptr val mem)
   17758 	for {
   17759 		t := v.Aux
   17760 		_ = v.Args[2]
   17761 		ptr := v.Args[0]
   17762 		val := v.Args[1]
   17763 		mem := v.Args[2]
   17764 		if !(t.(*types.Type).Size() == 1) {
   17765 			break
   17766 		}
   17767 		v.reset(Op386MOVBstore)
   17768 		v.AddArg(ptr)
   17769 		v.AddArg(val)
   17770 		v.AddArg(mem)
   17771 		return true
   17772 	}
   17773 	return false
   17774 }
   17775 func rewriteValue386_OpSub16_0(v *Value) bool {
   17776 	// match: (Sub16 x y)
   17777 	// cond:
   17778 	// result: (SUBL  x y)
   17779 	for {
   17780 		_ = v.Args[1]
   17781 		x := v.Args[0]
   17782 		y := v.Args[1]
   17783 		v.reset(Op386SUBL)
   17784 		v.AddArg(x)
   17785 		v.AddArg(y)
   17786 		return true
   17787 	}
   17788 }
   17789 func rewriteValue386_OpSub32_0(v *Value) bool {
   17790 	// match: (Sub32 x y)
   17791 	// cond:
   17792 	// result: (SUBL  x y)
   17793 	for {
   17794 		_ = v.Args[1]
   17795 		x := v.Args[0]
   17796 		y := v.Args[1]
   17797 		v.reset(Op386SUBL)
   17798 		v.AddArg(x)
   17799 		v.AddArg(y)
   17800 		return true
   17801 	}
   17802 }
   17803 func rewriteValue386_OpSub32F_0(v *Value) bool {
   17804 	// match: (Sub32F x y)
   17805 	// cond:
   17806 	// result: (SUBSS x y)
   17807 	for {
   17808 		_ = v.Args[1]
   17809 		x := v.Args[0]
   17810 		y := v.Args[1]
   17811 		v.reset(Op386SUBSS)
   17812 		v.AddArg(x)
   17813 		v.AddArg(y)
   17814 		return true
   17815 	}
   17816 }
   17817 func rewriteValue386_OpSub32carry_0(v *Value) bool {
   17818 	// match: (Sub32carry x y)
   17819 	// cond:
   17820 	// result: (SUBLcarry x y)
   17821 	for {
   17822 		_ = v.Args[1]
   17823 		x := v.Args[0]
   17824 		y := v.Args[1]
   17825 		v.reset(Op386SUBLcarry)
   17826 		v.AddArg(x)
   17827 		v.AddArg(y)
   17828 		return true
   17829 	}
   17830 }
   17831 func rewriteValue386_OpSub32withcarry_0(v *Value) bool {
   17832 	// match: (Sub32withcarry x y c)
   17833 	// cond:
   17834 	// result: (SBBL x y c)
   17835 	for {
   17836 		_ = v.Args[2]
   17837 		x := v.Args[0]
   17838 		y := v.Args[1]
   17839 		c := v.Args[2]
   17840 		v.reset(Op386SBBL)
   17841 		v.AddArg(x)
   17842 		v.AddArg(y)
   17843 		v.AddArg(c)
   17844 		return true
   17845 	}
   17846 }
   17847 func rewriteValue386_OpSub64F_0(v *Value) bool {
   17848 	// match: (Sub64F x y)
   17849 	// cond:
   17850 	// result: (SUBSD x y)
   17851 	for {
   17852 		_ = v.Args[1]
   17853 		x := v.Args[0]
   17854 		y := v.Args[1]
   17855 		v.reset(Op386SUBSD)
   17856 		v.AddArg(x)
   17857 		v.AddArg(y)
   17858 		return true
   17859 	}
   17860 }
   17861 func rewriteValue386_OpSub8_0(v *Value) bool {
   17862 	// match: (Sub8 x y)
   17863 	// cond:
   17864 	// result: (SUBL  x y)
   17865 	for {
   17866 		_ = v.Args[1]
   17867 		x := v.Args[0]
   17868 		y := v.Args[1]
   17869 		v.reset(Op386SUBL)
   17870 		v.AddArg(x)
   17871 		v.AddArg(y)
   17872 		return true
   17873 	}
   17874 }
   17875 func rewriteValue386_OpSubPtr_0(v *Value) bool {
   17876 	// match: (SubPtr x y)
   17877 	// cond:
   17878 	// result: (SUBL  x y)
   17879 	for {
   17880 		_ = v.Args[1]
   17881 		x := v.Args[0]
   17882 		y := v.Args[1]
   17883 		v.reset(Op386SUBL)
   17884 		v.AddArg(x)
   17885 		v.AddArg(y)
   17886 		return true
   17887 	}
   17888 }
   17889 func rewriteValue386_OpTrunc16to8_0(v *Value) bool {
   17890 	// match: (Trunc16to8 x)
   17891 	// cond:
   17892 	// result: x
   17893 	for {
   17894 		x := v.Args[0]
   17895 		v.reset(OpCopy)
   17896 		v.Type = x.Type
   17897 		v.AddArg(x)
   17898 		return true
   17899 	}
   17900 }
   17901 func rewriteValue386_OpTrunc32to16_0(v *Value) bool {
   17902 	// match: (Trunc32to16 x)
   17903 	// cond:
   17904 	// result: x
   17905 	for {
   17906 		x := v.Args[0]
   17907 		v.reset(OpCopy)
   17908 		v.Type = x.Type
   17909 		v.AddArg(x)
   17910 		return true
   17911 	}
   17912 }
   17913 func rewriteValue386_OpTrunc32to8_0(v *Value) bool {
   17914 	// match: (Trunc32to8 x)
   17915 	// cond:
   17916 	// result: x
   17917 	for {
   17918 		x := v.Args[0]
   17919 		v.reset(OpCopy)
   17920 		v.Type = x.Type
   17921 		v.AddArg(x)
   17922 		return true
   17923 	}
   17924 }
   17925 func rewriteValue386_OpXor16_0(v *Value) bool {
   17926 	// match: (Xor16 x y)
   17927 	// cond:
   17928 	// result: (XORL x y)
   17929 	for {
   17930 		_ = v.Args[1]
   17931 		x := v.Args[0]
   17932 		y := v.Args[1]
   17933 		v.reset(Op386XORL)
   17934 		v.AddArg(x)
   17935 		v.AddArg(y)
   17936 		return true
   17937 	}
   17938 }
   17939 func rewriteValue386_OpXor32_0(v *Value) bool {
   17940 	// match: (Xor32 x y)
   17941 	// cond:
   17942 	// result: (XORL x y)
   17943 	for {
   17944 		_ = v.Args[1]
   17945 		x := v.Args[0]
   17946 		y := v.Args[1]
   17947 		v.reset(Op386XORL)
   17948 		v.AddArg(x)
   17949 		v.AddArg(y)
   17950 		return true
   17951 	}
   17952 }
   17953 func rewriteValue386_OpXor8_0(v *Value) bool {
   17954 	// match: (Xor8 x y)
   17955 	// cond:
   17956 	// result: (XORL x y)
   17957 	for {
   17958 		_ = v.Args[1]
   17959 		x := v.Args[0]
   17960 		y := v.Args[1]
   17961 		v.reset(Op386XORL)
   17962 		v.AddArg(x)
   17963 		v.AddArg(y)
   17964 		return true
   17965 	}
   17966 }
   17967 func rewriteValue386_OpZero_0(v *Value) bool {
   17968 	b := v.Block
   17969 	_ = b
   17970 	typ := &b.Func.Config.Types
   17971 	_ = typ
   17972 	// match: (Zero [0] _ mem)
   17973 	// cond:
   17974 	// result: mem
   17975 	for {
   17976 		if v.AuxInt != 0 {
   17977 			break
   17978 		}
   17979 		_ = v.Args[1]
   17980 		mem := v.Args[1]
   17981 		v.reset(OpCopy)
   17982 		v.Type = mem.Type
   17983 		v.AddArg(mem)
   17984 		return true
   17985 	}
   17986 	// match: (Zero [1] destptr mem)
   17987 	// cond:
   17988 	// result: (MOVBstoreconst [0] destptr mem)
   17989 	for {
   17990 		if v.AuxInt != 1 {
   17991 			break
   17992 		}
   17993 		_ = v.Args[1]
   17994 		destptr := v.Args[0]
   17995 		mem := v.Args[1]
   17996 		v.reset(Op386MOVBstoreconst)
   17997 		v.AuxInt = 0
   17998 		v.AddArg(destptr)
   17999 		v.AddArg(mem)
   18000 		return true
   18001 	}
   18002 	// match: (Zero [2] destptr mem)
   18003 	// cond:
   18004 	// result: (MOVWstoreconst [0] destptr mem)
   18005 	for {
   18006 		if v.AuxInt != 2 {
   18007 			break
   18008 		}
   18009 		_ = v.Args[1]
   18010 		destptr := v.Args[0]
   18011 		mem := v.Args[1]
   18012 		v.reset(Op386MOVWstoreconst)
   18013 		v.AuxInt = 0
   18014 		v.AddArg(destptr)
   18015 		v.AddArg(mem)
   18016 		return true
   18017 	}
   18018 	// match: (Zero [4] destptr mem)
   18019 	// cond:
   18020 	// result: (MOVLstoreconst [0] destptr mem)
   18021 	for {
   18022 		if v.AuxInt != 4 {
   18023 			break
   18024 		}
   18025 		_ = v.Args[1]
   18026 		destptr := v.Args[0]
   18027 		mem := v.Args[1]
   18028 		v.reset(Op386MOVLstoreconst)
   18029 		v.AuxInt = 0
   18030 		v.AddArg(destptr)
   18031 		v.AddArg(mem)
   18032 		return true
   18033 	}
   18034 	// match: (Zero [3] destptr mem)
   18035 	// cond:
   18036 	// result: (MOVBstoreconst [makeValAndOff(0,2)] destptr 		(MOVWstoreconst [0] destptr mem))
   18037 	for {
   18038 		if v.AuxInt != 3 {
   18039 			break
   18040 		}
   18041 		_ = v.Args[1]
   18042 		destptr := v.Args[0]
   18043 		mem := v.Args[1]
   18044 		v.reset(Op386MOVBstoreconst)
   18045 		v.AuxInt = makeValAndOff(0, 2)
   18046 		v.AddArg(destptr)
   18047 		v0 := b.NewValue0(v.Pos, Op386MOVWstoreconst, types.TypeMem)
   18048 		v0.AuxInt = 0
   18049 		v0.AddArg(destptr)
   18050 		v0.AddArg(mem)
   18051 		v.AddArg(v0)
   18052 		return true
   18053 	}
   18054 	// match: (Zero [5] destptr mem)
   18055 	// cond:
   18056 	// result: (MOVBstoreconst [makeValAndOff(0,4)] destptr 		(MOVLstoreconst [0] destptr mem))
   18057 	for {
   18058 		if v.AuxInt != 5 {
   18059 			break
   18060 		}
   18061 		_ = v.Args[1]
   18062 		destptr := v.Args[0]
   18063 		mem := v.Args[1]
   18064 		v.reset(Op386MOVBstoreconst)
   18065 		v.AuxInt = makeValAndOff(0, 4)
   18066 		v.AddArg(destptr)
   18067 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18068 		v0.AuxInt = 0
   18069 		v0.AddArg(destptr)
   18070 		v0.AddArg(mem)
   18071 		v.AddArg(v0)
   18072 		return true
   18073 	}
   18074 	// match: (Zero [6] destptr mem)
   18075 	// cond:
   18076 	// result: (MOVWstoreconst [makeValAndOff(0,4)] destptr 		(MOVLstoreconst [0] destptr mem))
   18077 	for {
   18078 		if v.AuxInt != 6 {
   18079 			break
   18080 		}
   18081 		_ = v.Args[1]
   18082 		destptr := v.Args[0]
   18083 		mem := v.Args[1]
   18084 		v.reset(Op386MOVWstoreconst)
   18085 		v.AuxInt = makeValAndOff(0, 4)
   18086 		v.AddArg(destptr)
   18087 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18088 		v0.AuxInt = 0
   18089 		v0.AddArg(destptr)
   18090 		v0.AddArg(mem)
   18091 		v.AddArg(v0)
   18092 		return true
   18093 	}
   18094 	// match: (Zero [7] destptr mem)
   18095 	// cond:
   18096 	// result: (MOVLstoreconst [makeValAndOff(0,3)] destptr 		(MOVLstoreconst [0] destptr mem))
   18097 	for {
   18098 		if v.AuxInt != 7 {
   18099 			break
   18100 		}
   18101 		_ = v.Args[1]
   18102 		destptr := v.Args[0]
   18103 		mem := v.Args[1]
   18104 		v.reset(Op386MOVLstoreconst)
   18105 		v.AuxInt = makeValAndOff(0, 3)
   18106 		v.AddArg(destptr)
   18107 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18108 		v0.AuxInt = 0
   18109 		v0.AddArg(destptr)
   18110 		v0.AddArg(mem)
   18111 		v.AddArg(v0)
   18112 		return true
   18113 	}
   18114 	// match: (Zero [s] destptr mem)
   18115 	// cond: s%4 != 0 && s > 4
   18116 	// result: (Zero [s-s%4] (ADDLconst destptr [s%4]) 		(MOVLstoreconst [0] destptr mem))
   18117 	for {
   18118 		s := v.AuxInt
   18119 		_ = v.Args[1]
   18120 		destptr := v.Args[0]
   18121 		mem := v.Args[1]
   18122 		if !(s%4 != 0 && s > 4) {
   18123 			break
   18124 		}
   18125 		v.reset(OpZero)
   18126 		v.AuxInt = s - s%4
   18127 		v0 := b.NewValue0(v.Pos, Op386ADDLconst, typ.UInt32)
   18128 		v0.AuxInt = s % 4
   18129 		v0.AddArg(destptr)
   18130 		v.AddArg(v0)
   18131 		v1 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18132 		v1.AuxInt = 0
   18133 		v1.AddArg(destptr)
   18134 		v1.AddArg(mem)
   18135 		v.AddArg(v1)
   18136 		return true
   18137 	}
   18138 	// match: (Zero [8] destptr mem)
   18139 	// cond:
   18140 	// result: (MOVLstoreconst [makeValAndOff(0,4)] destptr 		(MOVLstoreconst [0] destptr mem))
   18141 	for {
   18142 		if v.AuxInt != 8 {
   18143 			break
   18144 		}
   18145 		_ = v.Args[1]
   18146 		destptr := v.Args[0]
   18147 		mem := v.Args[1]
   18148 		v.reset(Op386MOVLstoreconst)
   18149 		v.AuxInt = makeValAndOff(0, 4)
   18150 		v.AddArg(destptr)
   18151 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18152 		v0.AuxInt = 0
   18153 		v0.AddArg(destptr)
   18154 		v0.AddArg(mem)
   18155 		v.AddArg(v0)
   18156 		return true
   18157 	}
   18158 	return false
   18159 }
   18160 func rewriteValue386_OpZero_10(v *Value) bool {
   18161 	b := v.Block
   18162 	_ = b
   18163 	config := b.Func.Config
   18164 	_ = config
   18165 	typ := &b.Func.Config.Types
   18166 	_ = typ
   18167 	// match: (Zero [12] destptr mem)
   18168 	// cond:
   18169 	// result: (MOVLstoreconst [makeValAndOff(0,8)] destptr 		(MOVLstoreconst [makeValAndOff(0,4)] destptr 			(MOVLstoreconst [0] destptr mem)))
   18170 	for {
   18171 		if v.AuxInt != 12 {
   18172 			break
   18173 		}
   18174 		_ = v.Args[1]
   18175 		destptr := v.Args[0]
   18176 		mem := v.Args[1]
   18177 		v.reset(Op386MOVLstoreconst)
   18178 		v.AuxInt = makeValAndOff(0, 8)
   18179 		v.AddArg(destptr)
   18180 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18181 		v0.AuxInt = makeValAndOff(0, 4)
   18182 		v0.AddArg(destptr)
   18183 		v1 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18184 		v1.AuxInt = 0
   18185 		v1.AddArg(destptr)
   18186 		v1.AddArg(mem)
   18187 		v0.AddArg(v1)
   18188 		v.AddArg(v0)
   18189 		return true
   18190 	}
   18191 	// match: (Zero [16] destptr mem)
   18192 	// cond:
   18193 	// result: (MOVLstoreconst [makeValAndOff(0,12)] destptr 		(MOVLstoreconst [makeValAndOff(0,8)] destptr 			(MOVLstoreconst [makeValAndOff(0,4)] destptr 				(MOVLstoreconst [0] destptr mem))))
   18194 	for {
   18195 		if v.AuxInt != 16 {
   18196 			break
   18197 		}
   18198 		_ = v.Args[1]
   18199 		destptr := v.Args[0]
   18200 		mem := v.Args[1]
   18201 		v.reset(Op386MOVLstoreconst)
   18202 		v.AuxInt = makeValAndOff(0, 12)
   18203 		v.AddArg(destptr)
   18204 		v0 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18205 		v0.AuxInt = makeValAndOff(0, 8)
   18206 		v0.AddArg(destptr)
   18207 		v1 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18208 		v1.AuxInt = makeValAndOff(0, 4)
   18209 		v1.AddArg(destptr)
   18210 		v2 := b.NewValue0(v.Pos, Op386MOVLstoreconst, types.TypeMem)
   18211 		v2.AuxInt = 0
   18212 		v2.AddArg(destptr)
   18213 		v2.AddArg(mem)
   18214 		v1.AddArg(v2)
   18215 		v0.AddArg(v1)
   18216 		v.AddArg(v0)
   18217 		return true
   18218 	}
   18219 	// match: (Zero [s] destptr mem)
   18220 	// cond: s > 16 && s <= 4*128 && s%4 == 0   && !config.noDuffDevice
   18221 	// result: (DUFFZERO [1*(128-s/4)] destptr (MOVLconst [0]) mem)
   18222 	for {
   18223 		s := v.AuxInt
   18224 		_ = v.Args[1]
   18225 		destptr := v.Args[0]
   18226 		mem := v.Args[1]
   18227 		if !(s > 16 && s <= 4*128 && s%4 == 0 && !config.noDuffDevice) {
   18228 			break
   18229 		}
   18230 		v.reset(Op386DUFFZERO)
   18231 		v.AuxInt = 1 * (128 - s/4)
   18232 		v.AddArg(destptr)
   18233 		v0 := b.NewValue0(v.Pos, Op386MOVLconst, typ.UInt32)
   18234 		v0.AuxInt = 0
   18235 		v.AddArg(v0)
   18236 		v.AddArg(mem)
   18237 		return true
   18238 	}
   18239 	// match: (Zero [s] destptr mem)
   18240 	// cond: (s > 4*128 || (config.noDuffDevice && s > 16))   && s%4 == 0
   18241 	// result: (REPSTOSL destptr (MOVLconst [s/4]) (MOVLconst [0]) mem)
   18242 	for {
   18243 		s := v.AuxInt
   18244 		_ = v.Args[1]
   18245 		destptr := v.Args[0]
   18246 		mem := v.Args[1]
   18247 		if !((s > 4*128 || (config.noDuffDevice && s > 16)) && s%4 == 0) {
   18248 			break
   18249 		}
   18250 		v.reset(Op386REPSTOSL)
   18251 		v.AddArg(destptr)
   18252 		v0 := b.NewValue0(v.Pos, Op386MOVLconst, typ.UInt32)
   18253 		v0.AuxInt = s / 4
   18254 		v.AddArg(v0)
   18255 		v1 := b.NewValue0(v.Pos, Op386MOVLconst, typ.UInt32)
   18256 		v1.AuxInt = 0
   18257 		v.AddArg(v1)
   18258 		v.AddArg(mem)
   18259 		return true
   18260 	}
   18261 	return false
   18262 }
   18263 func rewriteValue386_OpZeroExt16to32_0(v *Value) bool {
   18264 	// match: (ZeroExt16to32 x)
   18265 	// cond:
   18266 	// result: (MOVWLZX x)
   18267 	for {
   18268 		x := v.Args[0]
   18269 		v.reset(Op386MOVWLZX)
   18270 		v.AddArg(x)
   18271 		return true
   18272 	}
   18273 }
   18274 func rewriteValue386_OpZeroExt8to16_0(v *Value) bool {
   18275 	// match: (ZeroExt8to16 x)
   18276 	// cond:
   18277 	// result: (MOVBLZX x)
   18278 	for {
   18279 		x := v.Args[0]
   18280 		v.reset(Op386MOVBLZX)
   18281 		v.AddArg(x)
   18282 		return true
   18283 	}
   18284 }
   18285 func rewriteValue386_OpZeroExt8to32_0(v *Value) bool {
   18286 	// match: (ZeroExt8to32 x)
   18287 	// cond:
   18288 	// result: (MOVBLZX x)
   18289 	for {
   18290 		x := v.Args[0]
   18291 		v.reset(Op386MOVBLZX)
   18292 		v.AddArg(x)
   18293 		return true
   18294 	}
   18295 }
   18296 func rewriteValue386_OpZeromask_0(v *Value) bool {
   18297 	b := v.Block
   18298 	_ = b
   18299 	// match: (Zeromask <t> x)
   18300 	// cond:
   18301 	// result: (XORLconst [-1] (SBBLcarrymask <t> (CMPLconst x [1])))
   18302 	for {
   18303 		t := v.Type
   18304 		x := v.Args[0]
   18305 		v.reset(Op386XORLconst)
   18306 		v.AuxInt = -1
   18307 		v0 := b.NewValue0(v.Pos, Op386SBBLcarrymask, t)
   18308 		v1 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags)
   18309 		v1.AuxInt = 1
   18310 		v1.AddArg(x)
   18311 		v0.AddArg(v1)
   18312 		v.AddArg(v0)
   18313 		return true
   18314 	}
   18315 }
   18316 func rewriteBlock386(b *Block) bool {
   18317 	config := b.Func.Config
   18318 	_ = config
   18319 	fe := b.Func.fe
   18320 	_ = fe
   18321 	typ := &config.Types
   18322 	_ = typ
   18323 	switch b.Kind {
   18324 	case Block386EQ:
   18325 		// match: (EQ (InvertFlags cmp) yes no)
   18326 		// cond:
   18327 		// result: (EQ cmp yes no)
   18328 		for {
   18329 			v := b.Control
   18330 			if v.Op != Op386InvertFlags {
   18331 				break
   18332 			}
   18333 			cmp := v.Args[0]
   18334 			b.Kind = Block386EQ
   18335 			b.SetControl(cmp)
   18336 			b.Aux = nil
   18337 			return true
   18338 		}
   18339 		// match: (EQ (FlagEQ) yes no)
   18340 		// cond:
   18341 		// result: (First nil yes no)
   18342 		for {
   18343 			v := b.Control
   18344 			if v.Op != Op386FlagEQ {
   18345 				break
   18346 			}
   18347 			b.Kind = BlockFirst
   18348 			b.SetControl(nil)
   18349 			b.Aux = nil
   18350 			return true
   18351 		}
   18352 		// match: (EQ (FlagLT_ULT) yes no)
   18353 		// cond:
   18354 		// result: (First nil no yes)
   18355 		for {
   18356 			v := b.Control
   18357 			if v.Op != Op386FlagLT_ULT {
   18358 				break
   18359 			}
   18360 			b.Kind = BlockFirst
   18361 			b.SetControl(nil)
   18362 			b.Aux = nil
   18363 			b.swapSuccessors()
   18364 			return true
   18365 		}
   18366 		// match: (EQ (FlagLT_UGT) yes no)
   18367 		// cond:
   18368 		// result: (First nil no yes)
   18369 		for {
   18370 			v := b.Control
   18371 			if v.Op != Op386FlagLT_UGT {
   18372 				break
   18373 			}
   18374 			b.Kind = BlockFirst
   18375 			b.SetControl(nil)
   18376 			b.Aux = nil
   18377 			b.swapSuccessors()
   18378 			return true
   18379 		}
   18380 		// match: (EQ (FlagGT_ULT) yes no)
   18381 		// cond:
   18382 		// result: (First nil no yes)
   18383 		for {
   18384 			v := b.Control
   18385 			if v.Op != Op386FlagGT_ULT {
   18386 				break
   18387 			}
   18388 			b.Kind = BlockFirst
   18389 			b.SetControl(nil)
   18390 			b.Aux = nil
   18391 			b.swapSuccessors()
   18392 			return true
   18393 		}
   18394 		// match: (EQ (FlagGT_UGT) yes no)
   18395 		// cond:
   18396 		// result: (First nil no yes)
   18397 		for {
   18398 			v := b.Control
   18399 			if v.Op != Op386FlagGT_UGT {
   18400 				break
   18401 			}
   18402 			b.Kind = BlockFirst
   18403 			b.SetControl(nil)
   18404 			b.Aux = nil
   18405 			b.swapSuccessors()
   18406 			return true
   18407 		}
   18408 	case Block386GE:
   18409 		// match: (GE (InvertFlags cmp) yes no)
   18410 		// cond:
   18411 		// result: (LE cmp yes no)
   18412 		for {
   18413 			v := b.Control
   18414 			if v.Op != Op386InvertFlags {
   18415 				break
   18416 			}
   18417 			cmp := v.Args[0]
   18418 			b.Kind = Block386LE
   18419 			b.SetControl(cmp)
   18420 			b.Aux = nil
   18421 			return true
   18422 		}
   18423 		// match: (GE (FlagEQ) yes no)
   18424 		// cond:
   18425 		// result: (First nil yes no)
   18426 		for {
   18427 			v := b.Control
   18428 			if v.Op != Op386FlagEQ {
   18429 				break
   18430 			}
   18431 			b.Kind = BlockFirst
   18432 			b.SetControl(nil)
   18433 			b.Aux = nil
   18434 			return true
   18435 		}
   18436 		// match: (GE (FlagLT_ULT) yes no)
   18437 		// cond:
   18438 		// result: (First nil no yes)
   18439 		for {
   18440 			v := b.Control
   18441 			if v.Op != Op386FlagLT_ULT {
   18442 				break
   18443 			}
   18444 			b.Kind = BlockFirst
   18445 			b.SetControl(nil)
   18446 			b.Aux = nil
   18447 			b.swapSuccessors()
   18448 			return true
   18449 		}
   18450 		// match: (GE (FlagLT_UGT) yes no)
   18451 		// cond:
   18452 		// result: (First nil no yes)
   18453 		for {
   18454 			v := b.Control
   18455 			if v.Op != Op386FlagLT_UGT {
   18456 				break
   18457 			}
   18458 			b.Kind = BlockFirst
   18459 			b.SetControl(nil)
   18460 			b.Aux = nil
   18461 			b.swapSuccessors()
   18462 			return true
   18463 		}
   18464 		// match: (GE (FlagGT_ULT) yes no)
   18465 		// cond:
   18466 		// result: (First nil yes no)
   18467 		for {
   18468 			v := b.Control
   18469 			if v.Op != Op386FlagGT_ULT {
   18470 				break
   18471 			}
   18472 			b.Kind = BlockFirst
   18473 			b.SetControl(nil)
   18474 			b.Aux = nil
   18475 			return true
   18476 		}
   18477 		// match: (GE (FlagGT_UGT) yes no)
   18478 		// cond:
   18479 		// result: (First nil yes no)
   18480 		for {
   18481 			v := b.Control
   18482 			if v.Op != Op386FlagGT_UGT {
   18483 				break
   18484 			}
   18485 			b.Kind = BlockFirst
   18486 			b.SetControl(nil)
   18487 			b.Aux = nil
   18488 			return true
   18489 		}
   18490 	case Block386GT:
   18491 		// match: (GT (InvertFlags cmp) yes no)
   18492 		// cond:
   18493 		// result: (LT cmp yes no)
   18494 		for {
   18495 			v := b.Control
   18496 			if v.Op != Op386InvertFlags {
   18497 				break
   18498 			}
   18499 			cmp := v.Args[0]
   18500 			b.Kind = Block386LT
   18501 			b.SetControl(cmp)
   18502 			b.Aux = nil
   18503 			return true
   18504 		}
   18505 		// match: (GT (FlagEQ) yes no)
   18506 		// cond:
   18507 		// result: (First nil no yes)
   18508 		for {
   18509 			v := b.Control
   18510 			if v.Op != Op386FlagEQ {
   18511 				break
   18512 			}
   18513 			b.Kind = BlockFirst
   18514 			b.SetControl(nil)
   18515 			b.Aux = nil
   18516 			b.swapSuccessors()
   18517 			return true
   18518 		}
   18519 		// match: (GT (FlagLT_ULT) yes no)
   18520 		// cond:
   18521 		// result: (First nil no yes)
   18522 		for {
   18523 			v := b.Control
   18524 			if v.Op != Op386FlagLT_ULT {
   18525 				break
   18526 			}
   18527 			b.Kind = BlockFirst
   18528 			b.SetControl(nil)
   18529 			b.Aux = nil
   18530 			b.swapSuccessors()
   18531 			return true
   18532 		}
   18533 		// match: (GT (FlagLT_UGT) yes no)
   18534 		// cond:
   18535 		// result: (First nil no yes)
   18536 		for {
   18537 			v := b.Control
   18538 			if v.Op != Op386FlagLT_UGT {
   18539 				break
   18540 			}
   18541 			b.Kind = BlockFirst
   18542 			b.SetControl(nil)
   18543 			b.Aux = nil
   18544 			b.swapSuccessors()
   18545 			return true
   18546 		}
   18547 		// match: (GT (FlagGT_ULT) yes no)
   18548 		// cond:
   18549 		// result: (First nil yes no)
   18550 		for {
   18551 			v := b.Control
   18552 			if v.Op != Op386FlagGT_ULT {
   18553 				break
   18554 			}
   18555 			b.Kind = BlockFirst
   18556 			b.SetControl(nil)
   18557 			b.Aux = nil
   18558 			return true
   18559 		}
   18560 		// match: (GT (FlagGT_UGT) yes no)
   18561 		// cond:
   18562 		// result: (First nil yes no)
   18563 		for {
   18564 			v := b.Control
   18565 			if v.Op != Op386FlagGT_UGT {
   18566 				break
   18567 			}
   18568 			b.Kind = BlockFirst
   18569 			b.SetControl(nil)
   18570 			b.Aux = nil
   18571 			return true
   18572 		}
   18573 	case BlockIf:
   18574 		// match: (If (SETL cmp) yes no)
   18575 		// cond:
   18576 		// result: (LT  cmp yes no)
   18577 		for {
   18578 			v := b.Control
   18579 			if v.Op != Op386SETL {
   18580 				break
   18581 			}
   18582 			cmp := v.Args[0]
   18583 			b.Kind = Block386LT
   18584 			b.SetControl(cmp)
   18585 			b.Aux = nil
   18586 			return true
   18587 		}
   18588 		// match: (If (SETLE cmp) yes no)
   18589 		// cond:
   18590 		// result: (LE  cmp yes no)
   18591 		for {
   18592 			v := b.Control
   18593 			if v.Op != Op386SETLE {
   18594 				break
   18595 			}
   18596 			cmp := v.Args[0]
   18597 			b.Kind = Block386LE
   18598 			b.SetControl(cmp)
   18599 			b.Aux = nil
   18600 			return true
   18601 		}
   18602 		// match: (If (SETG cmp) yes no)
   18603 		// cond:
   18604 		// result: (GT  cmp yes no)
   18605 		for {
   18606 			v := b.Control
   18607 			if v.Op != Op386SETG {
   18608 				break
   18609 			}
   18610 			cmp := v.Args[0]
   18611 			b.Kind = Block386GT
   18612 			b.SetControl(cmp)
   18613 			b.Aux = nil
   18614 			return true
   18615 		}
   18616 		// match: (If (SETGE cmp) yes no)
   18617 		// cond:
   18618 		// result: (GE  cmp yes no)
   18619 		for {
   18620 			v := b.Control
   18621 			if v.Op != Op386SETGE {
   18622 				break
   18623 			}
   18624 			cmp := v.Args[0]
   18625 			b.Kind = Block386GE
   18626 			b.SetControl(cmp)
   18627 			b.Aux = nil
   18628 			return true
   18629 		}
   18630 		// match: (If (SETEQ cmp) yes no)
   18631 		// cond:
   18632 		// result: (EQ  cmp yes no)
   18633 		for {
   18634 			v := b.Control
   18635 			if v.Op != Op386SETEQ {
   18636 				break
   18637 			}
   18638 			cmp := v.Args[0]
   18639 			b.Kind = Block386EQ
   18640 			b.SetControl(cmp)
   18641 			b.Aux = nil
   18642 			return true
   18643 		}
   18644 		// match: (If (SETNE cmp) yes no)
   18645 		// cond:
   18646 		// result: (NE  cmp yes no)
   18647 		for {
   18648 			v := b.Control
   18649 			if v.Op != Op386SETNE {
   18650 				break
   18651 			}
   18652 			cmp := v.Args[0]
   18653 			b.Kind = Block386NE
   18654 			b.SetControl(cmp)
   18655 			b.Aux = nil
   18656 			return true
   18657 		}
   18658 		// match: (If (SETB cmp) yes no)
   18659 		// cond:
   18660 		// result: (ULT cmp yes no)
   18661 		for {
   18662 			v := b.Control
   18663 			if v.Op != Op386SETB {
   18664 				break
   18665 			}
   18666 			cmp := v.Args[0]
   18667 			b.Kind = Block386ULT
   18668 			b.SetControl(cmp)
   18669 			b.Aux = nil
   18670 			return true
   18671 		}
   18672 		// match: (If (SETBE cmp) yes no)
   18673 		// cond:
   18674 		// result: (ULE cmp yes no)
   18675 		for {
   18676 			v := b.Control
   18677 			if v.Op != Op386SETBE {
   18678 				break
   18679 			}
   18680 			cmp := v.Args[0]
   18681 			b.Kind = Block386ULE
   18682 			b.SetControl(cmp)
   18683 			b.Aux = nil
   18684 			return true
   18685 		}
   18686 		// match: (If (SETA cmp) yes no)
   18687 		// cond:
   18688 		// result: (UGT cmp yes no)
   18689 		for {
   18690 			v := b.Control
   18691 			if v.Op != Op386SETA {
   18692 				break
   18693 			}
   18694 			cmp := v.Args[0]
   18695 			b.Kind = Block386UGT
   18696 			b.SetControl(cmp)
   18697 			b.Aux = nil
   18698 			return true
   18699 		}
   18700 		// match: (If (SETAE cmp) yes no)
   18701 		// cond:
   18702 		// result: (UGE cmp yes no)
   18703 		for {
   18704 			v := b.Control
   18705 			if v.Op != Op386SETAE {
   18706 				break
   18707 			}
   18708 			cmp := v.Args[0]
   18709 			b.Kind = Block386UGE
   18710 			b.SetControl(cmp)
   18711 			b.Aux = nil
   18712 			return true
   18713 		}
   18714 		// match: (If (SETGF cmp) yes no)
   18715 		// cond:
   18716 		// result: (UGT  cmp yes no)
   18717 		for {
   18718 			v := b.Control
   18719 			if v.Op != Op386SETGF {
   18720 				break
   18721 			}
   18722 			cmp := v.Args[0]
   18723 			b.Kind = Block386UGT
   18724 			b.SetControl(cmp)
   18725 			b.Aux = nil
   18726 			return true
   18727 		}
   18728 		// match: (If (SETGEF cmp) yes no)
   18729 		// cond:
   18730 		// result: (UGE  cmp yes no)
   18731 		for {
   18732 			v := b.Control
   18733 			if v.Op != Op386SETGEF {
   18734 				break
   18735 			}
   18736 			cmp := v.Args[0]
   18737 			b.Kind = Block386UGE
   18738 			b.SetControl(cmp)
   18739 			b.Aux = nil
   18740 			return true
   18741 		}
   18742 		// match: (If (SETEQF cmp) yes no)
   18743 		// cond:
   18744 		// result: (EQF  cmp yes no)
   18745 		for {
   18746 			v := b.Control
   18747 			if v.Op != Op386SETEQF {
   18748 				break
   18749 			}
   18750 			cmp := v.Args[0]
   18751 			b.Kind = Block386EQF
   18752 			b.SetControl(cmp)
   18753 			b.Aux = nil
   18754 			return true
   18755 		}
   18756 		// match: (If (SETNEF cmp) yes no)
   18757 		// cond:
   18758 		// result: (NEF  cmp yes no)
   18759 		for {
   18760 			v := b.Control
   18761 			if v.Op != Op386SETNEF {
   18762 				break
   18763 			}
   18764 			cmp := v.Args[0]
   18765 			b.Kind = Block386NEF
   18766 			b.SetControl(cmp)
   18767 			b.Aux = nil
   18768 			return true
   18769 		}
   18770 		// match: (If cond yes no)
   18771 		// cond:
   18772 		// result: (NE (TESTB cond cond) yes no)
   18773 		for {
   18774 			v := b.Control
   18775 			_ = v
   18776 			cond := b.Control
   18777 			b.Kind = Block386NE
   18778 			v0 := b.NewValue0(v.Pos, Op386TESTB, types.TypeFlags)
   18779 			v0.AddArg(cond)
   18780 			v0.AddArg(cond)
   18781 			b.SetControl(v0)
   18782 			b.Aux = nil
   18783 			return true
   18784 		}
   18785 	case Block386LE:
   18786 		// match: (LE (InvertFlags cmp) yes no)
   18787 		// cond:
   18788 		// result: (GE cmp yes no)
   18789 		for {
   18790 			v := b.Control
   18791 			if v.Op != Op386InvertFlags {
   18792 				break
   18793 			}
   18794 			cmp := v.Args[0]
   18795 			b.Kind = Block386GE
   18796 			b.SetControl(cmp)
   18797 			b.Aux = nil
   18798 			return true
   18799 		}
   18800 		// match: (LE (FlagEQ) yes no)
   18801 		// cond:
   18802 		// result: (First nil yes no)
   18803 		for {
   18804 			v := b.Control
   18805 			if v.Op != Op386FlagEQ {
   18806 				break
   18807 			}
   18808 			b.Kind = BlockFirst
   18809 			b.SetControl(nil)
   18810 			b.Aux = nil
   18811 			return true
   18812 		}
   18813 		// match: (LE (FlagLT_ULT) yes no)
   18814 		// cond:
   18815 		// result: (First nil yes no)
   18816 		for {
   18817 			v := b.Control
   18818 			if v.Op != Op386FlagLT_ULT {
   18819 				break
   18820 			}
   18821 			b.Kind = BlockFirst
   18822 			b.SetControl(nil)
   18823 			b.Aux = nil
   18824 			return true
   18825 		}
   18826 		// match: (LE (FlagLT_UGT) yes no)
   18827 		// cond:
   18828 		// result: (First nil yes no)
   18829 		for {
   18830 			v := b.Control
   18831 			if v.Op != Op386FlagLT_UGT {
   18832 				break
   18833 			}
   18834 			b.Kind = BlockFirst
   18835 			b.SetControl(nil)
   18836 			b.Aux = nil
   18837 			return true
   18838 		}
   18839 		// match: (LE (FlagGT_ULT) yes no)
   18840 		// cond:
   18841 		// result: (First nil no yes)
   18842 		for {
   18843 			v := b.Control
   18844 			if v.Op != Op386FlagGT_ULT {
   18845 				break
   18846 			}
   18847 			b.Kind = BlockFirst
   18848 			b.SetControl(nil)
   18849 			b.Aux = nil
   18850 			b.swapSuccessors()
   18851 			return true
   18852 		}
   18853 		// match: (LE (FlagGT_UGT) yes no)
   18854 		// cond:
   18855 		// result: (First nil no yes)
   18856 		for {
   18857 			v := b.Control
   18858 			if v.Op != Op386FlagGT_UGT {
   18859 				break
   18860 			}
   18861 			b.Kind = BlockFirst
   18862 			b.SetControl(nil)
   18863 			b.Aux = nil
   18864 			b.swapSuccessors()
   18865 			return true
   18866 		}
   18867 	case Block386LT:
   18868 		// match: (LT (InvertFlags cmp) yes no)
   18869 		// cond:
   18870 		// result: (GT cmp yes no)
   18871 		for {
   18872 			v := b.Control
   18873 			if v.Op != Op386InvertFlags {
   18874 				break
   18875 			}
   18876 			cmp := v.Args[0]
   18877 			b.Kind = Block386GT
   18878 			b.SetControl(cmp)
   18879 			b.Aux = nil
   18880 			return true
   18881 		}
   18882 		// match: (LT (FlagEQ) yes no)
   18883 		// cond:
   18884 		// result: (First nil no yes)
   18885 		for {
   18886 			v := b.Control
   18887 			if v.Op != Op386FlagEQ {
   18888 				break
   18889 			}
   18890 			b.Kind = BlockFirst
   18891 			b.SetControl(nil)
   18892 			b.Aux = nil
   18893 			b.swapSuccessors()
   18894 			return true
   18895 		}
   18896 		// match: (LT (FlagLT_ULT) yes no)
   18897 		// cond:
   18898 		// result: (First nil yes no)
   18899 		for {
   18900 			v := b.Control
   18901 			if v.Op != Op386FlagLT_ULT {
   18902 				break
   18903 			}
   18904 			b.Kind = BlockFirst
   18905 			b.SetControl(nil)
   18906 			b.Aux = nil
   18907 			return true
   18908 		}
   18909 		// match: (LT (FlagLT_UGT) yes no)
   18910 		// cond:
   18911 		// result: (First nil yes no)
   18912 		for {
   18913 			v := b.Control
   18914 			if v.Op != Op386FlagLT_UGT {
   18915 				break
   18916 			}
   18917 			b.Kind = BlockFirst
   18918 			b.SetControl(nil)
   18919 			b.Aux = nil
   18920 			return true
   18921 		}
   18922 		// match: (LT (FlagGT_ULT) yes no)
   18923 		// cond:
   18924 		// result: (First nil no yes)
   18925 		for {
   18926 			v := b.Control
   18927 			if v.Op != Op386FlagGT_ULT {
   18928 				break
   18929 			}
   18930 			b.Kind = BlockFirst
   18931 			b.SetControl(nil)
   18932 			b.Aux = nil
   18933 			b.swapSuccessors()
   18934 			return true
   18935 		}
   18936 		// match: (LT (FlagGT_UGT) yes no)
   18937 		// cond:
   18938 		// result: (First nil no yes)
   18939 		for {
   18940 			v := b.Control
   18941 			if v.Op != Op386FlagGT_UGT {
   18942 				break
   18943 			}
   18944 			b.Kind = BlockFirst
   18945 			b.SetControl(nil)
   18946 			b.Aux = nil
   18947 			b.swapSuccessors()
   18948 			return true
   18949 		}
   18950 	case Block386NE:
   18951 		// match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no)
   18952 		// cond:
   18953 		// result: (LT  cmp yes no)
   18954 		for {
   18955 			v := b.Control
   18956 			if v.Op != Op386TESTB {
   18957 				break
   18958 			}
   18959 			_ = v.Args[1]
   18960 			v_0 := v.Args[0]
   18961 			if v_0.Op != Op386SETL {
   18962 				break
   18963 			}
   18964 			cmp := v_0.Args[0]
   18965 			v_1 := v.Args[1]
   18966 			if v_1.Op != Op386SETL {
   18967 				break
   18968 			}
   18969 			if cmp != v_1.Args[0] {
   18970 				break
   18971 			}
   18972 			b.Kind = Block386LT
   18973 			b.SetControl(cmp)
   18974 			b.Aux = nil
   18975 			return true
   18976 		}
   18977 		// match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no)
   18978 		// cond:
   18979 		// result: (LT  cmp yes no)
   18980 		for {
   18981 			v := b.Control
   18982 			if v.Op != Op386TESTB {
   18983 				break
   18984 			}
   18985 			_ = v.Args[1]
   18986 			v_0 := v.Args[0]
   18987 			if v_0.Op != Op386SETL {
   18988 				break
   18989 			}
   18990 			cmp := v_0.Args[0]
   18991 			v_1 := v.Args[1]
   18992 			if v_1.Op != Op386SETL {
   18993 				break
   18994 			}
   18995 			if cmp != v_1.Args[0] {
   18996 				break
   18997 			}
   18998 			b.Kind = Block386LT
   18999 			b.SetControl(cmp)
   19000 			b.Aux = nil
   19001 			return true
   19002 		}
   19003 		// match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no)
   19004 		// cond:
   19005 		// result: (LE  cmp yes no)
   19006 		for {
   19007 			v := b.Control
   19008 			if v.Op != Op386TESTB {
   19009 				break
   19010 			}
   19011 			_ = v.Args[1]
   19012 			v_0 := v.Args[0]
   19013 			if v_0.Op != Op386SETLE {
   19014 				break
   19015 			}
   19016 			cmp := v_0.Args[0]
   19017 			v_1 := v.Args[1]
   19018 			if v_1.Op != Op386SETLE {
   19019 				break
   19020 			}
   19021 			if cmp != v_1.Args[0] {
   19022 				break
   19023 			}
   19024 			b.Kind = Block386LE
   19025 			b.SetControl(cmp)
   19026 			b.Aux = nil
   19027 			return true
   19028 		}
   19029 		// match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no)
   19030 		// cond:
   19031 		// result: (LE  cmp yes no)
   19032 		for {
   19033 			v := b.Control
   19034 			if v.Op != Op386TESTB {
   19035 				break
   19036 			}
   19037 			_ = v.Args[1]
   19038 			v_0 := v.Args[0]
   19039 			if v_0.Op != Op386SETLE {
   19040 				break
   19041 			}
   19042 			cmp := v_0.Args[0]
   19043 			v_1 := v.Args[1]
   19044 			if v_1.Op != Op386SETLE {
   19045 				break
   19046 			}
   19047 			if cmp != v_1.Args[0] {
   19048 				break
   19049 			}
   19050 			b.Kind = Block386LE
   19051 			b.SetControl(cmp)
   19052 			b.Aux = nil
   19053 			return true
   19054 		}
   19055 		// match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no)
   19056 		// cond:
   19057 		// result: (GT  cmp yes no)
   19058 		for {
   19059 			v := b.Control
   19060 			if v.Op != Op386TESTB {
   19061 				break
   19062 			}
   19063 			_ = v.Args[1]
   19064 			v_0 := v.Args[0]
   19065 			if v_0.Op != Op386SETG {
   19066 				break
   19067 			}
   19068 			cmp := v_0.Args[0]
   19069 			v_1 := v.Args[1]
   19070 			if v_1.Op != Op386SETG {
   19071 				break
   19072 			}
   19073 			if cmp != v_1.Args[0] {
   19074 				break
   19075 			}
   19076 			b.Kind = Block386GT
   19077 			b.SetControl(cmp)
   19078 			b.Aux = nil
   19079 			return true
   19080 		}
   19081 		// match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no)
   19082 		// cond:
   19083 		// result: (GT  cmp yes no)
   19084 		for {
   19085 			v := b.Control
   19086 			if v.Op != Op386TESTB {
   19087 				break
   19088 			}
   19089 			_ = v.Args[1]
   19090 			v_0 := v.Args[0]
   19091 			if v_0.Op != Op386SETG {
   19092 				break
   19093 			}
   19094 			cmp := v_0.Args[0]
   19095 			v_1 := v.Args[1]
   19096 			if v_1.Op != Op386SETG {
   19097 				break
   19098 			}
   19099 			if cmp != v_1.Args[0] {
   19100 				break
   19101 			}
   19102 			b.Kind = Block386GT
   19103 			b.SetControl(cmp)
   19104 			b.Aux = nil
   19105 			return true
   19106 		}
   19107 		// match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no)
   19108 		// cond:
   19109 		// result: (GE  cmp yes no)
   19110 		for {
   19111 			v := b.Control
   19112 			if v.Op != Op386TESTB {
   19113 				break
   19114 			}
   19115 			_ = v.Args[1]
   19116 			v_0 := v.Args[0]
   19117 			if v_0.Op != Op386SETGE {
   19118 				break
   19119 			}
   19120 			cmp := v_0.Args[0]
   19121 			v_1 := v.Args[1]
   19122 			if v_1.Op != Op386SETGE {
   19123 				break
   19124 			}
   19125 			if cmp != v_1.Args[0] {
   19126 				break
   19127 			}
   19128 			b.Kind = Block386GE
   19129 			b.SetControl(cmp)
   19130 			b.Aux = nil
   19131 			return true
   19132 		}
   19133 		// match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no)
   19134 		// cond:
   19135 		// result: (GE  cmp yes no)
   19136 		for {
   19137 			v := b.Control
   19138 			if v.Op != Op386TESTB {
   19139 				break
   19140 			}
   19141 			_ = v.Args[1]
   19142 			v_0 := v.Args[0]
   19143 			if v_0.Op != Op386SETGE {
   19144 				break
   19145 			}
   19146 			cmp := v_0.Args[0]
   19147 			v_1 := v.Args[1]
   19148 			if v_1.Op != Op386SETGE {
   19149 				break
   19150 			}
   19151 			if cmp != v_1.Args[0] {
   19152 				break
   19153 			}
   19154 			b.Kind = Block386GE
   19155 			b.SetControl(cmp)
   19156 			b.Aux = nil
   19157 			return true
   19158 		}
   19159 		// match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no)
   19160 		// cond:
   19161 		// result: (EQ  cmp yes no)
   19162 		for {
   19163 			v := b.Control
   19164 			if v.Op != Op386TESTB {
   19165 				break
   19166 			}
   19167 			_ = v.Args[1]
   19168 			v_0 := v.Args[0]
   19169 			if v_0.Op != Op386SETEQ {
   19170 				break
   19171 			}
   19172 			cmp := v_0.Args[0]
   19173 			v_1 := v.Args[1]
   19174 			if v_1.Op != Op386SETEQ {
   19175 				break
   19176 			}
   19177 			if cmp != v_1.Args[0] {
   19178 				break
   19179 			}
   19180 			b.Kind = Block386EQ
   19181 			b.SetControl(cmp)
   19182 			b.Aux = nil
   19183 			return true
   19184 		}
   19185 		// match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no)
   19186 		// cond:
   19187 		// result: (EQ  cmp yes no)
   19188 		for {
   19189 			v := b.Control
   19190 			if v.Op != Op386TESTB {
   19191 				break
   19192 			}
   19193 			_ = v.Args[1]
   19194 			v_0 := v.Args[0]
   19195 			if v_0.Op != Op386SETEQ {
   19196 				break
   19197 			}
   19198 			cmp := v_0.Args[0]
   19199 			v_1 := v.Args[1]
   19200 			if v_1.Op != Op386SETEQ {
   19201 				break
   19202 			}
   19203 			if cmp != v_1.Args[0] {
   19204 				break
   19205 			}
   19206 			b.Kind = Block386EQ
   19207 			b.SetControl(cmp)
   19208 			b.Aux = nil
   19209 			return true
   19210 		}
   19211 		// match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no)
   19212 		// cond:
   19213 		// result: (NE  cmp yes no)
   19214 		for {
   19215 			v := b.Control
   19216 			if v.Op != Op386TESTB {
   19217 				break
   19218 			}
   19219 			_ = v.Args[1]
   19220 			v_0 := v.Args[0]
   19221 			if v_0.Op != Op386SETNE {
   19222 				break
   19223 			}
   19224 			cmp := v_0.Args[0]
   19225 			v_1 := v.Args[1]
   19226 			if v_1.Op != Op386SETNE {
   19227 				break
   19228 			}
   19229 			if cmp != v_1.Args[0] {
   19230 				break
   19231 			}
   19232 			b.Kind = Block386NE
   19233 			b.SetControl(cmp)
   19234 			b.Aux = nil
   19235 			return true
   19236 		}
   19237 		// match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no)
   19238 		// cond:
   19239 		// result: (NE  cmp yes no)
   19240 		for {
   19241 			v := b.Control
   19242 			if v.Op != Op386TESTB {
   19243 				break
   19244 			}
   19245 			_ = v.Args[1]
   19246 			v_0 := v.Args[0]
   19247 			if v_0.Op != Op386SETNE {
   19248 				break
   19249 			}
   19250 			cmp := v_0.Args[0]
   19251 			v_1 := v.Args[1]
   19252 			if v_1.Op != Op386SETNE {
   19253 				break
   19254 			}
   19255 			if cmp != v_1.Args[0] {
   19256 				break
   19257 			}
   19258 			b.Kind = Block386NE
   19259 			b.SetControl(cmp)
   19260 			b.Aux = nil
   19261 			return true
   19262 		}
   19263 		// match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no)
   19264 		// cond:
   19265 		// result: (ULT cmp yes no)
   19266 		for {
   19267 			v := b.Control
   19268 			if v.Op != Op386TESTB {
   19269 				break
   19270 			}
   19271 			_ = v.Args[1]
   19272 			v_0 := v.Args[0]
   19273 			if v_0.Op != Op386SETB {
   19274 				break
   19275 			}
   19276 			cmp := v_0.Args[0]
   19277 			v_1 := v.Args[1]
   19278 			if v_1.Op != Op386SETB {
   19279 				break
   19280 			}
   19281 			if cmp != v_1.Args[0] {
   19282 				break
   19283 			}
   19284 			b.Kind = Block386ULT
   19285 			b.SetControl(cmp)
   19286 			b.Aux = nil
   19287 			return true
   19288 		}
   19289 		// match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no)
   19290 		// cond:
   19291 		// result: (ULT cmp yes no)
   19292 		for {
   19293 			v := b.Control
   19294 			if v.Op != Op386TESTB {
   19295 				break
   19296 			}
   19297 			_ = v.Args[1]
   19298 			v_0 := v.Args[0]
   19299 			if v_0.Op != Op386SETB {
   19300 				break
   19301 			}
   19302 			cmp := v_0.Args[0]
   19303 			v_1 := v.Args[1]
   19304 			if v_1.Op != Op386SETB {
   19305 				break
   19306 			}
   19307 			if cmp != v_1.Args[0] {
   19308 				break
   19309 			}
   19310 			b.Kind = Block386ULT
   19311 			b.SetControl(cmp)
   19312 			b.Aux = nil
   19313 			return true
   19314 		}
   19315 		// match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no)
   19316 		// cond:
   19317 		// result: (ULE cmp yes no)
   19318 		for {
   19319 			v := b.Control
   19320 			if v.Op != Op386TESTB {
   19321 				break
   19322 			}
   19323 			_ = v.Args[1]
   19324 			v_0 := v.Args[0]
   19325 			if v_0.Op != Op386SETBE {
   19326 				break
   19327 			}
   19328 			cmp := v_0.Args[0]
   19329 			v_1 := v.Args[1]
   19330 			if v_1.Op != Op386SETBE {
   19331 				break
   19332 			}
   19333 			if cmp != v_1.Args[0] {
   19334 				break
   19335 			}
   19336 			b.Kind = Block386ULE
   19337 			b.SetControl(cmp)
   19338 			b.Aux = nil
   19339 			return true
   19340 		}
   19341 		// match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no)
   19342 		// cond:
   19343 		// result: (ULE cmp yes no)
   19344 		for {
   19345 			v := b.Control
   19346 			if v.Op != Op386TESTB {
   19347 				break
   19348 			}
   19349 			_ = v.Args[1]
   19350 			v_0 := v.Args[0]
   19351 			if v_0.Op != Op386SETBE {
   19352 				break
   19353 			}
   19354 			cmp := v_0.Args[0]
   19355 			v_1 := v.Args[1]
   19356 			if v_1.Op != Op386SETBE {
   19357 				break
   19358 			}
   19359 			if cmp != v_1.Args[0] {
   19360 				break
   19361 			}
   19362 			b.Kind = Block386ULE
   19363 			b.SetControl(cmp)
   19364 			b.Aux = nil
   19365 			return true
   19366 		}
   19367 		// match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no)
   19368 		// cond:
   19369 		// result: (UGT cmp yes no)
   19370 		for {
   19371 			v := b.Control
   19372 			if v.Op != Op386TESTB {
   19373 				break
   19374 			}
   19375 			_ = v.Args[1]
   19376 			v_0 := v.Args[0]
   19377 			if v_0.Op != Op386SETA {
   19378 				break
   19379 			}
   19380 			cmp := v_0.Args[0]
   19381 			v_1 := v.Args[1]
   19382 			if v_1.Op != Op386SETA {
   19383 				break
   19384 			}
   19385 			if cmp != v_1.Args[0] {
   19386 				break
   19387 			}
   19388 			b.Kind = Block386UGT
   19389 			b.SetControl(cmp)
   19390 			b.Aux = nil
   19391 			return true
   19392 		}
   19393 		// match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no)
   19394 		// cond:
   19395 		// result: (UGT cmp yes no)
   19396 		for {
   19397 			v := b.Control
   19398 			if v.Op != Op386TESTB {
   19399 				break
   19400 			}
   19401 			_ = v.Args[1]
   19402 			v_0 := v.Args[0]
   19403 			if v_0.Op != Op386SETA {
   19404 				break
   19405 			}
   19406 			cmp := v_0.Args[0]
   19407 			v_1 := v.Args[1]
   19408 			if v_1.Op != Op386SETA {
   19409 				break
   19410 			}
   19411 			if cmp != v_1.Args[0] {
   19412 				break
   19413 			}
   19414 			b.Kind = Block386UGT
   19415 			b.SetControl(cmp)
   19416 			b.Aux = nil
   19417 			return true
   19418 		}
   19419 		// match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no)
   19420 		// cond:
   19421 		// result: (UGE cmp yes no)
   19422 		for {
   19423 			v := b.Control
   19424 			if v.Op != Op386TESTB {
   19425 				break
   19426 			}
   19427 			_ = v.Args[1]
   19428 			v_0 := v.Args[0]
   19429 			if v_0.Op != Op386SETAE {
   19430 				break
   19431 			}
   19432 			cmp := v_0.Args[0]
   19433 			v_1 := v.Args[1]
   19434 			if v_1.Op != Op386SETAE {
   19435 				break
   19436 			}
   19437 			if cmp != v_1.Args[0] {
   19438 				break
   19439 			}
   19440 			b.Kind = Block386UGE
   19441 			b.SetControl(cmp)
   19442 			b.Aux = nil
   19443 			return true
   19444 		}
   19445 		// match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no)
   19446 		// cond:
   19447 		// result: (UGE cmp yes no)
   19448 		for {
   19449 			v := b.Control
   19450 			if v.Op != Op386TESTB {
   19451 				break
   19452 			}
   19453 			_ = v.Args[1]
   19454 			v_0 := v.Args[0]
   19455 			if v_0.Op != Op386SETAE {
   19456 				break
   19457 			}
   19458 			cmp := v_0.Args[0]
   19459 			v_1 := v.Args[1]
   19460 			if v_1.Op != Op386SETAE {
   19461 				break
   19462 			}
   19463 			if cmp != v_1.Args[0] {
   19464 				break
   19465 			}
   19466 			b.Kind = Block386UGE
   19467 			b.SetControl(cmp)
   19468 			b.Aux = nil
   19469 			return true
   19470 		}
   19471 		// match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no)
   19472 		// cond:
   19473 		// result: (UGT  cmp yes no)
   19474 		for {
   19475 			v := b.Control
   19476 			if v.Op != Op386TESTB {
   19477 				break
   19478 			}
   19479 			_ = v.Args[1]
   19480 			v_0 := v.Args[0]
   19481 			if v_0.Op != Op386SETGF {
   19482 				break
   19483 			}
   19484 			cmp := v_0.Args[0]
   19485 			v_1 := v.Args[1]
   19486 			if v_1.Op != Op386SETGF {
   19487 				break
   19488 			}
   19489 			if cmp != v_1.Args[0] {
   19490 				break
   19491 			}
   19492 			b.Kind = Block386UGT
   19493 			b.SetControl(cmp)
   19494 			b.Aux = nil
   19495 			return true
   19496 		}
   19497 		// match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no)
   19498 		// cond:
   19499 		// result: (UGT  cmp yes no)
   19500 		for {
   19501 			v := b.Control
   19502 			if v.Op != Op386TESTB {
   19503 				break
   19504 			}
   19505 			_ = v.Args[1]
   19506 			v_0 := v.Args[0]
   19507 			if v_0.Op != Op386SETGF {
   19508 				break
   19509 			}
   19510 			cmp := v_0.Args[0]
   19511 			v_1 := v.Args[1]
   19512 			if v_1.Op != Op386SETGF {
   19513 				break
   19514 			}
   19515 			if cmp != v_1.Args[0] {
   19516 				break
   19517 			}
   19518 			b.Kind = Block386UGT
   19519 			b.SetControl(cmp)
   19520 			b.Aux = nil
   19521 			return true
   19522 		}
   19523 		// match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no)
   19524 		// cond:
   19525 		// result: (UGE  cmp yes no)
   19526 		for {
   19527 			v := b.Control
   19528 			if v.Op != Op386TESTB {
   19529 				break
   19530 			}
   19531 			_ = v.Args[1]
   19532 			v_0 := v.Args[0]
   19533 			if v_0.Op != Op386SETGEF {
   19534 				break
   19535 			}
   19536 			cmp := v_0.Args[0]
   19537 			v_1 := v.Args[1]
   19538 			if v_1.Op != Op386SETGEF {
   19539 				break
   19540 			}
   19541 			if cmp != v_1.Args[0] {
   19542 				break
   19543 			}
   19544 			b.Kind = Block386UGE
   19545 			b.SetControl(cmp)
   19546 			b.Aux = nil
   19547 			return true
   19548 		}
   19549 		// match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no)
   19550 		// cond:
   19551 		// result: (UGE  cmp yes no)
   19552 		for {
   19553 			v := b.Control
   19554 			if v.Op != Op386TESTB {
   19555 				break
   19556 			}
   19557 			_ = v.Args[1]
   19558 			v_0 := v.Args[0]
   19559 			if v_0.Op != Op386SETGEF {
   19560 				break
   19561 			}
   19562 			cmp := v_0.Args[0]
   19563 			v_1 := v.Args[1]
   19564 			if v_1.Op != Op386SETGEF {
   19565 				break
   19566 			}
   19567 			if cmp != v_1.Args[0] {
   19568 				break
   19569 			}
   19570 			b.Kind = Block386UGE
   19571 			b.SetControl(cmp)
   19572 			b.Aux = nil
   19573 			return true
   19574 		}
   19575 		// match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no)
   19576 		// cond:
   19577 		// result: (EQF  cmp yes no)
   19578 		for {
   19579 			v := b.Control
   19580 			if v.Op != Op386TESTB {
   19581 				break
   19582 			}
   19583 			_ = v.Args[1]
   19584 			v_0 := v.Args[0]
   19585 			if v_0.Op != Op386SETEQF {
   19586 				break
   19587 			}
   19588 			cmp := v_0.Args[0]
   19589 			v_1 := v.Args[1]
   19590 			if v_1.Op != Op386SETEQF {
   19591 				break
   19592 			}
   19593 			if cmp != v_1.Args[0] {
   19594 				break
   19595 			}
   19596 			b.Kind = Block386EQF
   19597 			b.SetControl(cmp)
   19598 			b.Aux = nil
   19599 			return true
   19600 		}
   19601 		// match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no)
   19602 		// cond:
   19603 		// result: (EQF  cmp yes no)
   19604 		for {
   19605 			v := b.Control
   19606 			if v.Op != Op386TESTB {
   19607 				break
   19608 			}
   19609 			_ = v.Args[1]
   19610 			v_0 := v.Args[0]
   19611 			if v_0.Op != Op386SETEQF {
   19612 				break
   19613 			}
   19614 			cmp := v_0.Args[0]
   19615 			v_1 := v.Args[1]
   19616 			if v_1.Op != Op386SETEQF {
   19617 				break
   19618 			}
   19619 			if cmp != v_1.Args[0] {
   19620 				break
   19621 			}
   19622 			b.Kind = Block386EQF
   19623 			b.SetControl(cmp)
   19624 			b.Aux = nil
   19625 			return true
   19626 		}
   19627 		// match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no)
   19628 		// cond:
   19629 		// result: (NEF  cmp yes no)
   19630 		for {
   19631 			v := b.Control
   19632 			if v.Op != Op386TESTB {
   19633 				break
   19634 			}
   19635 			_ = v.Args[1]
   19636 			v_0 := v.Args[0]
   19637 			if v_0.Op != Op386SETNEF {
   19638 				break
   19639 			}
   19640 			cmp := v_0.Args[0]
   19641 			v_1 := v.Args[1]
   19642 			if v_1.Op != Op386SETNEF {
   19643 				break
   19644 			}
   19645 			if cmp != v_1.Args[0] {
   19646 				break
   19647 			}
   19648 			b.Kind = Block386NEF
   19649 			b.SetControl(cmp)
   19650 			b.Aux = nil
   19651 			return true
   19652 		}
   19653 		// match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no)
   19654 		// cond:
   19655 		// result: (NEF  cmp yes no)
   19656 		for {
   19657 			v := b.Control
   19658 			if v.Op != Op386TESTB {
   19659 				break
   19660 			}
   19661 			_ = v.Args[1]
   19662 			v_0 := v.Args[0]
   19663 			if v_0.Op != Op386SETNEF {
   19664 				break
   19665 			}
   19666 			cmp := v_0.Args[0]
   19667 			v_1 := v.Args[1]
   19668 			if v_1.Op != Op386SETNEF {
   19669 				break
   19670 			}
   19671 			if cmp != v_1.Args[0] {
   19672 				break
   19673 			}
   19674 			b.Kind = Block386NEF
   19675 			b.SetControl(cmp)
   19676 			b.Aux = nil
   19677 			return true
   19678 		}
   19679 		// match: (NE (InvertFlags cmp) yes no)
   19680 		// cond:
   19681 		// result: (NE cmp yes no)
   19682 		for {
   19683 			v := b.Control
   19684 			if v.Op != Op386InvertFlags {
   19685 				break
   19686 			}
   19687 			cmp := v.Args[0]
   19688 			b.Kind = Block386NE
   19689 			b.SetControl(cmp)
   19690 			b.Aux = nil
   19691 			return true
   19692 		}
   19693 		// match: (NE (FlagEQ) yes no)
   19694 		// cond:
   19695 		// result: (First nil no yes)
   19696 		for {
   19697 			v := b.Control
   19698 			if v.Op != Op386FlagEQ {
   19699 				break
   19700 			}
   19701 			b.Kind = BlockFirst
   19702 			b.SetControl(nil)
   19703 			b.Aux = nil
   19704 			b.swapSuccessors()
   19705 			return true
   19706 		}
   19707 		// match: (NE (FlagLT_ULT) yes no)
   19708 		// cond:
   19709 		// result: (First nil yes no)
   19710 		for {
   19711 			v := b.Control
   19712 			if v.Op != Op386FlagLT_ULT {
   19713 				break
   19714 			}
   19715 			b.Kind = BlockFirst
   19716 			b.SetControl(nil)
   19717 			b.Aux = nil
   19718 			return true
   19719 		}
   19720 		// match: (NE (FlagLT_UGT) yes no)
   19721 		// cond:
   19722 		// result: (First nil yes no)
   19723 		for {
   19724 			v := b.Control
   19725 			if v.Op != Op386FlagLT_UGT {
   19726 				break
   19727 			}
   19728 			b.Kind = BlockFirst
   19729 			b.SetControl(nil)
   19730 			b.Aux = nil
   19731 			return true
   19732 		}
   19733 		// match: (NE (FlagGT_ULT) yes no)
   19734 		// cond:
   19735 		// result: (First nil yes no)
   19736 		for {
   19737 			v := b.Control
   19738 			if v.Op != Op386FlagGT_ULT {
   19739 				break
   19740 			}
   19741 			b.Kind = BlockFirst
   19742 			b.SetControl(nil)
   19743 			b.Aux = nil
   19744 			return true
   19745 		}
   19746 		// match: (NE (FlagGT_UGT) yes no)
   19747 		// cond:
   19748 		// result: (First nil yes no)
   19749 		for {
   19750 			v := b.Control
   19751 			if v.Op != Op386FlagGT_UGT {
   19752 				break
   19753 			}
   19754 			b.Kind = BlockFirst
   19755 			b.SetControl(nil)
   19756 			b.Aux = nil
   19757 			return true
   19758 		}
   19759 	case Block386UGE:
   19760 		// match: (UGE (InvertFlags cmp) yes no)
   19761 		// cond:
   19762 		// result: (ULE cmp yes no)
   19763 		for {
   19764 			v := b.Control
   19765 			if v.Op != Op386InvertFlags {
   19766 				break
   19767 			}
   19768 			cmp := v.Args[0]
   19769 			b.Kind = Block386ULE
   19770 			b.SetControl(cmp)
   19771 			b.Aux = nil
   19772 			return true
   19773 		}
   19774 		// match: (UGE (FlagEQ) yes no)
   19775 		// cond:
   19776 		// result: (First nil yes no)
   19777 		for {
   19778 			v := b.Control
   19779 			if v.Op != Op386FlagEQ {
   19780 				break
   19781 			}
   19782 			b.Kind = BlockFirst
   19783 			b.SetControl(nil)
   19784 			b.Aux = nil
   19785 			return true
   19786 		}
   19787 		// match: (UGE (FlagLT_ULT) yes no)
   19788 		// cond:
   19789 		// result: (First nil no yes)
   19790 		for {
   19791 			v := b.Control
   19792 			if v.Op != Op386FlagLT_ULT {
   19793 				break
   19794 			}
   19795 			b.Kind = BlockFirst
   19796 			b.SetControl(nil)
   19797 			b.Aux = nil
   19798 			b.swapSuccessors()
   19799 			return true
   19800 		}
   19801 		// match: (UGE (FlagLT_UGT) yes no)
   19802 		// cond:
   19803 		// result: (First nil yes no)
   19804 		for {
   19805 			v := b.Control
   19806 			if v.Op != Op386FlagLT_UGT {
   19807 				break
   19808 			}
   19809 			b.Kind = BlockFirst
   19810 			b.SetControl(nil)
   19811 			b.Aux = nil
   19812 			return true
   19813 		}
   19814 		// match: (UGE (FlagGT_ULT) yes no)
   19815 		// cond:
   19816 		// result: (First nil no yes)
   19817 		for {
   19818 			v := b.Control
   19819 			if v.Op != Op386FlagGT_ULT {
   19820 				break
   19821 			}
   19822 			b.Kind = BlockFirst
   19823 			b.SetControl(nil)
   19824 			b.Aux = nil
   19825 			b.swapSuccessors()
   19826 			return true
   19827 		}
   19828 		// match: (UGE (FlagGT_UGT) yes no)
   19829 		// cond:
   19830 		// result: (First nil yes no)
   19831 		for {
   19832 			v := b.Control
   19833 			if v.Op != Op386FlagGT_UGT {
   19834 				break
   19835 			}
   19836 			b.Kind = BlockFirst
   19837 			b.SetControl(nil)
   19838 			b.Aux = nil
   19839 			return true
   19840 		}
   19841 	case Block386UGT:
   19842 		// match: (UGT (InvertFlags cmp) yes no)
   19843 		// cond:
   19844 		// result: (ULT cmp yes no)
   19845 		for {
   19846 			v := b.Control
   19847 			if v.Op != Op386InvertFlags {
   19848 				break
   19849 			}
   19850 			cmp := v.Args[0]
   19851 			b.Kind = Block386ULT
   19852 			b.SetControl(cmp)
   19853 			b.Aux = nil
   19854 			return true
   19855 		}
   19856 		// match: (UGT (FlagEQ) yes no)
   19857 		// cond:
   19858 		// result: (First nil no yes)
   19859 		for {
   19860 			v := b.Control
   19861 			if v.Op != Op386FlagEQ {
   19862 				break
   19863 			}
   19864 			b.Kind = BlockFirst
   19865 			b.SetControl(nil)
   19866 			b.Aux = nil
   19867 			b.swapSuccessors()
   19868 			return true
   19869 		}
   19870 		// match: (UGT (FlagLT_ULT) yes no)
   19871 		// cond:
   19872 		// result: (First nil no yes)
   19873 		for {
   19874 			v := b.Control
   19875 			if v.Op != Op386FlagLT_ULT {
   19876 				break
   19877 			}
   19878 			b.Kind = BlockFirst
   19879 			b.SetControl(nil)
   19880 			b.Aux = nil
   19881 			b.swapSuccessors()
   19882 			return true
   19883 		}
   19884 		// match: (UGT (FlagLT_UGT) yes no)
   19885 		// cond:
   19886 		// result: (First nil yes no)
   19887 		for {
   19888 			v := b.Control
   19889 			if v.Op != Op386FlagLT_UGT {
   19890 				break
   19891 			}
   19892 			b.Kind = BlockFirst
   19893 			b.SetControl(nil)
   19894 			b.Aux = nil
   19895 			return true
   19896 		}
   19897 		// match: (UGT (FlagGT_ULT) yes no)
   19898 		// cond:
   19899 		// result: (First nil no yes)
   19900 		for {
   19901 			v := b.Control
   19902 			if v.Op != Op386FlagGT_ULT {
   19903 				break
   19904 			}
   19905 			b.Kind = BlockFirst
   19906 			b.SetControl(nil)
   19907 			b.Aux = nil
   19908 			b.swapSuccessors()
   19909 			return true
   19910 		}
   19911 		// match: (UGT (FlagGT_UGT) yes no)
   19912 		// cond:
   19913 		// result: (First nil yes no)
   19914 		for {
   19915 			v := b.Control
   19916 			if v.Op != Op386FlagGT_UGT {
   19917 				break
   19918 			}
   19919 			b.Kind = BlockFirst
   19920 			b.SetControl(nil)
   19921 			b.Aux = nil
   19922 			return true
   19923 		}
   19924 	case Block386ULE:
   19925 		// match: (ULE (InvertFlags cmp) yes no)
   19926 		// cond:
   19927 		// result: (UGE cmp yes no)
   19928 		for {
   19929 			v := b.Control
   19930 			if v.Op != Op386InvertFlags {
   19931 				break
   19932 			}
   19933 			cmp := v.Args[0]
   19934 			b.Kind = Block386UGE
   19935 			b.SetControl(cmp)
   19936 			b.Aux = nil
   19937 			return true
   19938 		}
   19939 		// match: (ULE (FlagEQ) yes no)
   19940 		// cond:
   19941 		// result: (First nil yes no)
   19942 		for {
   19943 			v := b.Control
   19944 			if v.Op != Op386FlagEQ {
   19945 				break
   19946 			}
   19947 			b.Kind = BlockFirst
   19948 			b.SetControl(nil)
   19949 			b.Aux = nil
   19950 			return true
   19951 		}
   19952 		// match: (ULE (FlagLT_ULT) yes no)
   19953 		// cond:
   19954 		// result: (First nil yes no)
   19955 		for {
   19956 			v := b.Control
   19957 			if v.Op != Op386FlagLT_ULT {
   19958 				break
   19959 			}
   19960 			b.Kind = BlockFirst
   19961 			b.SetControl(nil)
   19962 			b.Aux = nil
   19963 			return true
   19964 		}
   19965 		// match: (ULE (FlagLT_UGT) yes no)
   19966 		// cond:
   19967 		// result: (First nil no yes)
   19968 		for {
   19969 			v := b.Control
   19970 			if v.Op != Op386FlagLT_UGT {
   19971 				break
   19972 			}
   19973 			b.Kind = BlockFirst
   19974 			b.SetControl(nil)
   19975 			b.Aux = nil
   19976 			b.swapSuccessors()
   19977 			return true
   19978 		}
   19979 		// match: (ULE (FlagGT_ULT) yes no)
   19980 		// cond:
   19981 		// result: (First nil yes no)
   19982 		for {
   19983 			v := b.Control
   19984 			if v.Op != Op386FlagGT_ULT {
   19985 				break
   19986 			}
   19987 			b.Kind = BlockFirst
   19988 			b.SetControl(nil)
   19989 			b.Aux = nil
   19990 			return true
   19991 		}
   19992 		// match: (ULE (FlagGT_UGT) yes no)
   19993 		// cond:
   19994 		// result: (First nil no yes)
   19995 		for {
   19996 			v := b.Control
   19997 			if v.Op != Op386FlagGT_UGT {
   19998 				break
   19999 			}
   20000 			b.Kind = BlockFirst
   20001 			b.SetControl(nil)
   20002 			b.Aux = nil
   20003 			b.swapSuccessors()
   20004 			return true
   20005 		}
   20006 	case Block386ULT:
   20007 		// match: (ULT (InvertFlags cmp) yes no)
   20008 		// cond:
   20009 		// result: (UGT cmp yes no)
   20010 		for {
   20011 			v := b.Control
   20012 			if v.Op != Op386InvertFlags {
   20013 				break
   20014 			}
   20015 			cmp := v.Args[0]
   20016 			b.Kind = Block386UGT
   20017 			b.SetControl(cmp)
   20018 			b.Aux = nil
   20019 			return true
   20020 		}
   20021 		// match: (ULT (FlagEQ) yes no)
   20022 		// cond:
   20023 		// result: (First nil no yes)
   20024 		for {
   20025 			v := b.Control
   20026 			if v.Op != Op386FlagEQ {
   20027 				break
   20028 			}
   20029 			b.Kind = BlockFirst
   20030 			b.SetControl(nil)
   20031 			b.Aux = nil
   20032 			b.swapSuccessors()
   20033 			return true
   20034 		}
   20035 		// match: (ULT (FlagLT_ULT) yes no)
   20036 		// cond:
   20037 		// result: (First nil yes no)
   20038 		for {
   20039 			v := b.Control
   20040 			if v.Op != Op386FlagLT_ULT {
   20041 				break
   20042 			}
   20043 			b.Kind = BlockFirst
   20044 			b.SetControl(nil)
   20045 			b.Aux = nil
   20046 			return true
   20047 		}
   20048 		// match: (ULT (FlagLT_UGT) yes no)
   20049 		// cond:
   20050 		// result: (First nil no yes)
   20051 		for {
   20052 			v := b.Control
   20053 			if v.Op != Op386FlagLT_UGT {
   20054 				break
   20055 			}
   20056 			b.Kind = BlockFirst
   20057 			b.SetControl(nil)
   20058 			b.Aux = nil
   20059 			b.swapSuccessors()
   20060 			return true
   20061 		}
   20062 		// match: (ULT (FlagGT_ULT) yes no)
   20063 		// cond:
   20064 		// result: (First nil yes no)
   20065 		for {
   20066 			v := b.Control
   20067 			if v.Op != Op386FlagGT_ULT {
   20068 				break
   20069 			}
   20070 			b.Kind = BlockFirst
   20071 			b.SetControl(nil)
   20072 			b.Aux = nil
   20073 			return true
   20074 		}
   20075 		// match: (ULT (FlagGT_UGT) yes no)
   20076 		// cond:
   20077 		// result: (First nil no yes)
   20078 		for {
   20079 			v := b.Control
   20080 			if v.Op != Op386FlagGT_UGT {
   20081 				break
   20082 			}
   20083 			b.Kind = BlockFirst
   20084 			b.SetControl(nil)
   20085 			b.Aux = nil
   20086 			b.swapSuccessors()
   20087 			return true
   20088 		}
   20089 	}
   20090 	return false
   20091 }
   20092