xref: /openbsd-src/gnu/llvm/clang/lib/Headers/hlsl/hlsl_intrinsics.h (revision 12c855180aad702bbcca06e0398d774beeafb155)
1*12c85518Srobert //===----- hlsl_intrinsics.h - HLSL definitions for intrinsics ----------===//
2*12c85518Srobert //
3*12c85518Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*12c85518Srobert // See https://llvm.org/LICENSE.txt for license information.
5*12c85518Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*12c85518Srobert //
7*12c85518Srobert //===----------------------------------------------------------------------===//
8*12c85518Srobert 
9*12c85518Srobert #ifndef _HLSL_HLSL_INTRINSICS_H_
10*12c85518Srobert #define _HLSL_HLSL_INTRINSICS_H_
11*12c85518Srobert 
12*12c85518Srobert namespace hlsl {
13*12c85518Srobert 
14*12c85518Srobert __attribute__((availability(shadermodel, introduced = 6.0)))
15*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_hlsl_wave_active_count_bits))) uint
16*12c85518Srobert WaveActiveCountBits(bool bBit);
17*12c85518Srobert 
18*12c85518Srobert // abs builtins
19*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
20*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
21*12c85518Srobert int16_t abs(int16_t);
22*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
23*12c85518Srobert int16_t2 abs(int16_t2);
24*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
25*12c85518Srobert int16_t3 abs(int16_t3);
26*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
27*12c85518Srobert int16_t4 abs(int16_t4);
28*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) half abs(half);
29*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
30*12c85518Srobert half2 abs(half2);
31*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
32*12c85518Srobert half3 abs(half3);
33*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
34*12c85518Srobert half4 abs(half4);
35*12c85518Srobert #endif
36*12c85518Srobert 
37*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) int abs(int);
38*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) int2 abs(int2);
39*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) int3 abs(int3);
40*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) int4 abs(int4);
41*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) float
42*12c85518Srobert abs(float);
43*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
44*12c85518Srobert float2 abs(float2);
45*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
46*12c85518Srobert float3 abs(float3);
47*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
48*12c85518Srobert float4 abs(float4);
49*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
50*12c85518Srobert int64_t abs(int64_t);
51*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
52*12c85518Srobert int64_t2 abs(int64_t2);
53*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
54*12c85518Srobert int64_t3 abs(int64_t3);
55*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
56*12c85518Srobert int64_t4 abs(int64_t4);
57*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) double
58*12c85518Srobert abs(double);
59*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
60*12c85518Srobert double2 abs(double2);
61*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
62*12c85518Srobert double3 abs(double3);
63*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
64*12c85518Srobert double4 abs(double4);
65*12c85518Srobert 
66*12c85518Srobert // sqrt builtins
67*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_sqrt))) double sqrt(double In);
68*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_sqrtf))) float sqrt(float In);
69*12c85518Srobert 
70*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
71*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_sqrtf16))) half sqrt(half In);
72*12c85518Srobert #endif
73*12c85518Srobert 
74*12c85518Srobert // ceil builtins
75*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
76*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
77*12c85518Srobert half ceil(half);
78*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
79*12c85518Srobert half2 ceil(half2);
80*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
81*12c85518Srobert half3 ceil(half3);
82*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
83*12c85518Srobert half4 ceil(half4);
84*12c85518Srobert #endif
85*12c85518Srobert 
86*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil))) float
87*12c85518Srobert ceil(float);
88*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
89*12c85518Srobert float2 ceil(float2);
90*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
91*12c85518Srobert float3 ceil(float3);
92*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
93*12c85518Srobert float4 ceil(float4);
94*12c85518Srobert 
95*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil))) double
96*12c85518Srobert ceil(double);
97*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
98*12c85518Srobert double2 ceil(double2);
99*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
100*12c85518Srobert double3 ceil(double3);
101*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
102*12c85518Srobert double4 ceil(double4);
103*12c85518Srobert 
104*12c85518Srobert // floor builtins
105*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
106*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
107*12c85518Srobert half floor(half);
108*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
109*12c85518Srobert half2 floor(half2);
110*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
111*12c85518Srobert half3 floor(half3);
112*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
113*12c85518Srobert half4 floor(half4);
114*12c85518Srobert #endif
115*12c85518Srobert 
116*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor))) float
117*12c85518Srobert floor(float);
118*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
119*12c85518Srobert float2 floor(float2);
120*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
121*12c85518Srobert float3 floor(float3);
122*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
123*12c85518Srobert float4 floor(float4);
124*12c85518Srobert 
125*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor))) double
126*12c85518Srobert floor(double);
127*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
128*12c85518Srobert double2 floor(double2);
129*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
130*12c85518Srobert double3 floor(double3);
131*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
132*12c85518Srobert double4 floor(double4);
133*12c85518Srobert 
134*12c85518Srobert // cos builtins
135*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
136*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos))) half cos(half);
137*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
138*12c85518Srobert half2 cos(half2);
139*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
140*12c85518Srobert half3 cos(half3);
141*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
142*12c85518Srobert half4 cos(half4);
143*12c85518Srobert #endif
144*12c85518Srobert 
145*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos))) float
146*12c85518Srobert cos(float);
147*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
148*12c85518Srobert float2 cos(float2);
149*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
150*12c85518Srobert float3 cos(float3);
151*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
152*12c85518Srobert float4 cos(float4);
153*12c85518Srobert 
154*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos))) double
155*12c85518Srobert cos(double);
156*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
157*12c85518Srobert double2 cos(double2);
158*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
159*12c85518Srobert double3 cos(double3);
160*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
161*12c85518Srobert double4 cos(double4);
162*12c85518Srobert 
163*12c85518Srobert // sin builtins
164*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
165*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin))) half sin(half);
166*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
167*12c85518Srobert half2 sin(half2);
168*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
169*12c85518Srobert half3 sin(half3);
170*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
171*12c85518Srobert half4 sin(half4);
172*12c85518Srobert #endif
173*12c85518Srobert 
174*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin))) float
175*12c85518Srobert sin(float);
176*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
177*12c85518Srobert float2 sin(float2);
178*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
179*12c85518Srobert float3 sin(float3);
180*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
181*12c85518Srobert float4 sin(float4);
182*12c85518Srobert 
183*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin))) double
184*12c85518Srobert sin(double);
185*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
186*12c85518Srobert double2 sin(double2);
187*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
188*12c85518Srobert double3 sin(double3);
189*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
190*12c85518Srobert double4 sin(double4);
191*12c85518Srobert 
192*12c85518Srobert // trunc builtins
193*12c85518Srobert #ifdef __HLSL_ENABLE_16_BIT
194*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
195*12c85518Srobert half trunc(half);
196*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
197*12c85518Srobert half2 trunc(half2);
198*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
199*12c85518Srobert half3 trunc(half3);
200*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
201*12c85518Srobert half4 trunc(half4);
202*12c85518Srobert #endif
203*12c85518Srobert 
204*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc))) float
205*12c85518Srobert trunc(float);
206*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
207*12c85518Srobert float2 trunc(float2);
208*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
209*12c85518Srobert float3 trunc(float3);
210*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
211*12c85518Srobert float4 trunc(float4);
212*12c85518Srobert 
213*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc))) double
214*12c85518Srobert trunc(double);
215*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
216*12c85518Srobert double2 trunc(double2);
217*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
218*12c85518Srobert double3 trunc(double3);
219*12c85518Srobert __attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
220*12c85518Srobert double4 trunc(double4);
221*12c85518Srobert 
222*12c85518Srobert } // namespace hlsl
223*12c85518Srobert #endif //_HLSL_HLSL_INTRINSICS_H_
224