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