1 /* { dg-do compile } */ 2 /* { dg-options "-O -mcpu=ultrasparc -mvis" } */ 3 typedef char vec8 __attribute__((vector_size(8))); 4 typedef short vec16 __attribute__((vector_size(8))); 5 typedef int vec32 __attribute__((vector_size(8))); 6 7 extern vec8 foo1_8(void); 8 extern vec8 foo2_8(void); 9 fun8(void)10vec8 fun8(void) 11 { 12 return ~(foo1_8 () & foo2_8 ()); 13 } 14 15 extern vec16 foo1_16(void); 16 extern vec16 foo2_16(void); 17 fun16(void)18vec16 fun16(void) 19 { 20 return ~(foo1_16 () & foo2_16 ()); 21 } 22 23 extern vec32 foo1_32(void); 24 extern vec32 foo2_32(void); 25 fun32(void)26vec32 fun32(void) 27 { 28 return ~(foo1_32 () & foo2_32 ()); 29 } 30 31 32 /* DeMorgan's Law's at work. */ fun8b(void)33vec8 fun8b(void) 34 { 35 return ~foo1_8 () | ~foo2_8 (); 36 } 37 fun16b(void)38vec16 fun16b(void) 39 { 40 return ~foo1_16 () | ~foo2_16 (); 41 } 42 fun32b(void)43vec32 fun32b(void) 44 { 45 return ~foo1_32 () | ~foo2_32 (); 46 } 47 48 /* { dg-final { scan-assembler-times "fnand\t%" 6 } } */ 49