<html lang="en"> <head> <title>Vector Operations - GNU Compiler Collection (GCC) Internals</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="GNU Compiler Collection (GCC) Internals"> <meta name="generator" content="makeinfo 4.13"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="RTL.html#RTL" title="RTL"> <link rel="prev" href="Bit_002dFields.html#Bit_002dFields" title="Bit-Fields"> <link rel="next" href="Conversions.html#Conversions" title="Conversions"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- Copyright (C) 1988-2015 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.3 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> </head> <body> <div class="node"> <a name="Vector-Operations"></a> <p> Next: <a rel="next" accesskey="n" href="Conversions.html#Conversions">Conversions</a>, Previous: <a rel="previous" accesskey="p" href="Bit_002dFields.html#Bit_002dFields">Bit-Fields</a>, Up: <a rel="up" accesskey="u" href="RTL.html#RTL">RTL</a> <hr> </div> <h3 class="section">13.12 Vector Operations</h3> <p><a name="index-vector-operations-3005"></a> All normal RTL expressions can be used with vector modes; they are interpreted as operating on each part of the vector independently. Additionally, there are a few new expressions to describe specific vector operations. <a name="index-vec_005fmerge-3006"></a> <dl><dt><code>(vec_merge:</code><var>m</var> <var>vec1</var> <var>vec2</var> <var>items</var><code>)</code><dd>This describes a merge operation between two vectors. The result is a vector of mode <var>m</var>; its elements are selected from either <var>vec1</var> or <var>vec2</var>. Which elements are selected is described by <var>items</var>, which is a bit mask represented by a <code>const_int</code>; a zero bit indicates the corresponding element in the result vector is taken from <var>vec2</var> while a set bit indicates it is taken from <var>vec1</var>. <p><a name="index-vec_005fselect-3007"></a><br><dt><code>(vec_select:</code><var>m</var> <var>vec1</var> <var>selection</var><code>)</code><dd>This describes an operation that selects parts of a vector. <var>vec1</var> is the source vector, and <var>selection</var> is a <code>parallel</code> that contains a <code>const_int</code> for each of the subparts of the result vector, giving the number of the source subpart that should be stored into it. The result mode <var>m</var> is either the submode for a single element of <var>vec1</var> (if only one subpart is selected), or another vector mode with that element submode (if multiple subparts are selected). <p><a name="index-vec_005fconcat-3008"></a><br><dt><code>(vec_concat:</code><var>m</var> <var>x1</var> <var>x2</var><code>)</code><dd>Describes a vector concat operation. The result is a concatenation of the vectors or scalars <var>x1</var> and <var>x2</var>; its length is the sum of the lengths of the two inputs. <p><a name="index-vec_005fduplicate-3009"></a><br><dt><code>(vec_duplicate:</code><var>m</var> <var>x</var><code>)</code><dd>This operation converts a scalar into a vector or a small vector into a larger one by duplicating the input values. The output vector mode must have the same submodes as the input vector mode or the scalar modes, and the number of output parts must be an integer multiple of the number of input parts. </dl> </body></html>