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//===--------------------------------------------------------------------===//
18let 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
68let 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