diff options
| author | Paul Eggert | 2016-06-07 15:41:51 -0700 |
|---|---|---|
| committer | Paul Eggert | 2016-06-07 15:44:15 -0700 |
| commit | 302185156b6c20df5400a9956c09d6c24d29f652 (patch) | |
| tree | 7d8e87dd55aaec9df6775bb0cc903cfba72cfed9 /src/lisp.h | |
| parent | 8ea5d990f6315917bbd9c7b94856c52137405dad (diff) | |
| download | emacs-302185156b6c20df5400a9956c09d6c24d29f652.tar.gz emacs-302185156b6c20df5400a9956c09d6c24d29f652.zip | |
Use __builtin_assume_aligned on untagged Lisp vals
* src/conf_post.h (__has_builtin, __builtin_assume_aligned):
New macros, for compilers not already defining them.
(__has_builtin___builtin_assume_aligned): New macro.
* src/lisp.h (lisp_h_XUNTAG): Use __builtin_assume_aligned.
This shrinks text space by 0.2% on x86-64 with GCC 6.1.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lisp.h b/src/lisp.h index 1fc6130be0b..4042f4decb1 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -341,7 +341,9 @@ error !; | |||
| 341 | (struct Lisp_Symbol *) ((intptr_t) XLI (a) - Lisp_Symbol \ | 341 | (struct Lisp_Symbol *) ((intptr_t) XLI (a) - Lisp_Symbol \ |
| 342 | + (char *) lispsym)) | 342 | + (char *) lispsym)) |
| 343 | # define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK)) | 343 | # define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK)) |
| 344 | # define lisp_h_XUNTAG(a, type) ((void *) (intptr_t) (XLI (a) - (type))) | 344 | # define lisp_h_XUNTAG(a, type) \ |
| 345 | __builtin_assume_aligned ((void *) (intptr_t) (XLI (a) - (type)), \ | ||
| 346 | GCALIGNMENT) | ||
| 345 | #endif | 347 | #endif |
| 346 | 348 | ||
| 347 | /* When compiling via gcc -O0, define the key operations as macros, as | 349 | /* When compiling via gcc -O0, define the key operations as macros, as |