2002-09-04 21:56:29 -04:00
|
|
|
/* internal.h
|
|
|
|
|
|
|
|
Internal definitions used by Expat. This is not needed to compile
|
|
|
|
client code.
|
|
|
|
|
2002-09-19 23:42:43 -04:00
|
|
|
The following calling convention macros are defined for frequently
|
|
|
|
called functions:
|
2002-09-04 21:56:29 -04:00
|
|
|
|
2002-09-19 23:42:43 -04:00
|
|
|
FASTCALL - Used for those internal functions that have a simple
|
|
|
|
body and a low number of arguments and local variables.
|
2002-09-04 21:56:29 -04:00
|
|
|
|
2002-09-19 23:42:43 -04:00
|
|
|
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.
|
2002-09-04 21:56:29 -04:00
|
|
|
*/
|
|
|
|
|
2003-03-14 12:25:12 -05:00
|
|
|
#if defined(__GNUC__) && defined(linux)
|
|
|
|
/* We'll use this version by default only where we know it helps.
|
|
|
|
|
|
|
|
regparm() generates warnings on Solaris boxes. See SF bug #692878.
|
2003-03-12 18:02:11 -05:00
|
|
|
|
|
|
|
Instability reported with egcs on a RedHat Linux 7.3.
|
2003-03-14 12:25:12 -05:00
|
|
|
Let's comment out:
|
2002-09-19 23:42:43 -04:00
|
|
|
#define FASTCALL __attribute__((stdcall, regparm(3)))
|
|
|
|
and let's try this:
|
2002-09-06 17:49:57 -04:00
|
|
|
*/
|
2002-09-19 23:42:43 -04:00
|
|
|
#define FASTCALL __attribute__((regparm(3)))
|
|
|
|
#define PTRFASTCALL __attribute__((regparm(3)))
|
2003-03-14 12:25:12 -05:00
|
|
|
#endif
|
2002-09-19 23:42:43 -04:00
|
|
|
|
|
|
|
/* 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.
|
2002-09-06 17:29:46 -04:00
|
|
|
*/
|
2002-09-19 23:42:43 -04:00
|
|
|
|
2003-03-14 12:25:12 -05:00
|
|
|
/* Make sure all of these are defined if they aren't already. */
|
2002-09-06 17:29:46 -04:00
|
|
|
|
|
|
|
#ifndef FASTCALL
|
2002-09-04 21:56:29 -04:00
|
|
|
#define FASTCALL
|
|
|
|
#endif
|
|
|
|
|
2002-09-19 23:42:43 -04:00
|
|
|
#ifndef PTRCALL
|
|
|
|
#define PTRCALL
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef PTRFASTCALL
|
|
|
|
#define PTRFASTCALL
|
|
|
|
#endif
|
|
|
|
|
2002-09-04 21:56:29 -04:00
|
|
|
#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
|