46#if defined(_MSC_VER) && (_MSC_VER >= 1400)
50#ifndef __PRFCHWINTRIN_H
51#define __PRFCHWINTRIN_H
52static __inline__ void __attribute__((__always_inline__, __nodebug__))
55 __builtin_prefetch(__P, 0, 3 );
67#define SDL_LIL_ENDIAN 1234
68#define SDL_BIG_ENDIAN 4321
72#ifdef SDL_PLATFORM_LINUX
74#define SDL_BYTEORDER __BYTE_ORDER
75#elif defined(SDL_PLATFORM_SOLARIS)
76#include <sys/byteorder.h>
77#if defined(_LITTLE_ENDIAN)
78#define SDL_BYTEORDER SDL_LIL_ENDIAN
79#elif defined(_BIG_ENDIAN)
80#define SDL_BYTEORDER SDL_BIG_ENDIAN
82#error Unsupported endianness
84#elif defined(SDL_PLATFORM_OPENBSD) || defined(__DragonFly__)
86#define SDL_BYTEORDER BYTE_ORDER
87#elif defined(SDL_PLATFORM_FREEBSD) || defined(SDL_PLATFORM_NETBSD)
88#include <sys/endian.h>
89#define SDL_BYTEORDER BYTE_ORDER
91#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__)
92#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
93#define SDL_BYTEORDER SDL_LIL_ENDIAN
94#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
95#define SDL_BYTEORDER SDL_BIG_ENDIAN
97#error Unsupported endianness
100#if defined(__hppa__) || \
101 defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
102 (defined(__MIPS__) && defined(__MIPSEB__)) || \
103 defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \
104 defined(__sparc__) || defined(__sparc)
105#define SDL_BYTEORDER SDL_BIG_ENDIAN
107#define SDL_BYTEORDER SDL_LIL_ENDIAN
112#ifndef SDL_FLOATWORDORDER
114#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__)
115#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
116#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
117#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
118#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
120#error Unsupported endianness
122#elif defined(__MAVERICK__)
124#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
125#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__)
127#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
130#define SDL_FLOATWORDORDER SDL_BYTEORDER
142#if defined(__GNUC__) || defined(__clang__)
143# define HAS_BUILTIN_BSWAP16 (SDL_HAS_BUILTIN(__builtin_bswap16)) || \
144 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
145# define HAS_BUILTIN_BSWAP32 (SDL_HAS_BUILTIN(__builtin_bswap32)) || \
146 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
147# define HAS_BUILTIN_BSWAP64 (SDL_HAS_BUILTIN(__builtin_bswap64)) || \
148 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
151# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95)
153# define HAS_BUILTIN_BSWAP16 0
154# define HAS_BUILTIN_BSWAP32 0
155# define HAS_BUILTIN_BSWAP64 0
156# define HAS_BROKEN_BSWAP 0
160#ifndef SDL_WIKI_DOCUMENTATION_SECTION
161#if HAS_BUILTIN_BSWAP16
162#define SDL_Swap16(x) __builtin_bswap16(x)
163#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
164#pragma intrinsic(_byteswap_ushort)
165#define SDL_Swap16(x) _byteswap_ushort(x)
166#elif defined(__i386__) && !HAS_BROKEN_BSWAP
169 __asm__(
"xchgb %b0,%h0":
"=q"(x):
"0"(x));
172#elif defined(__x86_64__)
175 __asm__(
"xchgb %b0,%h0":
"=Q"(x):
"0"(x));
178#elif (defined(__powerpc__) || defined(__ppc__))
183 __asm__(
"rlwimi %0,%2,8,16,23":
"=&r"(result):
"0"(x >> 8),
"r"(x));
186#elif (defined(__m68k__) && !defined(__mcoldfire__))
189 __asm__(
"rorw #8,%0":
"=d"(x):
"0"(x):
"cc");
192#elif defined(__WATCOMC__) && defined(__386__)
194#pragma aux SDL_Swap16 = \
207#ifndef SDL_WIKI_DOCUMENTATION_SECTION
208#if HAS_BUILTIN_BSWAP32
209#define SDL_Swap32(x) __builtin_bswap32(x)
210#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
211#pragma intrinsic(_byteswap_ulong)
212#define SDL_Swap32(x) _byteswap_ulong(x)
213#elif defined(__i386__) && !HAS_BROKEN_BSWAP
216 __asm__(
"bswap %0":
"=r"(x):
"0"(x));
219#elif defined(__x86_64__)
222 __asm__(
"bswapl %0":
"=r"(x):
"0"(x));
225#elif (defined(__powerpc__) || defined(__ppc__))
230 __asm__(
"rlwimi %0,%2,24,16,23":
"=&r"(result):
"0" (x>>24),
"r"(x));
231 __asm__(
"rlwimi %0,%2,8,8,15" :
"=&r"(result):
"0" (result),
"r"(x));
232 __asm__(
"rlwimi %0,%2,24,0,7" :
"=&r"(result):
"0" (result),
"r"(x));
235#elif (defined(__m68k__) && !defined(__mcoldfire__))
238 __asm__(
"rorw #8,%0\n\tswap %0\n\trorw #8,%0":
"=d"(x):
"0"(x):
"cc");
241#elif defined(__WATCOMC__) && defined(__386__)
243#pragma aux SDL_Swap32 = \
251 ((x >> 8) & 0x0000FF00) | (x >> 24)));
257#ifndef SDL_WIKI_DOCUMENTATION_SECTION
258#if HAS_BUILTIN_BSWAP64
259#define SDL_Swap64(x) __builtin_bswap64(x)
260#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
261#pragma intrinsic(_byteswap_uint64)
262#define SDL_Swap64(x) _byteswap_uint64(x)
263#elif defined(__i386__) && !HAS_BROKEN_BSWAP
273 __asm__(
"bswapl %0 ; bswapl %1 ; xchgl %0,%1"
274 :
"=r"(v.s.a),
"=r"(v.s.b)
275 :
"0" (v.s.a),
"1"(v.s.b));
278#elif defined(__x86_64__)
281 __asm__(
"bswapq %0":
"=r"(x):
"0"(x));
284#elif defined(__WATCOMC__) && defined(__386__)
286#pragma aux SDL_Swap64 = \
340#undef HAS_BROKEN_BSWAP
341#undef HAS_BUILTIN_BSWAP16
342#undef HAS_BUILTIN_BSWAP32
343#undef HAS_BUILTIN_BSWAP64
346#ifdef SDL_WIKI_DOCUMENTATION_SECTION
425#define SDL_Swap16LE(x) SwapOnlyIfNecessary(x)
441#define SDL_Swap32LE(x) SwapOnlyIfNecessary(x)
457#define SDL_Swap64LE(x) SwapOnlyIfNecessary(x)
473#define SDL_SwapFloatLE(x) SwapOnlyIfNecessary(x)
489#define SDL_Swap16BE(x) SwapOnlyIfNecessary(x)
505#define SDL_Swap32BE(x) SwapOnlyIfNecessary(x)
521#define SDL_Swap64BE(x) SwapOnlyIfNecessary(x)
537#define SDL_SwapFloatBE(x) SwapOnlyIfNecessary(x)
539#elif SDL_BYTEORDER == SDL_LIL_ENDIAN
540#define SDL_Swap16LE(x) (x)
541#define SDL_Swap32LE(x) (x)
542#define SDL_Swap64LE(x) (x)
543#define SDL_SwapFloatLE(x) (x)
544#define SDL_Swap16BE(x) SDL_Swap16(x)
545#define SDL_Swap32BE(x) SDL_Swap32(x)
546#define SDL_Swap64BE(x) SDL_Swap64(x)
547#define SDL_SwapFloatBE(x) SDL_SwapFloat(x)
549#define SDL_Swap16LE(x) SDL_Swap16(x)
550#define SDL_Swap32LE(x) SDL_Swap32(x)
551#define SDL_Swap64LE(x) SDL_Swap64(x)
552#define SDL_SwapFloatLE(x) SDL_SwapFloat(x)
553#define SDL_Swap16BE(x) (x)
554#define SDL_Swap32BE(x) (x)
555#define SDL_Swap64BE(x) (x)
556#define SDL_SwapFloatBE(x) (x)
SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x)
SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x)
SDL_FORCE_INLINE float SDL_SwapFloat(float x)
SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x)
#define SDL_static_cast(type, expression)