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 short v1[] __attribute__ ((aligned(16))) = 16{ 17 0x8000, 0x9000, 1, 10, 0xa000, 0xb000, 2, 20, 18 3, 30, 0xd000, 0xe000, 0xf000, 0xe000, 25, 30 19}; 20unsigned short v2[] __attribute__ ((aligned(16))) = 21{ 22 4, 40, 0xb000, 0x8000, 5, 50, 0xc000, 0xf000, 23 0xd000, 0xa000, 6, 65, 7, 75, 0xe000, 0xc000 24}; 25 26unsigned short max[] = 27{ 28 0x8000, 0x9000, 0xb000, 0x8000, 0xa000, 0xb000, 0xc000, 0xf000, 29 0xd000, 0xa000, 0xd000, 0xe000, 0xf000, 0xe000, 0xe000, 0xc000 30}; 31 32unsigned short min[] = 33{ 34 4, 40, 1, 10, 5, 50, 2, 20, 35 3, 30, 6, 65, 7, 75, 25, 30 36}; 37 38unsigned short res[16] __attribute__ ((aligned(16))); 39 40extern void abort (void); 41 42void 43find_max (void) 44{ 45 int i; 46 47 for (i = 0; i < 16; 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 < 16; 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 < 16; i++) 68 if (res[i] != max[i]) 69 err++; 70 71 find_min (); 72 for (i = 0; i < 16; i++) 73 if (res[i] != min[i]) 74 err++; 75 76 if (err) 77 abort (); 78} 79