# HG changeset patch # User Paul Eggert # Date 1295326463 28800 # Node ID 19348bd13f8179cdbcf21c5a45ab23ce430aa7ca # Parent 176503f61eb10966ed4fea2098ff5d349022b779 Improve performance on non-GCC hosts with __aligned__. diff -r 176503f61eb1 -r 19348bd13f81 ChangeLog --- a/ChangeLog Mon Jan 17 20:41:41 2011 -0800 +++ b/ChangeLog Mon Jan 17 20:54:23 2011 -0800 @@ -1,3 +1,10 @@ +2011-01-18 Paul Eggert + + * configure.in (HAVE_ATTRIBUTE_ALIGNED): Arrange for this to be + defined if the compiler supports GCC-style __attribute__ + ((__aligned__ ...)). IBM AIX and Oracle Solaris Studio support + this syntax. + 2011-01-17 Paul Eggert Makefile.in: tidy up the building of lib diff -r 176503f61eb1 -r 19348bd13f81 configure --- a/configure Mon Jan 17 20:41:41 2011 -0800 +++ b/configure Mon Jan 17 20:54:23 2011 -0800 @@ -8278,6 +8278,37 @@ esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__ ((__aligned__ (expr)))" >&5 +$as_echo_n "checking for __attribute__ ((__aligned__ (expr)))... " >&6; } +if ${emacs_cv_attribute_aligned+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +char __attribute__ ((__aligned__ (1 << 3))) c; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + emacs_cv_attribute_aligned=yes +else + emacs_cv_attribute_aligned=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_attribute_aligned" >&5 +$as_echo "$emacs_cv_attribute_aligned" >&6; } +if test $emacs_cv_attribute_aligned = yes; then + +$as_echo "#define HAVE_ATTRIBUTE_ALIGNED 1" >>confdefs.h + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} @@ -18959,4 +18990,3 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi - diff -r 176503f61eb1 -r 19348bd13f81 configure.in --- a/configure.in Mon Jan 17 20:41:41 2011 -0800 +++ b/configure.in Mon Jan 17 20:54:23 2011 -0800 @@ -1323,6 +1323,19 @@ dnl Check for endianess AC_C_BIGENDIAN +AC_CACHE_CHECK([for __attribute__ ((__aligned__ (expr)))], + [emacs_cv_attribute_aligned], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[char __attribute__ ((__aligned__ (1 << 3))) c;]], + [[]])], + [emacs_cv_attribute_aligned=yes], + [emacs_cv_attribute_aligned=no])]) +if test $emacs_cv_attribute_aligned = yes; then + AC_DEFINE([HAVE_ATTRIBUTE_ALIGNED], 1, + [Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works.]) +fi + dnl check for Make feature AC_PROG_MAKE_SET @@ -3734,4 +3747,3 @@ fi ], [GCC="$GCC" NON_GNU_CPP="$NON_GNU_CPP" CPP="$CPP" CPPFLAGS="$CPPFLAGS"]) - diff -r 176503f61eb1 -r 19348bd13f81 src/ChangeLog --- a/src/ChangeLog Mon Jan 17 20:41:41 2011 -0800 +++ b/src/ChangeLog Mon Jan 17 20:54:23 2011 -0800 @@ -1,3 +1,11 @@ +2011-01-18 Paul Eggert + + * lisp.h (DECL_ALIGN): Define if HAVE_ATTRIBUTE_ALIGNED, not if + defined __GNUC__. ../configure now checks for this GCC feature, + which is now also supported by IBM and Oracle compilers. + (USE_LSB_TAG) [defined DECL_ALIGN]: Also define if defined __sun, + since Solaris malloc returns mult-of-8. + 2011-01-18 Stefan Monnier * image.c (syms_of_image): Don't access XSYMBOL's internals directly. diff -r 176503f61eb1 -r 19348bd13f81 src/config.in --- a/src/config.in Mon Jan 17 20:41:41 2011 -0800 +++ b/src/config.in Mon Jan 17 20:54:23 2011 -0800 @@ -115,6 +115,9 @@ /* Define to 1 if ALSA is available. */ #undef HAVE_ALSA +/* Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works. */ +#undef HAVE_ATTRIBUTE_ALIGNED + /* Define to 1 if strtold conforms to C99. */ #undef HAVE_C99_STRTOLD diff -r 176503f61eb1 -r 19348bd13f81 src/lisp.h --- a/src/lisp.h Mon Jan 17 20:41:41 2011 -0800 +++ b/src/lisp.h Mon Jan 17 20:54:23 2011 -0800 @@ -122,16 +122,18 @@ TYPEBITS-aligned. */ #ifndef NO_DECL_ALIGN # ifndef DECL_ALIGN -/* What compiler directive should we use for non-gcc compilers? -stef */ -# if defined (__GNUC__) +# if HAVE_ATTRIBUTE_ALIGNED # define DECL_ALIGN(type, var) \ type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var +# else + /* What directives do other compilers use? */ # endif # endif #endif /* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */ -#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined DARWIN_OS +#if (defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ \ + || defined DARWIN_OS || defined __sun) /* We also need to be able to specify mult-of-8 alignment on static vars. */ # if defined DECL_ALIGN # define USE_LSB_TAG