15bb6a25fSPoul-Henning Kamp /* internal.h 25bb6a25fSPoul-Henning Kamp 35bb6a25fSPoul-Henning Kamp Internal definitions used by Expat. This is not needed to compile 45bb6a25fSPoul-Henning Kamp client code. 55bb6a25fSPoul-Henning Kamp 6220ed979SColeman Kane The following calling convention macros are defined for frequently 7220ed979SColeman Kane called functions: 85bb6a25fSPoul-Henning Kamp 9220ed979SColeman Kane FASTCALL - Used for those internal functions that have a simple 10220ed979SColeman Kane body and a low number of arguments and local variables. 115bb6a25fSPoul-Henning Kamp 12220ed979SColeman Kane PTRCALL - Used for functions called though function pointers. 13220ed979SColeman Kane 14220ed979SColeman Kane PTRFASTCALL - Like PTRCALL, but for low number of arguments. 15220ed979SColeman Kane 16220ed979SColeman Kane inline - Used for selected internal functions for which inlining 175bb6a25fSPoul-Henning Kamp may improve performance on some platforms. 18220ed979SColeman Kane 19220ed979SColeman Kane Note: Use of these macros is based on judgement, not hard rules, 20220ed979SColeman Kane and therefore subject to change. 215bb6a25fSPoul-Henning Kamp */ 225bb6a25fSPoul-Henning Kamp 23220ed979SColeman Kane #if defined(__GNUC__) && defined(__i386__) && !defined(__MINGW32__) 24220ed979SColeman Kane /* We'll use this version by default only where we know it helps. 25220ed979SColeman Kane 26220ed979SColeman Kane regparm() generates warnings on Solaris boxes. See SF bug #692878. 27220ed979SColeman Kane 28220ed979SColeman Kane Instability reported with egcs on a RedHat Linux 7.3. 29220ed979SColeman Kane Let's comment out: 30220ed979SColeman Kane #define FASTCALL __attribute__((stdcall, regparm(3))) 31220ed979SColeman Kane and let's try this: 325bb6a25fSPoul-Henning Kamp */ 33220ed979SColeman Kane #define FASTCALL __attribute__((regparm(3))) 34220ed979SColeman Kane #define PTRFASTCALL __attribute__((regparm(3))) 355bb6a25fSPoul-Henning Kamp #endif 365bb6a25fSPoul-Henning Kamp 37220ed979SColeman Kane /* Using __fastcall seems to have an unexpected negative effect under 38220ed979SColeman Kane MS VC++, especially for function pointers, so we won't use it for 39220ed979SColeman Kane now on that platform. It may be reconsidered for a future release 40220ed979SColeman Kane if it can be made more effective. 41220ed979SColeman Kane Likely reason: __fastcall on Windows is like stdcall, therefore 42220ed979SColeman Kane the compiler cannot perform stack optimizations for call clusters. 43220ed979SColeman Kane */ 44220ed979SColeman Kane 45220ed979SColeman Kane /* Make sure all of these are defined if they aren't already. */ 46220ed979SColeman Kane 475bb6a25fSPoul-Henning Kamp #ifndef FASTCALL 485bb6a25fSPoul-Henning Kamp #define FASTCALL 495bb6a25fSPoul-Henning Kamp #endif 505bb6a25fSPoul-Henning Kamp 51220ed979SColeman Kane #ifndef PTRCALL 52220ed979SColeman Kane #define PTRCALL 53220ed979SColeman Kane #endif 54220ed979SColeman Kane 55220ed979SColeman Kane #ifndef PTRFASTCALL 56220ed979SColeman Kane #define PTRFASTCALL 57220ed979SColeman Kane #endif 58220ed979SColeman Kane 595bb6a25fSPoul-Henning Kamp #ifndef XML_MIN_SIZE 605bb6a25fSPoul-Henning Kamp #if !defined(__cplusplus) && !defined(inline) 615bb6a25fSPoul-Henning Kamp #ifdef __GNUC__ 625bb6a25fSPoul-Henning Kamp #define inline __inline 635bb6a25fSPoul-Henning Kamp #endif /* __GNUC__ */ 645bb6a25fSPoul-Henning Kamp #endif 655bb6a25fSPoul-Henning Kamp #endif /* XML_MIN_SIZE */ 665bb6a25fSPoul-Henning Kamp 675bb6a25fSPoul-Henning Kamp #ifdef __cplusplus 685bb6a25fSPoul-Henning Kamp #define inline inline 695bb6a25fSPoul-Henning Kamp #else 705bb6a25fSPoul-Henning Kamp #ifndef inline 715bb6a25fSPoul-Henning Kamp #define inline 725bb6a25fSPoul-Henning Kamp #endif 735bb6a25fSPoul-Henning Kamp #endif 74*be8aff81SXin LI 75*be8aff81SXin LI #ifndef UNUSED_P 76*be8aff81SXin LI # ifdef __GNUC__ 77*be8aff81SXin LI # define UNUSED_P(p) UNUSED_ ## p __attribute__((__unused__)) 78*be8aff81SXin LI # else 79*be8aff81SXin LI # define UNUSED_P(p) UNUSED_ ## p 80*be8aff81SXin LI # endif 81*be8aff81SXin LI #endif 82*be8aff81SXin LI 83*be8aff81SXin LI 84*be8aff81SXin LI #ifdef __cplusplus 85*be8aff81SXin LI extern "C" { 86*be8aff81SXin LI #endif 87*be8aff81SXin LI 88*be8aff81SXin LI 89*be8aff81SXin LI void 90*be8aff81SXin LI align_limit_to_full_utf8_characters(const char * from, const char ** fromLimRef); 91*be8aff81SXin LI 92*be8aff81SXin LI 93*be8aff81SXin LI #ifdef __cplusplus 94*be8aff81SXin LI } 95*be8aff81SXin LI #endif 96