<?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 ops</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-09-06T22:29:34+02:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:bvf&amp;amp;rev=1184626028"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:bvfl&amp;amp;rev=1184625786"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:bvt&amp;amp;rev=1184625816"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:lv_s&amp;amp;rev=1184626319"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mfv&amp;amp;rev=1184626082"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mfvc&amp;amp;rev=1174179267"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:mtvc&amp;amp;rev=1174179026"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:sv_q&amp;amp;rev=1164140812"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:sv_s&amp;amp;rev=1164140683"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:ulv_q&amp;amp;rev=1164140920"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:usv_q&amp;amp;rev=1164140935"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vabs&amp;amp;rev=1164202602"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vadd&amp;amp;rev=1164204678"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vc2i&amp;amp;rev=1174222658"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vcst&amp;amp;rev=1166100592"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vdiv&amp;amp;rev=1164204638"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vhdp&amp;amp;rev=1215553539"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:viim&amp;amp;rev=1166099737"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmax&amp;amp;rev=1164127692"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmfvc&amp;amp;rev=1174179713"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmin&amp;amp;rev=1164127705"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmov&amp;amp;rev=1164205314"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmtvc&amp;amp;rev=1174179654"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vmul&amp;amp;rev=1164204593"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vneg&amp;amp;rev=1164205156"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxs&amp;amp;rev=1215552740"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vpfxt&amp;amp;rev=1215552888"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vrcp&amp;amp;rev=1174225262"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vrsq&amp;amp;rev=1174225406"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vs2i&amp;amp;rev=1174224058"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vscl&amp;amp;rev=1164204965"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vsgn&amp;amp;rev=1164202536"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vsub&amp;amp;rev=1164205002"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vuc2i&amp;amp;rev=1174221929"/>
                <rdf:li rdf:resource="http://wiki.fx-world.org/doku.php?id=ops:vus2i&amp;amp;rev=1174224091"/>
            </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=ops:bvf&amp;amp;rev=1184626028">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:47:08+02:00</dc:date>
        <title>ops:bvf</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:bvf&amp;amp;rev=1184626028</link>
        <description>bvf

 Branch a label if condition code is false.

Type

CPU interlock instruction

Description

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


condition code is a numerical integer ranging between 0 and 5 :</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:bvfl&amp;amp;rev=1184625786">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:43:06+02:00</dc:date>
        <title>ops:bvfl</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:bvfl&amp;amp;rev=1184625786</link>
        <description>bvfl

Branch a label if condition code is false.

Type

CPU interlock instruction

Description

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


condition code is a numerical integer ranging between 0 and 5 :</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:bvt&amp;amp;rev=1184625816">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:43:36+02:00</dc:date>
        <title>ops:bvt</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:bvt&amp;amp;rev=1184625816</link>
        <description>bvt

Branch a label if condition code is true.

Type

CPU interlock instruction

Description

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


condition code is a numerical integer ranging between 0 and 5 :</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:47:40+02:00</dc:date>
        <title>ops:bvtl</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:bvtl&amp;amp;rev=1184626060</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>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:52:27+02:00</dc:date>
        <title>ops:lv_q</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:lv_q&amp;amp;rev=1184626347</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">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:51:59+02:00</dc:date>
        <title>ops:lv_s</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:lv_s&amp;amp;rev=1184626319</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:mfv&amp;amp;rev=1184626082">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:48:02+02:00</dc:date>
        <title>ops:mfv</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mfv&amp;amp;rev=1184626082</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:mfvc&amp;amp;rev=1174179267">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T01:54:27+02:00</dc:date>
        <title>ops:mfvc</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mfvc&amp;amp;rev=1174179267</link>
        <description>mfvc

Synopsys

Copies a vfpu control register into a general purpose register.

Type

interlock instruction

Description

mfvc rt, vcr
{
  rt = vcr; // vcr is vfpu control register
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      6        0 
VFPU Control Registers
register name         purpose                                     128 	  VFPU_PFXS 	Source prefix stack                         129 	  VFPU_PFXT 	Target prefix stack                      …</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:48:26+02:00</dc:date>
        <title>ops:mtv</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mtv&amp;amp;rev=1184626106</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:mtvc&amp;amp;rev=1174179026">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T01:50:26+02:00</dc:date>
        <title>ops:mtvc</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:mtvc&amp;amp;rev=1174179026</link>
        <description>mtvc

Synopsys

Copies a general purpose register into a vfpu control register.

Category

single-cycle instruction

Usage

mtvc rt, vcr
{
  vcr = rt; // vcr is vfpu control register
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      1        3 
VFPU Control Registers
register name         purpose                                     128 	  VFPU_PFXS 	Source prefix stack                         129 	  VFPU_PFXT 	Target prefix stack                     …</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:sv_q&amp;amp;rev=1164140812">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T21:26:52+02:00</dc:date>
        <title>ops:sv_q</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:sv_q&amp;amp;rev=1164140812</link>
        <description>sv.q

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

Usage: 

sv.q vd, offset(rm)
{
   *(rm + offset +  0) = vd[0];
   *(rm + offset +  4) = vd[1];
   *(rm + offset +  8) = vd[2];
   *(rm + offset + 12) = vd[3];
}


rm is a general purpose register holding a memory address (aligned to 16 bytes). offset is optional. offset(rm) must be a multiple of 16.</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:sv_s&amp;amp;rev=1164140683">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T21:24:43+02:00</dc:date>
        <title>ops:sv_s</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:sv_s&amp;amp;rev=1164140683</link>
        <description>sv.s

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

Usage: 

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


rm is a general purpose register holding a memory address. offset is optional. 
 sv.s          clock ticks       latency           (cache)                      ?  ?                 (memory)                     ?  ?</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:ulv_q&amp;amp;rev=1164140920">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T21:28:40+02:00</dc:date>
        <title>ops:ulv_q</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:ulv_q&amp;amp;rev=1164140920</link>
        <description>ulv.q

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

Usage: 

ulv.q vd, offset(rm)
{
   vd[0] = *(rm + offset +  0);
   vd[1] = *(rm + offset +  4);
   vd[2] = *(rm + offset +  8);
   vd[3] = *(rm + offset + 12);
}


this is not a real instruction but an alias to output a pair of lvl/lvr instructions.</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:usv_q&amp;amp;rev=1164140935">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T21:28:55+02:00</dc:date>
        <title>ops:usv_q</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:usv_q&amp;amp;rev=1164140935</link>
        <description>usv.q

Stores a 16-byte long value (16 bytes) from a quad vfpu register into unaligned memory.

Usage: 

usv.q vd, offset(rm)
{
   *(rm + offset +  0) = vd[0];
   *(rm + offset +  4) = vd[1];
   *(rm + offset +  8) = vd[2];
   *(rm + offset + 12) = vd[3];
}</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vabs&amp;amp;rev=1164202602">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T14:36:42+02:00</dc:date>
        <title>ops:vabs</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vabs&amp;amp;rev=1164202602</link>
        <description>vabs.q/t/p/s

Computes the absolute value of each component of the single precision float vector vs and stores them into vd.

Usage: 

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

               clock ticks       latency           vabs.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vadd&amp;amp;rev=1164204678">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:11:18+02:00</dc:date>
        <title>ops:vadd</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vadd&amp;amp;rev=1164204678</link>
        <description>vadd.q/t/p/s

Adds each component of the single precision float vector vs to the same component of vt and stores them into vd.

Usage: 

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

               clock ticks       latency           vadd.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vc2i&amp;amp;rev=1174222658">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T13:57:38+02:00</dc:date>
        <title>ops:vc2i</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vc2i&amp;amp;rev=1174222658</link>
        <description>vc2i.s

Converts four packed 8-bit signed char values in vs to four 8.24 fixed-point integer values in vd.

Usage: 

vc2i.s vd.q, vs.s
{
  vd.q[0] = ((vs.s[0]      ) &amp; 0xff) &lt;&lt; 24;
  vd.q[1] = ((vs.s[0] &gt;&gt;  8) &amp; 0xff) &lt;&lt; 24;
  vd.q[2] = ((vs.s[0] &gt;&gt; 16) &amp; 0xff) &lt;&lt; 24;
  vd.q[3] = ((vs.s[0] &gt;&gt; 24) &amp; 0xff) &lt;&lt; 24; 
}</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718">
        <dc:format>text/html</dc:format>
        <dc:date>2007-07-17T00:58:38+02:00</dc:date>
        <title>ops:vcmp</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vcmp&amp;amp;rev=1184626718</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:vcst&amp;amp;rev=1166100592">
        <dc:format>text/html</dc:format>
        <dc:date>2006-12-14T13:49:52+02:00</dc:date>
        <title>ops:vcst</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vcst&amp;amp;rev=1166100592</link>
        <description>vcst.q/t/p/s

Load a constant into vd.

Usage: 

vcst.q/t/p/s vd, index_constant
{
  float vpfu_special_constant[] =
  {
    0,
    Inf,        // VFPU_HUGE
    SQRT(2),    // VFPU_SQRT2
    SQRT(1/2),  // VFPU_SQRT1_2 
    2/SQRT(PI), // VFPU_2_SQRTPI
    2/PI,       // VFPU_2_PI
    1/PI,       // VFPU_1_PI
    PI/4,       // VFPU_PI_4
    PI/2,       // VFPU_PI_2
    PI,         // VFPU_PI
    e,          // VFPU_E
    log2(e),    // VFPU_LOG2E
    log10(e),   // VFPU_LOG10E
    ln(2),      /…</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vdiv&amp;amp;rev=1164204638">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:10:38+02:00</dc:date>
        <title>ops:vdiv</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vdiv&amp;amp;rev=1164204638</link>
        <description>vdiv.q/t/p/s

Divides each component of the single precision float vector vs by the same component of vt and stores them into vd.

Usage: 

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

               clock ticks       latency           vdiv.q                      56  30                vdiv.t                      42  ?                 vdiv.p                      28  ?                 vdiv.s                      14  ?</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:43:26+02:00</dc:date>
        <title>ops:vdot</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vdot&amp;amp;rev=1215553406</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:vhdp&amp;amp;rev=1215553539">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:45:39+02:00</dc:date>
        <title>ops:vhdp</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vhdp&amp;amp;rev=1215553539</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:viim&amp;amp;rev=1166099737">
        <dc:format>text/html</dc:format>
        <dc:date>2006-12-14T13:35:37+02:00</dc:date>
        <title>ops:viim</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:viim&amp;amp;rev=1166099737</link>
        <description>viim.q/t/p/s

Load immediate integer converted as a float into vd.

Usage: 

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


immediate is an integer value between -32768 and 32767 converted as a float when loaded</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmax&amp;amp;rev=1164127692">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T17:48:12+02:00</dc:date>
        <title>ops:vmax</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmax&amp;amp;rev=1164127692</link>
        <description>vmax.q/t/p/s

Stores the four/three/two/one maximal single precision float value(s) of vs and vt into vd.

Usage: 

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

               clock ticks       latency           vmax.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmfvc&amp;amp;rev=1174179713">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T02:01:53+02:00</dc:date>
        <title>ops:vmfvc</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmfvc&amp;amp;rev=1174179713</link>
        <description>vmfvc

Synopsys

Copies a vfpu control register into a scalar vfpu register.

Type

single-cycle instruction

Description

vmfvc vcr, vs.s
{
  vs.s = vcr;
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      1        3 
VFPU Control Registers
register name         purpose                                     128 	  VFPU_PFXS 	Source prefix stack                         129 	  VFPU_PFXT 	Target prefix stack                         130 	  VFPU_PFXD 	Destin…</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmin&amp;amp;rev=1164127705">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-21T17:48:25+02:00</dc:date>
        <title>ops:vmin</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmin&amp;amp;rev=1164127705</link>
        <description>vmin.q/t/p/s

Stores the four/three/two/one minimal single precision float value(s) of vs and vt into vd.

Usage: 

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

               clock ticks       latency           vmin.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmov&amp;amp;rev=1164205314">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:21:54+02:00</dc:date>
        <title>ops:vmov</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmov&amp;amp;rev=1164205314</link>
        <description>vmov.q/t/p/s

Copies vs into vd.

Usage: 

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

               clock ticks       latency           vmov.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmtvc&amp;amp;rev=1174179654">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T02:00:54+02:00</dc:date>
        <title>ops:vmtvc</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmtvc&amp;amp;rev=1174179654</link>
        <description>vmtvc

Synopsys

Copies a scalar vfpu register into a vfpu control register.

Type

single-cycle instruction

Description

vmtvc vs.s, vcr
{
  vcr = vs.s;
}


Prefixes
 vpfxs    vfpxt    vpfxd    Ignored  Ignored  Ignored 
Cycles
 pitch  latency      1        3 
VFPU Control Registers
register name         purpose                                     128 	  VFPU_PFXS 	Source prefix stack                         129 	  VFPU_PFXT 	Target prefix stack                         130 	  VFPU_PFXD 	Destin…</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vmul&amp;amp;rev=1164204593">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:09:53+02:00</dc:date>
        <title>ops:vmul</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vmul&amp;amp;rev=1164204593</link>
        <description>vmul.q/t/p/s

Multiplies each component of the single precision float vector vs by the same component of vt and stores them into vd.

Usage: 

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

               clock ticks       latency           vmul.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vneg&amp;amp;rev=1164205156">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:19:16+02:00</dc:date>
        <title>ops:vneg</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vneg&amp;amp;rev=1164205156</link>
        <description>vneg.q/t/p/s

Changes the sign of each component of the single precision float vector vs and stores them into vd.

Usage: 

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

               clock ticks       latency           vneg.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:39:25+02:00</dc:date>
        <title>ops:vpfxd</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxd&amp;amp;rev=1215553165</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:vpfxs&amp;amp;rev=1215552740">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:32:20+02:00</dc:date>
        <title>ops:vpfxs</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxs&amp;amp;rev=1215552740</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:vpfxt&amp;amp;rev=1215552888">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-08T23:34:48+02:00</dc:date>
        <title>ops:vpfxt</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vpfxt&amp;amp;rev=1215552888</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:vrcp&amp;amp;rev=1174225262">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T14:41:02+02:00</dc:date>
        <title>ops:vrcp</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vrcp&amp;amp;rev=1174225262</link>
        <description>vrcp.q/t/p/s

Calculates the reciprocal of vs and stores the result in vd.

Usage: 

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

               clock ticks       latency           vrcp.q/t/p/s                 ?  ?</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vrsq&amp;amp;rev=1174225406">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T14:43:26+02:00</dc:date>
        <title>ops:vrsq</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vrsq&amp;amp;rev=1174225406</link>
        <description>vrsq.q/t/p/s

Calculates the reciprocal of the square root of vs and stores the result in vd.

Usage: 

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

               clock ticks       latency           vrsq.q/t/p/s                 ?  ?</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vs2i&amp;amp;rev=1174224058">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T14:20:58+02:00</dc:date>
        <title>ops:vs2i</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vs2i&amp;amp;rev=1174224058</link>
        <description>vs2i.p/s

Converts two/four packed 16-bit signed short values in vs to two/four 16.16 fixed-point integer values in vd.

Usage: 

vs2i.s vd.p, vs.s
{
  vd.p[0] = ((vs.s[0]      ) &amp; 0xffff) &lt;&lt; 16;
  vd.p[1] = ((vs.s[0] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 16;
}

vs2i.p vd.q, vs.p
{
  vd.q[0] = ((vs.p[0]      ) &amp; 0xffff) &lt;&lt; 16;
  vd.q[1] = ((vs.p[0] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 16;
  vd.q[2] = ((vs.p[1] &gt;&gt;  0) &amp; 0xffff) &lt;&lt; 16;
  vd.q[3] = ((vs.p[1] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 16; 
}</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vscl&amp;amp;rev=1164204965">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:16:05+02:00</dc:date>
        <title>ops:vscl</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vscl&amp;amp;rev=1164204965</link>
        <description>vscl.q/t/p/s

Multiplies each component of the single precision float vector vs by the scalar vs.s and stores them into vd.

Usage: 

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

               clock ticks       latency           vscl.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vsgn&amp;amp;rev=1164202536">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T14:35:36+02:00</dc:date>
        <title>ops:vsgn</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vsgn&amp;amp;rev=1164202536</link>
        <description>vsgn.q/t/p/s

Computes the sign of each component of the single precision float vector vs and stores them into vd.

Usage: 

vsgn.q/t/p/s vd, vs
{
  for (i = 0; i &lt; |q/t/p/s|; ++i)
    vd[i] = (vs[i] &lt; 0.0) ? -1.0 : (vs[i] &gt; 0.0) ? +1.0 : 0.0;
}

               clock ticks       latency           vsgn.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vsub&amp;amp;rev=1164205002">
        <dc:format>text/html</dc:format>
        <dc:date>2006-11-22T15:16:42+02:00</dc:date>
        <title>ops:vsub</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vsub&amp;amp;rev=1164205002</link>
        <description>vsub.q/t/p/s

Subtracts each component of the single precision float vector vt from the same component of vs and stores them into vd.

Usage: 

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

               clock ticks       latency           vsub.q/t/p/s                 1  0</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vuc2i&amp;amp;rev=1174221929">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T13:45:29+02:00</dc:date>
        <title>ops:vuc2i</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vuc2i&amp;amp;rev=1174221929</link>
        <description>vuc2i.s

Converts four packed 8-bit unsigned char values in vs to four s.8.23 fixed-point integer values in vd.

Usage: 

vuc2i.s vd.q, vs.s
{
  vd.q[0] = ( ((vs.s[0]      ) &amp; 0xff) * 0x01010101) &gt;&gt; 1;
  vd.q[1] = ( ((vs.s[0] &gt;&gt;  8) &amp; 0xff) * 0x01010101) &gt;&gt; 1;
  vd.q[2] = ( ((vs.s[0] &gt;&gt; 16) &amp; 0xff) * 0x01010101) &gt;&gt; 1;
  vd.q[3] = ( ((vs.s[0] &gt;&gt; 24) &amp; 0xff) * 0x01010101) &gt;&gt; 1; 
}</description>
    </item>
    <item rdf:about="http://wiki.fx-world.org/doku.php?id=ops:vus2i&amp;amp;rev=1174224091">
        <dc:format>text/html</dc:format>
        <dc:date>2007-03-18T14:21:31+02:00</dc:date>
        <title>ops:vus2i</title>
        <link>http://wiki.fx-world.org/doku.php?id=ops:vus2i&amp;amp;rev=1174224091</link>
        <description>vus2i.p/s

Converts two/four packed 16-bit unsigned short values in vs to two/four s.16.15 fixed-point integer values in vd.

Usage: 

vus2i.s vd.p, vs.s
{
  vd.p[0] = ((vs.s[0]      ) &amp; 0xffff) &lt;&lt; 15;
  vd.p[1] = ((vs.s[0] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 15;
}

vus2i.p vd.q, vs.p
{
  vd.q[0] = ((vs.p[0]      ) &amp; 0xffff) &lt;&lt; 15;
  vd.q[1] = ((vs.p[0] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 15;
  vd.q[2] = ((vs.p[1] &gt;&gt;  0) &amp; 0xffff) &lt;&lt; 15;
  vd.q[3] = ((vs.p[1] &gt;&gt; 16) &amp; 0xffff) &lt;&lt; 15; 
}</description>
    </item>
</rdf:RDF>
