blob: 1bf6baa54323e15e971669f33c9bce3bce437e1c [file] [log] [blame]
Martin v. Löwisfc03a942003-01-25 22:41:29 +00001/* 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__)
24/* Instability reported with egcs on a RedHat Linux 7.3.
25 Let's comment it out:
26 #define FASTCALL __attribute__((stdcall, regparm(3)))
27 and let's try this:
28*/
29#define FASTCALL __attribute__((regparm(3)))
30#define PTRCALL
31#define PTRFASTCALL __attribute__((regparm(3)))
32
33#elif defined(WIN32)
34/* Using __fastcall seems to have an unexpected negative effect under
35 MS VC++, especially for function pointers, so we won't use it for
36 now on that platform. It may be reconsidered for a future release
37 if it can be made more effective.
38 Likely reason: __fastcall on Windows is like stdcall, therefore
39 the compiler cannot perform stack optimizations for call clusters.
40*/
41#define FASTCALL
42#define PTRCALL
43#define PTRFASTCALL
44
45#endif
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