Fix PR51469 (attr-ifunc fails on ppc); Make #pragma GCC target ("...") change macros...
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / ppc-target-4.c
blobac728334cd5dde66f7c807fb7d327b01d5507bbf
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-options "-O2 -ffast-math -mcpu=power5 -mno-altivec -mabi=altivec -fno-unroll-loops" } */
5 /* { dg-final { scan-assembler-times "vaddfp" 1 } } */
6 /* { dg-final { scan-assembler-times "xvaddsp" 1 } } */
7 /* { dg-final { scan-assembler-times "fadds" 1 } } */
9 #ifndef SIZE
10 #define SIZE 1024
11 #endif
13 #ifdef __ALTIVEC__
14 #error "__ALTIVEC__ should not be defined."
15 #endif
17 #ifdef __VSX__
18 #error "__VSX__ should not be defined."
19 #endif
21 #pragma GCC target("vsx")
22 #include <altivec.h>
23 #pragma GCC reset_options
25 #pragma GCC push_options
26 #pragma GCC target("altivec,no-vsx")
28 #ifndef __ALTIVEC__
29 #error "__ALTIVEC__ should be defined."
30 #endif
32 #ifdef __VSX__
33 #error "__VSX__ should not be defined."
34 #endif
36 void
37 av_add (vector float *a, vector float *b, vector float *c)
39 unsigned long i;
40 unsigned long n = SIZE / 4;
42 for (i = 0; i < n; i++)
43 a[i] = vec_add (b[i], c[i]);
46 #pragma GCC target("vsx")
48 #ifndef __ALTIVEC__
49 #error "__ALTIVEC__ should be defined."
50 #endif
52 #ifndef __VSX__
53 #error "__VSX__ should be defined."
54 #endif
56 void
57 vsx_add (vector float *a, vector float *b, vector float *c)
59 unsigned long i;
60 unsigned long n = SIZE / 4;
62 for (i = 0; i < n; i++)
63 a[i] = vec_add (b[i], c[i]);
66 #pragma GCC pop_options
67 #pragma GCC target("no-vsx,no-altivec")
69 #ifdef __ALTIVEC__
70 #error "__ALTIVEC__ should not be defined."
71 #endif
73 #ifdef __VSX__
74 #error "__VSX__ should not be defined."
75 #endif
77 void
78 norm_add (float *a, float *b, float *c)
80 unsigned long i;
82 for (i = 0; i < SIZE; i++)
83 a[i] = b[i] + c[i];