X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmapi%2Fmapi%2Fmapi_tmp.h;h=a1b067fb73ce41fa9d5cedde60a6de59160b3938;hb=8f2a974cf2c9b6c00dfac11be4316a7d121dfbb4;hp=79beca47d2a1e038aa5690867ab0254b743563ec;hpb=5ae4b6693a8254236435960ef84701fe405fe59b;p=mesa.git diff --git a/src/mapi/mapi/mapi_tmp.h b/src/mapi/mapi/mapi_tmp.h index 79beca47d2a..a1b067fb73c 100644 --- a/src/mapi/mapi/mapi_tmp.h +++ b/src/mapi/mapi/mapi_tmp.h @@ -26,186 +26,8 @@ * Chia-I Wu */ -#include "u_macros.h" - #ifndef MAPI_ABI_HEADER #error "MAPI_ABI_HEADER must be defined" #endif - -/** - * Get API defines. - */ -#ifdef MAPI_TMP_DEFINES -# define MAPI_ABI_DEFINES -# include MAPI_ABI_HEADER - -#ifndef MAPI_ABI_PREFIX -#error "MAPI_ABI_PREFIX must be defined" -#endif -#ifndef MAPI_ABI_PUBLIC -#error "MAPI_ABI_PUBLIC must be defined" -#endif -#ifndef MAPI_ABI_ATTR -#error "MAPI_ABI_ATTR must be defined" -#endif - -#undef MAPI_TMP_DEFINES -#endif /* MAPI_TMP_DEFINES */ - - -/** - * Generate fields of struct mapi_table. - */ -#ifdef MAPI_TMP_TABLE -# define MAPI_ABI_ENTRY(ret, name, params) \ - ret (MAPI_ABI_ATTR *name) params; -# define MAPI_DYNAMIC_ENTRY(ret, name, params) \ - ret (MAPI_ABI_ATTR *name) params; -# include MAPI_ABI_HEADER -#undef MAPI_TMP_TABLE -#endif /* MAPI_TMP_TABLE */ - - -/** - * Declare public entries. - */ -#ifdef MAPI_TMP_PUBLIC_DECLARES -# define MAPI_ABI_ENTRY(ret, name, params) \ - MAPI_ABI_PUBLIC ret MAPI_ABI_ATTR U_CONCAT(MAPI_ABI_PREFIX, name) params; -# define MAPI_ALIAS_ENTRY(alias, ret, name, params) \ - MAPI_ABI_ENTRY(ret, name, params); -# define MAPI_ABI_ENTRY_HIDDEN(ret, name, params) \ - HIDDEN ret MAPI_ABI_ATTR U_CONCAT(MAPI_ABI_PREFIX, name) params; -# define MAPI_ALIAS_ENTRY_HIDDEN(alias, ret, name, params) \ - MAPI_ABI_ENTRY_HIDDEN(ret, name, params) -# include MAPI_ABI_HEADER -#undef MAPI_TMP_PUBLIC_DECLARES -#endif /* MAPI_TMP_PUBLIC_DECLARES */ - - -/** - * Generate string pool and public stubs. - */ -#ifdef MAPI_TMP_PUBLIC_STUBS -/* define the string pool */ -static const char public_string_pool[] = -# define MAPI_ABI_ENTRY(ret, name, params) \ - U_STRINGIFY(name) "\0" -# define MAPI_ALIAS_ENTRY(alias, ret, name, params) \ - MAPI_ABI_ENTRY(ret, name, params) -# include MAPI_ABI_HEADER - ; -/* define public_sorted_indices */ -# define MAPI_ABI_SORTED_INDICES public_sorted_indices -# include MAPI_ABI_HEADER - -/* define public_stubs */ -static const struct mapi_stub public_stubs[] = { -# define MAPI_ABI_ENTRY(ret, name, params) \ - { (mapi_func) U_CONCAT(MAPI_ABI_PREFIX, name), \ - MAPI_SLOT_ ## name, (void *) MAPI_POOL_ ## name }, -# define MAPI_ALIAS_ENTRY(alias, ret, name, params) \ - MAPI_ABI_ENTRY(ret, name, params) -# include MAPI_ABI_HEADER - { NULL, -1, (void *) -1 } -}; - -#undef MAPI_TMP_PUBLIC_STUBS -#endif /* MAPI_TMP_PUBLIC_STUBS */ - - -/** - * Generate public entries. - */ -#ifdef MAPI_TMP_PUBLIC_ENTRIES -# define MAPI_ABI_ENTRY(ret, name, params) \ - ret MAPI_ABI_ATTR U_CONCAT(MAPI_ABI_PREFIX, name) params -# define MAPI_ABI_CODE(ret, name, args) \ - { \ - const struct mapi_table *tbl = u_current_get(); \ - tbl->name args; \ - } -# define MAPI_ABI_CODE_RETURN(ret, name, args) \ - { \ - const struct mapi_table *tbl = u_current_get(); \ - return tbl->name args; \ - } -# define MAPI_ALIAS_ENTRY(alias, ret, name, params) \ - MAPI_ABI_ENTRY(ret, name, params) -# define MAPI_ALIAS_CODE(alias, ret, name, args) \ - MAPI_ABI_CODE(ret, alias, args) -# define MAPI_ALIAS_CODE_RETURN(alias, ret, name, args) \ - MAPI_ABI_CODE_RETURN(ret, alias, args) -# include MAPI_ABI_HEADER -#undef MAPI_TMP_PUBLIC_ENTRIES -#endif /* MAPI_TMP_PUBLIC_ENTRIES */ - - -/** - * Generate noop entries. - */ -#ifdef MAPI_TMP_NOOP_ARRAY -#ifdef DEBUG -# define MAPI_ABI_ENTRY(ret, name, params) \ - static ret MAPI_ABI_ATTR U_CONCAT(noop_, name) params -# define MAPI_ABI_CODE(ret, name, args) \ - { \ - noop_warn(U_CONCAT_STR(MAPI_ABI_PREFIX, name)); \ - } -# define MAPI_ABI_CODE_RETURN(ret, name, args) \ - { \ - noop_warn(U_CONCAT_STR(MAPI_ABI_PREFIX, name)); \ - return (ret) 0; \ - } -# include MAPI_ABI_HEADER - -/* define the noop function array that may be casted to mapi_table */ -const mapi_func table_noop_array[] = { -# define MAPI_ABI_ENTRY(ret, name, params) \ - (mapi_func) U_CONCAT(noop_, name), -# define MAPI_DYNAMIC_ENTRY(ret, name, params) \ - (mapi_func) noop_generic, -# include MAPI_ABI_HEADER - (mapi_func) noop_generic -}; - -#else /* DEBUG */ - -const mapi_func table_noop_array[] = { -# define MAPI_ABI_ENTRY(ret, name, params) \ - (mapi_func) noop_generic, -# define MAPI_DYNAMIC_ENTRY(ret, name, params) \ - (mapi_func) noop_generic, -# include MAPI_ABI_HEADER - (mapi_func) noop_generic -}; - -#endif /* DEBUG */ -#undef MAPI_TMP_NOOP_ARRAY -#endif /* MAPI_TMP_NOOP_ARRAY */ - - -#ifdef MAPI_TMP_STUB_ASM_GCC -# define STUB_ASM_ALIAS(func, to) \ - ".globl " func "\n" \ - ".set " func ", " to -# define STUB_ASM_HIDE(func) \ - ".hidden " func - -# define MAPI_ABI_ENTRY(ret, name, params) \ - __asm__(STUB_ASM_ENTRY(U_CONCAT_STR(MAPI_ABI_PREFIX, name))); -# define MAPI_ABI_CODE(ret, name, args) \ - __asm__(STUB_ASM_CODE(U_STRINGIFY(MAPI_SLOT_ ## name))); -# define MAPI_ALIAS_ENTRY(alias, ret, name, params) \ - __asm__(STUB_ASM_ALIAS(U_CONCAT_STR(MAPI_ABI_PREFIX, name), \ - U_CONCAT_STR(MAPI_ABI_PREFIX, alias))); -# define MAPI_ABI_ENTRY_HIDDEN(ret, name, params) \ - __asm__(STUB_ASM_HIDE(U_CONCAT_STR(MAPI_ABI_PREFIX, name))); \ - MAPI_ABI_ENTRY(ret, name, params); -# define MAPI_ALIAS_ENTRY_HIDDEN(alias, ret, name, params) \ - __asm__(STUB_ASM_HIDE(U_CONCAT_STR(MAPI_ABI_PREFIX, name))); \ - MAPI_ALIAS_ENTRY(alias, ret, name, params); -# include MAPI_ABI_HEADER -#undef MAPI_TMP_STUB_ASM_GCC -#endif /* MAPI_TMP_STUB_ASM_GCC */ +#include MAPI_ABI_HEADER