xref: /freebsd-src/contrib/llvm-project/clang/lib/Headers/hlsl/hlsl_intrinsics.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
181ad6265SDimitry Andric //===----- hlsl_intrinsics.h - HLSL definitions for intrinsics ----------===//
281ad6265SDimitry Andric //
381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
681ad6265SDimitry Andric //
781ad6265SDimitry Andric //===----------------------------------------------------------------------===//
881ad6265SDimitry Andric 
981ad6265SDimitry Andric #ifndef _HLSL_HLSL_INTRINSICS_H_
1081ad6265SDimitry Andric #define _HLSL_HLSL_INTRINSICS_H_
1181ad6265SDimitry Andric 
12bdd1243dSDimitry Andric namespace hlsl {
13bdd1243dSDimitry Andric 
145f757f3fSDimitry Andric // Note: Functions in this file are sorted alphabetically, then grouped by base
155f757f3fSDimitry Andric // element type, and the element types are sorted by size, then singed integer,
165f757f3fSDimitry Andric // unsigned integer and floating point. Keeping this ordering consistent will
175f757f3fSDimitry Andric // help keep this file manageable as it grows.
1881ad6265SDimitry Andric 
195f757f3fSDimitry Andric #define _HLSL_BUILTIN_ALIAS(builtin)                                           \
205f757f3fSDimitry Andric   __attribute__((clang_builtin_alias(builtin)))
21*0fca6ea1SDimitry Andric #define _HLSL_AVAILABILITY(platform, version)                                  \
22*0fca6ea1SDimitry Andric   __attribute__((availability(platform, introduced = version)))
23*0fca6ea1SDimitry Andric #define _HLSL_AVAILABILITY_STAGE(platform, version, stage)                     \
24*0fca6ea1SDimitry Andric   __attribute__((                                                              \
25*0fca6ea1SDimitry Andric       availability(platform, introduced = version, environment = stage)))
26*0fca6ea1SDimitry Andric 
27*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
28*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY(platform, version)                            \
29*0fca6ea1SDimitry Andric   __attribute__((availability(platform, introduced = version)))
30*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY_STAGE(platform, version, stage)               \
31*0fca6ea1SDimitry Andric   __attribute__((                                                              \
32*0fca6ea1SDimitry Andric       availability(platform, introduced = version, environment = stage)))
33*0fca6ea1SDimitry Andric #else
34*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY(environment, version)
35*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage)
36*0fca6ea1SDimitry Andric #endif
375f757f3fSDimitry Andric 
385f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
39bdd1243dSDimitry Andric // abs builtins
405f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
41*0fca6ea1SDimitry Andric 
42*0fca6ea1SDimitry Andric /// \fn T abs(T Val)
43*0fca6ea1SDimitry Andric /// \brief Returns the absolute value of the input value, \a Val.
44*0fca6ea1SDimitry Andric /// \param Val The input value.
45*0fca6ea1SDimitry Andric 
46bdd1243dSDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
47*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
485f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
49bdd1243dSDimitry Andric int16_t abs(int16_t);
50*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
515f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52bdd1243dSDimitry Andric int16_t2 abs(int16_t2);
53*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
545f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
55bdd1243dSDimitry Andric int16_t3 abs(int16_t3);
56*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
575f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
58bdd1243dSDimitry Andric int16_t4 abs(int16_t4);
59*0fca6ea1SDimitry Andric #endif
605f757f3fSDimitry Andric 
61*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
62*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
635f757f3fSDimitry Andric half abs(half);
64*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
66bdd1243dSDimitry Andric half2 abs(half2);
67*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
69bdd1243dSDimitry Andric half3 abs(half3);
70*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
72bdd1243dSDimitry Andric half4 abs(half4);
73bdd1243dSDimitry Andric 
745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
755f757f3fSDimitry Andric int abs(int);
765f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
775f757f3fSDimitry Andric int2 abs(int2);
785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
795f757f3fSDimitry Andric int3 abs(int3);
805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
815f757f3fSDimitry Andric int4 abs(int4);
825f757f3fSDimitry Andric 
835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
845f757f3fSDimitry Andric float abs(float);
855f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
86bdd1243dSDimitry Andric float2 abs(float2);
875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
88bdd1243dSDimitry Andric float3 abs(float3);
895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
90bdd1243dSDimitry Andric float4 abs(float4);
915f757f3fSDimitry Andric 
925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
93bdd1243dSDimitry Andric int64_t abs(int64_t);
945f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
95bdd1243dSDimitry Andric int64_t2 abs(int64_t2);
965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
97bdd1243dSDimitry Andric int64_t3 abs(int64_t3);
985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
99bdd1243dSDimitry Andric int64_t4 abs(int64_t4);
1005f757f3fSDimitry Andric 
1015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
1025f757f3fSDimitry Andric double abs(double);
1035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
104bdd1243dSDimitry Andric double2 abs(double2);
1055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
106bdd1243dSDimitry Andric double3 abs(double3);
1075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
108bdd1243dSDimitry Andric double4 abs(double4);
109bdd1243dSDimitry Andric 
1105f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
111*0fca6ea1SDimitry Andric // acos builtins
112*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
113*0fca6ea1SDimitry Andric 
114*0fca6ea1SDimitry Andric /// \fn T acos(T Val)
115*0fca6ea1SDimitry Andric /// \brief Returns the arccosine of the input value, \a Val.
116*0fca6ea1SDimitry Andric /// \param Val The input value.
117*0fca6ea1SDimitry Andric 
118*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
119*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
120*0fca6ea1SDimitry Andric half acos(half);
121*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
122*0fca6ea1SDimitry Andric half2 acos(half2);
123*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
124*0fca6ea1SDimitry Andric half3 acos(half3);
125*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
126*0fca6ea1SDimitry Andric half4 acos(half4);
127*0fca6ea1SDimitry Andric #endif
128*0fca6ea1SDimitry Andric 
129*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
130*0fca6ea1SDimitry Andric float acos(float);
131*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
132*0fca6ea1SDimitry Andric float2 acos(float2);
133*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
134*0fca6ea1SDimitry Andric float3 acos(float3);
135*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
136*0fca6ea1SDimitry Andric float4 acos(float4);
137*0fca6ea1SDimitry Andric 
138*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
139*0fca6ea1SDimitry Andric // all builtins
140*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
141*0fca6ea1SDimitry Andric 
142*0fca6ea1SDimitry Andric /// \fn bool all(T x)
143*0fca6ea1SDimitry Andric /// \brief Returns True if all components of the \a x parameter are non-zero;
144*0fca6ea1SDimitry Andric /// otherwise, false. \param x The input value.
145*0fca6ea1SDimitry Andric 
146*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
147*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
148*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
149*0fca6ea1SDimitry Andric bool all(int16_t);
150*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
151*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
152*0fca6ea1SDimitry Andric bool all(int16_t2);
153*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
154*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
155*0fca6ea1SDimitry Andric bool all(int16_t3);
156*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
157*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
158*0fca6ea1SDimitry Andric bool all(int16_t4);
159*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
160*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
161*0fca6ea1SDimitry Andric bool all(uint16_t);
162*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
163*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
164*0fca6ea1SDimitry Andric bool all(uint16_t2);
165*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
166*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
167*0fca6ea1SDimitry Andric bool all(uint16_t3);
168*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
169*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
170*0fca6ea1SDimitry Andric bool all(uint16_t4);
171*0fca6ea1SDimitry Andric #endif
172*0fca6ea1SDimitry Andric 
173*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
174*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
175*0fca6ea1SDimitry Andric bool all(half);
176*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
177*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
178*0fca6ea1SDimitry Andric bool all(half2);
179*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
180*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
181*0fca6ea1SDimitry Andric bool all(half3);
182*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
183*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
184*0fca6ea1SDimitry Andric bool all(half4);
185*0fca6ea1SDimitry Andric 
186*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
187*0fca6ea1SDimitry Andric bool all(bool);
188*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
189*0fca6ea1SDimitry Andric bool all(bool2);
190*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
191*0fca6ea1SDimitry Andric bool all(bool3);
192*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
193*0fca6ea1SDimitry Andric bool all(bool4);
194*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
195*0fca6ea1SDimitry Andric 
196*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
197*0fca6ea1SDimitry Andric bool all(int);
198*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
199*0fca6ea1SDimitry Andric bool all(int2);
200*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
201*0fca6ea1SDimitry Andric bool all(int3);
202*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
203*0fca6ea1SDimitry Andric bool all(int4);
204*0fca6ea1SDimitry Andric 
205*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
206*0fca6ea1SDimitry Andric bool all(uint);
207*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
208*0fca6ea1SDimitry Andric bool all(uint2);
209*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
210*0fca6ea1SDimitry Andric bool all(uint3);
211*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
212*0fca6ea1SDimitry Andric bool all(uint4);
213*0fca6ea1SDimitry Andric 
214*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
215*0fca6ea1SDimitry Andric bool all(float);
216*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
217*0fca6ea1SDimitry Andric bool all(float2);
218*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
219*0fca6ea1SDimitry Andric bool all(float3);
220*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
221*0fca6ea1SDimitry Andric bool all(float4);
222*0fca6ea1SDimitry Andric 
223*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
224*0fca6ea1SDimitry Andric bool all(int64_t);
225*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
226*0fca6ea1SDimitry Andric bool all(int64_t2);
227*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
228*0fca6ea1SDimitry Andric bool all(int64_t3);
229*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
230*0fca6ea1SDimitry Andric bool all(int64_t4);
231*0fca6ea1SDimitry Andric 
232*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
233*0fca6ea1SDimitry Andric bool all(uint64_t);
234*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
235*0fca6ea1SDimitry Andric bool all(uint64_t2);
236*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
237*0fca6ea1SDimitry Andric bool all(uint64_t3);
238*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
239*0fca6ea1SDimitry Andric bool all(uint64_t4);
240*0fca6ea1SDimitry Andric 
241*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
242*0fca6ea1SDimitry Andric bool all(double);
243*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
244*0fca6ea1SDimitry Andric bool all(double2);
245*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
246*0fca6ea1SDimitry Andric bool all(double3);
247*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all)
248*0fca6ea1SDimitry Andric bool all(double4);
249*0fca6ea1SDimitry Andric 
250*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
251*0fca6ea1SDimitry Andric // any builtins
252*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
253*0fca6ea1SDimitry Andric 
254*0fca6ea1SDimitry Andric /// \fn bool any(T x)
255*0fca6ea1SDimitry Andric /// \brief Returns True if any components of the \a x parameter are non-zero;
256*0fca6ea1SDimitry Andric /// otherwise, false. \param x The input value.
257*0fca6ea1SDimitry Andric 
258*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
259*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
260*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
261*0fca6ea1SDimitry Andric bool any(int16_t);
262*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
263*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
264*0fca6ea1SDimitry Andric bool any(int16_t2);
265*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
266*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
267*0fca6ea1SDimitry Andric bool any(int16_t3);
268*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
269*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
270*0fca6ea1SDimitry Andric bool any(int16_t4);
271*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
272*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
273*0fca6ea1SDimitry Andric bool any(uint16_t);
274*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
275*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
276*0fca6ea1SDimitry Andric bool any(uint16_t2);
277*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
278*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
279*0fca6ea1SDimitry Andric bool any(uint16_t3);
280*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
281*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
282*0fca6ea1SDimitry Andric bool any(uint16_t4);
283*0fca6ea1SDimitry Andric #endif
284*0fca6ea1SDimitry Andric 
285*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
286*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
287*0fca6ea1SDimitry Andric bool any(half);
288*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
289*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
290*0fca6ea1SDimitry Andric bool any(half2);
291*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
292*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
293*0fca6ea1SDimitry Andric bool any(half3);
294*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
295*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
296*0fca6ea1SDimitry Andric bool any(half4);
297*0fca6ea1SDimitry Andric 
298*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
299*0fca6ea1SDimitry Andric bool any(bool);
300*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
301*0fca6ea1SDimitry Andric bool any(bool2);
302*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
303*0fca6ea1SDimitry Andric bool any(bool3);
304*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
305*0fca6ea1SDimitry Andric bool any(bool4);
306*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
307*0fca6ea1SDimitry Andric 
308*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
309*0fca6ea1SDimitry Andric bool any(int);
310*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
311*0fca6ea1SDimitry Andric bool any(int2);
312*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
313*0fca6ea1SDimitry Andric bool any(int3);
314*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
315*0fca6ea1SDimitry Andric bool any(int4);
316*0fca6ea1SDimitry Andric 
317*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
318*0fca6ea1SDimitry Andric bool any(uint);
319*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
320*0fca6ea1SDimitry Andric bool any(uint2);
321*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
322*0fca6ea1SDimitry Andric bool any(uint3);
323*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
324*0fca6ea1SDimitry Andric bool any(uint4);
325*0fca6ea1SDimitry Andric 
326*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
327*0fca6ea1SDimitry Andric bool any(float);
328*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
329*0fca6ea1SDimitry Andric bool any(float2);
330*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
331*0fca6ea1SDimitry Andric bool any(float3);
332*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
333*0fca6ea1SDimitry Andric bool any(float4);
334*0fca6ea1SDimitry Andric 
335*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
336*0fca6ea1SDimitry Andric bool any(int64_t);
337*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
338*0fca6ea1SDimitry Andric bool any(int64_t2);
339*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
340*0fca6ea1SDimitry Andric bool any(int64_t3);
341*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
342*0fca6ea1SDimitry Andric bool any(int64_t4);
343*0fca6ea1SDimitry Andric 
344*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
345*0fca6ea1SDimitry Andric bool any(uint64_t);
346*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
347*0fca6ea1SDimitry Andric bool any(uint64_t2);
348*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
349*0fca6ea1SDimitry Andric bool any(uint64_t3);
350*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
351*0fca6ea1SDimitry Andric bool any(uint64_t4);
352*0fca6ea1SDimitry Andric 
353*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
354*0fca6ea1SDimitry Andric bool any(double);
355*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
356*0fca6ea1SDimitry Andric bool any(double2);
357*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
358*0fca6ea1SDimitry Andric bool any(double3);
359*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any)
360*0fca6ea1SDimitry Andric bool any(double4);
361*0fca6ea1SDimitry Andric 
362*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
363*0fca6ea1SDimitry Andric // asin builtins
364*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
365*0fca6ea1SDimitry Andric 
366*0fca6ea1SDimitry Andric /// \fn T asin(T Val)
367*0fca6ea1SDimitry Andric /// \brief Returns the arcsine of the input value, \a Val.
368*0fca6ea1SDimitry Andric /// \param Val The input value.
369*0fca6ea1SDimitry Andric 
370*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
371*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
372*0fca6ea1SDimitry Andric half asin(half);
373*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
374*0fca6ea1SDimitry Andric half2 asin(half2);
375*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
376*0fca6ea1SDimitry Andric half3 asin(half3);
377*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
378*0fca6ea1SDimitry Andric half4 asin(half4);
379*0fca6ea1SDimitry Andric #endif
380*0fca6ea1SDimitry Andric 
381*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
382*0fca6ea1SDimitry Andric float asin(float);
383*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
384*0fca6ea1SDimitry Andric float2 asin(float2);
385*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
386*0fca6ea1SDimitry Andric float3 asin(float3);
387*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
388*0fca6ea1SDimitry Andric float4 asin(float4);
389*0fca6ea1SDimitry Andric 
390*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
391*0fca6ea1SDimitry Andric // atan builtins
392*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
393*0fca6ea1SDimitry Andric 
394*0fca6ea1SDimitry Andric /// \fn T atan(T Val)
395*0fca6ea1SDimitry Andric /// \brief Returns the arctangent of the input value, \a Val.
396*0fca6ea1SDimitry Andric /// \param Val The input value.
397*0fca6ea1SDimitry Andric 
398*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
399*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
400*0fca6ea1SDimitry Andric half atan(half);
401*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
402*0fca6ea1SDimitry Andric half2 atan(half2);
403*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
404*0fca6ea1SDimitry Andric half3 atan(half3);
405*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
406*0fca6ea1SDimitry Andric half4 atan(half4);
407*0fca6ea1SDimitry Andric #endif
408*0fca6ea1SDimitry Andric 
409*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
410*0fca6ea1SDimitry Andric float atan(float);
411*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
412*0fca6ea1SDimitry Andric float2 atan(float2);
413*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
414*0fca6ea1SDimitry Andric float3 atan(float3);
415*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
416*0fca6ea1SDimitry Andric float4 atan(float4);
417*0fca6ea1SDimitry Andric 
418*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
419bdd1243dSDimitry Andric // ceil builtins
4205f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
421*0fca6ea1SDimitry Andric 
422*0fca6ea1SDimitry Andric /// \fn T ceil(T Val)
423*0fca6ea1SDimitry Andric /// \brief Returns the smallest integer value that is greater than or equal to
424*0fca6ea1SDimitry Andric /// the input value, \a Val.
425*0fca6ea1SDimitry Andric /// \param Val The input value.
426*0fca6ea1SDimitry Andric 
427*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
4285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
429bdd1243dSDimitry Andric half ceil(half);
430*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
4315f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
432bdd1243dSDimitry Andric half2 ceil(half2);
433*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
4345f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
435bdd1243dSDimitry Andric half3 ceil(half3);
436*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
4375f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
438bdd1243dSDimitry Andric half4 ceil(half4);
439bdd1243dSDimitry Andric 
4405f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
4415f757f3fSDimitry Andric float ceil(float);
4425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
443bdd1243dSDimitry Andric float2 ceil(float2);
4445f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
445bdd1243dSDimitry Andric float3 ceil(float3);
4465f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
447bdd1243dSDimitry Andric float4 ceil(float4);
448bdd1243dSDimitry Andric 
449*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
450*0fca6ea1SDimitry Andric // clamp builtins
451*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
452*0fca6ea1SDimitry Andric 
453*0fca6ea1SDimitry Andric /// \fn T clamp(T X, T Min, T Max)
454*0fca6ea1SDimitry Andric /// \brief Clamps the specified value \a X to the specified
455*0fca6ea1SDimitry Andric /// minimum ( \a Min) and maximum ( \a Max) range.
456*0fca6ea1SDimitry Andric /// \param X A value to clamp.
457*0fca6ea1SDimitry Andric /// \param Min The specified minimum range.
458*0fca6ea1SDimitry Andric /// \param Max The specified maximum range.
459*0fca6ea1SDimitry Andric ///
460*0fca6ea1SDimitry Andric /// Returns The clamped value for the \a X parameter.
461*0fca6ea1SDimitry Andric /// For values of -INF or INF, clamp will behave as expected.
462*0fca6ea1SDimitry Andric /// However for values of NaN, the results are undefined.
463*0fca6ea1SDimitry Andric 
464*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
465*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
466*0fca6ea1SDimitry Andric half clamp(half, half, half);
467*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
468*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
469*0fca6ea1SDimitry Andric half2 clamp(half2, half2, half2);
470*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
471*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
472*0fca6ea1SDimitry Andric half3 clamp(half3, half3, half3);
473*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
474*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
475*0fca6ea1SDimitry Andric half4 clamp(half4, half4, half4);
476*0fca6ea1SDimitry Andric 
477*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
478*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
479*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
480*0fca6ea1SDimitry Andric int16_t clamp(int16_t, int16_t, int16_t);
481*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
482*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
483*0fca6ea1SDimitry Andric int16_t2 clamp(int16_t2, int16_t2, int16_t2);
484*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
485*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
486*0fca6ea1SDimitry Andric int16_t3 clamp(int16_t3, int16_t3, int16_t3);
487*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
488*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
489*0fca6ea1SDimitry Andric int16_t4 clamp(int16_t4, int16_t4, int16_t4);
490*0fca6ea1SDimitry Andric 
491*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
492*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
493*0fca6ea1SDimitry Andric uint16_t clamp(uint16_t, uint16_t, uint16_t);
494*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
495*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
496*0fca6ea1SDimitry Andric uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2);
497*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
498*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
499*0fca6ea1SDimitry Andric uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
500*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
501*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
502*0fca6ea1SDimitry Andric uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
503*0fca6ea1SDimitry Andric #endif
504*0fca6ea1SDimitry Andric 
505*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
506*0fca6ea1SDimitry Andric int clamp(int, int, int);
507*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
508*0fca6ea1SDimitry Andric int2 clamp(int2, int2, int2);
509*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
510*0fca6ea1SDimitry Andric int3 clamp(int3, int3, int3);
511*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
512*0fca6ea1SDimitry Andric int4 clamp(int4, int4, int4);
513*0fca6ea1SDimitry Andric 
514*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
515*0fca6ea1SDimitry Andric uint clamp(uint, uint, uint);
516*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
517*0fca6ea1SDimitry Andric uint2 clamp(uint2, uint2, uint2);
518*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
519*0fca6ea1SDimitry Andric uint3 clamp(uint3, uint3, uint3);
520*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
521*0fca6ea1SDimitry Andric uint4 clamp(uint4, uint4, uint4);
522*0fca6ea1SDimitry Andric 
523*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
524*0fca6ea1SDimitry Andric int64_t clamp(int64_t, int64_t, int64_t);
525*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
526*0fca6ea1SDimitry Andric int64_t2 clamp(int64_t2, int64_t2, int64_t2);
527*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
528*0fca6ea1SDimitry Andric int64_t3 clamp(int64_t3, int64_t3, int64_t3);
529*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
530*0fca6ea1SDimitry Andric int64_t4 clamp(int64_t4, int64_t4, int64_t4);
531*0fca6ea1SDimitry Andric 
532*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
533*0fca6ea1SDimitry Andric uint64_t clamp(uint64_t, uint64_t, uint64_t);
534*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
535*0fca6ea1SDimitry Andric uint64_t2 clamp(uint64_t2, uint64_t2, uint64_t2);
536*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
537*0fca6ea1SDimitry Andric uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3);
538*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
539*0fca6ea1SDimitry Andric uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4);
540*0fca6ea1SDimitry Andric 
541*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
542*0fca6ea1SDimitry Andric float clamp(float, float, float);
543*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
544*0fca6ea1SDimitry Andric float2 clamp(float2, float2, float2);
545*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
546*0fca6ea1SDimitry Andric float3 clamp(float3, float3, float3);
547*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
548*0fca6ea1SDimitry Andric float4 clamp(float4, float4, float4);
549*0fca6ea1SDimitry Andric 
550*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
551*0fca6ea1SDimitry Andric double clamp(double, double, double);
552*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
553*0fca6ea1SDimitry Andric double2 clamp(double2, double2, double2);
554*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
555*0fca6ea1SDimitry Andric double3 clamp(double3, double3, double3);
556*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
557*0fca6ea1SDimitry Andric double4 clamp(double4, double4, double4);
558bdd1243dSDimitry Andric 
5595f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
560bdd1243dSDimitry Andric // cos builtins
5615f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
562*0fca6ea1SDimitry Andric 
563*0fca6ea1SDimitry Andric /// \fn T cos(T Val)
564*0fca6ea1SDimitry Andric /// \brief Returns the cosine of the input value, \a Val.
565*0fca6ea1SDimitry Andric /// \param Val The input value.
566*0fca6ea1SDimitry Andric 
567*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
5685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
5695f757f3fSDimitry Andric half cos(half);
570*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
5715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
572bdd1243dSDimitry Andric half2 cos(half2);
573*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
5745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
575bdd1243dSDimitry Andric half3 cos(half3);
576*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
5775f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
578bdd1243dSDimitry Andric half4 cos(half4);
579bdd1243dSDimitry Andric 
5805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
5815f757f3fSDimitry Andric float cos(float);
5825f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
583bdd1243dSDimitry Andric float2 cos(float2);
5845f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
585bdd1243dSDimitry Andric float3 cos(float3);
5865f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
587bdd1243dSDimitry Andric float4 cos(float4);
588bdd1243dSDimitry Andric 
589*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
590*0fca6ea1SDimitry Andric // cosh builtins
591*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
592*0fca6ea1SDimitry Andric 
593*0fca6ea1SDimitry Andric /// \fn T cosh(T Val)
594*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic cosine of the input value, \a Val.
595*0fca6ea1SDimitry Andric /// \param Val The input value.
596*0fca6ea1SDimitry Andric 
597*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
598*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
599*0fca6ea1SDimitry Andric half cosh(half);
600*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
601*0fca6ea1SDimitry Andric half2 cosh(half2);
602*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
603*0fca6ea1SDimitry Andric half3 cosh(half3);
604*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
605*0fca6ea1SDimitry Andric half4 cosh(half4);
606*0fca6ea1SDimitry Andric #endif
607*0fca6ea1SDimitry Andric 
608*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
609*0fca6ea1SDimitry Andric float cosh(float);
610*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
611*0fca6ea1SDimitry Andric float2 cosh(float2);
612*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
613*0fca6ea1SDimitry Andric float3 cosh(float3);
614*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
615*0fca6ea1SDimitry Andric float4 cosh(float4);
616*0fca6ea1SDimitry Andric 
617*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
618*0fca6ea1SDimitry Andric // dot product builtins
619*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
620*0fca6ea1SDimitry Andric 
621*0fca6ea1SDimitry Andric /// \fn K dot(T X, T Y)
622*0fca6ea1SDimitry Andric /// \brief Return the dot product (a scalar value) of \a X and \a Y.
623*0fca6ea1SDimitry Andric /// \param X The X input value.
624*0fca6ea1SDimitry Andric /// \param Y The Y input value.
625*0fca6ea1SDimitry Andric 
626*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
627*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
628*0fca6ea1SDimitry Andric half dot(half, half);
629*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
630*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
631*0fca6ea1SDimitry Andric half dot(half2, half2);
632*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
633*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
634*0fca6ea1SDimitry Andric half dot(half3, half3);
635*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
636*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
637*0fca6ea1SDimitry Andric half dot(half4, half4);
638*0fca6ea1SDimitry Andric 
639*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
640*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
641*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
642*0fca6ea1SDimitry Andric int16_t dot(int16_t, int16_t);
643*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
644*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
645*0fca6ea1SDimitry Andric int16_t dot(int16_t2, int16_t2);
646*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
647*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
648*0fca6ea1SDimitry Andric int16_t dot(int16_t3, int16_t3);
649*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
650*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
651*0fca6ea1SDimitry Andric int16_t dot(int16_t4, int16_t4);
652*0fca6ea1SDimitry Andric 
653*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
654*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
655*0fca6ea1SDimitry Andric uint16_t dot(uint16_t, uint16_t);
656*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
657*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
658*0fca6ea1SDimitry Andric uint16_t dot(uint16_t2, uint16_t2);
659*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
660*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
661*0fca6ea1SDimitry Andric uint16_t dot(uint16_t3, uint16_t3);
662*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
663*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
664*0fca6ea1SDimitry Andric uint16_t dot(uint16_t4, uint16_t4);
665*0fca6ea1SDimitry Andric #endif
666*0fca6ea1SDimitry Andric 
667*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
668*0fca6ea1SDimitry Andric float dot(float, float);
669*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
670*0fca6ea1SDimitry Andric float dot(float2, float2);
671*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
672*0fca6ea1SDimitry Andric float dot(float3, float3);
673*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
674*0fca6ea1SDimitry Andric float dot(float4, float4);
675*0fca6ea1SDimitry Andric 
676*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
677*0fca6ea1SDimitry Andric double dot(double, double);
678*0fca6ea1SDimitry Andric 
679*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
680*0fca6ea1SDimitry Andric int dot(int, int);
681*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
682*0fca6ea1SDimitry Andric int dot(int2, int2);
683*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
684*0fca6ea1SDimitry Andric int dot(int3, int3);
685*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
686*0fca6ea1SDimitry Andric int dot(int4, int4);
687*0fca6ea1SDimitry Andric 
688*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
689*0fca6ea1SDimitry Andric uint dot(uint, uint);
690*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
691*0fca6ea1SDimitry Andric uint dot(uint2, uint2);
692*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
693*0fca6ea1SDimitry Andric uint dot(uint3, uint3);
694*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
695*0fca6ea1SDimitry Andric uint dot(uint4, uint4);
696*0fca6ea1SDimitry Andric 
697*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
698*0fca6ea1SDimitry Andric int64_t dot(int64_t, int64_t);
699*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
700*0fca6ea1SDimitry Andric int64_t dot(int64_t2, int64_t2);
701*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
702*0fca6ea1SDimitry Andric int64_t dot(int64_t3, int64_t3);
703*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
704*0fca6ea1SDimitry Andric int64_t dot(int64_t4, int64_t4);
705*0fca6ea1SDimitry Andric 
706*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
707*0fca6ea1SDimitry Andric uint64_t dot(uint64_t, uint64_t);
708*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
709*0fca6ea1SDimitry Andric uint64_t dot(uint64_t2, uint64_t2);
710*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
711*0fca6ea1SDimitry Andric uint64_t dot(uint64_t3, uint64_t3);
712*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
713*0fca6ea1SDimitry Andric uint64_t dot(uint64_t4, uint64_t4);
714*0fca6ea1SDimitry Andric 
715*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
716*0fca6ea1SDimitry Andric // exp builtins
717*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
718*0fca6ea1SDimitry Andric 
719*0fca6ea1SDimitry Andric /// \fn T exp(T x)
720*0fca6ea1SDimitry Andric /// \brief Returns the base-e exponential, or \a e**x, of the specified value.
721*0fca6ea1SDimitry Andric /// \param x The specified input value.
722*0fca6ea1SDimitry Andric ///
723*0fca6ea1SDimitry Andric /// The return value is the base-e exponential of the \a x parameter.
724*0fca6ea1SDimitry Andric 
725*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
726*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
727*0fca6ea1SDimitry Andric half exp(half);
728*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
729*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
730*0fca6ea1SDimitry Andric half2 exp(half2);
731*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
732*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
733*0fca6ea1SDimitry Andric half3 exp(half3);
734*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
735*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
736*0fca6ea1SDimitry Andric half4 exp(half4);
737*0fca6ea1SDimitry Andric 
738*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
739*0fca6ea1SDimitry Andric float exp(float);
740*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
741*0fca6ea1SDimitry Andric float2 exp(float2);
742*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
743*0fca6ea1SDimitry Andric float3 exp(float3);
744*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
745*0fca6ea1SDimitry Andric float4 exp(float4);
746*0fca6ea1SDimitry Andric 
747*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
748*0fca6ea1SDimitry Andric // exp2 builtins
749*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
750*0fca6ea1SDimitry Andric 
751*0fca6ea1SDimitry Andric /// \fn T exp2(T x)
752*0fca6ea1SDimitry Andric /// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
753*0fca6ea1SDimitry Andric /// \param x The specified input value.
754*0fca6ea1SDimitry Andric ///
755*0fca6ea1SDimitry Andric /// The base 2 exponential of the \a x parameter.
756*0fca6ea1SDimitry Andric 
757*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
758*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
759*0fca6ea1SDimitry Andric half exp2(half);
760*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
761*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
762*0fca6ea1SDimitry Andric half2 exp2(half2);
763*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
764*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
765*0fca6ea1SDimitry Andric half3 exp2(half3);
766*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
767*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
768*0fca6ea1SDimitry Andric half4 exp2(half4);
769*0fca6ea1SDimitry Andric 
770*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
771*0fca6ea1SDimitry Andric float exp2(float);
772*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
773*0fca6ea1SDimitry Andric float2 exp2(float2);
774*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
775*0fca6ea1SDimitry Andric float3 exp2(float3);
776*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
777*0fca6ea1SDimitry Andric float4 exp2(float4);
778bdd1243dSDimitry Andric 
7795f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
7805f757f3fSDimitry Andric // floor builtins
7815f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
782*0fca6ea1SDimitry Andric 
783*0fca6ea1SDimitry Andric /// \fn T floor(T Val)
784*0fca6ea1SDimitry Andric /// \brief Returns the largest integer that is less than or equal to the input
785*0fca6ea1SDimitry Andric /// value, \a Val.
786*0fca6ea1SDimitry Andric /// \param Val The input value.
787*0fca6ea1SDimitry Andric 
788*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
7895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
7905f757f3fSDimitry Andric half floor(half);
791*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
7925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
7935f757f3fSDimitry Andric half2 floor(half2);
794*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
7955f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
7965f757f3fSDimitry Andric half3 floor(half3);
797*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
7985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
7995f757f3fSDimitry Andric half4 floor(half4);
800bdd1243dSDimitry Andric 
8015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
8025f757f3fSDimitry Andric float floor(float);
8035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
8045f757f3fSDimitry Andric float2 floor(float2);
8055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
8065f757f3fSDimitry Andric float3 floor(float3);
8075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
8085f757f3fSDimitry Andric float4 floor(float4);
809bdd1243dSDimitry Andric 
810*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
811*0fca6ea1SDimitry Andric // frac builtins
812*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
813*0fca6ea1SDimitry Andric 
814*0fca6ea1SDimitry Andric /// \fn T frac(T x)
815*0fca6ea1SDimitry Andric /// \brief Returns the fractional (or decimal) part of x. \a x parameter.
816*0fca6ea1SDimitry Andric /// \param x The specified input value.
817*0fca6ea1SDimitry Andric ///
818*0fca6ea1SDimitry Andric /// If \a the return value is greater than or equal to 0 and less than 1.
819*0fca6ea1SDimitry Andric 
820*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
821*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
822*0fca6ea1SDimitry Andric half frac(half);
823*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
824*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
825*0fca6ea1SDimitry Andric half2 frac(half2);
826*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
827*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
828*0fca6ea1SDimitry Andric half3 frac(half3);
829*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
830*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
831*0fca6ea1SDimitry Andric half4 frac(half4);
832*0fca6ea1SDimitry Andric 
833*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
834*0fca6ea1SDimitry Andric float frac(float);
835*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
836*0fca6ea1SDimitry Andric float2 frac(float2);
837*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
838*0fca6ea1SDimitry Andric float3 frac(float3);
839*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
840*0fca6ea1SDimitry Andric float4 frac(float4);
841*0fca6ea1SDimitry Andric 
842*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
843*0fca6ea1SDimitry Andric // isinf builtins
844*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
845*0fca6ea1SDimitry Andric 
846*0fca6ea1SDimitry Andric /// \fn T isinf(T x)
847*0fca6ea1SDimitry Andric /// \brief Determines if the specified value \a x  is infinite.
848*0fca6ea1SDimitry Andric /// \param x The specified input value.
849*0fca6ea1SDimitry Andric ///
850*0fca6ea1SDimitry Andric /// Returns a value of the same size as the input, with a value set
851*0fca6ea1SDimitry Andric /// to True if the x parameter is +INF or -INF. Otherwise, False.
852*0fca6ea1SDimitry Andric 
853*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
854*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
855*0fca6ea1SDimitry Andric bool isinf(half);
856*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
857*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
858*0fca6ea1SDimitry Andric bool2 isinf(half2);
859*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
860*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
861*0fca6ea1SDimitry Andric bool3 isinf(half3);
862*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
863*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
864*0fca6ea1SDimitry Andric bool4 isinf(half4);
865*0fca6ea1SDimitry Andric 
866*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
867*0fca6ea1SDimitry Andric bool isinf(float);
868*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
869*0fca6ea1SDimitry Andric bool2 isinf(float2);
870*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
871*0fca6ea1SDimitry Andric bool3 isinf(float3);
872*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
873*0fca6ea1SDimitry Andric bool4 isinf(float4);
874*0fca6ea1SDimitry Andric 
875*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
876*0fca6ea1SDimitry Andric // lerp builtins
877*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
878*0fca6ea1SDimitry Andric 
879*0fca6ea1SDimitry Andric /// \fn T lerp(T x, T y, T s)
880*0fca6ea1SDimitry Andric /// \brief Returns the linear interpolation of x to y by s.
881*0fca6ea1SDimitry Andric /// \param x [in] The first-floating point value.
882*0fca6ea1SDimitry Andric /// \param y [in] The second-floating point value.
883*0fca6ea1SDimitry Andric /// \param s [in] A value that linearly interpolates between the x parameter and
884*0fca6ea1SDimitry Andric /// the y parameter.
885*0fca6ea1SDimitry Andric ///
886*0fca6ea1SDimitry Andric /// Linear interpolation is based on the following formula: x*(1-s) + y*s which
887*0fca6ea1SDimitry Andric /// can equivalently be written as x + s(y-x).
888*0fca6ea1SDimitry Andric 
889*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
890*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
891*0fca6ea1SDimitry Andric half lerp(half, half, half);
892*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
893*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
894*0fca6ea1SDimitry Andric half2 lerp(half2, half2, half2);
895*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
896*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
897*0fca6ea1SDimitry Andric half3 lerp(half3, half3, half3);
898*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
899*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
900*0fca6ea1SDimitry Andric half4 lerp(half4, half4, half4);
901*0fca6ea1SDimitry Andric 
902*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
903*0fca6ea1SDimitry Andric float lerp(float, float, float);
904*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
905*0fca6ea1SDimitry Andric float2 lerp(float2, float2, float2);
906*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
907*0fca6ea1SDimitry Andric float3 lerp(float3, float3, float3);
908*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
909*0fca6ea1SDimitry Andric float4 lerp(float4, float4, float4);
910bdd1243dSDimitry Andric 
9115f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
91206c3fb27SDimitry Andric // log builtins
9135f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
914*0fca6ea1SDimitry Andric 
915*0fca6ea1SDimitry Andric /// \fn T log(T Val)
916*0fca6ea1SDimitry Andric /// \brief The base-e logarithm of the input value, \a Val parameter.
917*0fca6ea1SDimitry Andric /// \param Val The input value.
918*0fca6ea1SDimitry Andric ///
919*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this
920*0fca6ea1SDimitry Andric /// function returns negative infinity.
921*0fca6ea1SDimitry Andric 
922*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9235f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
9245f757f3fSDimitry Andric half log(half);
925*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9265f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
92706c3fb27SDimitry Andric half2 log(half2);
928*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9295f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
93006c3fb27SDimitry Andric half3 log(half3);
931*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9325f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
93306c3fb27SDimitry Andric half4 log(half4);
93406c3fb27SDimitry Andric 
9355f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
9365f757f3fSDimitry Andric float log(float);
9375f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
93806c3fb27SDimitry Andric float2 log(float2);
9395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
94006c3fb27SDimitry Andric float3 log(float3);
9415f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
94206c3fb27SDimitry Andric float4 log(float4);
94306c3fb27SDimitry Andric 
9445f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
94506c3fb27SDimitry Andric // log10 builtins
9465f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
947*0fca6ea1SDimitry Andric 
948*0fca6ea1SDimitry Andric /// \fn T log10(T Val)
949*0fca6ea1SDimitry Andric /// \brief The base-10 logarithm of the input value, \a Val parameter.
950*0fca6ea1SDimitry Andric /// \param Val The input value.
951*0fca6ea1SDimitry Andric ///
952*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this
953*0fca6ea1SDimitry Andric /// function returns negative infinity.
954*0fca6ea1SDimitry Andric 
955*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
95706c3fb27SDimitry Andric half log10(half);
958*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
96006c3fb27SDimitry Andric half2 log10(half2);
961*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
96306c3fb27SDimitry Andric half3 log10(half3);
964*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
96606c3fb27SDimitry Andric half4 log10(half4);
96706c3fb27SDimitry Andric 
9685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
9695f757f3fSDimitry Andric float log10(float);
9705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
97106c3fb27SDimitry Andric float2 log10(float2);
9725f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
97306c3fb27SDimitry Andric float3 log10(float3);
9745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
97506c3fb27SDimitry Andric float4 log10(float4);
97606c3fb27SDimitry Andric 
9775f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
9785f757f3fSDimitry Andric // log2 builtins
9795f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
980*0fca6ea1SDimitry Andric 
981*0fca6ea1SDimitry Andric /// \fn T log2(T Val)
982*0fca6ea1SDimitry Andric /// \brief The base-2 logarithm of the input value, \a Val parameter.
983*0fca6ea1SDimitry Andric /// \param Val The input value.
984*0fca6ea1SDimitry Andric ///
985*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this
986*0fca6ea1SDimitry Andric /// function returns negative infinity.
987*0fca6ea1SDimitry Andric 
988*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
9905f757f3fSDimitry Andric half log2(half);
991*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
9935f757f3fSDimitry Andric half2 log2(half2);
994*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9955f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
9965f757f3fSDimitry Andric half3 log2(half3);
997*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
9985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
9995f757f3fSDimitry Andric half4 log2(half4);
10005f757f3fSDimitry Andric 
10015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
10025f757f3fSDimitry Andric float log2(float);
10035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
10045f757f3fSDimitry Andric float2 log2(float2);
10055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
10065f757f3fSDimitry Andric float3 log2(float3);
10075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
10085f757f3fSDimitry Andric float4 log2(float4);
10095f757f3fSDimitry Andric 
1010*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1011*0fca6ea1SDimitry Andric // mad builtins
1012*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1013*0fca6ea1SDimitry Andric 
1014*0fca6ea1SDimitry Andric /// \fn T mad(T M, T A, T B)
1015*0fca6ea1SDimitry Andric /// \brief The result of \a M * \a A + \a B.
1016*0fca6ea1SDimitry Andric /// \param M The multiplication value.
1017*0fca6ea1SDimitry Andric /// \param A The first addition value.
1018*0fca6ea1SDimitry Andric /// \param B The second addition value.
1019*0fca6ea1SDimitry Andric 
1020*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1021*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1022*0fca6ea1SDimitry Andric half mad(half, half, half);
1023*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1024*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1025*0fca6ea1SDimitry Andric half2 mad(half2, half2, half2);
1026*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1027*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1028*0fca6ea1SDimitry Andric half3 mad(half3, half3, half3);
1029*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1030*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1031*0fca6ea1SDimitry Andric half4 mad(half4, half4, half4);
1032*0fca6ea1SDimitry Andric 
1033*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1034*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1035*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1036*0fca6ea1SDimitry Andric int16_t mad(int16_t, int16_t, int16_t);
1037*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1038*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1039*0fca6ea1SDimitry Andric int16_t2 mad(int16_t2, int16_t2, int16_t2);
1040*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1041*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1042*0fca6ea1SDimitry Andric int16_t3 mad(int16_t3, int16_t3, int16_t3);
1043*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1044*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1045*0fca6ea1SDimitry Andric int16_t4 mad(int16_t4, int16_t4, int16_t4);
1046*0fca6ea1SDimitry Andric 
1047*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1048*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1049*0fca6ea1SDimitry Andric uint16_t mad(uint16_t, uint16_t, uint16_t);
1050*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1051*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1052*0fca6ea1SDimitry Andric uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1053*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1054*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1055*0fca6ea1SDimitry Andric uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1056*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
1057*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1058*0fca6ea1SDimitry Andric uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1059*0fca6ea1SDimitry Andric #endif
1060*0fca6ea1SDimitry Andric 
1061*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1062*0fca6ea1SDimitry Andric int mad(int, int, int);
1063*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1064*0fca6ea1SDimitry Andric int2 mad(int2, int2, int2);
1065*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1066*0fca6ea1SDimitry Andric int3 mad(int3, int3, int3);
1067*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1068*0fca6ea1SDimitry Andric int4 mad(int4, int4, int4);
1069*0fca6ea1SDimitry Andric 
1070*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1071*0fca6ea1SDimitry Andric uint mad(uint, uint, uint);
1072*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1073*0fca6ea1SDimitry Andric uint2 mad(uint2, uint2, uint2);
1074*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1075*0fca6ea1SDimitry Andric uint3 mad(uint3, uint3, uint3);
1076*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1077*0fca6ea1SDimitry Andric uint4 mad(uint4, uint4, uint4);
1078*0fca6ea1SDimitry Andric 
1079*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1080*0fca6ea1SDimitry Andric int64_t mad(int64_t, int64_t, int64_t);
1081*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1082*0fca6ea1SDimitry Andric int64_t2 mad(int64_t2, int64_t2, int64_t2);
1083*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1084*0fca6ea1SDimitry Andric int64_t3 mad(int64_t3, int64_t3, int64_t3);
1085*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1086*0fca6ea1SDimitry Andric int64_t4 mad(int64_t4, int64_t4, int64_t4);
1087*0fca6ea1SDimitry Andric 
1088*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1089*0fca6ea1SDimitry Andric uint64_t mad(uint64_t, uint64_t, uint64_t);
1090*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1091*0fca6ea1SDimitry Andric uint64_t2 mad(uint64_t2, uint64_t2, uint64_t2);
1092*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1093*0fca6ea1SDimitry Andric uint64_t3 mad(uint64_t3, uint64_t3, uint64_t3);
1094*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1095*0fca6ea1SDimitry Andric uint64_t4 mad(uint64_t4, uint64_t4, uint64_t4);
1096*0fca6ea1SDimitry Andric 
1097*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1098*0fca6ea1SDimitry Andric float mad(float, float, float);
1099*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1100*0fca6ea1SDimitry Andric float2 mad(float2, float2, float2);
1101*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1102*0fca6ea1SDimitry Andric float3 mad(float3, float3, float3);
1103*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1104*0fca6ea1SDimitry Andric float4 mad(float4, float4, float4);
1105*0fca6ea1SDimitry Andric 
1106*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1107*0fca6ea1SDimitry Andric double mad(double, double, double);
1108*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1109*0fca6ea1SDimitry Andric double2 mad(double2, double2, double2);
1110*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1111*0fca6ea1SDimitry Andric double3 mad(double3, double3, double3);
1112*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1113*0fca6ea1SDimitry Andric double4 mad(double4, double4, double4);
11145f757f3fSDimitry Andric 
11155f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
11165f757f3fSDimitry Andric // max builtins
11175f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1118*0fca6ea1SDimitry Andric 
1119*0fca6ea1SDimitry Andric /// \fn T max(T X, T Y)
1120*0fca6ea1SDimitry Andric /// \brief Return the greater of \a X and \a Y.
1121*0fca6ea1SDimitry Andric /// \param X The X input value.
1122*0fca6ea1SDimitry Andric /// \param Y The Y input value.
1123*0fca6ea1SDimitry Andric 
1124*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
11255f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
112606c3fb27SDimitry Andric half max(half, half);
1127*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
11285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
112906c3fb27SDimitry Andric half2 max(half2, half2);
1130*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
11315f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
113206c3fb27SDimitry Andric half3 max(half3, half3);
1133*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
11345f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
113506c3fb27SDimitry Andric half4 max(half4, half4);
113606c3fb27SDimitry Andric 
1137*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1138*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
114006c3fb27SDimitry Andric int16_t max(int16_t, int16_t);
1141*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
114306c3fb27SDimitry Andric int16_t2 max(int16_t2, int16_t2);
1144*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11455f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
114606c3fb27SDimitry Andric int16_t3 max(int16_t3, int16_t3);
1147*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11485f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
114906c3fb27SDimitry Andric int16_t4 max(int16_t4, int16_t4);
115006c3fb27SDimitry Andric 
1151*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11525f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
115306c3fb27SDimitry Andric uint16_t max(uint16_t, uint16_t);
1154*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11555f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
115606c3fb27SDimitry Andric uint16_t2 max(uint16_t2, uint16_t2);
1157*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11585f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
115906c3fb27SDimitry Andric uint16_t3 max(uint16_t3, uint16_t3);
1160*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
11615f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
116206c3fb27SDimitry Andric uint16_t4 max(uint16_t4, uint16_t4);
116306c3fb27SDimitry Andric #endif
116406c3fb27SDimitry Andric 
11655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
11665f757f3fSDimitry Andric int max(int, int);
11675f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
116806c3fb27SDimitry Andric int2 max(int2, int2);
11695f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
117006c3fb27SDimitry Andric int3 max(int3, int3);
11715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
117206c3fb27SDimitry Andric int4 max(int4, int4);
117306c3fb27SDimitry Andric 
11745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
117506c3fb27SDimitry Andric uint max(uint, uint);
11765f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
117706c3fb27SDimitry Andric uint2 max(uint2, uint2);
11785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
117906c3fb27SDimitry Andric uint3 max(uint3, uint3);
11805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
118106c3fb27SDimitry Andric uint4 max(uint4, uint4);
118206c3fb27SDimitry Andric 
11835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
118406c3fb27SDimitry Andric int64_t max(int64_t, int64_t);
11855f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
118606c3fb27SDimitry Andric int64_t2 max(int64_t2, int64_t2);
11875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
118806c3fb27SDimitry Andric int64_t3 max(int64_t3, int64_t3);
11895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
119006c3fb27SDimitry Andric int64_t4 max(int64_t4, int64_t4);
119106c3fb27SDimitry Andric 
11925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
119306c3fb27SDimitry Andric uint64_t max(uint64_t, uint64_t);
11945f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
119506c3fb27SDimitry Andric uint64_t2 max(uint64_t2, uint64_t2);
11965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
119706c3fb27SDimitry Andric uint64_t3 max(uint64_t3, uint64_t3);
11985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
119906c3fb27SDimitry Andric uint64_t4 max(uint64_t4, uint64_t4);
120006c3fb27SDimitry Andric 
12015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
12025f757f3fSDimitry Andric float max(float, float);
12035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
120406c3fb27SDimitry Andric float2 max(float2, float2);
12055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
120606c3fb27SDimitry Andric float3 max(float3, float3);
12075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
120806c3fb27SDimitry Andric float4 max(float4, float4);
120906c3fb27SDimitry Andric 
12105f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
12115f757f3fSDimitry Andric double max(double, double);
12125f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
121306c3fb27SDimitry Andric double2 max(double2, double2);
12145f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
121506c3fb27SDimitry Andric double3 max(double3, double3);
12165f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
121706c3fb27SDimitry Andric double4 max(double4, double4);
121806c3fb27SDimitry Andric 
12195f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
122006c3fb27SDimitry Andric // min builtins
12215f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1222*0fca6ea1SDimitry Andric 
1223*0fca6ea1SDimitry Andric /// \fn T min(T X, T Y)
1224*0fca6ea1SDimitry Andric /// \brief Return the lesser of \a X and \a Y.
1225*0fca6ea1SDimitry Andric /// \param X The X input value.
1226*0fca6ea1SDimitry Andric /// \param Y The Y input value.
1227*0fca6ea1SDimitry Andric 
1228*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
12295f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
123006c3fb27SDimitry Andric half min(half, half);
1231*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
12325f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
123306c3fb27SDimitry Andric half2 min(half2, half2);
1234*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
12355f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
123606c3fb27SDimitry Andric half3 min(half3, half3);
1237*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
12385f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
123906c3fb27SDimitry Andric half4 min(half4, half4);
124006c3fb27SDimitry Andric 
1241*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1242*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12435f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
124406c3fb27SDimitry Andric int16_t min(int16_t, int16_t);
1245*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12465f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
124706c3fb27SDimitry Andric int16_t2 min(int16_t2, int16_t2);
1248*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12495f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
125006c3fb27SDimitry Andric int16_t3 min(int16_t3, int16_t3);
1251*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12525f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
125306c3fb27SDimitry Andric int16_t4 min(int16_t4, int16_t4);
125406c3fb27SDimitry Andric 
1255*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
125706c3fb27SDimitry Andric uint16_t min(uint16_t, uint16_t);
1258*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
126006c3fb27SDimitry Andric uint16_t2 min(uint16_t2, uint16_t2);
1261*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
126306c3fb27SDimitry Andric uint16_t3 min(uint16_t3, uint16_t3);
1264*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
12655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
126606c3fb27SDimitry Andric uint16_t4 min(uint16_t4, uint16_t4);
126706c3fb27SDimitry Andric #endif
126806c3fb27SDimitry Andric 
12695f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
12705f757f3fSDimitry Andric int min(int, int);
12715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
127206c3fb27SDimitry Andric int2 min(int2, int2);
12735f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
127406c3fb27SDimitry Andric int3 min(int3, int3);
12755f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
127606c3fb27SDimitry Andric int4 min(int4, int4);
127706c3fb27SDimitry Andric 
12785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
127906c3fb27SDimitry Andric uint min(uint, uint);
12805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
128106c3fb27SDimitry Andric uint2 min(uint2, uint2);
12825f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
128306c3fb27SDimitry Andric uint3 min(uint3, uint3);
12845f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
128506c3fb27SDimitry Andric uint4 min(uint4, uint4);
128606c3fb27SDimitry Andric 
12875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
12885f757f3fSDimitry Andric float min(float, float);
12895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
129006c3fb27SDimitry Andric float2 min(float2, float2);
12915f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
129206c3fb27SDimitry Andric float3 min(float3, float3);
12935f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
129406c3fb27SDimitry Andric float4 min(float4, float4);
129506c3fb27SDimitry Andric 
12965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
12975f757f3fSDimitry Andric int64_t min(int64_t, int64_t);
12985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
12995f757f3fSDimitry Andric int64_t2 min(int64_t2, int64_t2);
13005f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13015f757f3fSDimitry Andric int64_t3 min(int64_t3, int64_t3);
13025f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13035f757f3fSDimitry Andric int64_t4 min(int64_t4, int64_t4);
13045f757f3fSDimitry Andric 
13055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13065f757f3fSDimitry Andric uint64_t min(uint64_t, uint64_t);
13075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13085f757f3fSDimitry Andric uint64_t2 min(uint64_t2, uint64_t2);
13095f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13105f757f3fSDimitry Andric uint64_t3 min(uint64_t3, uint64_t3);
13115f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13125f757f3fSDimitry Andric uint64_t4 min(uint64_t4, uint64_t4);
13135f757f3fSDimitry Andric 
13145f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
13155f757f3fSDimitry Andric double min(double, double);
13165f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
131706c3fb27SDimitry Andric double2 min(double2, double2);
13185f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
131906c3fb27SDimitry Andric double3 min(double3, double3);
13205f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
132106c3fb27SDimitry Andric double4 min(double4, double4);
132206c3fb27SDimitry Andric 
13235f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
13245f757f3fSDimitry Andric // pow builtins
13255f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1326*0fca6ea1SDimitry Andric 
1327*0fca6ea1SDimitry Andric /// \fn T pow(T Val, T Pow)
1328*0fca6ea1SDimitry Andric /// \brief Return the value \a Val, raised to the power \a Pow.
1329*0fca6ea1SDimitry Andric /// \param Val The input value.
1330*0fca6ea1SDimitry Andric /// \param Pow The specified power.
1331*0fca6ea1SDimitry Andric 
1332*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
13335f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13345f757f3fSDimitry Andric half pow(half, half);
1335*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
13365f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13375f757f3fSDimitry Andric half2 pow(half2, half2);
1338*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
13395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13405f757f3fSDimitry Andric half3 pow(half3, half3);
1341*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
13425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13435f757f3fSDimitry Andric half4 pow(half4, half4);
13445f757f3fSDimitry Andric 
13455f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13465f757f3fSDimitry Andric float pow(float, float);
13475f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13485f757f3fSDimitry Andric float2 pow(float2, float2);
13495f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13505f757f3fSDimitry Andric float3 pow(float3, float3);
13515f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
13525f757f3fSDimitry Andric float4 pow(float4, float4);
13535f757f3fSDimitry Andric 
13545f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
13555f757f3fSDimitry Andric // reversebits builtins
13565f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
13575f757f3fSDimitry Andric 
1358*0fca6ea1SDimitry Andric /// \fn T reversebits(T Val)
1359*0fca6ea1SDimitry Andric /// \brief Return the value \a Val with the bit order reversed.
1360*0fca6ea1SDimitry Andric /// \param Val The input value.
1361*0fca6ea1SDimitry Andric 
1362*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1363*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
13645f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13655f757f3fSDimitry Andric uint16_t reversebits(uint16_t);
1366*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
13675f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13685f757f3fSDimitry Andric uint16_t2 reversebits(uint16_t2);
1369*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
13705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13715f757f3fSDimitry Andric uint16_t3 reversebits(uint16_t3);
1372*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2)
13735f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13745f757f3fSDimitry Andric uint16_t4 reversebits(uint16_t4);
13755f757f3fSDimitry Andric #endif
13765f757f3fSDimitry Andric 
13775f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13785f757f3fSDimitry Andric uint reversebits(uint);
13795f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13805f757f3fSDimitry Andric uint2 reversebits(uint2);
13815f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13825f757f3fSDimitry Andric uint3 reversebits(uint3);
13835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13845f757f3fSDimitry Andric uint4 reversebits(uint4);
13855f757f3fSDimitry Andric 
13865f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13875f757f3fSDimitry Andric uint64_t reversebits(uint64_t);
13885f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13895f757f3fSDimitry Andric uint64_t2 reversebits(uint64_t2);
13905f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13915f757f3fSDimitry Andric uint64_t3 reversebits(uint64_t3);
13925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
13935f757f3fSDimitry Andric uint64_t4 reversebits(uint64_t4);
13945f757f3fSDimitry Andric 
13955f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1396*0fca6ea1SDimitry Andric // rcp builtins
1397*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1398*0fca6ea1SDimitry Andric 
1399*0fca6ea1SDimitry Andric /// \fn T rcp(T x)
1400*0fca6ea1SDimitry Andric /// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1401*0fca6ea1SDimitry Andric /// \param x The specified input value.
1402*0fca6ea1SDimitry Andric ///
1403*0fca6ea1SDimitry Andric /// The return value is the reciprocal of the \a x parameter.
1404*0fca6ea1SDimitry Andric 
1405*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1406*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1407*0fca6ea1SDimitry Andric half rcp(half);
1408*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1409*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1410*0fca6ea1SDimitry Andric half2 rcp(half2);
1411*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1412*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1413*0fca6ea1SDimitry Andric half3 rcp(half3);
1414*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1415*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1416*0fca6ea1SDimitry Andric half4 rcp(half4);
1417*0fca6ea1SDimitry Andric 
1418*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1419*0fca6ea1SDimitry Andric float rcp(float);
1420*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1421*0fca6ea1SDimitry Andric float2 rcp(float2);
1422*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1423*0fca6ea1SDimitry Andric float3 rcp(float3);
1424*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1425*0fca6ea1SDimitry Andric float4 rcp(float4);
1426*0fca6ea1SDimitry Andric 
1427*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1428*0fca6ea1SDimitry Andric double rcp(double);
1429*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1430*0fca6ea1SDimitry Andric double2 rcp(double2);
1431*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1432*0fca6ea1SDimitry Andric double3 rcp(double3);
1433*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1434*0fca6ea1SDimitry Andric double4 rcp(double4);
1435*0fca6ea1SDimitry Andric 
1436*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1437*0fca6ea1SDimitry Andric // rsqrt builtins
1438*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1439*0fca6ea1SDimitry Andric 
1440*0fca6ea1SDimitry Andric /// \fn T rsqrt(T x)
1441*0fca6ea1SDimitry Andric /// \brief Returns the reciprocal of the square root of the specified value.
1442*0fca6ea1SDimitry Andric /// ie 1 / sqrt( \a x).
1443*0fca6ea1SDimitry Andric /// \param x The specified input value.
1444*0fca6ea1SDimitry Andric ///
1445*0fca6ea1SDimitry Andric /// This function uses the following formula: 1 / sqrt(x).
1446*0fca6ea1SDimitry Andric 
1447*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1448*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1449*0fca6ea1SDimitry Andric half rsqrt(half);
1450*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1451*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1452*0fca6ea1SDimitry Andric half2 rsqrt(half2);
1453*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1454*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1455*0fca6ea1SDimitry Andric half3 rsqrt(half3);
1456*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1457*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1458*0fca6ea1SDimitry Andric half4 rsqrt(half4);
1459*0fca6ea1SDimitry Andric 
1460*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1461*0fca6ea1SDimitry Andric float rsqrt(float);
1462*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1463*0fca6ea1SDimitry Andric float2 rsqrt(float2);
1464*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1465*0fca6ea1SDimitry Andric float3 rsqrt(float3);
1466*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1467*0fca6ea1SDimitry Andric float4 rsqrt(float4);
1468*0fca6ea1SDimitry Andric 
1469*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1470*0fca6ea1SDimitry Andric // round builtins
1471*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1472*0fca6ea1SDimitry Andric 
1473*0fca6ea1SDimitry Andric /// \fn T round(T x)
1474*0fca6ea1SDimitry Andric /// \brief Rounds the specified value \a x to the nearest integer.
1475*0fca6ea1SDimitry Andric /// \param x The specified input value.
1476*0fca6ea1SDimitry Andric ///
1477*0fca6ea1SDimitry Andric /// The return value is the \a x parameter, rounded to the nearest integer
1478*0fca6ea1SDimitry Andric /// within a floating-point type. Halfway cases are
1479*0fca6ea1SDimitry Andric /// rounded to the nearest even value.
1480*0fca6ea1SDimitry Andric 
1481*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1482*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1483*0fca6ea1SDimitry Andric half round(half);
1484*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1485*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1486*0fca6ea1SDimitry Andric half2 round(half2);
1487*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1488*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1489*0fca6ea1SDimitry Andric half3 round(half3);
1490*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1491*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1492*0fca6ea1SDimitry Andric half4 round(half4);
1493*0fca6ea1SDimitry Andric 
1494*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1495*0fca6ea1SDimitry Andric float round(float);
1496*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1497*0fca6ea1SDimitry Andric float2 round(float2);
1498*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1499*0fca6ea1SDimitry Andric float3 round(float3);
1500*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1501*0fca6ea1SDimitry Andric float4 round(float4);
1502*0fca6ea1SDimitry Andric 
1503*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
15045f757f3fSDimitry Andric // sin builtins
15055f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1506*0fca6ea1SDimitry Andric 
1507*0fca6ea1SDimitry Andric /// \fn T sin(T Val)
1508*0fca6ea1SDimitry Andric /// \brief Returns the sine of the input value, \a Val.
1509*0fca6ea1SDimitry Andric /// \param Val The input value.
1510*0fca6ea1SDimitry Andric 
1511*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
15125f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15135f757f3fSDimitry Andric half sin(half);
1514*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
15155f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15165f757f3fSDimitry Andric half2 sin(half2);
1517*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
15185f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15195f757f3fSDimitry Andric half3 sin(half3);
1520*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
15215f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15225f757f3fSDimitry Andric half4 sin(half4);
15235f757f3fSDimitry Andric 
15245f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15255f757f3fSDimitry Andric float sin(float);
15265f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15275f757f3fSDimitry Andric float2 sin(float2);
15285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15295f757f3fSDimitry Andric float3 sin(float3);
15305f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
15315f757f3fSDimitry Andric float4 sin(float4);
15325f757f3fSDimitry Andric 
1533*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1534*0fca6ea1SDimitry Andric // sinh builtins
1535*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1536*0fca6ea1SDimitry Andric 
1537*0fca6ea1SDimitry Andric /// \fn T sinh(T Val)
1538*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic sine of the input value, \a Val.
1539*0fca6ea1SDimitry Andric /// \param Val The input value.
1540*0fca6ea1SDimitry Andric 
1541*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1542*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1543*0fca6ea1SDimitry Andric half sinh(half);
1544*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1545*0fca6ea1SDimitry Andric half2 sinh(half2);
1546*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1547*0fca6ea1SDimitry Andric half3 sinh(half3);
1548*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1549*0fca6ea1SDimitry Andric half4 sinh(half4);
1550*0fca6ea1SDimitry Andric #endif
1551*0fca6ea1SDimitry Andric 
1552*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1553*0fca6ea1SDimitry Andric float sinh(float);
1554*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1555*0fca6ea1SDimitry Andric float2 sinh(float2);
1556*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1557*0fca6ea1SDimitry Andric float3 sinh(float3);
1558*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1559*0fca6ea1SDimitry Andric float4 sinh(float4);
15605f757f3fSDimitry Andric 
15615f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
15625f757f3fSDimitry Andric // sqrt builtins
15635f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1564*0fca6ea1SDimitry Andric 
1565*0fca6ea1SDimitry Andric /// \fn T sqrt(T Val)
1566*0fca6ea1SDimitry Andric /// \brief Returns the square root of the input value, \a Val.
1567*0fca6ea1SDimitry Andric /// \param Val The input value.
1568*0fca6ea1SDimitry Andric 
1569*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1570*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1571*0fca6ea1SDimitry Andric half sqrt(half);
1572*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1573*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1574*0fca6ea1SDimitry Andric half2 sqrt(half2);
1575*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1576*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1577*0fca6ea1SDimitry Andric half3 sqrt(half3);
1578*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1579*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1580*0fca6ea1SDimitry Andric half4 sqrt(half4);
1581*0fca6ea1SDimitry Andric 
1582*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1583*0fca6ea1SDimitry Andric float sqrt(float);
1584*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1585*0fca6ea1SDimitry Andric float2 sqrt(float2);
1586*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1587*0fca6ea1SDimitry Andric float3 sqrt(float3);
1588*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1589*0fca6ea1SDimitry Andric float4 sqrt(float4);
1590*0fca6ea1SDimitry Andric 
1591*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1592*0fca6ea1SDimitry Andric // tan builtins
1593*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1594*0fca6ea1SDimitry Andric 
1595*0fca6ea1SDimitry Andric /// \fn T tan(T Val)
1596*0fca6ea1SDimitry Andric /// \brief Returns the tangent of the input value, \a Val.
1597*0fca6ea1SDimitry Andric /// \param Val The input value.
1598*0fca6ea1SDimitry Andric 
15995f757f3fSDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1600*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1601*0fca6ea1SDimitry Andric half tan(half);
1602*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1603*0fca6ea1SDimitry Andric half2 tan(half2);
1604*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1605*0fca6ea1SDimitry Andric half3 tan(half3);
1606*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1607*0fca6ea1SDimitry Andric half4 tan(half4);
16085f757f3fSDimitry Andric #endif
16095f757f3fSDimitry Andric 
1610*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1611*0fca6ea1SDimitry Andric float tan(float);
1612*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1613*0fca6ea1SDimitry Andric float2 tan(float2);
1614*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1615*0fca6ea1SDimitry Andric float3 tan(float3);
1616*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1617*0fca6ea1SDimitry Andric float4 tan(float4);
16185f757f3fSDimitry Andric 
1619*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1620*0fca6ea1SDimitry Andric // tanh builtins
1621*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
1622*0fca6ea1SDimitry Andric 
1623*0fca6ea1SDimitry Andric /// \fn T tanh(T Val)
1624*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic tangent of the input value, \a Val.
1625*0fca6ea1SDimitry Andric /// \param Val The input value.
1626*0fca6ea1SDimitry Andric 
1627*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT
1628*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1629*0fca6ea1SDimitry Andric half tanh(half);
1630*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1631*0fca6ea1SDimitry Andric half2 tanh(half2);
1632*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1633*0fca6ea1SDimitry Andric half3 tanh(half3);
1634*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1635*0fca6ea1SDimitry Andric half4 tanh(half4);
1636*0fca6ea1SDimitry Andric #endif
1637*0fca6ea1SDimitry Andric 
1638*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1639*0fca6ea1SDimitry Andric float tanh(float);
1640*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1641*0fca6ea1SDimitry Andric float2 tanh(float2);
1642*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1643*0fca6ea1SDimitry Andric float3 tanh(float3);
1644*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1645*0fca6ea1SDimitry Andric float4 tanh(float4);
16465f757f3fSDimitry Andric 
16475f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
16485f757f3fSDimitry Andric // trunc builtins
16495f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1650*0fca6ea1SDimitry Andric 
1651*0fca6ea1SDimitry Andric /// \fn T trunc(T Val)
1652*0fca6ea1SDimitry Andric /// \brief Returns the truncated integer value of the input value, \a Val.
1653*0fca6ea1SDimitry Andric /// \param Val The input value.
1654*0fca6ea1SDimitry Andric 
1655*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
16565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16575f757f3fSDimitry Andric half trunc(half);
1658*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
16595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16605f757f3fSDimitry Andric half2 trunc(half2);
1661*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
16625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16635f757f3fSDimitry Andric half3 trunc(half3);
1664*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
16655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16665f757f3fSDimitry Andric half4 trunc(half4);
16675f757f3fSDimitry Andric 
16685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16695f757f3fSDimitry Andric float trunc(float);
16705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16715f757f3fSDimitry Andric float2 trunc(float2);
16725f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16735f757f3fSDimitry Andric float3 trunc(float3);
16745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
16755f757f3fSDimitry Andric float4 trunc(float4);
16765f757f3fSDimitry Andric 
16775f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
16785f757f3fSDimitry Andric // Wave* builtins
16795f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
1680*0fca6ea1SDimitry Andric 
1681*0fca6ea1SDimitry Andric /// \brief Counts the number of boolean variables which evaluate to true across
1682*0fca6ea1SDimitry Andric /// all active lanes in the current wave.
1683*0fca6ea1SDimitry Andric ///
1684*0fca6ea1SDimitry Andric /// \param Val The input boolean value.
1685*0fca6ea1SDimitry Andric /// \return The number of lanes for which the boolean variable evaluates to
1686*0fca6ea1SDimitry Andric /// true, across all active lanes in the current wave.
16875f757f3fSDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.0)
16885f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
1689*0fca6ea1SDimitry Andric __attribute__((convergent)) uint WaveActiveCountBits(bool Val);
1690*0fca6ea1SDimitry Andric 
1691*0fca6ea1SDimitry Andric /// \brief Returns the index of the current lane within the current wave.
1692*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.0)
1693*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
1694*0fca6ea1SDimitry Andric __attribute__((convergent)) uint WaveGetLaneIndex();
16955f757f3fSDimitry Andric 
1696bdd1243dSDimitry Andric } // namespace hlsl
169781ad6265SDimitry Andric #endif //_HLSL_HLSL_INTRINSICS_H_
1698