Specification info
Description:
Reality Co-Processor of the Nintendo 64. Its main purpose is rendering and computing 3D graphics.
CPU clock speed:
62.5 MHz
Address bus:
0-Bit
CPU caches:
Name | Size | Comment |
---|---|---|
L1? | 8 KB | 4 KB for instructions and 4 KB for data |
Document version:
1.0.0
Sources:
Glossary
Glossary
Name | Description |
---|---|
v<dest> | The destination vector register, where the result will be placed. |
del | Specifies the destination element to be used. |
offset | 16-bit additional offset to use from a base register. |
base | The base GPR to use for load/store operations. |
v<s1> | Source vector register. |
v<s2> | Source vector register. |
el | Specifies the element to be used on a source vector register. |
Registers
Main GPR-Processor
Name | Value | Size (Bits) |
---|---|---|
r0/reg0 | 0x00 | 32 |
at/reg1 | 0x01 | 32 |
v0/reg2 | 0x02 | 32 |
v1/reg3 | 0x03 | 32 |
a0/reg4 | 0x04 | 32 |
a1/reg5 | 0x05 | 32 |
a2/reg6 | 0x06 | 32 |
a3/reg7 | 0x07 | 32 |
t0/reg8 | 0x08 | 32 |
t1/reg9 | 0x09 | 32 |
t2/reg10 | 0x0A | 32 |
t3/reg11 | 0x0B | 32 |
t4/reg12 | 0x0C | 32 |
t5/reg13 | 0x0D | 32 |
t6/reg14 | 0x0E | 32 |
t7/reg15 | 0x0F | 32 |
s0/reg16 | 0x10 | 32 |
s1/reg17 | 0x11 | 32 |
s2/reg18 | 0x12 | 32 |
s3/reg19 | 0x13 | 32 |
s4/reg20 | 0x14 | 32 |
s5/reg21 | 0x15 | 32 |
s6/reg22 | 0x16 | 32 |
s7/reg23 | 0x17 | 32 |
t8/reg24 | 0x18 | 32 |
t9/reg25 | 0x19 | 32 |
k0/reg26 | 0x1A | 32 |
k1/reg27 | 0x1B | 32 |
gp/reg28 | 0x1C | 32 |
sp/reg29 | 0x1D | 32 |
s8/reg30 | 0x1E | 32 |
ra/reg31 | 0x1F | 32 |
Vector-Processor
Name | Value | Size (Bits) |
---|---|---|
$v0 | 0x00 | 128 |
$v1 | 0x01 | 128 |
$v2 | 0x02 | 128 |
$v3 | 0x03 | 128 |
$v4 | 0x04 | 128 |
$v5 | 0x05 | 128 |
$v6 | 0x06 | 128 |
$v7 | 0x07 | 128 |
$v8 | 0x08 | 128 |
$v9 | 0x09 | 128 |
$v10 | 0x0A | 128 |
$v11 | 0x0B | 128 |
$v12 | 0x0C | 128 |
$v13 | 0x0D | 128 |
$v14 | 0x0E | 128 |
$v15 | 0x0F | 128 |
$v16 | 0x10 | 128 |
$v17 | 0x11 | 128 |
$v18 | 0x12 | 128 |
$v19 | 0x13 | 128 |
$v20 | 0x14 | 128 |
$v21 | 0x15 | 128 |
$v22 | 0x16 | 128 |
$v23 | 0x17 | 128 |
$v24 | 0x18 | 128 |
$v25 | 0x19 | 128 |
$v26 | 0x1A | 128 |
$v27 | 0x1B | 128 |
$v28 | 0x1C | 128 |
$v29 | 0x1D | 128 |
$v30 | 0x1E | 128 |
$v31 | 0x1F | 128 |
Load and Store Instructions
LBV
Opcode:
50
Format:
LBV $v
Purpose:
Load byte to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00000 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LSV
Opcode:
50
Format:
LSV $v
Purpose:
Load short (halfword) to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00001 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LLV
Opcode:
50
Format:
LLV $v
Purpose:
Load long (word) to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00010 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LDV
Opcode:
50
Format:
LDV $v
Purpose:
Load double to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00011 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LQV
Opcode:
50
Format:
LQV $v
Purpose:
Load quadword to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00100 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LRV
Opcode:
50
Format:
LRV $v
Purpose:
Load rest to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00101 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LPV
Opcode:
50
Format:
LPV $v
Purpose:
Load packed to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00110 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LUV
Opcode:
50
Format:
LUV $v
Purpose:
Load unpacked to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00111 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LHV
Opcode:
50
Format:
LHV $v
Purpose:
Load half to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01000 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LFV
Opcode:
50
Format:
LFV $v
Purpose:
Load fourth to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01001 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LWV
Opcode:
50
Format:
LWV $v
Purpose:
Load wrap to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01010 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
LTV
Opcode:
50
Format:
LTV $v
Purpose:
Load transpose to vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01011 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SBV
Opcode:
50
Format:
SBV $v
Purpose:
Store byte from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00000 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SSV
Opcode:
50
Format:
SSV $v
Purpose:
Store short (halfword) from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00001 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SLV
Opcode:
50
Format:
SLV $v
Purpose:
Store long (word) from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00010 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SDV
Opcode:
50
Format:
SDV $v
Purpose:
Store double (doubleword) from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00011 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SQV
Opcode:
50
Format:
SQV $v
Purpose:
Store quad (quadword) from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00100 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SRV
Opcode:
50
Format:
SRV $v
Purpose:
Store rest from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00101 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SPV
Opcode:
50
Format:
SPV $v
Purpose:
Store packed from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00110 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SUV
Opcode:
50
Format:
SUV $v
Purpose:
Store unpacked from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 00111 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SHV
Opcode:
50
Format:
SHV $v
Purpose:
Store half from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01000 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SFV
Opcode:
50
Format:
SFV $v
Purpose:
Store fourth from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01001 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
SWV
Opcode:
50
Format:
SWV $v
Purpose:
Store wrap from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01010 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
STV
Opcode:
50
Format:
STV $v
Purpose:
Store transpose from vector
Implementation:
Nothing or missing documentation
How to decode:
opcode | base | dest | 01011 | del | 0 | offset |
---|---|---|---|---|---|---|
6 | 5 | 5 | 5 | 4 | 1 | 6 |
Vector instructions
VMULF
Opcode:
18
Format:
VMULF $v
Purpose:
Vector (Frac) Multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000000 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMULU
Opcode:
18
Format:
VMULU $v
Purpose:
Vector (Unsigned Frac) Multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000001 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VRNDP
Opcode:
18
Format:
VRNDP $v
Purpose:
Vector DCT Round (-)
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000010 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMULQ
Opcode:
18
Format:
VMULQ $v
Purpose:
Vector (Integer) Multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000011 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMUDL
Opcode:
18
Format:
VMUDL $v
Purpose:
Vector low multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000100 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMUDM
Opcode:
18
Format:
VMUDM $v
Purpose:
Vector mid-m multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000101 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMUDN
Opcode:
18
Format:
VMUDN $v
Purpose:
Vector mid-n multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000110 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMUDH
Opcode:
18
Format:
VMUDH $v
Purpose:
Vector high multiply
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 000111 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMACF
Opcode:
18
Format:
VMACF $v
Purpose:
Vector (Frac) Multiply Accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001000 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMACU
Opcode:
18
Format:
VMACU $v
Purpose:
Vector (Unsigned Frac) Multiply Accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001001 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VRNDN
Opcode:
18
Format:
VRNDN $v
Purpose:
Vector DCT Round (-)
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001010 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMACQ
Opcode:
18
Format:
VMACQ $v
Purpose:
Vector (Integer) Multiply Accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001011 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMADL
Opcode:
18
Format:
VMADL $v
Purpose:
Vector low multiply accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001100 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMADM
Opcode:
18
Format:
VMADM $v
Purpose:
Vector mid-m multiply accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001101 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMADN
Opcode:
18
Format:
VMADN $v
Purpose:
Vector mid-n multiply accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001110 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |
VMADH
Opcode:
18
Format:
VMADH $v
Purpose:
Vector high multiply accumulate
Implementation:
Nothing or missing documentation
How to decode:
opcode | 1 | el | s2 | s1 | dest | 001111 |
---|---|---|---|---|---|---|
6 | 1 | 4 | 5 | 5 | 5 | 6 |