11a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks/*
21a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Copyright (C) 2017 The Android Open Source Project
31a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
41a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License");
51a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * you may not use this file except in compliance with the License.
61a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * You may obtain a copy of the License at
71a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
81a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *      http://www.apache.org/licenses/LICENSE-2.0
91a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Unless required by applicable law or agreed to in writing, software
111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS,
121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * See the License for the specific language governing permissions and
141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * limitations under the License.
151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks */
161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#include "shared.rsh"
181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks// Testing math library
201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile float f1;
221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile float2 f2;
231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile float3 f3;
241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile float4 f4;
251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int i1;
271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int2 i2;
281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int3 i3;
291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int4 i4;
301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint ui1;
321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint2 ui2;
331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint3 ui3;
341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint4 ui4;
351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short s1;
371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short2 s2;
381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short3 s3;
391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short4 s4;
401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort us1;
421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort2 us2;
431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort3 us3;
441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort4 us4;
451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char c1;
471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char2 c2;
481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char3 c3;
491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char4 c4;
501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar uc1;
521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar2 uc2;
531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar3 uc3;
541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar4 uc4;
551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define DECL_INT(prefix)            \
571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char prefix##_c_1 = 1;     \
581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char2 prefix##_c_2 = 1;    \
591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char3 prefix##_c_3 = 1;    \
601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile char4 prefix##_c_4 = 1;    \
611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar prefix##_uc_1 = 1;   \
621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar2 prefix##_uc_2 = 1;  \
631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar3 prefix##_uc_3 = 1;  \
641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uchar4 prefix##_uc_4 = 1;  \
651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short prefix##_s_1 = 1;    \
661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short2 prefix##_s_2 = 1;   \
671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short3 prefix##_s_3 = 1;   \
681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile short4 prefix##_s_4 = 1;   \
691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort prefix##_us_1 = 1;  \
701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort2 prefix##_us_2 = 1; \
711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort3 prefix##_us_3 = 1; \
721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ushort4 prefix##_us_4 = 1; \
731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int prefix##_i_1 = 1;      \
741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int2 prefix##_i_2 = 1;     \
751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int3 prefix##_i_3 = 1;     \
761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile int4 prefix##_i_4 = 1;     \
771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint prefix##_ui_1 = 1;    \
781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint2 prefix##_ui_2 = 1;   \
791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint3 prefix##_ui_3 = 1;   \
801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile uint4 prefix##_ui_4 = 1;   \
811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile long prefix##_l_1 = 1;     \
821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvolatile ulong prefix##_ul_1 = 1;
831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksDECL_INT(res)
851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksDECL_INT(src1)
861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksDECL_INT(src2)
871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_INT_OP_TYPE(op, type)                      \
891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for " #type "1", i++);         \
901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_##type##_1 = src1_##type##_1 op src2_##type##_1;    \
911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for " #type "2", i++);         \
921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_##type##_2 = src1_##type##_2 op src2_##type##_2;    \
931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for " #type "3", i++);         \
941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_##type##_3 = src1_##type##_3 op src2_##type##_3;    \
951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for " #type "4", i++);         \
961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_##type##_4 = src1_##type##_4 op src2_##type##_4;
971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_INT_OP(op)                     \
991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, c)                     \
1001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, uc)                    \
1011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, s)                     \
1021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, us)                    \
1031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, i)                     \
1041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_INT_OP_TYPE(op, ui)                    \
1051a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for l1", i++);     \
1061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_l_1 = src1_l_1 op src2_l_1;             \
1071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing " #op " for ul1", i++);    \
1081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksres_ul_1 = src1_ul_1 op src2_ul_1;
1091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_XN_FUNC_YN(typeout, fnc, typein)   \
1111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##typeout##_1 = fnc(src1_##typein##_1); \
1121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##typeout##_2 = fnc(src1_##typein##_2); \
1131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##typeout##_3 = fnc(src1_##typein##_3); \
1141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##typeout##_4 = fnc(src1_##typein##_4);
1151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_XN_FUNC_XN_XN(type, fnc)                       \
1171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1); \
1181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##type##_2 = fnc(src1_##type##_2, src2_##type##_2); \
1191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##type##_3 = fnc(src1_##type##_3, src2_##type##_3); \
1201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##type##_4 = fnc(src1_##type##_4, src2_##type##_4);
1211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_X_FUNC_X_X_X(type, fnc)    \
1231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1, src2_##type##_1);
1241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_IN_FUNC_IN(fnc)        \
1261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(uc, fnc, uc)    \
1281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(c, fnc, c)      \
1291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(us, fnc, us)    \
1301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(s, fnc, s)      \
1311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(ui, fnc, ui)    \
1321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(i, fnc, i)
1331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_UIN_FUNC_IN(fnc)       \
1351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(uc, fnc, c)     \
1371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(us, fnc, s)     \
1381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_YN(ui, fnc, i)     \
1391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_IN_FUNC_IN_IN(fnc)     \
1411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(uc, fnc)     \
1431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(c, fnc)      \
1441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(us, fnc)     \
1451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(s, fnc)      \
1461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(ui, fnc)     \
1471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_XN_FUNC_XN_XN(i, fnc)
1481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_I_FUNC_I_I_I(fnc)      \
1501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(uc, fnc)      \
1521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(c, fnc)       \
1531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(us, fnc)      \
1541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(s, fnc)       \
1551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(ui, fnc)      \
1561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_X_FUNC_X_X_X(i, fnc)
1571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN(fnc)        \
1591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1);                   \
1611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2);                   \
1621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3);                   \
1631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4);
1641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_PFN(fnc)    \
1661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, (float*) &f1);     \
1681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, (float2*) &f2);    \
1691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, (float3*) &f3);    \
1701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, (float4*) &f4);
1711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_FN(fnc)     \
1731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1);               \
1751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, f2);               \
1761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f3);               \
1771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f4);
1781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_F34_FUNC_F34_F34(fnc)  \
1801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f3);               \
1821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f4);
1831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_F(fnc)      \
1851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1);               \
1871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, f1);               \
1881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f1);               \
1891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f1);
1901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_F_FN(fnc)      \
1921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
1931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1);               \
1941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f1, f2);               \
1951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f1, f3);               \
1961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f1, f4);
1971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_F_FUNC_FN(fnc)         \
1991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1);                   \
2011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f2);                   \
2021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f3);                   \
2031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f4);
2041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2051a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_F_FUNC_FN_FN(fnc)      \
2061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1);               \
2081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f2, f2);               \
2091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f3, f3);               \
2101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f4, f4);
2111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_IN(fnc)     \
2131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, i1);               \
2151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, i2);               \
2161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, i3);               \
2171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, i4);
2181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_I(fnc)      \
2201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, i1);               \
2221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, i1);               \
2231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, i1);               \
2241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, i1);
2251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_FN_FN(fnc)  \
2271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1, f1);           \
2291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, f2, f2);           \
2301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f3, f3);           \
2311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f4, f4);
2321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_FN_F(fnc)   \
2341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1, f1);           \
2361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, f1, f1);           \
2371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f1, f1);           \
2381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f1, f1);
2391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_PIN(fnc)    \
2411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, (int*) &i1);       \
2431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, (int2*) &i2);      \
2441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, (int3*) &i3);      \
2451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, (int4*) &i4);
2461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_FN_FUNC_FN_FN_PIN(fnc) \
2481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f1 = fnc(f1, f1, (int*) &i1);   \
2501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f2 = fnc(f2, f2, (int2*) &i2);  \
2511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f3 = fnc(f3, f3, (int3*) &i3);  \
2521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    f4 = fnc(f4, f4, (int4*) &i4);
2531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_IN_FUNC_FN(fnc)        \
2551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    rsDebug("Testing " #fnc, 0);    \
2561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    i1 = fnc(f1);                   \
2571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    i2 = fnc(f2);                   \
2581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    i3 = fnc(f3);                   \
2591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    i4 = fnc(f4);
2601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_fp_math(uint32_t index) {
2621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
2631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    start();
2641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
2651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(acos);
2661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(acosh);
2671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(acospi);
2681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(asin);
2691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(asinh);
2701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(asinpi);
2711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(atan);
2721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(atan2);
2731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(atanh);
2741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(atanpi);
2751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(atan2pi);
2761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(cbrt);
2771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(ceil);
2781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_FN(clamp);
2791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_F(clamp);
2801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(copysign);
2811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(cos);
2821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(cosh);
2831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(cospi);
2841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_F34_FUNC_F34_F34(cross);
2851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(degrees);
2861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_F_FUNC_FN_FN(distance);
2871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_F_FUNC_FN_FN(dot);
2881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(erfc);
2891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(erf);
2901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(exp);
2911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(exp2);
2921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(exp10);
2931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(expm1);
2941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(fabs);
2951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(fdim);
2961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(floor);
2971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_FN(fma);
2981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(fmax);
2991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_F(fmax);
3001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(fmin);
3011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_F(fmin);
3021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(fmod);
3031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_PFN(fract);
3041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_PIN(frexp);
3051a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(hypot);
3061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_IN_FUNC_FN(ilogb);
3071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_IN(ldexp);
3081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_I(ldexp);
3091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_F_FUNC_FN(length);
3101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(lgamma);
3111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_PIN(lgamma);
3121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(log);
3131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(log2);
3141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(log10);
3151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(log1p);
3161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(logb);
3171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_FN(mad);
3181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(max);
3191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_F(max);
3201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(min);
3211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_F(min);
3221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_FN(mix);
3231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_F(mix);
3241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_PFN(modf);
3251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    // nan
3261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(nextafter);
3271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(normalize);
3281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(pow);
3291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_IN(pown);
3301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(powr);
3311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(radians);
3321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(remainder);
3331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN_PIN(remquo);
3341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(rint);
3351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_IN(rootn);
3361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(round);
3371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(rsqrt);
3381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(sign);
3391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(sin);
3401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_PFN(sincos);
3411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(sinh);
3421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(sinpi);
3431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(sqrt);
3441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_FN(step);
3451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN_F(step);
3461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_F_FN(step);
3471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(tan);
3481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(tanh);
3491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(tanpi);
3501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(tgamma);
3511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_FN_FUNC_FN(trunc);
3521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    float time = end(index);
3541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
3561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_fp_math FAILED", time);
3571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
3581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
3591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_fp_math PASSED", time);
3601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
3611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
3631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
3641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_int_math(uint32_t index) {
3661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
3671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    start();
3681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_UIN_FUNC_IN(abs);
3701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_IN_FUNC_IN(clz);
3711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_IN_FUNC_IN_IN(min);
3721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_IN_FUNC_IN_IN(max);
3731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_I_FUNC_I_I_I(clamp);
3741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    float time = end(index);
3761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
3781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_int_math FAILED", time);
3791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
3801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
3811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_int_math PASSED", time);
3821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
3831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
3851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
3861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_basic_operators() {
3881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
3891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    int i = 0;
3901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(+);
3921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(-);
3931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(*);
3941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(/);
3951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(%);
3961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(<<);
3971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_INT_OP(>>);
3981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
3991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
4001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_basic_operators FAILED", 0);
4011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
4031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_basic_operators PASSED", 0);
4041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4051a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
4071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
4081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_CVT(to, from, type)                        \
4101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksrsDebug("Testing convert from " #from " to " #to, 0);   \
4111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksto##1 = from##1;                                        \
4121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksto##2 = convert_##type##2(from##2);                     \
4131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksto##3 = convert_##type##3(from##3);                     \
4141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksto##4 = convert_##type##4(from##4);
4151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#define TEST_CVT_MATRIX(to, type)   \
4171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, c, type);              \
4181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, uc, type);             \
4191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, s, type);              \
4201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, us, type);             \
4211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, i, type);              \
4221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, ui, type);             \
4231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur EubanksTEST_CVT(to, f, type);              \
4241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_convert() {
4261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
4271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(c, char);
4291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(uc, uchar);
4301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(s, short);
4311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(us, ushort);
4321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(i, int);
4331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(ui, uint);
4341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    TEST_CVT_MATRIX(f, float);
4351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
4371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_convert FAILED", 0);
4381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
4401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_convert PASSED", 0);
4411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
4441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
4451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid math_test(uint32_t index, int test_num) {
4471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
4481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_convert();
4491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_fp_math(index);
4501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_int_math(index);
4511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_basic_operators();
4521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
4531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
4541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
4551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
4571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
4581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
4591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
460