<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://wiki.fx-world.org/lib/styles/feed.css" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://wiki.fx-world.org/feed.php">
        <title>PSP VFPU docuwiki</title>
        <description></description>
        <link>http://wiki.fx-world.org/</link>
        <image rdf:resource="http://wiki.fx-world.org/lib/images/favicon.ico" />
       <dc:date>2010-07-30T15:34:09+02:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=start&amp;amp;rev=1275601727&amp;do=diff1275601727"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vhdp&amp;amp;rev=1215553539&amp;do=diff1215553539"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406&amp;do=diff1215553406"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165&amp;do=diff1215553165"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxt&amp;amp;rev=1215552888&amp;do=diff1215552888"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxs&amp;amp;rev=1215552740&amp;do=diff1215552740"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718&amp;do=diff1184626718"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347&amp;do=diff1184626347"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:lv_s&amp;amp;rev=1184626319&amp;do=diff1184626319"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106&amp;do=diff1184626106"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mfv&amp;amp;rev=1184626082&amp;do=diff1184626082"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060&amp;do=diff1184626060"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.fx-world.org/lib/images/favicon.ico">
        <title>PSP VFPU docuwiki</title>
        <link>http://wiki.fx-world.org/</link>
        <url>http://wiki.fx-world.org/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=start&amp;amp;rev=1275601727&amp;do=diff1275601727">
        <dc:format>text/html</dc:format>
        <dc:date>2010-06-03T23:48:47+02:00</dc:date>
        <dc:creator>FrancesRussell</dc:creator>
        <title>start</title>
        <link>http://wiki.fx-world.org/doku.php?id=start&amp;amp;rev=1275601727&amp;do=diff1275601727</link>
        <description>This is the project page for the PSP VFPU documentation project. 
  The original starter of this project was hlide. 
  The original document creation thread can be found here: 
  &lt;http://forums.ps2dev.org/viewtopic.php?t=6929&gt; 
 

Please visit the index for getting an overview of the currently documented VFPU ops.</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vhdp&amp;amp;rev=1215553539&amp;do=diff1215553539">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:45:39+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vhdp</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vhdp&amp;amp;rev=1215553539&amp;do=diff1215553539</link>
        <description>vhdp.q/t/p

Calculates the homogeneous dot product of vs and vt and stores the result in vd.s

Usage: 

vhdp.q/t/p vd.s, vs, vt
{
  vd.s = vt[|q/t/p|];
  for (i = 0; i &lt; |q/t/p|-1; ++i)
    vd.s += vs[i] * vt[i];
}

               clock ticks       latency           vhdp.q/t/p                   1  7</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406&amp;do=diff1215553406">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:43:26+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vdot</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406&amp;do=diff1215553406</link>
        <description>vdot.q/t/p

Calculates the vector dot product of vs and vt and stores the result in vd.s

Usage: 

vdot.q/t/p vd.s, vs, vt
{
  vd.s = 0;
  for (i = 0; i &lt; |q/t/p/s|; ++i)
    vd.s += vs[i] * vt[i];
}

             clock ticks       latency           vdot.q/t/p                 1  7</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165&amp;do=diff1215553165">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:39:25+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vpfxd</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165&amp;do=diff1215553165</link>
        <description>vpfxd []

Alters the writing contents of a single precision float vector vd in the next non-prefix instruction.

Can be used as a prefix instruction or as a postfix operand for vd.

Usage as prefix instruction: 

vpfxd ?0, ?1, ?2, ?3


Example as postfix operand:</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vpfxt&amp;amp;rev=1215552888&amp;do=diff1215552888">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:34:48+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vpfxt</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxt&amp;amp;rev=1215552888&amp;do=diff1215552888</link>
        <description>vpfxt []

Alters the reading contents of a single precision float vector vt in the next non-prefix instruction.

Can be used as a prefix instruction or as a postfix operand for vt.

Usage as prefix instruction: 

vpfxt ?0, ?1, ?2, ?3


Example as postfix operand:</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vpfxs&amp;amp;rev=1215552740&amp;do=diff1215552740">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:32:20+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vpfxs</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxs&amp;amp;rev=1215552740&amp;do=diff1215552740</link>
        <description>vpfxs []

Alters the reading contents of a single precision float vector vs in the next non-prefix instruction.

Can be used as a prefix instruction or as a postfix operand for vs.

Usage as prefix instruction: 

vpfxs ?0, ?1, ?2, ?3


Example as postfix operand:</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718&amp;do=diff1184626718">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:58:38+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:vcmp</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718&amp;do=diff1184626718</link>
        <description>vcmp.q/t/p/s

Compare each component of the single precision float vector vd to the same component of vs and assigned VFPU_CC according to their comparison results.

Type

single-cycle instruction

Description

vcmp.q/t/p/s cn2, vd, vs (where cn2 = EQ/NE/LT/LE/GT/GE)
{
  for (i = 0; i &lt; 5; ++i)
    VFPU_CC[i] = 0;

  VFPU_CC[5] = 1;

  for (i = 0; i &lt; |q/t/p|; ++i)
    VFPU_CC[i] = bcmp(cn2, vs[i], vt[i]);  // cn2 = EQ/NE/LE/LT/GE/GT
  
  for (i = 0; i &lt; |q/t/p|; ++i)
  {
    VFPU_CC[4] ||= VFPU…</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347&amp;do=diff1184626347">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:52:27+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:lv_q</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347&amp;do=diff1184626347</link>
        <description>lv.q

Loads a 16-byte long value from memory into a quad vfpu register.

Type

single-cycle instruction

Description

lv.q vd, offset(rm)
{
   vd[0] = *((uint32 *)(rm + offset +  0));
   vd[1] = *((uint32 *)(rm + offset +  4));
   vd[2] = *((uint32 *)(rm + offset +  8));
   vd[3] = *((uint32 *)(rm + offset + 12));
}</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:lv_s&amp;amp;rev=1184626319&amp;do=diff1184626319">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:51:59+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:lv_s</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:lv_s&amp;amp;rev=1184626319&amp;do=diff1184626319</link>
        <description>lv.s

Loads a 4-byte long value from memory into a single vfpu register.

Type

single-cycle instruction

Description

lv.s vd.s, offset(rm)
{
   vd.s = *((uint32 *)(rm + offset));
}


rm is a general purpose register holding a memory address. offset is optional.</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106&amp;do=diff1184626106">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:48:26+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:mtv</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106&amp;do=diff1184626106</link>
        <description>mtv

 Copies a general purpose register into a scalar vfpu register.

Type

single-cycle instruction

Description

mtv rt, vs.s
{
  vs.s = rt; // rt is general purpose register
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      1        3</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:mfv&amp;amp;rev=1184626082&amp;do=diff1184626082">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:48:02+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:mfv</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mfv&amp;amp;rev=1184626082&amp;do=diff1184626082</link>
        <description>mfv

 Copies a scalar vfpu register into a general purpose register.

Type

interlock instruction

Description

mfv rt, vs.s
{
  rt = vs.s; // rt is general purpose register
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      6        0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060&amp;do=diff1184626060">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:47:40+02:00</dc:date>
        <dc:creator>hlide</dc:creator>
        <title>ops:bvtl</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060&amp;do=diff1184626060</link>
        <description>bvtl

 Branch a label if condition code is true.

Type

CPU interlock instruction

Description

bvtl cc, label
{
   if (VFPU_CC[cc] == 1)
   {
     execute branch delay instruction at PC + 4;
     PC = PC + 4 + label;
   }
}


condition code is a numerical integer ranging between 0 and 5 :</description>
    </item>
</rdf:RDF>
