1/* internal.h 2 3 Internal definitions used by Expat. This is not needed to compile 4 client code. 5
| 1/* internal.h 2 3 Internal definitions used by Expat. This is not needed to compile 4 client code. 5
|
6 The following definitions are made:
| 6 The following calling convention macros are defined for frequently 7 called functions:
|
7
| 8
|
8 FASTCALL -- Used for most internal functions to specify that the 9 fastest possible calling convention be used.
| 9 FASTCALL - Used for those internal functions that have a simple 10 body and a low number of arguments and local variables.
|
10
| 11
|
11 inline -- Used for selected internal functions for which inlining 12 may improve performance on some platforms.
| 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.
|
13*/ 14
| 21*/ 22
|
15#if defined(__GNUC__) 16/* Last minute instability reported with egcs on a RedHat Linux 7.3 17 box; argh!
| 23#if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__) 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:
|
18*/
| 32*/
|
19/* #define FASTCALL __attribute__((stdcall, regparm(3))) */ 20#elif defined(WIN32) 21/* XXX This seems to have an unexpected negative effect on Windows so 22 we'll disable it for now on that platform. It may be reconsidered 23 for a future release if it can be made more effective. 24*/ 25/* #define FASTCALL __fastcall */
| 33#define FASTCALL __attribute__((regparm(3))) 34#define PTRFASTCALL __attribute__((regparm(3)))
|
26#endif 27
| 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
|
28#ifndef FASTCALL 29#define FASTCALL 30#endif 31
| 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
|
32#ifndef XML_MIN_SIZE 33#if !defined(__cplusplus) && !defined(inline) 34#ifdef __GNUC__ 35#define inline __inline 36#endif /* __GNUC__ */ 37#endif 38#endif /* XML_MIN_SIZE */ 39 40#ifdef __cplusplus 41#define inline inline 42#else 43#ifndef inline 44#define inline 45#endif 46#endif
| 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
|