From 541bff098ea1ef2c9002b63dd8247cc99b4eade6 Mon Sep 17 00:00:00 2001
From: jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 2 Jan 2011 01:23:44 +0000
Subject: [tools] missing-macros: add as-unaligned-access.m4

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24878 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 tools/missing-macros/src/README                    |  6 ++++
 tools/missing-macros/src/m4/as-unaligned-access.m4 | 41 ++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 tools/missing-macros/src/m4/as-unaligned-access.m4

(limited to 'tools/missing-macros/src')

diff --git a/tools/missing-macros/src/README b/tools/missing-macros/src/README
index 8ee7f7424..d1202fb79 100644
--- a/tools/missing-macros/src/README
+++ b/tools/missing-macros/src/README
@@ -79,6 +79,12 @@ Autostars m4 macro for versioning.
   as-version.m4
 
 
+From liboil:
+Check if unaligned memory access works correctly.
+
+  as-unaligned-access.m4
+
+
 From OpenWrt:
 Always disable GTK docs.
 
diff --git a/tools/missing-macros/src/m4/as-unaligned-access.m4 b/tools/missing-macros/src/m4/as-unaligned-access.m4
new file mode 100644
index 000000000..ede8bd2a9
--- /dev/null
+++ b/tools/missing-macros/src/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*|x86_64|amd64|powerpc*|m68k*|cris*)
+        _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
+])
-- 
cgit v1.2.3