annotate include/SDL_endian.h @ 3844:332a59e39ce1 SDL-ryan-multiple-audio-device

I really don't want to update these last two audio backends...I added an error that says if no one complains, the backends will be removed eventually. So if anyone ever wants them and they care enough to speak up, we'll know to do something about it. If no one does, that's less code to maintain. :)
author Ryan C. Gordon <icculus@icculus.org>
date Tue, 17 Oct 2006 06:45:17 +0000
parents 8055185ae4ed
children e1da92da346c 99210400e8b9
rev   line source
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
21 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 /**
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
24 * \file SDL_endian.h
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
25 *
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
26 * Functions for reading and writing endian-specific values
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
28
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
29 #ifndef _SDL_endian_h
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
30 #define _SDL_endian_h
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
37
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
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
49
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
50
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
51 #include "begin_code.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
52 /* Set up for C function definitions, even when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
53 #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
54 /* *INDENT-OFF* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
55 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
56 /* *INDENT-ON* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
57 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
62 header should only be included in files that actually use them.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
63 */
1372
Sam Lantinga <slouken@libsdl.org>
parents: 1369
diff changeset
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 */)
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
66 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
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 {
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
69 __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
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__)
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)
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
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 }
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__))
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)
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
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 Uint16 result;
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
84
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
85 __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
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__))
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
89 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
90 SDL_Swap16(Uint16 x)
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
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__("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
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
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)
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
98 {
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 return ((x << 8) | (x >> 8));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
100 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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__)
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
104 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
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 {
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
107 __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
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__)
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)
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
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__("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
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__))
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)
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
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 Uint32 result;
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
122
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
123 __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
124 __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
125 __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
126 return result;
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
127 }
1044
d36ea7925763 Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents: 1033
diff changeset
128 #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__))
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
129 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
130 SDL_Swap32(Uint32 x)
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
131 {
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
132 __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
133 return x;
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
134 }
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
135 #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
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)
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
138 {
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 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
140 (x >> 24));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
141 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
142 #endif
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
143
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
144 #ifdef SDL_HAS_64BIT_TYPE
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
145 #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
146 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
147 SDL_Swap64(Uint64 x)
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
148 {
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
149 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
150 {
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
151 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
152 {
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 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
154 } 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
155 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
156 } 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
157 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
158 __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a),
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 "1"(v.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
160 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 return v.u;
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
162 }
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
163 #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
164 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
165 SDL_Swap64(Uint64 x)
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
166 {
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
167 __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
168 return x;
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 #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
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 Uint32 hi, lo;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
175
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
176 /* Separate into high and low 32-bit values and swap them */
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
177 lo = (Uint32) (x & 0xFFFFFFFF);
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 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
179 hi = (Uint32) (x & 0xFFFFFFFF);
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
180 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
181 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
182 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
183 return (x);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
184 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
185 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
186 #else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
187 /* This is mainly to keep compilers from complaining in SDL code.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
188 If there is no real 64-bit datatype, then compilers will complain about
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
189 the fake 64-bit datatype that SDL provides when it compiles user code.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
190 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
191 #define SDL_Swap64(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
192 #endif /* SDL_HAS_64BIT_TYPE */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
193
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
194
1984
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
195 static __inline__ float
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
196 SDL_SwapFloat(float x)
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
197 {
1985
8055185ae4ed Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents: 1984
diff changeset
198 union
8055185ae4ed Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents: 1984
diff changeset
199 {
8055185ae4ed Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents: 1984
diff changeset
200 float f;
8055185ae4ed Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents: 1984
diff changeset
201 Uint32 ui32;
8055185ae4ed Added source color and alpha modulation support.
Sam Lantinga <slouken@libsdl.org>
parents: 1984
diff changeset
202 } swapper;
1984
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
203 swapper.f = x;
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
204 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
205 return swapper.f;
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
206 }
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
207
b910bcabec26 Added SDL_SwapFloat* function/macros. Reference Bugzilla #293.
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
208
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
209 /* Byteswap item from the specified endianness to the native endianness */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
210 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
211 #define SDL_SwapLE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
212 #define SDL_SwapLE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
213 #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
214 #define SDL_SwapFloatLE(X) (X)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
215 #define SDL_SwapBE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
216 #define SDL_SwapBE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
217 #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
218 #define SDL_SwapFloatBE(X) SDL_SwapFloat(X)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
219 #else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
220 #define SDL_SwapLE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
221 #define SDL_SwapLE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
222 #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
223 #define SDL_SwapFloatLE(X) SDL_SwapFloat(X)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
224 #define SDL_SwapBE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
225 #define SDL_SwapBE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
226 #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
227 #define SDL_SwapFloatBE(X) (X)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
228 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
229
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
230 /* Ends C function definitions when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
231 #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
232 /* *INDENT-OFF* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
233 }
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
234 /* *INDENT-ON* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
235 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
236 #include "close_code.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
237
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
238 #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
239
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
240 /* vi: set ts=4 sw=4 expandtab: */