xref: /freebsd/contrib/expat/lib/internal.h (revision be8aff81c11e51d25e7a134298b6aa0300f4b7fc)
15bb6a25fSPoul-Henning Kamp /* internal.h
25bb6a25fSPoul-Henning Kamp 
35bb6a25fSPoul-Henning Kamp    Internal definitions used by Expat.  This is not needed to compile
45bb6a25fSPoul-Henning Kamp    client code.
55bb6a25fSPoul-Henning Kamp 
6220ed979SColeman Kane    The following calling convention macros are defined for frequently
7220ed979SColeman Kane    called functions:
85bb6a25fSPoul-Henning Kamp 
9220ed979SColeman Kane    FASTCALL    - Used for those internal functions that have a simple
10220ed979SColeman Kane                  body and a low number of arguments and local variables.
115bb6a25fSPoul-Henning Kamp 
12220ed979SColeman Kane    PTRCALL     - Used for functions called though function pointers.
13220ed979SColeman Kane 
14220ed979SColeman Kane    PTRFASTCALL - Like PTRCALL, but for low number of arguments.
15220ed979SColeman Kane 
16220ed979SColeman Kane    inline      - Used for selected internal functions for which inlining
175bb6a25fSPoul-Henning Kamp                  may improve performance on some platforms.
18220ed979SColeman Kane 
19220ed979SColeman Kane    Note: Use of these macros is based on judgement, not hard rules,
20220ed979SColeman Kane          and therefore subject to change.
215bb6a25fSPoul-Henning Kamp */
225bb6a25fSPoul-Henning Kamp 
23220ed979SColeman Kane #if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__)
24220ed979SColeman Kane /* We'll use this version by default only where we know it helps.
25220ed979SColeman Kane 
26220ed979SColeman Kane    regparm() generates warnings on Solaris boxes.   See SF bug #692878.
27220ed979SColeman Kane 
28220ed979SColeman Kane    Instability reported with egcs on a RedHat Linux 7.3.
29220ed979SColeman Kane    Let's comment out:
30220ed979SColeman Kane    #define FASTCALL __attribute__((stdcall, regparm(3)))
31220ed979SColeman Kane    and let's try this:
325bb6a25fSPoul-Henning Kamp */
33220ed979SColeman Kane #define FASTCALL __attribute__((regparm(3)))
34220ed979SColeman Kane #define PTRFASTCALL __attribute__((regparm(3)))
355bb6a25fSPoul-Henning Kamp #endif
365bb6a25fSPoul-Henning Kamp 
37220ed979SColeman Kane /* Using __fastcall seems to have an unexpected negative effect under
38220ed979SColeman Kane    MS VC++, especially for function pointers, so we won't use it for
39220ed979SColeman Kane    now on that platform. It may be reconsidered for a future release
40220ed979SColeman Kane    if it can be made more effective.
41220ed979SColeman Kane    Likely reason: __fastcall on Windows is like stdcall, therefore
42220ed979SColeman Kane    the compiler cannot perform stack optimizations for call clusters.
43220ed979SColeman Kane */
44220ed979SColeman Kane 
45220ed979SColeman Kane /* Make sure all of these are defined if they aren't already. */
46220ed979SColeman Kane 
475bb6a25fSPoul-Henning Kamp #ifndef FASTCALL
485bb6a25fSPoul-Henning Kamp #define FASTCALL
495bb6a25fSPoul-Henning Kamp #endif
505bb6a25fSPoul-Henning Kamp 
51220ed979SColeman Kane #ifndef PTRCALL
52220ed979SColeman Kane #define PTRCALL
53220ed979SColeman Kane #endif
54220ed979SColeman Kane 
55220ed979SColeman Kane #ifndef PTRFASTCALL
56220ed979SColeman Kane #define PTRFASTCALL
57220ed979SColeman Kane #endif
58220ed979SColeman Kane 
595bb6a25fSPoul-Henning Kamp #ifndef XML_MIN_SIZE
605bb6a25fSPoul-Henning Kamp #if !defined(__cplusplus) && !defined(inline)
615bb6a25fSPoul-Henning Kamp #ifdef __GNUC__
625bb6a25fSPoul-Henning Kamp #define inline __inline
635bb6a25fSPoul-Henning Kamp #endif /* __GNUC__ */
645bb6a25fSPoul-Henning Kamp #endif
655bb6a25fSPoul-Henning Kamp #endif /* XML_MIN_SIZE */
665bb6a25fSPoul-Henning Kamp 
675bb6a25fSPoul-Henning Kamp #ifdef __cplusplus
685bb6a25fSPoul-Henning Kamp #define inline inline
695bb6a25fSPoul-Henning Kamp #else
705bb6a25fSPoul-Henning Kamp #ifndef inline
715bb6a25fSPoul-Henning Kamp #define inline
725bb6a25fSPoul-Henning Kamp #endif
735bb6a25fSPoul-Henning Kamp #endif
74*be8aff81SXin LI 
75*be8aff81SXin LI #ifndef UNUSED_P
76*be8aff81SXin LI # ifdef __GNUC__
77*be8aff81SXin LI #  define UNUSED_P(p) UNUSED_ ## p __attribute__((__unused__))
78*be8aff81SXin LI # else
79*be8aff81SXin LI #  define UNUSED_P(p) UNUSED_ ## p
80*be8aff81SXin LI # endif
81*be8aff81SXin LI #endif
82*be8aff81SXin LI 
83*be8aff81SXin LI 
84*be8aff81SXin LI #ifdef __cplusplus
85*be8aff81SXin LI extern "C" {
86*be8aff81SXin LI #endif
87*be8aff81SXin LI 
88*be8aff81SXin LI 
89*be8aff81SXin LI void
90*be8aff81SXin LI align_limit_to_full_utf8_characters(const char * from, const char ** fromLimRef);
91*be8aff81SXin LI 
92*be8aff81SXin LI 
93*be8aff81SXin LI #ifdef __cplusplus
94*be8aff81SXin LI }
95*be8aff81SXin LI #endif
96