Fix CRC errors on MacOS(/Linux?) (#375)

Fixes graphic packs (like FPS++) not working even when enabled.
This commit is contained in:
Tillsunset 2022-10-15 06:38:06 -05:00 committed by GitHub
parent df0e2f7881
commit f0938e1a23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 23 deletions

View File

@ -322,7 +322,7 @@ unsigned int crc32_calc_slice_by_8(unsigned int previousCrc32, const void* data,
// process eight bytes at once (Slicing-by-8) // process eight bytes at once (Slicing-by-8)
while (length >= 8) while (length >= 8)
{ {
#if __BYTE_ORDER == __BIG_ENDIAN if constexpr (std::endian::native == std::endian::big){
uint32_t one = *current++ ^ swap(crc); uint32_t one = *current++ ^ swap(crc);
uint32_t two = *current++; uint32_t two = *current++;
crc = Crc32Lookup[0][two & 0xFF] ^ crc = Crc32Lookup[0][two & 0xFF] ^
@ -333,7 +333,9 @@ unsigned int crc32_calc_slice_by_8(unsigned int previousCrc32, const void* data,
Crc32Lookup[5][(one >> 8) & 0xFF] ^ Crc32Lookup[5][(one >> 8) & 0xFF] ^
Crc32Lookup[6][(one >> 16) & 0xFF] ^ Crc32Lookup[6][(one >> 16) & 0xFF] ^
Crc32Lookup[7][(one >> 24) & 0xFF]; Crc32Lookup[7][(one >> 24) & 0xFF];
#else }
else if constexpr (std::endian::native == std::endian::little)
{
uint32_t one = *current++ ^ crc; uint32_t one = *current++ ^ crc;
uint32_t two = *current++; uint32_t two = *current++;
crc = Crc32Lookup[0][(two >> 24) & 0xFF] ^ crc = Crc32Lookup[0][(two >> 24) & 0xFF] ^
@ -344,7 +346,10 @@ unsigned int crc32_calc_slice_by_8(unsigned int previousCrc32, const void* data,
Crc32Lookup[5][(one >> 16) & 0xFF] ^ Crc32Lookup[5][(one >> 16) & 0xFF] ^
Crc32Lookup[6][(one >> 8) & 0xFF] ^ Crc32Lookup[6][(one >> 8) & 0xFF] ^
Crc32Lookup[7][one & 0xFF]; Crc32Lookup[7][one & 0xFF];
#endif }
else {
cemu_assert(false);
}
length -= 8; length -= 8;
} }