#pragma version(1)
#pragma rs java_package_name(foo)

int i;
int2 i2;
int3 i3;
int4 i4;

float f;
float2 f2;
float3 f3;
float4 f4;

#define TEST_FUNC_1(fnc)    \
    f = fnc(f);             \
    f2 = fnc(f2);           \
    f3 = fnc(f3);           \
    f4 = fnc(f4);

#define TEST_FUNC_1_RI(fnc) \
    i = fnc(f);             \
    i2 = fnc(f2);           \
    i3 = fnc(f3);           \
    i4 = fnc(f4);

#define TEST_FUNC_2(fnc)    \
    f = fnc(f, f);          \
    f2 = fnc(f2, f2);       \
    f3 = fnc(f3, f3);       \
    f4 = fnc(f4, f4);

#define TEST_FUNC_2P(fnc)   \
    f = fnc(f, &f);         \
    f2 = fnc(f2, &f2);      \
    f3 = fnc(f3, &f3);      \
    f4 = fnc(f4, &f4);

#define TEST_FUNC_2PI(fnc)  \
    f = fnc(f, &i);         \
    f2 = fnc(f2, &i2);      \
    f3 = fnc(f3, &i3);      \
    f4 = fnc(f4, &i4);

#define TEST_FUNC_2F(fnc)   \
    f = fnc(f, f);          \
    f2 = fnc(f2, f2);       \
    f3 = fnc(f3, f3);       \
    f4 = fnc(f4, f4);

#define TEST_FUNC_2I(fnc)   \
    f = fnc(f, i);          \
    f2 = fnc(f2, i);        \
    f3 = fnc(f3, i);        \
    f4 = fnc(f4, i);

#define TEST_FUNC_2IN(fnc)  \
    f = fnc(f, i);          \
    f2 = fnc(f2, i2);       \
    f3 = fnc(f3, i3);       \
    f4 = fnc(f4, i4);

#define TEST_FUNC_3(fnc)    \
    f = fnc(f, f, f);       \
    f2 = fnc(f2, f2, f2);   \
    f3 = fnc(f3, f3, f3);   \
    f4 = fnc(f4, f4, f4);

#define TEST_FUNC_3PI(fnc)  \
    f = fnc(f, f, &i);      \
    f2 = fnc(f2, f2, &i2);  \
    f3 = fnc(f3, f3, &i3);  \
    f4 = fnc(f4, f4, &i4);

void compile_all_math_fp_ops() {
    TEST_FUNC_1(acos);
    TEST_FUNC_1(acosh);
    TEST_FUNC_1(acospi);
    TEST_FUNC_1(asin);
    TEST_FUNC_1(asinh);
    TEST_FUNC_1(asinpi);
    TEST_FUNC_1(atan);
    TEST_FUNC_2(atan2);
    TEST_FUNC_1(atanh);
    TEST_FUNC_1(atanpi);
    TEST_FUNC_2(atan2pi);
    TEST_FUNC_1(cbrt);
    TEST_FUNC_1(ceil);
    TEST_FUNC_2(copysign);
    TEST_FUNC_1(cos);
    TEST_FUNC_1(cosh);
    TEST_FUNC_1(cospi);
    TEST_FUNC_1(erfc);
    TEST_FUNC_1(erf);
    TEST_FUNC_1(exp);
    TEST_FUNC_1(exp2);
    TEST_FUNC_1(exp10);
    TEST_FUNC_1(expm1);
    TEST_FUNC_1(fabs);
    TEST_FUNC_2(fdim);
    TEST_FUNC_1(floor);
    TEST_FUNC_3(fma);
    TEST_FUNC_2(fmax);
    TEST_FUNC_2F(fmax);
    TEST_FUNC_2(fmin);
    TEST_FUNC_2F(fmin);
    TEST_FUNC_2(fmod);
    TEST_FUNC_2P(fract);
    TEST_FUNC_2PI(frexp);
    TEST_FUNC_2(hypot);
    TEST_FUNC_1_RI(ilogb);
    TEST_FUNC_2IN(ldexp);
    TEST_FUNC_2I(ldexp);
    TEST_FUNC_1(lgamma);
    TEST_FUNC_2PI(lgamma);
    TEST_FUNC_1(log);
    TEST_FUNC_1(log2);
    TEST_FUNC_1(log10);
    TEST_FUNC_1(log1p);
    TEST_FUNC_1(logb);
    TEST_FUNC_3(mad);
    TEST_FUNC_2P(modf);
    //TEST_FUNC_1(nan);
    TEST_FUNC_2(nextafter);
    TEST_FUNC_2(pow);
    TEST_FUNC_2I(pown);
    TEST_FUNC_2(powr);
    TEST_FUNC_2(remainder);
    TEST_FUNC_3PI(remquo);
    TEST_FUNC_1(rint);
    TEST_FUNC_2I(rootn);
    TEST_FUNC_1(round);
    TEST_FUNC_1(rsqrt);
    TEST_FUNC_1(sin);
    TEST_FUNC_2P(sincos);
    TEST_FUNC_1(sinh);
    TEST_FUNC_1(sinpi);
    TEST_FUNC_1(sqrt);
    TEST_FUNC_1(tan);
    TEST_FUNC_1(tanh);
    TEST_FUNC_1(tanpi);
    TEST_FUNC_1(tgamma);
    TEST_FUNC_1(trunc);

    return;
}