now a 160-bit instruction with four embedded 32-bit
instructions is added that also offers predication.
Well, the 80-bit and 144-bit instructions had some extra bits
available, so I've now used one of those bits to modify the form of
the regular 32-bit instructions.
If it is set, the load/store memory-reference instructions in the
normal 32-bit instruction set change to memory-reference _operate_ instructions that only work with the first eight registers.
Is there a way for the instruction decoder to tell that a jump has
arrived in the middle of one of these blocks? If not, compiler bugs that
do that will be unusually arcane, since instructions will behave
differently.
In article <1107gai$3igkf$[email protected]>, [email protected]d (quadi) wrote:
Well, the 80-bit and 144-bit instructions had some extra bits
available, so I've now used one of those bits to modify the form of
the regular 32-bit instructions.
If it is set, the load/store memory-reference instructions in the
normal 32-bit instruction set change to memory-reference _operate_ instructions that only work with the first eight registers.
Is there a way for the instruction decoder to tell that a jump has
arrived in the middle of one of these blocks? If not, compiler bugs that
do that will be unusually arcane, since instructions will behave
differently.
John--- Synchronet 3.22a-Linux NewsLink 1.2
On Sat, 13 Jun 2026 14:07 +0100 (BST), [email protected] (John Dallman)
wrote:
Is there a way for the instruction decoder to tell that a jump has
arrived in the middle of one of these blocks? If not, compiler bugs that
do that will be unusually arcane, since instructions will behave >differently.
No, there is not, because Concertina IV doesn't have the block
structure of Concertina II.
On an IBM System/360, you can branch in the middle of an instruction
too, so this _in itself_ is not a fatal flaw. However, an assembler programmer might be *tempted* to branch to an instruction embedded in
another instruction, so I've carefully explained the conditions under
which this is not to be done, as it will cause erroneous operation due
to instructions behaving differently.
The idea of someone writing a compiler that did this, rather than just--- Synchronet 3.22a-Linux NewsLink 1.2
a naive assembler programmer making this mistake, did not occur to me.
I expected compiler writers to know what they were doing.
Of course, though, on further reflection, I am able to think of at
least one case where this could arise other than through sheer
stupidity: if instructions were changed to being embedded in a
separate pass of the compiler from the one that originally generated
them. Given, however, the reasons for embedding an instruction, I
didn't really think a compiler could work this way.
John Savard
The idea of someone writing a compiler that did this, rather than
just a naive assembler programmer making this mistake, did not occur
to me. I expected compiler writers to know what they were doing.
[email protected] (John Dallman) posted:
In article <1107gai$3igkf$[email protected]>, [email protected]d (quadi)
wrote:
Well, the 80-bit and 144-bit instructions had some extra bits
available, so I've now used one of those bits to modify the form of
the regular 32-bit instructions.
If it is set, the load/store memory-reference instructions in the
normal 32-bit instruction set change to memory-reference _operate_
instructions that only work with the first eight registers.
Is there a way for the instruction decoder to tell that a jump has
arrived in the middle of one of these blocks? If not, compiler bugs that
do that will be unusually arcane, since instructions will behave
differently.
In general, no. 68000 assembly writers would code a else-clause as a
constant that could be consumed by the last instruction of then-clause
to avoid a <second> branch.
These are normal issues with a variable length instruction set--and
one of the reasons My 66000 ISA is encoded such that the 6 HOBs are
the major OpCode (unlike RISC-V)--and one of the reason 6 major
OpCodes are reserved in perpetuity. Integer constants with 000000
and 111111 are illegal, FP opcodes between �{1/128 to 32} are
illegal. Jumping into code-space constants is likely to raise
ILLEGAL OpCode.
| Sysop: | DaiTengu |
|---|---|
| Location: | Appleton, WI |
| Users: | 1,123 |
| Nodes: | 10 (0 / 10) |
| Uptime: | 35:35:01 |
| Calls: | 14,371 |
| Files: | 186,380 |
| D/L today: |
1,555 files (469M bytes) |
| Messages: | 2,540,636 |