PCSX2 Documentation/PS2 VU (Vector Unit) Documentation Part 1: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 49: Line 49:
The situation becomes complex however when a VI reg is read AND written to in a sequence of instructions.
The situation becomes complex however when a VI reg is read AND written to in a sequence of instructions.


Code:
<source lang="asm">
IADDIU vi05, vi00, 100
IADDIU vi05, vi00, 100
IADDIU vi05, vi05, 100
IADDIU vi05, vi05, 100
Line 55: Line 55:
IADDIU vi05, vi05, 100
IADDIU vi05, vi05, 100
IBNE vi05, vi00 &lt;---- vi05's value is before any 100 value was added. (the value before the first IADDIU)
IBNE vi05, vi00 &lt;---- vi05's value is before any 100 value was added. (the value before the first IADDIU)
</source>


When a VI reg is first written to, a 'chain' starts, and then if the next instruction reads AND writes to the same VI reg, the chain continues. It does this for a maximum of 4 instructions (the example above is the maximum). Then when the branch comes, the value that should be read is the value before the chain!
When a VI reg is first written to, a 'chain' starts, and then if the next instruction reads AND writes to the same VI reg, the chain continues. It does this for a maximum of 4 instructions (the example above is the maximum). Then when the branch comes, the value that should be read is the value before the chain!
Line 64: Line 65:
It does:
It does:


Code:
<source lang="asm">
[08b0] (000002ff) NOP
[08b0] (000002ff) NOP
[08b0] (100310fb) IADDIU vi03, vi02, 251
[08b0] (100310fb) IADDIU vi03, vi02, 251
Line 77: Line 78:
[08d8] (000002ff) NOP
[08d8] (000002ff) NOP
[08d8] (81e2bb7d) SQI.xyzw vf23, vi02++
[08d8] (81e2bb7d) SQI.xyzw vf23, vi02++
</source>


The first time the above block of code is run, the IBNE value for vi02 is the same value as it's value at [08b0] (before the chain starts).
The first time the above block of code is run, the IBNE value for vi02 is the same value as it's value at [08b0] (before the chain starts).
Line 97: Line 99:
Example:
Example:


Code:
<source lang="asm">
MAX vf02.x, vf00.x, vf01.x
MAX vf02.x, vf00.x, vf01.x
</source>


Assuming vf01.x holds a positive denormal, the result in vf02.x will be that same denormal.
Assuming vf01.x holds a positive denormal, the result in vf02.x will be that same denormal.
ninja
782

edits