blob: 0546b7e6b60af890837da577f961306d4881b965 [file] [log] [blame]
<html lang="en">
<head>
<title>Paired-Single Built-in Functions - Using the GNU Compiler Collection (GCC)</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Using the GNU Compiler Collection (GCC)">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="MIPS-Loongson-Built_002din-Functions.html#MIPS-Loongson-Built_002din-Functions" title="MIPS Loongson Built-in Functions">
<link rel="prev" href="Paired_002dSingle-Arithmetic.html#Paired_002dSingle-Arithmetic" title="Paired-Single Arithmetic">
<link rel="next" href="MIPS_002d3D-Built_002din-Functions.html#MIPS_002d3D-Built_002din-Functions" title="MIPS-3D Built-in Functions">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Funding Free Software'', the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below). A copy of the license is included in the section entitled
``GNU Free Documentation License''.
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development.-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Paired-Single-Built-in-Functions"></a>
<a name="Paired_002dSingle-Built_002din-Functions"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="MIPS_002d3D-Built_002din-Functions.html#MIPS_002d3D-Built_002din-Functions">MIPS-3D Built-in Functions</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Paired_002dSingle-Arithmetic.html#Paired_002dSingle-Arithmetic">Paired-Single Arithmetic</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="MIPS-Loongson-Built_002din-Functions.html#MIPS-Loongson-Built_002din-Functions">MIPS Loongson Built-in Functions</a>
<hr>
</div>
<h5 class="subsubsection">6.52.9.2 Paired-Single Built-in Functions</h5>
<p>The following paired-single functions map directly to a particular
MIPS instruction. Please refer to the architecture specification
for details on what each instruction does.
<dl>
<dt><code>v2sf __builtin_mips_pll_ps (v2sf, v2sf)</code><dd>Pair lower lower (<code>pll.ps</code>).
<br><dt><code>v2sf __builtin_mips_pul_ps (v2sf, v2sf)</code><dd>Pair upper lower (<code>pul.ps</code>).
<br><dt><code>v2sf __builtin_mips_plu_ps (v2sf, v2sf)</code><dd>Pair lower upper (<code>plu.ps</code>).
<br><dt><code>v2sf __builtin_mips_puu_ps (v2sf, v2sf)</code><dd>Pair upper upper (<code>puu.ps</code>).
<br><dt><code>v2sf __builtin_mips_cvt_ps_s (float, float)</code><dd>Convert pair to paired single (<code>cvt.ps.s</code>).
<br><dt><code>float __builtin_mips_cvt_s_pl (v2sf)</code><dd>Convert pair lower to single (<code>cvt.s.pl</code>).
<br><dt><code>float __builtin_mips_cvt_s_pu (v2sf)</code><dd>Convert pair upper to single (<code>cvt.s.pu</code>).
<br><dt><code>v2sf __builtin_mips_abs_ps (v2sf)</code><dd>Absolute value (<code>abs.ps</code>).
<br><dt><code>v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)</code><dd>Align variable (<code>alnv.ps</code>).
<p><em>Note:</em> The value of the third parameter must be 0 or 4
modulo 8, otherwise the result will be unpredictable. Please read the
instruction description for details.
</dl>
<p>The following multi-instruction functions are also available.
In each case, <var>cond</var> can be any of the 16 floating-point conditions:
<code>f</code>, <code>un</code>, <code>eq</code>, <code>ueq</code>, <code>olt</code>, <code>ult</code>,
<code>ole</code>, <code>ule</code>, <code>sf</code>, <code>ngle</code>, <code>seq</code>, <code>ngl</code>,
<code>lt</code>, <code>nge</code>, <code>le</code> or <code>ngt</code>.
<dl>
<dt><code>v2sf __builtin_mips_movt_c_</code><var>cond</var><code>_ps (v2sf </code><var>a</var><code>, v2sf </code><var>b</var><code>, v2sf </code><var>c</var><code>, v2sf </code><var>d</var><code>)</code><dt><code>v2sf __builtin_mips_movf_c_</code><var>cond</var><code>_ps (v2sf </code><var>a</var><code>, v2sf </code><var>b</var><code>, v2sf </code><var>c</var><code>, v2sf </code><var>d</var><code>)</code><dd>Conditional move based on floating point comparison (<code>c.</code><var>cond</var><code>.ps</code>,
<code>movt.ps</code>/<code>movf.ps</code>).
<p>The <code>movt</code> functions return the value <var>x</var> computed by:
<pre class="smallexample"> c.<var>cond</var>.ps <var>cc</var>,<var>a</var>,<var>b</var>
mov.ps <var>x</var>,<var>c</var>
movt.ps <var>x</var>,<var>d</var>,<var>cc</var>
</pre>
<p>The <code>movf</code> functions are similar but use <code>movf.ps</code> instead
of <code>movt.ps</code>.
<br><dt><code>int __builtin_mips_upper_c_</code><var>cond</var><code>_ps (v2sf </code><var>a</var><code>, v2sf </code><var>b</var><code>)</code><dt><code>int __builtin_mips_lower_c_</code><var>cond</var><code>_ps (v2sf </code><var>a</var><code>, v2sf </code><var>b</var><code>)</code><dd>Comparison of two paired-single values (<code>c.</code><var>cond</var><code>.ps</code>,
<code>bc1t</code>/<code>bc1f</code>).
<p>These functions compare <var>a</var> and <var>b</var> using <code>c.</code><var>cond</var><code>.ps</code>
and return either the upper or lower half of the result. For example:
<pre class="smallexample"> v2sf a, b;
if (__builtin_mips_upper_c_eq_ps (a, b))
upper_halves_are_equal ();
else
upper_halves_are_unequal ();
if (__builtin_mips_lower_c_eq_ps (a, b))
lower_halves_are_equal ();
else
lower_halves_are_unequal ();
</pre>
</dl>
</body></html>