/* internal.h | |
Internal definitions used by Expat. This is not needed to compile | |
client code. | |
The following calling convention macros are defined for frequently | |
called functions: | |
FASTCALL - Used for those internal functions that have a simple | |
body and a low number of arguments and local variables. | |
PTRCALL - Used for functions called though function pointers. | |
PTRFASTCALL - Like PTRCALL, but for low number of arguments. | |
inline - Used for selected internal functions for which inlining | |
may improve performance on some platforms. | |
Note: Use of these macros is based on judgement, not hard rules, | |
and therefore subject to change. | |
*/ | |
#if defined(__GNUC__) && defined(__i386__) | |
/* We'll use this version by default only where we know it helps. | |
regparm() generates warnings on Solaris boxes. See SF bug #692878. | |
Instability reported with egcs on a RedHat Linux 7.3. | |
Let's comment out: | |
#define FASTCALL __attribute__((stdcall, regparm(3))) | |
and let's try this: | |
*/ | |
#define FASTCALL __attribute__((regparm(3))) | |
#define PTRFASTCALL __attribute__((regparm(3))) | |
#endif | |
/* Using __fastcall seems to have an unexpected negative effect under | |
MS VC++, especially for function pointers, so we won't use it for | |
now on that platform. It may be reconsidered for a future release | |
if it can be made more effective. | |
Likely reason: __fastcall on Windows is like stdcall, therefore | |
the compiler cannot perform stack optimizations for call clusters. | |
*/ | |
/* Make sure all of these are defined if they aren't already. */ | |
#ifndef FASTCALL | |
#define FASTCALL | |
#endif | |
#ifndef PTRCALL | |
#define PTRCALL | |
#endif | |
#ifndef PTRFASTCALL | |
#define PTRFASTCALL | |
#endif | |
#ifndef XML_MIN_SIZE | |
#if !defined(__cplusplus) && !defined(inline) | |
#ifdef __GNUC__ | |
#define inline __inline | |
#endif /* __GNUC__ */ | |
#endif | |
#endif /* XML_MIN_SIZE */ | |
#ifdef __cplusplus | |
#define inline inline | |
#else | |
#ifndef inline | |
#define inline | |
#endif | |
#endif |