On Thu, 13 Jun 2024, Paul Koning via cctalk wrote:
MIPS, perhaps? It has "delay slots". The
one that remains is the
branch delay slots, which in modern designs is presumably merely an
annoying crock that requires extra pain to implement but is actually
required because it changes the meaning of the code. There also used to
be load (?) delay slots, which sounds like what you're describing.
Yes, MIPS I load delay slots. Gone by the MIPS II/III ISAs, though
coprocessor move delay slots remained (e.g. for moving data between the
GPRs and the FPRs), having only been removed with the MIPS IV ISA. For
the remaining missing interlocks there are now instructions in the ISA to
clear the hazards resulting (i.e. possibly stall the pipeline) explicitly,
so there is no need to count instructions anymore.
Also various extensions and revisions of the ISA have added the so called
compact branches that have no delay slot, starting with the MIPS16e ASE.
And then the microMIPSr6 ISA encoding only has compact branches available.
That was ancient history by the time I started working
on MIPS machines,
fortunately.
MIPS I cores and variations were still around by late 1990s in embedded
use, and of course the GNU toolchain continues to support all the arcana
to this day, as do community-maintained OSes.
Maciej