aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCarl Love <cel@us.ibm.com>2018-05-09 19:21:24 +0000
committerCarl Love <carll@gcc.gnu.org>2018-05-09 19:21:24 +0000
commiteb1d9e8e6f53b80230752556f4f6c5e4e6cb948f (patch)
treed6598bce18fbc2bd95139d4c78b4b9800457deb2 /gcc
parent9410d82460c08c22a47488c99d98550b3c9bba2d (diff)
downloadgcc-eb1d9e8e6f53b80230752556f4f6c5e4e6cb948f.zip
gcc-eb1d9e8e6f53b80230752556f4f6c5e4e6cb948f.tar.gz
gcc-eb1d9e8e6f53b80230752556f4f6c5e4e6cb948f.tar.bz2
builtins-8-runnable.c: New builtin test file.
gcc/testsuite/ChangeLog: 2018-05-09 Carl Love <cel@us.ibm.com> * gcc.target/powerpc/builtins-8-runnable.c: New builtin test file. From-SVN: r260090
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-8-runnable.c98
2 files changed, 101 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6f1c395..3164159 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,6 @@
+2018-05-09 Carl Love <cel@us.ibm.com>
+ * gcc.target/powerpc/builtins-8-runnable.c: New builtin test file.
+
2018-05-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85713
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-8-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-8-runnable.c
new file mode 100644
index 0000000..26b26d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-8-runnable.c
@@ -0,0 +1,98 @@
+/* { dg-do run { target { powerpc*-*-* && { p8vector_hw } } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <math.h>
+#include <altivec.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+void abort (void);
+
+int main()
+ {
+ int i;
+ vector float f_arg1;
+ vector double d_arg1;
+
+ vector float vec_f_expected1, vec_f_result1, vec_f_error;
+ vector double vec_d_expected1, vec_d_result1, vec_d_error;
+
+ /* vec_expte: float args, result */
+ f_arg1 = (vector float){1.0, 2.0, 3.0, 4.0};
+ vec_f_expected1 = (vector float){2.0, 4.0, 8.0, 16.0};
+
+ vec_f_result1 = vec_expte (f_arg1);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (vec_f_expected1[i] != vec_f_result1[i])
+#ifdef DEBUG
+ printf("ERROR vec_expte (f) result[%d]=%f != expected[%d]=%f\n",
+ i, vec_f_result1[i], i, vec_f_expected1[i]);
+#else
+ abort();
+#endif
+ }
+
+ /* vec_loge: float args, result */
+ f_arg1 = (vector float){4.0, 8.0, 16.0, 64};
+ vec_f_expected1 = (vector float){2.0, 3.0, 4.0, 6.0};
+
+ vec_f_result1 = vec_loge (f_arg1);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (vec_f_expected1[i] != vec_f_result1[i])
+#ifdef DEBUG
+ printf("ERROR vec_loge (f) result[%d]=%f != expected[%d]=%f\n",
+ i, vec_f_result1[i], i, vec_f_expected1[i]);
+#else
+ abort();
+#endif
+ }
+
+ /* vec_re: float args, result (calculate approximate reciprocal) */
+ f_arg1 = (vector float){1.0, 5.0, 4.0, 8.0};
+ vec_f_expected1 = (vector float){1.0, 0.2, 0.25, 0.125};
+ vec_f_error = (vector float){1.0, 0.2, 0.25, 0.125};
+
+ vec_f_result1 = vec_re (f_arg1);
+
+ for (i = 0; i < 4; i++)
+ {
+ vec_f_error[i] = fabs(vec_f_expected1[i] - vec_f_result1[i]);
+
+ if (vec_f_error[i] >= 0.0001)
+#ifdef DEBUG
+ printf("ERROR vec_re (f) result[%d]=%f != expected[%d]=%f\n",
+ i, vec_f_result1[i], i, vec_f_expected1[i]);
+#else
+ abort();
+#endif
+ }
+
+ /* vec_re: double args, result (calculate approximate reciprocal) */
+ d_arg1 = (vector double){1.0, 8.0};
+ vec_d_expected1 = (vector double){1.0, 0.125};
+ vec_d_error = (vector double){1.0, 0.125};
+
+ vec_d_result1 = vec_re (d_arg1);
+
+ for (i = 0; i < 2; i++)
+ {
+ vec_d_error[i] = fabs(vec_d_expected1[i] - vec_d_result1[i]);
+
+ if (vec_d_error[i] >= 0.0001)
+#ifdef DEBUG
+ printf("ERROR vec_re (d) result[%d]=%f != expected[%d]=%f\n",
+ i, vec_d_result1[i], i, vec_d_expected1[i]);
+#else
+ abort();
+#endif
+ }
+ }