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