From: Paul Eggert Date: Sat, 4 Apr 2020 23:56:57 +0000 (-0700) Subject: Default gcc -Og to inlining key ops X-Git-Tag: emacs-28.0.90~7657 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=15853707c8c36aff1d3cc19205971b88e04d007b;p=emacs.git Default gcc -Og to inlining key ops Problem reported by Martin Rudalics in: https://lists.gnu.org/r/emacs-devel/2020-04/msg00195.html * configure.ac (DEFINE_KEY_OPS_AS_MACROS): Define if -Og. * src/Makefile.in (KEY_OPS_CFLAGS): New macro. (EMACS_CFLAGS): Use it. * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): Let the gcc command line specify it. Remove use of undocumented INLINING macro. --- diff --git a/configure.ac b/configure.ac index 9907160482e..4e34a1cc10c 100644 --- a/configure.ac +++ b/configure.ac @@ -938,6 +938,13 @@ if test "$ac_test_CFLAGS" != set; then esac fi +case "$GCC, $CFLAGS " in + yes,*' -Og '*) + AC_DEFINE([DEFINE_KEY_OPS_AS_MACROS], 1, + [Define to 1 if key low-level operations should be C macros + instead of inline functions.]) +esac + # gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) # --------------------------------------------------------------------------- # If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. diff --git a/src/Makefile.in b/src/Makefile.in index 552dd2e50ae..dfd322553b8 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -377,11 +377,14 @@ endif # Flags that might be in WARN_CFLAGS but are not valid for Objective C. NON_OBJC_CFLAGS = -Wignored-attributes -Wignored-qualifiers -Wopenmp-simd +# Cajole GCC into inlining key ops even if it wouldn't normally. +KEY_OPS_CFLAGS = $(if $(filter -Og,$(CFLAGS)),-DDEFINE_KEY_OPS_AS_MACROS) + # -Demacs makes some files produce the correct version for use in Emacs. # MYCPPFLAGS is for by-hand Emacs-specific overrides, e.g., # "make MYCPPFLAGS='-DDBUS_DEBUG'". -EMACS_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I$(srcdir) \ - -I$(lib) -I$(top_srcdir)/lib \ +EMACS_CFLAGS = -Demacs $(KEY_OPS_CFLAGS) $(MYCPPFLAGS) \ + -I. -I$(srcdir) -I$(lib) -I$(top_srcdir)/lib \ $(C_SWITCH_MACHINE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) \ $(GNUSTEP_CFLAGS) $(CFLAGS_SOUND) $(RSVG_CFLAGS) $(IMAGEMAGICK_CFLAGS) \ $(PNG_CFLAGS) $(LIBXML2_CFLAGS) $(DBUS_CFLAGS) \ diff --git a/src/lisp.h b/src/lisp.h index f223814d8f3..7fc3af992e0 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -411,15 +411,19 @@ typedef EMACS_INT Lisp_Word; # define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK)) #endif -/* When compiling via gcc -O0, define the key operations as macros, as - Emacs is too slow otherwise. To disable this optimization, compile - with -DINLINING=false. */ -#if (defined __NO_INLINE__ \ - && ! defined __OPTIMIZE__ && ! defined __OPTIMIZE_SIZE__ \ - && ! (defined INLINING && ! INLINING)) -# define DEFINE_KEY_OPS_AS_MACROS true -#else -# define DEFINE_KEY_OPS_AS_MACROS false +/* When DEFINE_KEY_OPS_AS_MACROS, define key operations as macros to + cajole the compiler into inlining them; otherwise define them as + inline functions as this is cleaner and can be more efficient. + The default is true if the compiler is GCC-like and if function + inlining is disabled because the compiler is not optimizing or is + optimizing for size. Otherwise the default is false. */ +#ifndef DEFINE_KEY_OPS_AS_MACROS +# if (defined __NO_INLINE__ \ + && ! defined __OPTIMIZE__ && ! defined __OPTIMIZE_SIZE__) +# define DEFINE_KEY_OPS_AS_MACROS true +# else +# define DEFINE_KEY_OPS_AS_MACROS false +# endif #endif #if DEFINE_KEY_OPS_AS_MACROS