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 | 4c61779 | 2021-12-21 15:47:58 -0800 | [diff] [blame] | 30 | "wasmrelaxedsimd": "XNN_ARCH_WASMRELAXEDSIMD", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 31 | } |
| 32 | |
| 33 | _ISA_TO_ARCH_MAP = { |
| 34 | "neon": ["aarch32", "aarch64"], |
Marat Dukhan | 8ff372c | 2021-09-28 14:43:17 -0700 | [diff] [blame] | 35 | "neonfp16": ["aarch32", "aarch64"], |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 36 | "neonfma": ["aarch32", "aarch64"], |
Marat Dukhan | eecf8fd | 2020-06-09 08:59:37 -0700 | [diff] [blame] | 37 | "neonv8": ["aarch32", "aarch64"], |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 38 | "neonfp16arith": ["aarch32", "aarch64"], |
Benoit Jacob | a964473 | 2020-08-13 12:48:55 -0700 | [diff] [blame] | 39 | "neondot": ["aarch32", "aarch64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 40 | "sse": ["x86-32", "x86-64"], |
| 41 | "sse2": ["x86-32", "x86-64"], |
Marat Dukhan | 595e170 | 2020-07-31 10:12:52 -0700 | [diff] [blame] | 42 | "ssse3": ["x86-32", "x86-64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 43 | "sse41": ["x86-32", "x86-64"], |
| 44 | "avx": ["x86-32", "x86-64"], |
Marat Dukhan | f1a6ed3 | 2021-09-26 13:40:19 -0700 | [diff] [blame] | 45 | "f16c": ["x86-32", "x86-64"], |
Marat Dukhan | 1566fee | 2020-08-02 21:55:41 -0700 | [diff] [blame] | 46 | "xop": ["x86-32", "x86-64"], |
Marat Dukhan | 1bbf96b | 2020-06-15 23:01:20 -0700 | [diff] [blame] | 47 | "fma3": ["x86-32", "x86-64"], |
| 48 | "avx2": ["x86-32", "x86-64"], |
| 49 | "avx512f": ["x86-32", "x86-64"], |
Marat Dukhan | bb00b1d | 2020-08-10 11:37:23 -0700 | [diff] [blame] | 50 | "avx512skx": ["x86-32", "x86-64"], |
Frank Barchard | a635a29 | 2020-08-31 09:36:05 -0700 | [diff] [blame] | 51 | "wasm32": ["wasm", "wasmsimd"], |
Marat Dukhan | 4c61779 | 2021-12-21 15:47:58 -0800 | [diff] [blame] | 52 | "wasm": ["wasm", "wasmsimd", "wasmrelaxedsimd"], |
| 53 | "wasmsimd": ["wasmsimd", "wasmrelaxedsimd"], |
| 54 | "wasmrelaxedsimd": ["wasmrelaxedsimd"], |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 55 | } |
| 56 | |
| 57 | _ISA_TO_CHECK_MAP = { |
| 58 | "neon": "TEST_REQUIRES_ARM_NEON", |
Marat Dukhan | 8ff372c | 2021-09-28 14:43:17 -0700 | [diff] [blame] | 59 | "neonfp16": "TEST_REQUIRES_ARM_NEON_FP16", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 60 | "neonfma": "TEST_REQUIRES_ARM_NEON_FMA", |
Marat Dukhan | eecf8fd | 2020-06-09 08:59:37 -0700 | [diff] [blame] | 61 | "neonv8": "TEST_REQUIRES_ARM_NEON_V8", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 62 | "neonfp16arith": "TEST_REQUIRES_ARM_NEON_FP16_ARITH", |
Benoit Jacob | a964473 | 2020-08-13 12:48:55 -0700 | [diff] [blame] | 63 | "neondot": "TEST_REQUIRES_ARM_NEON_DOT", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 64 | "sse": "TEST_REQUIRES_X86_SSE", |
| 65 | "sse2": "TEST_REQUIRES_X86_SSE2", |
Marat Dukhan | 595e170 | 2020-07-31 10:12:52 -0700 | [diff] [blame] | 66 | "ssse3": "TEST_REQUIRES_X86_SSSE3", |
Marat Dukhan | 69c3f2c | 2019-11-06 12:30:01 -0800 | [diff] [blame] | 67 | "sse41": "TEST_REQUIRES_X86_SSE41", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 68 | "avx": "TEST_REQUIRES_X86_AVX", |
Marat Dukhan | f1a6ed3 | 2021-09-26 13:40:19 -0700 | [diff] [blame] | 69 | "f16c": "TEST_REQUIRES_X86_F16C", |
Marat Dukhan | 1566fee | 2020-08-02 21:55:41 -0700 | [diff] [blame] | 70 | "xop": "TEST_REQUIRES_X86_XOP", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 71 | "avx2": "TEST_REQUIRES_X86_AVX2", |
Marat Dukhan | fda12b8 | 2019-11-21 12:27:59 -0800 | [diff] [blame] | 72 | "fma3": "TEST_REQUIRES_X86_FMA3", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 73 | "avx512f": "TEST_REQUIRES_X86_AVX512F", |
Marat Dukhan | bb00b1d | 2020-08-10 11:37:23 -0700 | [diff] [blame] | 74 | "avx512skx": "TEST_REQUIRES_X86_AVX512SKX", |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 75 | } |
| 76 | |
| 77 | |
| 78 | def parse_target_name(target_name): |
| 79 | arch = list() |
| 80 | isa = None |
| 81 | for target_part in target_name.split("_"): |
| 82 | if target_part in _ARCH_TO_MACRO_MAP: |
Marat Dukhan | fb5b20a | 2020-06-26 13:14:50 -0700 | [diff] [blame] | 83 | if target_part in _ISA_TO_ARCH_MAP: |
| 84 | arch = _ISA_TO_ARCH_MAP[target_part] |
Marat Dukhan | 47387d6 | 2020-06-29 12:53:20 -0700 | [diff] [blame] | 85 | isa = target_part |
Marat Dukhan | fb5b20a | 2020-06-26 13:14:50 -0700 | [diff] [blame] | 86 | else: |
| 87 | arch = [target_part] |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 88 | elif target_part in _ISA_TO_ARCH_MAP: |
| 89 | isa = target_part |
| 90 | if isa and not arch: |
| 91 | arch = _ISA_TO_ARCH_MAP[isa] |
| 92 | |
| 93 | return arch, isa |
| 94 | |
| 95 | |
| 96 | def generate_isa_check_macro(isa): |
| 97 | return _ISA_TO_CHECK_MAP.get(isa, "") |
| 98 | |
| 99 | |
Marat Dukhan | 6e8c0ce | 2021-04-13 14:35:08 -0700 | [diff] [blame] | 100 | def arch_to_macro(arch, isa): |
| 101 | if arch == "aarch32" and isa == "neondot": |
| 102 | return _ARCH_TO_MACRO_MAP[arch] + " && !XNN_PLATFORM_IOS" |
| 103 | else: |
| 104 | return _ARCH_TO_MACRO_MAP[arch] |
| 105 | |
| 106 | |
Zhi An Ng | b43b47a | 2021-12-23 16:27:22 -0800 | [diff] [blame] | 107 | def postprocess_test_case(test_case, arch, isa, assembly=False, jit=False): |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 108 | test_case = _remove_duplicate_newlines(test_case) |
| 109 | if arch: |
Marat Dukhan | 6e8c0ce | 2021-04-13 14:35:08 -0700 | [diff] [blame] | 110 | guard = " || ".join(arch_to_macro(a, isa) for a in arch) |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 111 | if assembly: |
| 112 | guard += " && XNN_ENABLE_ASSEMBLY" |
Zhi An Ng | b43b47a | 2021-12-23 16:27:22 -0800 | [diff] [blame] | 113 | if jit: |
| 114 | guard += " && XNN_PLATFORM_JIT" |
Marat Dukhan | 3de5dfa | 2020-12-10 11:19:47 -0800 | [diff] [blame] | 115 | return "#if %s\n" % guard + _indent(test_case) + "\n" + \ |
Marat Dukhan | 918a4a6 | 2019-10-27 19:49:49 -0700 | [diff] [blame] | 116 | "#endif // %s\n" % guard |
| 117 | else: |
| 118 | return test_case |