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-skip-if "" { *-*-* } { "-march=*" } { "-march=k8" } } */
5 /* { dg-options "-O2 -march=k8 -mno-sse3 -mfpmath=sse" } */
6 
7 typedef float     __m128  __attribute__ ((__vector_size__ (16), __may_alias__));
8 typedef double    __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
9 typedef int	  __m128w __attribute__ ((__vector_size__ (16), __may_alias__));
10 typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
11 typedef char __m128qi __attribute__ ((__vector_size__ (16), __may_alias__));
12 
13 #ifdef __SSE3__
14 #error "-msse3 should not be set for this test"
15 #endif
16 
17 __m128d sse3_hsubpd (__m128d a, __m128d b) __attribute__((__target__("sse3")));
18 __m128d generic_hsubpd (__m128d a, __m128d b);
19 
20 __m128d
sse3_hsubpd(__m128d a,__m128d b)21 sse3_hsubpd (__m128d a, __m128d b)
22 {
23   return __builtin_ia32_hsubpd (a, b);
24 }
25 
26 __m128d
generic_hsubpd(__m128d a,__m128d b)27 generic_hsubpd (__m128d a, __m128d b)
28 {
29   return __builtin_ia32_hsubpd (a, b);			/* { dg-error "needs isa option" } */
30 }
31 
32 #ifdef __SSSE3__
33 #error "-mssse3 should not be set for this test"
34 #endif
35 
36 __m128w ssse3_psignd128 (__m128w a, __m128w b) __attribute__((__target__("ssse3")));
37 __m128w generic_psignd (__m128w ab, __m128w b);
38 
39 __m128w
ssse3_psignd128(__m128w a,__m128w b)40 ssse3_psignd128 (__m128w a, __m128w b)
41 {
42   return __builtin_ia32_psignd128 (a, b);
43 }
44 
45 __m128w
generic_psignd128(__m128w a,__m128w b)46 generic_psignd128 (__m128w a, __m128w b)
47 {
48   return __builtin_ia32_psignd128 (a, b);		/* { dg-error "needs isa option" } */
49 }
50 
51 #ifdef __SSE4_1__
52 #error "-msse4.1 should not be set for this test"
53 #endif
54 
55 __m128 sse4_1_roundv4sf2 (__m128 a) __attribute__((__target__("sse4.1")));
56 __m128 generic_roundv4sf2 (__m128 a);
57 
58 __m128
sse4_1_roundv4sf2(__m128 a)59 sse4_1_roundv4sf2  (__m128 a)
60 {
61   return __builtin_ia32_roundps_az (a);
62 }
63 
64 __m128
generic_blendvpd(__m128 a)65 generic_blendvpd  (__m128 a)
66 {
67   return __builtin_ia32_roundps_az (a);		/* { dg-error "needs isa option" } */
68 }
69 
70 #ifdef __SSE4_2__
71 #error "-msse4.2 should not be set for this test"
72 #endif
73 
74 __m128qi sse4_2_cmpistrm (__m128qi a, __m128qi b) __attribute__((__target__("sse4.2")));
75 __m128qi generic_cmpistrm (__m128qi a, __m128qi b);
76 
77 __m128qi
sse4_2_cmpistrm(__m128qi a,__m128qi b)78 sse4_2_cmpistrm (__m128qi a, __m128qi b)
79 {
80   return  __builtin_ia32_pcmpistrm128 (a, b, 0);
81 }
82 
83 __m128qi
generic_comistrm(__m128qi a,__m128qi b)84 generic_comistrm (__m128qi a, __m128qi b)
85 {
86   return  __builtin_ia32_pcmpistrm128 (a, b, 0);	/* { dg-error "needs isa option" } */
87 }
88 
89 #ifdef __SSE4A__
90 #error "-msse4a should not be set for this test"
91 #endif
92 
93 __m128i sse4_2_insertq (__m128i a, __m128i b) __attribute__((__target__("sse4a")));
94 __m128i generic_insertq (__m128i ab, __m128i b);
95 
96 __m128i
sse4_2_insertq(__m128i a,__m128i b)97 sse4_2_insertq (__m128i a, __m128i b)
98 {
99   return __builtin_ia32_insertq (a, b);
100 }
101 
102 __m128i
generic_insertq(__m128i a,__m128i b)103 generic_insertq (__m128i a, __m128i b)
104 {
105   return __builtin_ia32_insertq (a, b);			/* { dg-error "needs isa option" } */
106 }
107 
108 #ifdef __FMA4__
109 #error "-mfma4 should not be set for this test"
110 #endif
111 
112 __m128d fma4_fmaddpd (__m128d a, __m128d b, __m128d c) __attribute__((__target__("fma4")));
113 __m128d generic_fmaddpd (__m128d a, __m128d b, __m128d c);
114 
115 __m128d
fma4_fmaddpd(__m128d a,__m128d b,__m128d c)116 fma4_fmaddpd  (__m128d a, __m128d b, __m128d c)
117 {
118   return __builtin_ia32_vfmaddpd (a, b, c);
119 }
120 
121 __m128d
generic_fmaddpd(__m128d a,__m128d b,__m128d c)122 generic_fmaddpd  (__m128d a, __m128d b, __m128d c)
123 {
124   return __builtin_ia32_vfmaddpd (a, b, c);		/* { dg-error "needs isa option" } */
125 }
126 
127 #ifdef __AES__
128 #error "-maes should not be set for this test"
129 #endif
130 
131 __m128i aes_aesimc128 (__m128i a) __attribute__((__target__("aes")));
132 __m128i generic_aesimc128 (__m128i a);
133 
134 __m128i
aes_aesimc128(__m128i a)135 aes_aesimc128 (__m128i a)
136 {
137   return __builtin_ia32_aesimc128 (a);
138 }
139 
140 __m128i
generic_aesimc128(__m128i a)141 generic_aesimc128 (__m128i a)
142 {
143   return __builtin_ia32_aesimc128 (a);			/* { dg-error "needs isa option" } */
144 }
145 
146 #ifdef __PCLMUL__
147 #error "-mpclmul should not be set for this test"
148 #endif
149 
150 __m128i pclmul_pclmulqdq128 (__m128i a, __m128i b) __attribute__((__target__("pclmul")));
151 __m128i generic_pclmulqdq128 (__m128i a, __m128i b);
152 
153 __m128i
pclmul_pclmulqdq128(__m128i a,__m128i b)154 pclmul_pclmulqdq128 (__m128i a, __m128i b)
155 {
156   return __builtin_ia32_pclmulqdq128 (a, b, 5);
157 }
158 
159 __m128i
generic_pclmulqdq128(__m128i a,__m128i b)160 generic_pclmulqdq128 (__m128i a, __m128i b)
161 {
162   return __builtin_ia32_pclmulqdq128 (a, b, 5);		/* { dg-error "needs isa option" } */
163 }
164