OSDN Git Service

* gcc.c-dg/altivec.c: New.
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2001 00:38:56 +0000 (00:38 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2001 00:38:56 +0000 (00:38 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47191 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/altivec-1.c [new file with mode: 0644]

index cebf71d..8372ca2 100644 (file)
@@ -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 (file)
index 0000000..e68757e
--- /dev/null
@@ -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);
+}