Deutsch English Français Italiano |
<vqiikd$c35o$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Robert Finch <robfi680@gmail.com> Newsgroups: comp.arch Subject: Re: Split instruction and immediate stream Date: Sat, 8 Mar 2025 18:07:53 -0500 Organization: A noiseless patient Spider Lines: 36 Message-ID: <vqiikd$c35o$1@dont-email.me> References: <vqhjpv$65am$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sun, 09 Mar 2025 00:07:57 +0100 (CET) Injection-Info: dont-email.me; posting-host="082b99176ec5d10cb3c323227c66cb20"; logging-data="396472"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/xtOPMoLDzK5N5r98T+zMFTYlwRaMzAQY=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:9gwr/zF2ESqhKY71rDBukIZph5w= Content-Language: en-US In-Reply-To: <vqhjpv$65am$1@dont-email.me> Bytes: 2724 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.