rs_cl.rsh revision a16a98145347187e9e92f400e72345354b4cbccf
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 1096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams// Conversions 11a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define CVT_FUNC_2(typeout, typein) \ 12a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC typeout##2 __attribute__((overloadable)) \ 13a16a98145347187e9e92f400e72345354b4cbccfStephen Hines convert_##typeout##2(typein##2 v) { \ 14a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##2 r = {(typeout)v.x, (typeout)v.y}; \ 15a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 16a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 17a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC typeout##3 __attribute__((overloadable)) \ 18a16a98145347187e9e92f400e72345354b4cbccfStephen Hines convert_##typeout##3(typein##3 v) { \ 19a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##3 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z}; \ 20a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 21a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 22a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC typeout##4 __attribute__((overloadable)) \ 23a16a98145347187e9e92f400e72345354b4cbccfStephen Hines convert_##typeout##4(typein##4 v) { \ 24a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##4 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z, \ 25a16a98145347187e9e92f400e72345354b4cbccfStephen Hines (typeout)v.w}; \ 26a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 27a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 28a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 29a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \ 30a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, char) \ 31a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, ushort) \ 32a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, short) \ 33a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, uint) \ 34a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, int) \ 35a16a98145347187e9e92f400e72345354b4cbccfStephen Hines CVT_FUNC_2(type, float) 3696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 3796d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(char) 3896d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uchar) 3996d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(short) 4096d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(ushort) 4196d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(int) 4296d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(uint) 4396d719c91708fda5abc0442fcf6d275584d2cad6Jason SamsCVT_FUNC(float) 4496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 45d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// Float ops, 6.11.2 46d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 47a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN(fnc) \ 48793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v) { \ 49a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 50a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 51a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 52a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 53a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 54793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v) { \ 55a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 56a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 57a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 58a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 59a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 60a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 61793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v) { \ 62a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 63a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 64a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 65a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 66a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v.w); \ 67a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 68a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 69a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 70a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_FN(fnc) \ 71a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC int2 __attribute__((overloadable)) fnc(float2 v) { \ 72a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int2 r; \ 73a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 74a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 75a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 76a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 77a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC int3 __attribute__((overloadable)) fnc(float3 v) { \ 78a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int3 r; \ 79a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 80a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 81a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 82a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 83a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 84a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC int4 __attribute__((overloadable)) fnc(float4 v) { \ 85a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int4 r; \ 86a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 87a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 88a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 89a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v.w); \ 90a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 91a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 92a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 93a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN(fnc) \ 94793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2) { \ 95a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 96a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 97a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 98a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 99a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 100793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2) { \ 101a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 102a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 103a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 104a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 105a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 106a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 107793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2) { \ 108a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 109a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 110a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 111a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 112a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2.w); \ 113a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 114a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 115a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 116a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_F(fnc) \ 117a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, float v2) { \ 118a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 119a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 120a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 121a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 122a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 123a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, float v2) { \ 124a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 125a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 126a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 127a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2); \ 128a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 129a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 130a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float v2) { \ 131a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 132a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 133a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 134a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2); \ 135a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2); \ 136a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 137a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 138a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 139a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_IN(fnc) \ 140a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2) { \ 141a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 142a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 143a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 144a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 145a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 146a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, int3 v2) { \ 147a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 148a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 149a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 150a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 151a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 152a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 153a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, int4 v2) { \ 154a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 155a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 156a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 157a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 158a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2.w); \ 159a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 160a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 161a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 162a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_I(fnc) \ 163a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, int v2) { \ 164a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 165a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 166a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 167a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 168a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 169a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, int v2) { \ 170a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 171a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 172a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 173a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2); \ 174a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 175a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 176a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, int v2) { \ 177a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 178a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2); \ 179a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2); \ 180a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2); \ 181a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2); \ 182a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 183833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines} 184833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 185a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_PFN(fnc) \ 186a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) \ 187a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float2 v1, float2 *v2) { \ 188a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 189a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float t[2]; \ 190a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 191a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 192a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 193a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 194a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 195a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 196a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) \ 197a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float3 v1, float3 *v2) { \ 198a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 199a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float t[3]; \ 200a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 201a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 202a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, &t[2]); \ 203a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 204a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 205a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->z = t[2]; \ 206a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 207a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 208a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) \ 209a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float4 v1, float4 *v2) { \ 210a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 211a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float t[4]; \ 212a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 213a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 214a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, &t[2]); \ 215a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, &t[3]); \ 216a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 217a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 218a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->z = t[2]; \ 219a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->w = t[3]; \ 220a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 221a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 222a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 223a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_PIN(fnc) \ 224a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, int2 *v2) { \ 225a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 226a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[2]; \ 227a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 228a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 229a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 230a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 231a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 232a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 233a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, int3 *v2) { \ 234a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 235a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[3]; \ 236a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 237a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 238a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, &t[2]); \ 239a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 240a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 241a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->z = t[2]; \ 242a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 243a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 244a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, int4 *v2) { \ 245a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 246a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[4]; \ 247a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, &t[0]); \ 248a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, &t[1]); \ 249a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, &t[2]); \ 250a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, &t[3]); \ 251a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->x = t[0]; \ 252a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->y = t[1]; \ 253a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->z = t[2]; \ 254a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v2->w = t[3]; \ 255a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 256a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 257a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 258a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN_FN(fnc) \ 259a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) \ 260a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float2 v1, float2 v2, float2 v3) { \ 261a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 262a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, v3.x); \ 263a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, v3.y); \ 264a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 265a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 266a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) \ 267a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float3 v1, float3 v2, float3 v3) { \ 268a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 269a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, v3.x); \ 270a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, v3.y); \ 271a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z, v3.z); \ 272a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 273a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 274a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) \ 275a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float4 v1, float4 v2, float4 v3) { \ 276a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 277a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, v3.x); \ 278a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, v3.y); \ 279a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z, v3.z); \ 280a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2.w, v3.w); \ 281a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 282a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 283a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 284a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define FN_FUNC_FN_FN_PIN(fnc) \ 285a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float2 __attribute__((overloadable)) \ 286a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float2 v1, float2 v2, int2 *v3) { \ 287a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float2 r; \ 288a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[2]; \ 289a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, &t[0]); \ 290a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, &t[1]); \ 291a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->x = t[0]; \ 292a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->y = t[1]; \ 293a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 294a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 295a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float3 __attribute__((overloadable)) \ 296a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float3 v1, float3 v2, int3 *v3) { \ 297a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float3 r; \ 298a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[3]; \ 299a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, &t[0]); \ 300a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, &t[1]); \ 301a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z, &t[2]); \ 302a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->x = t[0]; \ 303a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->y = t[1]; \ 304a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->z = t[2]; \ 305a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 306a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 307a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC float4 __attribute__((overloadable)) \ 308a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(float4 v1, float4 v2, int4 *v3) { \ 309a16a98145347187e9e92f400e72345354b4cbccfStephen Hines float4 r; \ 310a16a98145347187e9e92f400e72345354b4cbccfStephen Hines int t[4]; \ 311a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x, &t[0]); \ 312a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y, &t[1]); \ 313a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z, &t[2]); \ 314a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2.w, &t[3]); \ 315a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->x = t[0]; \ 316a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->y = t[1]; \ 317a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->z = t[2]; \ 318a16a98145347187e9e92f400e72345354b4cbccfStephen Hines v3->w = t[3]; \ 319a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 320a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 321833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 322833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines 323d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acos(float); 324833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acos) 325d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 326d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) acosh(float); 327833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acosh) 32896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 329793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) acospi(float v) { 33096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return acos(v) / M_PI; 33196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 332833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(acospi) 333d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 334d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asin(float); 335833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asin) 336d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 337d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) asinh(float); 338833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asinh) 33996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 340793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) asinpi(float v) { 34196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return asin(v) / M_PI; 34296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 343833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(asinpi) 344d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 345d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atan(float); 346833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atan) 347d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 348d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atan2(float, float); 349833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(atan2) 350d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 351d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) atanh(float); 352833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atanh) 35396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 354793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) atanpi(float v) { 35596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return atan(v) / M_PI; 35696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 357833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(atanpi) 35896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 359793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) atan2pi(float y, float x) { 36096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return atan2(y, x) / M_PI; 36196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 362833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(atan2pi) 363d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 364d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cbrt(float); 365833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cbrt) 366d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 367d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) ceil(float); 368833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(ceil) 369d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 370d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) copysign(float, float); 371833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(copysign) 372d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 373d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cos(float); 374833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cos) 375d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 376d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) cosh(float); 377833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cosh) 37896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 379793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) cospi(float v) { 38096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return cos(v * M_PI); 38196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 382833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(cospi) 383d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 384d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erfc(float); 385833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(erfc) 386d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 387d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) erf(float); 388833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(erf) 389d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 390d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp(float); 391833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp) 392d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 393d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) exp2(float); 394833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp2) 39596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 39696d719c91708fda5abc0442fcf6d275584d2cad6Jason Samsextern float __attribute__((overloadable)) pow(float, float); 397793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) exp10(float v) { 39896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(10.f, v); 39996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 400833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(exp10) 401d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 402d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) expm1(float); 403833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(expm1) 404d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 405d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fabs(float); 406833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(fabs) 407d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 408d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fdim(float, float); 409833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fdim) 410d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 411d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) floor(float); 412833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(floor) 413d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 414d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fma(float, float, float); 415833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_FN(fma) 416d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 417d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmax(float, float); 418833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmax); 419833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(fmax); 420d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 421d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmin(float, float); 422833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmin); 423833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(fmin); 424d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 425d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) fmod(float, float); 426833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(fmod) 42796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 428793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) fract(float v, float *iptr) { 42996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams int i = (int)floor(v); 43096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams iptr[0] = i; 43196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return fmin(v - i, 0x1.fffffep-1f); 43296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 433a16a98145347187e9e92f400e72345354b4cbccfStephen HinesFN_FUNC_FN_PFN(fract) 434d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 435833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hinesextern float __attribute__((overloadable)) frexp(float, int *); 436833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PIN(frexp) 437d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 438d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) hypot(float, float); 439833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(hypot) 440d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 441d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern int __attribute__((overloadable)) ilogb(float); 442833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_FN(ilogb) 443d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 444d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) ldexp(float, int); 445833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_IN(ldexp) 446833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_I(ldexp) 447d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 448d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) lgamma(float); 449833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(lgamma) 450833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hinesextern float __attribute__((overloadable)) lgamma(float, int*); 451833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PIN(lgamma) 452d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 453d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log(float); 454833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log) 45596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 456d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 457d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log10(float); 458833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log10) 45996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 460793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) log2(float v) { 46196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return log10(v) / log10(2.f); 46296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 463833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log2) 464d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 465d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) log1p(float); 466833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(log1p) 467d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 468d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) logb(float); 469833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(logb) 470d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 471d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) mad(float, float, float); 472833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_FN(mad) 473d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 474d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) modf(float, float *); 475833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_PFN(modf); 476d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 47796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams//extern float __attribute__((overloadable)) nan(uint); 478d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 479d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) nextafter(float, float); 480833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(nextafter) 48196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 482833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(pow) 48396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 484793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) pown(float v, int p) { 48596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float)p); 48696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 487793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) pown(float2 v, int2 p) { 48896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float2)p); 48996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 490793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) pown(float3 v, int3 p) { 49196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float3)p); 49296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 493793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) pown(float4 v, int4 p) { 49496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, (float4)p); 49596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 49696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 497793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) powr(float v, float p) { 49896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 49996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 500793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) powr(float2 v, float2 p) { 50196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 50296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 503793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) powr(float3 v, float3 p) { 50496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 50596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 506793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) powr(float4 v, float4 p) { 50796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, p); 50896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 509d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 510d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) remainder(float, float); 511833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN(remainder) 512d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 513682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hinesextern float __attribute__((overloadable)) remquo(float, float, int *); 514833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_FN_PIN(remquo) 515d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 516d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) rint(float); 517833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(rint) 51896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 519793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) rootn(float v, int r) { 52096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, 1.f / r); 52196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 522793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) rootn(float2 v, int2 r) { 52396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 t = {1.f / r.x, 1.f / r.y}; 52496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 52596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 526793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) rootn(float3 v, int3 r) { 52796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 t = {1.f / r.x, 1.f / r.y, 1.f / r.z}; 52896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 52996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 530793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) rootn(float4 v, int4 r) { 53196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 t = {1.f / r.x, 1.f / r.y, 1.f / r.z, 1.f / r.w}; 53296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return pow(v, t); 53396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 534d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 535d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) round(float); 536833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(round) 53796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 53896d719c91708fda5abc0442fcf6d275584d2cad6Jason Samsextern float __attribute__((overloadable)) sqrt(float); 539793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) rsqrt(float v) { 54096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return 1.f / sqrt(v); 54196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 542833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(rsqrt) 543d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 544d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) sin(float); 545833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sin) 54696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 547793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sincos(float v, float *cosptr) { 54896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 54996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 55096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 551793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) sincos(float2 v, float2 *cosptr) { 55296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 55396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 55496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 555793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) sincos(float3 v, float3 *cosptr) { 55696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 55796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 55896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 559793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) sincos(float4 v, float4 *cosptr) { 56096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams *cosptr = cos(v); 56196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v); 56296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 563d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 564d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) sinh(float); 565833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sinh) 566d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 567793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sinpi(float v) { 56896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sin(v * M_PI); 56996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 570833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sinpi) 57196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 572833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sqrt) 573d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 574d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tan(float); 575833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tan) 576d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 577d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tanh(float); 578833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tanh) 57996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 580793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) tanpi(float v) { 58196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return tan(v * M_PI); 58296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 583833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tanpi) 584d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 585d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) tgamma(float); 586833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(tgamma) 587d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 588d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) trunc(float); 589833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(trunc) 590d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 591d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// Int ops (partial), 6.11.3 592d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 593a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define XN_FUNC_YN(typeout, fnc, typein) \ 594a16a98145347187e9e92f400e72345354b4cbccfStephen Hinesextern typeout __attribute__((overloadable)) fnc(typein); \ 595793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##2 __attribute__((overloadable)) fnc(typein##2 v) { \ 596a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##2 r; \ 597a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 598a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 599a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 600a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 601793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##3 __attribute__((overloadable)) fnc(typein##3 v) { \ 602a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##3 r; \ 603a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 604a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 605a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 606a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 607a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 608793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC typeout##4 __attribute__((overloadable)) fnc(typein##4 v) { \ 609a16a98145347187e9e92f400e72345354b4cbccfStephen Hines typeout##4 r; \ 610a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v.x); \ 611a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v.y); \ 612a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v.z); \ 613a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v.w); \ 614a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 615a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines} 616a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 617a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define UIN_FUNC_IN(fnc) \ 618833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uchar, fnc, char) \ 619833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(ushort, fnc, short) \ 620833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uint, fnc, int) 621a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 622a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_IN(fnc) \ 623833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uchar, fnc, uchar) \ 624833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(char, fnc, char) \ 625833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(ushort, fnc, ushort) \ 626833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(short, fnc, short) \ 627833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(uint, fnc, uint) \ 628833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_YN(int, fnc, int) 629a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 630a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define XN_FUNC_XN_XN_BODY(type, fnc, body) \ 631a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC type __attribute__((overloadable)) \ 632a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(type v1, type v2) { \ 633a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return body; \ 634a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 635a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC type##2 __attribute__((overloadable)) \ 636a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(type##2 v1, type##2 v2) { \ 637a16a98145347187e9e92f400e72345354b4cbccfStephen Hines type##2 r; \ 638a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 639a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 640a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 641a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 642a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC type##3 __attribute__((overloadable)) \ 643a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(type##3 v1, type##3 v2) { \ 644a16a98145347187e9e92f400e72345354b4cbccfStephen Hines type##3 r; \ 645a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 646a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 647a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 648a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 649a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} \ 650a16a98145347187e9e92f400e72345354b4cbccfStephen Hines_RS_STATIC type##4 __attribute__((overloadable)) \ 651a16a98145347187e9e92f400e72345354b4cbccfStephen Hines fnc(type##4 v1, type##4 v2) { \ 652a16a98145347187e9e92f400e72345354b4cbccfStephen Hines type##4 r; \ 653a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.x = fnc(v1.x, v2.x); \ 654a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.y = fnc(v1.y, v2.y); \ 655a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.z = fnc(v1.z, v2.z); \ 656a16a98145347187e9e92f400e72345354b4cbccfStephen Hines r.w = fnc(v1.w, v2.w); \ 657a16a98145347187e9e92f400e72345354b4cbccfStephen Hines return r; \ 658a16a98145347187e9e92f400e72345354b4cbccfStephen Hines} 659a16a98145347187e9e92f400e72345354b4cbccfStephen Hines 660a16a98145347187e9e92f400e72345354b4cbccfStephen Hines#define IN_FUNC_IN_IN_BODY(fnc, body) \ 661833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(uchar, fnc, body) \ 662833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(char, fnc, body) \ 663833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(ushort, fnc, body) \ 664833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(short, fnc, body) \ 665833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(uint, fnc, body) \ 666833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(int, fnc, body) \ 667833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesXN_FUNC_XN_XN_BODY(float, fnc, body) 668a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 669833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesUIN_FUNC_IN(abs) 670833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN(clz) 671a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 672833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN_IN_BODY(min, (v1 < v2 ? v1 : v2)) 673833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(min) 674a8b78174eb6bc202cf86827618c806024e64cd80Stephen Hines 675833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesIN_FUNC_IN_IN_BODY(max, (v1 > v2 ? v1 : v2)) 676833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN_F(max) 677d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 678d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// 6.11.4 679d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 680793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) clamp(float amount, float low, float high) { 68196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return amount < low ? low : (amount > high ? high : amount); 68296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 683793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) clamp(float2 amount, float2 low, float2 high) { 68496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 68596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 68696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 68796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 68896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 689793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) clamp(float3 amount, float3 low, float3 high) { 69096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 69196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 69296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 69396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); 69496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 69596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 696793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) clamp(float4 amount, float4 low, float4 high) { 69796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 69896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); 69996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); 70096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); 70196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = amount.w < low.w ? low.w : (amount.w > high.w ? high.w : amount.w); 70296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 70396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 704793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) clamp(float2 amount, float low, float high) { 70596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 70696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 70796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 70896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 70996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 710793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) clamp(float3 amount, float low, float high) { 71196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 71296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 71396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 71496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 71596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 71696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 717793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) clamp(float4 amount, float low, float high) { 71896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 71996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 72096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 72196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 72296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = amount.w < low ? low : (amount.w > high ? high : amount.w); 72396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 72496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 72596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 726793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) degrees(float radians) { 72796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return radians * (180.f / M_PI); 72896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 729833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(degrees) 73096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 731793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) mix(float start, float stop, float amount) { 73296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 73396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 734793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float2 amount) { 73596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 73696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 737793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float3 amount) { 73896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 73996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 740793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float4 amount) { 74196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 74296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 743793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) mix(float2 start, float2 stop, float amount) { 74496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 74596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 746793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) mix(float3 start, float3 stop, float amount) { 74796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 74896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 749793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) mix(float4 start, float4 stop, float amount) { 75096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return start + (stop - start) * amount; 75196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 75296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 753793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) radians(float degrees) { 75496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return degrees * (M_PI / 180.f); 75596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 756833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(radians) 75796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 758793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) step(float edge, float v) { 75996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return (v < edge) ? 0.f : 1.f; 76096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 761793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) step(float2 edge, float2 v) { 76296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 76396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 76496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 76596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 76696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 767793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) step(float3 edge, float3 v) { 76896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 76996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 77096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 77196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v.z < edge.z) ? 0.f : 1.f; 77296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 77396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 774793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) step(float4 edge, float4 v) { 77596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 77696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v.x < edge.x) ? 0.f : 1.f; 77796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v.y < edge.y) ? 0.f : 1.f; 77896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v.z < edge.z) ? 0.f : 1.f; 77996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = (v.w < edge.w) ? 0.f : 1.f; 78096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 78196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 782793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) step(float2 edge, float v) { 78396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float2 r; 78496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 78596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 78696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 78796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 788793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) step(float3 edge, float v) { 78996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 79096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 79196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 79296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v < edge.z) ? 0.f : 1.f; 79396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 79496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 795793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) step(float4 edge, float v) { 79696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 79796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = (v < edge.x) ? 0.f : 1.f; 79896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = (v < edge.y) ? 0.f : 1.f; 79996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = (v < edge.z) ? 0.f : 1.f; 80096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = (v < edge.w) ? 0.f : 1.f; 80196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 80296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 803d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 804d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float __attribute__((overloadable)) smoothstep(float, float, float); 805d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float2, float2, float2); 806d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float3, float3, float3); 807d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float4, float4, float4); 808d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float2 __attribute__((overloadable)) smoothstep(float, float, float2); 809d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float3 __attribute__((overloadable)) smoothstep(float, float, float3); 810d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsextern float4 __attribute__((overloadable)) smoothstep(float, float, float4); 811d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 812793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) sign(float v) { 81396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams if (v > 0) return 1.f; 81496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams if (v < 0) return -1.f; 81596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v; 81696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 817833166d274030bfd90653626f0e9f5bf710f7d4bStephen HinesFN_FUNC_FN(sign) 818d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams 819d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams// 6.11.5 820793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) cross(float3 lhs, float3 rhs) { 82196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float3 r; 82296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = lhs.y * rhs.z - lhs.z * rhs.y; 82396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = lhs.z * rhs.x - lhs.x * rhs.z; 82496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = lhs.x * rhs.y - lhs.y * rhs.x; 82596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 82696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 82796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 828793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) cross(float4 lhs, float4 rhs) { 82996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams float4 r; 83096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.x = lhs.y * rhs.z - lhs.z * rhs.y; 83196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.y = lhs.z * rhs.x - lhs.x * rhs.z; 83296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.z = lhs.x * rhs.y - lhs.y * rhs.x; 83396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams r.w = 0.f; 83496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return r; 83596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 83696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 837793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float lhs, float rhs) { 83896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs * rhs; 83996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 840793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float2 lhs, float2 rhs) { 84196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y; 84296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 843793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float3 lhs, float3 rhs) { 84496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z; 84596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 846793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) dot(float4 lhs, float4 rhs) { 84796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z + lhs.w*rhs.w; 84896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 84996d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 850793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float v) { 85196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v; 85296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 853793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float2 v) { 85496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y); 85596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 856793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float3 v) { 85796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y + v.z*v.z); 85896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 859793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) length(float4 v) { 86096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return sqrt(v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w); 86196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 86296d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 863793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float lhs, float rhs) { 86496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 86596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 866793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float2 lhs, float2 rhs) { 86796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 86896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 869793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float3 lhs, float3 rhs) { 87096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 87196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 872793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) distance(float4 lhs, float4 rhs) { 87396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return length(lhs - rhs); 87496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 87596d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 876793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float __attribute__((overloadable)) normalize(float v) { 87796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return 1.f; 87896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 879793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float2 __attribute__((overloadable)) normalize(float2 v) { 88096d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 88196d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 882793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float3 __attribute__((overloadable)) normalize(float3 v) { 88396d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 88496d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 885793786c25878f1324b9cb44c47050c180ad68693Stephen Hines_RS_STATIC float4 __attribute__((overloadable)) normalize(float4 v) { 88696d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams return v / length(v); 88796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams} 88896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 889682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC 890682c4a860b435a6888ea0ea753a7ba6194bb442aStephen Hines#undef CVT_FUNC_2 891833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN 892833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_FN 893833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN 894833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_F 895833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_IN 896833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_I 897833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_PFN 898833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_PIN 899833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN_FN 900833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef FN_FUNC_FN_FN_PIN 901833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef XN_FUNC_YN 902833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef UIN_FUNC_IN 903833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_IN 904833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef XN_FUNC_XN_XN_BODY 905833166d274030bfd90653626f0e9f5bf710f7d4bStephen Hines#undef IN_FUNC_IN_IN_BODY 906793786c25878f1324b9cb44c47050c180ad68693Stephen Hines#undef _RS_STATIC 90796d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams 90896d719c91708fda5abc0442fcf6d275584d2cad6Jason Sams#endif 909