GetCRC32: Fix the hash for the last byte(s)

This fixes issue 8227
https://code.google.com/p/dolphin-emu/issues/detail?id=8227
This commit is contained in:
mimimi085181 2015-02-17 22:34:45 +01:00
parent 127e742992
commit f6c9b8243e
1 changed files with 7 additions and 2 deletions

View File

@ -252,9 +252,14 @@ u64 GetCRC32(const u8 *src, u32 len, u32 samples)
if (data < end - Step * 2) if (data < end - Step * 2)
h[2] = _mm_crc32_u64(h[2], data[Step * 2]); h[2] = _mm_crc32_u64(h[2], data[Step * 2]);
const u8 *data2 = (const u8*)end; if (len & 7)
{
u64 temp = 0;
memcpy(&temp, end, len & 7);
h[0] = _mm_crc32_u64(h[0], temp);
}
// FIXME: is there a better way to combine these partial hashes? // FIXME: is there a better way to combine these partial hashes?
h[0] = _mm_crc32_u64(h[0], u64(data2[0]));
return h[0] + (h[1] << 10) + (h[2] << 21) + (h[3] << 32); return h[0] + (h[1] << 10) + (h[2] << 21) + (h[3] << 32);
#else #else
return 0; return 0;