From: Alan Charlesworth on
In article <1179300522.622550.274910(a)l77g2000hsb.googlegroups.com>,
Quadibloc <jsavard(a)ecn.ab.ca> wrote:

> Eric Smith wrote:
> > Quadibloc wrote:
> > > But I would think that there is a very simple definition of VLIW.
> >
> > Once upon a time I thought that of RISC, too. But that war has been
> > lost.
> >
> > > Instructions explicitly code for superscalar operation.
> >
> > Sounds reasonable to me. So an i860 qualifies?
> .
> I don't know enough about the i860 to answer that at the moment.
> .
> Looking at the manual for the AP-120B, it had 64-bit instructions that
> coded for an "S-pad" operation, a floating adder operation, and a
> floating multiplier operation. I would say it *definitely* qualifies
> as a VLIW architecture. Even if that term only arose later with
> machines like the Cyberplus, this is the same sort of thing, but in a
> smaller version. (The assembly language for it obscures the fact that
> adder and multiplier instructions are really part of the same
> instruction word.)
>
> John Savard

The AP-120B came in 1974, before he term VLIW was coined. We called it
"horizontal microcode". Each functional unit had its own op-code field
in the 64-bit instruction word for integer op, FADD, FMUL, memory fetch,
conditional branch. etc. Load-use latencies were visible, 2 cycles for
fadd, and 3 for fmul and memory fetch.

One could write a single-instruction loop that would do a dot-product.
One had to write appropriate prologue code to get into he loop, and an
epilogue to get out of he loop. We didn't originally to epilogues, since
we didn't care if we fetched data beyond the end of an array, since
there wasn't any memory protection then.

We called this style of coding "software pipelining." Much later, this
became relevant to superscalar microprocessors. Cydrome later added
opcode bits to their instructions to control getting into and out of a
loop. We always had explicit code, which used up the instruction memory
(later cache). By the late 70s, we had a Fortran compiler attempting
vectorization and SW-pipelined code generation
From: Quadibloc on
Alan Charlesworth wrote:
> The AP-120B came in 1974, before he term VLIW was coined. We called it
> "horizontal microcode".

True enough. But unlike other things out there with what we *still*
call horizontal microcode, like a System/360 Model 85, the AP-120B had
these distinctive characteristics:

- Two of the functional units controlled in an instruction word, the
FP adder and the FP multiplier, both worked *directly* on that user
data calculations upon which were the object of an applications
program.

- This excludes operations related to address calculation - otherwise,
every computer with an indexing bit in its instructions would be VLIW,
and the term would lose all meaning.

- The instruction set in which the multiple operations were controlled
was documented and directly available to the applications programmer.

In general, a conventional computer which had high performance from
using horizontal microcode did not have these characteristics. So,
despite the fact that the instruction format of a VLIW machine - even
a canonical VLIW machine like the Cyberplus - looks a *lot* like
microcode, there are key differences.

If you tried to write microcode in the Cyberplus machine language, or
the AP-120B machine language, you would find that, except for some
exotic special-purpose instructions, usually you could only use one
functional unit at a time, because conventional instructions don't
call for multiple operations.

Instead of being an efficient way of implementing a conventional
instruction set, like horizontal microcode, VLIW is something whose
benefits would be lost if used for microprogramming. (Decoupled
microarchitecture in superscalar machines, though, lets the power of
VLIW shine through to conventional instructions - whether they're CISC
or RISC.)

John Savard

From: Eric P. on
Quadibloc wrote:
>
> Thus, while some horizontal microcode machines might be said to in
> some way be precursors of VLIW, it's a stretch. With the AP-120B, on
> the other hand, the resemblance is clear and unmistakable.
>
> Superficially, VLIW instructions are microcode-like. You direct the
> movement of data between functional units and internal registers. But
> VLIW presents multiple functional units, applicable to user problems,
> in a manner not useful for the microcoding of conventional
> instructions, so they _can_ be distinguished.

An important aspect of horizontal microcode is that it usually
includes a next address field in the microword so the sequencer
control can be done in parallel, as this AP-120B apparently does.

As more 'pipeline stages' were added to the micro-sequencer
(using an older definition of the word pipeline where it refers
to register buffers that allows concurrency in the sequencer)
to overlap next address generation with instruction lookup,
then the next address selection had to occur more and more
instructions ahead of when the jump must actually take place.

Eric

From: Quadibloc on
Eric P. wrote:
> An important aspect of horizontal microcode is that it usually
> includes a next address field in the microword so the sequencer
> control can be done in parallel, as this AP-120B apparently does.
..
It is true that normal AP-120B instructions do always include a
"branch group" section with a displacement. But there is also a
condition attached to that displacement, so normal operation has it
going to the next instruction word; a conditional jump instruction
simply is combined with other operations.

This design still requires a program counter that is incremented with
each instruction: one with a next address field would require a
_second_ address field for the case where branching is to take place.

John Savard

From: Quadibloc on
Eric Smith wrote:
> Sounds reasonable to me. So an i860 qualifies?

Hunting around the web, although I could not find any detailed
description of the i860 instruction set, one "white paper" on VLIW
architectures from Philips noted that the i860 could switch to a mode
where it fetched instructions in pairs, such that one instruction had
to be for the integer unit, and the other for the floating-point unit.

That feature would bring it within my definition of VLIW much more
securely than, say, the parallelism bits on the TMS320, which is also
advertised as VLIW.

John Savard