|
|
@@ -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
|
|
|
+])
|