[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Proposal: block-based vector allocator
From: |
Paul Eggert |
Subject: |
Re: Proposal: block-based vector allocator |
Date: |
Fri, 01 Jun 2012 17:32:54 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
On 06/01/2012 10:36 AM, Stefan Monnier wrote:
> with lisp-union-type the C code doesn't really care or know
> whether the tags are on LSB or MSB anyway
True, but USE_LSB_TAG doesn't mean "the internal
representation of Emacs objects uses low-order tag bits".
It means "when tagging, ignore the low order
bits of pointers because it's safe to assume they're zero".
This is not quite the same thing (and perhaps suggests that
USE_LSB_TAG is a poorly-chosen name...).
To put it another way, lisp.h has code in the
USE_LISP_UNION_TYPE case that behaves differently
depending on whether USE_LSB_TAG is set. Also, the
comment that Dmitry noted is out of date: USE_LSB_TAG does
work when combined with USE_LISP_UNION_TYPE.
This whole area is in a bit of a mess. It's not just
that comment. While looking into this and cleaning it up
I also found the following:
* The union data structure depends on WORDS_BIGENDIAN
for no particularly good reason nowadays, and this just
confuses things.
* The w32heap code is confused about this, and thinks that
USE_LISP_UNION_TYPE invalidates USE_LSB_TAG, which maybe
used to be true but is no longer true.
* There's no way for the builder to force a build
without USE_LSB_TAG (Dmitry's point).
* There are a few annoying warnings if you compile unions
with gcc -Wall.
You can find the patch for all this at
<http://bugs.gnu.org/11604>. I'll CC: Eli
since this affects w32 code.