# # SYNOPSIS # # TUKLIB_INTEGER # # DESCRIPTION # # Checks for tuklib_integer.h: # - Endianness # - Does operating system provide byte swapping macros # - Does the hardware support fast unaligned access to 16-bit # and 32-bit integers # # COPYING # # Author: Lasse Collin # # This file has been put into the public domain. # You can do whatever you want with this file. # AC_DEFUN_ONCE([TUKLIB_INTEGER], [ AC_REQUIRE([TUKLIB_COMMON]) AC_REQUIRE([AC_C_BIGENDIAN]) AC_CHECK_HEADERS([byteswap.h sys/endian.h sys/byteorder.h], [break]) # Even if we have byteswap.h, we may lack the specific macros/functions. if test x$ac_cv_header_byteswap_h = xyes ; then m4_foreach([FUNC], [bswap_16,bswap_32,bswap_64], [ AC_MSG_CHECKING([if FUNC is available]) AC_LINK_IFELSE([AC_LANG_SOURCE([ #include int main(void) { FUNC[](42); return 0; } ])], [ AC_DEFINE(HAVE_[]m4_toupper(FUNC), [1], [Define to 1 if] FUNC [is available.]) AC_MSG_RESULT([yes]) ], [AC_MSG_RESULT([no])]) ])dnl fi AC_MSG_CHECKING([if unaligned memory access should be used]) AC_ARG_ENABLE([unaligned-access], AC_HELP_STRING([--enable-unaligned-access], [Enable if the system supports *fast* unaligned memory access with 16-bit and 32-bit integers. By default, this is enabled only on x86, x86_64, and big endian PowerPC.]), [], [enable_unaligned_access=auto]) if test "x$enable_unaligned_access" = xauto ; then # TODO: There may be other architectures, on which unaligned access # is OK. case $host_cpu in i?86|x86_64|powerpc|powerpc64) enable_unaligned_access=yes ;; *) enable_unaligned_access=no ;; esac fi if test "x$enable_unaligned_access" = xyes ; then AC_DEFINE([TUKLIB_FAST_UNALIGNED_ACCESS], [1], [Define to 1 if the system supports fast unaligned access to 16-bit and 32-bit integers.]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ])dnl