[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Lisp_Marker size on 32bit systems
From: |
Eli Zaretskii |
Subject: |
Re: Lisp_Marker size on 32bit systems |
Date: |
Fri, 07 Sep 2018 11:05:58 +0300 |
> From: Paul Eggert <address@hidden>
> Date: Fri, 7 Sep 2018 00:15:57 -0700
> Cc: address@hidden
>
> Stefan Monnier wrote:
>
> > Thanks. AFAICT the only solution is to use the GCALIGNED_UNION trick in
> > each and every "real Lisp_Object struct" rather than once and forall in
> > vectorlike_header.
>
> The trick does need to move out of union vectorlike_header. However, the
> trick
> is not needed for most of those structs, since they're allocated only by the
> GC
> and are therefore already GC-aligned. The trick is needed only for structs
> that
> C might allocate statically or on the stack, and whose addresses are tagged
> as
> Lisp pointers. Just a few types do that, and I've noted them in the first
> attached patch.
>
> Although the first attached patch shrinks sizeof (struct Lisp_Maker) from 32
> to
> 24 bytes on x86 as requested, allocate_pseudovector still *allocates* 32
> bytes
> for the struct, as it rounds the size up to the next multiple of alignof
> (max_align_t), which is 16 on x86. It's not hard to change that to 8 (please
> see
> 2nd attached patch) but this causes a 20% CPU performance hit (!) to 'make
> compile-always' on my platform (AMD Phenom II X4 910e circa 2010, Fedora 28
> x86-64, gcc -m32 -march=native), so I didn't install and can't recommend the
> 2nd
> attached patch.
The current master fails to build in the x86 32-bit configuration with
wide ints:
In file included from lisp.h:35:0,
from window.c:25:
../lib/verify.h:207:21: error: static assertion failed: "verify (header_size
== sizeof (union vectorlike_header))"
# define _GL_VERIFY _Static_assert
^
../lib/verify.h:252:20: note: in expansion of macro '_GL_VERIFY'
# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
^~~~~~~~~~
lisp.h:1630:1: note: in expansion of macro 'verify'
verify (header_size == sizeof (union vectorlike_header));
^~~~~~
Makefile:385: recipe for target `window.o' failed
- Lisp_Marker size on 32bit systems, Stefan Monnier, 2018/09/05
- Re: Lisp_Marker size on 32bit systems, Paul Eggert, 2018/09/06
- Re: Lisp_Marker size on 32bit systems, Stefan Monnier, 2018/09/06
- Re: Lisp_Marker size on 32bit systems, Paul Eggert, 2018/09/07
- Re: Lisp_Marker size on 32bit systems,
Eli Zaretskii <=
- Re: Lisp_Marker size on 32bit systems, Paul Eggert, 2018/09/07
- GDB and compiler-operations (was: Lisp_Marker size on 32bit systems), Stefan Monnier, 2018/09/07
- Re: GDB and compiler-operations (was: Lisp_Marker size on 32bit systems), Eli Zaretskii, 2018/09/07
- Re: GDB and compiler-operations, Andreas Schwab, 2018/09/07
- Re: GDB and compiler-operations (was: Lisp_Marker size on 32bit systems), Paul Eggert, 2018/09/07
- Re: GDB and compiler-operations, Stefan Monnier, 2018/09/07
- Re: GDB and compiler-operations, Eli Zaretskii, 2018/09/07
- Re: GDB and compiler-operations, Paul Eggert, 2018/09/07
- Re: GDB and compiler-operations, Tom Tromey, 2018/09/07
- Re: Lisp_Marker size on 32bit systems, Eli Zaretskii, 2018/09/07