The Build Engine
platform.h
1 #ifndef _INCLUDE_PLATFORM_H_
2 #define _INCLUDE_PLATFORM_H_
3 
4 #if (defined PLATFORM_WIN32)
5 #include "win32_compat.h"
6 #elif (defined PLATFORM_MACOSX)
7 #include "unix_compat.h"
8 #include <machine/endian.h>
9 #elif (defined PLATFORM_FREEBSD)
10 #include "unix_compat.h"
11 #include <sys/endian.h>
12 #elif (defined PLATFORM_UNIX)
13 #include "unix_compat.h"
14 #if !defined(__SUNPRO_C)
15 #include <endian.h>
16 #endif
17 #elif (defined PLATFORM_DOS)
18 #include "doscmpat.h"
19 #else
20 #error Define your platform!
21 #endif
22 
23 #ifdef PLATFORM_MACOSX
24  /* may be an x86 Mac, so turn off PowerPC ASM and Altivec if needed... */
25  #if __POWERPC__
26  #define HAVE_POWERPC 1
27  #endif
28 #endif
29 
30 #ifdef PLATFORM_LINUXPPC
31 #define HAVE_POWERPC 1
32 #endif
33 
34 #if (!defined __EXPORT__)
35 #define __EXPORT__
36 #endif
37 
38 #if ((defined PLATFORM_SUPPORTS_SDL) && (!defined PLATFORM_TIMER_HZ))
39 #define PLATFORM_TIMER_HZ 100
40 #endif
41 
42 #if (!defined PLATFORM_TIMER_HZ)
43 #error You need to define PLATFORM_TIMER_HZ for your platform.
44 #endif
45 
46 #if (defined __WATCOMC__)
47 #define snprintf _snprintf
48 #endif
49 
50 #if (defined __SUNPRO_C)
51 #define __inline inline
52 #endif
53 
54 static __inline unsigned short _swap16(unsigned short D)
55 {
56 #if HAVE_POWERPC
57  register unsigned short returnValue;
58  __asm__ volatile("lhbrx %0,0,%1"
59  : "=r" (returnValue)
60  : "r" (&D)
61  );
62  return returnValue;
63 #else
64  return((D<<8)|(D>>8));
65 #endif
66 }
67 
68 static __inline unsigned int _swap32(unsigned int D)
69 {
70 #if HAVE_POWERPC
71  register unsigned int returnValue;
72  __asm__ volatile("lwbrx %0,0,%1"
73  : "=r" (returnValue)
74  : "r" (&D)
75  );
76  return returnValue;
77 #else
78  return((D<<24)|((D<<8)&0x00FF0000)|((D>>8)&0x0000FF00)|(D>>24));
79 #endif
80 }
81 
82 #if HAVE_POWERPC
83 #define PLATFORM_BIGENDIAN 1
84 #define BUILDSWAP_INTEL16(x) _swap16(x)
85 #define BUILDSWAP_INTEL32(x) _swap32(x)
86 #else
87 #if __BYTE_ORDER == __LITTLE_ENDIAN
88 #define PLATFORM_LITTLEENDIAN 1
89 #define BUILDSWAP_INTEL16(x) (x)
90 #define BUILDSWAP_INTEL32(x) (x)
91 #else
92 #define PLATFORM_BIGENDIAN 1
93 #define BUILDSWAP_INTEL16(x) _swap16(x)
94 #define BUILDSWAP_INTEL32(x) _swap32(x)
95 #endif
96 #endif
97 
98 extern int has_altivec; /* PowerPC-specific. */
99 
100 #endif /* !defined _INCLUDE_PLATFORM_H_ */
101 
102 /* end of platform.h ... */
103 
104