radeonsi: Fix sampler views for depth textures.
[mesa.git] / src / gallium / drivers / radeon / AMDILIntrinsics.td
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_mad_i32 : GCCBuiltin<"__amdil_imad">,
96 TernaryIntInt;
97 def int_AMDIL_mad_u32 : GCCBuiltin<"__amdil_umad">,
98 TernaryIntInt;
99 def int_AMDIL_mad : GCCBuiltin<"__amdil_mad">,
100 TernaryIntFloat;
101 def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">,
102 BinaryIntInt;
103 def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">,
104 BinaryIntInt;
105 def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">,
106 BinaryIntInt;
107 def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">,
108 BinaryIntInt;
109 def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">,
110 BinaryIntInt;
111 def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">,
112 BinaryIntInt;
113 def int_AMDIL_mad24_i32 : GCCBuiltin<"__amdil_imad24">,
114 TernaryIntInt;
115 def int_AMDIL_mad24_u32 : GCCBuiltin<"__amdil_umad24">,
116 TernaryIntInt;
117 def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">,
118 BinaryIntInt;
119 def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">,
120 BinaryIntInt;
121 def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">,
122 BinaryIntInt;
123 def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">,
124 BinaryIntInt;
125 def int_AMDIL_min : GCCBuiltin<"__amdil_min">,
126 BinaryIntFloat;
127 def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">,
128 BinaryIntInt;
129 def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">,
130 BinaryIntInt;
131 def int_AMDIL_max : GCCBuiltin<"__amdil_max">,
132 BinaryIntFloat;
133 def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">,
134 TernaryIntInt;
135 def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">,
136 TernaryIntInt;
137 def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">,
138 TernaryIntInt;
139 def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">,
140 UnaryIntFloat;
141 def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">,
142 TernaryIntFloat;
143 def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">,
144 UnaryIntFloat;
145 def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">,
146 UnaryIntFloat;
147 def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">,
148 UnaryIntFloat;
149 def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">,
150 UnaryIntFloat;
151 def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">,
152 UnaryIntFloat;
153 def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">,
154 UnaryIntFloat;
155 def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">,
156 UnaryIntFloat;
157 def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">,
158 UnaryIntFloat;
159 def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">,
160 UnaryIntFloat;
161 def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">,
162 UnaryIntFloat;
163 def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">,
164 UnaryIntFloat;
165 def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">,
166 UnaryIntFloat;
167 def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat;
168 def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat;
169 def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt;
170 def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">,
171 UnaryIntFloat;
172 def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">,
173 UnaryIntFloat;
174 def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">,
175 UnaryIntFloat;
176 def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">,
177 UnaryIntFloat;
178 def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">,
179 UnaryIntFloat;
180 def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">,
181 UnaryIntFloat;
182 def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">,
183 UnaryIntFloat;
184 def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">,
185 UnaryIntFloat;
186 def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">,
187 TernaryIntFloat;
188 def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">,
189 UnaryIntFloat;
190 def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">,
191 UnaryIntFloat;
192 def int_AMDIL_length : GCCBuiltin<"__amdil_length">,
193 UnaryIntFloat;
194 def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">,
195 TernaryIntFloat;
196 def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">,
197 Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty,
198 llvm_v4i32_ty, llvm_i32_ty], []>;
199
200 def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">,
201 Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>;
202 def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">,
203 Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>;
204 def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">,
205 Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
206 def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">,
207 ConvertIntITOF;
208 def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">,
209 ConvertIntFTOI;
210 def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">,
211 ConvertIntFTOI;
212 def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">,
213 ConvertIntFTOI;
214 def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">,
215 ConvertIntFTOI;
216 def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">,
217 ConvertIntFTOI;
218 def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">,
219 ConvertIntFTOI;
220 def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">,
221 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>;
222 def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">,
223 ConvertIntITOF;
224 def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">,
225 ConvertIntITOF;
226 def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">,
227 ConvertIntITOF;
228 def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">,
229 ConvertIntITOF;
230 def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">,
231 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
232 llvm_v2f32_ty, llvm_float_ty], []>;
233 def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">,
234 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
235 llvm_v2f32_ty], []>;
236 def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">,
237 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
238 llvm_v4f32_ty], []>;
239 def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">,
240 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
241 llvm_v4f32_ty], []>;
242 }