| 
									
										
										
										
											2003-01-25 22:41:29 +00:00
										 |  |  | /* internal.h
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Internal definitions used by Expat.  This is not needed to compile | 
					
						
							|  |  |  |    client code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The following calling convention macros are defined for frequently | 
					
						
							|  |  |  |    called functions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    FASTCALL    - Used for those internal functions that have a simple | 
					
						
							|  |  |  |                  body and a low number of arguments and local variables. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    PTRCALL     - Used for functions called though function pointers. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    PTRFASTCALL - Like PTRCALL, but for low number of arguments. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    inline      - Used for selected internal functions for which inlining | 
					
						
							|  |  |  |                  may improve performance on some platforms. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Note: Use of these macros is based on judgement, not hard rules, | 
					
						
							|  |  |  |          and therefore subject to change. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-21 15:38:55 +00:00
										 |  |  | #if defined(__GNUC__) && defined(__i386__)
 | 
					
						
							|  |  |  | /* We'll use this version by default only where we know it helps.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    regparm() generates warnings on Solaris boxes.   See SF bug #692878. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Instability reported with egcs on a RedHat Linux 7.3. | 
					
						
							|  |  |  |    Let's comment out: | 
					
						
							| 
									
										
										
										
											2003-01-25 22:41:29 +00:00
										 |  |  |    #define FASTCALL __attribute__((stdcall, regparm(3)))
 | 
					
						
							|  |  |  |    and let's try this: | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | #define FASTCALL __attribute__((regparm(3)))
 | 
					
						
							|  |  |  | #define PTRFASTCALL __attribute__((regparm(3)))
 | 
					
						
							| 
									
										
										
										
											2003-10-21 15:38:55 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2003-01-25 22:41:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Using __fastcall seems to have an unexpected negative effect under
 | 
					
						
							|  |  |  |    MS VC++, especially for function pointers, so we won't use it for | 
					
						
							|  |  |  |    now on that platform. It may be reconsidered for a future release | 
					
						
							|  |  |  |    if it can be made more effective. | 
					
						
							|  |  |  |    Likely reason: __fastcall on Windows is like stdcall, therefore | 
					
						
							|  |  |  |    the compiler cannot perform stack optimizations for call clusters. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-21 15:38:55 +00:00
										 |  |  | /* Make sure all of these are defined if they aren't already. */ | 
					
						
							| 
									
										
										
										
											2003-01-25 22:41:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef FASTCALL
 | 
					
						
							|  |  |  | #define FASTCALL
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef PTRCALL
 | 
					
						
							|  |  |  | #define PTRCALL
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef PTRFASTCALL
 | 
					
						
							|  |  |  | #define PTRFASTCALL
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef XML_MIN_SIZE
 | 
					
						
							|  |  |  | #if !defined(__cplusplus) && !defined(inline)
 | 
					
						
							|  |  |  | #ifdef __GNUC__
 | 
					
						
							|  |  |  | #define inline __inline
 | 
					
						
							|  |  |  | #endif /* __GNUC__ */
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif /* XML_MIN_SIZE */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | #define inline inline
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #ifndef inline
 | 
					
						
							|  |  |  | #define inline
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 |