1265236Sken/* { dg-do run } */ 2283990Sslm/* { dg-require-effective-target sse4 } */ 3283990Sslm/* { dg-options "-O2 -msse4.1" } */ 4265236Sken 5265236Sken#ifndef CHECK_H 6265236Sken#define CHECK_H "sse4_1-check.h" 7265236Sken#endif 8265236Sken 9265236Sken#ifndef TEST 10265236Sken#define TEST sse4_1_test 11265236Sken#endif 12265236Sken 13265236Sken#include CHECK_H 14265236Sken 15265236Sken#include <smmintrin.h> 16265236Sken 17265236Sken#define NUM 128 18265236Sken 19265236Skenstatic void 20265236SkenTEST (void) 21265236Sken{ 22265236Sken union 23265236Sken { 24265236Sken __m128i x[NUM / 4]; 25265236Sken int i[NUM]; 26265236Sken short s[NUM * 2]; 27283990Sslm } dst, src; 28265236Sken int i, sign = 1; 29265236Sken 30265236Sken for (i = 0; i < NUM; i++) 31265236Sken { 32265236Sken src.s[(i % 4) + (i / 4) * 8] = i * i * sign; 33265236Sken sign = -sign; 34265236Sken } 35265236Sken 36265236Sken for (i = 0; i < NUM; i += 4) 37265236Sken dst.x [i / 4] = _mm_cvtepi16_epi32 (src.x [i / 4]); 38265236Sken 39265236Sken for (i = 0; i < NUM; i++) 40265236Sken if (src.s[(i % 4) + (i / 4) * 8] != dst.i[i]) 41265236Sken abort (); 42265236Sken} 43265236Sken