[Next] [Up] [Previous] [Next Section] [Home] [Other]

A Worked Example

To illustrate the design of a powerful computer, without running into excessive difficulties, it is necessary to avoid an overly complicated instruction set architecture (ISA). Thus, to keep complexity to a minimum, and yet present a full-power architecture, I have decided to model my example architecture very closely on that of the IBM System/360.

The RR, SS, RX, SR, and SI instruction formats correspond to those of the System/360. The only difference is that the 16-bit address constants in an instruction consist of a two-bit base register field, and a 14-bit displacement field. This allows a base register to point to 16 kilobytes of memory rather than only 4 kilobytes of memory.

The values of this field indicate which register to use as the base register as follows:

00: GR 12
01: GR 13
10: GR 14
11 GR 15

Note that two zero bits in this field do not indicate absolute addressing; the contents of a base register are always added to the address for those instructions where the effective address is actually used as a pointer to memory, and for the Load Effective Address instruction. Shift instructions will be an exception to this rule, however.

Placing a two-bit base register field in the 16-bit address, instead of attempting to move the base register field into the first 16 bits of the instruction, allows the SR format to work properly for the Load Multiple and Store Multiple instructions.

The VE instruction format is added to perform pipelined vector calculations as a basic part of the architecture.

Vector instructions are three-address instructions, with a source operand, and operand operand, and a destination operand. They perform the operation <source> op <operand> and store the result in <destination>.

There are two forms of vector instruction.

In the first form, a vector may be from 1 to 256 elements in length; the length field of the instruction contains the length of the vector minus one. The source and operand operands may be vectors in memory, or a floating-point register may be indicated which serves as a scalar operand, to be applied to each element of the other operand.

In the second form, a vector may be from 1 to 16 elements in length. All operands are vector operands; an operand can be in memory, or in one of sixteen vector registers. Each vector register consists of sixteen floating-point registers, numbered from 0 to 15. The start and end fields of the instruction indicate the range of floating-point registers within a vector register that are used in an operation. To be interpreted in this fashion, the contents of the start field must be less than or equal to those of the end field. In this case, vectors in memory will correspond in length to the range of registers indicated, and even if the starting register is not register 0, operation will start with the first element of the vector in memory that is addressed.

Alternatively, if the start field contains 14, and the end field contains a number between 0 and 7, then the least significant 16 bits contained in the general register indicated by the contents of the end field are used as a mask indicating on which elements of a 16-element vector the operation is performed. In this case, vectors in memory are treated as being exactly 16 elements in length, with elements skipped over in any part. If the start field contains 15, and the end field contains a number between 0 and 7, then a general register from 8 through 15 is used as the mask register.

For both forms of vector operation, as vector operations are only provided for aligned operands 32 bits or more in length, the last two bits of the displacement field will normally be zero in all cases. As a result, these fields are instead used for another purpose. If they are not both zero, they indicate a register containing a stride value, as follows:

00: no stride
01: GR 1
10: GR 2
11: GR 3

A stride of 1 indicates that an area of memory corresponding to one item of the width of the type of number on which the instruction operates is skipped, and so on.

While 16-element vector registers are considerably shorter than the 64-element vector registers of the Cray I, they still allow vector calculations to take place without unnecessary memory accesses; the additional instruction fetch and decoding overhead is balanced by the reduced resource use and reduced overhead of context switching.

Address formation differs from that in the System/360 in several ways.

In addition to the displacement field in an instruction being 14 bits long instead of 12 bits long, the contents of the base register used are shifted to the left eight bits before being added. This results in a 40-bit virtual address without a requirement to go into a 64-bit mode.

Also, unlike the IBM System/360, this system will, of course, use the IEEE 754 floating-point format as its native floating-point format.

It will have 16 general registers, each 32 bits in length, 16 floating-point registers, each 128 bits in length, and 16 vector registers, each composed of 16 floating-point registers, 128 bits in length.

The instructions that would be supported, and their opcodes, would be:

RR format
00 LPER Load Positive Extended Register
01 LNER Load Negative Extended Register
02 LTER Load and Test Extended Register
03 LCER Load Complement Extended Register
04 HER Halve Extended Register 
05 BALR Branch and Link Register
06 BCTR Branch on Count Register
07 BCR Branch on Condition Register
08 LER Load Extended Register
09 CER Compare Extended Register
0A AER Add Extended Register
0B SER Subtract Extended Register
0C MER Multiply Extended Register
0D DER Divide Extended Register
0E AUER Add Unnormalized Extended Register
0F SUER Subtract Unnormalized Extended Register
10 LPR Load Positive Register
11 LNR Load Negative Register
12 LTR Load and Test Register
13 LCR Load Complement Register
14 NR AND Register
15 LCR Logical Compare Register
16 OR OR Register
17 XR XOR Register
18 LR Load Register
19 CR Compare Register
1A AR Add Register
1B SR Subtract Register
1C MR Multiply Register
1D DR Divide Register
1E ALR Add Logical Register
1F SLR Subtract Logical Register
20 LPDR Load Positive Double Register
21 LNDR Load Negative Double Register
22 LTDR Load and Test Double Register
23 LCDR Load Complement Double Register
24 HDR Halve Double Register
25 SVC Supervisor Call
28 LDR Load Double Register
29 CDR Compare Double Register
2A ADR Add Double Register
2B SDR Subtract Double Register
2C MDR Multiply Double Register
2D DDR Divide Double Register
30 LPFR Load Positive Floating Register
31 LNFR Load Negative Floating Register
32 LTFR Load and Test Floating Register
33 LCFR Load Complement Floating Register
34 HFR Halve Floating Register
38 LFR Load Floating Register
39 CFR Compare Floating Register
3A AFR Add Floating Register
3B SFR Subtract Floating Register
3C MFR Multiply Floating Register
3D DFR Divide Floating Register
RX Format
40 STH Store Halfword
41 LA Load Address
42 STC Store Character
43 IC Insert Character
44 XEC Execute
45 BAL Branch and Link
46 BCT Branch on Count
47 BC Branch on Condition
48 LH Load Halfword
49 CH Compare Halfword
4A AH Add Halfword
4B SH Subtract Halfword
4C MH Multiply Halfword
4D DH Divide Halfword
4E CVD Convert to Decimal
4F CVB Convert to Binary
50 ST Store
54 N AND
55 CL Compare Logical
56 O OR
57 X Exclusive OR
58 L Load
59 C Compare
5A A Add
5B S Subtract
5C M Multiply
5D D Divide
5E AL Add Logical
5F SL Subtract Logical
60 STD Store Double
61 CE Compare Extended
62 AE Add Extended
63 SE Subtract Extended
64 ME Multiply Extended
65 DE Divide Extended
66 AUE Add Unnormalized Extended
67 SUE Subtract Unnormalized Extended
68 LD Load Double
69 CD Compare Double
6A AD Add Double
6B SD Subtract Double
6C MD Multiply Double
6D DD Divide Double
6F STE Store Extended
70 STF Store Floating
78 LF Load Floating
79 CF Compare Floating
7A AF Add Floating
7B SF Subtract Floating
7C MF Multiply Floating
7D DF Divide Floating
RS, SI Format
82 LPSW Load Program Status Word
86 BXH Branch on Index High
87 BXLE Branch on Index Low or Equal
88 SRSL Shift Right Single Logical
89 SLSL Shift Left Single Logical
8A SRS Shift Right Single
8B SLS Shift Left Single
8C SRDL Shift Right Double Logical
8D SLDL Shift Left Double Logical
8E SRD Shift Right Double
8F SLD Shift Left Double
90 STM Store Multiple
91 TM Test Under Mask
92 MVI Move Immediate
94 NI AND Immediate
95 CLI Compare Logical Immediate
96 OI OR Immediate
97 XI XOR Immediate
98 LM Load Multiple
SS Format
C1 MVN Move Numeric
C2 MVC Move Character
C3 MVZ Move Zone
C4 NC AND Character
C5 CLC Compare Logical Character
C6 OC OR Character
C7 XC XOR Character
CC TR Translate
CD TRT Translate and Test
CE ED Edit
CF EDMK Edit and Mark
D1 MVO Move With Offset
D2 P Pack
D3 U Unpack
D8 LP Load Packed
D9 CP Compare Packed
DA AP Add Packed
DB SP Subtract Packed
DC MP Multiply Packed
DD DP Divide Packed
VE Format
E0 STDV Store Double Vector
E1 CEV Compare Extended Vector
E2 AEV Add Extended Vector
E3 SEV Subtract Extended Vector
E4 MEV Multiply Extended Vector
E5 DEV Divide Extended Vector
E6 AUEV Add Unnormalized Extended Vector
E7 SUEV Subtract Unnormalized Extended Vector
E8 LDV Load Double Vector
E9 CDV Compare Double Vector
EA ADV Add Double Vector
EB SDV Subtract Double Vector
EC MDV Multiply Double Vector
ED DDV Divide Double Vector
EF STEV Store Extended Vector
F0 STFV Store Floating Vector
F8 LFV Load Floating Vector
F9 CFV Compare Floating Vector
FA AFV Add Floating Vector
FB SFV Subtract Floating Vector
FC MFV Multiply Floating Vector
FD DFV Divide Floating Vector

Note that not all the opcodes, nor their mnemonics, are the same as on the System/360, but an attempt has been made to minimize the changes, so that the design can be adapted easily to offer 360-compatible operation as an option. I/O instructions are not included, as all I/O will be memory-mapped, as with the 680x0 architecture.

Also, the original System/360 memory protection through the use of a storage key value will not be used; instead, memory protection will be obtained through memory mapping.


[Next] [Up] [Previous] [Next Section] [Home] [Other]

AltStyle によって変換されたページ (->オリジナル) /