Mercurial > hg > openttd
changeset 8132:07f1dd54eb1a draft
(svn r11694) -Codechange: move more endianness related stuff to endian_func.hpp.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Tue, 25 Dec 2007 13:28:09 +0000 |
parents | e300ac8001ae |
children | 455889a24c77 |
files | src/core/bitmath_func.hpp src/core/endian_func.hpp src/md5.cpp src/network/network_udp.cpp src/saveload.cpp src/screenshot.cpp src/smallmap_gui.cpp src/sound/cocoa_s.cpp src/spriteloader/png.cpp src/stdafx.h src/strings.cpp |
diffstat | 11 files changed, 81 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/bitmath_func.hpp +++ b/src/core/bitmath_func.hpp @@ -291,4 +291,34 @@ for (i = 0; b != 0; i++, b >>= 1) \ if (b & 1) + +#if defined(__APPLE__) + /* Make endian swapping use Apple's macros to increase speed + * (since it will use hardware swapping if available). + * Even though they should return uint16 and uint32, we get + * warnings if we don't cast those (why?) */ + #define BSWAP32(x) ((uint32)Endian32_Swap(x)) + #define BSWAP16(x) ((uint16)Endian16_Swap(x)) +#else + /** + * Perform a 32 bits endianness bitswap on x. + * @param x the variable to bitswap + * @return the bitswapped value. + */ + static inline uint32 BSWAP32(uint32 x) + { + return ((x >> 24) & 0xFF) | ((x >> 8) & 0xFF00) | ((x << 8) & 0xFF0000) | ((x << 24) & 0xFF000000); + } + + /** + * Perform a 16 bits endianness bitswap on x. + * @param x the variable to bitswap + * @return the bitswapped value. + */ + static inline uint16 BSWAP16(uint16 x) + { + return (x >> 8) | (x << 8); + } +#endif /* __APPLE__ */ + #endif /* BITMATH_FUNC_HPP */
--- a/src/core/endian_func.hpp +++ b/src/core/endian_func.hpp @@ -5,6 +5,49 @@ #ifndef ENDIAN_FUNC_H #define ENDIAN_FUNC_H +#include "bitmath_func.hpp" + +#if defined(ARM) || defined(__arm__) || defined(__alpha__) + #define OTTD_ALIGNMENT +#endif + +/* Windows has always LITTLE_ENDIAN */ +#if defined(WIN32) || defined(__OS2__) || defined(WIN64) + #define TTD_LITTLE_ENDIAN +#elif !defined(TESTING) + /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */ + #if defined(STRGEN) + #include "/endian_host.h" + #else + #include "endian_target.h" + #endif +#endif /* WIN32 || __OS2__ || WIN64 */ + +/* Setup alignment and conversion macros */ +#if defined(TTD_BIG_ENDIAN) + #define TO_BE32X(x) (x) + #define FROM_BE32(x) (x) + #define TO_BE32(x) (x) + #define FROM_BE16(x) (x) + #define TO_BE16(x) (x) + #define TO_LE32X(x) BSWAP32(x) + static inline uint32 FROM_LE32(uint32 x) { return BSWAP32(x); } + static inline uint32 TO_LE32(uint32 x) { return BSWAP32(x); } + static inline uint16 FROM_LE16(uint16 x) { return BSWAP16(x); } + static inline uint16 TO_LE16(uint16 x) { return BSWAP16(x); } +#else + #define TO_BE32X(x) BSWAP32(x) + static inline uint32 FROM_BE32(uint32 x) { return BSWAP32(x); } + static inline uint32 TO_BE32(uint32 x) { return BSWAP32(x); } + static inline uint16 FROM_BE16(uint16 x) { return BSWAP16(x); } + static inline uint16 TO_BE16(uint16 x) { return BSWAP16(x); } + #define TO_LE32X(x) (x) + #define FROM_LE32(x) (x) + #define TO_LE32(x) (x) + #define FROM_LE16(x) (x) + #define TO_LE16(x) (x) +#endif /* TTD_BIG_ENDIAN */ + static inline uint16 ReadLE16Aligned(const void *x) { return FROM_LE16(*(const uint16*)x); @@ -19,4 +62,4 @@ #endif } -#endif /* ENDIAN_FUNC_H */ +#endif /* ENDIAN_FUNC_HPP */
--- a/src/md5.cpp +++ b/src/md5.cpp @@ -56,6 +56,7 @@ */ #include "stdafx.h" +#include "core/endian_func.hpp" #include "md5.h" #include <string.h>
--- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -19,6 +19,7 @@ #include "network_udp.h" #include "../variables.h" #include "../newgrf_config.h" +#include "../core/endian_func.hpp" #include "core/udp.h"
--- a/src/saveload.cpp +++ b/src/saveload.cpp @@ -30,6 +30,7 @@ #include "gfx_func.h" #include "core/alloc_func.hpp" #include "functions.h" +#include "core/endian_func.hpp" #include <list> extern const uint16 SAVEGAME_VERSION = 83;
--- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -16,6 +16,7 @@ #include "strings_func.h" #include "zoom_func.h" #include "core/alloc_func.hpp" +#include "core/endian_func.hpp" char _screenshot_format_name[8]; uint _num_screenshot_formats;
--- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -27,6 +27,7 @@ #include "tunnelbridge_map.h" #include "strings_func.h" #include "zoom_func.h" +#include "core/endian_func.hpp" static const Widget _smallmap_widgets[] = {
--- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -22,6 +22,7 @@ #include "../debug.h" #include "../driver.h" #include "../mixer.h" +#include "../core/endian_func.hpp" #include "cocoa_s.h"
--- a/src/spriteloader/png.cpp +++ b/src/spriteloader/png.cpp @@ -10,6 +10,7 @@ #include "../variables.h" #include "../debug.h" #include "../core/alloc_func.hpp" +#include "../core/endian_func.hpp" #include "png.hpp" #include <png.h>
--- a/src/stdafx.h +++ b/src/stdafx.h @@ -89,13 +89,6 @@ #if defined(__APPLE__) #include "os/macosx/osx_stdafx.h" - /* Make endian swapping use Apple's macros to increase speed (since it will use hardware swapping if available) - * Even though they should return uint16 and uint32, we get warnings if we don't cast those (why?) */ - #define BSWAP32(x) ((uint32)Endian32_Swap(x)) - #define BSWAP16(x) ((uint16)Endian16_Swap(x)) -#else - #define BSWAP32(x) ((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) << 8) & 0xFF0000) | (((x) << 24) & 0xFF000000)) - #define BSWAP16(x) ((x) >> 8 | (x) << 8) #endif /* __APPLE__ */ #if defined(PSP) @@ -241,20 +234,6 @@ #endif /* WIN32 */ #endif /* STRGEN */ -/* Windows has always LITTLE_ENDIAN */ -#if defined(WIN32) || defined(__OS2__) || defined(WIN64) - #define TTD_LITTLE_ENDIAN -#elif defined(TESTING) - /* Do noting */ -#else - /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */ - #if defined(STRGEN) - #include "endian_host.h" - #else - #include "endian_target.h" - #endif -#endif /* WIN32 || __OS2__ || WIN64 */ - #if defined(WIN32) || defined(WIN64) || defined(__OS2__) && !defined(__INNOTEK_LIBC__) #define PATHSEP "\\" #define PATHSEPCHAR '\\' @@ -281,35 +260,6 @@ typedef signed __int64 int64; #endif -#if defined(ARM) || defined(__arm__) || defined(__alpha__) - #define OTTD_ALIGNMENT -#endif - -/* Setup alignment and conversion macros */ -#if defined(TTD_BIG_ENDIAN) - #define TO_BE32X(x) (x) - #define FROM_BE32(x) (x) - #define TO_BE32(x) (x) - #define FROM_BE16(x) (x) - #define TO_BE16(x) (x) - #define TO_LE32X(x) BSWAP32(x) - static inline uint32 FROM_LE32(uint32 x) { return BSWAP32(x); } - static inline uint32 TO_LE32(uint32 x) { return BSWAP32(x); } - static inline uint16 FROM_LE16(uint16 x) { return BSWAP16(x); } - static inline uint16 TO_LE16(uint16 x) { return BSWAP16(x); } -#else - #define TO_BE32X(x) BSWAP32(x) - static inline uint32 FROM_BE32(uint32 x) { return BSWAP32(x); } - static inline uint32 TO_BE32(uint32 x) { return BSWAP32(x); } - static inline uint16 FROM_BE16(uint16 x) { return BSWAP16(x); } - static inline uint16 TO_BE16(uint16 x) { return BSWAP16(x); } - #define TO_LE32X(x) (x) - #define FROM_LE32(x) (x) - #define TO_LE32(x) (x) - #define FROM_LE16(x) (x) - #define TO_LE16(x) (x) -#endif /* TTD_BIG_ENDIAN */ - #if !defined(WITH_PERSONAL_DIR) #define PERSONAL_DIR "" #endif