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 #ifdef FASTCALL
24 #undef FASTCALL
25 #endif
26 
27 #if defined(__GNUC__) && defined(__i386__)
28 /* Instability reported with egcs on a RedHat Linux 7.3.
29    Let's comment it out:
30    #define FASTCALL __attribute__((stdcall, regparm(3)))
31    and let's try this:
32 */
33 #define FASTCALL __attribute__((regparm(3)))
34 #define PTRCALL
35 #define PTRFASTCALL __attribute__((regparm(3)))
36 
37 #elif defined(WIN32)
38 /* Using __fastcall seems to have an unexpected negative effect under
39    MS VC++, especially for function pointers, so we won't use it for
40    now on that platform. It may be reconsidered for a future release
41    if it can be made more effective.
42    Likely reason: __fastcall on Windows is like stdcall, therefore
43    the compiler cannot perform stack optimizations for call clusters.
44 */
45 #define FASTCALL
46 #define PTRCALL
47 #define PTRFASTCALL
48 
49 #endif
50 
51 #ifndef FASTCALL
52 #define FASTCALL
53 #endif
54 
55 #ifndef PTRCALL
56 #define PTRCALL
57 #endif
58 
59 #ifndef PTRFASTCALL
60 #define PTRFASTCALL
61 #endif
62 
63 #ifndef XML_MIN_SIZE
64 #if !defined(__cplusplus) && !defined(inline)
65 #ifdef __GNUC__
66 #define inline __inline
67 #endif /* __GNUC__ */
68 #endif
69 #endif /* XML_MIN_SIZE */
70 
71 #ifdef __cplusplus
72 #define inline inline
73 #else
74 #ifndef inline
75 #define inline
76 #endif
77 #endif
78