aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2001-11-20 00:38:56 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2001-11-20 00:38:56 +0000
commitb73f64948e86b6003bbfe5691b5c45ef6347eb00 (patch)
tree17ab20efb7daa6af25d1e2abb5c32ac0eb4fa3c5 /gcc/testsuite
parent1578fa9545eb2ddfa81f70f56a0088d9b7078b0d (diff)
downloadgcc-b73f64948e86b6003bbfe5691b5c45ef6347eb00.zip
gcc-b73f64948e86b6003bbfe5691b5c45ef6347eb00.tar.gz
gcc-b73f64948e86b6003bbfe5691b5c45ef6347eb00.tar.bz2
* gcc.c-dg/altivec.c: New.
From-SVN: r47191
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/altivec-1.c82
2 files changed, 86 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cebf71d..8372ca2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-11-19 Aldy Hernandez <aldyh@redhat.com>
+
+ * gcc.dg/altivec-1.c: New.
+
2001-11-19 Neil Booth <neil@daikokuya.demon.co.uk>
* gcc.dg/cpp/fpreprocessed.c: New test case.
diff --git a/gcc/testsuite/gcc.dg/altivec-1.c b/gcc/testsuite/gcc.dg/altivec-1.c
new file mode 100644
index 0000000..e68757e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/altivec-1.c
@@ -0,0 +1,82 @@
+/* { dg-do run { target powerpc-*altivec powerpc-*-*-*altivec } } */
+/* { dg-options "-maltivec" } */
+
+/* Program to test PowerPC AltiVec instructions. */
+
+/* These macros are not analogous to the overloaded functions
+ described in Motorola's AltiVec Programming Interface Manual.
+ These are just here for readability. Eventually we'll get the
+ overloaded functions implemented in an <altivec.h>. */
+
+#define vec_load(src) \
+ __builtin_altivec_ld_internal ((int *) src)
+
+#define vec_store(dst, src) \
+ __builtin_altivec_st_internal ((int *) dst, (int4) src)
+
+#define vec_add_int4(x, y) \
+ __builtin_altivec_vaddsws (x, y)
+
+#define vec_add_float4(x, y) \
+ __builtin_altivec_vaddfp (x, y)
+
+#define vec_average_int4(x, y) \
+ __builtin_altivec_vavgsw (x, y)
+
+typedef int int4 __attribute__ ((mode(V4SI)));
+typedef float float4 __attribute__ ((mode(V4SF)));
+
+int a1[4] __attribute__((aligned(16))) = { 100, 200, 300, 400 };
+int a2[4] __attribute__((aligned(16))) = { 500, 600, 700, 800 };
+int a3[4] __attribute__((aligned(16)));
+int addi[4] = { 600, 800, 1000, 1200 };
+int avgi[4] = { 300, 400, 500, 600 };
+
+float f1[4] __attribute__((aligned(16))) = { 1.0, 2.0, 3.0, 4.0 };
+float f2[4] __attribute__((aligned(16))) = { 5.0, 6.0, 7.0, 8.0 };
+float f3[4] __attribute__((aligned(16)));
+float addf[4] = { 6.0, 8.0, 10.0, 12.0 };
+
+int4 i, j, k;
+float4 f, g, h;
+
+void
+compare_int4 (int *a, int *b)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ if (a[i] != b[i])
+ exit (1);
+}
+
+void
+compare_float4 (float *a, float *b)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ if (a[i] != b[i])
+ exit (1);
+}
+
+main ()
+{
+ i = vec_load (a1);
+ j = vec_load (a2);
+ k = vec_add_int4 (i, j);
+ vec_store (a3, k);
+ compare_int4 (a3, addi);
+
+ k = vec_average_int4 (i, j);
+ vec_store (a3, k);
+ compare_int4 (a3, avgi);
+
+ f = (float4) vec_load (f1);
+ g = (float4) vec_load (f2);
+ h = vec_add_float4 (f, g);
+ vec_store (f3, h);
+ compare_float4 (f3, addf);
+
+ exit (0);
+}