Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
internal.h
Go to the documentation of this file.
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