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 74 75 #ifndef UNUSED_P 76 # ifdef __GNUC__ 77 # define UNUSED_P(p) UNUSED_ ## p __attribute__((__unused__)) 78 # else 79 # define UNUSED_P(p) UNUSED_ ## p 80 # endif 81 #endif 82 83 84 #ifdef __cplusplus 85 extern "C" { 86 #endif 87 88 89 void 90 align_limit_to_full_utf8_characters(const char * from, const char ** fromLimRef); 91 92 93 #ifdef __cplusplus 94 } 95 #endif 96