Home | History | Annotate | Download | only in expat
      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