From: "Rafał Pietrak" <embedded@ztk-rp.eu>
To: "Richard Earnshaw (lists)" <Richard.Earnshaw@arm.com>,
Martin Uecker <muecker@gwdg.de>,
"gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: wishlist: support for shorter pointers
Date: Thu, 29 Jun 2023 08:19:49 +0200 [thread overview]
Message-ID: <fe44ff57-19e0-699d-6f30-78bb9d70540e@ztk-rp.eu> (raw)
In-Reply-To: <fd430712-d1ec-1e3e-4a6c-f5f552574bcb@arm.com>
Hi Richard,
W dniu 28.06.2023 o 17:44, Richard Earnshaw (lists) pisze:
[-----------]
> I think I understand what you're asking for but:
> 1) You'd need a new ABI specification to handle this, probably involving
> register assignments (for the 'segment' addresses), the initialization
> of those at startup, assembler and linker extensions to allow for
> relocations describing the symbols, etc.
I was thinking about that, and it doesn't look as requiring that deep
rewrites. ABI spec, that could accomodate the functionality could be as
little as one additional attribute to linker segments. Pls consider:
1. having that additional attribute (say "funny-ptr") of a segment.
2. ... from linker one would require only:
2.a) raising an error (fail) if one object has same segment-name WITH
that attribute, and another object has that segment WITHOUT one.
2.b) raise an error (fail) if the resulting output segment would be
larger then "max" (normally, max=64kB).
3. assembler would only need to be able to declare a segment with the
new attribute
4. almost all the implementation changes are within the CC. Those
changes can be broken down into a couple of scenarios:
4.a) for the following explanation, instead of __attribute__(section()),
I will use <FP> shortcut.
4.b) assignment of "normal" to "funny" (char* <FP> x; char* y; x = y);
here compiler would have to substract segment base address before
deposition value at "&x", but for subsequent use of "x", compiler does
NOT need to do anything.
4.c) reverse assignment (y = x); here compiler does nothing special,
just uses "current/adjusted" value of "x".
4.d) comparation (x == y); compiler does nothing special - at this
point, some register will already have "current/adjusted" value of "x".
4.e) comparation to NULL (x; !x; x == NULL); those test have to be done
on "unadjusted" value of "x", so if register containing "x" is already
adjusted, the base address will have to get substracted from "x" before
test. And it may be good to take special care on loops (like "for()").
In case the loop looking like this: "for(;x; x = x->next)" the test is
to be done before adjusting the pointer "x" by segment base address for
the next loop-cycle, so there is no penalty for that test.
I hope I didn't omit any important cases. If so, it doesn't look huge.
Now, I'm NOT trying to persuade anybody, that it's "simple" and thus
should be worth doing. I'm just doing some "intellectual exercise" with
analyzing the challenge.
-R
next prev parent reply other threads:[~2023-06-29 6:19 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-27 12:26 Rafał Pietrak
2023-06-28 1:54 ` waffl3x
2023-06-28 7:13 ` Rafał Pietrak
2023-06-28 7:31 ` Jonathan Wakely
2023-06-28 8:35 ` Rafał Pietrak
2023-06-28 9:56 ` waffl3x
2023-06-28 10:43 ` Rafał Pietrak
2023-06-28 12:12 ` waffl3x
2023-06-28 12:23 ` Rafał Pietrak
2023-07-03 14:52 ` David Brown
2023-07-03 16:29 ` Rafał Pietrak
2023-07-04 14:20 ` Rafał Pietrak
2023-07-04 15:13 ` David Brown
2023-07-04 16:15 ` Rafał Pietrak
2023-06-28 7:34 ` waffl3x
2023-06-28 8:41 ` Rafał Pietrak
2023-06-28 13:00 ` Martin Uecker
2023-06-28 14:51 ` Rafał Pietrak
2023-06-28 15:44 ` Richard Earnshaw (lists)
2023-06-28 16:07 ` Martin Uecker
2023-06-28 16:49 ` Richard Earnshaw (lists)
2023-06-28 17:00 ` Martin Uecker
2023-06-28 16:48 ` Rafał Pietrak
2023-06-29 6:19 ` Rafał Pietrak [this message]
2023-07-03 15:07 ` Ian Lance Taylor
2023-07-03 16:42 ` Rafał Pietrak
2023-07-03 16:57 ` Richard Earnshaw (lists)
2023-07-03 17:34 ` Rafał Pietrak
2023-07-04 12:38 ` David Brown
2023-07-04 12:57 ` Oleg Endo
2023-07-04 14:46 ` Rafał Pietrak
2023-07-04 15:55 ` David Brown
2023-07-04 16:20 ` Rafał Pietrak
2023-07-04 22:57 ` Martin Uecker
2023-07-05 5:26 ` Rafał Pietrak
2023-07-05 7:29 ` Martin Uecker
2023-07-05 8:05 ` Rafał Pietrak
2023-07-05 9:11 ` David Brown
2023-07-05 9:25 ` Martin Uecker
2023-07-05 11:34 ` David Brown
2023-07-05 12:01 ` Martin Uecker
2023-07-05 9:42 ` Rafał Pietrak
2023-07-05 11:55 ` David Brown
2023-07-05 12:25 ` Rafał Pietrak
2023-07-05 12:57 ` David Brown
2023-07-05 13:29 ` Rafał Pietrak
2023-07-05 14:45 ` David Brown
2023-07-05 16:13 ` Rafał Pietrak
2023-07-05 17:39 ` David Brown
2023-07-06 7:00 ` Rafał Pietrak
2023-07-06 12:53 ` David Brown
2023-07-05 9:29 ` Martin Uecker
2023-07-05 10:17 ` Rafał Pietrak
2023-07-05 10:48 ` Martin Uecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fe44ff57-19e0-699d-6f30-78bb9d70540e@ztk-rp.eu \
--to=embedded@ztk-rp.eu \
--cc=Richard.Earnshaw@arm.com \
--cc=gcc@gcc.gnu.org \
--cc=muecker@gwdg.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).