1 /* PR target/pr65105 */ 2 /* { dg-do run { target ia32 } } */ 3 /* { dg-options "-O2 -msse2 -mtune=slm -mno-stackrealign -save-temps" } */ 4 /* { dg-require-effective-target sse2 } */ 5 /* { dg-final { scan-assembler "por" } } */ 6 /* { dg-final { scan-assembler "pand" } } */ 7 8 #include "sse2-check.h" 9 10 #include "stdlib.h" 11 12 static int count = 0; 13 14 void __attribute__((noinline)) counter(long long l)15counter (long long l) 16 { 17 count++; 18 if (!l || count > 5) 19 exit (1); 20 } 21 22 void __attribute__((noinline)) test(long long * arr)23test (long long *arr) 24 { 25 register unsigned long long tmp; 26 27 tmp = arr[0] | arr[1] & arr[2]; 28 while (tmp) 29 { 30 counter (tmp); 31 tmp = *(arr++) & tmp; 32 } 33 } 34 35 void __attribute__((noinline)) fill_data(long long * arr)36fill_data (long long *arr) 37 { 38 arr[0] = 0x00ffffffL; 39 arr[1] = 0xffffff00L; 40 arr[2] = 0x00ffffffL; 41 arr[3] = 0x0000ff00L; 42 arr[4] = 0x00ff0000L; 43 arr[5] = 0xff000000L; 44 } 45 46 static void sse2_test(void)47sse2_test (void) 48 { 49 long long arr[6]; 50 fill_data (arr); 51 test (arr); 52 53 if (count != 5) 54 __builtin_abort (); 55 } 56