Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4818 | Serge | 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__) && !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: |
||
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 |