From f02c1cab49976d5a7152b1046a2e68ceadf35bb0 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Sun, 14 Jun 2020 02:28:59 +0300 Subject: [PATCH] tools: make some stuff endianness-aware --- tools/aifc_decode.c | 18 +++++++++++++----- tools/aiff_extract_codebook.c | 9 +++++++-- tools/audiofile/Makefile | 2 +- tools/audiofile/audiofile.cpp | 6 +++--- tools/gen_asset_list.cpp | 9 +++++++-- tools/sdk-tools/adpcm/vadpcm.h | 2 +- tools/skyconv.c | 2 ++ 7 files changed, 34 insertions(+), 14 deletions(-) diff --git a/tools/aifc_decode.c b/tools/aifc_decode.c index 19d13c6c..102e62bf 100644 --- a/tools/aifc_decode.c +++ b/tools/aifc_decode.c @@ -19,11 +19,19 @@ typedef unsigned int u32; typedef unsigned long long u64; typedef float f32; -#define bswap16(x) __builtin_bswap16(x) -#define bswap32(x) __builtin_bswap32(x) -#define BSWAP16(x) x = __builtin_bswap16(x) -#define BSWAP32(x) x = __builtin_bswap32(x) -#define BSWAP16_MANY(x, n) for (s32 _i = 0; _i < n; _i++) BSWAP16((x)[_i]) +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define bswap16(x) (x) +# define bswap32(x) (x) +# define BSWAP16(x) +# define BSWAP32(x) +# define BSWAP16_MANY(x, n) +#else +# define bswap16(x) __builtin_bswap16(x) +# define bswap32(x) __builtin_bswap32(x) +# define BSWAP16(x) x = __builtin_bswap16(x) +# define BSWAP32(x) x = __builtin_bswap32(x) +# define BSWAP16_MANY(x, n) for (s32 _i = 0; _i < n; _i++) BSWAP16((x)[_i]) +#endif #define NORETURN __attribute__((noreturn)) #define UNUSED __attribute__((unused)) diff --git a/tools/aiff_extract_codebook.c b/tools/aiff_extract_codebook.c index 78864e38..481e3133 100644 --- a/tools/aiff_extract_codebook.c +++ b/tools/aiff_extract_codebook.c @@ -15,8 +15,13 @@ typedef int s32; typedef unsigned char u8; typedef unsigned int u32; -#define BSWAP16(x) x = __builtin_bswap16(x) -#define BSWAP32(x) x = __builtin_bswap32(x) +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define BSWAP16(x) +# define BSWAP32(x) +#else +# define BSWAP16(x) x = __builtin_bswap16(x) +# define BSWAP32(x) x = __builtin_bswap32(x) +#endif #define NORETURN __attribute__((noreturn)) #define UNUSED __attribute__((unused)) diff --git a/tools/audiofile/Makefile b/tools/audiofile/Makefile index f1868a7e..20d22a45 100644 --- a/tools/audiofile/Makefile +++ b/tools/audiofile/Makefile @@ -4,7 +4,7 @@ libaudiofile.a: audiofile.o ar rcs libaudiofile.a audiofile.o audiofile.o: audiofile.cpp audiofile.h aupvlist.h - $(CXX) -O2 -I. -c audiofile.cpp + $(CXX) -std=c++11 -O2 -I. -c audiofile.cpp clean: rm -f audiofile.o libaudiofile.a diff --git a/tools/audiofile/audiofile.cpp b/tools/audiofile/audiofile.cpp index cbfc605c..ffe960aa 100644 --- a/tools/audiofile/audiofile.cpp +++ b/tools/audiofile/audiofile.cpp @@ -5075,7 +5075,7 @@ bool ModuleState::fileModuleHandlesSeeking() const status ModuleState::setup(AFfilehandle file, Track *track) { - AFframecount fframepos = llrint(track->nextvframe * track->f.sampleRate / track->v.sampleRate); + AFframecount fframepos = std::llrint((long double)track->nextvframe * track->f.sampleRate / track->v.sampleRate); bool isReading = file->m_access == _AF_READ_ACCESS; if (!track->v.isUncompressed()) @@ -5146,11 +5146,11 @@ status ModuleState::setup(AFfilehandle file, Track *track) if (track->totalfframes == -1) track->totalvframes = -1; else - track->totalvframes = llrint(track->totalfframes * + track->totalvframes = std::llrint((long double)track->totalfframes * (track->v.sampleRate / track->f.sampleRate)); track->nextfframe = fframepos; - track->nextvframe = llrint(fframepos * track->v.sampleRate / track->f.sampleRate); + track->nextvframe = std::llrint((long double)fframepos * track->v.sampleRate / track->f.sampleRate); m_isDirty = false; diff --git a/tools/gen_asset_list.cpp b/tools/gen_asset_list.cpp index 3096293e..c1d0e901 100644 --- a/tools/gen_asset_list.cpp +++ b/tools/gen_asset_list.cpp @@ -18,8 +18,13 @@ #include using namespace std; -#define BSWAP32(x) ((((x) >> 24) & 0xff) | (((x) >> 8) & 0xff00) | (((x) << 8) & 0xff0000) | (((x) << 24) & 0xff000000U)) -#define BSWAP16(x) ((((x) >> 8) & 0xff) | (((x) << 8) & 0xff00)) +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define BSWAP32(x) ((((x) >> 24) & 0xff) | (((x) >> 8) & 0xff00) | (((x) << 8) & 0xff0000) | (((x) << 24) & 0xff000000U)) +# define BSWAP16(x) ((((x) >> 8) & 0xff) | (((x) << 8) & 0xff00)) +#else +# define BSWAP32(x) (x) +# define BSWAP16(x) (x) +#endif const char* OUTPUT_FILE = "assets.json"; const size_t CHUNK_SIZE = 16; diff --git a/tools/sdk-tools/adpcm/vadpcm.h b/tools/sdk-tools/adpcm/vadpcm.h index cac44861..de015e85 100644 --- a/tools/sdk-tools/adpcm/vadpcm.h +++ b/tools/sdk-tools/adpcm/vadpcm.h @@ -14,7 +14,7 @@ typedef unsigned long long u64; typedef float f32; typedef double f64; -#ifdef __sgi +#if defined(__sgi) || (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) # define BSWAP16(x) # define BSWAP32(x) # define BSWAP16_MANY(x, n) diff --git a/tools/skyconv.c b/tools/skyconv.c index a66c5c1b..778295db 100644 --- a/tools/skyconv.c +++ b/tools/skyconv.c @@ -387,7 +387,9 @@ void combine_skybox(const char *input, const char *output) { uint32_t table[W*H]; if (fread(table, sizeof(table), 1, file) != 1) goto fail; + #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ reverse_endian((unsigned char *) table, W*H*4); + #endif uint32_t base = table[0]; for (int i = 0; i < W*H; i++) {