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