summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c')
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c229
1 files changed, 210 insertions, 19 deletions
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c
index 08b7a5395d2..17bb9b3225b 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-3-runnable.c
@@ -5,53 +5,181 @@
#include <altivec.h> // vector
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
#define ALL 1
#define EVEN 2
#define ODD 3
void abort (void);
-void test_result_sp(int check, vector float vec_result, vector float vec_expected)
+void test_int_result(int check, vector int vec_result, vector int vec_expected)
{
int i;
- for(i = 0; i<4; i++) {
- switch (check) {
- case ALL:
- break;
- case EVEN:
- if (i%2 == 0)
+ for (i = 0; i < 4; i++) {
+ switch (check) {
+ case ALL:
break;
- else
- continue;
- case ODD:
- if (i%2 != 0)
+ case EVEN:
+ if (i%2 == 0)
+ break;
+ else
+ continue;
+ case ODD:
+ if (i%2 != 0)
+ break;
+ else
+ continue;
+ }
+
+ if (vec_result[i] != vec_expected[i]) {
+#ifdef DEBUG
+ printf("Test_int_result: ");
+ printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
+ i, vec_result[i], i, vec_expected[i]);
+#else
+ abort();
+#endif
+ }
+ }
+}
+
+void test_unsigned_int_result(int check, vector unsigned int vec_result,
+ vector unsigned int vec_expected)
+{
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ switch (check) {
+ case ALL:
break;
- else
- continue;
+ case EVEN:
+ if (i%2 == 0)
+ break;
+ else
+ continue;
+ case ODD:
+ if (i%2 != 0)
+ break;
+ else
+ continue;
+ }
+
+ if (vec_result[i] != vec_expected[i]) {
+#ifdef DEBUG
+ printf("Test_unsigned int_result: ");
+ printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
+ i, vec_result[i], i, vec_expected[i]);
+#else
+ abort();
+#endif
+ }
+
}
+}
- if (vec_result[i] != vec_expected[i])
- abort();
+void test_ll_int_result(vector long long int vec_result,
+ vector long long int vec_expected)
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ if (vec_result[i] != vec_expected[i]) {
+#ifdef DEBUG
+ printf("Test_ll_int_result: ");
+ printf("vec_result[%d] (%lld) != vec_expected[%d] (%lld)\n",
+ i, vec_result[i], i, vec_expected[i]);
+#else
+ abort();
+#endif
+ }
+}
+
+void test_ll_unsigned_int_result(vector long long unsigned int vec_result,
+ vector long long unsigned int vec_expected)
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ if (vec_result[i] != vec_expected[i]) {
+#ifdef DEBUG
+ printf("Test_ll_unsigned_int_result: ");
+ printf("vec_result[%d] (%lld) != vec_expected[%d] (%lld)\n",
+ i, vec_result[i], i, vec_expected[i]);
+#else
+ abort();
+#endif
+ }
+}
+
+void test_result_sp(int check, vector float vec_result,
+ vector float vec_expected)
+{
+ int i;
+ for(i = 0; i<4; i++) {
+
+ switch (check) {
+ case ALL:
+ break;
+ case EVEN:
+ if (i%2 == 0)
+ break;
+ else
+ continue;
+ case ODD:
+ if (i%2 != 0)
+ break;
+ else
+ continue;
+ }
+
+ if (vec_result[i] != vec_expected[i]) {
+#ifdef DEBUG
+ printf("Test_result_sp: ");
+ printf("vec_result[%d] (%lld) != vec_expected[%d] (%lld)\n",
+ i, vec_result[i], i, vec_expected[i]);
+#else
+ abort();
+#endif
+ }
}
}
void test_result_dp(vector double vec_result, vector double vec_expected)
{
- if (vec_result[0] != vec_expected[0])
+ if (vec_result[0] != vec_expected[0]) {
+#ifdef DEBUG
+ printf("Test_result_dp: ");
+ printf("vec_result[0] (%lld) != vec_expected[0] (%lld)\n",
+ vec_result[0], vec_expected[0]);
+#else
abort();
+#endif
+ }
- if (vec_result[1] != vec_expected[1])
+ if (vec_result[1] != vec_expected[1]) {
+#ifdef DEBUG
+ printf("Test_result_dp: ");
+ printf("vec_result[1] (%lld) != vec_expected[1] (%lld)\n",
+ vec_result[1], vec_expected[1]);
+#else
abort();
+#endif
+ }
}
int main()
{
int i;
- vector unsigned int vec_unint;
- vector signed int vec_int;
+ vector unsigned int vec_unint, vec_uns_int_expected, vec_uns_int_result;
+ vector signed int vec_int, vec_int_expected, vec_int_result;
vector long long int vec_ll_int0, vec_ll_int1;
+ vector long long int vec_ll_int_expected, vec_ll_int_result;
vector long long unsigned int vec_ll_uns_int0, vec_ll_uns_int1;
+ vector long long unsigned int vec_ll_uns_int_expected, vec_ll_uns_int_result;
vector float vec_flt, vec_flt_result, vec_flt_expected;
vector double vec_dble0, vec_dble1, vec_dble_result, vec_dble_expected;
@@ -163,4 +291,67 @@ int main()
vec_flt_expected = (vector float){0.00, 34.00, 0.00, 97.00};
vec_flt_result = vec_floato (vec_dble0);
test_result_sp(ODD, vec_flt_result, vec_flt_expected);
+
+ /* Convert single precision float to int */
+ vec_flt = (vector float){-14.30, 34.00, 22.00, 97.00};
+ vec_int_expected = (vector signed int){-14, 34, 22, 97};
+ vec_int_result = vec_signed (vec_flt);
+ test_int_result (ALL, vec_int_result, vec_int_expected);
+
+ /* Convert double precision float to long long int */
+ vec_dble0 = (vector double){-124.930, 81234.49};
+ vec_ll_int_expected = (vector long long signed int){-124, 81234};
+ vec_ll_int_result = vec_signed (vec_dble0);
+ test_ll_int_result (vec_ll_int_result, vec_ll_int_expected);
+
+ /* Convert two double precision vector float to vector int */
+ vec_dble0 = (vector double){-124.930, 81234.49};
+ vec_dble1 = (vector double){-24.370, 8354.99};
+ vec_int_expected = (vector signed int){-124, 81234, -24, 8354};
+ vec_int_result = vec_signed2 (vec_dble0, vec_dble1);
+ test_int_result (ALL, vec_int_result, vec_int_expected);
+
+ /* Convert double precision vector float to vector int, even words */
+ vec_dble0 = (vector double){-124.930, 81234.49};
+ vec_int_expected = (vector signed int){-124, 0, 81234, 0};
+ vec_int_result = vec_signede (vec_dble0);
+ test_int_result (EVEN, vec_int_result, vec_int_expected);
+
+ /* Convert double precision vector float to vector int, odd words */
+ vec_dble0 = (vector double){-124.930, 81234.49};
+ vec_int_expected = (vector signed int){0, -124, 0, 81234};
+ vec_int_result = vec_signedo (vec_dble0);
+ test_int_result (ODD, vec_int_result, vec_int_expected);
+
+ /* Convert double precision float to long long unsigned int */
+ vec_dble0 = (vector double){124.930, 8134.49};
+ vec_ll_uns_int_expected = (vector long long unsigned int){124, 8134};
+ vec_ll_uns_int_result = vec_unsigned (vec_dble0);
+ test_ll_unsigned_int_result (vec_ll_uns_int_result,
+ vec_ll_uns_int_expected);
+
+ /* Convert two double precision vector float to vector unsigned int */
+ vec_dble0 = (vector double){124.930, 8134.49};
+ vec_dble1 = (vector double){24.370, 834.99};
+ vec_uns_int_expected = (vector unsigned int){124, 8134, 24, 834};
+ vec_uns_int_result = vec_unsigned2 (vec_dble0, vec_dble1);
+ test_unsigned_int_result (ALL, vec_uns_int_result,
+ vec_uns_int_expected);
+
+ /* Convert double precision vector float to vector unsigned int,
+ even words */
+ vec_dble0 = (vector double){3124.930, 8234.49};
+ vec_uns_int_expected = (vector unsigned int){3124, 0, 8234, 0};
+ vec_uns_int_result = vec_unsignede (vec_dble0);
+ test_unsigned_int_result (EVEN, vec_uns_int_result,
+ vec_uns_int_expected);
+
+ /* Convert double precision vector float to vector unsigned int,
+ odd words */
+ vec_dble0 = (vector double){1924.930, 81234.49};
+ vec_uns_int_expected = (vector unsigned int){0, 1924, 0, 81234};
+ vec_uns_int_result = vec_unsignedo (vec_dble0);
+ test_unsigned_int_result (ODD, vec_uns_int_result,
+ vec_uns_int_expected);
}
+