Mercurial > sdl-ios-xcode
annotate include/SDL_endian.h @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | d45aefcac017 |
children | 4da1ee79c9af |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1044
diff
changeset
|
3 Copyright (C) 1997-2006 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 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
251
b8688cfdc232
Updated the headers with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
23 /** |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
24 * \file SDL_endian.h |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
25 * |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
26 * Functions for reading and writing endian-specific values |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
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 |
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
34 /* The two types of endianness */ |
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
35 #define SDL_LIL_ENDIAN 1234 |
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
36 #define SDL_BIG_ENDIAN 4321 |
0 | 37 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
38 #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ |
1474
351d757c7edd
Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset
|
39 #if defined(__hppa__) || \ |
1475
d45aefcac017
Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents:
1474
diff
changeset
|
40 defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ |
1474
351d757c7edd
Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset
|
41 (defined(__MIPS__) && defined(__MISPEB__)) || \ |
1475
d45aefcac017
Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents:
1474
diff
changeset
|
42 defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ |
1474
351d757c7edd
Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset
|
43 defined(__sparc__) |
351d757c7edd
Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset
|
44 #define SDL_BYTEORDER SDL_BIG_ENDIAN |
351d757c7edd
Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1469
diff
changeset
|
45 #else |
1354
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
46 #define SDL_BYTEORDER SDL_LIL_ENDIAN |
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
47 #endif |
22f39393668a
Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents:
1353
diff
changeset
|
48 #endif /* !SDL_BYTEORDER */ |
0 | 49 |
50 | |
51 #include "begin_code.h" | |
52 /* Set up for C function definitions, even when using C++ */ | |
53 #ifdef __cplusplus | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
54 /* *INDENT-OFF* */ |
0 | 55 extern "C" { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
56 /* *INDENT-ON* */ |
0 | 57 #endif |
58 | |
1369
42eeb14770e3
Doh! Bitten by search and replace. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1368
diff
changeset
|
59 /* Use inline functions for compilers that support them, and static |
0 | 60 functions for those that do not. Because these functions become |
1369
42eeb14770e3
Doh! Bitten by search and replace. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1368
diff
changeset
|
61 static for compilers that do not support inline functions, this |
0 | 62 header should only be included in files that actually use them. |
63 */ | |
1372 | 64 #if defined(__GNUC__) && defined(__i386__) && \ |
1368
533567cbb576
More fixes for building on BeOS
Sam Lantinga <slouken@libsdl.org>
parents:
1354
diff
changeset
|
65 !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
66 static __inline__ Uint16 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
67 SDL_Swap16 (Uint16 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
68 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
69 __asm__ ("xchgb %b0,%h0": "=q" (x):"0" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
70 return x; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
71 } |
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
72 #elif defined(__GNUC__) && defined(__x86_64__) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
73 static __inline__ Uint16 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
74 SDL_Swap16 (Uint16 x) |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
75 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
76 __asm__ ("xchgb %b0,%h0": "=Q" (x):"0" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
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 } |
859
6b28c91bf3d2
This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents:
849
diff
changeset
|
79 #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
80 static __inline__ Uint16 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
81 SDL_Swap16 (Uint16 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
82 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
83 Uint16 result; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
84 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
85 __asm__ ("rlwimi %0,%2,8,16,23": "=&r" (result):"0" (x >> 8), "r" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
86 return result; |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
87 } |
1044
d36ea7925763
Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents:
1033
diff
changeset
|
88 #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
89 static __inline__ Uint16 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
90 SDL_Swap16 (Uint16 x) |
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset
|
91 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
92 __asm__ ("rorw #8,%0": "=d" (x): "0" (x):"cc"); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
93 return x; |
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset
|
94 } |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
95 #else |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
96 static __inline__ Uint16 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
97 SDL_Swap16 (Uint16 x) |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
98 { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
99 return ((x << 8) | (x >> 8)); |
0 | 100 } |
101 #endif | |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
102 |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
103 #if defined(__GNUC__) && defined(__i386__) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
104 static __inline__ Uint32 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
105 SDL_Swap32 (Uint32 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
106 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
107 __asm__ ("bswap %0": "=r" (x):"0" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
108 return x; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
109 } |
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
110 #elif defined(__GNUC__) && defined(__x86_64__) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
111 static __inline__ Uint32 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
112 SDL_Swap32 (Uint32 x) |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
113 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
114 __asm__ ("bswapl %0": "=r" (x):"0" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
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 } |
859
6b28c91bf3d2
This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents:
849
diff
changeset
|
117 #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
118 static __inline__ Uint32 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
119 SDL_Swap32 (Uint32 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
120 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
121 Uint32 result; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
122 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
123 __asm__ ("rlwimi %0,%2,24,16,23": "=&r" (result):"0" (x >> 24), |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
124 "r" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
125 __asm__ ("rlwimi %0,%2,8,8,15": "=&r" (result):"0" (result), "r" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
126 __asm__ ("rlwimi %0,%2,24,0,7": "=&r" (result):"0" (result), "r" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
127 return result; |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
128 } |
1044
d36ea7925763
Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents:
1033
diff
changeset
|
129 #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
130 static __inline__ Uint32 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
131 SDL_Swap32 (Uint32 x) |
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset
|
132 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
133 __asm__ ("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d" (x): "0" (x):"cc"); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
134 return x; |
985
cec525374267
Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents:
859
diff
changeset
|
135 } |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
136 #else |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
137 static __inline__ Uint32 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
138 SDL_Swap32 (Uint32 x) |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
139 { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
140 return ((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
141 (x >> 24)); |
0 | 142 } |
143 #endif | |
848
85af65457959
Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
144 |
0 | 145 #ifdef SDL_HAS_64BIT_TYPE |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
146 #if defined(__GNUC__) && defined(__i386__) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
147 static __inline__ Uint64 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
148 SDL_Swap64 (Uint64 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
149 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
150 union |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
151 { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
152 struct |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
153 { |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
154 Uint32 a, b; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
155 } s; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
156 Uint64 u; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
157 } v; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
158 v.u = x; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
159 __asm__ ("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r" (v.s.a), "=r" (v.s.b):"0" (v.s.a), |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
160 "1" (v.s. |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
161 b)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
162 return v.u; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
163 } |
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
164 #elif defined(__GNUC__) && defined(__x86_64__) |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
165 static __inline__ Uint64 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
166 SDL_Swap64 (Uint64 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
167 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
168 __asm__ ("bswapq %0": "=r" (x):"0" (x)); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
169 return x; |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
170 } |
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
171 #else |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
172 static __inline__ Uint64 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
173 SDL_Swap64 (Uint64 x) |
849
bab227101de4
Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents:
848
diff
changeset
|
174 { |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
175 Uint32 hi, lo; |
0 | 176 |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
177 /* Separate into high and low 32-bit values and swap them */ |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
178 lo = (Uint32) (x & 0xFFFFFFFF); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
179 x >>= 32; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
180 hi = (Uint32) (x & 0xFFFFFFFF); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
181 x = SDL_Swap32 (lo); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
182 x <<= 32; |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
183 x |= SDL_Swap32 (hi); |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
184 return (x); |
0 | 185 } |
186 #endif | |
187 #else | |
188 /* This is mainly to keep compilers from complaining in SDL code. | |
189 If there is no real 64-bit datatype, then compilers will complain about | |
190 the fake 64-bit datatype that SDL provides when it compiles user code. | |
191 */ | |
192 #define SDL_Swap64(X) (X) | |
193 #endif /* SDL_HAS_64BIT_TYPE */ | |
194 | |
195 | |
196 /* Byteswap item from the specified endianness to the native endianness */ | |
197 #if SDL_BYTEORDER == SDL_LIL_ENDIAN | |
198 #define SDL_SwapLE16(X) (X) | |
199 #define SDL_SwapLE32(X) (X) | |
200 #define SDL_SwapLE64(X) (X) | |
201 #define SDL_SwapBE16(X) SDL_Swap16(X) | |
202 #define SDL_SwapBE32(X) SDL_Swap32(X) | |
203 #define SDL_SwapBE64(X) SDL_Swap64(X) | |
204 #else | |
205 #define SDL_SwapLE16(X) SDL_Swap16(X) | |
206 #define SDL_SwapLE32(X) SDL_Swap32(X) | |
207 #define SDL_SwapLE64(X) SDL_Swap64(X) | |
208 #define SDL_SwapBE16(X) (X) | |
209 #define SDL_SwapBE32(X) (X) | |
210 #define SDL_SwapBE64(X) (X) | |
211 #endif | |
212 | |
213 /* Ends C function definitions when using C++ */ | |
214 #ifdef __cplusplus | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
215 /* *INDENT-OFF* */ |
0 | 216 } |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
217 /* *INDENT-ON* */ |
0 | 218 #endif |
219 #include "close_code.h" | |
220 | |
221 #endif /* _SDL_endian_h */ | |
1662
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
222 |
782fd950bd46
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents:
1475
diff
changeset
|
223 /* vi: set ts=4 sw=4 expandtab: */ |