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