| /* |
| * Copyright (c) 2023 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef NSI_COMMON_SRC_INCL_NSI_CPU_IF_INTERNAL_H |
| #define NSI_COMMON_SRC_INCL_NSI_CPU_IF_INTERNAL_H |
| |
| #include "nsi_utils.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define FUNCT(i, pre, post) \ |
| pre##i##post |
| |
| #define FUNCT_LIST(pre, post, sep) \ |
| FUNCT(0, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(1, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(2, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(3, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(4, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(5, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(6, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(7, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(8, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(9, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(10, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(11, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(12, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(13, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(14, pre, post) NSI_DEBRACKET sep \ |
| FUNCT(15, pre, post) NSI_DEBRACKET sep \ |
| |
| #define F_TRAMP_TABLE(pre, post) FUNCT_LIST(pre, post, (,)) |
| |
| #define F_TRAMP_LIST(pre, post) FUNCT_LIST(pre, post, (;)) |
| |
| #define F_TRAMP_BODY_LIST(pre, post) FUNCT_LIST(pre, post, ()) |
| |
| #define TRAMPOLINES(pre, post) \ |
| void pre ## n ## post(int n) \ |
| { \ |
| void(*fptrs[])(void) = { \ |
| F_TRAMP_TABLE(pre, post) \ |
| }; \ |
| fptrs[n](); \ |
| } |
| |
| #define TRAMPOLINES_i_vp(pre, post) \ |
| int pre ## n ## post(int n, void *p) \ |
| { \ |
| int(*fptrs[])(void *p) = { \ |
| F_TRAMP_TABLE(pre, post) \ |
| }; \ |
| return fptrs[n](p); \ |
| } |
| |
| #define TRAMPOLINES_i_(pre, post) \ |
| int pre ## n ## post(int n) \ |
| { \ |
| int(*fptrs[])(void) = { \ |
| F_TRAMP_TABLE(pre, post) \ |
| }; \ |
| return fptrs[n](); \ |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* NSI_COMMON_SRC_INCL_NSI_CPU_IF_INTERNAL_H */ |