Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright 2019 Google LLC |
| 3 | # |
| 4 | # This source code is licensed under the BSD-style license found in the |
| 5 | # LICENSE file in the root directory of this source tree. |
| 6 | |
| 7 | |
| 8 | def _indent(text): |
| 9 | return "\n".join(map(lambda t: " " + t if t else t, text.splitlines())) |
| 10 | |
| 11 | |
| 12 | def _remove_duplicate_newlines(text): |
| 13 | filtered_lines = list() |
| 14 | last_newline = False |
| 15 | for line in text.splitlines(): |
| 16 | is_newline = len(line.strip()) == 0 |
| 17 | if not is_newline or not last_newline: |
| 18 | filtered_lines.append(line) |
| 19 | last_newline = is_newline |
| 20 | return "\n".join(filtered_lines) |
| 21 | |
| 22 | |
| 23 | _ARCH_TO_MACRO_MAP = { |
| 24 | "aarch32": "XNN_ARCH_ARM", |
| 25 | "aarch64": "XNN_ARCH_ARM64", |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 26 | "x86-32": "XNN_ARCH_X86", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 27 | "x86-64": "XNN_ARCH_X86_64", |
Marat Dukhan | 436ebe6 | 2019-12-04 15:10:12 -0800 | [diff] [blame] | 28 | "wasm": "XNN_ARCH_WASM", |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 29 | "wasmsimd": "XNN_ARCH_WASMSIMD", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 30 | } |
| 31 | |
| 32 | _ISA_TO_ARCH_MAP = { |
| 33 | "neon": ["aarch32", "aarch64"], |
| 34 | "neonfma": ["aarch32", "aarch64"], |
Marat Dukhan | eecf8fd | 2020-06-09 08:59:37 -0700 | [diff] [blame] | 35 | "neonv8": ["aarch32", "aarch64"], |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 36 | "neonfp16arith": ["aarch32", "aarch64"], |
Benoit Jacob | a964473 | 2020-08-13 12:48:55 -0700 | [diff] [blame] | 37 | "neondot": ["aarch32", "aarch64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 38 | "sse": ["x86-32", "x86-64"], |
| 39 | "sse2": ["x86-32", "x86-64"], |
Marat Dukhan | 595e170 | 2020-07-31 10:12:52 -0700 | [diff] [blame] | 40 | "ssse3": ["x86-32", "x86-64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 41 | "sse41": ["x86-32", "x86-64"], |
| 42 | "avx": ["x86-32", "x86-64"], |
Marat Dukhan | 1566fee | 2020-08-02 21:55:41 -0700 | [diff] [blame] | 43 | "xop": ["x86-32", "x86-64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 44 | "fma3": ["x86-32", "x86-64"], |
| 45 | "avx2": ["x86-32", "x86-64"], |
| 46 | "avx512f": ["x86-32", "x86-64"], |
Marat Dukhan | bb00b1d | 2020-08-10 11:37:23 -0700 | [diff] [blame] | 47 | "avx512skx": ["x86-32", "x86-64"], |
Frank Barchard | a635a29 | 2020-08-31 09:36:05 -0700 | [diff] [blame] | 48 | "wasm32": ["wasm", "wasmsimd"], |
| 49 | "wasm": ["wasm", "wasmsimd"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 50 | "wasmsimd": ["wasmsimd"], |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 51 | } |
| 52 | |
| 53 | _ISA_TO_CHECK_MAP = { |
| 54 | "neon": "TEST_REQUIRES_ARM_NEON", |
| 55 | "neonfma": "TEST_REQUIRES_ARM_NEON_FMA", |
Marat Dukhan | eecf8fd | 2020-06-09 08:59:37 -0700 | [diff] [blame] | 56 | "neonv8": "TEST_REQUIRES_ARM_NEON_V8", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 57 | "neonfp16arith": "TEST_REQUIRES_ARM_NEON_FP16_ARITH", |
Benoit Jacob | a964473 | 2020-08-13 12:48:55 -0700 | [diff] [blame] | 58 | "neondot": "TEST_REQUIRES_ARM_NEON_DOT", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 59 | "sse": "TEST_REQUIRES_X86_SSE", |
| 60 | "sse2": "TEST_REQUIRES_X86_SSE2", |
Marat Dukhan | 595e170 | 2020-07-31 10:12:52 -0700 | [diff] [blame] | 61 | "ssse3": "TEST_REQUIRES_X86_SSSE3", |
Marat Dukhan | 69c3f2c | 2019-11-06 12:30:01 -0800 | [diff] [blame] | 62 | "sse41": "TEST_REQUIRES_X86_SSE41", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 63 | "avx": "TEST_REQUIRES_X86_AVX", |
Marat Dukhan | 1566fee | 2020-08-02 21:55:41 -0700 | [diff] [blame] | 64 | "xop": "TEST_REQUIRES_X86_XOP", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 65 | "avx2": "TEST_REQUIRES_X86_AVX2", |
Marat Dukhan | fda12b8 | 2019-11-21 12:27:59 -0800 | [diff] [blame] | 66 | "fma3": "TEST_REQUIRES_X86_FMA3", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 67 | "avx512f": "TEST_REQUIRES_X86_AVX512F", |
Marat Dukhan | bb00b1d | 2020-08-10 11:37:23 -0700 | [diff] [blame] | 68 | "avx512skx": "TEST_REQUIRES_X86_AVX512SKX", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 69 | } |
| 70 | |
| 71 | |
| 72 | def parse_target_name(target_name): |
| 73 | arch = list() |
| 74 | isa = None |
| 75 | for target_part in target_name.split("_"): |
| 76 | if target_part in _ARCH_TO_MACRO_MAP: |
Marat Dukhan | fb5b20a | 2020-06-26 13:14:50 -0700 | [diff] [blame] | 77 | if target_part in _ISA_TO_ARCH_MAP: |
| 78 | arch = _ISA_TO_ARCH_MAP[target_part] |
Marat Dukhan | 47387d6 | 2020-06-29 12:53:20 -0700 | [diff] [blame] | 79 | isa = target_part |
Marat Dukhan | fb5b20a | 2020-06-26 13:14:50 -0700 | [diff] [blame] | 80 | else: |
| 81 | arch = [target_part] |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 82 | elif target_part in _ISA_TO_ARCH_MAP: |
| 83 | isa = target_part |
| 84 | if isa and not arch: |
| 85 | arch = _ISA_TO_ARCH_MAP[isa] |
| 86 | |
| 87 | return arch, isa |
| 88 | |
| 89 | |
| 90 | def generate_isa_check_macro(isa): |
| 91 | return _ISA_TO_CHECK_MAP.get(isa, "") |
| 92 | |
| 93 | |
| 94 | def postprocess_test_case(test_case, arch, isa, assembly=False): |
| 95 | test_case = _remove_duplicate_newlines(test_case) |
| 96 | if arch: |
| 97 | guard = " || ".join(map(_ARCH_TO_MACRO_MAP.get, arch)) |
| 98 | if assembly: |
| 99 | guard += " && XNN_ENABLE_ASSEMBLY" |
Marat Dukhan | 3de5dfa | 2020-12-10 11:19:47 -0800 | [diff] [blame] | 100 | return "#if %s\n" % guard + _indent(test_case) + "\n" + \ |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 101 | "#endif // %s\n" % guard |
| 102 | else: |
| 103 | return test_case |