The biggest gain from these *tables* of instructions is "dispatching" -- the ability to quickly do a conditional without having to check each case separately in a linear search. Thus, the C language "case" statement allows "dispatching" on all 8-bits of a character in "one instruction". In Fortran this is called "computed GO(TO)". McCarthy's original Lisp had no dispatching abilities, which may have contributed to Lisp's reputation for slowness. Curiously, regular expressions don't have a way to say this sort of thing -- probably because dispatching is a speedup, and doesn't introduce any new behavior into a regular language. Computed goto's/dispatching is critical for getting decent emulation speed in "microcoded" architectures (IBM, Alto, LispM, etc.). For example, in the Alto, one could logically "OR" data bits into the address register for the next microinstruction to achieve a multiway branch. Carl Hewitt (of "Actor" fame) might suggest that dispatching (with arguments) is all you wanted from an execute instruction in the first place. At 05:48 PM 3/15/2018, Tom Knight wrote:
The GE 645 also had an execute double instruction, which would execute pairs of instructions. I think there were severe constraints on the even/odd-ness of the source, and on the overlaps (none allowed) between segments. Truly a nightmare for hardware. Not sure it ever really worked.
On Mar 15, 2018, at 8:13 PM, Henry Baker <hbaker1@pipeline.com> wrote: Problems with XCT (execute one instruction):
* no clean/obvious semantics; semantics have to be worked out for each different instruction being "executed"
* only one level of execute (at least for IBM)
* originally used for *tables* of instructions, but what about variable-length instructions? (Similar problem to "skip" instructions)
* what are the semantics in the case of interrupts?
We now have architectures which support "virtual machines"; analogous problems at much larger scale.
At 04:47 PM 3/15/2018, rcs@xmission.com wrote:
PS: Does anyone else miss the XCT instruction? The 7094 & PDP6/10 had it, but it seems to have vanished. I guess it's an architectural nightmare for the hardware folks. --Rich