summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2005-12-22 03:16:42 +0000
committerDavid Schleef <ds@schleef.org>2005-12-22 03:16:42 +0000
commite961b0b30315de49b3bc126616eb06d73610e7d6 (patch)
tree6f9349a1e250a6d2b138432e7dc117a13ba4d26e /m4
parent89eb57102c656e1a962152b53563c7bd8ff2a34f (diff)
downloadliboil-e961b0b30315de49b3bc126616eb06d73610e7d6.tar.gz
* m4/as-unaligned-access.m4: New macro.
Diffstat (limited to 'm4')
-rw-r--r--m4/as-unaligned-access.m441
1 files changed, 41 insertions, 0 deletions
diff --git a/m4/as-unaligned-access.m4 b/m4/as-unaligned-access.m4
new file mode 100644
index 0000000..a12be0e
--- /dev/null
+++ b/m4/as-unaligned-access.m4
@@ -0,0 +1,41 @@
+dnl AS_UNALIGNED_ACCESS
+
+dnl check if unaligned memory access works correctly
+AC_DEFUN([AS_UNALIGNED_ACCESS], [
+ AC_MSG_CHECKING([if unaligned memory access works correctly])
+ if test x"$as_cv_unaligned_access" = x ; then
+ case $host in
+ alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*)
+ _AS_ECHO_N([(blacklisted) ])
+ as_cv_unaligned_access=no
+ ;;
+ i?86*|powerpc*|m68k*)
+ _AS_ECHO_N([(whitelisted) ])
+ as_cv_unaligned_access=yes
+ ;;
+ esac
+ else
+ _AS_ECHO_N([(cached) ])
+ fi
+ if test x"$as_cv_unaligned_access" = x ; then
+ AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ char array[] = "ABCDEFGH";
+ unsigned int iarray[2];
+ memcpy(iarray,array,8);
+#define GET(x) (*(unsigned int *)((char *)iarray + (x)))
+ if(GET(0) != 0x41424344 && GET(0) != 0x44434241) return 1;
+ if(GET(1) != 0x42434445 && GET(1) != 0x45444342) return 1;
+ if(GET(2) != 0x43444546 && GET(2) != 0x46454443) return 1;
+ if(GET(3) != 0x44454647 && GET(3) != 0x47464544) return 1;
+ return 0;
+}
+ ], as_cv_unaligned_access="yes", as_cv_unaligned_access="no")
+ fi
+ AC_MSG_RESULT($as_cv_unaligned_access)
+ if test "$as_cv_unaligned_access" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_UNALIGNED_ACCESS, 1,
+ [defined if unaligned memory access works correctly])
+ fi
+])