annotate include/SDL_endian.h @ 4495:dbbfdb9ea716

Simplified clipboard API for sanity's sake. A complete clipboard implementation would support multiple formats that could be queried at runtime, events for when the clipboard contents changed, support for HTML, images, etc. We're not going that crazy, at least for now. :)
author Sam Lantinga <slouken@libsdl.org>
date Wed, 07 Jul 2010 23:54:03 -0700
parents ab63fdcf66af
children 116f05eb67c7
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
3697
f7b03b6838cb Fixed bug #926
Sam Lantinga <slouken@libsdl.org>
parents: 3630
diff changeset
3 Copyright (C) 1997-2010 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 /**
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 endian-specific 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
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
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 big-endian 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 big-endian 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 big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents: 1469
diff changeset
47 defined(__sparc__)
351d757c7edd Maybe it's easier to collect the big-endian 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 big-endian 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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
53
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
54
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
55 #include "begin_code.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
56 /* Set up for C function definitions, even when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 /* *INDENT-OFF* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 /* *INDENT-ON* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
61 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
Sam Lantinga <slouken@libsdl.org>
parents: 1369
diff changeset
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/SDL-1.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 {
4439
ab63fdcf66af esigra 2010-04-17 03:53:57 PDT
Sam Lantinga <slouken@libsdl.org>
parents: 4432
diff changeset
106 return SDL_static_cast(Uint16, ((x << 8) | (x >> 8)));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
107 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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/SDL-1.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 {
4439
ab63fdcf66af esigra 2010-04-17 03:53:57 PDT
Sam Lantinga <slouken@libsdl.org>
parents: 4432
diff changeset
146 return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) |
ab63fdcf66af esigra 2010-04-17 03:53:57 PDT
Sam Lantinga <slouken@libsdl.org>
parents: 4432
diff changeset
147 ((x >> 8) & 0x0000FF00) | (x >> 24)));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
148 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
149 #endif
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
150
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 32-bit values and swap them */
3067
bcd41b269091 Fixed bug #537
Sam Lantinga <slouken@libsdl.org>
parents: 3013
diff changeset
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
bcd41b269091 Fixed bug #537
Sam Lantinga <slouken@libsdl.org>
parents: 3013
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
191 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
192 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 64-bit datatype, then compilers will complain about
d3baf5ac4e37 Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents: 3067
diff changeset
197 * the fake 64-bit 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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
199 #define SDL_Swap64(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
200 #endif /* SDL_HAS_64BIT_TYPE */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
201
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
222 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
223 #define SDL_SwapLE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
224 #define SDL_SwapLE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
227 #define SDL_SwapBE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
228 #define SDL_SwapBE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
231 #else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
232 #define SDL_SwapLE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
233 #define SDL_SwapLE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
236 #define SDL_SwapBE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
237 #define SDL_SwapBE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
240 #endif
3407
d3baf5ac4e37 Partial fix for bug #859
Sam Lantinga <slouken@libsdl.org>
parents: 3067
diff changeset
241 /*@}*//*Swap to native*/
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
242
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
243 /* Ends C function definitions when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 /* *INDENT-OFF* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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 /* *INDENT-ON* */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
248 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
249 #include "close_code.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
250
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
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: */