author  Ryan C. Gordon <icculus@icculus.org> 
Sun, 10 Jan 2010 08:21:19 +0000  
changeset 3630  efb79807afe1 
parent 3407  d3baf5ac4e37 
child 3697  f7b03b6838cb 
permissions  rwrr 
0  1 
/* 
2 
SDL  Simple DirectMedia Layer 

2859  3 
Copyright (C) 19972009 Sam Lantinga 
0  4 

5 
This library is free software; you can redistribute it and/or 

1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

6 
modify it under the terms of the GNU Lesser General Public 
0  7 
License as published by the Free Software Foundation; either 
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

8 
version 2.1 of the License, or (at your option) any later version. 
0  9 

10 
This library is distributed in the hope that it will be useful, 

11 
but WITHOUT ANY WARRANTY; without even the implied warranty of 

12 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 

1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

13 
Lesser General Public License for more details. 
0  14 

1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

15 
You should have received a copy of the GNU Lesser General Public 
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

16 
License along with this library; if not, write to the Free Software 
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset

17 
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA 
0  18 

19 
Sam Lantinga 

251
b8688cfdc232
Updated the headers with the correct email address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset

20 
slouken@libsdl.org 
0  21 
*/ 
22 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

23 
/** 
3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

24 
* \file SDL_endian.h 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

25 
* 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

26 
* Functions for reading and writing endianspecific values 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

27 
*/ 
0  28 

29 
#ifndef _SDL_endian_h 

30 
#define _SDL_endian_h 

31 

1354
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

32 
#include "SDL_stdinc.h" 
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

33 

3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

34 
/** 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

35 
* \name The two types of endianness 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

36 
*/ 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

37 
/*@{*/ 
1354
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

38 
#define SDL_LIL_ENDIAN 1234 
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

39 
#define SDL_BIG_ENDIAN 4321 
3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

40 
/*@}*/ 
0  41 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

42 
#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ 
1474
351d757c7edd
Maybe it's easier to collect the bigendian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset

43 
#if defined(__hppa__)  \ 
1475
d45aefcac017
Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents:
1474
diff
changeset

44 
defined(__m68k__)  defined(mc68000)  defined(_M_M68K)  \ 
1474
351d757c7edd
Maybe it's easier to collect the bigendian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset

45 
(defined(__MIPS__) && defined(__MISPEB__))  \ 
1475
d45aefcac017
Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents:
1474
diff
changeset

46 
defined(__ppc__)  defined(__POWERPC__)  defined(_M_PPC)  \ 
1474
351d757c7edd
Maybe it's easier to collect the bigendian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset

47 
defined(__sparc__) 
351d757c7edd
Maybe it's easier to collect the bigendian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset

48 
#define SDL_BYTEORDER SDL_BIG_ENDIAN 
351d757c7edd
Maybe it's easier to collect the bigendian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset

49 
#else 
1354
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

50 
#define SDL_BYTEORDER SDL_LIL_ENDIAN 
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

51 
#endif 
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset

52 
#endif /* !SDL_BYTEORDER */ 
0  53 

54 

55 
#include "begin_code.h" 

56 
/* Set up for C function definitions, even when using C++ */ 

57 
#ifdef __cplusplus 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

58 
/* *INDENTOFF* */ 
0  59 
extern "C" { 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

60 
/* *INDENTON* */ 
0  61 
#endif 
62 

3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

63 
/** 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

64 
* \file SDL_endian.h 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

65 
* 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

66 
* Uses inline functions for compilers that support them, and static 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

67 
* functions for those that do not. Because these functions become 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

68 
* static for compilers that do not support inline functions, this 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

69 
* header should only be included in files that actually use them. 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

70 
*/ 
1372  71 
#if defined(__GNUC__) && defined(__i386__) && \ 
1368
533567cbb576
More fixes for building on BeOS
Sam Lantinga <slouken@libsdl.org>
parents:
1354
diff
changeset

72 
!(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

73 
static __inline__ Uint16 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

74 
SDL_Swap16(Uint16 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

75 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

76 
__asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

77 
return x; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

78 
} 
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

79 
#elif defined(__GNUC__) && defined(__x86_64__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

80 
static __inline__ Uint16 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

81 
SDL_Swap16(Uint16 x) 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

82 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

83 
__asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

84 
return x; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

85 
} 
859
6b28c91bf3d2
This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents:
849
diff
changeset

86 
#elif defined(__GNUC__) && (defined(__powerpc__)  defined(__ppc__)) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

87 
static __inline__ Uint16 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

88 
SDL_Swap16(Uint16 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

89 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

90 
Uint16 result; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

91 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

92 
__asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

93 
return result; 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

94 
} 
3630
efb79807afe1
Merged r5194:5195 from branches/SDL1.2: coldfire cpu arch support.
Ryan C. Gordon <icculus@icculus.org>
parents:
3407
diff
changeset

95 
#elif defined(__GNUC__) && (defined(__M68000__)  defined(__M68020__)) && !defined(__mcoldfire__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

96 
static __inline__ Uint16 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

97 
SDL_Swap16(Uint16 x) 
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset

98 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

99 
__asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

100 
return x; 
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset

101 
} 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

102 
#else 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

103 
static __inline__ Uint16 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

104 
SDL_Swap16(Uint16 x) 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

105 
{ 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

106 
return ((x << 8)  (x >> 8)); 
0  107 
} 
108 
#endif 

848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

109 

849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

110 
#if defined(__GNUC__) && defined(__i386__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

111 
static __inline__ Uint32 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

112 
SDL_Swap32(Uint32 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

113 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

114 
__asm__("bswap %0": "=r"(x):"0"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

115 
return x; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

116 
} 
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

117 
#elif defined(__GNUC__) && defined(__x86_64__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

118 
static __inline__ Uint32 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

119 
SDL_Swap32(Uint32 x) 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

120 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

121 
__asm__("bswapl %0": "=r"(x):"0"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

122 
return x; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

123 
} 
859
6b28c91bf3d2
This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents:
849
diff
changeset

124 
#elif defined(__GNUC__) && (defined(__powerpc__)  defined(__ppc__)) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

125 
static __inline__ Uint32 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

126 
SDL_Swap32(Uint32 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

127 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

128 
Uint32 result; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

129 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

130 
__asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

131 
__asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

132 
__asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

133 
return result; 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

134 
} 
3630
efb79807afe1
Merged r5194:5195 from branches/SDL1.2: coldfire cpu arch support.
Ryan C. Gordon <icculus@icculus.org>
parents:
3407
diff
changeset

135 
#elif defined(__GNUC__) && (defined(__M68000__)  defined(__M68020__)) && !defined(__mcoldfire__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

136 
static __inline__ Uint32 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

137 
SDL_Swap32(Uint32 x) 
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset

138 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

139 
__asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

140 
return x; 
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset

141 
} 
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

142 
#else 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

143 
static __inline__ Uint32 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

144 
SDL_Swap32(Uint32 x) 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

145 
{ 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

146 
return ((x << 24)  ((x << 8) & 0x00FF0000)  ((x >> 8) & 0x0000FF00)  
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

147 
(x >> 24)); 
0  148 
} 
149 
#endif 

848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset

150 

0  151 
#ifdef SDL_HAS_64BIT_TYPE 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

152 
#if defined(__GNUC__) && defined(__i386__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

153 
static __inline__ Uint64 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

154 
SDL_Swap64(Uint64 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

155 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

156 
union 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

157 
{ 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

158 
struct 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

159 
{ 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

160 
Uint32 a, b; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

161 
} s; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

162 
Uint64 u; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

163 
} v; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

164 
v.u = x; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

165 
__asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), 
3013
8cc00819c8d6
Reverted Bob's indent checkin
Sam Lantinga <slouken@libsdl.org>
parents:
3011
diff
changeset

166 
"1"(v.s. 
8cc00819c8d6
Reverted Bob's indent checkin
Sam Lantinga <slouken@libsdl.org>
parents:
3011
diff
changeset

167 
b)); 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

168 
return v.u; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

169 
} 
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

170 
#elif defined(__GNUC__) && defined(__x86_64__) 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

171 
static __inline__ Uint64 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

172 
SDL_Swap64(Uint64 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

173 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

174 
__asm__("bswapq %0": "=r"(x):"0"(x)); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

175 
return x; 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

176 
} 
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

177 
#else 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

178 
static __inline__ Uint64 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

179 
SDL_Swap64(Uint64 x) 
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset

180 
{ 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

181 
Uint32 hi, lo; 
0  182 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

183 
/* Separate into high and low 32bit values and swap them */ 
3067  184 
lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

185 
x >>= 32; 
3067  186 
hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

187 
x = SDL_Swap32(lo); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

188 
x <<= 32; 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

189 
x = SDL_Swap32(hi); 
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

190 
return (x); 
0  191 
} 
192 
#endif 

193 
#else 

3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

194 
/** 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

195 
* This is mainly to keep compilers from complaining in SDL code. 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

196 
* If there is no real 64bit datatype, then compilers will complain about 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

197 
* the fake 64bit datatype that SDL provides when it compiles user code. 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

198 
*/ 
0  199 
#define SDL_Swap64(X) (X) 
200 
#endif /* SDL_HAS_64BIT_TYPE */ 

201 

202 

1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

203 
static __inline__ float 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

204 
SDL_SwapFloat(float x) 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

205 
{ 
1985
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1984
diff
changeset

206 
union 
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1984
diff
changeset

207 
{ 
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1984
diff
changeset

208 
float f; 
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1984
diff
changeset

209 
Uint32 ui32; 
8055185ae4ed
Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents:
1984
diff
changeset

210 
} swapper; 
1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

211 
swapper.f = x; 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

212 
swapper.ui32 = SDL_Swap32(swapper.ui32); 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

213 
return swapper.f; 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

214 
} 
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

215 

b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

216 

3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

217 
/** 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

218 
* \name Swap to native 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

219 
* Byteswap item from the specified endianness to the native endianness. 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

220 
*/ 
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

221 
/*@{*/ 
0  222 
#if SDL_BYTEORDER == SDL_LIL_ENDIAN 
223 
#define SDL_SwapLE16(X) (X) 

224 
#define SDL_SwapLE32(X) (X) 

225 
#define SDL_SwapLE64(X) (X) 

1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

226 
#define SDL_SwapFloatLE(X) (X) 
0  227 
#define SDL_SwapBE16(X) SDL_Swap16(X) 
228 
#define SDL_SwapBE32(X) SDL_Swap32(X) 

229 
#define SDL_SwapBE64(X) SDL_Swap64(X) 

1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

230 
#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) 
0  231 
#else 
232 
#define SDL_SwapLE16(X) SDL_Swap16(X) 

233 
#define SDL_SwapLE32(X) SDL_Swap32(X) 

234 
#define SDL_SwapLE64(X) SDL_Swap64(X) 

1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

235 
#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) 
0  236 
#define SDL_SwapBE16(X) (X) 
237 
#define SDL_SwapBE32(X) (X) 

238 
#define SDL_SwapBE64(X) (X) 

1984
b910bcabec26
Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset

239 
#define SDL_SwapFloatBE(X) (X) 
0  240 
#endif 
3407
d3baf5ac4e37
Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents:
3067
diff
changeset

241 
/*@}*//*Swap to native*/ 
0  242 

243 
/* Ends C function definitions when using C++ */ 

244 
#ifdef __cplusplus 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

245 
/* *INDENTOFF* */ 
0  246 
} 
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

247 
/* *INDENTON* */ 
0  248 
#endif 
249 
#include "close_code.h" 

250 

251 
#endif /* _SDL_endian_h */ 

1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

252 

c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset

253 
/* vi: set ts=4 sw=4 expandtab: */ 