blob: d75f64065e230274bba350b6c8614a4abb884010 [file] [log] [blame]
/*
* 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 */