Extremely CISC instructions

Paul Koning paulkoning at comcast.net
Tue Aug 24 11:13:00 CDT 2021

> On Aug 24, 2021, at 11:57 AM, Peter Corlett via cctalk <cctalk at classiccmp.org> wrote:
> On Tue, Aug 24, 2021 at 08:47:33AM -0500, John Foust via cctalk wrote:
>> At 04:13 AM 8/24/2021, Peter Corlett via cctalk wrote:
>>> move.b ([0x12345678, %pc, %d0.w*8], 0x9abcdef0), ([0x87654321, %sp], %a0*4, 0x0fedcba9)
>> And which language and compiler case was this aimed at?  
> I have no idea and dread to think, although I chose a worst-case example
> which doesn't actually make much sense.

Might be block structured languages.

The Electrologica X8 has a complex addressing mode that was, I think, designed by E.W.Dijkstra, and intended specifically to support the addressing of variables local to outer blocks.  There is a term for this, "display" I think.  The basic idea is to have a vector of pointers indexed by the static block number (nesting level), pointing to the newest frame among all the invocations of that block.  Then a variable reference translates into a reference to that display (using the static block number) along with the frame offset of the particular variable.

In the X8, that's handled in a specific addressing mode.  For example "M3[12]" means the effective address is the value found in entry 3 of the display table (pointed at by memory location 63), plus 12.


More information about the cctalk mailing list