summaryrefslogtreecommitdiff
path: root/devdocs/gcc~13/mips-3d-built-in-functions.html
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /devdocs/gcc~13/mips-3d-built-in-functions.html
new repository
Diffstat (limited to 'devdocs/gcc~13/mips-3d-built-in-functions.html')
-rw-r--r--devdocs/gcc~13/mips-3d-built-in-functions.html56
1 files changed, 56 insertions, 0 deletions
diff --git a/devdocs/gcc~13/mips-3d-built-in-functions.html b/devdocs/gcc~13/mips-3d-built-in-functions.html
new file mode 100644
index 00000000..c6fa4527
--- /dev/null
+++ b/devdocs/gcc~13/mips-3d-built-in-functions.html
@@ -0,0 +1,56 @@
+<div class="subsubsection-level-extent" id="MIPS-3D-Built-in-Functions"> <div class="nav-panel"> <p> Previous: <a href="paired-single-built-in-functions" accesskey="p" rel="prev">Paired-Single Built-in Functions</a>, Up: <a href="mips-loongson-built-in-functions" accesskey="u" rel="up">MIPS Loongson Built-in Functions</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div> <h1 class="subsubsection" id="MIPS-3D-Built-in-Functions-1"><span>6.60.17.3 MIPS-3D Built-in Functions<a class="copiable-link" href="#MIPS-3D-Built-in-Functions-1"> ΒΆ</a></span></h1> <p>The MIPS-3D Application-Specific Extension (ASE) includes additional paired-single instructions that are designed to improve the performance of 3D graphics operations. Support for these instructions is controlled by the <samp class="option">-mips3d</samp> command-line option. </p> <p>The functions listed below map directly to a particular MIPS-3D instruction. Please refer to the architecture specification for more details on what each instruction does. </p> <dl class="table"> <dt><code class="code">v2sf __builtin_mips_addr_ps (v2sf, v2sf)</code></dt> <dd>
+<p>Reduction add (<code class="code">addr.ps</code>). </p> </dd> <dt><code class="code">v2sf __builtin_mips_mulr_ps (v2sf, v2sf)</code></dt> <dd>
+<p>Reduction multiply (<code class="code">mulr.ps</code>). </p> </dd> <dt><code class="code">v2sf __builtin_mips_cvt_pw_ps (v2sf)</code></dt> <dd>
+<p>Convert paired single to paired word (<code class="code">cvt.pw.ps</code>). </p> </dd> <dt><code class="code">v2sf __builtin_mips_cvt_ps_pw (v2sf)</code></dt> <dd>
+<p>Convert paired word to paired single (<code class="code">cvt.ps.pw</code>). </p> </dd> <dt><code class="code">float __builtin_mips_recip1_s (float)</code></dt> <dt><code class="code">double __builtin_mips_recip1_d (double)</code></dt> <dt><code class="code">v2sf __builtin_mips_recip1_ps (v2sf)</code></dt> <dd>
+<p>Reduced-precision reciprocal (sequence step 1) (<code class="code">recip1.<var class="var">fmt</var></code>). </p> </dd> <dt><code class="code">float __builtin_mips_recip2_s (float, float)</code></dt> <dt><code class="code">double __builtin_mips_recip2_d (double, double)</code></dt> <dt><code class="code">v2sf __builtin_mips_recip2_ps (v2sf, v2sf)</code></dt> <dd>
+<p>Reduced-precision reciprocal (sequence step 2) (<code class="code">recip2.<var class="var">fmt</var></code>). </p> </dd> <dt><code class="code">float __builtin_mips_rsqrt1_s (float)</code></dt> <dt><code class="code">double __builtin_mips_rsqrt1_d (double)</code></dt> <dt><code class="code">v2sf __builtin_mips_rsqrt1_ps (v2sf)</code></dt> <dd>
+<p>Reduced-precision reciprocal square root (sequence step 1) (<code class="code">rsqrt1.<var class="var">fmt</var></code>). </p> </dd> <dt><code class="code">float __builtin_mips_rsqrt2_s (float, float)</code></dt> <dt><code class="code">double __builtin_mips_rsqrt2_d (double, double)</code></dt> <dt><code class="code">v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)</code></dt> <dd><p>Reduced-precision reciprocal square root (sequence step 2) (<code class="code">rsqrt2.<var class="var">fmt</var></code>). </p></dd> </dl> <p>The following multi-instruction functions are also available. In each case, <var class="var">cond</var> can be any of the 16 floating-point conditions: <code class="code">f</code>, <code class="code">un</code>, <code class="code">eq</code>, <code class="code">ueq</code>, <code class="code">olt</code>, <code class="code">ult</code>, <code class="code">ole</code>, <code class="code">ule</code>, <code class="code">sf</code>, <code class="code">ngle</code>, <code class="code">seq</code>, <code class="code">ngl</code>, <code class="code">lt</code>, <code class="code">nge</code>, <code class="code">le</code> or <code class="code">ngt</code>. </p> <dl class="table"> <dt><code class="code">int __builtin_mips_cabs_<var class="var">cond</var>_s (float <var class="var">a</var>, float <var class="var">b</var>)</code></dt> <dt><code class="code">int __builtin_mips_cabs_<var class="var">cond</var>_d (double <var class="var">a</var>, double <var class="var">b</var>)</code></dt> <dd>
+<p>Absolute comparison of two scalar values (<code class="code">cabs.<var class="var">cond</var>.<var class="var">fmt</var></code>, <code class="code">bc1t</code>/<code class="code">bc1f</code>). </p> <p>These functions compare <var class="var">a</var> and <var class="var">b</var> using <code class="code">cabs.<var class="var">cond</var>.s</code> or <code class="code">cabs.<var class="var">cond</var>.d</code> and return the result as a boolean value. For example: </p> <div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">float a, b;
+if (__builtin_mips_cabs_eq_s (a, b))
+ true ();
+else
+ false ();</pre>
+</div> </dd> <dt><code class="code">int __builtin_mips_upper_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dt><code class="code">int __builtin_mips_lower_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dd>
+<p>Absolute comparison of two paired-single values (<code class="code">cabs.<var class="var">cond</var>.ps</code>, <code class="code">bc1t</code>/<code class="code">bc1f</code>). </p> <p>These functions compare <var class="var">a</var> and <var class="var">b</var> using <code class="code">cabs.<var class="var">cond</var>.ps</code> and return either the upper or lower half of the result. For example: </p> <div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">v2sf a, b;
+if (__builtin_mips_upper_cabs_eq_ps (a, b))
+ upper_halves_are_equal ();
+else
+ upper_halves_are_unequal ();
+
+if (__builtin_mips_lower_cabs_eq_ps (a, b))
+ lower_halves_are_equal ();
+else
+ lower_halves_are_unequal ();</pre>
+</div> </dd> <dt><code class="code">v2sf __builtin_mips_movt_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dt><code class="code">v2sf __builtin_mips_movf_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dd>
+<p>Conditional move based on absolute comparison (<code class="code">cabs.<var class="var">cond</var>.ps</code>, <code class="code">movt.ps</code>/<code class="code">movf.ps</code>). </p> <p>The <code class="code">movt</code> functions return the value <var class="var">x</var> computed by: </p> <div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">cabs.<var class="var">cond</var>.ps <var class="var">cc</var>,<var class="var">a</var>,<var class="var">b</var>
+mov.ps <var class="var">x</var>,<var class="var">c</var>
+movt.ps <var class="var">x</var>,<var class="var">d</var>,<var class="var">cc</var></pre>
+</div> <p>The <code class="code">movf</code> functions are similar but use <code class="code">movf.ps</code> instead of <code class="code">movt.ps</code>. </p> </dd> <dt><code class="code">int __builtin_mips_any_c_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dt><code class="code">int __builtin_mips_all_c_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dt><code class="code">int __builtin_mips_any_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dt><code class="code">int __builtin_mips_all_cabs_<var class="var">cond</var>_ps (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>)</code></dt> <dd>
+<p>Comparison of two paired-single values (<code class="code">c.<var class="var">cond</var>.ps</code>/<code class="code">cabs.<var class="var">cond</var>.ps</code>, <code class="code">bc1any2t</code>/<code class="code">bc1any2f</code>). </p> <p>These functions compare <var class="var">a</var> and <var class="var">b</var> using <code class="code">c.<var class="var">cond</var>.ps</code> or <code class="code">cabs.<var class="var">cond</var>.ps</code>. The <code class="code">any</code> forms return <code class="code">true</code> if either result is <code class="code">true</code> and the <code class="code">all</code> forms return <code class="code">true</code> if both results are <code class="code">true</code>. For example: </p> <div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">v2sf a, b;
+if (__builtin_mips_any_c_eq_ps (a, b))
+ one_is_true ();
+else
+ both_are_false ();
+
+if (__builtin_mips_all_c_eq_ps (a, b))
+ both_are_true ();
+else
+ one_is_false ();</pre>
+</div> </dd> <dt><code class="code">int __builtin_mips_any_c_<var class="var">cond</var>_4s (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dt><code class="code">int __builtin_mips_all_c_<var class="var">cond</var>_4s (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dt><code class="code">int __builtin_mips_any_cabs_<var class="var">cond</var>_4s (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dt><code class="code">int __builtin_mips_all_cabs_<var class="var">cond</var>_4s (v2sf <var class="var">a</var>, v2sf <var class="var">b</var>, v2sf <var class="var">c</var>, v2sf <var class="var">d</var>)</code></dt> <dd>
+<p>Comparison of four paired-single values (<code class="code">c.<var class="var">cond</var>.ps</code>/<code class="code">cabs.<var class="var">cond</var>.ps</code>, <code class="code">bc1any4t</code>/<code class="code">bc1any4f</code>). </p> <p>These functions use <code class="code">c.<var class="var">cond</var>.ps</code> or <code class="code">cabs.<var class="var">cond</var>.ps</code> to compare <var class="var">a</var> with <var class="var">b</var> and to compare <var class="var">c</var> with <var class="var">d</var>. The <code class="code">any</code> forms return <code class="code">true</code> if any of the four results are <code class="code">true</code> and the <code class="code">all</code> forms return <code class="code">true</code> if all four results are <code class="code">true</code>. For example: </p> <div class="example smallexample"> <pre class="example-preformatted" data-language="cpp">v2sf a, b, c, d;
+if (__builtin_mips_any_c_eq_4s (a, b, c, d))
+ some_are_true ();
+else
+ all_are_false ();
+
+if (__builtin_mips_all_c_eq_4s (a, b, c, d))
+ all_are_true ();
+else
+ some_are_false ();</pre>
+</div> </dd> </dl> </div> <div class="nav-panel"> <p> Previous: <a href="paired-single-built-in-functions">Paired-Single Built-in Functions</a>, Up: <a href="mips-loongson-built-in-functions">MIPS Loongson Built-in Functions</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div><div class="_attribution">
+ <p class="_attribution-p">
+ &copy; Free Software Foundation<br>Licensed under the GNU Free Documentation License, Version 1.3.<br>
+ <a href="https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/MIPS-3D-Built-in-Functions.html" class="_attribution-link">https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/MIPS-3D-Built-in-Functions.html</a>
+ </p>
+</div>