Vu Instruction Manual
Vu Instruction Manual
by BigBoss
Layout changes and additions by Jules ([email protected])
Updates
1/7/2003 Initial Version
The VU0 is the first of two Vector Processing Units in PS2. It's designed to operate in two modes : as the
second coprocessor for the 5900 core or independently as a microprocessor. Operating as a coprocessor the
VU0 utilises either the upper or the lower instruction in each 64-bit microcode stored in it's instruction
cache. Operating as an independent microprocessor the VU0 receives data fed from DMA to VIF0 and finally to
the VU0 instruction or data cache. In
microprocessor mode the VU0 utilises both upper and lower microcode instructions.
The VU1 is an independent microproseccor operating in parallel to the CPU. It executes the program in its
instruction cache on demand of a VIF1 program. VU1 programms use both upper and lower microcode instructions
and and has additional commands to the VU0, because of the EPU and the path to the GIF.
REGISTERS
The VU0 has 32 128 bit floating point registers , 16 32 bit integer data registers and 16 control registers.
FLOATING POINT REGISTERS
The floating point registers are 128 bits wide and each is divided in 4
fields of 32 bits : x , y , z and w.
FLOATING POINT REGISTERS FIELD LAYOUT
Word 0
Word 1
Word 2
Word 3
___________________________________________________________________
|31
0|63
32|95
64|127
96|
|
x
|
y
|
z
|
w
|
|
|
|
|
|
VU0F00 AND VU1F00 REGISTERS
Word 0
Word 1
Word 2
Word 3
___________________________________________________________________
|31
0|63
32|95
64|127
96|
|
|
|
|
|
|
0.0
|
0.0
|
0.0
|
1.0
|
MAC flag
Bits
: 32
Bits used
: lower 16
Instructions : FMAND
rt,rs
FMEQ
rt,rs
FMOR
rt,rs
Clipping flag
Bits
: 32
Bits used
: lower 24
Instructions : FCAND
rt,24 bit immediate
FCEQ
rt,24 bit immediate
FCGET
rt
FCOR
rt,24 bit immediate
FCSET
24 bit immediate
R register
Bits
: 32
Bits used
: 32
Instructions : RINIT
RGET
RNEXT
RXOR
R,Frs.e
Frt,R
Frt,R
R,Frs
I register
Bits
: 32
Bits used
: 32 (floating point)
Instructions : ADDI
Upper
SUBI
Upper
MULI
Upper
MADDI
Upper
MSUBI
Upper
ADDAI
Upper
SUBAI
Upper
MULAI
Upper
MADDAI
Upper
MSUBAI
Upper
MAXII
Upper
MINII
Upper
Q register
Bits
: 32
Bits used
: 32 (floating point)
Instructions : ADDQ
Upper
SUBQ
Upper
MULQ
Upper
MADDQ
Upper
MSUBQ
Upper
ADDAQ
Upper
SUBAQ
Upper
MULAQ
Upper
MADDAQ
Upper
MSUBAQ
Upper
DIV
Q,rt,rs Lower
SQRT
Q,rs
Lower
RSQRT Q,rs
Lower
TPC
FBRST
VPU-STAT
CMSAR0
CMSAR1
96
|
64
|
32
|
0
|
Register are named VF00 VF31, VF00 is static and has the values; X = 0.0f, Y = 0.0f, Z = 0.0f, W = 1.0f
Now lets look at some documentation.
Add broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
ADDbc | bc |
|
| 0| 0|
dest
|
|
|
|
0000 |
|
Format:
ADDx.dest
ADDy.dest
ADDz.dest
ADDw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To add up to 4 fields with the broadcast field
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
ft.bc
ft.bc
ft.bc
ft.bc
First, lets look at description, if dest & .x == true, this means that if we can do
addy.x $vf3x, $vf4x, $vf5y
This performs $vf3.x (x part of vf3) = $vf4.x (x part of vf4) + $vf5.y (y part of vf5)
But what the description also saids, is that we can combine different dests
addy.xyzw $vf3xywz, $vf4xywz, $vf5y
This performs
$vf3.x
$vf3.y
$vf3.z
$vf3.w
=
=
=
=
$vf4.x
$vf4.y
$vf4.z
$vf4.w
+
+
+
+
$vf5.y
$vf5.y
$vf5.y
$vf5.y
Or ..
addz.xw $vf3xw, $vf4xw, $vf5z
Which performs
$vf3.x = $vf4.x + $vf5.z
$vf3.w = $vf4.w + $vf5.z
You can also just write this instruction like this and still make sense because of the last z on $vf5
addz.xw $vf3, $vf4, $vf5z
As you can see VU is very flexible and as you learn more and read others code you will learn quite a few
tricks which will result in fast VU code.
VU0 INSTRUCTION NOTE
This manaul covers VU1 instructions, but the VU1 instructions which are avaliable on VU0 are noted on the
following pages. Just remember that you need to add a V as the first letter of the instruction, like
VU1 Instruction: addy.x $vf3x, $vf4x, $vf5y
VU0 Instruction: vaddy.x $vf3x, $vf4x, $vf5y
VU0
VU1
microprocessor
Instruction VU0
coprocessor
VU0
VU1
microprocessor
ADD.dest
I.dest
Q.dest
e.dest
ADDA.dest
I.dest
Q.dest
e.dest
SUB.dest
I.dest
Q.dest
e.dest
SUBA.dest
I.dest
Q.dest
e.dest
MUL.dest
I.dest
Q.dest
e.dest
MULA.dest
I.dest
Q.dest
e.dest
MADD.dest
I.dest
Q.dest
e.dest
MADDA.dest
I.dest
Q.dest
e.dest
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
MSUB.dest
Q.dest
I.dest
e.dest
MSUBA.dest
I.dest
Q.dest
e.dest
OPMULA.xyz
OPMSUB.xyz
ABS.dest
MAX.dest
I.dest
e.dest
MINI.dest
I.dest
e.dest
CLIPw.dest
ITOF0.dest
4.dest
12.dest
15.dest
FTOI0.dest
4.dest
12.dest
15.dest
NOP
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
VU0
VU1
microprocessor
Instruction VU0
coprocessor
VU0
VU1
microprocessor
IADD
IADDI
IADDIU
ISUB
ISUBIU
DIV
SQRT
RQSRT
IAND
IOR
B
BAL
IBEQ
IBNE
IBGTZ
IBLEZ
IBGEZ
JR
JALR
ILW.dest
ILWR.dest
ISW.dest
ISWR.dest
LQ.dest
LQI.dest
LQD.dest
SQ.dest
SQI.dest
SQD.dest
MOVE.dest
MFIR.dest
MTIR
MR32.dest
FCAND
FCOR
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
FCEQ
FCGET
FCSET
FSAND
FSOR
FSEQ
FSSET
FMAND
FMOR
FMEQ
RINIT
RGET.dest
RNEXT.dest
RXOR
WAITP
WAITQ
ESUM
ESQRT
ESADD
ERSQRT
ERSADD
EATAN
EATANxz
EATANxy
ELENG
ESIN
ERLENG
ERCPR
EEXP
MFP.dest
XTOP
XITOP
XGKICK
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
FLAG
i
e
m
d
t
Absolute
ABS
____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
ABS
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00111
|
1111 | 01 |
Format:
ABS.dest fs,ft
Purpose:
To calculate the absolute values of up to 4 fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fs.x
fs.y
fs.z
fs.w
<<<<-
abs(ft.x)
abs(ft.y)
abs(ft.z)
abs(ft.w)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Add
ADD
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
ADD
|
|
| 0| 0|
dest
|
|
|
|
101000
|
Format:
ADD.dest fd,fs,ft
Purpose:
To add up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.x
ft.y
ft.z
ft.w
Add I
ADDI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
ADDI
|
|
| 0| 0|
dest
|
00000
|
|
|
100010
|
Format:
ADDI.dest fd,fs,I
Purpose:
To add up to 4 fields with the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
I
I
I
I
Add Q
ADDQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
ADDQ
|
|
| 0| 0|
dest
|
00000
|
|
|
100000
|
Format:
ADDQ.dest fd,fs,Q
Purpose:
To add up to 4 fields with the Q register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Q
Q
Q
Q
Add broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
ADDbc | bc |
|
| 0| 0|
dest
|
|
|
|
0000 |
|
Format:
ADDx.dest
ADDy.dest
ADDz.dest
ADDw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To add up to 4 fields with the broadcast field
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.bc
ft.bc
ft.bc
ft.bc
Add accumulator
ADDA
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
ADDA
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
01010
|
1111 | 00 |
Format:
ADDA.dest ACC,fs,ft
Purpose:
To add up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.x
ft.y
ft.z
ft.w
Add accumulator I
ADDAI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
ADDAI
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01000
|
1111 | 10 |
Format:
ADDAI.dest ACC,fs,I
Purpose:
To add up to 4 fields with the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
I
I
I
I
Add accumulator Q
ADDAQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
ADDAQ
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01000
|
1111 | 00 |
Format:
ADDAQ.dest ACC,fs,Q
Purpose:
To add up to 4 fields with the Q register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Q
Q
Q
Q
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
ADDAbc
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00000
|
1111 | 00 |
Format:
ADDAx.dest
ADDAy.dest
ADDAz.dest
ADDAw.dest
ACC,fs,ft
ACC,fs,ft
ACC,fs,ft
ACC,fs,ft
Purpose:
To add up to 4 fields with the broadcast field
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.bc
ft.bc
ft.bc
ft.bc
Clip
CLIPw
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
CLIPw
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00111
|
1111 | 11 |
Format:
CLIPw.dest ft,fs
Purpose:
To update the status flag about the clipping condition of the destination values
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Floating to integer
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
FTOI
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00101
|
1111 |
|
Format:
FTOI0.dest It,fs
FTOI4.dest It,fs
FTOI12.dest It,fs
FTOI15.dest It,fs
Purpose:
To convert a floating point value to a fixed point (integer) number of 0, 4, 12 or 15
decimal digits
Description: if
elseif
elseif
elseif
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ft
ft
ft
ft
<<<<-
FixedPoint0/4/12/15(fs.x)
FixedPoint0/4/12/15(fs.y)
FixedPoint0/4/12/15(fs.z)
FixedPoint0/4/12/15(fs.w)
Restrictions:
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1. It is primarily used with the Random
number generator
The broadcast field specifies the number of decimal digits
Broadcast field
Meaning
00
0 decimal digits
01
4 decimal digits
10
12 decimal digits
11
15 decimal digits
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
ITOF
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00100
|
1111 |
|
Format:
ITOF0.dest ft,fs
ITOF4.dest ft,fs
ITOF12.dest ft,fs
ITOF15.dest ft,fs
Purpose:
To convert a fixed point (integer) value of 0, 4, 12 or 15 decimal digits to a floating
point number
Description: if
elseif
elseif
elseif
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ft.x
ft.y
ft.z
ft.w
<<<<-
FixedPoint0/4/12/15(fs)
FixedPoint0/4/12/15(fs)
FixedPoint0/4/12/15(fs)
FixedPoint0/4/12/15(fs)
Restrictions:
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1. It is primarily used with the Random
number generator
The broadcast field specifies the number of decimal digits
Broadcast field
Meaning
00
0 decimal digits
01
4 decimal digits
10
12 decimal digits
11
15 decimal digits
MADD
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MADD
|
|
| 0| 0|
dest
|
|
|
|
101001
|
Format:
MADD.dest fd,fs,ft
Purpose:
To multiply up to 4 matching fields and add the products with matching fields of the
accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.x)
ft.y)
ft.z)
ft.w)
MADDI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MADDI
|
|
| 0| 0|
dest
|
00000
|
|
|
100011
|
Format:
MADDI.dest fd,fs,I
Purpose:
To multiply up to 4 fields with the I register and add the products with matching fields
of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
I)
I)
I)
I)
MADDQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MADDQ
|
|
| 0| 0|
dest
|
00000
|
|
|
100001
|
Format:
MADDQ.dest fd,fs,Q
Purpose:
To multiply up to 4 fields with the Q register and add the products with matching fields
of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
Q)
Q)
Q)
Q)
broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
| MADDbc | bc |
|
| 0| 0|
dest
|
|
|
|
0010 |
|
Format:
MADDx.dest
MADDy.dest
MADDz.dest
MADDw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To multiply up to 4 fields with the broadcast field and add the products with matching
fields of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
+
+
+
+
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.bc)
ft.bc)
ft.bc)
ft.bc)
accumulator
MADDA
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
MADDA
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
01010
|
1111 | 01 |
Format:
MADDA.dest ACC,fs,ft
Purpose:
To multiply up to 4 fields and add the products with matching fields in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
+
+
+
+
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.x)
ft.y)
ft.z)
ft.w)
accumulator I
MADDAI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
MADDAI
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01000
|
1111 | 11 |
Format:
MADDAI.dest ACC,fs,I
Purpose:
To multiply up to 4 fields with the I register and add the products with matching fields
in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
+
+
+
+
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
I)
I)
I)
I)
accumulator Q
MADDAQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
MADDAQ
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01000
|
1111 | 01 |
Format:
MADDAI.dest ACC,fs,Q
Purpose:
To multiply up to 4 fields with the Q register and add the products with matching fields
in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
+
+
+
+
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
Q)
Q)
Q)
Q)
accumulator broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
MADDAbc
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
01000
|
1111 |
|
Format:
MADDAx.dest
MADDAy.dest
MADDAz.dest
MADDAw.dest
ACC,fs,ft
ACC,fs,ft
ACC,fs,ft
ACC,fs,ft
Purpose:
To multiply up to 4 fields with the broadcast field and add the products with matching
fields in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
+
+
+
+
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.x)
ft.y)
ft.z)
ft.w)
Maximum
MAX
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MAX
|
|
| 0| 0|
dest
|
|
|
|
101011
|
Format:
MAX.dest fd,fs,ft
Purpose:
To find the maximum value between up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
max(fs.x
max(fs.y
max(fs.z
max(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
ft.bc)
ft.bc)
ft.bc)
ft.bc)
Maximum I
MAXI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MAXI
|
|
| 0| 0|
dest
|
00000
|
|
|
011101
|
Format:
MAXI.dest fd,fs,I
Purpose:
To find the maximum value between up to 4 fields and the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
max(fs.x
max(fs.y
max(fs.z
max(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
I)
I)
I)
I)
Maximum broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
| MAXbc | bc |
|
| 0| 0|
dest
|
|
|
|
0100 |
|
Format:
MAXx.dest
MAXy.dest
MAXz.dest
MAXw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To find the maximum value between up to 4 fields and the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
max(fs.x
max(fs.y
max(fs.z
max(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
ft.bc)
ft.bc)
ft.bc)
ft.bc)
Minimum
MINI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MINI
|
|
| 0| 0|
dest
|
|
|
|
101111
|
Format:
MINI.dest fd,fs,ft
Purpose:
To find the minimum value between up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
mini(fs.x
mini(fs.y
mini(fs.z
mini(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
ft.x)
ft.y)
ft.z)
ft.w)
Minimum I
MINII
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MINII
|
|
| 0| 0|
dest
|
00000
|
|
|
011111
|
Format:
MINII.dest fd,fs,ft
Purpose:
To find the minimum value between up to 4 fields and the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
mini(fs.x
mini(fs.y
mini(fs.z
mini(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
I)
I)
I)
I)
Minimum broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
| MINIbc | bc |
|
| 0| 0|
dest
|
|
|
|
0101 |
|
Format:
MINIx.dest
MINIy.dest
MINIz.dest
MINIw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To find the minimum value between up to 4 fields and the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
mini(fs.x
mini(fs.y
mini(fs.z
mini(fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
:
:
:
:
ft.bc)
ft.bc)
ft.bc)
ft.bc)
MSUB
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MSUB
|
|
| 0| 0|
dest
|
|
|
|
101101
|
Format:
MSUB.dest fd,fs,ft
Purpose:
To multiply up to 4 matching fields and substract the products from matching fields of
the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.x)
ft.y)
ft.z)
ft.w)
MSUBI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MSUBI
|
|
| 0| 0|
dest
|
00000
|
|
|
100111
|
Format:
MSUBI.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the I register and substract the products from matching
fields of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
I)
I)
I)
I)
MSUBQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MSUBQ
|
|
| 0| 0|
dest
|
00000
|
|
|
100101
|
Format:
MSUBQ.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the Q register and substract the products from matching
fields of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
Q)
Q)
Q)
Q)
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
| MSUBbc | bc |
|
| 0| 0|
dest
|
|
|
|
0011 |
|
Format:
MSUBx.dest
MSUBy.dest
MSUBw.dest
MSUBw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To multiply up to 4 fields with the broadcast field and substract the products from
matching fields of the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.bc)
ft.bc)
ft.bc)
ft.bc)
MSUBA
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
MSUBA
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
01011
|
1111 | 01 |
Format:
MSUBA.dest fd,fs,ft
Purpose:
To multiply up to 4 fields and substract the products from matching fields in the
accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.bc)
ft.bc)
ft.bc)
ft.bc)
MSUBAI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
MSUBAI
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01001
|
1111 | 11 |
Format:
MSUBAI.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the I register and substract the products from matching
fields in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
I)
I)
I)
I)
MSUBAQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
MSUBAQ
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01001
|
1111 | 01 |
Format:
MSUBAQ.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the Q register and substract the products from matching
fields in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
Q)
Q)
Q)
Q)
MSUBAx.dest
MSUBAy.dest
MSUBAz.dest
MSUBAw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To multiply up to 4 fields with the broadcast field and substract the products from
matching fields in the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
ACC.x
ACC.y
ACC.z
ACC.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
(fs.x
(fs.y
(fs.z
(fs.w
*
*
*
*
ft.bc)
ft.bc)
ft.bc)
ft.bc)
Multiply
MUL
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MUL
|
|
| 0| 0|
dest
|
|
|
|
101010
|
Format:
MUL.dest fd,fs,ft
Purpose:
To multiply up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
*
*
*
*
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.x
ft.y
ft.z
ft.w
Multiply I
MULI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MULI
|
|
| 0| 0|
dest
|
00000
|
|
|
011110
|
Format:
MULI.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the I register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
*
*
*
*
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
I)
I)
I)
I)
Multiply Q
MULQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
MULQ
|
|
| 0| 0|
dest
|
00000
|
|
|
011100
|
Format:
MULQ.dest fd,fs,ft
Purpose:
To multiply up to 4 fields with the Q register
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
*
*
*
*
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Q)
Q)
Q)
Q)
Multiply broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
MULbc | bc |
|
| 0| 0|
dest
|
|
|
|
0110 |
|
Format:
MULx.dest
MULy.dest
MULz.dest
MULw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,fs,ft
Purpose:
To multiply up to 4 fields with the broadcast field
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
*
*
*
*
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.bc)
ft.bc)
ft.bc)
ft.bc)
No operation
NOP
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
0
|
NOP
| SPECIAL | bc |
|
| 0| 0| 0| 0| 0| 0|
00000
|
00000
|
01011
|
1111 | 11 |
Format:
NOP
Purpose:
To perform no operation
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
OPMULA
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
OPMULA
| SPECIAL | bc |
|
| 0| 0| 1| 1| 1| 0|
|
|
01011
|
1111 | 10 |
Format:
OPMULA.xyz ACC,fs,ft
Purpose:
To calculate the outer product pre increment
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
OPMSUB
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
OPMSUB
|
|
| 0| 0| 1| 1| 1| 0|
|
|
|
011011
|
Format:
OPMSUB.xyz fd,fs,ft
Purpose:
To calculate the outer product post decrement
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Substract
SUB
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
SUB
|
|
| 0| 0|
dest
|
|
|
|
101100
|
Format:
SUB.dest fd,fs,ft
Purpose:
To substract up to 4 matching fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.x
ft.y
ft.z
ft.w
Substract I
SUBI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
SUBI
|
|
| 0| 0|
dest
|
00000
|
|
|
100110
|
Format:
SUBI.dest fd,fs,Q
Purpose:
To substract the I register from up to 4 fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
I
I
I
I
Substract Q
SUBQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
fd
|
SUBQ
|
|
| 0| 0|
dest
|
00000
|
|
|
100100
|
Format:
SUBQ.dest fd,fs,Q
Purpose:
To substract the Q register from up to 4 fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Q
Q
Q
Q
Substract broadcast
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
fd
|
SUBbc | bc |
|
| 0| 0|
dest
|
|
|
|
0001 |
|
Format:
SUBx.dest
SUBy.dest
SUBz.dest
SUBw.dest
fd,fs,ft
fd,fs,ft
fd,fs,ft
fd,ft,fs
Purpose:
To substract the broadcast field from up to 4 fields
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fd.x
fd.y
fd.z
fd.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.bc
ft.bc
ft.bc
ft.bc
Substract accumulator
SUBA
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
SUBA
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
01011
|
1111 | 00 |
Format:
SUBA.dest ACC,fs,ft
Purpose:
To substract up to 4 matching fields to the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.x
ft.y
ft.z
ft.w
Substract accumulator I
SUBAI
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
SUBAI
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01001
|
1111 | 10 |
Format:
SUBAI.dest ACC,fs,I
Purpose:
To substract the I register from up to 4 matching fields to the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
I
I
I
I
Substract accumulator Q
SUBAQ
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
0
|
fs
|
SUBAQ
| SPECIAL | bc |
|
| 0| 0|
dest
|
00000
|
|
01001
|
1111 | 00 |
Format:
SUBAQ.dest ACC,fs,Q
Purpose:
To substract the Q register from up to 4 matching fields to the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Q
Q
Q
Q
_____________________________________________________________________________________________
|31|30|29|28|27|26|25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
| I| E| M| D| T| 0| 0| x| y| z| w|
ft
|
fs
|
SUBAbc
| SPECIAL | bc |
|
| 0| 0|
dest
|
|
|
00001
|
1111 |
|
Format:
SUBAx.dest
SUBAy.dest
SUBAz.dest
SUBAw.dest
ACC,fs,ft
ACC,fs,ft
ACC,fs,ft
ACC,ft,fs
Purpose:
To substract up to matching 4 fields to the accumulator
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ACC.x
ACC.y
ACC.z
ACC.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ft.bc
ft.bc
ft.bc
ft.bc
Branch
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
B
| x| y| z| w|
0
|
0
|
offset
|
|
0100000
| 0| 0| 0| 0|
00000
|
00000
|
|
Format:
B offset
Purpose:
To unconditionally branch to a VU instruction address
Description: branch -> PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
BAL
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
BAL
| x| y| z| w|
It
|
0
|
offset
|
|
0100001
| 0| 0| 0| 0|
|
00000
|
|
Format:
Purpose:
To unconditionally branch to a VU instruction address and link to an IR
Description: branch -> PC + offset + 8
It -> PC + 16
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
Divide
DIV
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
ft
|
fs
|
DIV
| SPECIAL | bc |
|
1000000
| t.e | s.e |
|
|
01110
|
1111 | 00 |
Format:
DIV Q,ft.e,fs.e
Purpose:
To divide a field of a VU FPR with a field of a VU FPR and store the result in the Q
register
Description: Q <- ft.e/fs.e
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Archtangent
EATAN
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
EATAN
| SPECIAL | bc |
|
1000000
| 0| 0| s.e |
00000
|
|
11111
|
1111 | 01 |
Format:
EATAN P, fs.e
Purpose:
To calculate the archtangent of a single field in a VU FPR and store it in the P register
Description: P <- arch(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Archtangent xy
EATANxy
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
EATAN
| SPECIAL | bc |
|
1000000
| 1| 1| 0| 0|
00000
|
|
11101
|
1111 | 00 |
Format:
EATANxy P, fs
Purpose:
To calculate the archtangent of two fields in a VU FPR and store it in the P register
Description: P <- arch(fs.x, fs.y)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Archtangent xz
EATANxz
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
EATAN
| SPECIAL | bc |
|
1000000
| 1| 0| 1| 0|
00000
|
|
11101
|
1111 | 01 |
Format:
EATANxy P, fs
Purpose:
To calculate the archtangent of two fields in a VU FPR and store it in the P register
Description: P <- arch(fs.x, fs.z)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Exponent
EEXP
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
EEXP
| SPECIAL | bc |
|
1000000
| 0| 0| s.e |
00000
|
|
11111
|
1111 | 10 |
Format:
EEXP P, fs.e
Purpose:
To calculate the exponent of a single field of a VU FPR and store it in the P register
Description: P <- exp(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Length
ELENG
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ELENG
| SPECIAL | bc |
|
1000000
| 1| 1| 1| 0|
00000
|
|
11100
|
1111 | 10 |
Format:
ELENG P, fs
Purpose:
To calculate the length for the values in a VU FPR
Description: P <- len(fs)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Reciprocal root
ERCPR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ERCPR
| SPECIAL | bc |
|
1000000
| 0| 0| s.e |
00000
|
|
11110
|
1111 | 10 |
Format:
ERCPR P, fs.e
Purpose:
To calculate the reciprocal root for a single field of a VU FPR and store it in the P
register
Description: P <- rec.root(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Reverse length
ERLENG
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ERLENG
| SPECIAL | bc |
|
1000000
| 1| 1| 1| 0|
00000
|
|
11100
|
1111 | 11 |
Format:
ERLENG P, fs.xyz
Purpose:
To calculate the reverse length for the xyz fields of a VU FPR and store it in the P
register
Description: P <- rev.len(fs.xyz)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
ERSADD
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ERSADD
| SPECIAL | bc |
|
1000000
| 1| 1| 1| 0|
00000
|
|
11100
|
1111 | 01 |
Format:
ERSADD P,fs
Purpose:
To calculate the reverse square root of the addition of the xyz fields of a VU FPR and
store it in the P register
Description: P <- rev.sq.root(fs.x + fs.y + fs.z)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Square root
ESQRT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ESQRT
| SPECIAL | bc |
|
1000000
| 0 0| s.e |
00000
|
|
11110
|
1111 | 01 |
Format:
ESQRT P, fs.e
Purpose:
To calculate the square root of a single field of a VU FPR and store it in the P register
Description: P <- sq.root(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
ESADD
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ESADD
| SPECIAL | bc |
|
1000000
| 1| 1| 1| 0|
00000
|
|
11100
|
1111 | 00 |
Format:
ESADD P, fs.xyz
Purpose:
To calculate the square root of the sum of the xyz fields of a VU FPR and store it in
the P register
Description: P <- sq.root(fs.x + fs.y + fs.z)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Sin
SIN
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ESIN
| SPECIAL | bc |
|
1000000
| 0| 0| s.e |
00000
|
|
11111
|
1111 | 00 |
Format:
ESIN P, fs.e
Purpose:
To calculate the sin of a single field of VU FPR and store it in the P register
Description: P <- sin(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Square root
ESQRT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ESQRT
| SPECIAL | bc |
|
1000000
| 0| 0| s.e |
00000
|
|
11110
|
1111 | 00 |
Format:
ESQRT P, fs.e
Purpose:
To calculate the square root of a single field of VU FPR and store it in the P register
Description: P <- sq.root(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Sum
ESUM
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
02|01|00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
ESUM
| SPECIAL | bc |
|
1000000
| 1| 1| 1| 1|
00000
|
|
11101
|
1111 | 10 |
Format:
ESUM P,fs
Purpose:
To calculate the sum of all the fields of a VU FPR and store it in the P register
Description: P <- fs.x + fs.y + fs.z + fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable only to VU1
Clipping AND
FCAND
_____________________________________________________________________________________________
|31
25|24|23
00|
|
FCAND
| x|
immediate
|
|
0010010
| 0|
|
Format:
FCAND VI01,imm24
Purpose:
To perform a logical AND between the VI01 register and the 24 bit immediate and update
the clipping flag
Description: clipping flag(VI01 AND imm24)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Clipping equality
FCEQ
_____________________________________________________________________________________________
|31
25|24|23
00|
|
FCEQ
| x|
immediate
|
|
0010000
| 0|
|
Format:
FCEQ VI01,imm24
Purpose:
To perform an equality check between the VI01 register and the 24 bit immediate and
only update the clipping flag on equality
Description: clipping flag(VI01 EQ imm24)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Clipping transfer
FCGET
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FCGET
| x| y| z| w|
It
|
0
|
0
|
|
0011100
| 0| 0| 0| 0|
|
00000
|
00000000000
|
Format:
FCGET It
Purpose:
To move the clipping flag to a VU IR
Description: It <- clipping flag
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Clipping OR
FCOR
_____________________________________________________________________________________________
|31
25|24|23
00|
|
FCOR
| x|
immediate
|
|
0010011
| 0|
|
Format:
FCOR VI01,imm24
Purpose:
To perform an OR between the VI01 register and the 24 bit immediate and update the
clipping flag
Description: clipping flag(VI01 OR imm24)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Clipping set
FCSET
_____________________________________________________________________________________________
|31
25|24|23
00|
|
FCSET
| x|
immediate
|
|
0010001
| 0|
|
Format:
FCSET imm24
Purpose:
To set the clipping flag to the value of the 24 bit immediate
Description: clipping flag = imm24
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MAC AND
FMAND
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FMAND
| x| y| z| w|
It
|
Is
|
0
|
|
0011010
| 0| 0| 0| 0|
|
|
00000000000
|
Format:
FMAND It,Is
Purpose:
To AND the values in two VU IRs and move the result to the MAC flag
Description: MAC <- It AND Is
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MAC equality
FMEQ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FMEQ
| x| y| z| w|
It
|
Is
|
0
|
|
0011000
| 0| 0| 0| 0|
|
|
00000000000
|
Format:
FMEQ It,Is
Purpose:
To compare the values in two VU IRs and only move the result to the MAC flag on
eqauality
Description: MAC eq(It,Is)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MAC OR
FMOR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FMOR
| x| y| z| w|
It
|
Is
|
0
|
|
0011011
| 0| 0| 0| 0|
|
|
00000000000
|
Format:
FMOR It,Is
Purpose:
To OR the values two VU IRs and move the result to the MAC flag
Description: MAC == It OR Is
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Status AND
FSAND
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FSAND
| x| y| z| w|
It
|
0
|
immediate
|
|
0010110
| 0| 0| 0| *|
|
00000
|
12th bit is in dest.w
|
Format:
FSAND It,imm12
Purpose:
To AND the value in a VU IR with a 12 bit immediate and move the result to the status
flag
Description: STATUS == It OR imm12
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Status equality
FSEQ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FSEQ
| x| y| z| w|
It
|
0
|
immediate
|
|
0010100
| 0| 0| 0| *|
|
00000
|
12th bit is in dest.w
|
Format:
Purpose:
To compare the value in a VU IR with a 12 bit immediate and only move the result to the
status flag on equality
Description: STATUS eq(It, imm12)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Status OR
FSOR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FSOR
| x| y| z| w|
It
|
0
|
immediate
|
|
0010111
| 0| 0| 0| *|
|
00000
|
12th bit is in dest.w
|
Format:
Purpose:
To OR the value in a VU IR with a 12 bit immediate and move the result to the status
flag
Description: STATUS == It OR imm12
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Status set
FSSET
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
FSSET
| x| y| z| w|
0
|
0
|
immediate
|
|
0010101
| 0| 0| 0| *|
00000
|
00000
|
12th bit is in dest.w
|
Format:
FSSET imm12
Purpose:
To set the status flag to the value of the 12bit immediate
Description: STATUS == imm12
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Integer add
IADD
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
Is
|
Id
|
IADD
|
|
1000000
| 0| 0| 0| 0|
|
|
|
110000
|
Format:
Purpose:
To add two VU IRs and store the result in a VU IR
Description: Id = Is + It
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
IADDI
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
Is
|
imm
|
IADDI
|
|
1000000
| 0| 0| 0| 0|
|
|
|
110010
|
Format:
Purpose:
To add a VU IRs with a 5 bit immediate and store the result in a VU IR
Description: It = Is + imm5
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
IADDIU
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
IADDIU
| x| y| z| w|
It
|
Is
|
immediate
|
|
0001000
| * * * *|
|
| the upper 4 bits are in dest |
Format:
Purpose:
To add a VU IRs with an unsigned 12 bit immediate and store the result in a VU IR
Description: It = Is + imm12
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Integer AND
IAND
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
Is
|
Id
|
IADD
|
|
1000000
| 0| 0| 0| 0|
|
|
|
110100
|
Format:
Purpose:
To AND two VU IRs and store the result in a VU IR
Description: Id = Is AND It
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
IBEQ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
IBEQ
| x| y| z| w|
It
|
Is
|
offset
|
|
0101000
| 0| 0| 0| 0|
|
|
|
Format:
Purpose:
To branch to a VU instruction memory offset if two VU IRs are equal
Description: PC <- PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
IBGEZ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
IBGEZ
| x| y| z| w|
0
|
Is
|
offset
|
|
0101111
| 0| 0| 0| 0|
00000
|
|
|
Format:
Purpose:
To branch to a VU instruction memory offset if a VU IR is greater or equal to zero
Description: if Is >=0
PC <- PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
IBGTZ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
IBGTZ
| x| y| z| w|
0
|
Is
|
offset
|
|
0101101
| 0| 0| 0| 0|
00000
|
|
|
Format:
Purpose:
To branch to a VU instruction memory offset if a VU IR is greater than zero
Description: if Is >0
PC <- PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
Purpose:
To branch to a VU instruction memory offset if a VU IR is less or equal to zero
Description: if Is <=0
PC <- PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
IBLEZ
IBNE
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
IBNE
| x| y| z| w|
It
|
Is
|
offset
|
|
0101001
| 0| 0| 0| 0|
|
|
|
Format:
Purpose:
To branch to a VU instruction memory offset if two VU IR are not equal
Description: if Is =| It
PC <- PC + offset + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU instruction memory.
This instruction is applicable to both VU0 and VU1
ILW
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
ILW
| x| y| z| w|
ft
|
base
|
offset
|
|
0000100
|
dest
|
|
|
|
Format:
Purpose:
To load up to 4 fields of a VU FPR with a word from the VU data cache
Description: fs.dest <- offset(base)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU data memory.
This instruction is applicable to both VU0 and VU1
ILWR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
base
|
ILWR
|
SPECIAL
|
|
1000000
|
dest
|
|
|
01111
|
111110
|
Format:
Purpose:
To load up to 4 fields of a VU FPR with a word from the VU data cache
Description: fs.dest <- [base]
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Integer OR
IOR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
Is
|
Id
|
IOR
|
|
1000000
| 0| 0| 0| 0|
|
|
|
110011
|
Format:
Purpose:
To OR two VU IRs and store the result in a VU IR
Description: Id = Is OR It
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Integer substract
ISUB
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
Is
|
Id
|
ISUB
|
|
1000000
| 0| 0| 0| 0|
|
|
|
110001
|
Format:
Purpose:
To substract two VU IRs and store the result in a VU IR
Description: Id = Is - It
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Purpose:
To substract an unsigned 12 bit immediate from a VU IR and store the result in a VU IR
Description: It = Is + imm12
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
ISUBIU
Purpose:
To store up to 4 fields of a VU FPR in the VU data cache
Description: offset(base) <- fs.dest
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU data memory.
This instruction is applicable to both VU0 and VU1
ISW
ISWR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
base
|
ISWR
|
SPECIAL
|
|
1000000
|
dest
|
|
|
01111
|
111111
|
Format:
Purpose:
To store up to 4 fields of a VU FPR in the VU data cache
Description: [base] <- fs.dest
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
JALR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
JALR
| x| y| z| w|
It
|
Is
|
0
|
|
0100101
| 0| 0| 0| 0|
|
|
00000000000
|
Format:
JALR It, Is
Purpose:
To branch to the VU instruction memory offset of a VU IR and link to a VU IR
Description: PC <- It
Is <- PC + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Jump register
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
JR
| x| y| z| w|
0
|
Is
|
0
|
|
0100100
| 0| 0| 0| 0|
00000
|
|
00000000000
|
Format:
JALR Is
Purpose:
To branch to the VU instruction memory offset of a VU IR
Description: PC <- Is
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
JR
Load quadraword
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
LQ
| x| y| z| w|
ft
|
base
|
offset
|
|
0000000
|
dest
|
|
|
|
Format:
Purpose:
To load up to 4 fields of a VU FPR with adjacent words in the VU data cache
Description: fs.dest <- offset(base)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU data memory.
This instruction is applicable to both VU0 and VU1
LQ
Purpose:
To load up to 4 fields of a VU FPR with VU data pre decrement
Description: base == base - 8
ft.dest <- [base]
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
LQD
Purpose:
To load up to 4 fields of a VU FPR with VU data post increment
Description: ft.dest <- [base]
base == base + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
LQI
MFIR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
Is
|
MFIR
|
SPECIAL
|
|
1000000
|
dest
|
|
|
01111
|
111101
|
Format:
MFIR.dest ft, Is
Purpose:
To load up to 4 fields of a VU FPR with the value of an IR
Description: ft.dest <- Is
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MOVE
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
fs
|
MOVE
|
SPECIAL
|
|
1000000
|
dest
|
|
|
01100
|
111100
|
Format:
MOVE.dest ft, fs
Purpose:
To move up to 4 fields of a VU FPR to the corresponding fields of a VU FPR
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
ft.x
ft.y
ft.z
ft.w
<<<<-
fs.x
fs.y
fs.z
fs.w
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MR32
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
fs
|
MR32
|
SPECIAL
|
|
1000000
|
dest
|
|
|
01100
|
111101
|
Format:
MOVE.dest ft, fs
Purpose:
To move up to 4 fields of a VU FPR to rotated fields of a VU FPR
Description: if
if
if
if
dest
dest
dest
dest
&
&
&
&
.x
.y
.z
.w
==
==
==
==
true
true
true
true
:
:
:
:
fs.x
fs.y
fs.z
fs.w
->
->
->
->
ft.y
ft.z
fs.w
fs.x
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
MTIR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
fs
|
MTIR
|
SPECIAL
|
|
1000000
| 0| 0| fs.e|
|
|
01111
|
111100
|
Format:
Purpose:
To move a field of a VU FPR to an IR
Description: It <- fs.dest
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
R move
RGET
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
0
|
RGET
|
SPECIAL
|
|
1000000
|
dest
|
|
00000
|
10000
|
111101
|
Format:
RGET.dest ft, R
Purpose:
To load up to 4 fields of a VU FPR with the R register
Description: fs.dest <- R
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
R initialise
RINIT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
RINIT
|
SPECIAL
|
|
1000000
| 0| 0| fs.e|
00000
|
|
10000
|
111110
|
Format:
RINIT.e R, fs.e
Purpose:
To initialise the random generator using a field of a VU FPR as matrix
Description: R <- Random(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
R next
RNEXT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
0
|
RNEXT
|
SPECIAL
|
|
1000000
|
dest
|
|
00000
|
10000
|
111100
|
Format:
RNEXT.dest ft, R
Purpose:
To load up to 4 fields of a VU FPR with the next random number from the R register
Description: ft.dest <- R
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
RSQRT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
fs
|
RSQRT
|
SPECIAL
|
|
1000000
| ft.e| fs.e|
|
|
01110
|
111110
|
Format:
Purpose:
To calculate ft.e/sqrt(fs.e)
Description: Q <- ft.e/sqrt(fs.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
R XOR
RXOR
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
0
|
fs
|
RXOR
|
SPECIAL
|
|
1000000
| 0| 0| fs.e|
00000
|
|
10000
|
111111
|
Format:
RXOR.e R, fs.e
Purpose:
To XOR the value in the R register and a field of a VU FPR and store the result in the
R register
Description: R <- R XOR fs.e
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Store quadraword
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
00|
|
SQ
| x| y| z| w|
ft
|
base
|
offset
|
|
0000001
|
dest
|
|
|
|
Format:
Purpose:
To store up to 4 fields of a VU FPR to adjacent words in the VU data cache
Description: offset(base) <- fs.dest
Restrictions:
None
Operation:
Exceptions:
Programming notes:
The offset refers to doublewords in the VU data memory.
This instruction is applicable to both VU0 and VU1
SQ
Purpose:
To store up to 4 fields of a VU FPR to the VU data cache pre decrement
Description: base == base - 8
[base] <- ft.dest
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
SQD
Purpose:
To store up to 4 fields of a VU FPR to the VU data cache post increment
Description: [base] <- ft.dest
base == base + 8
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
SQI
Square root
SQRT
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
ft
|
0
|
SQRT
|
SPECIAL
|
|
1000000
| ft.e| 0| 0|
|
00000
|
01110
|
111101
|
Format:
SQRT Q, ft.e
Purpose:
To calculate the square root of the value in a single field of a VU FPR
Description: Q <- sqrt(ft.e)
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Wait P operation
WAITP
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
0
|
0
|
WAITP
|
SPECIAL
|
|
1000000
| 0| 0| 0| 0|
00000
|
00000
|
11110
|
111111
|
Format:
WAITP
Purpose:
To postpone VU operation until the operation of the instruction that writes to the P
register is concluded
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
Wait Q operation
WAITQ
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
0
|
0
|
WAITQ
|
SPECIAL
|
|
1000000
| 0| 0| 0| 0|
00000
|
00000
|
01110
|
111111
|
Format:
WAITQ
Purpose:
To postpone VU operation untill the operation of the instruction that writes to the Q
register is concluded
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is applicable to both VU0 and VU1
XGKICK
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
0
|
Is
|
XGKICK
|
SPECIAL
|
|
1000000
| 0| 0| 0| 0|
00000
|
|
11011
|
111100
|
Format:
XGKICK Is
Purpose:
To initialise the VU1 path to the GIF
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is only applicable to VU1
XITOP
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
0
|
XITOP
|
SPECIAL
|
|
1000000
| 0| 0| 0| 0|
|
00000
|
11010
|
111101
|
Format:
XITOP It
Purpose:
To control the VU1 path to the GIF
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is only applicable to VU1
XTOP
_____________________________________________________________________________________________
|31
25|24|23|22|21|20
16|15
11|10
06|05
00|
|
SPECIAL
| x| y| z| w|
It
|
0
|
XTOP
|
SPECIAL
|
|
1000000
| 0| 0| 0| 0|
|
00000
|
11010
|
111100
|
Format:
XTOP It
Purpose:
To control the VU1 path to the GIF
Description:
Restrictions:
None
Operation:
Exceptions:
Programming notes:
This instruction is only applicable to VU1
VU
VU0
VU1
FPR
IR
dest
fs
ft
fd
Is
It
Id
imm
bc
.e
Vector Unit
Vector Unit 0
Vector Unit 1
Floating point register
Integer register
destination fields
floating point source register
floating point target register
floating point destination register
integer source register
integer target register
integer destination register
immediate
broadcast field
field selector
LEGEND