109a1bc75SAleksandar Markovic /* 209a1bc75SAleksandar Markovic * Test program for MIPS64R6 instruction DSRAV 309a1bc75SAleksandar Markovic * 409a1bc75SAleksandar Markovic * Copyright (C) 2019 Wave Computing, Inc. 509a1bc75SAleksandar Markovic * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 609a1bc75SAleksandar Markovic * 709a1bc75SAleksandar Markovic * This program is free software: you can redistribute it and/or modify 809a1bc75SAleksandar Markovic * it under the terms of the GNU General Public License as published by 909a1bc75SAleksandar Markovic * the Free Software Foundation, either version 2 of the License, or 1009a1bc75SAleksandar Markovic * (at your option) any later version. 1109a1bc75SAleksandar Markovic * 1209a1bc75SAleksandar Markovic * This program is distributed in the hope that it will be useful, 1309a1bc75SAleksandar Markovic * but WITHOUT ANY WARRANTY; without even the implied warranty of 1409a1bc75SAleksandar Markovic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1509a1bc75SAleksandar Markovic * GNU General Public License for more details. 1609a1bc75SAleksandar Markovic * 1709a1bc75SAleksandar Markovic * You should have received a copy of the GNU General Public License 1809a1bc75SAleksandar Markovic * along with this program. If not, see <https://www.gnu.org/licenses/>. 1909a1bc75SAleksandar Markovic * 2009a1bc75SAleksandar Markovic */ 2109a1bc75SAleksandar Markovic 2209a1bc75SAleksandar Markovic #include <sys/time.h> 2309a1bc75SAleksandar Markovic #include <stdint.h> 2409a1bc75SAleksandar Markovic 2509a1bc75SAleksandar Markovic #include "../../../../include/wrappers_mips64r6.h" 2609a1bc75SAleksandar Markovic #include "../../../../include/test_inputs_64.h" 2709a1bc75SAleksandar Markovic #include "../../../../include/test_utils_64.h" 2809a1bc75SAleksandar Markovic 2909a1bc75SAleksandar Markovic #define TEST_COUNT_TOTAL (PATTERN_INPUTS_64_COUNT + RANDOM_INPUTS_64_COUNT) 3009a1bc75SAleksandar Markovic 3109a1bc75SAleksandar Markovic 3209a1bc75SAleksandar Markovic int32_t main(void) 3309a1bc75SAleksandar Markovic { 34*8e6fe6b8SAleksandar Markovic char *isa_ase_name = "mips64r6"; 35*8e6fe6b8SAleksandar Markovic char *group_name = "Shift"; 3609a1bc75SAleksandar Markovic char *instruction_name = "DSRAV"; 3709a1bc75SAleksandar Markovic int32_t ret; 3809a1bc75SAleksandar Markovic uint32_t i, j; 3909a1bc75SAleksandar Markovic struct timeval start, end; 4009a1bc75SAleksandar Markovic double elapsed_time; 4109a1bc75SAleksandar Markovic 4209a1bc75SAleksandar Markovic uint64_t b64_result[TEST_COUNT_TOTAL]; 4309a1bc75SAleksandar Markovic uint64_t b64_expect[TEST_COUNT_TOTAL] = { 4409a1bc75SAleksandar Markovic 0xffffffffffffffffULL, /* 0 */ 4509a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 4609a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 4709a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 4809a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 4909a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 5009a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 5109a1bc75SAleksandar Markovic 0xffffffffffffffffULL, 5209a1bc75SAleksandar Markovic 0x0000000000000000ULL, /* 8 */ 5309a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5409a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5509a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5609a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5709a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5809a1bc75SAleksandar Markovic 0x0000000000000000ULL, 5909a1bc75SAleksandar Markovic 0x0000000000000000ULL, 6009a1bc75SAleksandar Markovic 0xffffffffffffffffULL, /* 16 */ 6109a1bc75SAleksandar Markovic 0xaaaaaaaaaaaaaaaaULL, 6209a1bc75SAleksandar Markovic 0xffffffffffeaaaaaULL, 6309a1bc75SAleksandar Markovic 0xfffffd5555555555ULL, 6409a1bc75SAleksandar Markovic 0xfffaaaaaaaaaaaaaULL, 6509a1bc75SAleksandar Markovic 0xfffffffffffff555ULL, 6609a1bc75SAleksandar Markovic 0xfffeaaaaaaaaaaaaULL, 6709a1bc75SAleksandar Markovic 0xffffffffffffd555ULL, 6809a1bc75SAleksandar Markovic 0x0000000000000000ULL, /* 24 */ 6909a1bc75SAleksandar Markovic 0x5555555555555555ULL, 7009a1bc75SAleksandar Markovic 0x0000000000155555ULL, 7109a1bc75SAleksandar Markovic 0x000002aaaaaaaaaaULL, 7209a1bc75SAleksandar Markovic 0x0005555555555555ULL, 7309a1bc75SAleksandar Markovic 0x0000000000000aaaULL, 7409a1bc75SAleksandar Markovic 0x0001555555555555ULL, 7509a1bc75SAleksandar Markovic 0x0000000000002aaaULL, 7609a1bc75SAleksandar Markovic 0xffffffffffffffffULL, /* 32 */ 7709a1bc75SAleksandar Markovic 0xccccccccccccccccULL, 7809a1bc75SAleksandar Markovic 0xfffffffffff33333ULL, 7909a1bc75SAleksandar Markovic 0xfffffe6666666666ULL, 8009a1bc75SAleksandar Markovic 0xfffcccccccccccccULL, 8109a1bc75SAleksandar Markovic 0xfffffffffffff999ULL, 8209a1bc75SAleksandar Markovic 0xffff333333333333ULL, 8309a1bc75SAleksandar Markovic 0xffffffffffffe666ULL, 8409a1bc75SAleksandar Markovic 0x0000000000000000ULL, /* 40 */ 8509a1bc75SAleksandar Markovic 0x3333333333333333ULL, 8609a1bc75SAleksandar Markovic 0x00000000000cccccULL, 8709a1bc75SAleksandar Markovic 0x0000019999999999ULL, 8809a1bc75SAleksandar Markovic 0x0003333333333333ULL, 8909a1bc75SAleksandar Markovic 0x0000000000000666ULL, 9009a1bc75SAleksandar Markovic 0x0000ccccccccccccULL, 9109a1bc75SAleksandar Markovic 0x0000000000001999ULL, 9209a1bc75SAleksandar Markovic 0xffffffffffffffffULL, /* 48 */ 9309a1bc75SAleksandar Markovic 0xe38e38e38e38e38eULL, 9409a1bc75SAleksandar Markovic 0xfffffffffff8e38eULL, 9509a1bc75SAleksandar Markovic 0xffffff1c71c71c71ULL, 9609a1bc75SAleksandar Markovic 0xfffe38e38e38e38eULL, 9709a1bc75SAleksandar Markovic 0xfffffffffffffc71ULL, 9809a1bc75SAleksandar Markovic 0xffff8e38e38e38e3ULL, 9909a1bc75SAleksandar Markovic 0xfffffffffffff1c7ULL, 10009a1bc75SAleksandar Markovic 0x0000000000000000ULL, /* 56 */ 10109a1bc75SAleksandar Markovic 0x1c71c71c71c71c71ULL, 10209a1bc75SAleksandar Markovic 0x0000000000071c71ULL, 10309a1bc75SAleksandar Markovic 0x000000e38e38e38eULL, 10409a1bc75SAleksandar Markovic 0x0001c71c71c71c71ULL, 10509a1bc75SAleksandar Markovic 0x000000000000038eULL, 10609a1bc75SAleksandar Markovic 0x000071c71c71c71cULL, 10709a1bc75SAleksandar Markovic 0x0000000000000e38ULL, 10809a1bc75SAleksandar Markovic 0x886ae6cc28625540ULL, /* 64 */ 10909a1bc75SAleksandar Markovic 0xff886ae6cc286255ULL, 11009a1bc75SAleksandar Markovic 0x886ae6cc28625540ULL, 11109a1bc75SAleksandar Markovic 0xfffe21ab9b30a189ULL, 11209a1bc75SAleksandar Markovic 0xfbbe00634d93c708ULL, 11309a1bc75SAleksandar Markovic 0xfffbbe00634d93c7ULL, 11409a1bc75SAleksandar Markovic 0xfbbe00634d93c708ULL, 11509a1bc75SAleksandar Markovic 0xffffeef8018d364fULL, 11609a1bc75SAleksandar Markovic 0xac5aaeaab9cf8b80ULL, /* 72 */ 11709a1bc75SAleksandar Markovic 0xffac5aaeaab9cf8bULL, 11809a1bc75SAleksandar Markovic 0xac5aaeaab9cf8b80ULL, 11909a1bc75SAleksandar Markovic 0xfffeb16abaaae73eULL, 12009a1bc75SAleksandar Markovic 0x704f164d5e31e24eULL, 12109a1bc75SAleksandar Markovic 0x00704f164d5e31e2ULL, 12209a1bc75SAleksandar Markovic 0x704f164d5e31e24eULL, 12309a1bc75SAleksandar Markovic 0x0001c13c593578c7ULL, 12409a1bc75SAleksandar Markovic }; 12509a1bc75SAleksandar Markovic 12609a1bc75SAleksandar Markovic gettimeofday(&start, NULL); 12709a1bc75SAleksandar Markovic 12809a1bc75SAleksandar Markovic for (i = 0; i < PATTERN_INPUTS_64_SHORT_COUNT; i++) { 12909a1bc75SAleksandar Markovic for (j = 0; j < PATTERN_INPUTS_64_SHORT_COUNT; j++) { 13009a1bc75SAleksandar Markovic do_mips64r6_DSRAV(b64_pattern + i, b64_pattern + j, 13109a1bc75SAleksandar Markovic b64_result + (PATTERN_INPUTS_64_SHORT_COUNT * i + j)); 13209a1bc75SAleksandar Markovic } 13309a1bc75SAleksandar Markovic } 13409a1bc75SAleksandar Markovic 13509a1bc75SAleksandar Markovic for (i = 0; i < RANDOM_INPUTS_64_SHORT_COUNT; i++) { 13609a1bc75SAleksandar Markovic for (j = 0; j < RANDOM_INPUTS_64_SHORT_COUNT; j++) { 13709a1bc75SAleksandar Markovic do_mips64r6_DSRAV(b64_random + i, b64_random + j, 13809a1bc75SAleksandar Markovic b64_result + (((PATTERN_INPUTS_64_SHORT_COUNT) * 13909a1bc75SAleksandar Markovic (PATTERN_INPUTS_64_SHORT_COUNT)) + 14009a1bc75SAleksandar Markovic RANDOM_INPUTS_64_SHORT_COUNT * i + j)); 14109a1bc75SAleksandar Markovic } 14209a1bc75SAleksandar Markovic } 14309a1bc75SAleksandar Markovic 14409a1bc75SAleksandar Markovic gettimeofday(&end, NULL); 14509a1bc75SAleksandar Markovic 14609a1bc75SAleksandar Markovic elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; 14709a1bc75SAleksandar Markovic elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; 14809a1bc75SAleksandar Markovic 14909a1bc75SAleksandar Markovic ret = check_results_64(instruction_name, TEST_COUNT_TOTAL, elapsed_time, 15009a1bc75SAleksandar Markovic b64_result, b64_expect); 15109a1bc75SAleksandar Markovic 15209a1bc75SAleksandar Markovic return ret; 15309a1bc75SAleksandar Markovic } 154