1<html lang="en"> 2<head> 3<title>MIPS Paired-Single Support - Using the GNU Compiler Collection (GCC)</title> 4<meta http-equiv="Content-Type" content="text/html"> 5<meta name="description" content="Using the GNU Compiler Collection (GCC)"> 6<meta name="generator" content="makeinfo 4.13"> 7<link title="Top" rel="start" href="index.html#Top"> 8<link rel="up" href="Target-Builtins.html#Target-Builtins" title="Target Builtins"> 9<link rel="prev" href="MIPS-DSP-Built_002din-Functions.html#MIPS-DSP-Built_002din-Functions" title="MIPS DSP Built-in Functions"> 10<link rel="next" href="MIPS-Loongson-Built_002din-Functions.html#MIPS-Loongson-Built_002din-Functions" title="MIPS Loongson Built-in Functions"> 11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> 12<!-- 13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 152010 Free Software Foundation, Inc. 16 17Permission is granted to copy, distribute and/or modify this document 18under the terms of the GNU Free Documentation License, Version 1.3 or 19any later version published by the Free Software Foundation; with the 20Invariant Sections being ``Funding Free Software'', the Front-Cover 21Texts being (a) (see below), and with the Back-Cover Texts being (b) 22(see below). A copy of the license is included in the section entitled 23``GNU Free Documentation License''. 24 25(a) The FSF's Front-Cover Text is: 26 27 A GNU Manual 28 29(b) The FSF's Back-Cover Text is: 30 31 You have freedom to copy and modify this GNU Manual, like GNU 32 software. Copies published by the Free Software Foundation raise 33 funds for GNU development.--> 34<meta http-equiv="Content-Style-Type" content="text/css"> 35<style type="text/css"><!-- 36 pre.display { font-family:inherit } 37 pre.format { font-family:inherit } 38 pre.smalldisplay { font-family:inherit; font-size:smaller } 39 pre.smallformat { font-family:inherit; font-size:smaller } 40 pre.smallexample { font-size:smaller } 41 pre.smalllisp { font-size:smaller } 42 span.sc { font-variant:small-caps } 43 span.roman { font-family:serif; font-weight:normal; } 44 span.sansserif { font-family:sans-serif; font-weight:normal; } 45--></style> 46<link rel="stylesheet" type="text/css" href="../cs.css"> 47</head> 48<body> 49<div class="node"> 50<a name="MIPS-Paired-Single-Support"></a> 51<a name="MIPS-Paired_002dSingle-Support"></a> 52<p> 53Next: <a rel="next" accesskey="n" href="MIPS-Loongson-Built_002din-Functions.html#MIPS-Loongson-Built_002din-Functions">MIPS Loongson Built-in Functions</a>, 54Previous: <a rel="previous" accesskey="p" href="MIPS-DSP-Built_002din-Functions.html#MIPS-DSP-Built_002din-Functions">MIPS DSP Built-in Functions</a>, 55Up: <a rel="up" accesskey="u" href="Target-Builtins.html#Target-Builtins">Target Builtins</a> 56<hr> 57</div> 58 59<h4 class="subsection">6.54.8 MIPS Paired-Single Support</h4> 60 61<p>The MIPS64 architecture includes a number of instructions that 62operate on pairs of single-precision floating-point values. 63Each pair is packed into a 64-bit floating-point register, 64with one element being designated the “upper half” and 65the other being designated the “lower half”. 66 67 <p>GCC supports paired-single operations using both the generic 68vector extensions (see <a href="Vector-Extensions.html#Vector-Extensions">Vector Extensions</a>) and a collection of 69MIPS-specific built-in functions. Both kinds of support are 70enabled by the <samp><span class="option">-mpaired-single</span></samp> command-line option. 71 72 <p>The vector type associated with paired-single values is usually 73called <code>v2sf</code>. It can be defined in C as follows: 74 75<pre class="smallexample"> typedef float v2sf __attribute__ ((vector_size (8))); 76</pre> 77 <p><code>v2sf</code> values are initialized in the same way as aggregates. 78For example: 79 80<pre class="smallexample"> v2sf a = {1.5, 9.1}; 81 v2sf b; 82 float e, f; 83 b = (v2sf) {e, f}; 84</pre> 85 <p><em>Note:</em> The CPU's endianness determines which value is stored in 86the upper half of a register and which value is stored in the lower half. 87On little-endian targets, the first value is the lower one and the second 88value is the upper one. The opposite order applies to big-endian targets. 89For example, the code above will set the lower half of <code>a</code> to 90<code>1.5</code> on little-endian targets and <code>9.1</code> on big-endian targets. 91 92 </body></html> 93 94