From 1e8e6b4c298d1346ccdb3e85a7daf38bc614ffad Mon Sep 17 00:00:00 2001 From: Paulo Medeiros Date: Sat, 9 Nov 2024 01:00:10 -0100 Subject: [PATCH 1/8] Fix PowerPC --- mojoshader_effects.c | 7 ++++++- mojoshader_internal.h | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index 90fda18..e4a7a60 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -398,7 +398,11 @@ static void readvalue(const uint8 *base, const uint32 siz = 4 * numobjects; value->values = m(siz, d); memcpy(value->values, valptr, siz); - + #if ((defined(__powerpc__) || defined(__POWERPC__))) // TODO: Check Endian for PPC64LE + int valI; + for (valI=0;valI < (value->value_count);valI++) { + value->valuesI[valI] = SWAP32(value->valuesI[valI]); + } for (i = 0; i < value->value_count; i++) objects[value->valuesI[i]].type = (MOJOSHADER_symbolType) type; } // else @@ -1961,3 +1965,4 @@ void MOJOSHADER_effectEnd(MOJOSHADER_effect *effect) // end of mojoshader_effects.c ... + diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 711080b..72c0d27 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -293,10 +293,10 @@ typedef uint64_t uint64; #define STATICARRAYLEN(x) ( (sizeof ((x))) / (sizeof ((x)[0])) ) - +// TODO: Check Endian for PPC64LE // Byteswap magic... -#if ((defined __GNUC__) && (defined __POWERPC__)) +#if ((defined __GNUC__) && ((defined __POWERPC__) || defined __powerpc__)) static inline uint32 SWAP32(uint32 x) { __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (x) : "r" (&x)); @@ -307,7 +307,7 @@ typedef uint64_t uint64; __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (x) : "r" (&x)); return x; } // SWAP16 -#elif defined(__POWERPC__) +#elif defined(__POWERPC__) | defined(__powerpc__) static inline uint32 SWAP32(uint32 x) { return ( (((x) >> 24) & 0x000000FF) | (((x) >> 8) & 0x0000FF00) | From 75f5bdbda9aeb43cf498672d8c62a2878db9b774 Mon Sep 17 00:00:00 2001 From: Paulo Medeiros Date: Sat, 9 Nov 2024 01:20:50 -0100 Subject: [PATCH 2/8] Add Endian Checks --- mojoshader_effects.c | 2 +- mojoshader_internal.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index e4a7a60..94faad5 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -398,7 +398,7 @@ static void readvalue(const uint8 *base, const uint32 siz = 4 * numobjects; value->values = m(siz, d); memcpy(value->values, valptr, siz); - #if ((defined(__powerpc__) || defined(__POWERPC__))) // TODO: Check Endian for PPC64LE + #if ((defined(__powerpc__) || defined(__POWERPC__)) && defined(MOJOSHADER_BIG_ENDIAN)) // TODO: Check Endian for PPC64LE int valI; for (valI=0;valI < (value->value_count);valI++) { value->valuesI[valI] = SWAP32(value->valuesI[valI]); diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 37ff530..cf29e61 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -137,7 +137,7 @@ typedef Uint64 uint64; #include #define MOJOSHADER_BIG_ENDIAN (__BYTE_ORDER == __BIG_ENDIAN) #else -#define MOJOSHADER_BIG_ENDIAN (defined(__POWERPC__)) +#define MOJOSHADER_BIG_ENDIAN (defined(__POWERPC__) || defined(__powerpc__)) #endif #endif /* MOJOSHADER_USE_SDL_STDLIB */ @@ -319,7 +319,7 @@ typedef uint64_t uint64; __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (x) : "r" (&x)); return x; } // SWAP16 -#elif (defined(__POWERPC__) || defined(__powerpc__)) && MOJOSHADER_BIG_ENDIAN +#elif (defined(__POWERPC__) || defined(__powerpc__)) && defined(MOJOSHADER_BIG_ENDIAN) static inline uint32 SWAP32(uint32 x) { return ( (((x) >> 24) & 0x000000FF) | (((x) >> 8) & 0x0000FF00) | From c3065efc7529ba4fdac3d8f44d4b4fcf35fc1995 Mon Sep 17 00:00:00 2001 From: Paulo Medeiros Date: Sat, 9 Nov 2024 01:21:54 -0100 Subject: [PATCH 3/8] Remove PPC64LE TODOs --- mojoshader_effects.c | 2 +- mojoshader_internal.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index 94faad5..5f77537 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -398,7 +398,7 @@ static void readvalue(const uint8 *base, const uint32 siz = 4 * numobjects; value->values = m(siz, d); memcpy(value->values, valptr, siz); - #if ((defined(__powerpc__) || defined(__POWERPC__)) && defined(MOJOSHADER_BIG_ENDIAN)) // TODO: Check Endian for PPC64LE + #if ((defined(__powerpc__) || defined(__POWERPC__)) && defined(MOJOSHADER_BIG_ENDIAN)) int valI; for (valI=0;valI < (value->value_count);valI++) { value->valuesI[valI] = SWAP32(value->valuesI[valI]); diff --git a/mojoshader_internal.h b/mojoshader_internal.h index cf29e61..8969588 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -305,7 +305,6 @@ typedef uint64_t uint64; #define STATICARRAYLEN(x) ( (sizeof ((x))) / (sizeof ((x)[0])) ) -// TODO: Check Endian for PPC64LE // Byteswap magic... #if ((defined __GNUC__) && ((defined __POWERPC__) || defined __powerpc__)) From 9b8161bebf3fad8f74f4d5699750cb47c97ef969 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 8 Nov 2024 21:24:38 -0500 Subject: [PATCH 4/8] Update mojoshader_effects.c --- mojoshader_effects.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index 5f77537..4aae247 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -398,7 +398,7 @@ static void readvalue(const uint8 *base, const uint32 siz = 4 * numobjects; value->values = m(siz, d); memcpy(value->values, valptr, siz); - #if ((defined(__powerpc__) || defined(__POWERPC__)) && defined(MOJOSHADER_BIG_ENDIAN)) + #if MOJOSHADER_BIG_ENDIAN int valI; for (valI=0;valI < (value->value_count);valI++) { value->valuesI[valI] = SWAP32(value->valuesI[valI]); From b32bf1aaae98e15e301e4103486bb177a1ef5b78 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 8 Nov 2024 21:24:44 -0500 Subject: [PATCH 5/8] Update mojoshader_effects.c --- mojoshader_effects.c | 1 - 1 file changed, 1 deletion(-) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index 4aae247..a41969a 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -1965,4 +1965,3 @@ void MOJOSHADER_effectEnd(MOJOSHADER_effect *effect) // end of mojoshader_effects.c ... - From 977867221aa24fcd702f4977b9d5cdfd7a7cfd32 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 8 Nov 2024 21:24:51 -0500 Subject: [PATCH 6/8] Update mojoshader_internal.h --- mojoshader_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 8969588..7846829 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -318,7 +318,7 @@ typedef uint64_t uint64; __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (x) : "r" (&x)); return x; } // SWAP16 -#elif (defined(__POWERPC__) || defined(__powerpc__)) && defined(MOJOSHADER_BIG_ENDIAN) +#elif MOJOSHADER_BIG_ENDIAN static inline uint32 SWAP32(uint32 x) { return ( (((x) >> 24) & 0x000000FF) | (((x) >> 8) & 0x0000FF00) | From 3f0d90fa80e36aaec8c0eb9165aadb342ca512ab Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 8 Nov 2024 21:26:09 -0500 Subject: [PATCH 7/8] Update mojoshader_internal.h --- mojoshader_internal.h | 1 + 1 file changed, 1 insertion(+) diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 7846829..61c9891 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -305,6 +305,7 @@ typedef uint64_t uint64; #define STATICARRAYLEN(x) ( (sizeof ((x))) / (sizeof ((x)[0])) ) + // Byteswap magic... #if ((defined __GNUC__) && ((defined __POWERPC__) || defined __powerpc__)) From e878e0e8d6c436aa0bdfe16a72bd49fd864cdbfa Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 8 Nov 2024 21:27:05 -0500 Subject: [PATCH 8/8] Apply suggestions from code review --- mojoshader_effects.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mojoshader_effects.c b/mojoshader_effects.c index a41969a..1b24fd3 100644 --- a/mojoshader_effects.c +++ b/mojoshader_effects.c @@ -403,6 +403,7 @@ static void readvalue(const uint8 *base, for (valI=0;valI < (value->value_count);valI++) { value->valuesI[valI] = SWAP32(value->valuesI[valI]); } + #endif for (i = 0; i < value->value_count; i++) objects[value->valuesI[i]].type = (MOJOSHADER_symbolType) type; } // else