[tools] missing-macros: add as-unaligned-access.m4
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 01:23:44 +0000 (01:23 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 01:23:44 +0000 (01:23 +0000)
SVN-Revision: 24878

tools/missing-macros/Makefile
tools/missing-macros/src/README
tools/missing-macros/src/m4/as-unaligned-access.m4 [new file with mode: 0644]

index 33417b1..85f8fa1 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=missing-macros
-PKG_VERSION:=8
+PKG_VERSION:=9
 
 include $(INCLUDE_DIR)/host-build.mk
 
index 8ee7f74..d1202fb 100644 (file)
@@ -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 (file)
index 0000000..ede8bd2
--- /dev/null
@@ -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
+])