| /* 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__) && !defined(__MINGW32__) |
| /* 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 |