Tom Stellard | f98f2ce | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 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; |
Tom Stellard | f98f2ce | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 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; |
Tom Stellard | f98f2ce | 2012-12-11 21:25:42 +0000 | [diff] [blame] | 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 | } |