2 /* { dg-require-effective-target sse2 } */
3 /* { dg-options "-O3 -msse2" } */
6 #define CHECK_H "sse2-check.h"
10 #define TEST sse2_test
17 /* mingw runtime don't provide random(). */
23 static short a1
[N
], a2
[N
], a3
[N
];
24 static unsigned short b1
[N
], b2
[N
], b3
[N
];
25 static int c1
[N
], c2
[N
], c3
[N
];
26 static unsigned int d1
[N
], d2
[N
], d3
[N
];
27 static long long e1
[N
], e2
[N
], e3
[N
];
28 static unsigned long long g1
[N
], g2
[N
], g3
[N
];
30 __attribute__((noinline
, noclone
)) void
34 for (i
= 0; i
< N
; ++i
)
35 a1
[i
] = a2
[i
] * a3
[i
];
38 __attribute__((noinline
, noclone
)) void
42 for (i
= 0; i
< N
; ++i
)
43 b1
[i
] = b2
[i
] * b3
[i
];
46 __attribute__((noinline
, noclone
)) void
50 for (i
= 0; i
< N
; ++i
)
51 c1
[i
] = c2
[i
] * c3
[i
];
54 __attribute__((noinline
, noclone
)) void
58 for (i
= 0; i
< N
; ++i
)
59 d1
[i
] = d2
[i
] * d3
[i
];
62 __attribute__((noinline
, noclone
)) void
66 for (i
= 0; i
< N
; ++i
)
67 e1
[i
] = e2
[i
] * e3
[i
];
70 __attribute__((noinline
, noclone
)) void
74 for (i
= 0; i
< N
; ++i
)
75 g1
[i
] = g2
[i
] * g3
[i
];
78 __attribute__((noinline
, noclone
)) void
82 for (i
= 0; i
< N
; ++i
)
83 c1
[i
] = a2
[i
] * a3
[i
];
86 __attribute__((noinline
, noclone
)) void
90 for (i
= 0; i
< N
; ++i
)
91 d1
[i
] = (unsigned int) b2
[i
] * b3
[i
];
94 __attribute__((noinline
, noclone
)) void
98 for (i
= 0; i
< N
; ++i
)
99 e1
[i
] = (long long) c2
[i
] * (long long) c3
[i
];
102 __attribute__((noinline
, noclone
)) void
106 for (i
= 0; i
< N
; ++i
)
107 g1
[i
] = (unsigned long long) d2
[i
] * (unsigned long long) d3
[i
];
110 __attribute__((noinline
, noclone
)) int
114 for (i
= 0; i
< N
; ++i
)
119 __attribute__((noinline
, noclone
)) unsigned int
124 for (i
= 0; i
< N
; ++i
)
125 r
+= (unsigned int) b2
[i
] * b3
[i
];
129 __attribute__((noinline
, noclone
)) long long
134 for (i
= 0; i
< N
; ++i
)
135 r
+= (long long) c2
[i
] * (long long) c3
[i
];
139 __attribute__((noinline
, noclone
)) unsigned long long
143 unsigned long long r
= 0;
144 for (i
= 0; i
< N
; ++i
)
145 r
+= (unsigned long long) d2
[i
] * (unsigned long long) d3
[i
];
156 unsigned long long s4
= 0;
157 for (i
= 0; i
< N
; ++i
)
159 asm volatile ("" : : "r" (&s1
) : "memory");
160 asm volatile ("" : : "r" (&s2
) : "memory");
161 asm volatile ("" : : "r" (&s3
) : "memory");
162 asm volatile ("" : : "r" (&s4
) : "memory");
163 b2
[i
] = (int) random ();
164 b3
[i
] = (int) random ();
167 d2
[i
] = (((int) random ()) << 16) | b2
[i
];
168 d3
[i
] = (((int) random ()) << 16) | b3
[i
];
172 s2
+= (unsigned int) b2
[i
] * b3
[i
];
173 s3
+= (long long) c2
[i
] * (long long) c3
[i
];
174 s4
+= (unsigned long long) d2
[i
] * (unsigned long long) d3
[i
];
182 for (i
= 0; i
< N
; ++i
)
184 if (a1
[i
] != (short) (a2
[i
] * a3
[i
]))
186 if (b1
[i
] != (unsigned short) (b2
[i
] * b3
[i
]))
188 if (c1
[i
] != c2
[i
] * c3
[i
])
190 if (d1
[i
] != d2
[i
] * d3
[i
])
192 if (e1
[i
] != e2
[i
] * e3
[i
])
194 if (g1
[i
] != g2
[i
] * g3
[i
])
201 for (i
= 0; i
< N
; ++i
)
203 if (c1
[i
] != a2
[i
] * a3
[i
])
205 if (d1
[i
] != b2
[i
] * b3
[i
])
207 if (e1
[i
] != (long long) c2
[i
] * (long long) c3
[i
])
209 if (g1
[i
] != (unsigned long long) d2
[i
] * (unsigned long long) d3
[i
])
212 if (f11 () != s1
|| f12 () != s2
|| f13 () != s3
|| f14 () != s4
)