Home | History | Annotate | Download | only in CellSPU
      1 //===-- CellSDKIntrinsics.td - Cell SDK Intrinsics ---------*- tablegen -*-===//
      2 // 
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 ///--==-- Arithmetic ops intrinsics --==--
     11 def CellSDKah:
     12     RR_Int_v8i16<0b00010011000, "ah", IntegerOp, int_spu_si_ah>;
     13 def CellSDKahi:
     14     RI10_Int_v8i16<0b00010011000, "ahi", IntegerOp, int_spu_si_ahi>;
     15 def CellSDKa:
     16     RR_Int_v4i32<0b00000011000, "a", IntegerOp, int_spu_si_a>;
     17 def CellSDKai:
     18     RI10_Int_v4i32<0b00111000, "ai", IntegerOp, int_spu_si_ai>;
     19 def CellSDKsfh:
     20     RR_Int_v8i16<0b00010010000, "sfh", IntegerOp, int_spu_si_sfh>;
     21 def CellSDKsfhi:
     22     RI10_Int_v8i16<0b10110000, "sfhi", IntegerOp, int_spu_si_sfhi>;
     23 def CellSDKsf:
     24     RR_Int_v4i32<0b00000010000, "sf", IntegerOp, int_spu_si_sf>;
     25 def CellSDKsfi:
     26     RI10_Int_v4i32<0b00110000, "sfi", IntegerOp, int_spu_si_sfi>;
     27 def CellSDKaddx:
     28     RR_Int_v4i32<0b00000010110, "addx", IntegerOp, int_spu_si_addx>;
     29 def CellSDKcg:
     30     RR_Int_v4i32<0b0100001100, "cg", IntegerOp, int_spu_si_cg>;
     31 def CellSDKcgx:
     32     RR_Int_v4i32<0b01000010110, "cgx", IntegerOp, int_spu_si_cgx>;
     33 def CellSDKsfx:
     34     RR_Int_v4i32<0b10000010110, "sfx", IntegerOp, int_spu_si_sfx>;
     35 def CellSDKbg:
     36     RR_Int_v4i32<0b01000010000, "bg", IntegerOp, int_spu_si_bg>;
     37 def CellSDKbgx:
     38     RR_Int_v4i32<0b11000010110, "bgx", IntegerOp, int_spu_si_bgx>;
     39 
     40 def CellSDKmpy:
     41     RRForm<0b00100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     42       "mpy $rT, $rA, $rB", IntegerMulDiv,
     43       [(set (v4i32 VECREG:$rT), (int_spu_si_mpy (v8i16 VECREG:$rA),
     44                                                 (v8i16 VECREG:$rB)))]>;
     45 
     46 def CellSDKmpyu:
     47     RRForm<0b00110011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     48       "mpyu $rT, $rA, $rB", IntegerMulDiv,
     49       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyu (v8i16 VECREG:$rA),
     50                                                  (v8i16 VECREG:$rB)))] >;
     51 
     52 def CellSDKmpyi:
     53     RI10Form<0b00101110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
     54       "mpyi $rT, $rA, $val", IntegerMulDiv,
     55       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyi (v8i16 VECREG:$rA),
     56                                                  i16ImmSExt10:$val))]>;
     57 
     58 def CellSDKmpyui:
     59     RI10Form<0b10101110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
     60       "mpyui $rT, $rA, $val", IntegerMulDiv,
     61       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyui (v8i16 VECREG:$rA),
     62                                                   i16ImmSExt10:$val))]>;
     63 
     64 def CellSDKmpya:
     65     RRRForm<0b0011, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC),
     66       "mpya $rT, $rA, $rB, $rC", IntegerMulDiv,
     67       [(set (v4i32 VECREG:$rT), (int_spu_si_mpya (v8i16 VECREG:$rA),
     68                                                  (v8i16 VECREG:$rB),
     69                                                  (v8i16 VECREG:$rC)))]>;
     70 
     71 def CellSDKmpyh:
     72     RRForm<0b10100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     73       "mpyh $rT, $rA, $rB", IntegerMulDiv,
     74       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyh (v4i32 VECREG:$rA),
     75                                                  (v8i16 VECREG:$rB)))]>;
     76 
     77 def CellSDKmpys:
     78     RRForm<0b11100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     79       "mpys $rT, $rA, $rB", IntegerMulDiv,
     80       [(set (v4i32 VECREG:$rT), (int_spu_si_mpys (v8i16 VECREG:$rA),
     81                                                  (v8i16 VECREG:$rB)))]>;
     82 
     83 def CellSDKmpyhh:
     84     RRForm<0b01100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     85       "mpyhh $rT, $rA, $rB", IntegerMulDiv,
     86       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhh (v8i16 VECREG:$rA),
     87                                                   (v8i16 VECREG:$rB)))]>;
     88 
     89 def CellSDKmpyhha:
     90     RRForm<0b01100010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     91       "mpyhha $rT, $rA, $rB", IntegerMulDiv,
     92       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhha (v8i16 VECREG:$rA),
     93                                                    (v8i16 VECREG:$rB)))]>;
     94 
     95 // Not sure how to match a (set $rT, (add $rT (mpyhh $rA, $rB)))... so leave
     96 // as an intrinsic for the time being
     97 def CellSDKmpyhhu:
     98     RRForm<0b01110011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
     99       "mpyhhu $rT, $rA, $rB", IntegerMulDiv,
    100       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhhu (v8i16 VECREG:$rA),
    101                                                    (v8i16 VECREG:$rB)))]>;
    102 
    103 def CellSDKmpyhhau:
    104     RRForm<0b01110010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    105       "mpyhhau $rT, $rA, $rB", IntegerMulDiv,
    106       [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhhau (v8i16 VECREG:$rA),
    107                                                     (v8i16 VECREG:$rB)))]>;
    108 
    109 def CellSDKand:
    110         RRForm<0b1000011000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    111           "and\t $rT, $rA, $rB", IntegerOp,
    112           [(set (v4i32 VECREG:$rT),
    113                 (int_spu_si_and (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    114 
    115 def CellSDKandc:
    116         RRForm<0b10000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    117           "andc\t $rT, $rA, $rB", IntegerOp,
    118           [(set (v4i32 VECREG:$rT),
    119                 (int_spu_si_andc (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    120 
    121 def CellSDKandbi:
    122      RI10Form<0b01101000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    123        "andbi\t $rT, $rA, $val", BranchResolv,
    124        [(set (v16i8 VECREG:$rT),
    125              (int_spu_si_andbi (v16i8 VECREG:$rA), immU8:$val))]>;
    126 
    127 def CellSDKandhi:
    128      RI10Form<0b10101000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    129            "andhi\t $rT, $rA, $val", BranchResolv,
    130        [(set (v8i16 VECREG:$rT),
    131              (int_spu_si_andhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    132 
    133 def CellSDKandi:
    134      RI10Form<0b00101000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    135            "andi\t $rT, $rA, $val", BranchResolv,
    136        [(set (v4i32 VECREG:$rT),
    137              (int_spu_si_andi (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    138 
    139 def CellSDKor:
    140         RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    141           "or\t $rT, $rA, $rB", IntegerOp,
    142           [(set (v4i32 VECREG:$rT),
    143                 (int_spu_si_or (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    144 
    145 def CellSDKorc:
    146         RRForm<0b10010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    147           "addc\t $rT, $rA, $rB", IntegerOp,
    148           [(set (v4i32 VECREG:$rT),
    149                 (int_spu_si_orc (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    150 
    151 def CellSDKorbi:
    152      RI10Form<0b01100000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    153        "orbi\t $rT, $rA, $val", BranchResolv,
    154        [(set (v16i8 VECREG:$rT),
    155              (int_spu_si_orbi (v16i8 VECREG:$rA), immU8:$val))]>;
    156 
    157 def CellSDKorhi:
    158      RI10Form<0b10100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    159            "orhi\t $rT, $rA, $val", BranchResolv,
    160        [(set (v8i16 VECREG:$rT),
    161              (int_spu_si_orhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    162 
    163 def CellSDKori:
    164      RI10Form<0b00100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    165            "ori\t $rT, $rA, $val", BranchResolv,
    166        [(set (v4i32 VECREG:$rT),
    167              (int_spu_si_ori (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    168 
    169 def CellSDKxor:
    170         RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    171           "xor\t $rT, $rA, $rB", IntegerOp,
    172           [(set (v4i32 VECREG:$rT), 
    173                 (int_spu_si_xor (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    174 
    175 def CellSDKxorbi:
    176      RI10Form<0b01100000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    177        "xorbi\t $rT, $rA, $val", BranchResolv,
    178        [(set (v16i8 VECREG:$rT), (int_spu_si_xorbi (v16i8 VECREG:$rA), immU8:$val))]>;
    179 
    180 def CellSDKxorhi:
    181      RI10Form<0b10100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    182        "xorhi\t $rT, $rA, $val", BranchResolv,
    183        [(set (v8i16 VECREG:$rT), 
    184              (int_spu_si_xorhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    185 
    186 def CellSDKxori:
    187      RI10Form<0b00100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    188            "xori\t $rT, $rA, $val", BranchResolv,
    189        [(set (v4i32 VECREG:$rT), 
    190              (int_spu_si_xori (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    191 
    192 def CellSDKnor:
    193         RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    194           "nor\t $rT, $rA, $rB", IntegerOp,
    195           [(set (v4i32 VECREG:$rT), 
    196                 (int_spu_si_nor (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    197 
    198 def CellSDKnand:
    199         RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    200           "nand\t $rT, $rA, $rB", IntegerOp,
    201           [(set (v4i32 VECREG:$rT), 
    202                 (int_spu_si_nand (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    203 
    204 //===----------------------------------------------------------------------===//
    205 // Shift/rotate intrinsics:
    206 //===----------------------------------------------------------------------===//
    207 
    208 def CellSDKshli:
    209   Pat<(int_spu_si_shli (v4i32 VECREG:$rA), uimm7:$val),
    210       (SHLIv4i32 VECREG:$rA, (TO_IMM32 imm:$val))>;
    211 
    212 def CellSDKshlqbi:
    213   Pat<(int_spu_si_shlqbi VECREG:$rA, R32C:$rB),
    214       (SHLQBIv16i8 VECREG:$rA, R32C:$rB)>;
    215 
    216 def CellSDKshlqii:
    217   Pat<(int_spu_si_shlqbii VECREG:$rA, uimm7:$val),
    218       (SHLQBIIv16i8 VECREG:$rA, (TO_IMM32 imm:$val))>;
    219 
    220 def CellSDKshlqby:
    221   Pat<(int_spu_si_shlqby VECREG:$rA, R32C:$rB),
    222       (SHLQBYv16i8 VECREG:$rA, R32C:$rB)>;
    223 
    224 def CellSDKshlqbyi:
    225   Pat<(int_spu_si_shlqbyi VECREG:$rA, uimm7:$val),
    226       (SHLQBYIv16i8 VECREG:$rA, (TO_IMM32 imm:$val))>;
    227 
    228           
    229 //===----------------------------------------------------------------------===//
    230 // Branch/compare intrinsics:
    231 //===----------------------------------------------------------------------===//
    232 
    233 def CellSDKceq:
    234   RRForm<0b00000011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    235         "ceq\t $rT, $rA, $rB", BranchResolv,
    236         [(set (v4i32 VECREG:$rT), 
    237               (int_spu_si_ceq (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    238 
    239 def CellSDKceqi:
    240   RI10Form<0b00111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    241         "ceqi\t $rT, $rA, $val", BranchResolv,
    242     [(set (v4i32 VECREG:$rT), 
    243           (int_spu_si_ceqi (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    244 
    245 def CellSDKceqb:
    246   RRForm<0b00001011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    247         "ceqb\t $rT, $rA, $rB", BranchResolv,
    248         [(set (v16i8 VECREG:$rT), 
    249               (int_spu_si_ceqb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>;
    250 
    251 def CellSDKceqbi:
    252   RI10Form<0b01111110, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    253         "ceqbi\t $rT, $rA, $val", BranchResolv,
    254     [(set (v16i8 VECREG:$rT), (int_spu_si_ceqbi (v16i8 VECREG:$rA), immU8:$val))]>;
    255 
    256 def CellSDKceqh:
    257   RRForm<0b00010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    258         "ceqh\t $rT, $rA, $rB", BranchResolv,
    259         [(set (v8i16 VECREG:$rT), 
    260               (int_spu_si_ceqh (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>;
    261 
    262 def CellSDKceqhi:
    263   RI10Form<0b10111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    264         "ceqhi\t $rT, $rA, $val", BranchResolv,
    265     [(set (v8i16 VECREG:$rT), 
    266           (int_spu_si_ceqhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    267 def CellSDKcgth:
    268   RRForm<0b00010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    269     "cgth\t $rT, $rA, $rB", BranchResolv,
    270         [(set (v8i16 VECREG:$rT),
    271               (int_spu_si_cgth (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>;
    272 
    273 def CellSDKcgthi:
    274   RI10Form<0b10111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    275     "cgthi\t $rT, $rA, $val", BranchResolv,
    276         [(set (v8i16 VECREG:$rT), 
    277               (int_spu_si_cgthi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    278 
    279 def CellSDKcgt:
    280   RRForm<0b00000010010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    281     "cgt\t $rT, $rA, $rB", BranchResolv,
    282         [(set (v4i32 VECREG:$rT), 
    283               (int_spu_si_cgt (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    284 
    285 def CellSDKcgti:
    286   RI10Form<0b00110010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    287     "cgti\t $rT, $rA, $val", BranchResolv,
    288         [(set (v4i32 VECREG:$rT), 
    289               (int_spu_si_cgti (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    290 
    291 def CellSDKcgtb:
    292   RRForm<0b00001010010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    293     "cgtb\t $rT, $rA, $rB", BranchResolv,
    294         [(set (v16i8 VECREG:$rT), 
    295               (int_spu_si_cgtb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>;
    296 
    297 def CellSDKcgtbi:
    298   RI10Form<0b01110010, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    299     "cgtbi\t $rT, $rA, $val", BranchResolv,
    300         [(set (v16i8 VECREG:$rT), (int_spu_si_cgtbi (v16i8 VECREG:$rA), immU8:$val))]>;
    301 
    302 def CellSDKclgth:
    303   RRForm<0b00010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    304     "clgth\t $rT, $rA, $rB", BranchResolv,
    305         [(set (v8i16 VECREG:$rT), 
    306               (int_spu_si_clgth (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>;
    307 
    308 def CellSDKclgthi:
    309   RI10Form<0b10111010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    310     "clgthi\t $rT, $rA, $val", BranchResolv,
    311         [(set (v8i16 VECREG:$rT), 
    312               (int_spu_si_clgthi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>;
    313 
    314 def CellSDKclgt:
    315   RRForm<0b00000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    316     "clgt\t $rT, $rA, $rB", BranchResolv,
    317         [(set (v4i32 VECREG:$rT), 
    318               (int_spu_si_clgt (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>;
    319 
    320 def CellSDKclgti:
    321   RI10Form<0b00111010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val),
    322     "clgti\t $rT, $rA, $val", BranchResolv,
    323         [(set (v4i32 VECREG:$rT), 
    324               (int_spu_si_clgti (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>;
    325 
    326 def CellSDKclgtb:
    327   RRForm<0b00001011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    328     "clgtb\t $rT, $rA, $rB", BranchResolv,
    329     [(set (v16i8 VECREG:$rT),
    330           (int_spu_si_clgtb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>;
    331 
    332 def CellSDKclgtbi:
    333   RI10Form<0b01111010, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val),
    334     "clgtbi\t $rT, $rA, $val", BranchResolv,
    335     [(set (v16i8 VECREG:$rT),
    336           (int_spu_si_clgtbi (v16i8 VECREG:$rA), immU8:$val))]>;
    337 
    338 //===----------------------------------------------------------------------===//
    339 // Floating-point intrinsics:
    340 //===----------------------------------------------------------------------===//
    341 
    342 def CellSDKfa:
    343   RRForm<0b00100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    344     "fa\t $rT, $rA, $rB", SPrecFP,
    345         [(set (v4f32 VECREG:$rT), (int_spu_si_fa (v4f32 VECREG:$rA),
    346                                                  (v4f32 VECREG:$rB)))]>;
    347 
    348 def CellSDKfs:
    349   RRForm<0b10100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    350     "fs\t $rT, $rA, $rB", SPrecFP,
    351         [(set (v4f32 VECREG:$rT), (int_spu_si_fs (v4f32 VECREG:$rA),
    352                                                  (v4f32 VECREG:$rB)))]>;
    353 
    354 def CellSDKfm:
    355   RRForm<0b01100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    356     "fm\t $rT, $rA, $rB", SPrecFP,
    357         [(set (v4f32 VECREG:$rT), (int_spu_si_fm (v4f32 VECREG:$rA),
    358                                                  (v4f32 VECREG:$rB)))]>;
    359 
    360 def CellSDKfceq:
    361   RRForm<0b01000011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    362     "fceq\t $rT, $rA, $rB", SPrecFP,
    363         [(set (v4f32 VECREG:$rT), (int_spu_si_fceq (v4f32 VECREG:$rA),
    364                                                    (v4f32 VECREG:$rB)))]>;
    365 
    366 def CellSDKfcgt:
    367   RRForm<0b01000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    368     "fcgt\t $rT, $rA, $rB", SPrecFP,
    369         [(set (v4f32 VECREG:$rT), (int_spu_si_fcgt (v4f32 VECREG:$rA),
    370                                                    (v4f32 VECREG:$rB)))]>;
    371 
    372 def CellSDKfcmeq:
    373   RRForm<0b01010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    374     "fcmeq\t $rT, $rA, $rB", SPrecFP,
    375         [(set (v4f32 VECREG:$rT), (int_spu_si_fcmeq (v4f32 VECREG:$rA),
    376                                                     (v4f32 VECREG:$rB)))]>;
    377 
    378 def CellSDKfcmgt:
    379   RRForm<0b01010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    380     "fcmgt\t $rT, $rA, $rB", SPrecFP,
    381         [(set (v4f32 VECREG:$rT), (int_spu_si_fcmgt (v4f32 VECREG:$rA),
    382                                                     (v4f32 VECREG:$rB)))]>;
    383 
    384 def CellSDKfma:
    385   RRRForm<0b0111, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC),
    386     "fma\t $rT, $rA, $rB, $rC", SPrecFP,
    387         [(set (v4f32 VECREG:$rT), (int_spu_si_fma (v4f32 VECREG:$rA),
    388                                                   (v4f32 VECREG:$rB),
    389                                                   (v4f32 VECREG:$rC)))]>;
    390 
    391 def CellSDKfnms:
    392   RRRForm<0b1011, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC),
    393     "fnms\t $rT, $rA, $rB, $rC", SPrecFP,
    394         [(set (v4f32 VECREG:$rT), (int_spu_si_fnms (v4f32 VECREG:$rA),
    395                                                    (v4f32 VECREG:$rB),
    396                                                    (v4f32 VECREG:$rC)))]>;
    397 
    398 def CellSDKfms:
    399   RRRForm<0b1111, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC),
    400     "fms\t $rT, $rA, $rB, $rC", SPrecFP,
    401         [(set (v4f32 VECREG:$rT), (int_spu_si_fms (v4f32 VECREG:$rA),
    402                                                   (v4f32 VECREG:$rB),
    403                                                   (v4f32 VECREG:$rC)))]>;
    404 
    405 //===----------------------------------------------------------------------===//
    406 // Double precision floating-point intrinsics:
    407 //===----------------------------------------------------------------------===//
    408 
    409 def CellSDKdfa:
    410   RRForm<0b00110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    411     "dfa\t $rT, $rA, $rB", DPrecFP,
    412         [(set (v2f64 VECREG:$rT), (int_spu_si_dfa (v2f64 VECREG:$rA),
    413                                                   (v2f64 VECREG:$rB)))]>;
    414 
    415 def CellSDKdfs:
    416   RRForm<0b10110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    417     "dfs\t $rT, $rA, $rB", DPrecFP,
    418         [(set (v2f64 VECREG:$rT), (int_spu_si_dfs (v2f64 VECREG:$rA),
    419                                                   (v2f64 VECREG:$rB)))]>;
    420 
    421 def CellSDKdfm:
    422   RRForm<0b01110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    423     "dfm\t $rT, $rA, $rB", DPrecFP,
    424         [(set (v2f64 VECREG:$rT), (int_spu_si_dfm (v2f64 VECREG:$rA),
    425                                                   (v2f64 VECREG:$rB)))]>;
    426 
    427 def CellSDKdfma:
    428   RRForm<0b00111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    429     "dfma\t $rT, $rA, $rB", DPrecFP,
    430         [(set (v2f64 VECREG:$rT), (int_spu_si_dfma (v2f64 VECREG:$rA),
    431                                                    (v2f64 VECREG:$rB)))]>;
    432 
    433 def CellSDKdfnma:
    434   RRForm<0b11111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    435     "dfnma\t $rT, $rA, $rB", DPrecFP,
    436         [(set (v2f64 VECREG:$rT), (int_spu_si_dfnma (v2f64 VECREG:$rA),
    437                                                     (v2f64 VECREG:$rB)))]>;
    438 
    439 def CellSDKdfnms:
    440   RRForm<0b01111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    441     "dfnms\t $rT, $rA, $rB", DPrecFP,
    442         [(set (v2f64 VECREG:$rT), (int_spu_si_dfnms (v2f64 VECREG:$rA),
    443                                                     (v2f64 VECREG:$rB)))]>;
    444 
    445 def CellSDKdfms:
    446   RRForm<0b10111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB),
    447     "dfms\t $rT, $rA, $rB", DPrecFP,
    448         [(set (v2f64 VECREG:$rT), (int_spu_si_dfms (v2f64 VECREG:$rA),
    449                                                    (v2f64 VECREG:$rB)))]>;
    450