forked from Imagelibrary/binutils-gdb
Initial creation of sourceware repository
This commit is contained in:
810
sim/common/sim-inline.h
Normal file
810
sim/common/sim-inline.h
Normal file
@@ -0,0 +1,810 @@
|
||||
/* This file is part of the program psim.
|
||||
|
||||
Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
|
||||
Copyright (C) 1997, Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SIM_INLINE_H
|
||||
#define SIM_INLINE_H
|
||||
|
||||
|
||||
/* INLINE CODE SELECTION:
|
||||
|
||||
GCC -O3 attempts to inline any function or procedure in scope. The
|
||||
options below facilitate finer grained control over what is and
|
||||
what is not inlined. In particular, it allows the selection of
|
||||
modules for inlining. Doing this allows the compiler to both
|
||||
eliminate the overhead of function calls and (as a consequence)
|
||||
also eliminate further dead code.
|
||||
|
||||
On a CISC (x86) I've found that I can achieve an order of magintude
|
||||
speed improvement (x3-x5). In the case of RISC (sparc) while the
|
||||
performance gain isn't as great it is still significant.
|
||||
|
||||
Each module is controled by the macro <module>_INLINE which can
|
||||
have the values described below
|
||||
|
||||
0 (ZERO)
|
||||
|
||||
Do not inline any thing for the given module
|
||||
|
||||
The following bit fields values can be combined:
|
||||
|
||||
H_REVEALS_MODULE:
|
||||
C_REVEALS_MODULE:
|
||||
|
||||
Include the C file for the module into the file being
|
||||
compiled. The actual inlining is controlled separatly.
|
||||
|
||||
While of no apparent benefit, this makes it possible for the
|
||||
included module, when compiled, to inline its calls to what
|
||||
would otherwize be external functions.
|
||||
|
||||
{C_,H_} Determines where the module is inlined. A
|
||||
H_REVEALS_MODULE will be included everywhere.
|
||||
|
||||
INLINE_GLOBALS:
|
||||
|
||||
Make external functions within the module `inline'. Thus if
|
||||
the module is included into a file being compiled, calls to
|
||||
the included modules funtions can be eliminated. INLINE_MODULE
|
||||
implies REVEAL_MODULE.
|
||||
|
||||
INLINE_LOCALS:
|
||||
|
||||
Make internal (static) functions within the module `inline'.
|
||||
|
||||
|
||||
CODING STYLE:
|
||||
|
||||
The inline ability is enabled by specifying every data and function
|
||||
declaration and definition using one of the following methods:
|
||||
|
||||
|
||||
GLOBAL INLINE FUNCTIONS:
|
||||
|
||||
Such functions are small and used heavily. Inlining them
|
||||
will eliminate an unnecessary function call overhead.
|
||||
|
||||
.h: INLINE_OURPKG (void) ourpkg_func
|
||||
(int x,
|
||||
int y);
|
||||
|
||||
.c: INLINE_OURPKG (void)
|
||||
ourpkg_func (int x,
|
||||
int y)
|
||||
{
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
GLOBAL INLINE VARIABLES:
|
||||
|
||||
This doesn't make much sense.
|
||||
|
||||
|
||||
GLOBAL NON-INLINE (EXTERN) FUNCTIONS AND VARIABLES:
|
||||
|
||||
These include functions with varargs parameters. It can
|
||||
also include large rarely used functions that contribute
|
||||
little when inlined.
|
||||
|
||||
.h: extern int ourpkg_print
|
||||
(char *fmt, ...);
|
||||
extern int a_global_variable;
|
||||
|
||||
.c: #if EXTERN_OURPKG_P
|
||||
int
|
||||
ourpkg_print (char *fmt,
|
||||
...)
|
||||
{
|
||||
...
|
||||
}
|
||||
#endif
|
||||
#if EXTERN_OURPKG_P
|
||||
int a_global_variable = 1;
|
||||
#endif
|
||||
|
||||
|
||||
LOCAL (STATIC) FUNCTIONS:
|
||||
|
||||
These can either be marked inline or just static static vis:
|
||||
|
||||
.h: STATIC_INLINE_OURPKG (int) ourpkg_staticf (void);
|
||||
.c: STATIC_INLINE_OURPKG (int)
|
||||
ourpkg_staticf (void)
|
||||
{
|
||||
..
|
||||
}
|
||||
|
||||
.h: STATIC_OURPKG (int) ourpkg_staticf (void);
|
||||
.c: STATIC_OURPKG (int)
|
||||
ourpkg_staticf (void)
|
||||
{
|
||||
..
|
||||
}
|
||||
|
||||
|
||||
All .h files:
|
||||
|
||||
|
||||
All modules must wrap their .h code in the following:
|
||||
|
||||
#ifndef OURPKG_H
|
||||
#define OURPKG_H
|
||||
... code proper ...
|
||||
#endif
|
||||
|
||||
In addition, modules that want to allow global inlining must
|
||||
include the lines (below) at the end of the .h file. (FIXME:
|
||||
Shouldn't be needed).
|
||||
|
||||
#if H_REVEALS_MODULE_P (OURPKG_INLINE)
|
||||
#include "ourpkg.c"
|
||||
#endif
|
||||
|
||||
|
||||
All .c files:
|
||||
|
||||
All modules must wrap their .c code in the following
|
||||
|
||||
#ifndef OURPKG_C
|
||||
#define OURPKG_C
|
||||
... code proper ...
|
||||
#endif
|
||||
|
||||
|
||||
NOW IT WORKS:
|
||||
|
||||
0:
|
||||
|
||||
Since no inlining is defined. All macro's get standard defaults
|
||||
(extern, static, ...).
|
||||
|
||||
|
||||
|
||||
H_REVEALS_MODULE (alt includes our):
|
||||
|
||||
|
||||
altprog.c defines ALTPROG_C and then includes sim-inline.h.
|
||||
|
||||
In sim-inline.h the expression `` H_REVEALS_MODULE_P
|
||||
(OURPROG_INLINE) && ! defined (OURPROG_C) && REVEAL_MODULE_P
|
||||
(OURPROG_INLINE) '' is TRUE so it defines *_OURPROG as static
|
||||
and EXTERN_OURPROG_P as FALSE.
|
||||
|
||||
altprog.c includes ourprog.h.
|
||||
|
||||
In ourprog.h the expression ``H_REVEALS_MODULE_P
|
||||
(OURPROG_INLINE)'' is TRUE so it includes ourprog.c.
|
||||
|
||||
Consequently, all the code in ourprog.c is visible and static in
|
||||
the file altprog.c
|
||||
|
||||
|
||||
|
||||
H_REVEALS_MODULE (our includes our):
|
||||
|
||||
|
||||
ourprog.c defines OURPROG_C and then includes sim-inline.h.
|
||||
|
||||
In sim-inline.h the term `` ! defined (OURPROG_C) '' is FALSE so
|
||||
it defines *_OURPROG as non-static and EXTERN_OURPROG_P as TRUE.
|
||||
|
||||
ourprog.c includes ourprog.h.
|
||||
|
||||
In ourprog.h the expression ``H_REVEALS_MODULE_P
|
||||
(OURPROG_INLINE)'' is true so it includes ourprog.c.
|
||||
|
||||
In ourprog.c (second include) the expression defined (OURPROG_C)
|
||||
and so the body is not re-included.
|
||||
|
||||
Consequently, ourprog.o will contain a non-static copy of all
|
||||
the exported symbols.
|
||||
|
||||
|
||||
|
||||
C_REVEALS_MODULE (alt includes our):
|
||||
|
||||
|
||||
altprog.c defines ALTPROG_C and then includes sim-inline.c
|
||||
|
||||
sim-inline.c defines C_INLINE_C and then includes sim-inline.h
|
||||
|
||||
In sim-inline.h the expression `` defined (SIM_INLINE) && !
|
||||
defined (OURPROG_C) && REVEAL_MODULE_P (OURPROG_INLINE) '' is
|
||||
true so it defines *_OURPROG as static and EXTERN_OURPROG_P as
|
||||
FALSE.
|
||||
|
||||
In sim-inline.c the expression ``C_REVEALS_MODULE_P
|
||||
(OURPROG_INLINE)'' is true so it includes ourprog.c.
|
||||
|
||||
Consequently, all the code in ourprog.c is visible and static in
|
||||
the file altprog.c.
|
||||
|
||||
|
||||
|
||||
C_REVEALS_MODULE (our includes our):
|
||||
|
||||
|
||||
ourprog.c defines OURPROG_C and then includes sim-inline.c
|
||||
|
||||
sim-inline.c defines C_INLINE_C and then includes sim-inline.h
|
||||
|
||||
In sim-inline.h the term `` ! defined (OURPROG_C) '' is FALSE
|
||||
so it defines *_OURPROG as non-static and EXTERN_OURPROG_P as
|
||||
TRUE.
|
||||
|
||||
Consequently, ourprog.o will contain a non-static copy of all
|
||||
the exported symbols.
|
||||
|
||||
|
||||
|
||||
REALITY CHECK:
|
||||
|
||||
This is not for the faint hearted. I've seen GCC get up to 500mb
|
||||
trying to compile what this can create. */
|
||||
|
||||
#define H_REVEALS_MODULE 1
|
||||
#define C_REVEALS_MODULE 2
|
||||
#define INLINE_GLOBALS 4
|
||||
#define INLINE_LOCALS 8
|
||||
|
||||
#define REGPARM_MODULE 32
|
||||
|
||||
#define ALL_H_INLINE (H_REVEALS_MODULE | INLINE_GLOBALS | INLINE_LOCALS)
|
||||
#define ALL_C_INLINE (C_REVEALS_MODULE | INLINE_GLOBALS | INLINE_LOCALS)
|
||||
|
||||
|
||||
/* Default macro to simplify control several of key the inlines */
|
||||
|
||||
#ifndef DEFAULT_INLINE
|
||||
#define DEFAULT_INLINE INLINE_LOCALS
|
||||
#endif
|
||||
|
||||
#define REVEAL_MODULE_P(X) (X & (H_REVEALS_MODULE | C_REVEALS_MODULE))
|
||||
#define H_REVEALS_MODULE_P(X) ((X & H_REVEALS_MODULE))
|
||||
#define C_REVEALS_MODULE_P(X) ((X & C_REVEALS_MODULE))
|
||||
|
||||
|
||||
#ifndef HAVE_INLINE
|
||||
#ifdef __GNUC__
|
||||
#define HAVE_INLINE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Your compilers inline prefix */
|
||||
|
||||
#ifndef INLINE
|
||||
#if defined (__GNUC__) && defined (__OPTIMIZE__)
|
||||
#define INLINE __inline__
|
||||
#else
|
||||
#define INLINE /*inline*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* ??? Temporary, pending decision to always use extern inline and do a vast
|
||||
cleanup of inline support. */
|
||||
#ifndef INLINE2
|
||||
#if defined (__GNUC__)
|
||||
#define INLINE2 __inline__
|
||||
#else
|
||||
#define INLINE2 /*inline*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Your compiler's static inline prefix */
|
||||
|
||||
#ifndef STATIC_INLINE
|
||||
#define STATIC_INLINE static INLINE
|
||||
#endif
|
||||
|
||||
|
||||
/* Your compiler's extern inline prefix */
|
||||
|
||||
#ifndef EXTERN_INLINE
|
||||
#define EXTERN_INLINE extern INLINE2
|
||||
#endif
|
||||
|
||||
|
||||
/* Your compiler's no-return reserved word */
|
||||
|
||||
#ifndef NORETURN
|
||||
#define NORETURN
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Your compilers's unused reserved word */
|
||||
|
||||
#if !defined (UNUSED)
|
||||
#if (!defined (__GNUC__) \
|
||||
|| (__GNUC__ < 2) \
|
||||
|| (__GNUC__ == 2 && __GNUC_MINOR__ < 7))
|
||||
#define UNUSED
|
||||
#else
|
||||
#define UNUSED __attribute__((__unused__))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/* Your compilers nonstandard function call mechanism prefix */
|
||||
|
||||
#if !defined REGPARM
|
||||
#if defined (__GNUC__) && (defined (__i386__) || defined (__i486__) || defined (__i586__) || defined (__i686__))
|
||||
#if (WITH_REGPARM && WITH_STDCALL)
|
||||
#define REGPARM __attribute__((__regparm__(WITH_REGPARM),__stdcall__))
|
||||
#else
|
||||
#if (WITH_REGPARM && !WITH_STDCALL)
|
||||
#define REGPARM __attribute__((__regparm__(WITH_REGPARM)))
|
||||
#else
|
||||
#if (!WITH_REGPARM && WITH_STDCALL)
|
||||
#define REGPARM __attribute__((__stdcall__))
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined REGPARM
|
||||
#define REGPARM
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* *****
|
||||
sim-bits and sim-endian are treated differently from the rest
|
||||
of the modules below. Their default value is ALL_H_INLINE.
|
||||
The rest are ALL_C_INLINE. Don't blink, you'll miss it!
|
||||
*****
|
||||
*/
|
||||
|
||||
/* sim-bits */
|
||||
|
||||
#if !defined (SIM_BITS_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_BITS_INLINE (ALL_H_INLINE)
|
||||
#endif
|
||||
|
||||
#if (SIM_BITS_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_BITS REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_BITS
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_BITS_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_BITS_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_BITS_INLINE)))
|
||||
# if (SIM_BITS_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_BITS(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_BITS_P 0
|
||||
# else
|
||||
# define INLINE_SIM_BITS(TYPE) static TYPE UNUSED REGPARM_SIM_BITS
|
||||
# define EXTERN_SIM_BITS_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_BITS(TYPE) TYPE REGPARM_SIM_BITS
|
||||
# define EXTERN_SIM_BITS_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_BITS_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_BITS(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_BITS(TYPE) static TYPE REGPARM_SIM_BITS
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_BITS(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim-core */
|
||||
|
||||
#if !defined (SIM_CORE_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_CORE_INLINE ALL_C_INLINE
|
||||
#endif
|
||||
|
||||
#if (SIM_CORE_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_CORE REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_CORE
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_CORE_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_CORE_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_CORE_INLINE)))
|
||||
# if (SIM_CORE_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_CORE(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_CORE_P 0
|
||||
#else
|
||||
# define INLINE_SIM_CORE(TYPE) static TYPE UNUSED REGPARM_SIM_CORE
|
||||
# define EXTERN_SIM_CORE_P 0
|
||||
#endif
|
||||
#else
|
||||
# define INLINE_SIM_CORE(TYPE) TYPE REGPARM_SIM_CORE
|
||||
# define EXTERN_SIM_CORE_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_CORE_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_CORE(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_CORE(TYPE) static TYPE REGPARM_SIM_CORE
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_CORE(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim-endian */
|
||||
|
||||
#if !defined (SIM_ENDIAN_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_ENDIAN_INLINE ALL_H_INLINE
|
||||
#endif
|
||||
|
||||
#if (SIM_ENDIAN_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_ENDIAN REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_ENDIAN
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_ENDIAN_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_ENDIAN_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_ENDIAN_INLINE)))
|
||||
# if (SIM_ENDIAN_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_ENDIAN(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_ENDIAN_P 0
|
||||
# else
|
||||
# define INLINE_SIM_ENDIAN(TYPE) static TYPE UNUSED REGPARM_SIM_ENDIAN
|
||||
# define EXTERN_SIM_ENDIAN_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_ENDIAN(TYPE) TYPE REGPARM_SIM_ENDIAN
|
||||
# define EXTERN_SIM_ENDIAN_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_ENDIAN_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_ENDIAN(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_ENDIAN(TYPE) static TYPE REGPARM_SIM_ENDIAN
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_ENDIAN(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim-events */
|
||||
|
||||
#if !defined (SIM_EVENTS_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_EVENTS_INLINE ALL_C_INLINE
|
||||
#endif
|
||||
|
||||
#if (SIM_EVENTS_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_EVENTS REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_EVENTS
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_EVENTS_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_EVENTS_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_EVENTS_INLINE)))
|
||||
# if (SIM_EVENTS_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_EVENTS(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_EVENTS_P 0
|
||||
# else
|
||||
# define INLINE_SIM_EVENTS(TYPE) static TYPE UNUSED REGPARM_SIM_EVENTS
|
||||
# define EXTERN_SIM_EVENTS_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_EVENTS(TYPE) TYPE REGPARM_SIM_EVENTS
|
||||
# define EXTERN_SIM_EVENTS_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_EVENTS_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_EVENTS(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_EVENTS(TYPE) static TYPE REGPARM_SIM_EVENTS
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_EVENTS(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim-fpu */
|
||||
|
||||
#if !defined (SIM_FPU_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_FPU_INLINE ALL_C_INLINE
|
||||
#endif
|
||||
|
||||
#if (SIM_FPU_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_FPU REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_FPU
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_FPU_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_FPU_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_FPU_INLINE)))
|
||||
# if (SIM_FPU_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_FPU(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_FPU_P 0
|
||||
# else
|
||||
# define INLINE_SIM_FPU(TYPE) static TYPE UNUSED REGPARM_SIM_FPU
|
||||
# define EXTERN_SIM_FPU_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_FPU(TYPE) TYPE REGPARM_SIM_FPU
|
||||
# define EXTERN_SIM_FPU_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_FPU_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_FPU(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_FPU(TYPE) static TYPE REGPARM_SIM_FPU
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_FPU(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim-types */
|
||||
|
||||
#if (SIM_TYPES_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_TYPES REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_TYPES
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_TYPES_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_TYPES_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_TYPES_INLINE)))
|
||||
# if (SIM_TYPES_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_TYPES(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_TYPES_P 0
|
||||
# else
|
||||
# define INLINE_SIM_TYPES(TYPE) static TYPE UNUSED REGPARM_SIM_TYPES
|
||||
# define EXTERN_SIM_TYPES_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_TYPES(TYPE) TYPE REGPARM_SIM_TYPES
|
||||
# define EXTERN_SIM_TYPES_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_TYPES_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_TYPES(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_TYPES(TYPE) static TYPE REGPARM_SIM_TYPES
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_TYPES(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* sim_main */
|
||||
|
||||
#if !defined (SIM_MAIN_INLINE) && (DEFAULT_INLINE)
|
||||
# define SIM_MAIN_INLINE (ALL_C_INLINE)
|
||||
#endif
|
||||
|
||||
#if (SIM_MAIN_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SIM_MAIN REGPARM
|
||||
#else
|
||||
# define REGPARM_SIM_MAIN
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SIM_MAIN_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SIM_MAIN_C) \
|
||||
&& (REVEAL_MODULE_P (SIM_MAIN_INLINE)))
|
||||
# if (SIM_MAIN_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SIM_MAIN(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SIM_MAIN_P 0
|
||||
# else
|
||||
# define INLINE_SIM_MAIN(TYPE) static TYPE UNUSED REGPARM_SIM_MAIN
|
||||
# define EXTERN_SIM_MAIN_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_SIM_MAIN(TYPE) TYPE REGPARM_SIM_MAIN
|
||||
# define EXTERN_SIM_MAIN_P 1
|
||||
#endif
|
||||
|
||||
#if (SIM_MAIN_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SIM_MAIN(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SIM_MAIN(TYPE) static TYPE REGPARM_SIM_MAIN
|
||||
#endif
|
||||
|
||||
#define STATIC_SIM_MAIN(TYPE) static TYPE
|
||||
|
||||
/* engine */
|
||||
|
||||
#if (ENGINE_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_ENGINE REGPARM
|
||||
#else
|
||||
# define REGPARM_ENGINE
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (ENGINE_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (ENGINE_C) \
|
||||
&& (REVEAL_MODULE_P (ENGINE_INLINE)))
|
||||
# if (ENGINE_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_ENGINE(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_ENGINE_P 0
|
||||
# else
|
||||
# define INLINE_ENGINE(TYPE) static TYPE UNUSED REGPARM_ENGINE
|
||||
# define EXTERN_ENGINE_P 0
|
||||
# endif
|
||||
#else
|
||||
# define INLINE_ENGINE(TYPE) TYPE REGPARM_ENGINE
|
||||
# define EXTERN_ENGINE_P 1
|
||||
#endif
|
||||
|
||||
#if (ENGINE_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_ENGINE(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_ENGINE(TYPE) static TYPE REGPARM_ENGINE
|
||||
#endif
|
||||
|
||||
#define STATIC_ENGINE(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* icache */
|
||||
|
||||
#if (ICACHE_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_ICACHE REGPARM
|
||||
#else
|
||||
# define REGPARM_ICACHE
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (ICACHE_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (ICACHE_C) \
|
||||
&& (REVEAL_MODULE_P (ICACHE_INLINE)))
|
||||
# if (ICACHE_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_ICACHE(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_ICACHE_P 0
|
||||
#else
|
||||
# define INLINE_ICACHE(TYPE) static TYPE UNUSED REGPARM_ICACHE
|
||||
# define EXTERN_ICACHE_P 0
|
||||
#endif
|
||||
#else
|
||||
# define INLINE_ICACHE(TYPE) TYPE REGPARM_ICACHE
|
||||
# define EXTERN_ICACHE_P 1
|
||||
#endif
|
||||
|
||||
#if (ICACHE_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_ICACHE(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_ICACHE(TYPE) static TYPE REGPARM_ICACHE
|
||||
#endif
|
||||
|
||||
#define STATIC_ICACHE(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* idecode */
|
||||
|
||||
#if (IDECODE_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_IDECODE REGPARM
|
||||
#else
|
||||
# define REGPARM_IDECODE
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (IDECODE_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (IDECODE_C) \
|
||||
&& (REVEAL_MODULE_P (IDECODE_INLINE)))
|
||||
# if (IDECODE_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_IDECODE(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_IDECODE_P 0
|
||||
#else
|
||||
# define INLINE_IDECODE(TYPE) static TYPE UNUSED REGPARM_IDECODE
|
||||
# define EXTERN_IDECODE_P 0
|
||||
#endif
|
||||
#else
|
||||
# define INLINE_IDECODE(TYPE) TYPE REGPARM_IDECODE
|
||||
# define EXTERN_IDECODE_P 1
|
||||
#endif
|
||||
|
||||
#if (IDECODE_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_IDECODE(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_IDECODE(TYPE) static TYPE REGPARM_IDECODE
|
||||
#endif
|
||||
|
||||
#define STATIC_IDECODE(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* semantics */
|
||||
|
||||
#if (SEMANTICS_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SEMANTICS REGPARM
|
||||
#else
|
||||
# define REGPARM_SEMANTICS
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SEMANTICS_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SEMANTICS_C) \
|
||||
&& (REVEAL_MODULE_P (SEMANTICS_INLINE)))
|
||||
# if (SEMANTICS_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SEMANTICS(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SEMANTICS_P 0
|
||||
#else
|
||||
# define INLINE_SEMANTICS(TYPE) static TYPE UNUSED REGPARM_SEMANTICS
|
||||
# define EXTERN_SEMANTICS_P 0
|
||||
#endif
|
||||
#else
|
||||
# define INLINE_SEMANTICS(TYPE) TYPE REGPARM_SEMANTICS
|
||||
# define EXTERN_SEMANTICS_P 1
|
||||
#endif
|
||||
|
||||
#if EXTERN_SEMANTICS_P
|
||||
# define EXTERN_SEMANTICS(TYPE) TYPE REGPARM_SEMANTICS
|
||||
#else
|
||||
# define EXTERN_SEMANTICS(TYPE) static TYPE UNUSED REGPARM_SEMANTICS
|
||||
#endif
|
||||
|
||||
#if (SEMANTICS_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SEMANTICS(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SEMANTICS(TYPE) static TYPE REGPARM_SEMANTICS
|
||||
#endif
|
||||
|
||||
#define STATIC_SEMANTICS(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
/* support */
|
||||
|
||||
#if !defined (SUPPORT_INLINE) && (DEFAULT_INLINE)
|
||||
# define SUPPORT_INLINE ALL_C_INLINE
|
||||
#endif
|
||||
|
||||
#if (SUPPORT_INLINE & REGPARM_MODULE)
|
||||
# define REGPARM_SUPPORT REGPARM
|
||||
#else
|
||||
# define REGPARM_SUPPORT
|
||||
#endif
|
||||
|
||||
#if ((H_REVEALS_MODULE_P (SUPPORT_INLINE) || defined (SIM_INLINE_C)) \
|
||||
&& !defined (SUPPORT_C) \
|
||||
&& (REVEAL_MODULE_P (SUPPORT_INLINE)))
|
||||
# if (SUPPORT_INLINE & INLINE_GLOBALS)
|
||||
# define INLINE_SUPPORT(TYPE) static INLINE TYPE UNUSED
|
||||
# define EXTERN_SUPPORT_P 0
|
||||
#else
|
||||
# define INLINE_SUPPORT(TYPE) static TYPE UNUSED REGPARM_SUPPORT
|
||||
# define EXTERN_SUPPORT_P 0
|
||||
#endif
|
||||
#else
|
||||
# define INLINE_SUPPORT(TYPE) TYPE REGPARM_SUPPORT
|
||||
# define EXTERN_SUPPORT_P 1
|
||||
#endif
|
||||
|
||||
#if (SUPPORT_INLINE & INLINE_LOCALS)
|
||||
# define STATIC_INLINE_SUPPORT(TYPE) static INLINE TYPE
|
||||
#else
|
||||
# define STATIC_INLINE_SUPPORT(TYPE) static TYPE REGPARM_SUPPORT
|
||||
#endif
|
||||
|
||||
#define STATIC_SUPPORT(TYPE) static TYPE
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user