1 /* { dg-do compile { target { powerpc*-*-* } } } */ 2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */ 3 /* { dg-require-effective-target powerpc_p8vector_ok } */ 4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ 5 /* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */ 6 7 #ifndef SIZE 8 #define SIZE 1024 9 #endif 10 11 #ifndef ALIGN 12 #define ALIGN 32 13 #endif 14 15 #ifndef ATTR_ALIGN 16 #define ATTR_ALIGN __attribute__((__aligned__(ALIGN))) 17 #endif 18 19 #ifndef TYPE 20 #define TYPE unsigned int 21 #endif 22 23 TYPE in1 [SIZE] ATTR_ALIGN; 24 TYPE in2 [SIZE] ATTR_ALIGN; 25 TYPE eqv [SIZE] ATTR_ALIGN; 26 TYPE nand1[SIZE] ATTR_ALIGN; 27 TYPE nand2[SIZE] ATTR_ALIGN; 28 TYPE orc1 [SIZE] ATTR_ALIGN; 29 TYPE orc2 [SIZE] ATTR_ALIGN; 30 31 void do_eqv(void)32do_eqv (void) 33 { 34 unsigned long i; 35 36 for (i = 0; i < SIZE; i++) 37 { 38 eqv[i] = ~(in1[i] ^ in2[i]); 39 } 40 } 41 42 void do_nand1(void)43do_nand1 (void) 44 { 45 unsigned long i; 46 47 for (i = 0; i < SIZE; i++) 48 { 49 nand1[i] = ~(in1[i] & in2[i]); 50 } 51 } 52 53 void do_nand2(void)54do_nand2 (void) 55 { 56 unsigned long i; 57 58 for (i = 0; i < SIZE; i++) 59 { 60 nand2[i] = (~in1[i]) | (~in2[i]); 61 } 62 } 63 64 void do_orc1(void)65do_orc1 (void) 66 { 67 unsigned long i; 68 69 for (i = 0; i < SIZE; i++) 70 { 71 orc1[i] = (~in1[i]) | in2[i]; 72 } 73 } 74 75 void do_orc2(void)76do_orc2 (void) 77 { 78 unsigned long i; 79 80 for (i = 0; i < SIZE; i++) 81 { 82 orc1[i] = in1[i] | (~in2[i]); 83 } 84 } 85 86 /* { dg-final { scan-assembler-times "xxleqv" 1 } } */ 87 /* { dg-final { scan-assembler-times "xxlnand" 2 } } */ 88 /* { dg-final { scan-assembler-times "xxlorc" 2 } } */ 89