summaryrefslogtreecommitdiff
path: root/m4/align.m4
blob: 25e1ee2d489ac3ed5035197c8f93695a666b4187 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# align.m4
dnl Copyright (C) 2008 Christian Grothoff
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License.  As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.

# Define HAVE_UNALIGNED_64_ACCESS if reading a 64-bit value at a 32-bit aligned offset works
# Note that the program intentionally causes a SIGBUS (so you may
# see some message along those lines on the console).
AC_DEFUN([AC_UNALIGNED_64_ACCESS],
[AC_CACHE_CHECK([whether unaligned 64-bit access works],
 ac_cv_unaligned_64_access, 
 [
 AC_RUN_IFELSE([AC_LANG_PROGRAM([[struct S { int a,b,c;};]],
                               [[struct S s = {0,0,0}; long long * p = (long long *) &s.b; 
			         void *bp = malloc (50); 
 				 long long x = *p; 
				 long long *be = (long long*) &bp[1];
				 long long y = *be;
				 return (int) x*y;]]),
 ac_cv_unaligned_64_access=yes,
 ac_cv_unaligned_64_access=no,
 ac_cv_unaligned_64_access=no])
 ])
 case "$ac_cv_unaligned_64_access" in
  *yes) value=1;;
  *) value=0;;
 esac
 AC_DEFINE_UNQUOTED([HAVE_UNALIGNED_64_ACCESS], $value, [We can access-64 bit values that are only 32-bit aligned])
])