1 /* The common simulator framework for GDB, the GNU Debugger.
3 Copyright 2002 Free Software Foundation, Inc.
5 Contributed by Andrew Cagney and Red Hat.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
29 /* INLINE CODE SELECTION:
31 GCC -O3 attempts to inline any function or procedure in scope. The
32 options below facilitate finer grained control over what is and
33 what is not inlined. In particular, it allows the selection of
34 modules for inlining. Doing this allows the compiler to both
35 eliminate the overhead of function calls and (as a consequence)
36 also eliminate further dead code.
38 On a CISC (x86) I've found that I can achieve an order of magintude
39 speed improvement (x3-x5). In the case of RISC (sparc) while the
40 performance gain isn't as great it is still significant.
42 Each module is controled by the macro <module>_INLINE which can
43 have the values described below
47 Do not inline any thing for the given module
49 The following bit fields values can be combined:
54 Include the C file for the module into the file being
55 compiled. The actual inlining is controlled separatly.
57 While of no apparent benefit, this makes it possible for the
58 included module, when compiled, to inline its calls to what
59 would otherwize be external functions.
61 {C_,H_} Determines where the module is inlined. A
62 H_REVEALS_MODULE will be included everywhere.
66 Make external functions within the module `inline'. Thus if
67 the module is included into a file being compiled, calls to
68 the included modules funtions can be eliminated. INLINE_MODULE
69 implies REVEAL_MODULE.
73 Make internal (static) functions within the module `inline'.
78 The inline ability is enabled by specifying every data and function
79 declaration and definition using one of the following methods:
82 GLOBAL INLINE FUNCTIONS:
84 Such functions are small and used heavily. Inlining them
85 will eliminate an unnecessary function call overhead.
87 .h: INLINE_OURPKG (void) ourpkg_func
91 .c: INLINE_OURPKG (void)
99 GLOBAL INLINE VARIABLES:
101 This doesn't make much sense.
104 GLOBAL NON-INLINE (EXTERN) FUNCTIONS AND VARIABLES:
106 These include functions with varargs parameters. It can
107 also include large rarely used functions that contribute
110 .h: extern int ourpkg_print
112 extern int a_global_variable;
114 .c: #if EXTERN_OURPKG_P
116 ourpkg_print (char *fmt,
123 int a_global_variable = 1;
127 LOCAL (STATIC) FUNCTIONS:
129 These can either be marked inline or just static static vis:
131 .h: STATIC_INLINE_OURPKG (int) ourpkg_staticf (void);
132 .c: STATIC_INLINE_OURPKG (int)
133 ourpkg_staticf (void)
138 .h: STATIC_OURPKG (int) ourpkg_staticf (void);
139 .c: STATIC_OURPKG (int)
140 ourpkg_staticf (void)
149 All modules must wrap their .h code in the following:
156 In addition, modules that want to allow global inlining must
157 include the lines (below) at the end of the .h file. (FIXME:
158 Shouldn't be needed).
160 #if H_REVEALS_MODULE_P (OURPKG_INLINE)
167 All modules must wrap their .c code in the following
179 Since no inlining is defined. All macro's get standard defaults
180 (extern, static, ...).
184 H_REVEALS_MODULE (alt includes our):
187 altprog.c defines ALTPROG_C and then includes sim-inline.h.
189 In sim-inline.h the expression `` H_REVEALS_MODULE_P
190 (OURPROG_INLINE) && ! defined (OURPROG_C) && REVEAL_MODULE_P
191 (OURPROG_INLINE) '' is TRUE so it defines *_OURPROG as static
192 and EXTERN_OURPROG_P as FALSE.
194 altprog.c includes ourprog.h.
196 In ourprog.h the expression ``H_REVEALS_MODULE_P
197 (OURPROG_INLINE)'' is TRUE so it includes ourprog.c.
199 Consequently, all the code in ourprog.c is visible and static in
204 H_REVEALS_MODULE (our includes our):
207 ourprog.c defines OURPROG_C and then includes sim-inline.h.
209 In sim-inline.h the term `` ! defined (OURPROG_C) '' is FALSE so
210 it defines *_OURPROG as non-static and EXTERN_OURPROG_P as TRUE.
212 ourprog.c includes ourprog.h.
214 In ourprog.h the expression ``H_REVEALS_MODULE_P
215 (OURPROG_INLINE)'' is true so it includes ourprog.c.
217 In ourprog.c (second include) the expression defined (OURPROG_C)
218 and so the body is not re-included.
220 Consequently, ourprog.o will contain a non-static copy of all
221 the exported symbols.
225 C_REVEALS_MODULE (alt includes our):
228 altprog.c defines ALTPROG_C and then includes sim-inline.c
230 sim-inline.c defines C_INLINE_C and then includes sim-inline.h
232 In sim-inline.h the expression `` defined (SIM_INLINE) && !
233 defined (OURPROG_C) && REVEAL_MODULE_P (OURPROG_INLINE) '' is
234 true so it defines *_OURPROG as static and EXTERN_OURPROG_P as
237 In sim-inline.c the expression ``C_REVEALS_MODULE_P
238 (OURPROG_INLINE)'' is true so it includes ourprog.c.
240 Consequently, all the code in ourprog.c is visible and static in
245 C_REVEALS_MODULE (our includes our):
248 ourprog.c defines OURPROG_C and then includes sim-inline.c
250 sim-inline.c defines C_INLINE_C and then includes sim-inline.h
252 In sim-inline.h the term `` ! defined (OURPROG_C) '' is FALSE
253 so it defines *_OURPROG as non-static and EXTERN_OURPROG_P as
256 Consequently, ourprog.o will contain a non-static copy of all
257 the exported symbols.
263 This is not for the faint hearted. I've seen GCC get up to 500mb
264 trying to compile what this can create. */
266 #define H_REVEALS_MODULE 1
267 #define C_REVEALS_MODULE 2
268 #define INLINE_GLOBALS 4
269 #define INLINE_LOCALS 8
271 #define REGPARM_MODULE 32
273 #define ALL_H_INLINE (H_REVEALS_MODULE | INLINE_GLOBALS | INLINE_LOCALS)
274 #define ALL_C_INLINE (C_REVEALS_MODULE | INLINE_GLOBALS | INLINE_LOCALS)
277 /* Default macro to simplify control several of key the inlines */
279 #ifndef DEFAULT_INLINE
280 #define DEFAULT_INLINE INLINE_LOCALS
283 #define REVEAL_MODULE_P(X) (X & (H_REVEALS_MODULE | C_REVEALS_MODULE))
284 #define H_REVEALS_MODULE_P(X) ((X & H_REVEALS_MODULE))
285 #define C_REVEALS_MODULE_P(X) ((X & C_REVEALS_MODULE))
295 /* Your compilers inline prefix */
298 #if defined (__GNUC__) && defined (__OPTIMIZE__)
299 #define INLINE __inline__
301 #define INLINE /*inline*/
305 /* ??? Temporary, pending decision to always use extern inline and do a vast
306 cleanup of inline support. */
308 #if defined (__GNUC__)
309 #define INLINE2 __inline__
311 #define INLINE2 /*inline*/
316 /* Your compiler's static inline prefix */
318 #ifndef STATIC_INLINE
319 #define STATIC_INLINE static INLINE
323 /* Your compiler's extern inline prefix */
325 #ifndef EXTERN_INLINE
326 #define EXTERN_INLINE extern INLINE2
330 /* Your compiler's no-return reserved word */
338 /* Your compilers's unused reserved word */
340 #if !defined (UNUSED)
341 #if (!defined (__GNUC__) \
343 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7))
346 #define UNUSED __attribute__((__unused__))
353 /* Your compilers nonstandard function call mechanism prefix */
356 #if defined (__GNUC__) && (defined (__i386__) || defined (__i486__) || defined (__i586__) || defined (__i686__))
357 #if (WITH_REGPARM && WITH_STDCALL)
358 #define REGPARM __attribute__((__regparm__(WITH_REGPARM),__stdcall__))
360 #if (WITH_REGPARM && !WITH_STDCALL)
361 #define REGPARM __attribute__((__regparm__(WITH_REGPARM)))
363 #if (!WITH_REGPARM && WITH_STDCALL)
364 #define REGPARM __attribute__((__stdcall__))
378 sim-bits and sim-endian are treated differently from the rest
379 of the modules below. Their default value is ALL_H_INLINE.
380 The rest are ALL_C_INLINE. Don't blink, you'll miss it!
386 #if !defined (SIM_BITS_INLINE) && (DEFAULT_INLINE)
387 # define SIM_BITS_INLINE (ALL_H_INLINE)
390 #if (SIM_BITS_INLINE & REGPARM_MODULE)
391 # define REGPARM_SIM_BITS REGPARM
393 # define REGPARM_SIM_BITS
396 #if ((H_REVEALS_MODULE_P (SIM_BITS_INLINE) || defined (SIM_INLINE_C)) \
397 && !defined (SIM_BITS_C) \
398 && (REVEAL_MODULE_P (SIM_BITS_INLINE)))
399 # if (SIM_BITS_INLINE & INLINE_GLOBALS)
400 # define INLINE_SIM_BITS(TYPE) static INLINE TYPE UNUSED
401 # define EXTERN_SIM_BITS_P 0
403 # define INLINE_SIM_BITS(TYPE) static TYPE UNUSED REGPARM_SIM_BITS
404 # define EXTERN_SIM_BITS_P 0
407 # define INLINE_SIM_BITS(TYPE) TYPE REGPARM_SIM_BITS
408 # define EXTERN_SIM_BITS_P 1
411 #if (SIM_BITS_INLINE & INLINE_LOCALS)
412 # define STATIC_INLINE_SIM_BITS(TYPE) static INLINE TYPE
414 # define STATIC_INLINE_SIM_BITS(TYPE) static TYPE REGPARM_SIM_BITS
417 #define STATIC_SIM_BITS(TYPE) static TYPE
423 #if !defined (SIM_CORE_INLINE) && (DEFAULT_INLINE)
424 # define SIM_CORE_INLINE ALL_C_INLINE
427 #if (SIM_CORE_INLINE & REGPARM_MODULE)
428 # define REGPARM_SIM_CORE REGPARM
430 # define REGPARM_SIM_CORE
433 #if ((H_REVEALS_MODULE_P (SIM_CORE_INLINE) || defined (SIM_INLINE_C)) \
434 && !defined (SIM_CORE_C) \
435 && (REVEAL_MODULE_P (SIM_CORE_INLINE)))
436 # if (SIM_CORE_INLINE & INLINE_GLOBALS)
437 # define INLINE_SIM_CORE(TYPE) static INLINE TYPE UNUSED
438 # define EXTERN_SIM_CORE_P 0
440 # define INLINE_SIM_CORE(TYPE) static TYPE UNUSED REGPARM_SIM_CORE
441 # define EXTERN_SIM_CORE_P 0
444 # define INLINE_SIM_CORE(TYPE) TYPE REGPARM_SIM_CORE
445 # define EXTERN_SIM_CORE_P 1
448 #if (SIM_CORE_INLINE & INLINE_LOCALS)
449 # define STATIC_INLINE_SIM_CORE(TYPE) static INLINE TYPE
451 # define STATIC_INLINE_SIM_CORE(TYPE) static TYPE REGPARM_SIM_CORE
454 #define STATIC_SIM_CORE(TYPE) static TYPE
460 #if !defined (SIM_ENDIAN_INLINE) && (DEFAULT_INLINE)
461 # define SIM_ENDIAN_INLINE ALL_H_INLINE
464 #if (SIM_ENDIAN_INLINE & REGPARM_MODULE)
465 # define REGPARM_SIM_ENDIAN REGPARM
467 # define REGPARM_SIM_ENDIAN
470 #if ((H_REVEALS_MODULE_P (SIM_ENDIAN_INLINE) || defined (SIM_INLINE_C)) \
471 && !defined (SIM_ENDIAN_C) \
472 && (REVEAL_MODULE_P (SIM_ENDIAN_INLINE)))
473 # if (SIM_ENDIAN_INLINE & INLINE_GLOBALS)
474 # define INLINE_SIM_ENDIAN(TYPE) static INLINE TYPE UNUSED
475 # define EXTERN_SIM_ENDIAN_P 0
477 # define INLINE_SIM_ENDIAN(TYPE) static TYPE UNUSED REGPARM_SIM_ENDIAN
478 # define EXTERN_SIM_ENDIAN_P 0
481 # define INLINE_SIM_ENDIAN(TYPE) TYPE REGPARM_SIM_ENDIAN
482 # define EXTERN_SIM_ENDIAN_P 1
485 #if (SIM_ENDIAN_INLINE & INLINE_LOCALS)
486 # define STATIC_INLINE_SIM_ENDIAN(TYPE) static INLINE TYPE
488 # define STATIC_INLINE_SIM_ENDIAN(TYPE) static TYPE REGPARM_SIM_ENDIAN
491 #define STATIC_SIM_ENDIAN(TYPE) static TYPE
497 #if !defined (SIM_EVENTS_INLINE) && (DEFAULT_INLINE)
498 # define SIM_EVENTS_INLINE ALL_C_INLINE
501 #if (SIM_EVENTS_INLINE & REGPARM_MODULE)
502 # define REGPARM_SIM_EVENTS REGPARM
504 # define REGPARM_SIM_EVENTS
507 #if ((H_REVEALS_MODULE_P (SIM_EVENTS_INLINE) || defined (SIM_INLINE_C)) \
508 && !defined (SIM_EVENTS_C) \
509 && (REVEAL_MODULE_P (SIM_EVENTS_INLINE)))
510 # if (SIM_EVENTS_INLINE & INLINE_GLOBALS)
511 # define INLINE_SIM_EVENTS(TYPE) static INLINE TYPE UNUSED
512 # define EXTERN_SIM_EVENTS_P 0
514 # define INLINE_SIM_EVENTS(TYPE) static TYPE UNUSED REGPARM_SIM_EVENTS
515 # define EXTERN_SIM_EVENTS_P 0
518 # define INLINE_SIM_EVENTS(TYPE) TYPE REGPARM_SIM_EVENTS
519 # define EXTERN_SIM_EVENTS_P 1
522 #if (SIM_EVENTS_INLINE & INLINE_LOCALS)
523 # define STATIC_INLINE_SIM_EVENTS(TYPE) static INLINE TYPE
525 # define STATIC_INLINE_SIM_EVENTS(TYPE) static TYPE REGPARM_SIM_EVENTS
528 #define STATIC_SIM_EVENTS(TYPE) static TYPE
534 #if !defined (SIM_FPU_INLINE) && (DEFAULT_INLINE)
535 # define SIM_FPU_INLINE ALL_C_INLINE
538 #if (SIM_FPU_INLINE & REGPARM_MODULE)
539 # define REGPARM_SIM_FPU REGPARM
541 # define REGPARM_SIM_FPU
544 #if ((H_REVEALS_MODULE_P (SIM_FPU_INLINE) || defined (SIM_INLINE_C)) \
545 && !defined (SIM_FPU_C) \
546 && (REVEAL_MODULE_P (SIM_FPU_INLINE)))
547 # if (SIM_FPU_INLINE & INLINE_GLOBALS)
548 # define INLINE_SIM_FPU(TYPE) static INLINE TYPE UNUSED
549 # define EXTERN_SIM_FPU_P 0
551 # define INLINE_SIM_FPU(TYPE) static TYPE UNUSED REGPARM_SIM_FPU
552 # define EXTERN_SIM_FPU_P 0
555 # define INLINE_SIM_FPU(TYPE) TYPE REGPARM_SIM_FPU
556 # define EXTERN_SIM_FPU_P 1
559 #if (SIM_FPU_INLINE & INLINE_LOCALS)
560 # define STATIC_INLINE_SIM_FPU(TYPE) static INLINE TYPE
562 # define STATIC_INLINE_SIM_FPU(TYPE) static TYPE REGPARM_SIM_FPU
565 #define STATIC_SIM_FPU(TYPE) static TYPE
571 #if (SIM_TYPES_INLINE & REGPARM_MODULE)
572 # define REGPARM_SIM_TYPES REGPARM
574 # define REGPARM_SIM_TYPES
577 #if ((H_REVEALS_MODULE_P (SIM_TYPES_INLINE) || defined (SIM_INLINE_C)) \
578 && !defined (SIM_TYPES_C) \
579 && (REVEAL_MODULE_P (SIM_TYPES_INLINE)))
580 # if (SIM_TYPES_INLINE & INLINE_GLOBALS)
581 # define INLINE_SIM_TYPES(TYPE) static INLINE TYPE UNUSED
582 # define EXTERN_SIM_TYPES_P 0
584 # define INLINE_SIM_TYPES(TYPE) static TYPE UNUSED REGPARM_SIM_TYPES
585 # define EXTERN_SIM_TYPES_P 0
588 # define INLINE_SIM_TYPES(TYPE) TYPE REGPARM_SIM_TYPES
589 # define EXTERN_SIM_TYPES_P 1
592 #if (SIM_TYPES_INLINE & INLINE_LOCALS)
593 # define STATIC_INLINE_SIM_TYPES(TYPE) static INLINE TYPE
595 # define STATIC_INLINE_SIM_TYPES(TYPE) static TYPE REGPARM_SIM_TYPES
598 #define STATIC_SIM_TYPES(TYPE) static TYPE
604 #if !defined (SIM_MAIN_INLINE) && (DEFAULT_INLINE)
605 # define SIM_MAIN_INLINE (ALL_C_INLINE)
608 #if (SIM_MAIN_INLINE & REGPARM_MODULE)
609 # define REGPARM_SIM_MAIN REGPARM
611 # define REGPARM_SIM_MAIN
614 #if ((H_REVEALS_MODULE_P (SIM_MAIN_INLINE) || defined (SIM_INLINE_C)) \
615 && !defined (SIM_MAIN_C) \
616 && (REVEAL_MODULE_P (SIM_MAIN_INLINE)))
617 # if (SIM_MAIN_INLINE & INLINE_GLOBALS)
618 # define INLINE_SIM_MAIN(TYPE) static INLINE TYPE UNUSED
619 # define EXTERN_SIM_MAIN_P 0
621 # define INLINE_SIM_MAIN(TYPE) static TYPE UNUSED REGPARM_SIM_MAIN
622 # define EXTERN_SIM_MAIN_P 0
625 # define INLINE_SIM_MAIN(TYPE) TYPE REGPARM_SIM_MAIN
626 # define EXTERN_SIM_MAIN_P 1
629 #if (SIM_MAIN_INLINE & INLINE_LOCALS)
630 # define STATIC_INLINE_SIM_MAIN(TYPE) static INLINE TYPE
632 # define STATIC_INLINE_SIM_MAIN(TYPE) static TYPE REGPARM_SIM_MAIN
635 #define STATIC_SIM_MAIN(TYPE) static TYPE
639 #if (ENGINE_INLINE & REGPARM_MODULE)
640 # define REGPARM_ENGINE REGPARM
642 # define REGPARM_ENGINE
645 #if ((H_REVEALS_MODULE_P (ENGINE_INLINE) || defined (SIM_INLINE_C)) \
646 && !defined (ENGINE_C) \
647 && (REVEAL_MODULE_P (ENGINE_INLINE)))
648 # if (ENGINE_INLINE & INLINE_GLOBALS)
649 # define INLINE_ENGINE(TYPE) static INLINE TYPE UNUSED
650 # define EXTERN_ENGINE_P 0
652 # define INLINE_ENGINE(TYPE) static TYPE UNUSED REGPARM_ENGINE
653 # define EXTERN_ENGINE_P 0
656 # define INLINE_ENGINE(TYPE) TYPE REGPARM_ENGINE
657 # define EXTERN_ENGINE_P 1
660 #if (ENGINE_INLINE & INLINE_LOCALS)
661 # define STATIC_INLINE_ENGINE(TYPE) static INLINE TYPE
663 # define STATIC_INLINE_ENGINE(TYPE) static TYPE REGPARM_ENGINE
666 #define STATIC_ENGINE(TYPE) static TYPE
672 #if (ICACHE_INLINE & REGPARM_MODULE)
673 # define REGPARM_ICACHE REGPARM
675 # define REGPARM_ICACHE
678 #if ((H_REVEALS_MODULE_P (ICACHE_INLINE) || defined (SIM_INLINE_C)) \
679 && !defined (ICACHE_C) \
680 && (REVEAL_MODULE_P (ICACHE_INLINE)))
681 # if (ICACHE_INLINE & INLINE_GLOBALS)
682 # define INLINE_ICACHE(TYPE) static INLINE TYPE UNUSED
683 # define EXTERN_ICACHE_P 0
685 # define INLINE_ICACHE(TYPE) static TYPE UNUSED REGPARM_ICACHE
686 # define EXTERN_ICACHE_P 0
689 # define INLINE_ICACHE(TYPE) TYPE REGPARM_ICACHE
690 # define EXTERN_ICACHE_P 1
693 #if (ICACHE_INLINE & INLINE_LOCALS)
694 # define STATIC_INLINE_ICACHE(TYPE) static INLINE TYPE
696 # define STATIC_INLINE_ICACHE(TYPE) static TYPE REGPARM_ICACHE
699 #define STATIC_ICACHE(TYPE) static TYPE
705 #if (IDECODE_INLINE & REGPARM_MODULE)
706 # define REGPARM_IDECODE REGPARM
708 # define REGPARM_IDECODE
711 #if ((H_REVEALS_MODULE_P (IDECODE_INLINE) || defined (SIM_INLINE_C)) \
712 && !defined (IDECODE_C) \
713 && (REVEAL_MODULE_P (IDECODE_INLINE)))
714 # if (IDECODE_INLINE & INLINE_GLOBALS)
715 # define INLINE_IDECODE(TYPE) static INLINE TYPE UNUSED
716 # define EXTERN_IDECODE_P 0
718 # define INLINE_IDECODE(TYPE) static TYPE UNUSED REGPARM_IDECODE
719 # define EXTERN_IDECODE_P 0
722 # define INLINE_IDECODE(TYPE) TYPE REGPARM_IDECODE
723 # define EXTERN_IDECODE_P 1
726 #if (IDECODE_INLINE & INLINE_LOCALS)
727 # define STATIC_INLINE_IDECODE(TYPE) static INLINE TYPE
729 # define STATIC_INLINE_IDECODE(TYPE) static TYPE REGPARM_IDECODE
732 #define STATIC_IDECODE(TYPE) static TYPE
738 #if (SEMANTICS_INLINE & REGPARM_MODULE)
739 # define REGPARM_SEMANTICS REGPARM
741 # define REGPARM_SEMANTICS
744 #if ((H_REVEALS_MODULE_P (SEMANTICS_INLINE) || defined (SIM_INLINE_C)) \
745 && !defined (SEMANTICS_C) \
746 && (REVEAL_MODULE_P (SEMANTICS_INLINE)))
747 # if (SEMANTICS_INLINE & INLINE_GLOBALS)
748 # define INLINE_SEMANTICS(TYPE) static INLINE TYPE UNUSED
749 # define EXTERN_SEMANTICS_P 0
751 # define INLINE_SEMANTICS(TYPE) static TYPE UNUSED REGPARM_SEMANTICS
752 # define EXTERN_SEMANTICS_P 0
755 # define INLINE_SEMANTICS(TYPE) TYPE REGPARM_SEMANTICS
756 # define EXTERN_SEMANTICS_P 1
759 #if EXTERN_SEMANTICS_P
760 # define EXTERN_SEMANTICS(TYPE) TYPE REGPARM_SEMANTICS
762 # define EXTERN_SEMANTICS(TYPE) static TYPE UNUSED REGPARM_SEMANTICS
765 #if (SEMANTICS_INLINE & INLINE_LOCALS)
766 # define STATIC_INLINE_SEMANTICS(TYPE) static INLINE TYPE
768 # define STATIC_INLINE_SEMANTICS(TYPE) static TYPE REGPARM_SEMANTICS
771 #define STATIC_SEMANTICS(TYPE) static TYPE
777 #if !defined (SUPPORT_INLINE) && (DEFAULT_INLINE)
778 # define SUPPORT_INLINE ALL_C_INLINE
781 #if (SUPPORT_INLINE & REGPARM_MODULE)
782 # define REGPARM_SUPPORT REGPARM
784 # define REGPARM_SUPPORT
787 #if ((H_REVEALS_MODULE_P (SUPPORT_INLINE) || defined (SIM_INLINE_C)) \
788 && !defined (SUPPORT_C) \
789 && (REVEAL_MODULE_P (SUPPORT_INLINE)))
790 # if (SUPPORT_INLINE & INLINE_GLOBALS)
791 # define INLINE_SUPPORT(TYPE) static INLINE TYPE UNUSED
792 # define EXTERN_SUPPORT_P 0
794 # define INLINE_SUPPORT(TYPE) static TYPE UNUSED REGPARM_SUPPORT
795 # define EXTERN_SUPPORT_P 0
798 # define INLINE_SUPPORT(TYPE) TYPE REGPARM_SUPPORT
799 # define EXTERN_SUPPORT_P 1
802 #if (SUPPORT_INLINE & INLINE_LOCALS)
803 # define STATIC_INLINE_SUPPORT(TYPE) static INLINE TYPE
805 # define STATIC_INLINE_SUPPORT(TYPE) static TYPE REGPARM_SUPPORT
808 #define STATIC_SUPPORT(TYPE) static TYPE