OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [i386/] [avx2-gather-3.c] - Blame information for rev 691

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 691 jeremybenn
/* { dg-do run } */
2
/* { dg-require-effective-target avx2 } */
3
/* { dg-options "-O3 -mavx2 -ffast-math" } */
4
 
5
#include "avx2-check.h"
6
 
7
#define N 1024
8
float f[N];
9
double d[N];
10
int k[N];
11
float *l[N];
12
double *n[N];
13
int **m[N];
14
long **o[N];
15
long q[N];
16
long *r[N];
17
int *s[N];
18
 
19
__attribute__((noinline, noclone)) float
20
f1 (void)
21
{
22
  int i;
23
  float g = 0.0;
24
  for (i = 0; i < N / 2; i++)
25
    g += f[k[i]];
26
  return g;
27
}
28
 
29
__attribute__((noinline, noclone)) float
30
f2 (float *p)
31
{
32
  int i;
33
  float g = 0.0;
34
  for (i = 0; i < N / 2; i++)
35
    g += p[k[i]];
36
  return g;
37
}
38
 
39
__attribute__((noinline, noclone)) float
40
f3 (void)
41
{
42
  int i;
43
  float g = 0.0;
44
  for (i = 0; i < N / 2; i++)
45
    g += *l[i];
46
  return g;
47
}
48
 
49
__attribute__((noinline, noclone)) int
50
f4 (void)
51
{
52
  int i;
53
  int g = 0;
54
  for (i = 0; i < N / 2; i++)
55
    g += **m[i];
56
  return g;
57
}
58
 
59
__attribute__((noinline, noclone)) double
60
f5 (void)
61
{
62
  int i;
63
  double g = 0.0;
64
  for (i = 0; i < N / 2; i++)
65
    g += d[k[i]];
66
  return g;
67
}
68
 
69
__attribute__((noinline, noclone)) double
70
f6 (double *p)
71
{
72
  int i;
73
  double g = 0.0;
74
  for (i = 0; i < N / 2; i++)
75
    g += p[k[i]];
76
  return g;
77
}
78
 
79
__attribute__((noinline, noclone)) double
80
f7 (void)
81
{
82
  int i;
83
  double g = 0.0;
84
  for (i = 0; i < N / 2; i++)
85
    g += *n[i];
86
  return g;
87
}
88
 
89
__attribute__((noinline, noclone)) int
90
f8 (void)
91
{
92
  int i;
93
  int g = 0;
94
  for (i = 0; i < N / 2; i++)
95
    g += **o[i];
96
  return g;
97
}
98
 
99
__attribute__((noinline, noclone)) float
100
f9 (void)
101
{
102
  int i;
103
  float g = 0.0;
104
  for (i = 0; i < N / 2; i++)
105
    g += f[q[i]];
106
  return g;
107
}
108
 
109
__attribute__((noinline, noclone)) float
110
f10 (float *p)
111
{
112
  int i;
113
  float g = 0.0;
114
  for (i = 0; i < N / 2; i++)
115
    g += p[q[i]];
116
  return g;
117
}
118
 
119
__attribute__((noinline, noclone)) double
120
f11 (void)
121
{
122
  int i;
123
  double g = 0.0;
124
  for (i = 0; i < N / 2; i++)
125
    g += d[q[i]];
126
  return g;
127
}
128
 
129
__attribute__((noinline, noclone)) double
130
f12 (double *p)
131
{
132
  int i;
133
  double g = 0.0;
134
  for (i = 0; i < N / 2; i++)
135
    g += p[q[i]];
136
  return g;
137
}
138
 
139
static void
140
avx2_test (void)
141
{
142
  int i;
143
 
144
  for (i = 0; i < N; i++)
145
    {
146
      asm ("");
147
      f[i] = -256.0f + i;
148
      d[i] = -258.0 + i;
149
      k[i] = (i * 731) & (N - 1);
150
      q[i] = (i * 657) & (N - 1);
151
      l[i] = &f[(i * 239) & (N - 1)];
152
      n[i] = &d[(i * 271) & (N - 1)];
153
      r[i] = &q[(i * 323) & (N - 1)];
154
      s[i] = &k[(i * 565) & (N - 1)];
155
      m[i] = &s[(i * 13) & (N - 1)];
156
      o[i] = &r[(i * 19) & (N - 1)];
157
    }
158
 
159
  if (f1 () != 136448.0f || f2 (f) != 136448.0f || f3 () != 130304.0)
160
    abort ();
161
  if (f4 () != 261376 || f5 () != 135424.0 || f6 (d) != 135424.0)
162
    abort ();
163
  if (f7 () != 129280.0 || f8 () != 259840L || f9 () != 130816.0f)
164
    abort ();
165
  if (f10 (f) != 130816.0f || f11 () != 129792.0 || f12 (d) != 129792.0)
166
    abort ();
167
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.