aboutsummaryrefslogtreecommitdiff
path: root/m4/tuklib_integer.m4 (follow)
AgeCommit message (Collapse)AuthorFilesLines
2023-10-18Build: Enabled unaligned access by default on PowerPC64LE and some RISC-V.Lasse Collin1-7/+27
PowerPC64LE wasn't tested but it seems like a safe change. POWER8 supports unaligned access in little endian mode. Testing on godbolt.org shows that GCC uses unaligned access by default. The RISC-V macro __riscv_misaligned_fast is very new and not in any stable compiler release yet. Documentation in INSTALL was updated to match. Documentation about an autodetection bug when using ARM64 GCC with -mstrict-align was added to INSTALL. CMake files weren't updated yet.
2023-03-17Build: Update comments about unaligned access to mention 64-bit.Lasse Collin1-2/+2
2022-10-05tuklib_integer: Add 64-bit endianness-converting reads and writes.Lasse Collin1-4/+4
Also update the comment in liblzma's memcmplen.h. Thanks to Michał Górny for the original patch for the reads.
2020-02-21tuklib_integer.m4: Optimize the check order.Lasse Collin1-27/+29
The __builtin byteswapping is the preferred one so check for it first.
2019-12-31Revise tuklib_integer.h and .m4.Lasse Collin1-1/+45
Add a configure option --enable-unsafe-type-punning to get the old non-conforming memory access methods. It can be useful with old compilers or in some other less typical situations but shouldn't normally be used. Omit the packed struct trick for unaligned access. While it's best in some cases, this is simpler. If the memcpy trick doesn't work, one can request unsafe type punning from configure. Because CRC32/CRC64 code needs fast aligned reads, if no very safe way to do it is found, type punning is used as a fallback. This sucks but since it currently works in practice, it seems to be the least bad option. It's never needed with GCC >= 4.7 or Clang >= 3.6 since these support __builtin_assume_aligned and thus fast aligned access can be done with the memcpy trick. Other things: - Support GCC/Clang __builtin_bswapXX - Cleaner bswap fallback macros - Minor cleanups
2019-06-01tuklib_integer: Autodetect support for unaligned access on ARM.Lasse Collin1-0/+11
The result is used as the default for --enable-unaligned-access. The test should work with GCC and Clang.
2014-11-17Build: Replace obsolete AC_HELP_STRING with AS_HELP_STRING.Lasse Collin1-1/+1
2009-10-04Use a tuklib module for integer handling.Lasse Collin1-0/+74
This replaces bswap.h and integer.h. The tuklib module uses <byteswap.h> on GNU, <sys/endian.h> on *BSDs and <sys/byteorder.h> on Solaris, which may contain optimized code like inline assembly.