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