rs_cl.rsh revision 793786c25878f1324b9cb44c47050c180ad68693
196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#ifndef __RS_CL_RSH__ 296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define __RS_CL_RSH__ 396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 4793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#ifdef BCC_PREPARE_BC 5793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#define _RS_STATIC extern 6793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#else 7793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#define _RS_STATIC static 8793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#endif 996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 10793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#define M_PI 3.14159265358979323846264338327950288f /* pi */ 1196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 1296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams// Conversions 1396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define CVT_FUNC_2(typeout, typein) \ 14793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##2 __attribute__((overloadable)) convert_##typeout##2(typein##2 v) { \ 15f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams typeout##2 r = {(typeout)v.x, (typeout)v.y}; \ 1696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 1796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 18793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##3 __attribute__((overloadable)) convert_##typeout##3(typein##3 v) { \ 19f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams typeout##3 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z}; \ 2096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 2196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 22793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##4 __attribute__((overloadable)) convert_##typeout##4(typein##4 v) { \ 23f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams typeout##4 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z, (typeout)v.w}; \ 2496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 2596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 2696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 2796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \ 2896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams CVT_FUNC_2(type, char) \ 2996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams CVT_FUNC_2(type, ushort) \ 3096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams CVT_FUNC_2(type, short) \ 3196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams CVT_FUNC_2(type, uint) \ 32682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines CVT_FUNC_2(type, int) \ 3396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams CVT_FUNC_2(type, float) 3496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 3596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(char) 3696d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uchar) 3796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(short) 3896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(ushort) 3996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(int) 4096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uint) 4196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(float) 4296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 4396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 4496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 45d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// Float ops, 6.11.2 46d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 4796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define DEF_FUNC_1(fnc) \ 48793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v) { \ 4996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; \ 5096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v.x); \ 5196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v.y); \ 5296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 5396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 54793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v) { \ 5596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; \ 5696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v.x); \ 5796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v.y); \ 5896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v.z); \ 5996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 6096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 61793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v) { \ 6296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; \ 6396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v.x); \ 6496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v.y); \ 6596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v.z); \ 6696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = fnc(v.w); \ 6796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 6896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 6996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 70682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#define DEF_FUNC_1_RI(fnc) \ 71793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC int2 __attribute__((overloadable)) fnc(float2 v) { \ 72682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines int2 r; \ 73682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.x = fnc(v.x); \ 74682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.y = fnc(v.y); \ 75682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines return r; \ 76682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines} \ 77793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC int3 __attribute__((overloadable)) fnc(float3 v) { \ 78682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines int3 r; \ 79682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.x = fnc(v.x); \ 80682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.y = fnc(v.y); \ 81682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.z = fnc(v.z); \ 82682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines return r; \ 83682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines} \ 84793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC int4 __attribute__((overloadable)) fnc(float4 v) { \ 85682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines int4 r; \ 86682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.x = fnc(v.x); \ 87682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.y = fnc(v.y); \ 88682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.z = fnc(v.z); \ 89682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines r.w = fnc(v.w); \ 90682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines return r; \ 91682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines} 92682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines 9396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define DEF_FUNC_2(fnc) \ 94793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2) { \ 9596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; \ 9696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2.x); \ 9796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2.y); \ 9896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 9996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 100793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2) { \ 10196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; \ 10296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2.x); \ 10396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2.y); \ 10496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v1.z, v2.z); \ 10596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 10696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 107793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2) { \ 10896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; \ 10996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2.x); \ 11096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2.y); \ 11196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v1.z, v2.z); \ 11296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = fnc(v1.w, v2.z); \ 11396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 11496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 11596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 11696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#define DEF_FUNC_2F(fnc) \ 117793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, float v2) { \ 11896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; \ 11996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2); \ 12096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2); \ 12196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 12296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 123793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, float v2) { \ 12496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; \ 12596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2); \ 12696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2); \ 12796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v1.z, v2); \ 12896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 12996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} \ 130793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float v2) { \ 13196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; \ 13296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fnc(v1.x, v2); \ 13396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fnc(v1.y, v2); \ 13496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fnc(v1.z, v2); \ 13596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = fnc(v1.w, v2); \ 13696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; \ 13796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 13896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 13996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 140d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acos(float); 14196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(acos) 142d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 143d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acosh(float); 14496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(acosh) 14596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 146793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) acospi(float v) { 14796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return acos(v) / M_PI; 14896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 14996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(acospi) 150d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 151d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asin(float); 15296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(asin) 153d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 154d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asinh(float); 15596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(asinh) 15696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 157793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) asinpi(float v) { 15896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return asin(v) / M_PI; 15996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 16096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(asinpi) 161d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 162d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atan(float); 16396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(atan) 164d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 165d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atan2(float, float); 16696d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(atan2) 167d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 168d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atanh(float); 16996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(atanh) 17096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 171793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) atanpi(float v) { 17296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return atan(v) / M_PI; 17396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 17496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(atanpi) 17596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 176793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) atan2pi(float y, float x) { 17796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return atan2(y, x) / M_PI; 17896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 17996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(atan2pi) 180d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 181d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cbrt(float); 18296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(cbrt) 183d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 184d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) ceil(float); 18596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(ceil) 186d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 187d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) copysign(float, float); 18896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(copysign) 189d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 190d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cos(float); 19196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(cos) 192d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 193d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cosh(float); 19496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(cosh) 19596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 196793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) cospi(float v) { 19796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return cos(v * M_PI); 19896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 19996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(cospi) 200d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 201d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erfc(float); 20296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(erfc) 203d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 204d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erf(float); 20596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(erf) 206d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 207d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp(float); 20896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(exp) 209d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 210d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp2(float); 21196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(exp2) 21296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 21396d719c91708fda5abc0442fcf6d275584d2cad6Jason Samsextern float __attribute__((overloadable)) pow(float, float); 214793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) exp10(float v) { 21596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(10.f, v); 21696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 21796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(exp10) 218d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 219d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) expm1(float); 22096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(expm1) 221d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 222d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fabs(float); 22396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(fabs) 224d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 225d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fdim(float, float); 22696d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(fdim) 227d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 228d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) floor(float); 22996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(floor) 230d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 231d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fma(float, float, float); 232d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) fma(float2, float2, float2); 233d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) fma(float3, float3, float3); 234d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) fma(float4, float4, float4); 235d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 236d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmax(float, float); 23796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(fmax); 23896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2F(fmax); 239d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 240d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmin(float, float); 24196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(fmin); 24296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2F(fmin); 243d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 244d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmod(float, float); 24596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(fmod) 24696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 247793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) fract(float v, float *iptr) { 24896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams int i = (int)floor(v); 24996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[0] = i; 25096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return fmin(v - i, 0x1.fffffep-1f); 25196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 252793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fract(float2 v, float2 *iptr) { 25396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float t[2]; 25496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 25596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fract(v.x, &t[0]); 25696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fract(v.y, &t[1]); 25796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[0] = t[0]; 25896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[1] = t[1]; 25996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 26096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 261793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fract(float3 v, float3 *iptr) { 26296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float t[3]; 26396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 26496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fract(v.x, &t[0]); 26596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fract(v.y, &t[1]); 26696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fract(v.z, &t[2]); 26796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[0] = t[0]; 26896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[1] = t[1]; 26996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[2] = t[2]; 27096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 27196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 272793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fract(float4 v, float4 *iptr) { 27396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float t[4]; 27496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 27596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = fract(v.x, &t[0]); 27696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = fract(v.y, &t[1]); 27796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = fract(v.z, &t[2]); 27896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = fract(v.w, &t[3]); 27996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[0] = t[0]; 28096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[1] = t[1]; 28196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[2] = t[2]; 28296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[3] = t[3]; 28396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 28496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 285d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 286d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) frexp(float, float *); 287d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) frexp(float2, float2 *); 288d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) frexp(float3, float3 *); 289d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) frexp(float4, float4 *); 290d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 291d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) hypot(float, float); 29296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(hypot) 293d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 294d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern int __attribute__((overloadable)) ilogb(float); 295682c4a860b435a6888ea0ea753a7ba6194bb442aStephen HinesDEF_FUNC_1_RI(ilogb) 296d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 297d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) ldexp(float, int); 298d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) ldexp(float2, int2); 299d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) ldexp(float3, int3); 300d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) ldexp(float4, int4); 301d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) ldexp(float2, int); 302d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) ldexp(float3, int); 303d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) ldexp(float4, int); 304d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 305d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) lgamma(float); 30696d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(lgamma) 307d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) lgamma(float, float *); 308d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) lgamma(float2, float2 *); 309d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) lgamma(float3, float3 *); 310d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) lgamma(float4, float4 *); 311d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 312d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log(float); 31396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(log) 31496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 315d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 316d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log10(float); 31796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(log10) 31896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 319793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) log2(float v) { 32096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return log10(v) / log10(2.f); 32196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 32296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(log2) 323d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 324d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log1p(float); 32596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(log1p) 326d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 327d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) logb(float); 32896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(logb) 329d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 330d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) mad(float, float, float); 331d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) mad(float2, float2, float2); 332d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) mad(float3, float3, float3); 333d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) mad(float4, float4, float4); 334d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 335d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) modf(float, float *); 336d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) modf(float2, float2 *); 337d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) modf(float3, float3 *); 338d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) modf(float4, float4 *); 339d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 34096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams//extern float __attribute__((overloadable)) nan(uint); 341d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 342d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) nextafter(float, float); 34396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(nextafter) 34496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 34596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(pow) 34696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 347793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) pown(float v, int p) { 34896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float)p); 34996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 350793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) pown(float2 v, int2 p) { 35196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float2)p); 35296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 353793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) pown(float3 v, int3 p) { 35496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float3)p); 35596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 356793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) pown(float4 v, int4 p) { 35796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float4)p); 35896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 35996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 360793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) powr(float v, float p) { 36196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 36296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 363793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) powr(float2 v, float2 p) { 36496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 36596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 366793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) powr(float3 v, float3 p) { 36796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 36896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 369793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) powr(float4 v, float4 p) { 37096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 37196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 372d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 373d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) remainder(float, float); 37496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_2(remainder) 375d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 376682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float __attribute__((overloadable)) remquo(float, float, int *); 377682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float2 __attribute__((overloadable)) remquo(float2, float2, int2 *); 378682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float3 __attribute__((overloadable)) remquo(float3, float3, int3 *); 379682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float4 __attribute__((overloadable)) remquo(float4, float4, int4 *); 380d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 381d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) rint(float); 38296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(rint) 38396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 384793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) rootn(float v, int r) { 38596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, 1.f / r); 38696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 387793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) rootn(float2 v, int2 r) { 38896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 t = {1.f / r.x, 1.f / r.y}; 38996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 39096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 391793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) rootn(float3 v, int3 r) { 39296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 t = {1.f / r.x, 1.f / r.y, 1.f / r.z}; 39396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 39496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 395793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) rootn(float4 v, int4 r) { 39696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 t = {1.f / r.x, 1.f / r.y, 1.f / r.z, 1.f / r.w}; 39796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 39896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 399d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 400d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) round(float); 40196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(round) 40296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 40396d719c91708fda5abc0442fcf6d275584d2cad6Jason Samsextern float __attribute__((overloadable)) sqrt(float); 404793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) rsqrt(float v) { 40596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return 1.f / sqrt(v); 40696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 407682c4a860b435a6888ea0ea753a7ba6194bb442aStephen HinesDEF_FUNC_1(rsqrt) 408d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 409d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) sin(float); 41096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(sin) 41196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 412793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sincos(float v, float *cosptr) { 41396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 41496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 41596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 416793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) sincos(float2 v, float2 *cosptr) { 41796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 41896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 41996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 420793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) sincos(float3 v, float3 *cosptr) { 42196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 42296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 42396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 424793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) sincos(float4 v, float4 *cosptr) { 42596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 42696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 42796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 428d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 429d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) sinh(float); 43096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(sinh) 431d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 432793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sinpi(float v) { 43396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v * M_PI); 43496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 43596d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(sinpi) 43696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 43796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(sqrt) 438d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 439d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tan(float); 44096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(tan) 441d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 442d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tanh(float); 44396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(tanh) 44496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 445793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) tanpi(float v) { 44696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return tan(v * M_PI); 44796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 44896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(tanpi) 449d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 450d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tgamma(float); 45196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(tgamma) 452d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 453d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) trunc(float); 45496d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(trunc) 455d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 456d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// Int ops (partial), 6.11.3 457d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 458a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#define DEF_RIFUNC_1(typeout, typein, fnc) \ 459a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hinesextern typeout __attribute__((overloadable)) fnc(typein); \ 460793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##2 __attribute__((overloadable)) fnc(typein##2 v) { \ 461a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines typeout##2 r; \ 462a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v.x); \ 463a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v.y); \ 464a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 465a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 466793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##3 __attribute__((overloadable)) fnc(typein##3 v) { \ 467a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines typeout##3 r; \ 468a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v.x); \ 469a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v.y); \ 470a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.z = fnc(v.z); \ 471a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 472a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 473793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##4 __attribute__((overloadable)) fnc(typein##4 v) { \ 474a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines typeout##4 r; \ 475a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v.x); \ 476a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v.y); \ 477a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.z = fnc(v.z); \ 478a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.w = fnc(v.w); \ 479a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 480a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} 481a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 482a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#define DEF_UIFUNC_1(fnc) \ 483a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(uchar, char, fnc) \ 484a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(ushort, short, fnc) \ 485a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(uint, int, fnc) 486a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 487a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#define DEF_IFUNC_1(fnc) \ 488a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(uchar, uchar, fnc) \ 489a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(char, char, fnc) \ 490a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(ushort, ushort, fnc) \ 491a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(short, short, fnc) \ 492a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(uint, uint, fnc) \ 493a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_1(int, int, fnc) 494a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 495a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#define DEF_RIFUNC_2(type, fnc, body) \ 496793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC type __attribute__((overloadable)) fnc(type v1, type v2) { \ 497a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return body; \ 498a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 499793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC type##2 __attribute__((overloadable)) fnc(type##2 v1, type##2 v2) { \ 500a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines type##2 r; \ 501a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v1.x, v2.x); \ 502a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v1.y, v2.y); \ 503a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 504a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 505793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC type##3 __attribute__((overloadable)) fnc(type##3 v1, type##3 v2) { \ 506a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines type##3 r; \ 507a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v1.x, v2.x); \ 508a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v1.y, v2.y); \ 509a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.z = fnc(v1.z, v2.z); \ 510a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 511a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 512793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC type##4 __attribute__((overloadable)) fnc(type##4 v1, type##4 v2) { \ 513a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines type##4 r; \ 514a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.x = fnc(v1.x, v2.x); \ 515a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.y = fnc(v1.y, v2.y); \ 516a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.z = fnc(v1.z, v2.z); \ 517a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines r.w = fnc(v1.w, v2.w); \ 518a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines return r; \ 519a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} \ 520a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 521a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#define DEF_IFUNC_2(fnc, body) \ 522a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(uchar, fnc, body) \ 523a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(char, fnc, body) \ 524a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(ushort, fnc, body) \ 525a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(short, fnc, body) \ 526a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(uint, fnc, body) \ 527a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(int, fnc, body) \ 528a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_RIFUNC_2(float, fnc, body) 529a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 530a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_UIFUNC_1(abs) 531a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_IFUNC_1(clz) 532a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 533a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_IFUNC_2(min, (v1 < v2 ? v1 : v2)) 534a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_FUNC_2F(min) 535a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 536a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_IFUNC_2(max, (v1 > v2 ? v1 : v2)) 537a8b78174eb6bc202cf86827618c806024e64cd80Stephen HinesDEF_FUNC_2F(max) 538d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 539d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// 6.11.4 540d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 541793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) clamp(float amount, float low, float high) { 54296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return amount < low ? low : (amount > high ? high : amount); 54396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 544793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) clamp(float2 amount, float2 low, float2 high) { 54596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 54696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 54796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 54896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 54996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 550793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) clamp(float3 amount, float3 low, float3 high) { 55196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 55296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 55396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 55496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); 55596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 55696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 557793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) clamp(float4 amount, float4 low, float4 high) { 55896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 55996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 56096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 56196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); 56296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = amount.w < low.w ? low.w : (amount.w > high.w ? high.w : amount.w); 56396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 56496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 565793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) clamp(float2 amount, float low, float high) { 56696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 56796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 56896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 56996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 57096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 571793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) clamp(float3 amount, float low, float high) { 57296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 57396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 57496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 57596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 57696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 57796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 578793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) clamp(float4 amount, float low, float high) { 57996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 58096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 58196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 58296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 58396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = amount.w < low ? low : (amount.w > high ? high : amount.w); 58496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 58596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 58696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 587793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) degrees(float radians) { 58896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return radians * (180.f / M_PI); 58996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 59096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(degrees) 59196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 592793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) mix(float start, float stop, float amount) { 59396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 59496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 595793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float2 amount) { 59696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 59796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 598793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float3 amount) { 59996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 60096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 601793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float4 amount) { 60296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 60396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 604793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float amount) { 60596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 60696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 607793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float amount) { 60896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 60996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 610793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float amount) { 61196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 61296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 61396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 614793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) radians(float degrees) { 61596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return degrees * (M_PI / 180.f); 61696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 61796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(radians) 61896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 619793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) step(float edge, float v) { 62096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return (v < edge) ? 0.f : 1.f; 62196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 622793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) step(float2 edge, float2 v) { 62396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 62496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 62596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 62696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 62796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 628793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) step(float3 edge, float3 v) { 62996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 63096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 63196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 63296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v.z < edge.z) ? 0.f : 1.f; 63396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 63496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 635793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) step(float4 edge, float4 v) { 63696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 63796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 63896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 63996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v.z < edge.z) ? 0.f : 1.f; 64096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = (v.w < edge.w) ? 0.f : 1.f; 64196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 64296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 643793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) step(float2 edge, float v) { 64496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 64596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 64696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 64796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 64896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 649793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) step(float3 edge, float v) { 65096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 65196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 65296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 65396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v < edge.z) ? 0.f : 1.f; 65496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 65596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 656793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) step(float4 edge, float v) { 65796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 65896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 65996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 66096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v < edge.z) ? 0.f : 1.f; 66196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = (v < edge.w) ? 0.f : 1.f; 66296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 66396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 664d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 665d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) smoothstep(float, float, float); 666d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float2, float2, float2); 667d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float3, float3, float3); 668d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float4, float4, float4); 669d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float, float, float2); 670d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float, float, float3); 671d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float, float, float4); 672d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 673793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sign(float v) { 67496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams if (v > 0) return 1.f; 67596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams if (v < 0) return -1.f; 67696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v; 67796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 67896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsDEF_FUNC_1(sign) 679d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 680d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// 6.11.5 681793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) cross(float3 lhs, float3 rhs) { 68296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 68396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = lhs.y * rhs.z - lhs.z * rhs.y; 68496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = lhs.z * rhs.x - lhs.x * rhs.z; 68596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = lhs.x * rhs.y - lhs.y * rhs.x; 68696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 68796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 68896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 689793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) cross(float4 lhs, float4 rhs) { 69096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 69196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = lhs.y * rhs.z - lhs.z * rhs.y; 69296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = lhs.z * rhs.x - lhs.x * rhs.z; 69396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = lhs.x * rhs.y - lhs.y * rhs.x; 69496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = 0.f; 69596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 69696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 69796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 698793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float lhs, float rhs) { 69996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs * rhs; 70096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 701793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float2 lhs, float2 rhs) { 70296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y; 70396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 704793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float3 lhs, float3 rhs) { 70596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z; 70696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 707793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float4 lhs, float4 rhs) { 70896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z + lhs.w*rhs.w; 70996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 71096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 711793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float v) { 71296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v; 71396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 714793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float2 v) { 71596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y); 71696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 717793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float3 v) { 71896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y + v.z*v.z); 71996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 720793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float4 v) { 72196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w); 72296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 72396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 724793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float lhs, float rhs) { 72596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 72696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 727793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float2 lhs, float2 rhs) { 72896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 72996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 730793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float3 lhs, float3 rhs) { 73196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 73296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 733793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float4 lhs, float4 rhs) { 73496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 73596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 73696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 737793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) normalize(float v) { 73896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return 1.f; 73996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 740793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) normalize(float2 v) { 74196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 74296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 743793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) normalize(float3 v) { 74496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 74596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 746793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) normalize(float4 v) { 74796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 74896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 74996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 750682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC 751682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC_2 752682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef DEF_FUNC_1 753682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef DEF_FUNC_1_RI 754682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef DEF_FUNC_2 755682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef DEF_FUNC_2F 756a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#undef DEF_RIFUNC_1 757a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#undef DEF_UIFUNC_1 758a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#undef DEF_IFUNC_1 759a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#undef DEF_RIFUNC_2 760a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines#undef DEF_IFUNC_2 761793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#undef _RS_STATIC 76296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 76396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#endif 764