summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/simd-2.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-09 23:20:36 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-09 23:20:36 +0000
commit71c777ee6186ba0ac4d63e255736bca43dff17fb (patch)
tree7f15378fb80418b7903e8b6ed86c8514f95c236b /gcc/testsuite/gcc.dg/simd-2.c
parent44589e4c729a27724c996706cfc70461c0a1f564 (diff)
downloadgcc-71c777ee6186ba0ac4d63e255736bca43dff17fb.tar.gz
* c-typeck.c (build_unary_op): include VECTOR_TYPE in set of codes
permissible for unary plus. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84417 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/simd-2.c')
-rw-r--r--gcc/testsuite/gcc.dg/simd-2.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/simd-2.c b/gcc/testsuite/gcc.dg/simd-2.c
new file mode 100644
index 00000000000..20d4a07d46c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/simd-2.c
@@ -0,0 +1,55 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall" } */
+
+/* Origin: Aldy Hernandez <aldyh@redhat.com>. */
+/* Purpose: Program to test generic SIMD support. */
+
+typedef float __attribute__((vector_size(8))) v2sf;
+typedef float __attribute__((vector_size(16))) v4sf;
+typedef double __attribute__((vector_size(16))) v2df;
+
+v4sf a, b;
+v2sf c, d;
+v2df e;
+
+double foo;
+float foo1;
+v2sf foo2;
+
+void
+hanneke ()
+{
+ /* Assignment. */
+ a = b;
+
+ /* Assignment of different types. */
+ b = c; /* { dg-error "incompatible types in assignment" } */
+ d = a; /* { dg-error "incompatible types in assignment" } */
+
+ /* Casting between SIMDs of the same size. */
+ e = (typeof (e)) a;
+
+ /* Assignment between scalar and SIMD of different size. */
+ foo = a; /* { dg-error "incompatible types in assignment" } */
+
+ /* Casted assignment between scalar and SIMD of same size. */
+ foo = (typeof (foo)) foo2; /* { dg-bogus "aggregate value used where a float was expected" "" { xfail *-*-* } } */
+
+ /* Casted assignment between scalar and SIMD of different size. */
+/* foo1 = (typeof (foo1)) foo2; { dg*error "can't convert between vector values of different size" } */
+ foo1 = (typeof (foo1)) foo2; /* { dg-bogus "aggregate value used where a float was expected" "" { xfail *-*-* } } */
+
+ /* Operators on compatible SIMD types. */
+ a += b + b;
+ a -= b;
+ a *= b;
+ a /= b;
+ a = +b;
+ c = -d;
+
+ /* Operators on incompatible SIMD types. */
+ a = b + c; /* { dg-error "can't convert between vector values of different size" } */
+ a = b - c; /* { dg-error "can't convert between vector values of different size" } */
+ a = b * c; /* { dg-error "can't convert between vector values of different size" } */
+ a = b / c; /* { dg-error "can't convert between vector values of different size" } */
+}