* config/msp430/msp430.md (zero_extendhipsi2): Use MOVX.A to store
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / examples-4 / e.51.5.C
blob4298e23421772dced138a5236028865e3c66f397
1 // { dg-do run }
3 #include <omp.h>
5 #define EPS 0.000001
6 #define N 1000
8 extern "C" void abort (void);
10 void init (float *a1, float *a2, int n)
12   int s = -1;
13   for (int i = 0; i < n; i++)
14     {
15       a1[i] = s * 0.01;
16       a2[i] = i;
17       s = -s;
18     }
21 void check (float *a, float *b, int n)
23   for (int i = 0; i < n; i++)
24     if (a[i] - b[i] > EPS || b[i] - a[i] > EPS)
25       abort ();
28 void vec_mult_ref (float *&p, float *&v1, float *&v2, int n)
30   for (int i = 0; i < n; i++)
31     p[i] = v1[i] * v2[i];
34 void vec_mult (float *&p, float *&v1, float *&v2, int n)
36   #pragma omp target map(to: v1[0:n], v2[:n]) map(from: p[0:n])
37     #pragma omp parallel for
38       for (int i = 0; i < n; i++)
39         p[i] = v1[i] * v2[i];
42 int main ()
44   float *p = new float [N];
45   float *p1 = new float [N];
46   float *v1 = new float [N];
47   float *v2 = new float [N];
49   init (v1, v2, N);
51   vec_mult_ref (p, v1, v2, N);
52   vec_mult (p1, v1, v2, N);
54   check (p, p1, N);
56   delete [] p;
57   delete [] p1;
58   delete [] v1;
59   delete [] v2;
61   return 0;