1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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">
© 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>
|