Sujet : Re: Split instruction and immediate stream
De : robfi680 (at) *nospam* gmail.com (Robert Finch)
Groupes : comp.archDate : 09. Mar 2025, 00:07:53
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vqiikd$c35o$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 2025-03-08 9:21 a.m., Thomas Koenig wrote:
There was a recent post to the gcc mailing list which showed
interesting concept of dealing with large constants in an ISA:
Splitting a the instruction and constant stream. It can be found
at https://github.com/michaeljclark/glyph/ , and is named "glyph".
I think the problem the author is trying to solve is better addressed by
My 66000 (and I would absolutely _hate_ to write an assembler for it).
Still, I thought it worth mentioning.
Found that post interesting.
As outlined, the immediate base register requires a double-wide link register. This may be okay for code with 32b addresses running in a 64-bit machine. But otherwise would probably need to go through another GPR to manage the immediate base register. It is potentially more instructions in the function prolog / epilog code. And more instructions at function call.
I think splitting the code and constant into separate streams requires another port(s) on the I$. The port may already be present if jump-through-table, JTT, is supported.
I guess that the constant tables for a subroutine would be placed either before or after a subroutine. I would not use the constant tables for all constants. Small constants are better encoded directly in the instruction. That means using bits to select between small constants or relative addresses.
I think it is better to use a constant prefix / postfix instruction to encode larger constants in the instruction stream. Or use a wider instruction format. In Q+ constant postfixes can be used to override a register spec, allowing immediate constants to be used with many more instructions.