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

uchar uc;
uchar2 uc2;
uchar3 uc3;
uchar4 uc4;

ushort us;
ushort2 us2;
ushort3 us3;
ushort4 us4;

uint ui;
uint2 ui2;
uint3 ui3;
uint4 ui4;

char c;
char2 c2;
char3 c3;
char4 c4;

short s;
short2 s2;
short3 s3;
short4 s4;

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

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

#define TEST4_1(ret, typ, fnc)  \
    ret = fnc(typ);             \
    ret##2 = fnc(typ##2);       \
    ret##3 = fnc(typ##3);       \
    ret##4 = fnc(typ##4);

#define TEST4_2(typ, fnc)           \
    typ = fnc(typ, typ);            \
    typ##2 = fnc(typ##2, typ##2);   \
    typ##3 = fnc(typ##3, typ##3);   \
    typ##4 = fnc(typ##4, typ##4);

#define TEST4_2S(typ, fnc)          \
    typ = fnc(typ, typ);            \
    typ##2 = fnc(typ##2, typ);      \
    typ##3 = fnc(typ##3, typ);      \
    typ##4 = fnc(typ##4, typ);

#define TEST_UIFUNC_1(fnc)  \
    TEST4_1(uc, c, fnc);    \
    TEST4_1(us, s, fnc);    \
    TEST4_1(ui, i, fnc);

#define TEST_IFUNC_1(fnc)   \
    TEST4_1(uc, uc, fnc);   \
    TEST4_1(c, c, fnc);     \
    TEST4_1(us, us, fnc);   \
    TEST4_1(s, s, fnc);     \
    TEST4_1(ui, ui, fnc);   \
    TEST4_1(i, i, fnc);

#define TEST_IFUNC_2(fnc)   \
    TEST4_2(uc, fnc);       \
    TEST4_2(c, fnc);        \
    TEST4_2(us, fnc);       \
    TEST4_2(s, fnc);        \
    TEST4_2(ui, fnc);       \
    TEST4_2(f, fnc);        \


void compile_all_math_int_ops() {
    TEST_UIFUNC_1(abs);
    TEST_IFUNC_1(clz);
    TEST_IFUNC_2(min);
    TEST_IFUNC_2(max);
    TEST4_2S(f, min);
    TEST4_2S(f, max);

    return;
}