diff --git a/src/lisp.h b/src/lisp.h index a22043026a..d0c56d7bbb 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -394,8 +394,12 @@ typedef EMACS_INT Lisp_Word; /* #define lisp_h_EQ(x, y) (XLI (x) == XLI (y)) */ /* verify (NIL_IS_ZERO) */ + +#define SYMBOLS_WITH_POS_ENABLED \ + __builtin_expect(symbols_with_pos_enabled, 0) + #define lisp_h_EQ(x, y) ((XLI ((x)) == XLI ((y))) \ - || (symbols_with_pos_enabled \ + || (SYMBOLS_WITH_POS_ENABLED \ && (SYMBOL_WITH_POS_P ((x)) \ ? BARE_SYMBOL_P ((y)) \ ? (XSYMBOL_WITH_POS((x)))->sym == (y) \ @@ -424,7 +428,7 @@ typedef EMACS_INT Lisp_Word; #define lisp_h_BARE_SYMBOL_P(x) TAGGEDP ((x), Lisp_Symbol) /* verify (NIL_IS_ZERO) */ #define lisp_h_SYMBOLP(x) ((BARE_SYMBOL_P ((x)) || \ - (symbols_with_pos_enabled && (SYMBOL_WITH_POS_P ((x)))))) + (SYMBOLS_WITH_POS_ENABLED && (SYMBOL_WITH_POS_P ((x)))))) #define lisp_h_TAGGEDP(a, tag) \ (! (((unsigned) (XLI (a) >> (USE_LSB_TAG ? 0 : VALBITS)) \ - (unsigned) (tag)) \ @@ -463,7 +467,7 @@ typedef EMACS_INT Lisp_Word; /* verify (NIL_IS_ZERO) */ # define lisp_h_XSYMBOL(a) \ (eassert (SYMBOLP ((a))), \ - (!symbols_with_pos_enabled \ + (!SYMBOLS_WITH_POS_ENABLED \ ? (XBARE_SYMBOL ((a))) \ : (BARE_SYMBOL_P ((a))) \ ? (XBARE_SYMBOL ((a))) \ @@ -1137,38 +1141,38 @@ enum More_Lisp_Bits #define MOST_POSITIVE_FIXNUM (EMACS_INT_MAX >> INTTYPEBITS) #define MOST_NEGATIVE_FIXNUM (-1 - MOST_POSITIVE_FIXNUM) -INLINE bool +INLINE bool __attribute__ ((always_inline)) PSEUDOVECTORP (Lisp_Object a, int code) { return lisp_h_PSEUDOVECTORP (a, code); } -INLINE bool +INLINE bool __attribute__ ((always_inline)) (BARE_SYMBOL_P) (Lisp_Object x) { return lisp_h_BARE_SYMBOL_P (x); } -INLINE bool +INLINE bool __attribute__ ((always_inline)) (SYMBOL_WITH_POS_P) (Lisp_Object x) { return lisp_h_SYMBOL_WITH_POS_P (x); } -INLINE bool +INLINE bool __attribute__ ((always_inline)) (SYMBOLP) (Lisp_Object x) { return lisp_h_SYMBOLP (x); } -INLINE struct Lisp_Symbol_With_Pos * +INLINE struct Lisp_Symbol_With_Pos * __attribute__ ((always_inline)) XSYMBOL_WITH_POS (Lisp_Object a) { eassert (SYMBOL_WITH_POS_P (a)); return XUNTAG (a, Lisp_Vectorlike, struct Lisp_Symbol_With_Pos); } -INLINE struct Lisp_Symbol * ATTRIBUTE_NO_SANITIZE_UNDEFINED +INLINE struct Lisp_Symbol * __attribute__ ((always_inline)) ATTRIBUTE_NO_SANITIZE_UNDEFINED (XBARE_SYMBOL) (Lisp_Object a) { #if USE_LSB_TAG @@ -1186,7 +1190,7 @@ INLINE struct Lisp_Symbol * ATTRIBUTE_NO_SANITIZE_UNDEFINED #endif } -INLINE struct Lisp_Symbol * ATTRIBUTE_NO_SANITIZE_UNDEFINED +INLINE struct Lisp_Symbol * __attribute__ ((always_inline)) ATTRIBUTE_NO_SANITIZE_UNDEFINED (XSYMBOL) (Lisp_Object a) { return lisp_h_XSYMBOL (a); @@ -1336,7 +1340,7 @@ INLINE bool /* Return true if X and Y are the same object, reckoning a symbol with position as being the same as the bare symbol. */ -INLINE bool +inline bool __attribute__ ((always_inline)) (EQ) (Lisp_Object x, Lisp_Object y) { return lisp_h_EQ (x, y); @@ -2690,7 +2694,7 @@ XOVERLAY (Lisp_Object a) return XUNTAG (a, Lisp_Vectorlike, struct Lisp_Overlay); } -INLINE Lisp_Object +INLINE Lisp_Object __attribute__ ((always_inline)) SYMBOL_WITH_POS_SYM (Lisp_Object a) { if (!SYMBOL_WITH_POS_P (a)) @@ -2698,7 +2702,7 @@ SYMBOL_WITH_POS_SYM (Lisp_Object a) return XSYMBOL_WITH_POS (a)->sym; } -INLINE Lisp_Object +INLINE Lisp_Object __attribute__ ((always_inline)) SYMBOL_WITH_POS_POS (Lisp_Object a) { if (!SYMBOL_WITH_POS_P (a))