11be82d89SMateja Marjanovic /* 21be82d89SMateja Marjanovic * Test program for MSA instruction AVE_S.D 31be82d89SMateja Marjanovic * 4750541c4SAleksandar Markovic * Copyright (C) 2019 Wave Computing, Inc. 5750541c4SAleksandar Markovic * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 6750541c4SAleksandar Markovic * Copyright (C) 2019 RT-RK Computer Based Systems LLC 7750541c4SAleksandar Markovic * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.com> 81be82d89SMateja Marjanovic * 91be82d89SMateja Marjanovic * This program is free software: you can redistribute it and/or modify 101be82d89SMateja Marjanovic * it under the terms of the GNU General Public License as published by 111be82d89SMateja Marjanovic * the Free Software Foundation, either version 2 of the License, or 121be82d89SMateja Marjanovic * (at your option) any later version. 131be82d89SMateja Marjanovic * 141be82d89SMateja Marjanovic * This program is distributed in the hope that it will be useful, 151be82d89SMateja Marjanovic * but WITHOUT ANY WARRANTY; without even the implied warranty of 161be82d89SMateja Marjanovic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 171be82d89SMateja Marjanovic * GNU General Public License for more details. 181be82d89SMateja Marjanovic * 191be82d89SMateja Marjanovic * You should have received a copy of the GNU General Public License 201be82d89SMateja Marjanovic * along with this program. If not, see <https://www.gnu.org/licenses/>. 211be82d89SMateja Marjanovic * 221be82d89SMateja Marjanovic */ 231be82d89SMateja Marjanovic 241be82d89SMateja Marjanovic #include <sys/time.h> 251be82d89SMateja Marjanovic #include <stdint.h> 261be82d89SMateja Marjanovic 271be82d89SMateja Marjanovic #include "../../../../include/wrappers_msa.h" 28750541c4SAleksandar Markovic #include "../../../../include/test_inputs_128.h" 29750541c4SAleksandar Markovic #include "../../../../include/test_utils_128.h" 301be82d89SMateja Marjanovic 311be82d89SMateja Marjanovic #define TEST_COUNT_TOTAL ( \ 321be82d89SMateja Marjanovic (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ 331be82d89SMateja Marjanovic (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) 341be82d89SMateja Marjanovic 351be82d89SMateja Marjanovic 361be82d89SMateja Marjanovic int32_t main(void) 371be82d89SMateja Marjanovic { 381be82d89SMateja Marjanovic char *instruction_name = "AVE_S.D"; 391be82d89SMateja Marjanovic int32_t ret; 401be82d89SMateja Marjanovic uint32_t i, j; 411be82d89SMateja Marjanovic struct timeval start, end; 421be82d89SMateja Marjanovic double elapsed_time; 431be82d89SMateja Marjanovic 441be82d89SMateja Marjanovic uint64_t b128_result[TEST_COUNT_TOTAL][2]; 451be82d89SMateja Marjanovic uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { 461be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ 471be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 481be82d89SMateja Marjanovic { 0xd555555555555554ULL, 0xd555555555555554ULL, }, 491be82d89SMateja Marjanovic { 0x2aaaaaaaaaaaaaaaULL, 0x2aaaaaaaaaaaaaaaULL, }, 501be82d89SMateja Marjanovic { 0xe666666666666665ULL, 0xe666666666666665ULL, }, 511be82d89SMateja Marjanovic { 0x1999999999999999ULL, 0x1999999999999999ULL, }, 521be82d89SMateja Marjanovic { 0xf1c71c71c71c71c6ULL, 0x1c71c71c71c71c71ULL, }, 531be82d89SMateja Marjanovic { 0x0e38e38e38e38e38ULL, 0xe38e38e38e38e38dULL, }, 541be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 8 */ 551be82d89SMateja Marjanovic { 0x0000000000000000ULL, 0x0000000000000000ULL, }, 561be82d89SMateja Marjanovic { 0xd555555555555555ULL, 0xd555555555555555ULL, }, 571be82d89SMateja Marjanovic { 0x2aaaaaaaaaaaaaaaULL, 0x2aaaaaaaaaaaaaaaULL, }, 581be82d89SMateja Marjanovic { 0xe666666666666666ULL, 0xe666666666666666ULL, }, 591be82d89SMateja Marjanovic { 0x1999999999999999ULL, 0x1999999999999999ULL, }, 601be82d89SMateja Marjanovic { 0xf1c71c71c71c71c7ULL, 0x1c71c71c71c71c71ULL, }, 611be82d89SMateja Marjanovic { 0x0e38e38e38e38e38ULL, 0xe38e38e38e38e38eULL, }, 621be82d89SMateja Marjanovic { 0xd555555555555554ULL, 0xd555555555555554ULL, }, /* 16 */ 631be82d89SMateja Marjanovic { 0xd555555555555555ULL, 0xd555555555555555ULL, }, 641be82d89SMateja Marjanovic { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, 651be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 661be82d89SMateja Marjanovic { 0xbbbbbbbbbbbbbbbbULL, 0xbbbbbbbbbbbbbbbbULL, }, 671be82d89SMateja Marjanovic { 0xeeeeeeeeeeeeeeeeULL, 0xeeeeeeeeeeeeeeeeULL, }, 681be82d89SMateja Marjanovic { 0xc71c71c71c71c71cULL, 0xf1c71c71c71c71c6ULL, }, 691be82d89SMateja Marjanovic { 0xe38e38e38e38e38dULL, 0xb8e38e38e38e38e3ULL, }, 701be82d89SMateja Marjanovic { 0x2aaaaaaaaaaaaaaaULL, 0x2aaaaaaaaaaaaaaaULL, }, /* 24 */ 711be82d89SMateja Marjanovic { 0x2aaaaaaaaaaaaaaaULL, 0x2aaaaaaaaaaaaaaaULL, }, 721be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 731be82d89SMateja Marjanovic { 0x5555555555555555ULL, 0x5555555555555555ULL, }, 741be82d89SMateja Marjanovic { 0x1111111111111110ULL, 0x1111111111111110ULL, }, 751be82d89SMateja Marjanovic { 0x4444444444444444ULL, 0x4444444444444444ULL, }, 761be82d89SMateja Marjanovic { 0x1c71c71c71c71c71ULL, 0x471c71c71c71c71cULL, }, 771be82d89SMateja Marjanovic { 0x38e38e38e38e38e3ULL, 0x0e38e38e38e38e38ULL, }, 781be82d89SMateja Marjanovic { 0xe666666666666665ULL, 0xe666666666666665ULL, }, /* 32 */ 791be82d89SMateja Marjanovic { 0xe666666666666666ULL, 0xe666666666666666ULL, }, 801be82d89SMateja Marjanovic { 0xbbbbbbbbbbbbbbbbULL, 0xbbbbbbbbbbbbbbbbULL, }, 811be82d89SMateja Marjanovic { 0x1111111111111110ULL, 0x1111111111111110ULL, }, 821be82d89SMateja Marjanovic { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, 831be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 841be82d89SMateja Marjanovic { 0xd82d82d82d82d82dULL, 0x02d82d82d82d82d7ULL, }, 851be82d89SMateja Marjanovic { 0xf49f49f49f49f49eULL, 0xc9f49f49f49f49f4ULL, }, 861be82d89SMateja Marjanovic { 0x1999999999999999ULL, 0x1999999999999999ULL, }, /* 40 */ 871be82d89SMateja Marjanovic { 0x1999999999999999ULL, 0x1999999999999999ULL, }, 881be82d89SMateja Marjanovic { 0xeeeeeeeeeeeeeeeeULL, 0xeeeeeeeeeeeeeeeeULL, }, 891be82d89SMateja Marjanovic { 0x4444444444444444ULL, 0x4444444444444444ULL, }, 901be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 911be82d89SMateja Marjanovic { 0x3333333333333333ULL, 0x3333333333333333ULL, }, 921be82d89SMateja Marjanovic { 0x0b60b60b60b60b60ULL, 0x360b60b60b60b60bULL, }, 931be82d89SMateja Marjanovic { 0x27d27d27d27d27d2ULL, 0xfd27d27d27d27d27ULL, }, 941be82d89SMateja Marjanovic { 0xf1c71c71c71c71c6ULL, 0x1c71c71c71c71c71ULL, }, /* 48 */ 951be82d89SMateja Marjanovic { 0xf1c71c71c71c71c7ULL, 0x1c71c71c71c71c71ULL, }, 961be82d89SMateja Marjanovic { 0xc71c71c71c71c71cULL, 0xf1c71c71c71c71c6ULL, }, 971be82d89SMateja Marjanovic { 0x1c71c71c71c71c71ULL, 0x471c71c71c71c71cULL, }, 981be82d89SMateja Marjanovic { 0xd82d82d82d82d82dULL, 0x02d82d82d82d82d7ULL, }, 991be82d89SMateja Marjanovic { 0x0b60b60b60b60b60ULL, 0x360b60b60b60b60bULL, }, 1001be82d89SMateja Marjanovic { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, 1011be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 1021be82d89SMateja Marjanovic { 0x0e38e38e38e38e38ULL, 0xe38e38e38e38e38dULL, }, /* 56 */ 1031be82d89SMateja Marjanovic { 0x0e38e38e38e38e38ULL, 0xe38e38e38e38e38eULL, }, 1041be82d89SMateja Marjanovic { 0xe38e38e38e38e38dULL, 0xb8e38e38e38e38e3ULL, }, 1051be82d89SMateja Marjanovic { 0x38e38e38e38e38e3ULL, 0x0e38e38e38e38e38ULL, }, 1061be82d89SMateja Marjanovic { 0xf49f49f49f49f49eULL, 0xc9f49f49f49f49f4ULL, }, 1071be82d89SMateja Marjanovic { 0x27d27d27d27d27d2ULL, 0xfd27d27d27d27d27ULL, }, 1081be82d89SMateja Marjanovic { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, 1091be82d89SMateja Marjanovic { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, 1101be82d89SMateja Marjanovic { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ 1111be82d89SMateja Marjanovic { 0xc2147397bafb0e24ULL, 0x2f2f633c89dd8184ULL, }, 1121be82d89SMateja Marjanovic { 0x9a62cabb7118f060ULL, 0x399fe92f54d36a90ULL, }, 1131be82d89SMateja Marjanovic { 0xfc5cfe8cc34a1bc7ULL, 0xecac4a1bd3df4956ULL, }, 1141be82d89SMateja Marjanovic { 0xc2147397bafb0e24ULL, 0x2f2f633c89dd8184ULL, }, 1151be82d89SMateja Marjanovic { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, 1161be82d89SMateja Marjanovic { 0xd40c578703b1a944ULL, 0x1d68410ce0353c08ULL, }, 1171be82d89SMateja Marjanovic { 0x36068b5855e2d4abULL, 0xd074a1f95f411aceULL, }, 1181be82d89SMateja Marjanovic { 0x9a62cabb7118f060ULL, 0x399fe92f54d36a90ULL, }, /* 72 */ 1191be82d89SMateja Marjanovic { 0xd40c578703b1a944ULL, 0x1d68410ce0353c08ULL, }, 1201be82d89SMateja Marjanovic { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, 1211be82d89SMateja Marjanovic { 0x0e54e27c0c00b6e7ULL, 0xdae527ec2a3703daULL, }, 1221be82d89SMateja Marjanovic { 0xfc5cfe8cc34a1bc7ULL, 0xecac4a1bd3df4956ULL, }, 1231be82d89SMateja Marjanovic { 0x36068b5855e2d4abULL, 0xd074a1f95f411aceULL, }, 124750541c4SAleksandar Markovic { 0x0e54e27c0c00b6e7ULL, 0xdae527ec2a3703daULL, }, 125750541c4SAleksandar Markovic { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, 1261be82d89SMateja Marjanovic }; 1271be82d89SMateja Marjanovic 128*ca693d1cSAleksandar Markovic reset_msa_registers(); 129*ca693d1cSAleksandar Markovic 1301be82d89SMateja Marjanovic gettimeofday(&start, NULL); 1311be82d89SMateja Marjanovic 1321be82d89SMateja Marjanovic for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { 1331be82d89SMateja Marjanovic for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { 1341be82d89SMateja Marjanovic do_msa_AVE_S_D(b128_pattern[i], b128_pattern[j], 1351be82d89SMateja Marjanovic b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); 1361be82d89SMateja Marjanovic } 1371be82d89SMateja Marjanovic } 1381be82d89SMateja Marjanovic 1391be82d89SMateja Marjanovic for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { 1401be82d89SMateja Marjanovic for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { 1411be82d89SMateja Marjanovic do_msa_AVE_S_D(b128_random[i], b128_random[j], 1421be82d89SMateja Marjanovic b128_result[((PATTERN_INPUTS_SHORT_COUNT) * 1431be82d89SMateja Marjanovic (PATTERN_INPUTS_SHORT_COUNT)) + 1441be82d89SMateja Marjanovic RANDOM_INPUTS_SHORT_COUNT * i + j]); 1451be82d89SMateja Marjanovic } 1461be82d89SMateja Marjanovic } 1471be82d89SMateja Marjanovic 1481be82d89SMateja Marjanovic gettimeofday(&end, NULL); 1491be82d89SMateja Marjanovic 1501be82d89SMateja Marjanovic elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; 1511be82d89SMateja Marjanovic elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; 1521be82d89SMateja Marjanovic 1531be82d89SMateja Marjanovic ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, 1541be82d89SMateja Marjanovic &b128_result[0][0], &b128_expect[0][0]); 1551be82d89SMateja Marjanovic 1561be82d89SMateja Marjanovic return ret; 1571be82d89SMateja Marjanovic } 158