Lines Matching +full:test +full:- +full:results
32 #include "test-runner.h"
33 #include "test-utils.h"
35 #include "aarch64/test-simulator-inputs-aarch64.h"
36 #include "aarch64/test-simulator-traces-aarch64.h"
37 #include "aarch64/test-utils-aarch64.h"
39 #include "aarch64/cpu-features-auditor-aarch64.h"
40 #include "aarch64/macro-assembler-aarch64.h"
41 #include "aarch64/simulator-aarch64.h"
49 // real AArch64 hardware. The same test code is used to generate the trace; the
50 // results are printed to stdout when the test is run with
51 // --generate_test_trace.
53 // The input lists and expected results are stored in test/traces. The expected
54 // results can be regenerated using tools/generate_simulator_traces.py. Adding a
55 // test for a new instruction is described at the top of
56 // test-simulator-traces-aarch64.h.
59 #define TEST(name) TEST_(AARCH64_SIM_##name) macro
70 simulator.SetColouredTrace(Test::coloured_trace()); \
71 simulator.SetInstructionStats(Test::instruction_stats());
77 if (Test::trace_reg()) { \
80 if (Test::trace_write()) { \
83 if (Test::trace_sim()) { \
86 if (Test::instruction_stats()) { \
91 if (Test::instruction_stats()) { \
101 simulator.RunFrom(masm.GetBuffer()->GetStartAddress<Instruction*>()); \
102 /* The simulator can run every test. */ \
125 /* If the test uses features that the current CPU doesn't support, don't */ \
134 decoder.Decode(buffer->GetStartAddress<Instruction*>(), \
135 buffer->GetEndAddress<Instruction*>()); \
138 masm.GetBuffer()->SetExecutable(); \
139 ExecuteMemory(buffer->GetStartAddress<byte*>(), \
141 masm.GetBuffer()->SetWritable(); \
145 os << "Warning: skipping test due to missing CPU features.\n"; \
158 if (Test::disassemble()) { \
161 Instruction* start = buffer->GetStartAddress<Instruction*>(); \
162 Instruction* end = buffer->GetEndAddress<Instruction*>(); \
166 // The maximum number of errors to report in detail for each test.
171 // templated test functions.
183 // MacroAssembler member function pointers to pass to the test dispatchers.
239 // Standard test dispatchers.
245 uintptr_t results, in Test1Op_Helper() argument
288 __ Mov(out, results); in Test1Op_Helper()
312 // Test FP instructions. The inputs[] and expected[] arrays should be arrays of
325 Td* results = new Td[results_length]; in Test1Op() local
334 reinterpret_cast<uintptr_t>(results), in Test1Op()
339 if (Test::generate_test_trace()) { in Test1Op()
340 // Print the results. in Test1Op()
345 static_cast<uint64_t>(results[d])); in Test1Op()
350 // Check the results. in Test1Op()
355 if (results[d] != expected[d]) { in Test1Op()
370 static_cast<uint64_t>(results[d]), in Test1Op()
371 rawbits_to_fp(results[d])); in Test1Op()
377 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test1Op()
381 delete[] results; in Test1Op()
388 uintptr_t results, in Test2Op_Helper() argument
435 __ Mov(out, results); in Test2Op_Helper()
467 // Test FP instructions. The inputs[] and expected[] arrays should be arrays of
480 T* results = new T[results_length]; in Test2Op() local
488 reinterpret_cast<uintptr_t>(results), in Test2Op()
492 if (Test::generate_test_trace()) { in Test2Op()
493 // Print the results. in Test2Op()
498 static_cast<uint64_t>(results[d])); in Test2Op()
503 // Check the results. in Test2Op()
509 if (results[d] != expected[d]) { in Test2Op()
527 static_cast<uint64_t>(results[d]), in Test2Op()
528 rawbits_to_fp(results[d])); in Test2Op()
535 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test2Op()
539 delete[] results; in Test2Op()
546 uintptr_t results, in Test3Op_Helper() argument
580 __ Mov(out, results); in Test3Op_Helper()
620 // Test FP instructions. The inputs[] and expected[] arrays should be arrays of
633 T* results = new T[results_length]; in Test3Op() local
641 reinterpret_cast<uintptr_t>(results), in Test3Op()
645 if (Test::generate_test_trace()) { in Test3Op()
646 // Print the results. in Test3Op()
651 static_cast<uint64_t>(results[d])); in Test3Op()
656 // Check the results. in Test3Op()
663 if (results[d] != expected[d]) { in Test3Op()
685 static_cast<uint64_t>(results[d]), in Test3Op()
686 rawbits_to_fp(results[d])); in Test3Op()
694 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test3Op()
698 delete[] results; in Test3Op()
705 uintptr_t results, in TestCmp_Helper() argument
730 __ Mov(out, results); in TestCmp_Helper()
764 // Test FP instructions. The inputs[] and expected[] arrays should be arrays of
777 uint8_t* results = new uint8_t[results_length]; in TestCmp() local
785 reinterpret_cast<uintptr_t>(results), in TestCmp()
789 if (Test::generate_test_trace()) { in TestCmp()
790 // Print the results. in TestCmp()
794 VIXL_ASSERT((results[d] & 0xf) == results[d]); in TestCmp()
795 printf(" 0x%" PRIx8 ",\n", results[d]); in TestCmp()
800 // Check the results. in TestCmp()
806 if (results[d] != expected[d]) { in TestCmp()
825 (results[d] & 0x8) ? 'N' : 'n', in TestCmp()
826 (results[d] & 0x4) ? 'Z' : 'z', in TestCmp()
827 (results[d] & 0x2) ? 'C' : 'c', in TestCmp()
828 (results[d] & 0x1) ? 'V' : 'v', in TestCmp()
829 results[d]); in TestCmp()
836 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestCmp()
840 delete[] results; in TestCmp()
847 uintptr_t results, in TestCmpZero_Helper() argument
870 __ Mov(out, results); in TestCmpZero_Helper()
896 // Test FP instructions. The inputs[] and expected[] arrays should be arrays of
909 uint8_t* results = new uint8_t[results_length]; in TestCmpZero() local
917 reinterpret_cast<uintptr_t>(results), in TestCmpZero()
921 if (Test::generate_test_trace()) { in TestCmpZero()
922 // Print the results. in TestCmpZero()
926 VIXL_ASSERT((results[d] & 0xf) == results[d]); in TestCmpZero()
927 printf(" 0x%" PRIx8 ",\n", results[d]); in TestCmpZero()
932 // Check the results. in TestCmpZero()
937 if (results[d] != expected[d]) { in TestCmpZero()
955 (results[d] & 0x8) ? 'N' : 'n', in TestCmpZero()
956 (results[d] & 0x4) ? 'Z' : 'z', in TestCmpZero()
957 (results[d] & 0x2) ? 'C' : 'c', in TestCmpZero()
958 (results[d] & 0x1) ? 'V' : 'v', in TestCmpZero()
959 results[d]); in TestCmpZero()
965 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestCmpZero()
969 delete[] results; in TestCmpZero()
976 uintptr_t results, in TestFPToFixed_Helper() argument
1014 __ Mov(out, results); in TestFPToFixed_Helper()
1043 uintptr_t results, in TestFPToInt_Helper() argument
1083 __ Mov(out, results); in TestFPToInt_Helper()
1107 // Test FP instructions.
1108 // - The inputs[] array should be an array of rawbits representations of
1111 // - The expected[] array should be an array of signed integers.
1122 Td* results = new Td[results_length]; in TestFPToS() local
1131 reinterpret_cast<uintptr_t>(results), in TestFPToS()
1136 if (Test::generate_test_trace()) { in TestFPToS()
1137 // Print the results. in TestFPToS()
1143 const int64_t int_d_max = (UINT64_C(1) << (d_bits - 1)) - 1; in TestFPToS()
1144 const int64_t int_d_min = -(int_d_max)-1; in TestFPToS()
1146 if (results[d] == int_d_min) { in TestFPToS()
1147 printf(" -INT%u_C(%" PRId64 ") - 1,\n", d_bits, int_d_max); in TestFPToS()
1152 int64_t result_int64 = static_cast<int64_t>(results[d]); in TestFPToS()
1156 printf(" -INT%u_C(%" PRId64 "),\n", d_bits, -result_int64); in TestFPToS()
1163 // Check the results. in TestFPToS()
1168 if (results[d] != expected[d]) { in TestFPToS()
1183 static_cast<uint64_t>(results[d]), in TestFPToS()
1184 static_cast<int64_t>(results[d])); in TestFPToS()
1190 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestFPToS()
1194 delete[] results; in TestFPToS()
1198 // Test FP instructions.
1199 // - The inputs[] array should be an array of rawbits representations of
1202 // - The expected[] array should be an array of unsigned integers.
1213 Td* results = new Td[results_length]; in TestFPToU() local
1222 reinterpret_cast<uintptr_t>(results), in TestFPToU()
1227 if (Test::generate_test_trace()) { in TestFPToU()
1228 // Print the results. in TestFPToU()
1231 printf(" %" PRIu64 "u,\n", static_cast<uint64_t>(results[d])); in TestFPToU()
1236 // Check the results. in TestFPToU()
1241 if (results[d] != expected[d]) { in TestFPToU()
1256 static_cast<uint64_t>(results[d]), in TestFPToU()
1257 static_cast<uint64_t>(results[d])); in TestFPToU()
1263 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestFPToU()
1267 delete[] results; in TestFPToU()
1271 // Test FP instructions.
1272 // - The inputs[] array should be an array of rawbits representations of
1275 // - The expected[] array should be an array of signed integers.
1289 Td* results = new Td[results_length]; in TestFPToFixedS() local
1296 reinterpret_cast<uintptr_t>(results), in TestFPToFixedS()
1301 if (Test::generate_test_trace()) { in TestFPToFixedS()
1302 // Print the results. in TestFPToFixedS()
1308 const int64_t int_d_max = (UINT64_C(1) << (d_bits - 1)) - 1; in TestFPToFixedS()
1309 const int64_t int_d_min = -(int_d_max)-1; in TestFPToFixedS()
1311 if (results[d] == int_d_min) { in TestFPToFixedS()
1312 printf(" -INT%u_C(%" PRId64 ") - 1,\n", d_bits, int_d_max); in TestFPToFixedS()
1317 int64_t result_int64 = static_cast<int64_t>(results[d]); in TestFPToFixedS()
1321 printf(" -INT%u_C(%" PRId64 "),\n", d_bits, -result_int64); in TestFPToFixedS()
1328 // Check the results. in TestFPToFixedS()
1334 if (results[d] != expected[d]) { in TestFPToFixedS()
1351 static_cast<uint64_t>(results[d]), in TestFPToFixedS()
1352 static_cast<int64_t>(results[d])); in TestFPToFixedS()
1359 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestFPToFixedS()
1363 delete[] results; in TestFPToFixedS()
1367 // Test FP instructions.
1368 // - The inputs[] array should be an array of rawbits representations of
1371 // - The expected[] array should be an array of unsigned integers.
1385 Td* results = new Td[results_length]; in TestFPToFixedU() local
1392 reinterpret_cast<uintptr_t>(results), in TestFPToFixedU()
1397 if (Test::generate_test_trace()) { in TestFPToFixedU()
1398 // Print the results. in TestFPToFixedU()
1401 printf(" %" PRIu64 "u,\n", static_cast<uint64_t>(results[d])); in TestFPToFixedU()
1406 // Check the results. in TestFPToFixedU()
1412 if (results[d] != expected[d]) { in TestFPToFixedU()
1429 static_cast<uint64_t>(results[d]), in TestFPToFixedU()
1430 static_cast<uint64_t>(results[d])); in TestFPToFixedU()
1437 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestFPToFixedU()
1441 delete[] results; in TestFPToFixedU()
1451 uintptr_t results, in Test1OpNEON_Helper() argument
1483 // These will be either a D- or a Q-register form, with a single lane in Test1OpNEON_Helper()
1496 __ Mov(out, results); in Test1OpNEON_Helper()
1500 inputs_n + (vn_lane_bytes * inputs_n_length) - 16); in Test1OpNEON_Helper()
1513 // might be a better test for instructions such as sqxtn2 in Test1OpNEON_Helper()
1533 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
1552 Td* results = new Td[results_length * vd_lane_count]; in Test1OpNEON() local
1561 reinterpret_cast<uintptr_t>(results), in Test1OpNEON()
1566 if (Test::generate_test_trace()) { in Test1OpNEON()
1567 // Print the results. in Test1OpNEON()
1576 static_cast<uint64_t>(results[index])); in Test1OpNEON()
1586 // Check the results. in Test1OpNEON()
1598 if (results[output_index] != expected[output_index]) { in Test1OpNEON()
1613 inputs_n_length - (16 / vn_lane_bytes) + n + 1; in Test1OpNEON()
1623 results[output_index] != expected[output_index] ? '*' : ' ', in Test1OpNEON()
1627 static_cast<uint64_t>(results[output_index]), in Test1OpNEON()
1635 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test1OpNEON()
1639 delete[] results; in Test1OpNEON()
1656 uintptr_t results, in Test1OpAcrossNEON_Helper() argument
1684 // Test destructive operations by (arbitrarily) using the same register for in Test1OpAcrossNEON_Helper()
1689 // instruction, the second, the whole Q register to check the results. in Test1OpAcrossNEON_Helper()
1707 __ Mov(out, results); in Test1OpAcrossNEON_Helper()
1711 inputs_n + vn_lane_bytes * (inputs_n_length - vn_lane_count)); in Test1OpAcrossNEON_Helper()
1742 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
1760 Td* results = new Td[results_length * vd_lanes_per_q]; in Test1OpAcrossNEON() local
1769 reinterpret_cast<uintptr_t>(results), in Test1OpAcrossNEON()
1774 if (Test::generate_test_trace()) { in Test1OpAcrossNEON()
1775 // Print the results. in Test1OpAcrossNEON()
1784 static_cast<uint64_t>(results[index])); in Test1OpAcrossNEON()
1794 // Check the results. in Test1OpAcrossNEON()
1807 if (results[results_index] != expected[expected_index]) { in Test1OpAcrossNEON()
1816 if (results[results_index] != 0) { in Test1OpAcrossNEON()
1837 // passed to test functions. in Test1OpAcrossNEON()
1842 (n * vd_lanes_per_q) + ((vn_lane_count - 1) - lane); in Test1OpAcrossNEON()
1844 (inputs_n_length - vn_lane_count + n + 1 + lane) % in Test1OpAcrossNEON()
1848 if ((vn_lane_count - 1) == lane) { in Test1OpAcrossNEON()
1849 // This is the last lane to be printed, ie. the least-significant in Test1OpAcrossNEON()
1855 results[results_index] != expect ? '*' : ' ', in Test1OpAcrossNEON()
1859 static_cast<uint64_t>(results[results_index]), in Test1OpAcrossNEON()
1867 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test1OpAcrossNEON()
1871 delete[] results; in Test1OpAcrossNEON()
1885 uintptr_t results, in Test2OpNEON_Helper() argument
1948 __ Mov(out, results); in Test2OpNEON_Helper()
1953 __ Mov(inputs_n_last_16bytes, inputs_n + (inputs_n_length - 16)); in Test2OpNEON_Helper()
1955 __ Mov(inputs_m_last_16bytes, inputs_m + (inputs_m_length - 16)); in Test2OpNEON_Helper()
1996 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
2017 Td* results = new Td[results_length * vd_lane_count]; in Test2OpNEON() local
2029 reinterpret_cast<uintptr_t>(results), in Test2OpNEON()
2035 if (Test::generate_test_trace()) { in Test2OpNEON()
2036 // Print the results. in Test2OpNEON()
2045 static_cast<uint64_t>(results[index])); in Test2OpNEON()
2055 // Check the results. in Test2OpNEON()
2069 if (results[output_index] != expected[output_index]) { in Test2OpNEON()
2091 (inputs_n_length - vd_lane_count + n + 1 + lane) % in Test2OpNEON()
2094 (inputs_m_length - vd_lane_count + m + 1 + lane) % in Test2OpNEON()
2100 results[output_index] != expected[output_index] ? '*' : ' ', in Test2OpNEON()
2108 static_cast<uint64_t>(results[output_index]), in Test2OpNEON()
2117 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test2OpNEON()
2121 delete[] results; in Test2OpNEON()
2135 uintptr_t results, in TestByElementNEON_Helper() argument
2203 __ Mov(out, results); in TestByElementNEON_Helper()
2208 __ Mov(inputs_n_last_16bytes, inputs_n + (inputs_n_length - 16)); in TestByElementNEON_Helper()
2210 __ Mov(inputs_m_last_16bytes, inputs_m + (inputs_m_length - 16)); in TestByElementNEON_Helper()
2255 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
2282 Td* results = new Td[results_length * vd_lane_count]; in TestByElementNEON() local
2296 reinterpret_cast<uintptr_t>(results), in TestByElementNEON()
2303 if (Test::generate_test_trace()) { in TestByElementNEON()
2304 // Print the results. in TestByElementNEON()
2313 static_cast<uint64_t>(results[index])); in TestByElementNEON()
2323 // Check the results. in TestByElementNEON()
2340 if (results[output_index] != expected[output_index]) { in TestByElementNEON()
2364 (inputs_n_length - vd_lane_count + n + 1 + lane) % in TestByElementNEON()
2367 (inputs_m_length - vd_lane_count + m + 1 + lane) % in TestByElementNEON()
2373 results[output_index] != expected[output_index] ? '*' in TestByElementNEON()
2383 static_cast<uint64_t>(results[output_index]), in TestByElementNEON()
2393 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestByElementNEON()
2397 delete[] results; in TestByElementNEON()
2411 uintptr_t results, in Test2OpImmNEON_Helper() argument
2441 // These will be either a D- or a Q-register form, with a single lane in Test2OpImmNEON_Helper()
2454 __ Mov(out, results); in Test2OpImmNEON_Helper()
2458 inputs_n + (vn_lane_bytes * inputs_n_length) - 16); in Test2OpImmNEON_Helper()
2471 // test for shift and accumulate instructions (srsra/ssra/usra/ursra). in Test2OpImmNEON_Helper()
2494 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
2516 Td* results = new Td[results_length * vd_lane_count]; in Test2OpImmNEON() local
2527 reinterpret_cast<uintptr_t>(results), in Test2OpImmNEON()
2532 if (Test::generate_test_trace()) { in Test2OpImmNEON()
2533 // Print the results. in Test2OpImmNEON()
2542 static_cast<uint64_t>(results[index])); in Test2OpImmNEON()
2552 // Check the results. in Test2OpImmNEON()
2566 if (results[output_index] != expected[output_index]) { in Test2OpImmNEON()
2583 inputs_n_length - (16 / vn_lane_bytes) + n + 1; in Test2OpImmNEON()
2595 results[output_index] != expected[output_index] ? '*' : ' ', in Test2OpImmNEON()
2601 static_cast<uint64_t>(results[output_index]), in Test2OpImmNEON()
2610 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in Test2OpImmNEON()
2614 delete[] results; in Test2OpImmNEON()
2629 uintptr_t results, in TestOpImmOpImmNEON_Helper() argument
2659 // These will be either a D- or a Q-register form, with a single lane in TestOpImmOpImmNEON_Helper()
2676 __ Mov(out, results); in TestOpImmOpImmNEON_Helper()
2682 inputs_n + vn_lane_bytes * (inputs_n_length - vn_lane_count)); in TestOpImmOpImmNEON_Helper()
2718 // Test NEON instructions. The inputs_*[] and expected[] arrays should be
2744 Td* results = new Td[results_length * vd_lane_count]; in TestOpImmOpImmNEON() local
2758 reinterpret_cast<uintptr_t>(results), in TestOpImmOpImmNEON()
2763 if (Test::generate_test_trace()) { in TestOpImmOpImmNEON()
2764 // Print the results. in TestOpImmOpImmNEON()
2773 static_cast<uint64_t>(results[index])); in TestOpImmOpImmNEON()
2783 // Check the results. in TestOpImmOpImmNEON()
2802 if (results[output_index] != expected[output_index]) { in TestOpImmOpImmNEON()
2829 (inputs_n_length - vd_lane_count + n + 1 + lane) % in TestOpImmOpImmNEON()
2837 results[output_index] != expected[output_index] ? '*' in TestOpImmOpImmNEON()
2848 static_cast<uint64_t>(results[output_index]), in TestOpImmOpImmNEON()
2858 printf("%u other errors follow.\n", error_count - kErrorReportLimit); in TestOpImmOpImmNEON()
2862 delete[] results; in TestOpImmOpImmNEON()
2866 // ==== Floating-point tests. ====
2869 // Standard floating-point test expansion for both double- and single-precision
2874 Test##type(STRINGIFY(mnemonic) "_" STRINGIFY(variant), \
2882 TEST(mnemonic##_d) { \
2885 TEST(mnemonic##_s) { \
2890 TEST(mnemonic##_d) { \
2893 TEST(mnemonic##_s) { \
2896 TEST(mnemonic##_h) { \
2901 // TODO: Test with a newer version of valgrind.
2903 // Note: valgrind-3.10.0 does not properly interpret libm's fma() on x86_64.
2904 // Therefore this test will be exiting though an ASSERT and thus leaking
2933 TEST(fcmp_d) { CALL_TEST_FP_HELPER(fcmp, d, Cmp, kInputDoubleBasic); } in TEST() function
2934 TEST(fcmp_s) { CALL_TEST_FP_HELPER(fcmp, s, Cmp, kInputFloatBasic); } in TEST() function
2935 TEST(fcmp_dz) { CALL_TEST_FP_HELPER(fcmp, dz, CmpZero, kInputDoubleBasic); } in TEST() function
2936 TEST(fcmp_sz) { CALL_TEST_FP_HELPER(fcmp, sz, CmpZero, kInputFloatBasic); } in TEST() function
2938 TEST(fcvt_sd) { CALL_TEST_FP_HELPER(fcvt, sd, 1Op, kInputDoubleConversions); } in TEST() function
2939 TEST(fcvt_ds) { CALL_TEST_FP_HELPER(fcvt, ds, 1Op, kInputFloatConversions); } in TEST() function
2942 TEST(mnemonic##_xd) { \
2945 TEST(mnemonic##_xs) { \
2948 TEST(mnemonic##_xh) { \
2951 TEST(mnemonic##_wd) { \
2954 TEST(mnemonic##_ws) { \
2957 TEST(mnemonic##_wh) { \
2971 TEST(mnemonic##_wd) { \ in DEFINE_TEST_FP_TO_INT()
2977 // TODO: Scvtf-fixed-point
2978 // TODO: Scvtf-integer
2979 // TODO: Ucvtf-fixed-point
2980 // TODO: Ucvtf-integer
3109 TEST(mnemonic##_8B) { \
3112 TEST(mnemonic##_16B) { \
3117 TEST(mnemonic##_4H) { \
3120 TEST(mnemonic##_8H) { \
3125 TEST(mnemonic##_2S) { \
3128 TEST(mnemonic##_4S) { \
3142 TEST(mnemonic##_2D) { \
3147 TEST(mnemonic##_2D) { \
3152 TEST(mnemonic##_2S) { \
3155 TEST(mnemonic##_4S) { \
3158 TEST(mnemonic##_2D) { \
3164 TEST(mnemonic##_4H) { \
3167 TEST(mnemonic##_8H) { \
3172 TEST(mnemonic##_H) { \
3175 TEST(mnemonic##_S) { \
3178 TEST(mnemonic##_D) { \
3183 TEST(mnemonic##_B) { \
3187 TEST(mnemonic##_H) { \
3191 TEST(mnemonic##_S) { \
3195 TEST(mnemonic##_D) { \
3214 TEST(mnemonic##_B_8B) { \
3217 TEST(mnemonic##_B_16B) { \
3220 TEST(mnemonic##_H_4H) { \
3223 TEST(mnemonic##_H_8H) { \
3226 TEST(mnemonic##_S_4S) { \
3231 TEST(mnemonic##_H_8B) { \
3234 TEST(mnemonic##_H_16B) { \
3237 TEST(mnemonic##_S_4H) { \
3240 TEST(mnemonic##_S_8H) { \
3243 TEST(mnemonic##_D_4S) { \
3248 TEST(mnemonic##_H_4H) { \
3251 TEST(mnemonic##_H_8H) { \
3254 TEST(mnemonic##_S_4S) { \
3262 TEST(mnemonic##_4H) { \
3265 TEST(mnemonic##_8H) { \
3268 TEST(mnemonic##_2S) { \
3271 TEST(mnemonic##_4S) { \
3274 TEST(mnemonic##_1D) { \
3277 TEST(mnemonic##_2D) { \
3282 TEST(mnemonic##_8B) { \
3285 TEST(mnemonic##_4H) { \
3288 TEST(mnemonic##_2S) { \
3291 TEST(mnemonic##2_16B) { \
3294 TEST(mnemonic##2_8H) { \
3297 TEST(mnemonic##2_4S) { \
3302 TEST(mnemonic##_4S) { \
3305 TEST(mnemonic##_2D) { \
3308 TEST(mnemonic##2_4S) { \
3311 TEST(mnemonic##2_2D) { \
3316 TEST(mnemonic##_4H) { \
3319 TEST(mnemonic##_2S) { \
3322 TEST(mnemonic##2_8H) { \
3325 TEST(mnemonic##2_4S) { \
3330 TEST(mnemonic##_2S) { \
3333 TEST(mnemonic##2_4S) { \
3338 TEST(mnemonic##_B) { \
3341 TEST(mnemonic##_H) { \
3344 TEST(mnemonic##_S) { \
3349 TEST(mnemonic##_S) { \
3352 TEST(mnemonic##_D) { \
3355 TEST(mnemonic##_H) { \
3371 TEST(mnemonic##_8B) { \
3377 TEST(mnemonic##_16B) { \
3385 TEST(mnemonic##_4H) { \
3391 TEST(mnemonic##_8H) { \
3397 TEST(mnemonic##_2S) { \
3403 TEST(mnemonic##_4S) { \
3416 TEST(mnemonic##_2D) { \
3424 TEST(mnemonic##_4H) { \
3430 TEST(mnemonic##_8H) { \
3436 TEST(mnemonic##_2S) { \
3442 TEST(mnemonic##_4S) { \
3448 TEST(mnemonic##_2D) { \
3456 TEST(mnemonic##_D) { \
3464 TEST(mnemonic##_H) { \
3470 TEST(mnemonic##_S) { \
3478 TEST(mnemonic##_B) { \
3484 TEST(mnemonic##_H) { \
3490 TEST(mnemonic##_S) { \
3496 TEST(mnemonic##_D) { \
3504 TEST(mnemonic##_H) { \
3510 TEST(mnemonic##_S) { \
3516 TEST(mnemonic##_D) { \
3536 TEST(mnemonic##_8H) { \
3545 TEST(mnemonic##2_8H) { \
3556 TEST(mnemonic##_4S) { \
3565 TEST(mnemonic##2_4S) { \
3576 TEST(mnemonic##_2D) { \
3585 TEST(mnemonic##2_2D) { \
3605 TEST(mnemonic##_S) { \
3616 TEST(mnemonic##_D) { \
3631 TEST(mnemonic##_8H) { \
3640 TEST(mnemonic##_4S) { \
3649 TEST(mnemonic##_2D) { \
3658 TEST(mnemonic##2_8H) { \
3667 TEST(mnemonic##2_4S) { \
3676 TEST(mnemonic##2_2D) { \
3687 TEST(mnemonic##_8B) { \
3696 TEST(mnemonic##_4H) { \
3705 TEST(mnemonic##_2S) { \
3714 TEST(mnemonic##2_16B) { \
3723 TEST(mnemonic##2_8H) { \
3732 TEST(mnemonic##2_4S) { \
3743 TEST(mnemonic##_2S) { \
3752 TEST(mnemonic##_4S) { \
3774 TEST(mnemonic##_8B_2OPIMM) { \
3781 TEST(mnemonic##_16B_2OPIMM) { \
3788 TEST(mnemonic##_4H_2OPIMM) { \
3795 TEST(mnemonic##_8H_2OPIMM) { \
3802 TEST(mnemonic##_2S_2OPIMM) { \
3809 TEST(mnemonic##_4S_2OPIMM) { \
3816 TEST(mnemonic##_2D_2OPIMM) { \
3825 TEST(mnemonic##_8B_2OPIMM) { \
3832 TEST(mnemonic##_16B_2OPIMM) { \
3839 TEST(mnemonic##_4H_2OPIMM) { \
3846 TEST(mnemonic##_8H_2OPIMM) { \
3853 TEST(mnemonic##_2S_2OPIMM) { \
3860 TEST(mnemonic##_4S_2OPIMM) { \
3867 TEST(mnemonic##_2D_2OPIMM) { \
3876 TEST(mnemonic##_8B_2OPIMM) { \
3883 TEST(mnemonic##_4H_2OPIMM) { \
3890 TEST(mnemonic##_2S_2OPIMM) { \
3897 TEST(mnemonic##2_16B_2OPIMM) { \
3904 TEST(mnemonic##2_8H_2OPIMM) { \
3911 TEST(mnemonic##2_4S_2OPIMM) { \
3920 TEST(mnemonic##_B_2OPIMM) { \
3927 TEST(mnemonic##_H_2OPIMM) { \
3934 TEST(mnemonic##_S_2OPIMM) { \
3943 TEST(mnemonic##_4H_2OPIMM) { \
3950 TEST(mnemonic##_8H_2OPIMM) { \
3957 TEST(mnemonic##_2S_2OPIMM) { \
3964 TEST(mnemonic##_4S_2OPIMM) { \
3971 TEST(mnemonic##_2D_2OPIMM) { \
3980 TEST(mnemonic##_4H_2OPIMM) { \
3987 TEST(mnemonic##_8H_2OPIMM) { \
3994 TEST(mnemonic##_2S_2OPIMM) { \
4001 TEST(mnemonic##_4S_2OPIMM) { \
4008 TEST(mnemonic##_2D_2OPIMM) { \
4017 TEST(mnemonic##_H_2OPIMM) { \
4024 TEST(mnemonic##_S_2OPIMM) { \
4031 TEST(mnemonic##_D_2OPIMM) { \
4040 TEST(mnemonic##_4H_2OPIMM) { \
4047 TEST(mnemonic##_8H_2OPIMM) { \
4054 TEST(mnemonic##_2S_2OPIMM) { \
4061 TEST(mnemonic##_4S_2OPIMM) { \
4068 TEST(mnemonic##_2D_2OPIMM) { \
4077 TEST(mnemonic##_D_2OPIMM) { \
4086 TEST(mnemonic##_H_2OPIMM) { \
4093 TEST(mnemonic##_S_2OPIMM) { \
4103 TEST(mnemonic##_D_2OPIMM) { \
4112 TEST(mnemonic##_H_2OPIMM) { \
4119 TEST(mnemonic##_S_2OPIMM) { \
4129 TEST(mnemonic##_B_2OPIMM) { \
4139 TEST(mnemonic##_8H_2OPIMM) { \
4146 TEST(mnemonic##_4S_2OPIMM) { \
4153 TEST(mnemonic##_2D_2OPIMM) { \
4160 TEST(mnemonic##2_8H_2OPIMM) { \
4167 TEST(mnemonic##2_4S_2OPIMM) { \
4174 TEST(mnemonic##2_2D_2OPIMM) { \
4205 TEST(mnemonic##_2S_8B_B) { \
4216 TEST(mnemonic##_4S_16B_B) { \
4242 TEST(mnemonic##_4H_4H_H) { \
4252 TEST(mnemonic##_8H_8H_H) { \
4262 TEST(mnemonic##_2S_2S_S) { \
4272 TEST(mnemonic##_4S_4S_S) { \
4284 TEST(mnemonic##_H_H_H) { \
4294 TEST(mnemonic##_S_S_S) { \
4306 TEST(mnemonic##_4H_4H_H) { \
4316 TEST(mnemonic##_8H_8H_H) { \
4326 TEST(mnemonic##_2S_2S_S) { \
4336 TEST(mnemonic##_4S_4S_S) { \
4346 TEST(mnemonic##_2D_2D_D) { \
4358 TEST(mnemonic##_H_H_H) { \
4368 TEST(mnemonic##_S_S_S) { \
4378 TEST(mnemonic##_D_D_D) { \
4391 TEST(mnemonic##_4S_4H_H) { \
4401 TEST(mnemonic##2_4S_8H_H) { \
4411 TEST(mnemonic##_2D_2S_S) { \
4421 TEST(mnemonic##2_2D_4S_S) { \
4434 TEST(mnemonic##_S_H_H) { \
4444 TEST(mnemonic##_D_S_S) { \
4471 TEST(mnemonic##_B) { \
4479 TEST(mnemonic##_H) { \
4487 TEST(mnemonic##_S) { \
4495 TEST(mnemonic##_D) { \
4671 TEST(addp_SCALAR) {
4747 // Advanced SIMD two-register miscellaneous. in DEFINE_TEST_NEON_2DIFF_FP_SCALAR_SD()
4812 // Advanced SIMD scalar two-register miscellaneous. in DEFINE_TEST_NEON_2DIFF_FP_SCALAR_SD()
4838 TEST(fcvtxn_SCALAR) { in DEFINE_TEST_NEON_2DIFF_FP_SCALAR_SD()
4915 #define __ masm-> in DEFINE_TEST_NEON_2SAME_FP_FP16_SCALAR()
4921 // Generate a function that stores zero to a hard-coded address. in DEFINE_TEST_NEON_2SAME_FP_FP16_SCALAR()
4923 masm->Reset(); in DEFINE_TEST_NEON_2SAME_FP_FP16_SCALAR()
4931 masm->FinalizeCode(); in DEFINE_TEST_NEON_2SAME_FP_FP16_SCALAR()
4932 return masm->GetBuffer()->GetStartAddress<Instruction*>(); in DEFINE_TEST_NEON_2SAME_FP_FP16_SCALAR()
4936 // Generate a function that stores the `int32_t` argument to a hard-coded
4943 masm->Reset(); in GenerateStoreInput()
4955 masm->FinalizeCode(); in GenerateStoreInput()
4956 return masm->GetBuffer()->GetStartAddress<Instruction*>(); in GenerateStoreInput()
4962 masm->Reset(); in GeneratePow()
4979 masm->FinalizeCode(); in GeneratePow()
4980 return masm->GetBuffer()->GetStartAddress<Instruction*>(); in GeneratePow()
4985 masm->Reset(); in GenerateSum()
5006 masm->FinalizeCode(); in GenerateSum()
5007 return masm->GetBuffer()->GetStartAddress<Instruction*>(); in GenerateSum()
5011 TEST(RunFrom) { in TEST() function