Document ?: for vectors
Marc Glisse
marc.glisse@inria.fr
Wed Feb 13 23:09:00 GMT 2013
Hello,
today I found this patch that I had written a couple months ago, and I am
wondering whether we want it for 4.8. I am tempted to keep ?: undocumented
as long as the C front-end doesn't have it. The fact that very few
optimizations are done on it (and some might still be broken) is another
argument in this direction. On the other hand, it is there, we might as
well document it.
2013-02-13 Marc Glisse <marc.glisse@inria.fr>
* doc/extend.texi (Vector Extensions): Document ?: in C++.
--
Marc Glisse
-------------- next part --------------
Index: gcc/doc/extend.texi
===================================================================
--- gcc/doc/extend.texi (revision 196034)
+++ gcc/doc/extend.texi (working copy)
@@ -6990,20 +6990,30 @@ otherwise. Consider the following exampl
typedef int v4si __attribute__ ((vector_size (16)));
v4si a = @{1,2,3,4@};
v4si b = @{3,2,1,4@};
v4si c;
c = a > b; /* The result would be @{0, 0,-1, 0@} */
c = a == b; /* The result would be @{0,-1, 0,-1@} */
@end smallexample
+In C++, the ternary operator @code{?:} is available. @code{a?b:c}, where
+@code{b} and @code{c} are vectors of the same type and @code{a} is an
+integer vector of the same size and number of elements as @code{b} and
+@code{c}, computes all three arguments and creates a vector
+@code{@{a[0]?b[0]:c[0], a[1]?b[1]:c[1], @dots{}@}}. Note that unlike in
+OpenCL, @code{a} is thus interpreted as @code{a != 0} and not @code{a < 0}.
+As in the case of binary operations, this syntax is also accepted when
+one of @code{b} or @code{c} is a scalar that is then transformed into a
+vector.
+
Vector shuffling is available using functions
@code{__builtin_shuffle (vec, mask)} and
@code{__builtin_shuffle (vec0, vec1, mask)}.
Both functions construct a permutation of elements from one or two
vectors and return a vector of the same type as the input vector(s).
The @var{mask} is an integral vector with the same width (@var{W})
and element count (@var{N}) as the output vector.
The elements of the input vectors are numbered in memory ordering of
@var{vec0} beginning at 0 and @var{vec1} beginning at @var{N}. The
More information about the Gcc-patches
mailing list