Home | History | Annotate | Download | only in R600
      1 //===- AMDILIntrinsics.td - Defines AMDIL Intrinscs -*- 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 // This file defines all of the amdil-specific intrinsics
     11 //
     12 //===---------------------------------------------------------------===//
     13 //===--------------------------------------------------------------------===//
     14 // Intrinsic classes
     15 // Generic versions of the above classes but for Target specific intrinsics
     16 // instead of SDNode patterns.
     17 //===--------------------------------------------------------------------===//
     18 let TargetPrefix = "AMDIL", isTarget = 1 in {
     19      class VoidIntLong :
     20           Intrinsic<[llvm_i64_ty], [], []>;
     21      class VoidIntInt :
     22           Intrinsic<[llvm_i32_ty], [], []>;
     23      class VoidIntBool :
     24           Intrinsic<[llvm_i32_ty], [], []>;
     25      class UnaryIntInt :
     26           Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>], [IntrNoMem]>;
     27      class UnaryIntFloat :
     28           Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]>;
     29      class ConvertIntFTOI :
     30           Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty], [IntrNoMem]>;
     31      class ConvertIntITOF :
     32           Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty], [IntrNoMem]>;
     33      class UnaryIntNoRetInt :
     34           Intrinsic<[], [llvm_anyint_ty], []>;
     35      class UnaryIntNoRetFloat :
     36           Intrinsic<[], [llvm_anyfloat_ty], []>;
     37      class BinaryIntInt :
     38           Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
     39      class BinaryIntFloat :
     40           Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
     41      class BinaryIntNoRetInt :
     42           Intrinsic<[], [llvm_anyint_ty, LLVMMatchType<0>], []>;
     43      class BinaryIntNoRetFloat :
     44           Intrinsic<[], [llvm_anyfloat_ty, LLVMMatchType<0>], []>;
     45      class TernaryIntInt :
     46           Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
     47           LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
     48      class TernaryIntFloat :
     49           Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>,
     50           LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
     51      class QuaternaryIntInt :
     52           Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
     53           LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
     54      class UnaryAtomicInt :
     55           Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
     56      class BinaryAtomicInt :
     57           Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
     58      class TernaryAtomicInt :
     59           Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
     60      class UnaryAtomicIntNoRet :
     61           Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
     62      class BinaryAtomicIntNoRet :
     63           Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
     64      class TernaryAtomicIntNoRet :
     65           Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
     66 }
     67 
     68 let TargetPrefix = "AMDIL", isTarget = 1 in {
     69   def int_AMDIL_abs : GCCBuiltin<"__amdil_abs">, UnaryIntInt;
     70 
     71   def int_AMDIL_bit_extract_i32 : GCCBuiltin<"__amdil_ibit_extract">,
     72           TernaryIntInt;
     73   def int_AMDIL_bit_extract_u32 : GCCBuiltin<"__amdil_ubit_extract">,
     74           TernaryIntInt;
     75   def int_AMDIL_bit_reverse_u32 : GCCBuiltin<"__amdil_ubit_reverse">,
     76           UnaryIntInt;
     77   def int_AMDIL_bit_count_i32 : GCCBuiltin<"__amdil_count_bits">,
     78           UnaryIntInt;
     79   def int_AMDIL_bit_find_first_lo : GCCBuiltin<"__amdil_ffb_lo">,
     80           UnaryIntInt;
     81   def int_AMDIL_bit_find_first_hi : GCCBuiltin<"__amdil_ffb_hi">,
     82           UnaryIntInt;
     83   def int_AMDIL_bit_find_first_sgn : GCCBuiltin<"__amdil_ffb_signed">,
     84           UnaryIntInt;
     85   def int_AMDIL_media_bitalign : GCCBuiltin<"__amdil_bitalign">,
     86                     TernaryIntInt;
     87   def int_AMDIL_media_bytealign : GCCBuiltin<"__amdil_bytealign">,
     88                     TernaryIntInt;
     89   def int_AMDIL_bit_insert_u32 : GCCBuiltin<"__amdil_ubit_insert">,
     90                     QuaternaryIntInt;
     91   def int_AMDIL_bfi : GCCBuiltin<"__amdil_bfi">,
     92       TernaryIntInt;
     93   def int_AMDIL_bfm : GCCBuiltin<"__amdil_bfm">,
     94       BinaryIntInt;
     95   def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">,
     96           BinaryIntInt;
     97   def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">,
     98           BinaryIntInt;
     99   def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">,
    100           BinaryIntInt;
    101   def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">,
    102           BinaryIntInt;
    103   def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">,
    104           BinaryIntInt;
    105   def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">,
    106           BinaryIntInt;
    107   def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">,
    108           BinaryIntInt;
    109   def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">,
    110           BinaryIntInt;
    111   def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">,
    112           BinaryIntInt;
    113   def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">,
    114           BinaryIntInt;
    115   def int_AMDIL_min     : GCCBuiltin<"__amdil_min">,
    116           BinaryIntFloat;
    117   def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">,
    118           BinaryIntInt;
    119   def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">,
    120           BinaryIntInt;
    121   def int_AMDIL_max     : GCCBuiltin<"__amdil_max">,
    122           BinaryIntFloat;
    123   def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">,
    124           TernaryIntInt;
    125   def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">,
    126           TernaryIntInt;
    127   def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">,
    128           TernaryIntInt;
    129   def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">,
    130           UnaryIntFloat;
    131   def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">,
    132           TernaryIntFloat;
    133   def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">,
    134           UnaryIntFloat;
    135   def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">,
    136           UnaryIntFloat;
    137   def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">,
    138           UnaryIntFloat;
    139   def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">,
    140           UnaryIntFloat;
    141   def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">,
    142           UnaryIntFloat;
    143   def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">,
    144           UnaryIntFloat;
    145   def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">,
    146           UnaryIntFloat;
    147   def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">,
    148           UnaryIntFloat;
    149   def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">,
    150           UnaryIntFloat;
    151   def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">,
    152           UnaryIntFloat;
    153   def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">,
    154           UnaryIntFloat;
    155   def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">,
    156           UnaryIntFloat;
    157   def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat;
    158   def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat;
    159   def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt;
    160   def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">,
    161           UnaryIntFloat;
    162   def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">,
    163           UnaryIntFloat;
    164   def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">,
    165           UnaryIntFloat;
    166   def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">,
    167           UnaryIntFloat;
    168   def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">,
    169           UnaryIntFloat;
    170   def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">,
    171           UnaryIntFloat;
    172   def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">,
    173           UnaryIntFloat;
    174   def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">,
    175           UnaryIntFloat;
    176   def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">,
    177           TernaryIntFloat;
    178   def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">,
    179           UnaryIntFloat;
    180   def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">,
    181           UnaryIntFloat;
    182   def int_AMDIL_length : GCCBuiltin<"__amdil_length">,
    183           UnaryIntFloat;
    184   def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">,
    185           TernaryIntFloat;
    186   def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">,
    187       Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty,
    188            llvm_v4i32_ty, llvm_i32_ty], []>;
    189 
    190   def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">,
    191         Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>;
    192  def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">,
    193     Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>;
    194   def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">,
    195       Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
    196   def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">,
    197       ConvertIntITOF;
    198   def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">,
    199       ConvertIntFTOI;
    200   def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">,
    201       ConvertIntFTOI;
    202   def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">,
    203       ConvertIntFTOI;
    204   def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">,
    205       ConvertIntFTOI;
    206   def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">,
    207       ConvertIntFTOI;
    208   def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">,
    209       ConvertIntFTOI;
    210  def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">,
    211       Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>;
    212   def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">,
    213       ConvertIntITOF;
    214   def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">,
    215       ConvertIntITOF;
    216   def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">,
    217       ConvertIntITOF;
    218   def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">,
    219       ConvertIntITOF;
    220   def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">,
    221         Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
    222           llvm_v2f32_ty, llvm_float_ty], []>;
    223   def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">,
    224         Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
    225           llvm_v2f32_ty], []>;
    226   def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">,
    227         Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
    228           llvm_v4f32_ty], []>;
    229   def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">,
    230         Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
    231           llvm_v4f32_ty], []>;
    232 }
    233