My idea was that instruction decoder could essentially translate
ADDL (R2)+, R2, R3
into
MOV (R2)+, TMP
ADDL TMP, R2, R3
It appears that Waldek Hebisch <antispam@fricas.org> said:
My idea was that instruction decoder could essentially translate
ADDL (R2)+, R2, R3
into
MOV (R2)+, TMP
ADDL TMP, R2, R3
But how about this?
ADDL3 (R2)+,(R2)+,(R2)+
Now you need at least two temps, the second of which depends on the
first,
and there are instructions with six operands.
Or how about
this:
ADDL3 (R2)+,#1234,(R2)+
This is encoded as
OPCODE (R2)+ (PC)+ <1234> (R2)+
The immediate word is in the middle of the instruction. You have to decode the operands one at a time so you can recognize immediates and skip over them.
It must have seemed clever at the time, but ugh.
John Levine <johnl@taugh.com> wrote:<snip>
ADDL3 (R2)+,#1234,(R2)+
This is encoded as
OPCODE (R2)+ (PC)+ <1234> (R2)+
The immediate word is in the middle of the instruction. You have to decode >> the operands one at a time so you can recognize immediates and skip over them.
Actually decoder that I propose could decode _this_ one in one
cycle.
But for this instruction one cycle decoding is not needed,
because execution will take multiple clocks. One cycle decoding
is needed for
ADDL3 R2,#1234,R2
which should be executed in one cycle. And to handle it one needs
7 operand decoders looking at 7 consequitive bytes, so that last
decoder sees last register argument.
It must have seemed clever at the time, but ugh.
VAX designers clearly had microcode in mind, even small changes
could make hardware decoding easier.
I have book by A. Tanenbaum about computer architecture that
was written in similar period as VAX design.
John Levine <johnl@taugh.com> wrote:
It appears that Waldek Hebisch <antispam@fricas.org> said:
My idea was that instruction decoder could essentially translate
ADDL (R2)+, R2, R3
into
MOV (R2)+, TMP
ADDL TMP, R2, R3
But how about this?
ADDL3 (R2)+,(R2)+,(R2)+
Now you need at least two temps, the second of which depends on the
first,
3 actually, the translation should be
MOVL (R2)+, TMP1
MOVL (R2)+, TMP2
ADDL TMP1, TMP2, TMP3
MOVL TMP3, (R2)+
Of course, temporaries are only within pipeline, so they probably
do not need real registers. But the instruction would need
4 clocks.
antispam@fricas.org (Waldek Hebisch) writes:
John Levine <johnl@taugh.com> wrote:<snip>
ADDL3 (R2)+,#1234,(R2)+
This is encoded as
OPCODE (R2)+ (PC)+ <1234> (R2)+
The immediate word is in the middle of the instruction. You have to decode >>> the operands one at a time so you can recognize immediates and skip over them.
Actually decoder that I propose could decode _this_ one in one
cycle.
Assuming it didn't cross a cache line, which is possible with any
variable length instruction encoding.
But for this instruction one cycle decoding is not needed,
because execution will take multiple clocks. One cycle decoding
is needed for
ADDL3 R2,#1234,R2
which should be executed in one cycle. And to handle it one needs
7 operand decoders looking at 7 consequitive bytes, so that last
decoder sees last register argument.
It must have seemed clever at the time, but ugh.
VAX designers clearly had microcode in mind, even small changes
could make hardware decoding easier.
I have book by A. Tanenbaum about computer architecture that
was written in similar period as VAX design.
That would be:
$ author tanenbaum
Enter password:
artist title format location
Tanenbaum, Andrew S. Structured Computer Organization Hard A029
It's currently in box A029 in storage, but my recollection is that
it was rather vax-centric.
It appears that Waldek Hebisch <antispam@fricas.org> said:
My idea was that instruction decoder could essentially translate
ADDL (R2)+, R2, R3
into
MOV (R2)+, TMP
ADDL TMP, R2, R3
But how about this?
ADDL3 (R2)+,(R2)+,(R2)+
Now you need at least two temps, the second of which depends on the
first, and there are instructions with six operands. Or how about
this:
ADDL3 (R2)+,#1234,(R2)+
This is encoded as
OPCODE (R2)+ (PC)+ <1234> (R2)+
The immediate word is in the middle of the instruction. You have to decode the operands one at a time so you can recognize immediates and skip over them.
It must have seemed clever at the time, but ugh.
John Levine <johnl@taugh.com> posted:
It appears that Waldek Hebisch <antispam@fricas.org> said:
My idea was that instruction decoder could essentially translateBut how about this?
ADDL (R2)+, R2, R3
into
MOV (R2)+, TMP
ADDL TMP, R2, R3
ADDL3 (R2)+,(R2)+,(R2)+
Now you need at least two temps, the second of which depends on the
first, and there are instructions with six operands. Or how about
this:
ADDL3 (R2)+,#1234,(R2)+
This is encoded as
OPCODE (R2)+ (PC)+ <1234> (R2)+
The immediate word is in the middle of the instruction. You have to decode >> the operands one at a time so you can recognize immediates and skip over them.
It must have seemed clever at the time, but ugh.
What we must all realize is that each address mode in VAX was a microinstruction all unto itself.
And that is why it was not pipelineable in any real sense.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (2 / 14) |
Uptime: | 01:20:26 |
Calls: | 10,387 |
Calls today: | 2 |
Files: | 14,061 |
Messages: | 6,416,728 |