|
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 |