1*99d46107SAleksandar Markovic /* 2*99d46107SAleksandar Markovic * Test program for MIPS64R6 instruction NOR 3*99d46107SAleksandar Markovic * 4*99d46107SAleksandar Markovic * Copyright (C) 2019 Wave Computing, Inc. 5*99d46107SAleksandar Markovic * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 6*99d46107SAleksandar Markovic * 7*99d46107SAleksandar Markovic * This program is free software: you can redistribute it and/or modify 8*99d46107SAleksandar Markovic * it under the terms of the GNU General Public License as published by 9*99d46107SAleksandar Markovic * the Free Software Foundation, either version 2 of the License, or 10*99d46107SAleksandar Markovic * (at your option) any later version. 11*99d46107SAleksandar Markovic * 12*99d46107SAleksandar Markovic * This program is distributed in the hope that it will be useful, 13*99d46107SAleksandar Markovic * but WITHOUT ANY WARRANTY; without even the implied warranty of 14*99d46107SAleksandar Markovic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*99d46107SAleksandar Markovic * GNU General Public License for more details. 16*99d46107SAleksandar Markovic * 17*99d46107SAleksandar Markovic * You should have received a copy of the GNU General Public License 18*99d46107SAleksandar Markovic * along with this program. If not, see <https://www.gnu.org/licenses/>. 19*99d46107SAleksandar Markovic * 20*99d46107SAleksandar Markovic */ 21*99d46107SAleksandar Markovic 22*99d46107SAleksandar Markovic #include <sys/time.h> 23*99d46107SAleksandar Markovic #include <stdint.h> 24*99d46107SAleksandar Markovic 25*99d46107SAleksandar Markovic #include "../../../../include/wrappers_mips64r6.h" 26*99d46107SAleksandar Markovic #include "../../../../include/test_inputs_64.h" 27*99d46107SAleksandar Markovic #include "../../../../include/test_utils_64.h" 28*99d46107SAleksandar Markovic 29*99d46107SAleksandar Markovic #define TEST_COUNT_TOTAL (PATTERN_INPUTS_64_COUNT + RANDOM_INPUTS_64_COUNT) 30*99d46107SAleksandar Markovic 31*99d46107SAleksandar Markovic 32*99d46107SAleksandar Markovic int32_t main(void) 33*99d46107SAleksandar Markovic { 34*99d46107SAleksandar Markovic char *instruction_name = "NOR"; 35*99d46107SAleksandar Markovic int32_t ret; 36*99d46107SAleksandar Markovic uint32_t i, j; 37*99d46107SAleksandar Markovic struct timeval start, end; 38*99d46107SAleksandar Markovic double elapsed_time; 39*99d46107SAleksandar Markovic 40*99d46107SAleksandar Markovic uint64_t b64_result[TEST_COUNT_TOTAL]; 41*99d46107SAleksandar Markovic uint64_t b64_expect[TEST_COUNT_TOTAL] = { 42*99d46107SAleksandar Markovic 0x8000000000000000ULL, /* 0 */ 43*99d46107SAleksandar Markovic 0xffffffffffffffffULL, 44*99d46107SAleksandar Markovic 0xfffffc0000000000ULL, 45*99d46107SAleksandar Markovic 0xffffffffffe00000ULL, 46*99d46107SAleksandar Markovic 0xfffffffffffff000ULL, 47*99d46107SAleksandar Markovic 0xfff8000000000000ULL, 48*99d46107SAleksandar Markovic 0xffffffffffffc000ULL, 49*99d46107SAleksandar Markovic 0xfffe000000000000ULL, 50*99d46107SAleksandar Markovic 0x0000000000000000ULL, /* 8 */ 51*99d46107SAleksandar Markovic 0x0000000000000000ULL, 52*99d46107SAleksandar Markovic 0x0000000000000000ULL, 53*99d46107SAleksandar Markovic 0x0000000000000000ULL, 54*99d46107SAleksandar Markovic 0x0000000000000000ULL, 55*99d46107SAleksandar Markovic 0x0000000000000000ULL, 56*99d46107SAleksandar Markovic 0x0000000000000000ULL, 57*99d46107SAleksandar Markovic 0x0000000000000000ULL, 58*99d46107SAleksandar Markovic 0x0000000000000000ULL, /* 16 */ 59*99d46107SAleksandar Markovic 0xaaaaaaaaaaaaaaaaULL, 60*99d46107SAleksandar Markovic 0xaaaaa80000000000ULL, 61*99d46107SAleksandar Markovic 0x5555555555400000ULL, 62*99d46107SAleksandar Markovic 0xaaaaaaaaaaaaa000ULL, 63*99d46107SAleksandar Markovic 0x5550000000000000ULL, 64*99d46107SAleksandar Markovic 0xaaaaaaaaaaaa8000ULL, 65*99d46107SAleksandar Markovic 0x5554000000000000ULL, 66*99d46107SAleksandar Markovic 0x8000000000000000ULL, /* 24 */ 67*99d46107SAleksandar Markovic 0x5555555555555555ULL, 68*99d46107SAleksandar Markovic 0x5555540000000000ULL, 69*99d46107SAleksandar Markovic 0xaaaaaaaaaaa00000ULL, 70*99d46107SAleksandar Markovic 0x5555555555555000ULL, 71*99d46107SAleksandar Markovic 0xaaa8000000000000ULL, 72*99d46107SAleksandar Markovic 0x5555555555554000ULL, 73*99d46107SAleksandar Markovic 0xaaaa000000000000ULL, 74*99d46107SAleksandar Markovic 0x0000000000000000ULL, /* 32 */ 75*99d46107SAleksandar Markovic 0xccccccccccccccccULL, 76*99d46107SAleksandar Markovic 0x3333300000000000ULL, 77*99d46107SAleksandar Markovic 0x9999999999800000ULL, 78*99d46107SAleksandar Markovic 0xccccccccccccc000ULL, 79*99d46107SAleksandar Markovic 0x6660000000000000ULL, 80*99d46107SAleksandar Markovic 0x3333333333330000ULL, 81*99d46107SAleksandar Markovic 0x9998000000000000ULL, 82*99d46107SAleksandar Markovic 0x8000000000000000ULL, /* 40 */ 83*99d46107SAleksandar Markovic 0x3333333333333333ULL, 84*99d46107SAleksandar Markovic 0xcccccc0000000000ULL, 85*99d46107SAleksandar Markovic 0x6666666666600000ULL, 86*99d46107SAleksandar Markovic 0x3333333333333000ULL, 87*99d46107SAleksandar Markovic 0x9998000000000000ULL, 88*99d46107SAleksandar Markovic 0xccccccccccccc000ULL, 89*99d46107SAleksandar Markovic 0x6666000000000000ULL, 90*99d46107SAleksandar Markovic 0x0000000000000000ULL, /* 48 */ 91*99d46107SAleksandar Markovic 0xe38e38e38e38e38eULL, 92*99d46107SAleksandar Markovic 0xe38e380000000000ULL, 93*99d46107SAleksandar Markovic 0x1c71c71c71c00000ULL, 94*99d46107SAleksandar Markovic 0xe38e38e38e38e000ULL, 95*99d46107SAleksandar Markovic 0x1c70000000000000ULL, 96*99d46107SAleksandar Markovic 0x8e38e38e38e38000ULL, 97*99d46107SAleksandar Markovic 0xc71c000000000000ULL, 98*99d46107SAleksandar Markovic 0x8000000000000000ULL, /* 56 */ 99*99d46107SAleksandar Markovic 0x1c71c71c71c71c71ULL, 100*99d46107SAleksandar Markovic 0x1c71c40000000000ULL, 101*99d46107SAleksandar Markovic 0xe38e38e38e200000ULL, 102*99d46107SAleksandar Markovic 0x1c71c71c71c71000ULL, 103*99d46107SAleksandar Markovic 0xe388000000000000ULL, 104*99d46107SAleksandar Markovic 0x71c71c71c71c4000ULL, 105*99d46107SAleksandar Markovic 0x38e2000000000000ULL, 106*99d46107SAleksandar Markovic 0x886ae6cc28625540ULL, /* 64 */ 107*99d46107SAleksandar Markovic 0x6ae6cc2862554000ULL, 108*99d46107SAleksandar Markovic 0x886ae6cc28625540ULL, 109*99d46107SAleksandar Markovic 0xb9b30a1895500000ULL, 110*99d46107SAleksandar Markovic 0xfbbe00634d93c708ULL, 111*99d46107SAleksandar Markovic 0xbe00634d93c70800ULL, 112*99d46107SAleksandar Markovic 0xfbbe00634d93c708ULL, 113*99d46107SAleksandar Markovic 0x8018d364f1c20000ULL, 114*99d46107SAleksandar Markovic 0xac5aaeaab9cf8b80ULL, /* 72 */ 115*99d46107SAleksandar Markovic 0x5aaeaab9cf8b8000ULL, 116*99d46107SAleksandar Markovic 0xac5aaeaab9cf8b80ULL, 117*99d46107SAleksandar Markovic 0xabaaae73e2e00000ULL, 118*99d46107SAleksandar Markovic 0x704f164d5e31e24eULL, 119*99d46107SAleksandar Markovic 0x4f164d5e31e24e00ULL, 120*99d46107SAleksandar Markovic 0x704f164d5e31e24eULL, 121*99d46107SAleksandar Markovic 0xc593578c78938000ULL, 122*99d46107SAleksandar Markovic }; 123*99d46107SAleksandar Markovic 124*99d46107SAleksandar Markovic gettimeofday(&start, NULL); 125*99d46107SAleksandar Markovic 126*99d46107SAleksandar Markovic for (i = 0; i < PATTERN_INPUTS_64_SHORT_COUNT; i++) { 127*99d46107SAleksandar Markovic for (j = 0; j < PATTERN_INPUTS_64_SHORT_COUNT; j++) { 128*99d46107SAleksandar Markovic do_mips64r6_NOR(b64_pattern + i, b64_pattern + j, 129*99d46107SAleksandar Markovic b64_result + (PATTERN_INPUTS_64_SHORT_COUNT * i + j)); 130*99d46107SAleksandar Markovic } 131*99d46107SAleksandar Markovic } 132*99d46107SAleksandar Markovic 133*99d46107SAleksandar Markovic for (i = 0; i < RANDOM_INPUTS_64_SHORT_COUNT; i++) { 134*99d46107SAleksandar Markovic for (j = 0; j < RANDOM_INPUTS_64_SHORT_COUNT; j++) { 135*99d46107SAleksandar Markovic do_mips64r6_NOR(b64_random + i, b64_random + j, 136*99d46107SAleksandar Markovic b64_result + (((PATTERN_INPUTS_64_SHORT_COUNT) * 137*99d46107SAleksandar Markovic (PATTERN_INPUTS_64_SHORT_COUNT)) + 138*99d46107SAleksandar Markovic RANDOM_INPUTS_64_SHORT_COUNT * i + j)); 139*99d46107SAleksandar Markovic } 140*99d46107SAleksandar Markovic } 141*99d46107SAleksandar Markovic 142*99d46107SAleksandar Markovic gettimeofday(&end, NULL); 143*99d46107SAleksandar Markovic 144*99d46107SAleksandar Markovic elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; 145*99d46107SAleksandar Markovic elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; 146*99d46107SAleksandar Markovic 147*99d46107SAleksandar Markovic ret = check_results_64(instruction_name, TEST_COUNT_TOTAL, elapsed_time, 148*99d46107SAleksandar Markovic b64_result, b64_expect); 149*99d46107SAleksandar Markovic 150*99d46107SAleksandar Markovic return ret; 151*99d46107SAleksandar Markovic } 152