mirror of
https://github.com/dhewm/dhewm3-sdk.git
synced 2024-11-24 21:41:23 +00:00
53db277bae
I created this repo from the original dhewm3 repo, but I used git filter-branch to kill all the files that are not needed to just build base.dll and d3xp.dll (or .so or .dylib or whatever). So this is basically just the files the original Doom3 SDK had, but taken from dhewm3 instead (and thus GPL licensed and patched for 64bit-support etc) + some dhewm3 specific stuff + CMakeLists.txt to build them. The git filter-branch details: filter-branch -f --prune-empty --tree-filter /tmp/killkill.sh @ ## /tmp/killkill.sh: #!/bin/sh find . -exec /tmp/removeothers.sh {} \; exit 0 ## /tmp/removeothers.sh: #!/bin/bash FNAME="$1" if [[ $FNAME == \./\.git* ]] || [[ $FNAME == \./d3xp/* ]] || [[ $FNAME == \./game/* ]] then #echo "ignoring $FNAME" exit 0 fi if ! grep -Fxq "$FNAME" /tmp/d3sdklist.txt then #echo "REMOVING $FNAME" rm -rf "$FNAME" fi exit 0 ## /tmp/d3sdklist.txt was is just a textfile with one path per line with all the files (and directories!) I wanted to keep, like: . .. ./sys/platform.h ./framework/Game.h ./config.h.in ./CMakeLists.txt ## ... and all the relevant files from the SDK
253 lines
6.4 KiB
C
253 lines
6.4 KiB
C
/*
|
|
A replacement for SDL_endian.h for idlib/Lib.cpp
|
|
|
|
(I did some changes to remove dependencies to other SDL headers)
|
|
|
|
Based on the original SDL_endian.h:
|
|
|
|
Simple DirectMedia Layer
|
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
warranty. In no event will the authors be held liable for any damages
|
|
arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
including commercial applications, and to alter it and redistribute it
|
|
freely, subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not
|
|
claim that you wrote the original software. If you use this software
|
|
in a product, an acknowledgment in the product documentation would be
|
|
appreciated but is not required.
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
misrepresented as being the original software.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
#ifndef STUB_SDL_ENDIAN_H
|
|
#define STUB_SDL_ENDIAN_H
|
|
|
|
#include <stdint.h>
|
|
#include "platform.h"
|
|
|
|
#define SDL_LIL_ENDIAN 1234
|
|
#define SDL_BIG_ENDIAN 4321
|
|
|
|
#if BUILD_IS_BIG_ENDIAN // this is from config.h, set by cmake
|
|
#define SDL_BYTEORDER SDL_BIG_ENDIAN
|
|
#else
|
|
#define SDL_BYTEORDER SDL_LIL_ENDIAN
|
|
#endif
|
|
|
|
typedef uint16_t Uint16;
|
|
typedef uint32_t Uint32;
|
|
typedef uint64_t Uint64;
|
|
|
|
#ifndef SDL_INLINE
|
|
#if defined(__GNUC__)
|
|
#define SDL_INLINE __inline__
|
|
#elif defined(_MSC_VER) || defined(__BORLANDC__) || \
|
|
defined(__DMC__) || defined(__SC__) || \
|
|
defined(__WATCOMC__) || defined(__LCC__) || \
|
|
defined(__DECC) || defined(__CC_ARM)
|
|
#define SDL_INLINE __inline
|
|
#ifndef __inline__
|
|
#define __inline__ __inline
|
|
#endif
|
|
#else
|
|
#define SDL_INLINE inline
|
|
#ifndef __inline__
|
|
#define __inline__ inline
|
|
#endif
|
|
#endif
|
|
#endif /* SDL_INLINE not defined */
|
|
|
|
#ifndef SDL_FORCE_INLINE
|
|
#if defined(_MSC_VER)
|
|
#define SDL_FORCE_INLINE __forceinline
|
|
#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) )
|
|
#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__
|
|
#else
|
|
#define SDL_FORCE_INLINE static SDL_INLINE
|
|
#endif
|
|
#endif /* SDL_FORCE_INLINE not defined */
|
|
|
|
#if defined(__GNUC__) && defined(__i386__) && \
|
|
!(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */)
|
|
SDL_FORCE_INLINE Uint16
|
|
SDL_Swap16(Uint16 x)
|
|
{
|
|
__asm__("xchgb %b0,%h0": "=q"(x):"0"(x));
|
|
return x;
|
|
}
|
|
#elif defined(__GNUC__) && defined(__x86_64__)
|
|
SDL_FORCE_INLINE Uint16
|
|
SDL_Swap16(Uint16 x)
|
|
{
|
|
__asm__("xchgb %b0,%h0": "=Q"(x):"0"(x));
|
|
return x;
|
|
}
|
|
#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
|
|
SDL_FORCE_INLINE Uint16
|
|
SDL_Swap16(Uint16 x)
|
|
{
|
|
int result;
|
|
|
|
__asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x));
|
|
return (Uint16)result;
|
|
}
|
|
#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__)
|
|
SDL_FORCE_INLINE Uint16
|
|
SDL_Swap16(Uint16 x)
|
|
{
|
|
__asm__("rorw #8,%0": "=d"(x): "0"(x):"cc");
|
|
return x;
|
|
}
|
|
#elif defined(__WATCOMC__) && defined(__386__)
|
|
extern _inline Uint16 SDL_Swap16(Uint16);
|
|
#pragma aux SDL_Swap16 = \
|
|
"xchg al, ah" \
|
|
parm [ax] \
|
|
modify [ax];
|
|
#else
|
|
SDL_FORCE_INLINE Uint16
|
|
SDL_Swap16(Uint16 x)
|
|
{
|
|
return SDL_static_cast(Uint16, ((x << 8) | (x >> 8)));
|
|
}
|
|
#endif
|
|
|
|
#if defined(__GNUC__) && defined(__i386__)
|
|
SDL_FORCE_INLINE Uint32
|
|
SDL_Swap32(Uint32 x)
|
|
{
|
|
__asm__("bswap %0": "=r"(x):"0"(x));
|
|
return x;
|
|
}
|
|
#elif defined(__GNUC__) && defined(__x86_64__)
|
|
SDL_FORCE_INLINE Uint32
|
|
SDL_Swap32(Uint32 x)
|
|
{
|
|
__asm__("bswapl %0": "=r"(x):"0"(x));
|
|
return x;
|
|
}
|
|
#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
|
|
SDL_FORCE_INLINE Uint32
|
|
SDL_Swap32(Uint32 x)
|
|
{
|
|
Uint32 result;
|
|
|
|
__asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x));
|
|
__asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x));
|
|
__asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x));
|
|
return result;
|
|
}
|
|
#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__)
|
|
SDL_FORCE_INLINE Uint32
|
|
SDL_Swap32(Uint32 x)
|
|
{
|
|
__asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc");
|
|
return x;
|
|
}
|
|
#elif defined(__WATCOMC__) && defined(__386__)
|
|
extern _inline Uint32 SDL_Swap32(Uint32);
|
|
#ifndef __SW_3 /* 486+ */
|
|
#pragma aux SDL_Swap32 = \
|
|
"bswap eax" \
|
|
parm [eax] \
|
|
modify [eax];
|
|
#else /* 386-only */
|
|
#pragma aux SDL_Swap32 = \
|
|
"xchg al, ah" \
|
|
"ror eax, 16" \
|
|
"xchg al, ah" \
|
|
parm [eax] \
|
|
modify [eax];
|
|
#endif
|
|
#else
|
|
SDL_FORCE_INLINE Uint32
|
|
SDL_Swap32(Uint32 x)
|
|
{
|
|
return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) |
|
|
((x >> 8) & 0x0000FF00) | (x >> 24)));
|
|
}
|
|
#endif
|
|
|
|
#if defined(__GNUC__) && defined(__i386__)
|
|
SDL_FORCE_INLINE Uint64
|
|
SDL_Swap64(Uint64 x)
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
Uint32 a, b;
|
|
} s;
|
|
Uint64 u;
|
|
} v;
|
|
v.u = x;
|
|
__asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a),
|
|
"1"(v.s.
|
|
b));
|
|
return v.u;
|
|
}
|
|
#elif defined(__GNUC__) && defined(__x86_64__)
|
|
SDL_FORCE_INLINE Uint64
|
|
SDL_Swap64(Uint64 x)
|
|
{
|
|
__asm__("bswapq %0": "=r"(x):"0"(x));
|
|
return x;
|
|
}
|
|
#else
|
|
SDL_FORCE_INLINE Uint64
|
|
SDL_Swap64(Uint64 x)
|
|
{
|
|
Uint32 hi, lo;
|
|
|
|
/* Separate into high and low 32-bit values and swap them */
|
|
lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
|
|
x >>= 32;
|
|
hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
|
|
x = SDL_Swap32(lo);
|
|
x <<= 32;
|
|
x |= SDL_Swap32(hi);
|
|
return (x);
|
|
}
|
|
#endif
|
|
|
|
|
|
SDL_FORCE_INLINE float
|
|
SDL_SwapFloat(float x)
|
|
{
|
|
union
|
|
{
|
|
float f;
|
|
Uint32 ui32;
|
|
} swapper;
|
|
swapper.f = x;
|
|
swapper.ui32 = SDL_Swap32(swapper.ui32);
|
|
return swapper.f;
|
|
}
|
|
|
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
|
#define SDL_SwapLE16(X) (X)
|
|
#define SDL_SwapLE32(X) (X)
|
|
#define SDL_SwapLE64(X) (X)
|
|
#define SDL_SwapFloatLE(X) (X)
|
|
#define SDL_SwapBE16(X) SDL_Swap16(X)
|
|
#define SDL_SwapBE32(X) SDL_Swap32(X)
|
|
#define SDL_SwapBE64(X) SDL_Swap64(X)
|
|
#define SDL_SwapFloatBE(X) SDL_SwapFloat(X)
|
|
#else
|
|
#define SDL_SwapLE16(X) SDL_Swap16(X)
|
|
#define SDL_SwapLE32(X) SDL_Swap32(X)
|
|
#define SDL_SwapLE64(X) SDL_Swap64(X)
|
|
#define SDL_SwapFloatLE(X) SDL_SwapFloat(X)
|
|
#define SDL_SwapBE16(X) (X)
|
|
#define SDL_SwapBE32(X) (X)
|
|
#define SDL_SwapBE64(X) (X)
|
|
#define SDL_SwapFloatBE(X) (X)
|
|
#endif
|
|
|
|
#endif // STUB_SDL_ENDIAN_H
|