RE: [PATCH v8 01/12] bswap: add 64 bit endianness helper get_be64
From: Ben Peart <hidden>
Date: 2017-09-23 23:31:58
Thanks, Ben
quoted hunk ↗ jump to hunk
-----Original Message----- From: Martin Ågren [mailto:martin.agren@gmail.com] Sent: Friday, September 22, 2017 7:37 PM To: Ben Peart <redacted> Cc: David Turner <redacted>; Ævar Arnfjörð Bjarmason [off-list ref]; Christian Couder [off-list ref]; git@vger.kernel.org; Junio C Hamano [off-list ref]; Johannes Schindelin [off-list ref]; Nguyễn Thái Ngọc Duy [off-list ref]; Jeff King [off-list ref] Subject: Re: [PATCH v8 01/12] bswap: add 64 bit endianness helper get_be64 On 22 September 2017 at 18:35, Ben Peart [off-list ref] wrote:quoted
Add a new get_be64 macro to enable 64 bit endian conversions on memory that may or may not be aligned.I needed this to compile and pass the tests with NO_UNALIGNED_LOADS. Martindiff --git a/compat/bswap.h b/compat/bswap.h index 6b22c4621..9dc79bdf5100644--- a/compat/bswap.h +++ b/compat/bswap.h@@ -183,8 +183,8 @@ static inline uint32_t get_be32(const void *ptr) staticinline uint64_t get_be64(const void *ptr) { const unsigned char *p = ptr; - return (uint64_t)get_be32(p[0]) << 32 | - (uint64_t)get_be32(p[4]) << 0; + return (uint64_t)get_be32(p + 0) << 32 | + (uint64_t)get_be32(p + 4) << 0;
This is surprising. Every other function in the file uses the p[x] syntax. Just for consistency, is there a way to stick to that syntax but still make it work correctly? Is there a typecast that can make it work?
} static inline void put_be32(void *ptr, uint32_t value) -- 2.14.1.727.g9ddaf86