| 1 | /* internal.h
|
|---|
| 2 |
|
|---|
| 3 | Internal definitions used by Expat. This is not needed to compile
|
|---|
| 4 | client code.
|
|---|
| 5 |
|
|---|
| 6 | The following calling convention macros are defined for frequently
|
|---|
| 7 | called functions:
|
|---|
| 8 |
|
|---|
| 9 | FASTCALL - Used for those internal functions that have a simple
|
|---|
| 10 | body and a low number of arguments and local variables.
|
|---|
| 11 |
|
|---|
| 12 | PTRCALL - Used for functions called though function pointers.
|
|---|
| 13 |
|
|---|
| 14 | PTRFASTCALL - Like PTRCALL, but for low number of arguments.
|
|---|
| 15 |
|
|---|
| 16 | inline - Used for selected internal functions for which inlining
|
|---|
| 17 | may improve performance on some platforms.
|
|---|
| 18 |
|
|---|
| 19 | Note: Use of these macros is based on judgement, not hard rules,
|
|---|
| 20 | and therefore subject to change.
|
|---|
| 21 | */
|
|---|
| 22 |
|
|---|
| 23 | #if defined(__GNUC__) && defined(__i386__)
|
|---|
| 24 | /* We'll use this version by default only where we know it helps.
|
|---|
| 25 |
|
|---|
| 26 | regparm() generates warnings on Solaris boxes. See SF bug #692878.
|
|---|
| 27 |
|
|---|
| 28 | Instability reported with egcs on a RedHat Linux 7.3.
|
|---|
| 29 | Let's comment out:
|
|---|
| 30 | #define FASTCALL __attribute__((stdcall, regparm(3)))
|
|---|
| 31 | and let's try this:
|
|---|
| 32 | */
|
|---|
| 33 | #define FASTCALL __attribute__((regparm(3)))
|
|---|
| 34 | #define PTRFASTCALL __attribute__((regparm(3)))
|
|---|
| 35 | #endif
|
|---|
| 36 |
|
|---|
| 37 | /* Using __fastcall seems to have an unexpected negative effect under
|
|---|
| 38 | MS VC++, especially for function pointers, so we won't use it for
|
|---|
| 39 | now on that platform. It may be reconsidered for a future release
|
|---|
| 40 | if it can be made more effective.
|
|---|
| 41 | Likely reason: __fastcall on Windows is like stdcall, therefore
|
|---|
| 42 | the compiler cannot perform stack optimizations for call clusters.
|
|---|
| 43 | */
|
|---|
| 44 |
|
|---|
| 45 | /* Make sure all of these are defined if they aren't already. */
|
|---|
| 46 |
|
|---|
| 47 | #ifndef FASTCALL
|
|---|
| 48 | #define FASTCALL
|
|---|
| 49 | #endif
|
|---|
| 50 |
|
|---|
| 51 | #ifndef PTRCALL
|
|---|
| 52 | #define PTRCALL
|
|---|
| 53 | #endif
|
|---|
| 54 |
|
|---|
| 55 | #ifndef PTRFASTCALL
|
|---|
| 56 | #define PTRFASTCALL
|
|---|
| 57 | #endif
|
|---|
| 58 |
|
|---|
| 59 | #ifndef XML_MIN_SIZE
|
|---|
| 60 | #if !defined(__cplusplus) && !defined(inline)
|
|---|
| 61 | #ifdef __GNUC__
|
|---|
| 62 | #define inline __inline
|
|---|
| 63 | #endif /* __GNUC__ */
|
|---|
| 64 | #endif
|
|---|
| 65 | #endif /* XML_MIN_SIZE */
|
|---|
| 66 |
|
|---|
| 67 | #ifdef __cplusplus
|
|---|
| 68 | #define inline inline
|
|---|
| 69 | #else
|
|---|
| 70 | #ifndef inline
|
|---|
| 71 | #define inline
|
|---|
| 72 | #endif
|
|---|
| 73 | #endif
|
|---|