2
0
mirror of https://github.com/vasi/pixz synced 2024-10-30 15:21:41 +00:00

Avoid unaligned accesses

Architectures like SPARC do not allow unaligned accesses. Avoid them by
memcpy()ing the data to an aligned buffer. On x86 systems where
unaligned loads are fast, the memcpy() will be compiled away and the
same code generated as before.
This commit is contained in:
Matt Turner 2019-09-01 23:58:26 -07:00
parent 00e62fe45a
commit 8b9a198d86

View File

@ -13,6 +13,7 @@ void xle64enc(uint8_t *d, uint64_t n) {
#elif defined(__linux__) || defined(__FreeBSD__)
#include <stdint.h>
#include <string.h>
#ifdef __linux__
#include <endian.h>
#include <byteswap.h>
@ -37,11 +38,14 @@ void xle64enc(uint8_t *d, uint64_t n) {
#endif
uint64_t xle64dec(const uint8_t *d) {
return le64toh(*(uint64_t*)d);
uint64_t tmp;
memcpy(&tmp, d, sizeof(tmp));
return le64toh(tmp);
}
void xle64enc(uint8_t *d, uint64_t n) {
*(uint64_t*)d = htole64(n);
uint64_t tmp = htole64(n);
memcpy(d, &tmp, sizeof(tmp));
}
#else