18598f5faSAleksandar Markovic /* 28598f5faSAleksandar Markovic * Test program for MSA instruction FMAX.D 38598f5faSAleksandar Markovic * 48598f5faSAleksandar Markovic * Copyright (C) 2019 Wave Computing, Inc. 58598f5faSAleksandar Markovic * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 68598f5faSAleksandar Markovic * 78598f5faSAleksandar Markovic * This program is free software: you can redistribute it and/or modify 88598f5faSAleksandar Markovic * it under the terms of the GNU General Public License as published by 98598f5faSAleksandar Markovic * the Free Software Foundation, either version 2 of the License, or 108598f5faSAleksandar Markovic * (at your option) any later version. 118598f5faSAleksandar Markovic * 128598f5faSAleksandar Markovic * This program is distributed in the hope that it will be useful, 138598f5faSAleksandar Markovic * but WITHOUT ANY WARRANTY; without even the implied warranty of 148598f5faSAleksandar Markovic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 158598f5faSAleksandar Markovic * GNU General Public License for more details. 168598f5faSAleksandar Markovic * 178598f5faSAleksandar Markovic * You should have received a copy of the GNU General Public License 188598f5faSAleksandar Markovic * along with this program. If not, see <https://www.gnu.org/licenses/>. 198598f5faSAleksandar Markovic * 208598f5faSAleksandar Markovic */ 218598f5faSAleksandar Markovic 228598f5faSAleksandar Markovic #include <sys/time.h> 238598f5faSAleksandar Markovic #include <stdint.h> 248598f5faSAleksandar Markovic 258598f5faSAleksandar Markovic #include "../../../../include/wrappers_msa.h" 268598f5faSAleksandar Markovic #include "../../../../include/test_inputs_128.h" 278598f5faSAleksandar Markovic #include "../../../../include/test_utils_128.h" 288598f5faSAleksandar Markovic 298598f5faSAleksandar Markovic #define TEST_COUNT_TOTAL ( \ 308598f5faSAleksandar Markovic (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ 318598f5faSAleksandar Markovic (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) 328598f5faSAleksandar Markovic 338598f5faSAleksandar Markovic 348598f5faSAleksandar Markovic int32_t main(void) 358598f5faSAleksandar Markovic { 36*8e6fe6b8SAleksandar Markovic char *isa_ase_name = "MSA"; 37*8e6fe6b8SAleksandar Markovic char *group_name = "Float Max Min"; 388598f5faSAleksandar Markovic char *instruction_name = "FMAX.D"; 398598f5faSAleksandar Markovic int32_t ret; 408598f5faSAleksandar Markovic uint32_t i, j; 418598f5faSAleksandar Markovic struct timeval start, end; 428598f5faSAleksandar Markovic double elapsed_time; 438598f5faSAleksandar Markovic 448598f5faSAleksandar Markovic uint64_t b128_result[TEST_COUNT_TOTAL][2]; 458598f5faSAleksandar Markovic uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { 468598f5faSAleksandar Markovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ 478598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 488598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, 498598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 508598f5faSAleksandar Markovic { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, 518598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 528598f5faSAleksandar Markovic { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, 538598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, 548598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ 558598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 568598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 578598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 588598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 598598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 608598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x38e38e38e38e38e3ULL, }, 618598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0x0000000000000000ULL, }, 628598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ 638598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 648598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, 658598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 668598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, 678598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 688598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, 698598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, 708598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ 718598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 728598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 738598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 748598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 758598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 768598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 778598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 788598f5faSAleksandar Markovic { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ 798598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 808598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, 818598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 828598f5faSAleksandar Markovic { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, 838598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 848598f5faSAleksandar Markovic { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, 858598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, 868598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ 878598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 888598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 898598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 908598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 918598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 928598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x38e38e38e38e38e3ULL, }, 938598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 948598f5faSAleksandar Markovic { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ 958598f5faSAleksandar Markovic { 0x0000000000000000ULL, 0x38e38e38e38e38e3ULL, }, 968598f5faSAleksandar Markovic { 0xaaaaaaaaaaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, 978598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 988598f5faSAleksandar Markovic { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, 998598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x38e38e38e38e38e3ULL, }, 1008598f5faSAleksandar Markovic { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, 1018598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, 1028598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ 1038598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0x0000000000000000ULL, }, 1048598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, 1058598f5faSAleksandar Markovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 1068598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, 1078598f5faSAleksandar Markovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 1088598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, 1098598f5faSAleksandar Markovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, 1108598f5faSAleksandar Markovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ 1118598f5faSAleksandar Markovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, 1128598f5faSAleksandar Markovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, 1138598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, 1148598f5faSAleksandar Markovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, 1158598f5faSAleksandar Markovic { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, 1168598f5faSAleksandar Markovic { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, 1178598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, 1188598f5faSAleksandar Markovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 72 */ 1198598f5faSAleksandar Markovic { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, 1208598f5faSAleksandar Markovic { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, 1218598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, 1228598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, 1238598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, 1248598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, 1258598f5faSAleksandar Markovic { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, 1268598f5faSAleksandar Markovic }; 1278598f5faSAleksandar Markovic 1288598f5faSAleksandar Markovic reset_msa_registers(); 1298598f5faSAleksandar Markovic 1308598f5faSAleksandar Markovic gettimeofday(&start, NULL); 1318598f5faSAleksandar Markovic 1328598f5faSAleksandar Markovic for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { 1338598f5faSAleksandar Markovic for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { 1348598f5faSAleksandar Markovic do_msa_FMAX_D(b128_pattern[i], b128_pattern[j], 1358598f5faSAleksandar Markovic b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); 1368598f5faSAleksandar Markovic } 1378598f5faSAleksandar Markovic } 1388598f5faSAleksandar Markovic 1398598f5faSAleksandar Markovic for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { 1408598f5faSAleksandar Markovic for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { 1418598f5faSAleksandar Markovic do_msa_FMAX_D(b128_random[i], b128_random[j], 1428598f5faSAleksandar Markovic b128_result[((PATTERN_INPUTS_SHORT_COUNT) * 1438598f5faSAleksandar Markovic (PATTERN_INPUTS_SHORT_COUNT)) + 1448598f5faSAleksandar Markovic RANDOM_INPUTS_SHORT_COUNT * i + j]); 1458598f5faSAleksandar Markovic } 1468598f5faSAleksandar Markovic } 1478598f5faSAleksandar Markovic 1488598f5faSAleksandar Markovic gettimeofday(&end, NULL); 1498598f5faSAleksandar Markovic 1508598f5faSAleksandar Markovic elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; 1518598f5faSAleksandar Markovic elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; 1528598f5faSAleksandar Markovic 153*8e6fe6b8SAleksandar Markovic ret = check_results_128(isa_ase_name, group_name, instruction_name, 154*8e6fe6b8SAleksandar Markovic TEST_COUNT_TOTAL, elapsed_time, 1558598f5faSAleksandar Markovic &b128_result[0][0], &b128_expect[0][0]); 1568598f5faSAleksandar Markovic 1578598f5faSAleksandar Markovic return ret; 1588598f5faSAleksandar Markovic } 159