1 /* 2 * Copyright © 2021 Collabora Ltd. 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #ifndef PANVK_MACROS_H 7 #define PANVK_MACROS_H 8 9 #include <assert.h> 10 11 #ifdef HAVE_VALGRIND 12 #include <memcheck.h> 13 #include <valgrind.h> 14 #define VG(x) x 15 #else 16 #define VG(x) 17 #endif 18 19 #define panvk_stub() assert(!"stub") 20 21 #define panvk_arch_name(name, version) panvk_##version##_##name 22 23 #define panvk_arch_dispatch(arch, name, ...) \ 24 do { \ 25 switch (arch) { \ 26 case 6: \ 27 panvk_arch_name(name, v6)(__VA_ARGS__); \ 28 break; \ 29 case 7: \ 30 panvk_arch_name(name, v7)(__VA_ARGS__); \ 31 break; \ 32 case 10: \ 33 panvk_arch_name(name, v10)(__VA_ARGS__); \ 34 break; \ 35 default: \ 36 unreachable("Unsupported architecture"); \ 37 } \ 38 } while (0) 39 40 #define panvk_arch_dispatch_ret(arch, name, ret, ...) \ 41 do { \ 42 switch (arch) { \ 43 case 6: \ 44 ret = panvk_arch_name(name, v6)(__VA_ARGS__); \ 45 break; \ 46 case 7: \ 47 ret = panvk_arch_name(name, v7)(__VA_ARGS__); \ 48 break; \ 49 case 10: \ 50 ret = panvk_arch_name(name, v10)(__VA_ARGS__); \ 51 break; \ 52 default: \ 53 unreachable("Unsupported architecture"); \ 54 } \ 55 } while (0) 56 57 #ifdef PAN_ARCH 58 #if PAN_ARCH == 6 59 #define panvk_per_arch(name) panvk_arch_name(name, v6) 60 #elif PAN_ARCH == 7 61 #define panvk_per_arch(name) panvk_arch_name(name, v7) 62 #elif PAN_ARCH == 9 63 #define panvk_per_arch(name) panvk_arch_name(name, v9) 64 #elif PAN_ARCH == 10 65 #define panvk_per_arch(name) panvk_arch_name(name, v10) 66 #else 67 #error "Unsupported arch" 68 #endif 69 #endif 70 71 #endif 72