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