]> git.eshelyaron.com Git - emacs.git/commit
Use native alignment to access Lisp object data
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 10 Jun 2018 17:13:45 +0000 (10:13 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 10 Jun 2018 17:16:53 +0000 (10:16 -0700)
commit0303fab396a818d796c7513457aa341ab703e8f3
treecf8471d344ed264e9395f0b1eba183c9d4c0f4bc
parentefa750e68466fb1bab03028701350a745e0504b6
Use native alignment to access Lisp object data

Instead of using __builtin_assume_aligned (P, GCALIGNMENT) to
tell GCC that P has alignment 8, use (T *) P where T is the
type of the pointed-to object, to tell GCC that P has native
alignment.  This is simpler, matches the intent better, and
should help simplify future improvements.  Some of these
changes are to pacify gcc -Wnull-dereference, since GCC is
smarter about pointers now that Emacs no longer uses
__builtin_assume_aligned; these minor changes should improve
code efficiency slightly.  On Fedora 28 x86-64 with default
optimization this patch shrinks the size of the Emacs text
segment by 0.36%.
* src/conf_post.h (__has_builtin, __builtin_assume_aligned):
Remove; no longer used.
* src/dbusbind.c (XD_OBJECT_TO_DBUS_TYPE):
Pacify -Wnull-dereference by using XCAR instead of CAR_SAFE
and XCDR instead of CDR_SAFE when this is safe.
* src/fileio.c (Fexpand_file_name):
* src/font.c (clear_font_cache):
Pacify -Wnull-dereference by removing unnecessary NILP test.
* src/keyboard.c (xevent_start): New function.
(read_char, read_key_sequence): Pacify -Wnull-dereference by
using xevent_start instead of EVENT_START.
* src/lisp.h (lisp_h_XUNTAG): Remove; XUNTAG is always a macro
now, since it can no longer be implemented as a function.
(XUNTAG): New third argument CTYPE.  All uses changed.
Cast result to CTYPE * instead of using __builtin_assume_aligned.
Simplify by using LISP_WORD_TAG.
(LISP_WORD_TAG): New macro.
(TAG_PTR): Use it.
* src/menu.c (x_popup_menu_1):
Pacify -Wnull-dereference by using XCAR instead of Fcar and
XCDR instead of Fcdr where this is safe.
18 files changed:
src/alloc.c
src/buffer.h
src/conf_post.h
src/dbusbind.c
src/fileio.c
src/font.c
src/font.h
src/frame.h
src/keyboard.c
src/lisp.h
src/menu.c
src/process.h
src/termhooks.h
src/thread.h
src/w32fns.c
src/w32menu.c
src/window.h
src/xwidget.h