public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
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

  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).