1/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ 2/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ 3/* { dg-require-effective-target powerpc_vsx_ok } */ 4/* { dg-options "-O2 -ftree-vectorize -mcpu=power7 -ffast-math" } */ 5/* { dg-final { scan-assembler "xvadddp" } } */ 6/* { dg-final { scan-assembler "xvsubdp" } } */ 7/* { dg-final { scan-assembler "xvmuldp" } } */ 8/* { dg-final { scan-assembler "xvdivdp" } } */ 9/* { dg-final { scan-assembler "xvmadd" } } */ 10/* { dg-final { scan-assembler "xvmsub" } } */ 11/* { dg-final { scan-assembler "xvsqrtdp" } } */ 12/* { dg-final { scan-assembler "xvcpsgndp" } } */ 13/* { dg-final { scan-assembler "xvrdpim" } } */ 14/* { dg-final { scan-assembler "xvrdpip" } } */ 15/* { dg-final { scan-assembler "xvrdpiz" } } */ 16/* { dg-final { scan-assembler "xvrdpic" } } */ 17/* { dg-final { scan-assembler "xvrdpi " } } */ 18 19#ifndef SIZE 20#define SIZE 1024 21#endif 22 23double a[SIZE] __attribute__((__aligned__(32))); 24double b[SIZE] __attribute__((__aligned__(32))); 25double c[SIZE] __attribute__((__aligned__(32))); 26double d[SIZE] __attribute__((__aligned__(32))); 27double e[SIZE] __attribute__((__aligned__(32))); 28 29void 30vector_add (void) 31{ 32 int i; 33 34 for (i = 0; i < SIZE; i++) 35 a[i] = b[i] + c[i]; 36} 37 38void 39vector_subtract (void) 40{ 41 int i; 42 43 for (i = 0; i < SIZE; i++) 44 a[i] = b[i] - c[i]; 45} 46 47void 48vector_multiply (void) 49{ 50 int i; 51 52 for (i = 0; i < SIZE; i++) 53 a[i] = b[i] * c[i]; 54} 55 56void 57vector_multiply_add (void) 58{ 59 int i; 60 61 for (i = 0; i < SIZE; i++) 62 a[i] = (b[i] * c[i]) + d[i]; 63} 64 65void 66vector_multiply_subtract (void) 67{ 68 int i; 69 70 for (i = 0; i < SIZE; i++) 71 a[i] = (b[i] * c[i]) - d[i]; 72} 73 74void 75vector_divide (void) 76{ 77 int i; 78 79 for (i = 0; i < SIZE; i++) 80 a[i] = b[i] / c[i]; 81} 82 83extern double sqrt (double); 84extern double floor (double); 85extern double ceil (double); 86extern double trunc (double); 87extern double nearbyint (double); 88extern double rint (double); 89extern double copysign (double, double); 90 91void 92vector_sqrt (void) 93{ 94 int i; 95 96 for (i = 0; i < SIZE; i++) 97 a[i] = sqrt (b[i]); 98} 99 100void 101vector_floor (void) 102{ 103 int i; 104 105 for (i = 0; i < SIZE; i++) 106 a[i] = floor (b[i]); 107} 108 109void 110vector_ceil (void) 111{ 112 int i; 113 114 for (i = 0; i < SIZE; i++) 115 a[i] = ceil (b[i]); 116} 117 118void 119vector_trunc (void) 120{ 121 int i; 122 123 for (i = 0; i < SIZE; i++) 124 a[i] = trunc (b[i]); 125} 126 127void 128vector_nearbyint (void) 129{ 130 int i; 131 132 for (i = 0; i < SIZE; i++) 133 a[i] = nearbyint (b[i]); 134} 135 136void 137vector_rint (void) 138{ 139 int i; 140 141 for (i = 0; i < SIZE; i++) 142 a[i] = rint (b[i]); 143} 144 145void 146vector_copysign (void) 147{ 148 int i; 149 150 for (i = 0; i < SIZE; i++) 151 a[i] = copysign (b[i], c[i]); 152} 153