qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

tests/tcg: target/mips: Add test utilities for 64-bit tests

Add test utilities for 64-bit tests. Some of MIPS64R6 instructions
require 64-bit inputs to be 32-bit integers sign-extedned to 64 bits,
hence the need for sets of such inputs.

Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Reviewed-by: Aleksandar Rikalo <arikalo@wavecomp.com>
Message-Id: <1551800076-8104-6-git-send-email-aleksandar.markovic@rt-rk.com>

+286
+208
tests/tcg/mips/include/test_inputs_64.h
··· 1 + /* 2 + * Header file for pattern and random test inputs 3 + * 4 + * Copyright (C) 2019 Wave Computing, Inc. 5 + * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 6 + * 7 + * This program is free software: you can redistribute it and/or modify 8 + * it under the terms of the GNU General Public License as published by 9 + * the Free Software Foundation, either version 2 of the License, or 10 + * (at your option) any later version. 11 + * 12 + * This program is distributed in the hope that it will be useful, 13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 + * GNU General Public License for more details. 16 + * 17 + * You should have received a copy of the GNU General Public License 18 + * along with this program. If not, see <https://www.gnu.org/licenses/>. 19 + * 20 + */ 21 + 22 + #ifndef TEST_INPUTS_64_H 23 + #define TEST_INPUTS_64_H 24 + 25 + #include <stdint.h> 26 + 27 + 28 + #define PATTERN_INPUTS_64_COUNT 64 29 + #define PATTERN_INPUTS_64_SHORT_COUNT 8 30 + 31 + static const uint64_t b64_pattern[PATTERN_INPUTS_64_COUNT] = { 32 + 0xFFFFFFFFFFFFFFFFULL, /* 0 */ 33 + 0x0000000000000000ULL, 34 + 0xAAAAAAAAAAAAAAAAULL, 35 + 0x5555555555555555ULL, 36 + 0xCCCCCCCCCCCCCCCCULL, 37 + 0x3333333333333333ULL, 38 + 0xE38E38E38E38E38EULL, 39 + 0x1C71C71C71C71C71ULL, 40 + 0xF0F0F0F0F0F0F0F0ULL, /* 8 */ 41 + 0x0F0F0F0F0F0F0F0FULL, 42 + 0xF83E0F83E0F83E0FULL, 43 + 0x07C1F07C1F07C1F0ULL, 44 + 0xFC0FC0FC0FC0FC0FULL, 45 + 0x03F03F03F03F03F0ULL, 46 + 0xFE03F80FE03F80FEULL, 47 + 0x01FC07F01FC07F01ULL, 48 + 0xFF00FF00FF00FF00ULL, /* 16 */ 49 + 0x00FF00FF00FF00FFULL, 50 + 0xFF803FE00FF803FEULL, 51 + 0x007FC01FF007FC01ULL, 52 + 0xFFC00FFC00FFC00FULL, 53 + 0x003FF003FF003FF0ULL, 54 + 0xFFE003FF800FFE00ULL, 55 + 0x001FFC007FF001FFULL, 56 + 0xFFF000FFF000FFF0ULL, /* 24 */ 57 + 0x000FFF000FFF000FULL, 58 + 0xFFF8003FFE000FFFULL, 59 + 0x0007FFC001FFF000ULL, 60 + 0xFFFC000FFFC000FFULL, 61 + 0x0003FFF0003FFF00ULL, 62 + 0xFFFE0003FFF8000FULL, 63 + 0x0001FFFC0007FFF0ULL, 64 + 0xFFFF0000FFFF0000ULL, /* 32 */ 65 + 0x0000FFFF0000FFFFULL, 66 + 0xFFFF80003FFFE000ULL, 67 + 0x00007FFFC0001FFFULL, 68 + 0xFFFFC0000FFFFC00ULL, 69 + 0x00003FFFF00003FFULL, 70 + 0xFFFFE00003FFFF80ULL, 71 + 0x00001FFFFC00007FULL, 72 + 0xFFFFF00000FFFFF0ULL, /* 40 */ 73 + 0x00000FFFFF00000FULL, 74 + 0xFFFFF800003FFFFEULL, 75 + 0x000007FFFFC00001ULL, 76 + 0xFFFFFC00000FFFFFULL, 77 + 0x000003FFFFF00000ULL, 78 + 0xFFFFFE000003FFFFULL, 79 + 0x000001FFFFFC0000ULL, 80 + 0xFFFFFF000000FFFFULL, /* 48 */ 81 + 0x000000FFFFFF0000ULL, 82 + 0xFFFFFF8000003FFFULL, 83 + 0x0000007FFFFFC000ULL, 84 + 0xFFFFFFC000000FFFULL, 85 + 0x0000003FFFFFF000ULL, 86 + 0xFFFFFFE0000003FFULL, 87 + 0x0000001FFFFFFC00ULL, 88 + 0xFFFFFFF0000000FFULL, /* 56 */ 89 + 0x0000000FFFFFFF00ULL, 90 + 0xFFFFFFF80000003FULL, 91 + 0x00000007FFFFFFC0ULL, 92 + 0xFFFFFFFC0000000FULL, 93 + 0x00000003FFFFFFF0ULL, 94 + 0xFFFFFFFE00000003ULL, 95 + 0x00000001FFFFFFFCULL, 96 + }; 97 + 98 + static const uint64_t b64_pattern_se[PATTERN_INPUTS_64_COUNT] = { 99 + 0xFFFFFFFFFFFFFFFFULL, /* 0 */ 100 + 0x0000000000000000ULL, 101 + 0xFFFFFFFFAAAAAAAAULL, 102 + 0x0000000055555555ULL, 103 + 0xFFFFFFFFCCCCCCCCULL, 104 + 0x0000000033333333ULL, 105 + 0xFFFFFFFFE38E38E3ULL, 106 + 0x000000001C71C71CULL, 107 + 0xFFFFFFFFF0F0F0F0ULL, /* 8 */ 108 + 0x000000000F0F0F0FULL, 109 + 0xFFFFFFFFF83E0F83ULL, 110 + 0x0000000007C1F07CULL, 111 + 0xFFFFFFFFFC0FC0FCULL, 112 + 0x0000000003F03F03ULL, 113 + 0xFFFFFFFFFE03F80FULL, 114 + 0x0000000001FC07F0ULL, 115 + 0xFFFFFFFFFF00FF00ULL, /* 16 */ 116 + 0x0000000000FF00FFULL, 117 + 0xFFFFFFFFFF803FE0ULL, 118 + 0x00000000007FC01FULL, 119 + 0xFFFFFFFFFFC00FFCULL, 120 + 0x00000000003FF003ULL, 121 + 0xFFFFFFFFFFE003FFULL, 122 + 0x00000000001FFC00ULL, 123 + 0xFFFFFFFFFFF000FFULL, /* 24 */ 124 + 0x00000000000FFF00ULL, 125 + 0xFFFFFFFFFFF8003FULL, 126 + 0x000000000007FFC0ULL, 127 + 0xFFFFFFFFFFFC000FULL, 128 + 0x000000000003FFF0ULL, 129 + 0xFFFFFFFFFFFE0003ULL, 130 + 0x000000000001FFFCULL, 131 + 0xFFFFFFFFFFFF0000ULL, /* 32 */ 132 + 0x000000000000FFFFULL, 133 + 0xFFFFFFFFFFFF8000ULL, 134 + 0x0000000000007FFFULL, 135 + 0xFFFFFFFFFFFFC000ULL, 136 + 0x0000000000003FFFULL, 137 + 0xFFFFFFFFFFFFE000ULL, 138 + 0x0000000000001FFFULL, 139 + 0xFFFFFFFFFFFFF000ULL, /* 40 */ 140 + 0x0000000000000FFFULL, 141 + 0xFFFFFFFFFFFFF800ULL, 142 + 0x00000000000007FFULL, 143 + 0xFFFFFFFFFFFFFC00ULL, 144 + 0x00000000000003FFULL, 145 + 0xFFFFFFFFFFFFFE00ULL, 146 + 0x00000000000001FFULL, 147 + 0xFFFFFFFFFFFFFF00ULL, /* 48 */ 148 + 0x00000000000000FFULL, 149 + 0xFFFFFFFFFFFFFF80ULL, 150 + 0x000000000000007FULL, 151 + 0xFFFFFFFFFFFFFFC0ULL, 152 + 0x000000000000003FULL, 153 + 0xFFFFFFFFFFFFFFE0ULL, 154 + 0x000000000000001FULL, 155 + 0xFFFFFFFFFFFFFFF0ULL, /* 56 */ 156 + 0x000000000000000FULL, 157 + 0xFFFFFFFFFFFFFFF8ULL, 158 + 0x0000000000000007ULL, 159 + 0xFFFFFFFFFFFFFFFCULL, 160 + 0x0000000000000003ULL, 161 + 0xFFFFFFFFFFFFFFFEULL, 162 + 0x0000000000000001ULL, 163 + }; 164 + 165 + 166 + #define RANDOM_INPUTS_64_COUNT 16 167 + #define RANDOM_INPUTS_64_SHORT_COUNT 4 168 + 169 + static const uint64_t b64_random[RANDOM_INPUTS_64_COUNT] = { 170 + 0x886AE6CC28625540ULL, /* 0 */ 171 + 0xFBBE00634D93C708ULL, 172 + 0xAC5AAEAAB9CF8B80ULL, 173 + 0x704F164D5E31E24EULL, 174 + 0xB9926B7C7DAF4258ULL, 175 + 0xD027BE89FF0A2EF9ULL, 176 + 0xB83B580665CABC4AULL, 177 + 0xFC8F23F09AA6B782ULL, 178 + 0x201E09CD56AEE649ULL, /* 8 */ 179 + 0xA57CD91365D9E5D7ULL, 180 + 0xA2E8F6F5C9CBC61BULL, 181 + 0xA89CF2F131A864AEULL, 182 + 0xE61438E9A652EA0AULL, 183 + 0x944A35FD192361A8ULL, 184 + 0x4630426322BEF79CULL, 185 + 0x8B5AA7A2F259DEADULL, 186 + }; 187 + 188 + static const uint64_t b64_random_se[RANDOM_INPUTS_64_COUNT] = { 189 + 0xFFFFFFFF886AE6CCULL, /* 0 */ 190 + 0xFFFFFFFFFBBE0063ULL, 191 + 0xFFFFFFFFAC5AAEAAULL, 192 + 0x00000000704F164DULL, 193 + 0xFFFFFFFFB9926B7CULL, 194 + 0xFFFFFFFFD027BE89ULL, 195 + 0xFFFFFFFFB83B5806ULL, 196 + 0xFFFFFFFFFC8F23F0ULL, 197 + 0x00000000201E09CDULL, /* 8 */ 198 + 0xFFFFFFFFA57CD913ULL, 199 + 0xFFFFFFFFA2E8F6F5ULL, 200 + 0xFFFFFFFFA89CF2F1ULL, 201 + 0xFFFFFFFFE61438E9ULL, 202 + 0xFFFFFFFF944A35FDULL, 203 + 0x0000000046304263ULL, 204 + 0xFFFFFFFF8B5AA7A2ULL, 205 + }; 206 + 207 + 208 + #endif
+78
tests/tcg/mips/include/test_utils_64.h
··· 1 + /* 2 + * Header file for test utilities 3 + * 4 + * Copyright (C) 2019 Wave Computing, Inc. 5 + * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 6 + * 7 + * This program is free software: you can redistribute it and/or modify 8 + * it under the terms of the GNU General Public License as published by 9 + * the Free Software Foundation, either version 2 of the License, or 10 + * (at your option) any later version. 11 + * 12 + * This program is distributed in the hope that it will be useful, 13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 + * GNU General Public License for more details. 16 + * 17 + * You should have received a copy of the GNU General Public License 18 + * along with this program. If not, see <https://www.gnu.org/licenses/>. 19 + * 20 + */ 21 + 22 + #ifndef TEST_UTILS_64_H 23 + #define TEST_UTILS_64_H 24 + 25 + #include <stdio.h> 26 + #include <stdint.h> 27 + #include <inttypes.h> 28 + #include <string.h> 29 + 30 + #define PRINT_RESULTS 0 31 + 32 + 33 + static inline int32_t check_results_64(const char *instruction_name, 34 + const uint32_t test_count, 35 + const double elapsed_time, 36 + const uint64_t *b64_result, 37 + const uint64_t *b64_expect) 38 + { 39 + #if PRINT_RESULTS 40 + uint32_t ii; 41 + printf("\n"); 42 + for (ii = 0; ii < test_count; ii++) { 43 + uint64_t a; 44 + memcpy(&a, (b64_result + ii), 8); 45 + if (ii % 8 != 0) { 46 + printf(" 0x%016llxULL,\n", a); 47 + } else { 48 + printf(" 0x%016llxULL, /* %3d */\n", 49 + a, ii); 50 + } 51 + } 52 + printf("\n"); 53 + #endif 54 + uint32_t i; 55 + uint32_t pass_count = 0; 56 + uint32_t fail_count = 0; 57 + 58 + printf("%s: ", instruction_name); 59 + for (i = 0; i < test_count; i++) { 60 + if (b64_result[i] == b64_expect[i]) { 61 + pass_count++; 62 + } else { 63 + fail_count++; 64 + } 65 + } 66 + 67 + printf("PASS: %3d FAIL: %3d elapsed time: %5.2f ms\n", 68 + pass_count, fail_count, elapsed_time); 69 + 70 + if (fail_count > 0) { 71 + return -1; 72 + } else { 73 + return 0; 74 + } 75 + } 76 + 77 + 78 + #endif