| # |
| # 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 <byteswap.h> |
| 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 |