1/* { dg-do run } */ 2/* { dg-options "-O1 -msse2 -ftree-vectorize" } */ 3/* { dg-require-effective-target sse2 } */ 4 5#ifndef CHECK_H 6#define CHECK_H "sse2-check.h" 7#endif 8 9#ifndef TEST 10#define TEST sse2_test 11#endif 12 13#include CHECK_H 14 15unsigned int v1[] __attribute__ ((aligned(16))) = 16{ 17 0x80000000, 1, 0xa0000000, 2, 18 3, 0xd0000000, 0xf0000000, 0xe0000000 19}; 20unsigned int v2[] __attribute__ ((aligned(16))) = 21{ 22 4, 0xb0000000, 5, 0xc0000000, 23 0xd0000000, 6, 7, 8 24}; 25 26unsigned int max[] = 27{ 28 0x80000000, 0xb0000000, 0xa0000000, 0xc0000000, 29 0xd0000000, 0xd0000000, 0xf0000000, 0xe0000000 30}; 31 32unsigned int min[] = 33{ 34 4, 1, 5, 2, 35 3, 6, 7, 8 36}; 37 38unsigned int res[8] __attribute__ ((aligned(16))); 39 40extern void abort (void); 41 42void 43find_max (void) 44{ 45 int i; 46 47 for (i = 0; i < 8; i++) 48 res[i] = v1[i] < v2[i] ? v2[i] : v1[i]; 49} 50 51void 52find_min (void) 53{ 54 int i; 55 56 for (i = 0; i < 8; i++) 57 res[i] = v1[i] > v2[i] ? v2[i] : v1[i]; 58} 59 60static void 61TEST (void) 62{ 63 int i; 64 int err = 0; 65 66 find_max (); 67 for (i = 0; i < 8; i++) 68 if (res[i] != max[i]) 69 err++; 70 71 find_min (); 72 for (i = 0; i < 8; i++) 73 if (res[i] != min[i]) 74 err++; 75 76 if (err) 77 abort (); 78} 79