On Fri, Jun 2, 2017 at 1:17 PM, demerphq <demerphq@xxxxxxxxx> wrote: > Most hash function implementations have code like the following > (extracted and reduced from hv_macro.h in perl.git [which only > supports little-endian hash functions]): Yes. Please do *not* try to make things overly portable by adding random memcpy() functions. Yes, many compilers will do ok with it, and generate the right code (single load from an unaligned address). But many won't. Gcc completely screws it up in older versions on ARM, for example. Dereferencing an unaligned pointer may be "undefined" in some technical meaning, but it sure as hell isn't undefined in reality, and compilers that willfully do stupid things should not be catered to overly. Reality is a lot more important. And I think gcc can be tweaked to use "movbe" on x86 with the right magic incantation (ie not just __builtin_bswap32(), but also the switch to enable the new instructions). So having code to detect gcc and using __builtin_bswap32() would indeed be a good thing. Linus