OSDN Git Service

Add ability to set target options (ix86 only) and optimization options on a function...
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / funcspec-8.c
1 /* Test whether using target specific options, we can use the x86 builtin
2    functions in functions with the appropriate function specific options.  */
3 /* { dg-do compile } */
4 /* { dg-options "-O2 -march=k8 -mfpmath=sse" } */
5
6 typedef float     __m128  __attribute__ ((__vector_size__ (16), __may_alias__));
7 typedef double    __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
8 typedef int       __m128w __attribute__ ((__vector_size__ (16), __may_alias__));
9 typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
10
11 #ifdef __SSE3__
12 #error "-msse3 should not be set for this test"
13 #endif
14
15 __m128d sse3_hsubpd (__m128d a, __m128d b) __attribute__((__option__("sse3")));
16 __m128d generic_hsubpd (__m128d a, __m128d b);
17
18 __m128d
19 sse3_hsubpd (__m128d a, __m128d b)
20 {
21   return __builtin_ia32_hsubpd (a, b);
22 }
23
24 __m128d
25 generic_hsubpd (__m128d a, __m128d b)
26 {
27   return __builtin_ia32_hsubpd (a, b);                  /* { dg-error "needs isa option" } */
28 }
29
30 #ifdef __SSSE3__
31 #error "-mssse3 should not be set for this test"
32 #endif
33
34 __m128w ssse3_psignd128 (__m128w a, __m128w b) __attribute__((__option__("ssse3")));
35 __m128w generic_psignd (__m128w ab, __m128w b);
36
37 __m128w
38 ssse3_psignd128 (__m128w a, __m128w b)
39 {
40   return __builtin_ia32_psignd128 (a, b);
41 }
42
43 __m128w
44 generic_psignd128 (__m128w a, __m128w b)
45 {
46   return __builtin_ia32_psignd128 (a, b);               /* { dg-error "needs isa option" } */
47 }
48
49 #ifdef __SSE4_1__
50 #error "-msse4.1 should not be set for this test"
51 #endif
52
53 __m128d sse4_1_blendvpd (__m128d a, __m128d b, __m128d c) __attribute__((__option__("sse4.1")));
54 __m128d generic_blendvpd (__m128d a, __m128d b, __m128d c);
55
56 __m128d
57 sse4_1_blendvpd  (__m128d a, __m128d b, __m128d c)
58 {
59   return __builtin_ia32_blendvpd (a, b, c);
60 }
61
62 __m128d
63 generic_blendvpd  (__m128d a, __m128d b, __m128d c)
64 {
65   return __builtin_ia32_blendvpd (a, b, c);             /* { dg-error "needs isa option" } */
66 }
67
68 #ifdef __SSE4_2__
69 #error "-msse4.2 should not be set for this test"
70 #endif
71
72 __m128i sse4_2_pcmpgtq (__m128i a, __m128i b) __attribute__((__option__("sse4.2")));
73 __m128i generic_pcmpgtq (__m128i ab, __m128i b);
74
75 __m128i
76 sse4_2_pcmpgtq (__m128i a, __m128i b)
77 {
78   return __builtin_ia32_pcmpgtq (a, b);
79 }
80
81 __m128i
82 generic_pcmpgtq (__m128i a, __m128i b)
83 {
84   return __builtin_ia32_pcmpgtq (a, b);                 /* { dg-error "needs isa option" } */
85 }
86
87 #ifdef __SSE4A__
88 #error "-msse4a should not be set for this test"
89 #endif
90
91 __m128i sse4_2_insertq (__m128i a, __m128i b) __attribute__((__option__("sse4a")));
92 __m128i generic_insertq (__m128i ab, __m128i b);
93
94 __m128i
95 sse4_2_insertq (__m128i a, __m128i b)
96 {
97   return __builtin_ia32_insertq (a, b);
98 }
99
100 __m128i
101 generic_insertq (__m128i a, __m128i b)
102 {
103   return __builtin_ia32_insertq (a, b);                 /* { dg-error "needs isa option" } */
104 }
105
106 #ifdef __SSE5__
107 #error "-msse5 should not be set for this test"
108 #endif
109
110 __m128d sse5_fmaddpd (__m128d a, __m128d b, __m128d c) __attribute__((__option__("sse5")));
111 __m128d generic_fmaddpd (__m128d a, __m128d b, __m128d c);
112
113 __m128d
114 sse5_fmaddpd  (__m128d a, __m128d b, __m128d c)
115 {
116   return __builtin_ia32_fmaddpd (a, b, c);
117 }
118
119 __m128d
120 generic_fmaddpd  (__m128d a, __m128d b, __m128d c)
121 {
122   return __builtin_ia32_fmaddpd (a, b, c);              /* { dg-error "needs isa option" } */
123 }
124
125 #ifdef __AES__
126 #error "-maes should not be set for this test"
127 #endif
128
129 __m128i aes_aesimc128 (__m128i a) __attribute__((__option__("aes")));
130 __m128i generic_aesimc128 (__m128i a);
131
132 __m128i
133 aes_aesimc128 (__m128i a)
134 {
135   return __builtin_ia32_aesimc128 (a);
136 }
137
138 __m128i
139 generic_aesimc128 (__m128i a)
140 {
141   return __builtin_ia32_aesimc128 (a);                  /* { dg-error "needs isa option" } */
142 }
143
144 #ifdef __PCLMUL__
145 #error "-mpclmul should not be set for this test"
146 #endif
147
148 __m128i pclmul_pclmulqdq128 (__m128i a, __m128i b) __attribute__((__option__("pclmul")));
149 __m128i generic_pclmulqdq128 (__m128i a, __m128i b);
150
151 __m128i
152 pclmul_pclmulqdq128 (__m128i a, __m128i b)
153 {
154   return __builtin_ia32_pclmulqdq128 (a, b, 5);
155 }
156
157 __m128i
158 generic_pclmulqdq128 (__m128i a, __m128i b)
159 {
160   return __builtin_ia32_pclmulqdq128 (a, b, 5);         /* { dg-error "needs isa option" } */
161 }