1153838Sdfr/* { dg-do run } */ 2153838Sdfr/* { dg-require-effective-target sse4 } */ 3153838Sdfr/* { dg-options "-O2 -msse4.1" } */ 4153838Sdfr 5153838Sdfr#ifndef CHECK_H 6153838Sdfr#define CHECK_H "sse4_1-check.h" 7153838Sdfr#endif 8153838Sdfr 9153838Sdfr#ifndef TEST 10153838Sdfr#define TEST sse4_1_test 11153838Sdfr#endif 12153838Sdfr 13153838Sdfr#include CHECK_H 14153838Sdfr 15153838Sdfr#include <smmintrin.h> 16153838Sdfr 17153838Sdfr#define NUM 128 18153838Sdfr 19153838Sdfrstatic void 20153838SdfrTEST (void) 21153838Sdfr{ 22153838Sdfr union 23153838Sdfr { 24153838Sdfr __m128i x[NUM / 4]; 25153838Sdfr unsigned int i[NUM]; 26153838Sdfr unsigned char c[NUM * 4]; 27153838Sdfr } dst, src; 28153838Sdfr int i; 29153838Sdfr 30203027Sgavin for (i = 0; i < NUM; i++) 31206622Suqs { 32153838Sdfr src.c[(i % 4) + (i / 4) * 16] = i * i; 33153838Sdfr if ((i % 4)) 34153838Sdfr src.c[(i % 4) + (i / 4) * 16] |= 0x80; 35153838Sdfr } 36153838Sdfr 37153838Sdfr for (i = 0; i < NUM; i += 4) 38153838Sdfr dst.x [i / 4] = _mm_cvtepu8_epi32 (src.x [i / 4]); 39153838Sdfr 40153838Sdfr for (i = 0; i < NUM; i++) 41153838Sdfr if (src.c[(i % 4) + (i / 4) * 16] != dst.i[i]) 42153838Sdfr abort (); 43153838Sdfr} 44153838Sdfr