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.