Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / gcc / testsuite / gcc.target / mips / mips-3d-1.c
blob765bc49108491093a1ab985238f9f4b04110be14
1 /* { dg-do run { target mipsisa64*-*-* } } */
2 /* { dg-mips-options "-mips64 -O2 -mips3d -mhard-float -mgp64" } */
4 /* Test MIPS-3D builtin functions */
5 #include <stdlib.h>
6 #include <stdio.h>
8 typedef float v2sf __attribute__ ((vector_size(8)));
10 int main ()
12 int little_endian;
13 v2sf a, b, c, d;
14 float f1, f2, f3, f4, f5, f6;
15 double d1, d2, d3, d4, d5, d6, d7, d8, d9;
16 v2sf ps1, ps2, ps3, ps4, ps5, ps6;
18 union { long long ll; int i[2]; } endianness_test;
19 endianness_test.ll = 1;
20 little_endian = endianness_test.i[0];
22 /* addr.ps */
23 a = (v2sf) {12, 34};
24 b = (v2sf) {45, 67};
25 c = __builtin_mips_addr_ps (a, b);
26 if (little_endian)
27 d = (v2sf) {112, 46};
28 else
29 d = (v2sf) {46, 112};
31 if (!__builtin_mips_all_c_eq_ps(c, d))
32 abort ();
34 /* mulr.ps */
35 a = (v2sf) {12, 34};
36 b = (v2sf) {45, 67};
37 c = __builtin_mips_mulr_ps (a, b);
38 if (little_endian)
39 d = (v2sf) {3015, 408};
40 else
41 d = (v2sf) {408, 3015};
43 if (!__builtin_mips_all_c_eq_ps(c, d))
44 abort ();
46 /* cvt.pw.ps */
47 a = (v2sf) {12345.34, 67890.45};
48 b = __builtin_mips_cvt_pw_ps (a);
50 /* cvt.ps.pw */
51 c = __builtin_mips_cvt_ps_pw (b);
52 d = (v2sf) {12345.0, 67890.0};
54 if (!__builtin_mips_all_c_eq_ps(c, d))
55 abort ();
57 /* recip1.s recip2.s */
58 f1 = 40;
59 f2 = __builtin_mips_recip1_s (f1);
60 f3 = __builtin_mips_recip2_s (f2, f1);
61 f4 = f2 + f2 * f3;
62 f5 = 0.025;
64 if (f4 != f5)
65 abort ();
67 /* recip1.d recip2.d */
68 d1 = 80;
69 d2 = __builtin_mips_recip1_d (d1);
70 d3 = __builtin_mips_recip2_d (d2, d1);
71 d4 = d2 + d2 * d3;
72 d5 = __builtin_mips_recip2_d (d4, d1);
73 d6 = d4 + d4 * d5;
74 d7 = 0.0125;
76 if (d6 != d7)
77 abort ();
79 /* recip1.ps recip2.ps */
80 ps1 = (v2sf) {100, 200};
81 ps2 = __builtin_mips_recip1_ps (ps1);
82 ps3 = __builtin_mips_recip2_ps (ps2, ps1);
83 ps4 = ps2 + ps2 * ps3;
84 ps5 = (v2sf) {0.01, 0.005};
86 if (!__builtin_mips_all_c_eq_ps(ps4, ps5))
87 abort ();
89 /* rsqrt1.s rsqrt2.s */
90 f1 = 400;
91 f2 = __builtin_mips_rsqrt1_s (f1);
92 f3 = f2 * f1;
93 f4 = __builtin_mips_rsqrt2_s (f3, f2);
94 f5 = f2 + f2 * f4;
95 f6 = 0.05;
97 if (f5 != f6)
98 abort ();
100 /* rsqrt1.d rsqrt2.d */
101 d1 = 1600;
102 d2 = __builtin_mips_rsqrt1_d (d1);
103 d3 = d2 * d1;
104 d4 = __builtin_mips_rsqrt2_d (d3, d2);
105 d5 = d2 + d2 * d4;
106 d6 = d1 * d5;
107 d7 = __builtin_mips_rsqrt2_d (d6, d5);
108 d8 = d5 + d5 * d7;
109 d9 = 0.025;
111 if (d8 != d9)
112 abort ();
114 /* rsqrt1.ps rsqrt2.ps */
115 ps1 = (v2sf) {400, 100};
116 ps2 = __builtin_mips_rsqrt1_ps (ps1);
117 ps3 = ps2 * ps1;
118 ps4 = __builtin_mips_rsqrt2_ps (ps3, ps2);
119 ps5 = ps2 + ps2 * ps4;
120 ps6 = (v2sf) {0.05, 0.1};
122 if (!__builtin_mips_all_c_eq_ps(ps5, ps6))
123 abort ();
125 printf ("Test Passes\n");
126 exit (0);