Fork me on GitHub
Information is missing, please help to complete this page.

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 KB4 KB for instructions and 4 KB for data

Document version:

1.0.0

Sources:

Glossary

link

Glossary

Name Description
v<dest>The destination vector register, where the result will be placed.
delSpecifies the destination element to be used.
offset16-bit additional offset to use from a base register.
baseThe base GPR to use for load/store operations.
v<s1>Source vector register.
v<s2>Source vector register.
elSpecifies the element to be used on a source vector register.

Registers

link

Main GPR-Processor

Name Value Size (Bits)
r0/reg00x0032
at/reg10x0132
v0/reg20x0232
v1/reg30x0332
a0/reg40x0432
a1/reg50x0532
a2/reg60x0632
a3/reg70x0732
t0/reg80x0832
t1/reg90x0932
t2/reg100x0A32
t3/reg110x0B32
t4/reg120x0C32
t5/reg130x0D32
t6/reg140x0E32
t7/reg150x0F32
s0/reg160x1032
s1/reg170x1132
s2/reg180x1232
s3/reg190x1332
s4/reg200x1432
s5/reg210x1532
s6/reg220x1632
s7/reg230x1732
t8/reg240x1832
t9/reg250x1932
k0/reg260x1A32
k1/reg270x1B32
gp/reg280x1C32
sp/reg290x1D32
s8/reg300x1E32
ra/reg310x1F32
link

Vector-Processor

Name Value Size (Bits)
$v00x00128
$v10x01128
$v20x02128
$v30x03128
$v40x04128
$v50x05128
$v60x06128
$v70x07128
$v80x08128
$v90x09128
$v100x0A128
$v110x0B128
$v120x0C128
$v130x0D128
$v140x0E128
$v150x0F128
$v160x10128
$v170x11128
$v180x12128
$v190x13128
$v200x14128
$v210x15128
$v220x16128
$v230x17128
$v240x18128
$v250x19128
$v260x1A128
$v270x1B128
$v280x1C128
$v290x1D128
$v300x1E128
$v310x1F128

Load and Store Instructions

link

LBV

Opcode:

50

Format:

LBV $v[del], offset(base)

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
link

LSV

Opcode:

50

Format:

LSV $v[del], offset(base)

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
link

LLV

Opcode:

50

Format:

LLV $v[del], offset(base)

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
link

LDV

Opcode:

50

Format:

LDV $v[del], offset(base)

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
link

LQV

Opcode:

50

Format:

LQV $v[del], offset(base)

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
link

LRV

Opcode:

50

Format:

LRV $v[del], offset(base)

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
link

LPV

Opcode:

50

Format:

LPV $v[del], offset(base)

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
link

LUV

Opcode:

50

Format:

LUV $v[del], offset(base)

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
link

LHV

Opcode:

50

Format:

LHV $v[del], offset(base)

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
link

LFV

Opcode:

50

Format:

LFV $v[del], offset(base)

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
link

LWV

Opcode:

50

Format:

LWV $v[del], offset(base)

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
link

LTV

Opcode:

50

Format:

LTV $v[del], offset(base)

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
link

SBV

Opcode:

50

Format:

SBV $v[del], offset(base)

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
link

SSV

Opcode:

50

Format:

SSV $v[del], offset(base)

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
link

SLV

Opcode:

50

Format:

SLV $v[del], offset(base)

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
link

SDV

Opcode:

50

Format:

SDV $v[del], offset(base)

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
link

SQV

Opcode:

50

Format:

SQV $v[del], offset(base)

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
link

SRV

Opcode:

50

Format:

SRV $v[del], offset(base)

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
link

SPV

Opcode:

50

Format:

SPV $v[del], offset(base)

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
link

SUV

Opcode:

50

Format:

SUV $v[del], offset(base)

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
link

SHV

Opcode:

50

Format:

SHV $v[del], offset(base)

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
link

SFV

Opcode:

50

Format:

SFV $v[del], offset(base)

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
link

SWV

Opcode:

50

Format:

SWV $v[del], offset(base)

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
link

STV

Opcode:

50

Format:

STV $v[del], offset(base)

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

link

VMULF

Opcode:

18

Format:

VMULF $v, $v, $v[el]

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
link

VMULU

Opcode:

18

Format:

VMULU $v, $v, $v[el]

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
link

VRNDP

Opcode:

18

Format:

VRNDP $v, $v, $v[el]

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
link

VMULQ

Opcode:

18

Format:

VMULQ $v, $v, $v[el]

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
link

VMUDL

Opcode:

18

Format:

VMUDL $v, $v, $v[el]

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
link

VMUDM

Opcode:

18

Format:

VMUDM $v, $v, $v[el]

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
link

VMUDN

Opcode:

18

Format:

VMUDN $v, $v, $v[el]

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
link

VMUDH

Opcode:

18

Format:

VMUDH $v, $v, $v[el]

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
link

VMACF

Opcode:

18

Format:

VMACF $v, $v, $v[el]

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
link

VMACU

Opcode:

18

Format:

VMACU $v, $v, $v[el]

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
link

VRNDN

Opcode:

18

Format:

VRNDN $v, $v, $v[el]

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
link

VMACQ

Opcode:

18

Format:

VMACQ $v, $v, $v[el]

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
link

VMADL

Opcode:

18

Format:

VMADL $v, $v, $v[el]

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
link

VMADM

Opcode:

18

Format:

VMADM $v, $v, $v[el]

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
link

VMADN

Opcode:

18

Format:

VMADN $v, $v, $v[el]

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
link

VMADH

Opcode:

18

Format:

VMADH $v, $v, $v[el]

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