annotate include/SDL_endian.h @ 1554:0ca607a5d173

Fixed bug #84 Date: Sun, 23 Oct 2005 16:39:03 +0200 From: "A. Schmid" <sahib@phreaker.net> Subject: [SDL] no software surfaces with svgalib driver? Hi, I noticed that the SDL (1.2.9) svgalib driver only makes use of linear addressable (framebuffer) video modes. On older systems (like one of mine), linear addressable modes are often not available. Especially for cards with VESA VBE < 2.0 the svgalib vesa driver is unusable, since VESA only supports framebuffering for VBE 2.0 and later. The changes necessary to add support for software surfaces seem to be relatively small. I only had to hack src/video/svga/SDL_svgavideo.c (see attached patch). The code worked fine for me, but it is no more than a proof of concept and should be reviewed (probably has a memory leak when switching modes). It also uses the vgagl library (included in the svgalib package) and needs to be linked against it. -Alex
author Sam Lantinga <slouken@libsdl.org>
date Sun, 19 Mar 2006 12:04:40 +0000
parents d45aefcac017
children 782fd950bd46 c121d94672cb 6832b00d3594
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
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
23 /* Functions for reading and writing endian-specific values */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
24
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
25 #ifndef _SDL_endian_h
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
26 #define _SDL_endian_h
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
27
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
28 #include "SDL_stdinc.h"
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
29
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
30 /* The two types of endianness */
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
31 #define SDL_LIL_ENDIAN 1234
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
32 #define SDL_BIG_ENDIAN 4321
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
33
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
34 #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
35 #if defined(__hppa__) || \
1475
d45aefcac017 Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents: 1474
diff changeset
36 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
37 (defined(__MIPS__) && defined(__MISPEB__)) || \
1475
d45aefcac017 Get Microsoft's preprocessor symbols in there
Sam Lantinga <slouken@libsdl.org>
parents: 1474
diff changeset
38 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
39 defined(__sparc__)
351d757c7edd Maybe it's easier to collect the big-endian architectures. :)
Sam Lantinga <slouken@libsdl.org>
parents: 1469
diff changeset
40 #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
41 #else
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
42 #define SDL_BYTEORDER SDL_LIL_ENDIAN
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
43 #endif
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1353
diff changeset
44 #endif /* !SDL_BYTEORDER */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
45
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
46
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
47 #include "begin_code.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
48 /* Set up for C function definitions, even when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
49 #ifdef __cplusplus
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
50 extern "C" {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
51 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
52
1369
42eeb14770e3 Doh! Bitten by search and replace. :)
Sam Lantinga <slouken@libsdl.org>
parents: 1368
diff changeset
53 /* Use inline functions for compilers that support them, and static
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
54 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
55 static for compilers that do not support inline functions, this
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
56 header should only be included in files that actually use them.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
57 */
1372
Sam Lantinga <slouken@libsdl.org>
parents: 1369
diff changeset
58 #if defined(__GNUC__) && defined(__i386__) && \
1368
533567cbb576 More fixes for building on BeOS
Sam Lantinga <slouken@libsdl.org>
parents: 1354
diff changeset
59 !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */)
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
60 static __inline__ Uint16 SDL_Swap16(Uint16 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
61 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
62 __asm__("xchgb %b0,%h0" : "=q" (x) : "0" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
63 return x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
64 }
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
65 #elif defined(__GNUC__) && defined(__x86_64__)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
66 static __inline__ Uint16 SDL_Swap16(Uint16 x)
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
67 {
1033
aebfa3ce2a53 The fix is going back in. :)
Sam Lantinga <slouken@libsdl.org>
parents: 1031
diff changeset
68 __asm__("xchgb %b0,%h0" : "=Q" (x) : "0" (x));
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
69 return x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
70 }
859
6b28c91bf3d2 This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents: 849
diff changeset
71 #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
72 static __inline__ Uint16 SDL_Swap16(Uint16 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
73 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
74 Uint16 result;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
75
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
76 __asm__("rlwimi %0,%2,8,16,23" : "=&r" (result) : "0" (x >> 8), "r" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
77 return result;
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
78 }
1044
d36ea7925763 Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents: 1033
diff changeset
79 #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__))
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
80 static __inline__ Uint16 SDL_Swap16(Uint16 x)
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
81 {
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
82 __asm__("rorw #8,%0" : "=d" (x) : "0" (x) : "cc");
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
83 return x;
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
84 }
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
85 #else
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
86 static __inline__ Uint16 SDL_Swap16(Uint16 x) {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
87 return((x<<8)|(x>>8));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
88 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
89 #endif
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
90
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
91 #if defined(__GNUC__) && defined(__i386__)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
92 static __inline__ Uint32 SDL_Swap32(Uint32 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
93 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
94 __asm__("bswap %0" : "=r" (x) : "0" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
95 return x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
96 }
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
97 #elif defined(__GNUC__) && defined(__x86_64__)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
98 static __inline__ Uint32 SDL_Swap32(Uint32 x)
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
99 {
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
100 __asm__("bswapl %0" : "=r" (x) : "0" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
101 return x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
102 }
859
6b28c91bf3d2 This works on MacOS X too. :)
Sam Lantinga <slouken@libsdl.org>
parents: 849
diff changeset
103 #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
104 static __inline__ Uint32 SDL_Swap32(Uint32 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
105 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
106 Uint32 result;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
107
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
108 __asm__("rlwimi %0,%2,24,16,23" : "=&r" (result) : "0" (x>>24), "r" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
109 __asm__("rlwimi %0,%2,8,8,15" : "=&r" (result) : "0" (result), "r" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
110 __asm__("rlwimi %0,%2,24,0,7" : "=&r" (result) : "0" (result), "r" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
111 return result;
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
112 }
1044
d36ea7925763 Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents: 1033
diff changeset
113 #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__))
994
c4e5473672b6 Wrong size of parameters for SDL_Swap32 m68k assembly routine
Patrice Mandin <patmandin@gmail.com>
parents: 985
diff changeset
114 static __inline__ Uint32 SDL_Swap32(Uint32 x)
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
115 {
1044
d36ea7925763 Optimize also for 68020 and higher CPUs
Patrice Mandin <patmandin@gmail.com>
parents: 1033
diff changeset
116 __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0" : "=d" (x) : "0" (x) : "cc");
985
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
117 return x;
cec525374267 Add m68k assembly routines for endianness conversion
Patrice Mandin <patmandin@gmail.com>
parents: 859
diff changeset
118 }
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
119 #else
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
120 static __inline__ Uint32 SDL_Swap32(Uint32 x) {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
121 return((x<<24)|((x<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|(x>>24));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
122 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
123 #endif
848
85af65457959 Avoid using kernel internal headers
Sam Lantinga <slouken@libsdl.org>
parents: 769
diff changeset
124
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
125 #ifdef SDL_HAS_64BIT_TYPE
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
126 #if defined(__GNUC__) && defined(__i386__)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
127 static __inline__ Uint64 SDL_Swap64(Uint64 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
128 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
129 union {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
130 struct { Uint32 a,b; } s;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
131 Uint64 u;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
132 } v;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
133 v.u = x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
134 __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
135 : "=r" (v.s.a), "=r" (v.s.b)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
136 : "0" (v.s.a), "1" (v.s.b));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
137 return v.u;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
138 }
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
139 #elif defined(__GNUC__) && defined(__x86_64__)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
140 static __inline__ Uint64 SDL_Swap64(Uint64 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
141 {
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
142 __asm__("bswapq %0" : "=r" (x) : "0" (x));
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
143 return x;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
144 }
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
145 #else
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
146 static __inline__ Uint64 SDL_Swap64(Uint64 x)
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
147 {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
148 Uint32 hi, lo;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
149
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
150 /* Separate into high and low 32-bit values and swap them */
849
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
151 lo = (Uint32)(x&0xFFFFFFFF);
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
152 x >>= 32;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
153 hi = (Uint32)(x&0xFFFFFFFF);
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
154 x = SDL_Swap32(lo);
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
155 x <<= 32;
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
156 x |= SDL_Swap32(hi);
bab227101de4 Added inline byte swapping code for other architectures
Sam Lantinga <slouken@libsdl.org>
parents: 848
diff changeset
157 return(x);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
158 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
159 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
160 #else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
161 /* This is mainly to keep compilers from complaining in SDL code.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
162 If there is no real 64-bit datatype, then compilers will complain about
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
163 the fake 64-bit datatype that SDL provides when it compiles user code.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
164 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
165 #define SDL_Swap64(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
166 #endif /* SDL_HAS_64BIT_TYPE */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
167
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
168
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
169 /* Byteswap item from the specified endianness to the native endianness */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
170 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
171 #define SDL_SwapLE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
172 #define SDL_SwapLE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
173 #define SDL_SwapLE64(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
174 #define SDL_SwapBE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
175 #define SDL_SwapBE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
176 #define SDL_SwapBE64(X) SDL_Swap64(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
177 #else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
178 #define SDL_SwapLE16(X) SDL_Swap16(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
179 #define SDL_SwapLE32(X) SDL_Swap32(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
180 #define SDL_SwapLE64(X) SDL_Swap64(X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
181 #define SDL_SwapBE16(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
182 #define SDL_SwapBE32(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
183 #define SDL_SwapBE64(X) (X)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
184 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
185
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
186 /* Ends C function definitions when using C++ */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
187 #ifdef __cplusplus
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
188 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
189 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
190 #include "close_code.h"
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 /* _SDL_endian_h */