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// Note: Functions in this file are sorted alphabetically, then grouped by base
15// element type, and the element types are sorted by size, then singed integer,
16// unsigned integer and floating point. Keeping this ordering consistent will
17// help keep this file manageable as it grows.
18
19#define _HLSL_BUILTIN_ALIAS(builtin)                                           \
20  __attribute__((clang_builtin_alias(builtin)))
21#define _HLSL_AVAILABILITY(environment, version)                               \
22  __attribute__((availability(environment, introduced = version)))
23
24//===----------------------------------------------------------------------===//
25// abs builtins
26//===----------------------------------------------------------------------===//
27#ifdef __HLSL_ENABLE_16_BIT
28_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
29int16_t abs(int16_t);
30_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
31int16_t2 abs(int16_t2);
32_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
33int16_t3 abs(int16_t3);
34_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
35int16_t4 abs(int16_t4);
36_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
37
38half abs(half);
39_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
40half2 abs(half2);
41_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
42half3 abs(half3);
43_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
44half4 abs(half4);
45#endif
46
47_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
48int abs(int);
49_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
50int2 abs(int2);
51_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52int3 abs(int3);
53_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
54int4 abs(int4);
55
56_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
57float abs(float);
58_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
59float2 abs(float2);
60_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
61float3 abs(float3);
62_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
63float4 abs(float4);
64
65_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
66int64_t abs(int64_t);
67_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
68int64_t2 abs(int64_t2);
69_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
70int64_t3 abs(int64_t3);
71_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
72int64_t4 abs(int64_t4);
73
74_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
75double abs(double);
76_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
77double2 abs(double2);
78_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
79double3 abs(double3);
80_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
81double4 abs(double4);
82
83//===----------------------------------------------------------------------===//
84// ceil builtins
85//===----------------------------------------------------------------------===//
86#ifdef __HLSL_ENABLE_16_BIT
87_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
88half ceil(half);
89_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
90half2 ceil(half2);
91_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
92half3 ceil(half3);
93_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
94half4 ceil(half4);
95#endif
96
97_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
98float ceil(float);
99_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
100float2 ceil(float2);
101_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
102float3 ceil(float3);
103_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
104float4 ceil(float4);
105
106_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
107double ceil(double);
108_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
109double2 ceil(double2);
110_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
111double3 ceil(double3);
112_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
113double4 ceil(double4);
114
115//===----------------------------------------------------------------------===//
116// cos builtins
117//===----------------------------------------------------------------------===//
118#ifdef __HLSL_ENABLE_16_BIT
119_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
120half cos(half);
121_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
122half2 cos(half2);
123_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
124half3 cos(half3);
125_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
126half4 cos(half4);
127#endif
128
129_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
130float cos(float);
131_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
132float2 cos(float2);
133_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
134float3 cos(float3);
135_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
136float4 cos(float4);
137
138_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
139double cos(double);
140_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
141double2 cos(double2);
142_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
143double3 cos(double3);
144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
145double4 cos(double4);
146
147//===----------------------------------------------------------------------===//
148// floor builtins
149//===----------------------------------------------------------------------===//
150#ifdef __HLSL_ENABLE_16_BIT
151_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
152half floor(half);
153_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
154half2 floor(half2);
155_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
156half3 floor(half3);
157_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
158half4 floor(half4);
159#endif
160
161_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
162float floor(float);
163_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
164float2 floor(float2);
165_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
166float3 floor(float3);
167_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
168float4 floor(float4);
169
170_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
171double floor(double);
172_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
173double2 floor(double2);
174_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
175double3 floor(double3);
176_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
177double4 floor(double4);
178
179//===----------------------------------------------------------------------===//
180// log builtins
181//===----------------------------------------------------------------------===//
182#ifdef __HLSL_ENABLE_16_BIT
183_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
184half log(half);
185_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
186half2 log(half2);
187_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
188half3 log(half3);
189_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
190half4 log(half4);
191#endif
192
193_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
194float log(float);
195_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
196float2 log(float2);
197_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
198float3 log(float3);
199_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
200float4 log(float4);
201
202_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
203double log(double);
204_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
205double2 log(double2);
206_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
207double3 log(double3);
208_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
209double4 log(double4);
210
211//===----------------------------------------------------------------------===//
212// log10 builtins
213//===----------------------------------------------------------------------===//
214#ifdef __HLSL_ENABLE_16_BIT
215_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
216half log10(half);
217_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
218half2 log10(half2);
219_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
220half3 log10(half3);
221_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
222half4 log10(half4);
223#endif
224
225_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
226float log10(float);
227_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
228float2 log10(float2);
229_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
230float3 log10(float3);
231_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
232float4 log10(float4);
233
234_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
235double log10(double);
236_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
237double2 log10(double2);
238_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
239double3 log10(double3);
240_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
241double4 log10(double4);
242
243//===----------------------------------------------------------------------===//
244// log2 builtins
245//===----------------------------------------------------------------------===//
246#ifdef __HLSL_ENABLE_16_BIT
247_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
248half log2(half);
249_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
250half2 log2(half2);
251_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
252half3 log2(half3);
253_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
254half4 log2(half4);
255#endif
256
257_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
258float log2(float);
259_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
260float2 log2(float2);
261_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
262float3 log2(float3);
263_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
264float4 log2(float4);
265
266_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
267double log2(double);
268_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
269double2 log2(double2);
270_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
271double3 log2(double3);
272_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
273double4 log2(double4);
274
275//===----------------------------------------------------------------------===//
276// max builtins
277//===----------------------------------------------------------------------===//
278#ifdef __HLSL_ENABLE_16_BIT
279_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
280half max(half, half);
281_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
282half2 max(half2, half2);
283_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
284half3 max(half3, half3);
285_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
286half4 max(half4, half4);
287
288_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
289int16_t max(int16_t, int16_t);
290_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
291int16_t2 max(int16_t2, int16_t2);
292_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
293int16_t3 max(int16_t3, int16_t3);
294_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
295int16_t4 max(int16_t4, int16_t4);
296
297_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
298uint16_t max(uint16_t, uint16_t);
299_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
300uint16_t2 max(uint16_t2, uint16_t2);
301_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
302uint16_t3 max(uint16_t3, uint16_t3);
303_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
304uint16_t4 max(uint16_t4, uint16_t4);
305#endif
306
307_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
308int max(int, int);
309_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
310int2 max(int2, int2);
311_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
312int3 max(int3, int3);
313_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
314int4 max(int4, int4);
315
316_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
317uint max(uint, uint);
318_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
319uint2 max(uint2, uint2);
320_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
321uint3 max(uint3, uint3);
322_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
323uint4 max(uint4, uint4);
324
325_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
326int64_t max(int64_t, int64_t);
327_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
328int64_t2 max(int64_t2, int64_t2);
329_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
330int64_t3 max(int64_t3, int64_t3);
331_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
332int64_t4 max(int64_t4, int64_t4);
333
334_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
335uint64_t max(uint64_t, uint64_t);
336_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
337uint64_t2 max(uint64_t2, uint64_t2);
338_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
339uint64_t3 max(uint64_t3, uint64_t3);
340_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
341uint64_t4 max(uint64_t4, uint64_t4);
342
343_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
344float max(float, float);
345_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
346float2 max(float2, float2);
347_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
348float3 max(float3, float3);
349_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
350float4 max(float4, float4);
351
352_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
353double max(double, double);
354_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
355double2 max(double2, double2);
356_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
357double3 max(double3, double3);
358_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
359double4 max(double4, double4);
360
361//===----------------------------------------------------------------------===//
362// min builtins
363//===----------------------------------------------------------------------===//
364#ifdef __HLSL_ENABLE_16_BIT
365_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
366half min(half, half);
367_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
368half2 min(half2, half2);
369_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
370half3 min(half3, half3);
371_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
372half4 min(half4, half4);
373
374_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
375int16_t min(int16_t, int16_t);
376_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
377int16_t2 min(int16_t2, int16_t2);
378_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
379int16_t3 min(int16_t3, int16_t3);
380_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
381int16_t4 min(int16_t4, int16_t4);
382
383_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
384uint16_t min(uint16_t, uint16_t);
385_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
386uint16_t2 min(uint16_t2, uint16_t2);
387_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
388uint16_t3 min(uint16_t3, uint16_t3);
389_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
390uint16_t4 min(uint16_t4, uint16_t4);
391#endif
392
393_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
394int min(int, int);
395_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
396int2 min(int2, int2);
397_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
398int3 min(int3, int3);
399_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
400int4 min(int4, int4);
401
402_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
403uint min(uint, uint);
404_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
405uint2 min(uint2, uint2);
406_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
407uint3 min(uint3, uint3);
408_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
409uint4 min(uint4, uint4);
410
411_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
412float min(float, float);
413_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
414float2 min(float2, float2);
415_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
416float3 min(float3, float3);
417_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
418float4 min(float4, float4);
419
420_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
421int64_t min(int64_t, int64_t);
422_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
423int64_t2 min(int64_t2, int64_t2);
424_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
425int64_t3 min(int64_t3, int64_t3);
426_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
427int64_t4 min(int64_t4, int64_t4);
428
429_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
430uint64_t min(uint64_t, uint64_t);
431_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
432uint64_t2 min(uint64_t2, uint64_t2);
433_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
434uint64_t3 min(uint64_t3, uint64_t3);
435_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
436uint64_t4 min(uint64_t4, uint64_t4);
437
438_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
439double min(double, double);
440_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
441double2 min(double2, double2);
442_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
443double3 min(double3, double3);
444_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
445double4 min(double4, double4);
446
447//===----------------------------------------------------------------------===//
448// pow builtins
449//===----------------------------------------------------------------------===//
450#ifdef __HLSL_ENABLE_16_BIT
451_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
452half pow(half, half);
453_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
454half2 pow(half2, half2);
455_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
456half3 pow(half3, half3);
457_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
458half4 pow(half4, half4);
459#endif
460
461_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
462float pow(float, float);
463_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
464float2 pow(float2, float2);
465_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
466float3 pow(float3, float3);
467_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
468float4 pow(float4, float4);
469
470_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
471double pow(double, double);
472_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
473double2 pow(double2, double2);
474_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
475double3 pow(double3, double3);
476_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
477double4 pow(double4, double4);
478
479//===----------------------------------------------------------------------===//
480// reversebits builtins
481//===----------------------------------------------------------------------===//
482#ifdef __HLSL_ENABLE_16_BIT
483_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
484int16_t reversebits(int16_t);
485_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
486int16_t2 reversebits(int16_t2);
487_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
488int16_t3 reversebits(int16_t3);
489_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
490int16_t4 reversebits(int16_t4);
491
492_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
493uint16_t reversebits(uint16_t);
494_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
495uint16_t2 reversebits(uint16_t2);
496_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
497uint16_t3 reversebits(uint16_t3);
498_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
499uint16_t4 reversebits(uint16_t4);
500#endif
501
502_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
503int reversebits(int);
504_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
505int2 reversebits(int2);
506_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
507int3 reversebits(int3);
508_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
509int4 reversebits(int4);
510
511_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
512uint reversebits(uint);
513_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
514uint2 reversebits(uint2);
515_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
516uint3 reversebits(uint3);
517_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
518uint4 reversebits(uint4);
519
520_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
521int64_t reversebits(int64_t);
522_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
523int64_t2 reversebits(int64_t2);
524_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
525int64_t3 reversebits(int64_t3);
526_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
527int64_t4 reversebits(int64_t4);
528
529_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
530uint64_t reversebits(uint64_t);
531_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
532uint64_t2 reversebits(uint64_t2);
533_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
534uint64_t3 reversebits(uint64_t3);
535_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
536uint64_t4 reversebits(uint64_t4);
537
538//===----------------------------------------------------------------------===//
539// sin builtins
540//===----------------------------------------------------------------------===//
541#ifdef __HLSL_ENABLE_16_BIT
542_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
543half sin(half);
544_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
545half2 sin(half2);
546_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
547half3 sin(half3);
548_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
549half4 sin(half4);
550#endif
551
552_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
553float sin(float);
554_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
555float2 sin(float2);
556_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
557float3 sin(float3);
558_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
559float4 sin(float4);
560
561_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
562double sin(double);
563_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
564double2 sin(double2);
565_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
566double3 sin(double3);
567_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
568double4 sin(double4);
569
570//===----------------------------------------------------------------------===//
571// sqrt builtins
572//===----------------------------------------------------------------------===//
573#ifdef __HLSL_ENABLE_16_BIT
574_HLSL_BUILTIN_ALIAS(__builtin_sqrtf16)
575half sqrt(half In);
576#endif
577
578_HLSL_BUILTIN_ALIAS(__builtin_sqrtf)
579float sqrt(float In);
580
581_HLSL_BUILTIN_ALIAS(__builtin_sqrt)
582double sqrt(double In);
583
584//===----------------------------------------------------------------------===//
585// trunc builtins
586//===----------------------------------------------------------------------===//
587#ifdef __HLSL_ENABLE_16_BIT
588_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
589half trunc(half);
590_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
591half2 trunc(half2);
592_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
593half3 trunc(half3);
594_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
595half4 trunc(half4);
596#endif
597
598_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
599float trunc(float);
600_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
601float2 trunc(float2);
602_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
603float3 trunc(float3);
604_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
605float4 trunc(float4);
606
607_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
608double trunc(double);
609_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
610double2 trunc(double2);
611_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
612double3 trunc(double3);
613_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
614double4 trunc(double4);
615
616//===----------------------------------------------------------------------===//
617// Wave* builtins
618//===----------------------------------------------------------------------===//
619_HLSL_AVAILABILITY(shadermodel, 6.0)
620_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
621uint WaveActiveCountBits(bool bBit);
622
623} // namespace hlsl
624#endif //_HLSL_HLSL_INTRINSICS_H_
625