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
12namespace hlsl {
13
14__attribute__((availability(shadermodel, introduced = 6.0)))
15__attribute__((clang_builtin_alias(__builtin_hlsl_wave_active_count_bits))) uint
16WaveActiveCountBits(bool bBit);
17
18// abs builtins
19#ifdef __HLSL_ENABLE_16_BIT
20__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
21int16_t abs(int16_t);
22__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
23int16_t2 abs(int16_t2);
24__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
25int16_t3 abs(int16_t3);
26__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
27int16_t4 abs(int16_t4);
28__attribute__((clang_builtin_alias(__builtin_elementwise_abs))) half abs(half);
29__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
30half2 abs(half2);
31__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
32half3 abs(half3);
33__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
34half4 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
42abs(float);
43__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
44float2 abs(float2);
45__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
46float3 abs(float3);
47__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
48float4 abs(float4);
49__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
50int64_t abs(int64_t);
51__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
52int64_t2 abs(int64_t2);
53__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
54int64_t3 abs(int64_t3);
55__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
56int64_t4 abs(int64_t4);
57__attribute__((clang_builtin_alias(__builtin_elementwise_abs))) double
58abs(double);
59__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
60double2 abs(double2);
61__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
62double3 abs(double3);
63__attribute__((clang_builtin_alias(__builtin_elementwise_abs)))
64double4 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)))
77half ceil(half);
78__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
79half2 ceil(half2);
80__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
81half3 ceil(half3);
82__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
83half4 ceil(half4);
84#endif
85
86__attribute__((clang_builtin_alias(__builtin_elementwise_ceil))) float
87ceil(float);
88__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
89float2 ceil(float2);
90__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
91float3 ceil(float3);
92__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
93float4 ceil(float4);
94
95__attribute__((clang_builtin_alias(__builtin_elementwise_ceil))) double
96ceil(double);
97__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
98double2 ceil(double2);
99__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
100double3 ceil(double3);
101__attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
102double4 ceil(double4);
103
104// floor builtins
105#ifdef __HLSL_ENABLE_16_BIT
106__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
107half floor(half);
108__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
109half2 floor(half2);
110__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
111half3 floor(half3);
112__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
113half4 floor(half4);
114#endif
115
116__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) float
117floor(float);
118__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
119float2 floor(float2);
120__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
121float3 floor(float3);
122__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
123float4 floor(float4);
124
125__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) double
126floor(double);
127__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
128double2 floor(double2);
129__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
130double3 floor(double3);
131__attribute__((clang_builtin_alias(__builtin_elementwise_floor)))
132double4 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)))
138half2 cos(half2);
139__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
140half3 cos(half3);
141__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
142half4 cos(half4);
143#endif
144
145__attribute__((clang_builtin_alias(__builtin_elementwise_cos))) float
146cos(float);
147__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
148float2 cos(float2);
149__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
150float3 cos(float3);
151__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
152float4 cos(float4);
153
154__attribute__((clang_builtin_alias(__builtin_elementwise_cos))) double
155cos(double);
156__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
157double2 cos(double2);
158__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
159double3 cos(double3);
160__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
161double4 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)))
167half2 sin(half2);
168__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
169half3 sin(half3);
170__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
171half4 sin(half4);
172#endif
173
174__attribute__((clang_builtin_alias(__builtin_elementwise_sin))) float
175sin(float);
176__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
177float2 sin(float2);
178__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
179float3 sin(float3);
180__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
181float4 sin(float4);
182
183__attribute__((clang_builtin_alias(__builtin_elementwise_sin))) double
184sin(double);
185__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
186double2 sin(double2);
187__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
188double3 sin(double3);
189__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
190double4 sin(double4);
191
192// trunc builtins
193#ifdef __HLSL_ENABLE_16_BIT
194__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
195half trunc(half);
196__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
197half2 trunc(half2);
198__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
199half3 trunc(half3);
200__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
201half4 trunc(half4);
202#endif
203
204__attribute__((clang_builtin_alias(__builtin_elementwise_trunc))) float
205trunc(float);
206__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
207float2 trunc(float2);
208__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
209float3 trunc(float3);
210__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
211float4 trunc(float4);
212
213__attribute__((clang_builtin_alias(__builtin_elementwise_trunc))) double
214trunc(double);
215__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
216double2 trunc(double2);
217__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
218double3 trunc(double3);
219__attribute__((clang_builtin_alias(__builtin_elementwise_trunc)))
220double4 trunc(double4);
221
222} // namespace hlsl
223#endif //_HLSL_HLSL_INTRINSICS_H_
224