Home | History | Annotate | Download | only in llvm-ir
      1 ; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s \
      2 ; RUN:    -check-prefixes=ALL,GP32
      3 ; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s \
      4 ; RUN:    -check-prefixes=ALL,GP32
      5 ; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \
      6 ; RUN:    -check-prefixes=ALL,GP32
      7 ; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \
      8 ; RUN:    -check-prefixes=ALL,GP32
      9 ; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \
     10 ; RUN:    -check-prefixes=ALL,GP32
     11 ; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \
     12 ; RUN:    -check-prefixes=ALL,GP32
     13 ; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \
     14 ; RUN:    -check-prefixes=ALL,GP64
     15 ; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \
     16 ; RUN:    -check-prefixes=ALL,GP64
     17 ; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \
     18 ; RUN:    -check-prefixes=ALL,GP64
     19 ; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \
     20 ; RUN:    -check-prefixes=ALL,GP64
     21 ; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \
     22 ; RUN:    -check-prefixes=ALL,GP64
     23 ; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \
     24 ; RUN:    -check-prefixes=ALL,GP64
     25 ; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \
     26 ; RUN:    -check-prefixes=ALL,GP64
     27 ; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
     28 ; RUN:    -check-prefixes=ALL,MM,MM32
     29 ; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
     30 ; RUN:    -check-prefixes=ALL,MM,MM32
     31 ; RUN: llc < %s -march=mips -mcpu=mips64r6 -target-abi n64 -mattr=+micromips | FileCheck %s \
     32 ; RUN:    -check-prefixes=ALL,MM,MM64
     33 
     34 define signext i1 @and_i1(i1 signext %a, i1 signext %b) {
     35 entry:
     36 ; ALL-LABEL: and_i1:
     37 
     38   ; GP32:         and     $2, $4, $5
     39 
     40   ; GP64:         and     $2, $4, $5
     41 
     42   ; MM:           and16   $[[T0:[0-9]+]], $5
     43   ; MM:           move    $2, $[[T0]]
     44 
     45   %r = and i1 %a, %b
     46   ret i1 %r
     47 }
     48 
     49 define signext i8 @and_i8(i8 signext %a, i8 signext %b) {
     50 entry:
     51 ; ALL-LABEL: and_i8:
     52 
     53   ; GP32:         and     $2, $4, $5
     54 
     55   ; GP64:         and     $2, $4, $5
     56 
     57   ; MM:           and16   $[[T0:[0-9]+]], $5
     58   ; MM:           move    $2, $[[T0]]
     59 
     60   %r = and i8 %a, %b
     61   ret i8 %r
     62 }
     63 
     64 define signext i16 @and_i16(i16 signext %a, i16 signext %b) {
     65 entry:
     66 ; ALL-LABEL: and_i16:
     67 
     68   ; GP32:         and     $2, $4, $5
     69 
     70   ; GP64:         and     $2, $4, $5
     71 
     72   ; MM:           and16   $[[T0:[0-9]+]], $5
     73   ; MM:           move    $2, $[[T0]]
     74 
     75   %r = and i16 %a, %b
     76   ret i16 %r
     77 }
     78 
     79 define signext i32 @and_i32(i32 signext %a, i32 signext %b) {
     80 entry:
     81 ; ALL-LABEL: and_i32:
     82 
     83   ; GP32:         and     $2, $4, $5
     84 
     85   ; GP64:         and     $[[T0:[0-9]+]], $4, $5
     86   ; GP64:         sll     $2, $[[T0]], 0
     87 
     88   ; MM32:         and16   $[[T0:[0-9]+]], $5
     89   ; MM32:         move    $2, $[[T0]]
     90 
     91   ; MM64:         and     $[[T0:[0-9]+]], $4, $5
     92   ; MM64:         sll     $2, $[[T0]], 0
     93 
     94   %r = and i32 %a, %b
     95   ret i32 %r
     96 }
     97 
     98 define signext i64 @and_i64(i64 signext %a, i64 signext %b) {
     99 entry:
    100 ; ALL-LABEL: and_i64:
    101 
    102   ; GP32:         and     $2, $4, $6
    103   ; GP32:         and     $3, $5, $7
    104 
    105   ; GP64:         and     $2, $4, $5
    106 
    107   ; MM32:         and16   $[[T0:[0-9]+]], $6
    108   ; MM32:         and16   $[[T1:[0-9]+]], $7
    109   ; MM32:         move    $2, $[[T0]]
    110   ; MM32:         move    $3, $[[T1]]
    111 
    112   ; MM64:         and     $2, $4, $5
    113 
    114   %r = and i64 %a, %b
    115   ret i64 %r
    116 }
    117 
    118 define signext i128 @and_i128(i128 signext %a, i128 signext %b) {
    119 entry:
    120 ; ALL-LABEL: and_i128:
    121 
    122   ; GP32:         lw      $[[T0:[0-9]+]], 24($sp)
    123   ; GP32:         lw      $[[T1:[0-9]+]], 20($sp)
    124   ; GP32:         lw      $[[T2:[0-9]+]], 16($sp)
    125   ; GP32:         and     $2, $4, $[[T2]]
    126   ; GP32:         and     $3, $5, $[[T1]]
    127   ; GP32:         and     $4, $6, $[[T0]]
    128   ; GP32:         lw      $[[T3:[0-9]+]], 28($sp)
    129   ; GP32:         and     $5, $7, $[[T3]]
    130 
    131   ; GP64:         and     $2, $4, $6
    132   ; GP64:         and     $3, $5, $7
    133 
    134   ; MM32:         lw      $[[T0:[0-9]+]], 20($sp)
    135   ; MM32:         lw      $[[T1:[0-9]+]], 16($sp)
    136   ; MM32:         and16   $[[T1]], $4
    137   ; MM32:         and16   $[[T0]], $5
    138   ; MM32:         lw      $[[T2:[0-9]+]], 24($sp)
    139   ; MM32:         and16   $[[T2]], $6
    140   ; MM32:         lw      $[[T3:[0-9]+]], 28($sp)
    141   ; MM32:         and16   $[[T3]], $7
    142 
    143   ; MM64:         and     $2, $4, $6
    144   ; MM64:         and     $3, $5, $7
    145 
    146   %r = and i128 %a, %b
    147   ret i128 %r
    148 }
    149 
    150 define signext i1 @and_i1_4(i1 signext %b) {
    151 entry:
    152 ; ALL-LABEL: and_i1_4:
    153 
    154   ; GP32:         addiu   $2, $zero, 0
    155 
    156   ; GP64:         addiu   $2, $zero, 0
    157 
    158   ; MM:           lui     $2, 0
    159 
    160   %r = and i1 4, %b
    161   ret i1 %r
    162 }
    163 
    164 define signext i8 @and_i8_4(i8 signext %b) {
    165 entry:
    166 ; ALL-LABEL: and_i8_4:
    167 
    168   ; GP32:         andi    $2, $4, 4
    169 
    170   ; GP64:         andi    $2, $4, 4
    171 
    172   ; MM:           andi16  $2, $4, 4
    173 
    174   %r = and i8 4, %b
    175   ret i8 %r
    176 }
    177 
    178 define signext i16 @and_i16_4(i16 signext %b) {
    179 entry:
    180 ; ALL-LABEL: and_i16_4:
    181 
    182   ; GP32:         andi    $2, $4, 4
    183 
    184   ; GP64:         andi    $2, $4, 4
    185 
    186   ; MM:           andi16  $2, $4, 4
    187 
    188   %r = and i16 4, %b
    189   ret i16 %r
    190 }
    191 
    192 define signext i32 @and_i32_4(i32 signext %b) {
    193 entry:
    194 ; ALL-LABEL: and_i32_4:
    195 
    196   ; GP32:         andi    $2, $4, 4
    197 
    198   ; GP64:         andi    $2, $4, 4
    199 
    200   ; MM:           andi16  $2, $4, 4
    201 
    202   %r = and i32 4, %b
    203   ret i32 %r
    204 }
    205 
    206 define signext i64 @and_i64_4(i64 signext %b) {
    207 entry:
    208 ; ALL-LABEL: and_i64_4:
    209 
    210   ; GP32:         andi    $3, $5, 4
    211   ; GP32:         addiu   $2, $zero, 0
    212 
    213   ; GP64:         andi    $2, $4, 4
    214 
    215   ; MM32:         andi16  $3, $5, 4
    216   ; MM32:         lui     $2, 0
    217 
    218   ; MM64:         andi    $2, $4, 4
    219 
    220   %r = and i64 4, %b
    221   ret i64 %r
    222 }
    223 
    224 define signext i128 @and_i128_4(i128 signext %b) {
    225 entry:
    226 ; ALL-LABEL: and_i128_4:
    227 
    228   ; GP32:         andi    $5, $7, 4
    229   ; GP32:         addiu   $2, $zero, 0
    230   ; GP32:         addiu   $3, $zero, 0
    231   ; GP32:         addiu   $4, $zero, 0
    232 
    233   ; GP64:         andi    $3, $5, 4
    234   ; GP64:         daddiu  $2, $zero, 0
    235 
    236   ; MM32:         andi16  $5, $7, 4
    237   ; MM32:         lui     $2, 0
    238   ; MM32:         lui     $3, 0
    239   ; MM32:         lui     $4, 0
    240 
    241   ; MM64:         andi    $3, $5, 4
    242   ; MM64:         daddiu  $2, $zero, 0
    243 
    244   %r = and i128 4, %b
    245   ret i128 %r
    246 }
    247 
    248 define signext i1 @and_i1_31(i1 signext %b) {
    249 entry:
    250 ; ALL-LABEL: and_i1_31:
    251 
    252   ; ALL:          move    $2, $4
    253 
    254   %r = and i1 31, %b
    255   ret i1 %r
    256 }
    257 
    258 define signext i8 @and_i8_31(i8 signext %b) {
    259 entry:
    260 ; ALL-LABEL: and_i8_31:
    261 
    262   ; GP32:         andi    $2, $4, 31
    263 
    264   ; GP64:         andi    $2, $4, 31
    265 
    266   ; MM:           andi16  $2, $4, 31
    267 
    268   %r = and i8 31, %b
    269   ret i8 %r
    270 }
    271 
    272 define signext i16 @and_i16_31(i16 signext %b) {
    273 entry:
    274 ; ALL-LABEL: and_i16_31:
    275 
    276   ; GP32:         andi    $2, $4, 31
    277 
    278   ; GP64:         andi    $2, $4, 31
    279 
    280   ; MM:           andi16  $2, $4, 31
    281 
    282   %r = and i16 31, %b
    283   ret i16 %r
    284 }
    285 
    286 define signext i32 @and_i32_31(i32 signext %b) {
    287 entry:
    288 ; ALL-LABEL: and_i32_31:
    289 
    290   ; GP32:         andi    $2, $4, 31
    291 
    292   ; GP64:         andi    $2, $4, 31
    293 
    294   ; MM:           andi16  $2, $4, 31
    295 
    296   %r = and i32 31, %b
    297   ret i32 %r
    298 }
    299 
    300 define signext i64 @and_i64_31(i64 signext %b) {
    301 entry:
    302 ; ALL-LABEL: and_i64_31:
    303 
    304   ; GP32:         andi    $3, $5, 31
    305   ; GP32:         addiu   $2, $zero, 0
    306 
    307   ; GP64:         andi    $2, $4, 31
    308 
    309   ; MM32:         andi16  $3, $5, 31
    310   ; MM32:         lui     $2, 0
    311 
    312   ; MM64:         andi    $2, $4, 31
    313 
    314   %r = and i64 31, %b
    315   ret i64 %r
    316 }
    317 
    318 define signext i128 @and_i128_31(i128 signext %b) {
    319 entry:
    320 ; ALL-LABEL: and_i128_31:
    321 
    322   ; GP32:         andi    $5, $7, 31
    323   ; GP32:         addiu   $2, $zero, 0
    324   ; GP32:         addiu   $3, $zero, 0
    325   ; GP32:         addiu   $4, $zero, 0
    326 
    327   ; GP64:         andi    $3, $5, 31
    328   ; GP64:         daddiu  $2, $zero, 0
    329 
    330   ; MM32:         andi16  $5, $7, 31
    331   ; MM32:         lui     $2, 0
    332   ; MM32:         lui     $3, 0
    333   ; MM32:         lui     $4, 0
    334 
    335   ; MM64:         andi    $3, $5, 31
    336   ; MM64:         daddiu  $2, $zero, 0
    337 
    338   %r = and i128 31, %b
    339   ret i128 %r
    340 }
    341 
    342 define signext i1 @and_i1_255(i1 signext %b) {
    343 entry:
    344 ; ALL-LABEL: and_i1_255:
    345 
    346   ; ALL:          move    $2, $4
    347 
    348   %r = and i1 255, %b
    349   ret i1 %r
    350 }
    351 
    352 define signext i8 @and_i8_255(i8 signext %b) {
    353 entry:
    354 ; ALL-LABEL: and_i8_255:
    355 
    356   ; ALL:          move    $2, $4
    357 
    358   %r = and i8 255, %b
    359   ret i8 %r
    360 }
    361 
    362 define signext i16 @and_i16_255(i16 signext %b) {
    363 entry:
    364 ; ALL-LABEL: and_i16_255:
    365 
    366   ; GP32:         andi    $2, $4, 255
    367 
    368   ; GP64:         andi    $2, $4, 255
    369 
    370   ; MM:           andi16  $2, $4, 255
    371 
    372   %r = and i16 255, %b
    373   ret i16 %r
    374 }
    375 
    376 define signext i32 @and_i32_255(i32 signext %b) {
    377 entry:
    378 ; ALL-LABEL: and_i32_255:
    379 
    380   ; GP32:         andi    $2, $4, 255
    381 
    382   ; GP64:         andi    $2, $4, 255
    383 
    384   ; MM:           andi16  $2, $4, 255
    385 
    386   %r = and i32 255, %b
    387   ret i32 %r
    388 }
    389 
    390 define signext i64 @and_i64_255(i64 signext %b) {
    391 entry:
    392 ; ALL-LABEL: and_i64_255:
    393 
    394   ; GP32:         andi    $3, $5, 255
    395   ; GP32:         addiu   $2, $zero, 0
    396 
    397   ; GP64:         andi    $2, $4, 255
    398 
    399   ; MM32:         andi16  $3, $5, 255
    400   ; MM32:         lui     $2, 0
    401 
    402   ; MM64:         andi    $2, $4, 255
    403 
    404   %r = and i64 255, %b
    405   ret i64 %r
    406 }
    407 
    408 define signext i128 @and_i128_255(i128 signext %b) {
    409 entry:
    410 ; ALL-LABEL: and_i128_255:
    411 
    412   ; GP32:         andi    $5, $7, 255
    413   ; GP32:         addiu   $2, $zero, 0
    414   ; GP32:         addiu   $3, $zero, 0
    415   ; GP32:         addiu   $4, $zero, 0
    416 
    417   ; GP64:         andi    $3, $5, 255
    418   ; GP64:         daddiu  $2, $zero, 0
    419 
    420   ; MM32:         andi16  $5, $7, 255
    421   ; MM32:         lui     $2, 0
    422   ; MM32:         lui     $3, 0
    423   ; MM32:         lui     $4, 0
    424 
    425   ; MM64:         andi    $3, $5, 255
    426   ; MM64:         daddiu  $2, $zero, 0
    427 
    428   %r = and i128 255, %b
    429   ret i128 %r
    430 }
    431 
    432 define signext i1 @and_i1_32768(i1 signext %b) {
    433 entry:
    434 ; ALL-LABEL: and_i1_32768:
    435 
    436   ; GP32:         addiu  $2, $zero, 0
    437 
    438   ; GP64:         addiu  $2, $zero, 0
    439 
    440   ; MM:           lui    $2, 0
    441 
    442   %r = and i1 32768, %b
    443   ret i1 %r
    444 }
    445 
    446 define signext i8 @and_i8_32768(i8 signext %b) {
    447 entry:
    448 ; ALL-LABEL: and_i8_32768:
    449 
    450   ; GP32:         addiu  $2, $zero, 0
    451 
    452   ; GP64:         addiu  $2, $zero, 0
    453 
    454   ; MM:           lui    $2, 0
    455 
    456   %r = and i8 32768, %b
    457   ret i8 %r
    458 }
    459 
    460 define signext i16 @and_i16_32768(i16 signext %b) {
    461 entry:
    462 ; ALL-LABEL: and_i16_32768:
    463 
    464   ; GP32:         addiu  $[[T0:[0-9]+]], $zero, -32768
    465   ; GP32:         and    $2, $4, $[[T0]]
    466 
    467   ; GP64:         addiu  $[[T0:[0-9]+]], $zero, -32768
    468   ; GP64:         and    $2, $4, $[[T0]]
    469 
    470   ; MM:           addiu  $2, $zero, -32768
    471   ; MM:           and16  $2, $4
    472 
    473   %r = and i16 32768, %b
    474   ret i16 %r
    475 }
    476 
    477 define signext i32 @and_i32_32768(i32 signext %b) {
    478 entry:
    479 ; ALL-LABEL: and_i32_32768:
    480 
    481   ; GP32:         andi    $2, $4, 32768
    482 
    483   ; GP64:         andi    $2, $4, 32768
    484 
    485   ; MM:           andi16  $2, $4, 32768
    486 
    487   %r = and i32 32768, %b
    488   ret i32 %r
    489 }
    490 
    491 define signext i64 @and_i64_32768(i64 signext %b) {
    492 entry:
    493 ; ALL-LABEL: and_i64_32768:
    494 
    495   ; GP32:         andi    $3, $5, 32768
    496   ; GP32:         addiu   $2, $zero, 0
    497 
    498   ; GP64:         andi    $2, $4, 32768
    499 
    500   ; MM32:         andi16  $3, $5, 32768
    501   ; MM32:         lui     $2, 0
    502 
    503   ; MM64:         andi    $2, $4, 32768
    504 
    505   %r = and i64 32768, %b
    506   ret i64 %r
    507 }
    508 
    509 define signext i128 @and_i128_32768(i128 signext %b) {
    510 entry:
    511 ; ALL-LABEL: and_i128_32768:
    512 
    513   ; GP32:         andi    $5, $7, 32768
    514   ; GP32:         addiu   $2, $zero, 0
    515   ; GP32:         addiu   $3, $zero, 0
    516   ; GP32:         addiu   $4, $zero, 0
    517 
    518   ; GP64:         andi    $3, $5, 32768
    519   ; GP64:         daddiu  $2, $zero, 0
    520 
    521   ; MM32:         andi16  $5, $7, 32768
    522   ; MM32:         lui     $2, 0
    523   ; MM32:         lui     $3, 0
    524   ; MM32:         lui     $4, 0
    525 
    526   ; MM64:         andi    $3, $5, 32768
    527   ; MM64:         daddiu  $2, $zero, 0
    528 
    529   %r = and i128 32768, %b
    530   ret i128 %r
    531 }
    532 
    533 define signext i1 @and_i1_65(i1 signext %b) {
    534 entry:
    535 ; ALL-LABEL: and_i1_65:
    536 
    537   ; ALL:          move    $2, $4
    538 
    539   %r = and i1 65, %b
    540   ret i1 %r
    541 }
    542 
    543 define signext i8 @and_i8_65(i8 signext %b) {
    544 entry:
    545 ; ALL-LABEL: and_i8_65:
    546 
    547   ; ALL:          andi    $2, $4, 65
    548 
    549   %r = and i8 65, %b
    550   ret i8 %r
    551 }
    552 
    553 define signext i16 @and_i16_65(i16 signext %b) {
    554 entry:
    555 ; ALL-LABEL: and_i16_65:
    556 
    557   ; ALL:          andi    $2, $4, 65
    558 
    559   %r = and i16 65, %b
    560   ret i16 %r
    561 }
    562 
    563 define signext i32 @and_i32_65(i32 signext %b) {
    564 entry:
    565 ; ALL-LABEL: and_i32_65:
    566 
    567   ; ALL:          andi    $2, $4, 65
    568 
    569   %r = and i32 65, %b
    570   ret i32 %r
    571 }
    572 
    573 define signext i64 @and_i64_65(i64 signext %b) {
    574 entry:
    575 ; ALL-LABEL: and_i64_65:
    576 
    577   ; GP32:         andi    $3, $5, 65
    578   ; GP32:         addiu   $2, $zero, 0
    579 
    580   ; GP64:         andi    $2, $4, 65
    581 
    582   ; MM32:         andi    $3, $5, 65
    583   ; MM32:         lui     $2, 0
    584 
    585   ; MM64:         andi    $2, $4, 65
    586 
    587   %r = and i64 65, %b
    588   ret i64 %r
    589 }
    590 
    591 define signext i128 @and_i128_65(i128 signext %b) {
    592 entry:
    593 ; ALL-LABEL: and_i128_65:
    594 
    595   ; GP32:         andi    $5, $7, 65
    596   ; GP32:         addiu   $2, $zero, 0
    597   ; GP32:         addiu   $3, $zero, 0
    598   ; GP32:         addiu   $4, $zero, 0
    599 
    600   ; GP64:         andi    $3, $5, 65
    601   ; GP64:         daddiu  $2, $zero, 0
    602 
    603   ; MM32:         andi    $5, $7, 65
    604   ; MM32:         lui     $2, 0
    605   ; MM32:         lui     $3, 0
    606   ; MM32:         lui     $4, 0
    607 
    608   ; MM64:         andi    $3, $5, 65
    609   ; MM64:         daddiu  $2, $zero, 0
    610 
    611   %r = and i128 65, %b
    612   ret i128 %r
    613 }
    614 
    615 define signext i1 @and_i1_256(i1 signext %b) {
    616 entry:
    617 ; ALL-LABEL: and_i1_256:
    618 
    619   ; GP32:         addiu   $2, $zero, 0
    620 
    621   ; GP64:         addiu   $2, $zero, 0
    622 
    623   ; MM:           lui     $2, 0
    624 
    625   %r = and i1 256, %b
    626   ret i1 %r
    627 }
    628 
    629 define signext i8 @and_i8_256(i8 signext %b) {
    630 entry:
    631 ; ALL-LABEL: and_i8_256:
    632 
    633   ; GP32:         addiu   $2, $zero, 0
    634 
    635   ; GP64:         addiu   $2, $zero, 0
    636 
    637   ; MM:           lui     $2, 0
    638 
    639   %r = and i8 256, %b
    640   ret i8 %r
    641 }
    642 
    643 define signext i16 @and_i16_256(i16 signext %b) {
    644 entry:
    645 ; ALL-LABEL: and_i16_256:
    646 
    647   ; ALL:          andi    $2, $4, 256
    648 
    649   %r = and i16 256, %b
    650   ret i16 %r
    651 }
    652 
    653 define signext i32 @and_i32_256(i32 signext %b) {
    654 entry:
    655 ; ALL-LABEL: and_i32_256:
    656 
    657   ; ALL:          andi    $2, $4, 256
    658 
    659   %r = and i32 256, %b
    660   ret i32 %r
    661 }
    662 
    663 define signext i64 @and_i64_256(i64 signext %b) {
    664 entry:
    665 ; ALL-LABEL: and_i64_256:
    666 
    667   ; GP32:         andi    $3, $5, 256
    668   ; GP32:         addiu   $2, $zero, 0
    669 
    670   ; GP64:         andi    $2, $4, 256
    671 
    672   ; MM32:         andi    $3, $5, 256
    673   ; MM32:         lui     $2, 0
    674 
    675   ; MM64:         andi    $2, $4, 256
    676 
    677   %r = and i64 256, %b
    678   ret i64 %r
    679 }
    680 
    681 define signext i128 @and_i128_256(i128 signext %b) {
    682 entry:
    683 ; ALL-LABEL: and_i128_256:
    684 
    685   ; GP32:         andi    $5, $7, 256
    686   ; GP32:         addiu   $2, $zero, 0
    687   ; GP32:         addiu   $3, $zero, 0
    688   ; GP32:         addiu   $4, $zero, 0
    689 
    690   ; GP64:         andi    $3, $5, 256
    691   ; GP64:         daddiu  $2, $zero, 0
    692 
    693   ; MM32:         andi    $5, $7, 256
    694   ; MM32:         lui     $2, 0
    695   ; MM32:         lui     $3, 0
    696   ; MM32:         lui     $4, 0
    697 
    698   ; MM64:         andi    $3, $5, 256
    699   ; MM64:         daddiu  $2, $zero, 0
    700 
    701   %r = and i128 256, %b
    702   ret i128 %r
    703 }
    704