diff --git a/src/blake2/endian.h b/src/blake2/endian.h index fab1eed..631f9f6 100644 --- a/src/blake2/endian.h +++ b/src/blake2/endian.h @@ -60,6 +60,12 @@ static FORCE_INLINE uint64_t load64(const void *src) { #endif } +static FORCE_INLINE uint64_t load64np(const void *src) { + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +} + static FORCE_INLINE void store32(void *dst, uint32_t w) { #if defined(NATIVE_LITTLE_ENDIAN) memcpy(dst, &w, sizeof w); diff --git a/src/dataset.cpp b/src/dataset.cpp index 40e72b1..c55c918 100644 --- a/src/dataset.cpp +++ b/src/dataset.cpp @@ -57,14 +57,14 @@ namespace RandomX { } static FORCE_INLINE void mixCache(uint8_t* mixBlock, uint64_t& c0, uint64_t& c1, uint64_t& c2, uint64_t& c3, uint64_t& c4, uint64_t& c5, uint64_t& c6, uint64_t& c7) { - c0 ^= load64(mixBlock + 0); - c1 ^= load64(mixBlock + 8); - c2 ^= load64(mixBlock + 16); - c3 ^= load64(mixBlock + 24); - c4 ^= load64(mixBlock + 32); - c5 ^= load64(mixBlock + 40); - c6 ^= load64(mixBlock + 48); - c7 ^= load64(mixBlock + 56); + c0 ^= load64np(mixBlock + 0); + c1 ^= load64np(mixBlock + 8); + c2 ^= load64np(mixBlock + 16); + c3 ^= load64np(mixBlock + 24); + c4 ^= load64np(mixBlock + 32); + c5 ^= load64np(mixBlock + 40); + c6 ^= load64np(mixBlock + 48); + c7 ^= load64np(mixBlock + 56); } void initBlock(const Cache& cache, uint8_t* out, uint64_t blockNumber, unsigned iterations) {