| //===-- CellSDKIntrinsics.td - Cell SDK Intrinsics ---------*- tablegen -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| ///--==-- Arithmetic ops intrinsics --==-- | |
| def CellSDKah: | |
| RR_Int_v8i16<0b00010011000, "ah", IntegerOp, int_spu_si_ah>; | |
| def CellSDKahi: | |
| RI10_Int_v8i16<0b00010011000, "ahi", IntegerOp, int_spu_si_ahi>; | |
| def CellSDKa: | |
| RR_Int_v4i32<0b00000011000, "a", IntegerOp, int_spu_si_a>; | |
| def CellSDKai: | |
| RI10_Int_v4i32<0b00111000, "ai", IntegerOp, int_spu_si_ai>; | |
| def CellSDKsfh: | |
| RR_Int_v8i16<0b00010010000, "sfh", IntegerOp, int_spu_si_sfh>; | |
| def CellSDKsfhi: | |
| RI10_Int_v8i16<0b10110000, "sfhi", IntegerOp, int_spu_si_sfhi>; | |
| def CellSDKsf: | |
| RR_Int_v4i32<0b00000010000, "sf", IntegerOp, int_spu_si_sf>; | |
| def CellSDKsfi: | |
| RI10_Int_v4i32<0b00110000, "sfi", IntegerOp, int_spu_si_sfi>; | |
| def CellSDKaddx: | |
| RR_Int_v4i32<0b00000010110, "addx", IntegerOp, int_spu_si_addx>; | |
| def CellSDKcg: | |
| RR_Int_v4i32<0b0100001100, "cg", IntegerOp, int_spu_si_cg>; | |
| def CellSDKcgx: | |
| RR_Int_v4i32<0b01000010110, "cgx", IntegerOp, int_spu_si_cgx>; | |
| def CellSDKsfx: | |
| RR_Int_v4i32<0b10000010110, "sfx", IntegerOp, int_spu_si_sfx>; | |
| def CellSDKbg: | |
| RR_Int_v4i32<0b01000010000, "bg", IntegerOp, int_spu_si_bg>; | |
| def CellSDKbgx: | |
| RR_Int_v4i32<0b11000010110, "bgx", IntegerOp, int_spu_si_bgx>; | |
| def CellSDKmpy: | |
| RRForm<0b00100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpy $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpy (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKmpyu: | |
| RRForm<0b00110011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyu $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyu (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))] >; | |
| def CellSDKmpyi: | |
| RI10Form<0b00101110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "mpyi $rT, $rA, $val", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyi (v8i16 VECREG:$rA), | |
| i16ImmSExt10:$val))]>; | |
| def CellSDKmpyui: | |
| RI10Form<0b10101110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "mpyui $rT, $rA, $val", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyui (v8i16 VECREG:$rA), | |
| i16ImmSExt10:$val))]>; | |
| def CellSDKmpya: | |
| RRRForm<0b0011, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), | |
| "mpya $rT, $rA, $rB, $rC", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpya (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB), | |
| (v8i16 VECREG:$rC)))]>; | |
| def CellSDKmpyh: | |
| RRForm<0b10100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyh $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyh (v4i32 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKmpys: | |
| RRForm<0b11100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpys $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpys (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKmpyhh: | |
| RRForm<0b01100011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyhh $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhh (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKmpyhha: | |
| RRForm<0b01100010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyhha $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhha (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| // Not sure how to match a (set $rT, (add $rT (mpyhh $rA, $rB)))... so leave | |
| // as an intrinsic for the time being | |
| def CellSDKmpyhhu: | |
| RRForm<0b01110011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyhhu $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhhu (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKmpyhhau: | |
| RRForm<0b01110010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "mpyhhau $rT, $rA, $rB", IntegerMulDiv, | |
| [(set (v4i32 VECREG:$rT), (int_spu_si_mpyhhau (v8i16 VECREG:$rA), | |
| (v8i16 VECREG:$rB)))]>; | |
| def CellSDKand: | |
| RRForm<0b1000011000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "and\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_and (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKandc: | |
| RRForm<0b10000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "andc\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_andc (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKandbi: | |
| RI10Form<0b01101000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "andbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_andbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| def CellSDKandhi: | |
| RI10Form<0b10101000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "andhi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_andhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKandi: | |
| RI10Form<0b00101000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "andi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_andi (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKor: | |
| RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "or\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_or (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKorc: | |
| RRForm<0b10010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "addc\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_orc (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKorbi: | |
| RI10Form<0b01100000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "orbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_orbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| def CellSDKorhi: | |
| RI10Form<0b10100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "orhi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_orhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKori: | |
| RI10Form<0b00100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "ori\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_ori (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKxor: | |
| RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "xor\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_xor (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKxorbi: | |
| RI10Form<0b01100000, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "xorbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), (int_spu_si_xorbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| def CellSDKxorhi: | |
| RI10Form<0b10100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "xorhi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_xorhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKxori: | |
| RI10Form<0b00100000, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "xori\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_xori (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKnor: | |
| RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "nor\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_nor (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKnand: | |
| RRForm<0b10000010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "nand\t $rT, $rA, $rB", IntegerOp, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_nand (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| //===----------------------------------------------------------------------===// | |
| // Shift/rotate intrinsics: | |
| //===----------------------------------------------------------------------===// | |
| def CellSDKshli: | |
| Pat<(int_spu_si_shli (v4i32 VECREG:$rA), uimm7:$val), | |
| (SHLIv4i32 VECREG:$rA, (TO_IMM32 imm:$val))>; | |
| def CellSDKshlqbi: | |
| Pat<(int_spu_si_shlqbi VECREG:$rA, R32C:$rB), | |
| (SHLQBIv16i8 VECREG:$rA, R32C:$rB)>; | |
| def CellSDKshlqii: | |
| Pat<(int_spu_si_shlqbii VECREG:$rA, uimm7:$val), | |
| (SHLQBIIv16i8 VECREG:$rA, (TO_IMM32 imm:$val))>; | |
| def CellSDKshlqby: | |
| Pat<(int_spu_si_shlqby VECREG:$rA, R32C:$rB), | |
| (SHLQBYv16i8 VECREG:$rA, R32C:$rB)>; | |
| def CellSDKshlqbyi: | |
| Pat<(int_spu_si_shlqbyi VECREG:$rA, uimm7:$val), | |
| (SHLQBYIv16i8 VECREG:$rA, (TO_IMM32 imm:$val))>; | |
| //===----------------------------------------------------------------------===// | |
| // Branch/compare intrinsics: | |
| //===----------------------------------------------------------------------===// | |
| def CellSDKceq: | |
| RRForm<0b00000011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "ceq\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_ceq (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKceqi: | |
| RI10Form<0b00111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "ceqi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_ceqi (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKceqb: | |
| RRForm<0b00001011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "ceqb\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_ceqb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>; | |
| def CellSDKceqbi: | |
| RI10Form<0b01111110, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "ceqbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), (int_spu_si_ceqbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| def CellSDKceqh: | |
| RRForm<0b00010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "ceqh\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_ceqh (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>; | |
| def CellSDKceqhi: | |
| RI10Form<0b10111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "ceqhi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_ceqhi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKcgth: | |
| RRForm<0b00010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "cgth\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_cgth (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>; | |
| def CellSDKcgthi: | |
| RI10Form<0b10111110, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "cgthi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_cgthi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKcgt: | |
| RRForm<0b00000010010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "cgt\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_cgt (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKcgti: | |
| RI10Form<0b00110010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "cgti\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_cgti (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKcgtb: | |
| RRForm<0b00001010010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "cgtb\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_cgtb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>; | |
| def CellSDKcgtbi: | |
| RI10Form<0b01110010, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "cgtbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), (int_spu_si_cgtbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| def CellSDKclgth: | |
| RRForm<0b00010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "clgth\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_clgth (v8i16 VECREG:$rA), (v8i16 VECREG:$rB)))]>; | |
| def CellSDKclgthi: | |
| RI10Form<0b10111010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "clgthi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v8i16 VECREG:$rT), | |
| (int_spu_si_clgthi (v8i16 VECREG:$rA), i16ImmSExt10:$val))]>; | |
| def CellSDKclgt: | |
| RRForm<0b00000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "clgt\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_clgt (v4i32 VECREG:$rA), (v4i32 VECREG:$rB)))]>; | |
| def CellSDKclgti: | |
| RI10Form<0b00111010, (outs VECREG:$rT), (ins VECREG:$rA, s10imm:$val), | |
| "clgti\t $rT, $rA, $val", BranchResolv, | |
| [(set (v4i32 VECREG:$rT), | |
| (int_spu_si_clgti (v4i32 VECREG:$rA), i32ImmSExt10:$val))]>; | |
| def CellSDKclgtb: | |
| RRForm<0b00001011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "clgtb\t $rT, $rA, $rB", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_clgtb (v16i8 VECREG:$rA), (v16i8 VECREG:$rB)))]>; | |
| def CellSDKclgtbi: | |
| RI10Form<0b01111010, (outs VECREG:$rT), (ins VECREG:$rA, u10imm_i8:$val), | |
| "clgtbi\t $rT, $rA, $val", BranchResolv, | |
| [(set (v16i8 VECREG:$rT), | |
| (int_spu_si_clgtbi (v16i8 VECREG:$rA), immU8:$val))]>; | |
| //===----------------------------------------------------------------------===// | |
| // Floating-point intrinsics: | |
| //===----------------------------------------------------------------------===// | |
| def CellSDKfa: | |
| RRForm<0b00100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fa\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fa (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfs: | |
| RRForm<0b10100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fs\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fs (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfm: | |
| RRForm<0b01100011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fm\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fm (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfceq: | |
| RRForm<0b01000011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fceq\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fceq (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfcgt: | |
| RRForm<0b01000011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fcgt\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fcgt (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfcmeq: | |
| RRForm<0b01010011110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fcmeq\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fcmeq (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfcmgt: | |
| RRForm<0b01010011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "fcmgt\t $rT, $rA, $rB", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fcmgt (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB)))]>; | |
| def CellSDKfma: | |
| RRRForm<0b0111, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), | |
| "fma\t $rT, $rA, $rB, $rC", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fma (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB), | |
| (v4f32 VECREG:$rC)))]>; | |
| def CellSDKfnms: | |
| RRRForm<0b1011, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), | |
| "fnms\t $rT, $rA, $rB, $rC", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fnms (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB), | |
| (v4f32 VECREG:$rC)))]>; | |
| def CellSDKfms: | |
| RRRForm<0b1111, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), | |
| "fms\t $rT, $rA, $rB, $rC", SPrecFP, | |
| [(set (v4f32 VECREG:$rT), (int_spu_si_fms (v4f32 VECREG:$rA), | |
| (v4f32 VECREG:$rB), | |
| (v4f32 VECREG:$rC)))]>; | |
| //===----------------------------------------------------------------------===// | |
| // Double precision floating-point intrinsics: | |
| //===----------------------------------------------------------------------===// | |
| def CellSDKdfa: | |
| RRForm<0b00110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfa\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfa (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfs: | |
| RRForm<0b10110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfs\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfs (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfm: | |
| RRForm<0b01110011010, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfm\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfm (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfma: | |
| RRForm<0b00111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfma\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfma (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfnma: | |
| RRForm<0b11111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfnma\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfnma (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfnms: | |
| RRForm<0b01111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfnms\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfnms (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; | |
| def CellSDKdfms: | |
| RRForm<0b10111010110, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), | |
| "dfms\t $rT, $rA, $rB", DPrecFP, | |
| [(set (v2f64 VECREG:$rT), (int_spu_si_dfms (v2f64 VECREG:$rA), | |
| (v2f64 VECREG:$rB)))]>; |