1/* { dg-do compile } */
2/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
3
4#include <mm_malloc.h>
5
6/* Test that the intrinsics compile with optimization.  All of them
7   are defined as inline functions in {,x,e,p,t,s,w,a,b,i}mmintrin.h,
8   xopintrin.h, abmintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h
9   that reference the proper builtin functions.  Defining away
10   "extern" and "__inline" results in all of them being compiled as
11   proper functions.  */
12
13#define extern
14#define __inline
15
16/* Following intrinsics require immediate arguments. */
17
18/* ammintrin.h */
19#define __builtin_ia32_extrqi(X, I, L)  __builtin_ia32_extrqi(X, 1, 1)
20#define __builtin_ia32_insertqi(X, Y, I, L) __builtin_ia32_insertqi(X, Y, 1, 1)
21
22/* immintrin.h */
23#define __builtin_ia32_blendpd256(X, Y, M) __builtin_ia32_blendpd256(X, Y, 1)
24#define __builtin_ia32_blendps256(X, Y, M) __builtin_ia32_blendps256(X, Y, 1)
25#define __builtin_ia32_dpps256(X, Y, M) __builtin_ia32_dpps256(X, Y, 1)
26#define __builtin_ia32_shufpd256(X, Y, M) __builtin_ia32_shufpd256(X, Y, 1)
27#define __builtin_ia32_shufps256(X, Y, M) __builtin_ia32_shufps256(X, Y, 1)
28#define __builtin_ia32_cmpsd(X, Y, O) __builtin_ia32_cmpsd(X, Y, 1)
29#define __builtin_ia32_cmpss(X, Y, O) __builtin_ia32_cmpss(X, Y, 1)
30#define __builtin_ia32_cmppd(X, Y, O) __builtin_ia32_cmppd(X, Y, 1)
31#define __builtin_ia32_cmpps(X, Y, O) __builtin_ia32_cmpps(X, Y, 1)
32#define __builtin_ia32_cmppd256(X, Y, O) __builtin_ia32_cmppd256(X, Y, 1)
33#define __builtin_ia32_cmpps256(X, Y, O) __builtin_ia32_cmpps256(X, Y, 1)
34#define __builtin_ia32_vextractf128_pd256(X, N) __builtin_ia32_vextractf128_pd256(X, 1)
35#define __builtin_ia32_vextractf128_ps256(X, N) __builtin_ia32_vextractf128_ps256(X, 1)
36#define __builtin_ia32_vextractf128_si256(X, N) __builtin_ia32_vextractf128_si256(X, 1)
37#define __builtin_ia32_vpermilpd(X, N) __builtin_ia32_vpermilpd(X, 1)
38#define __builtin_ia32_vpermilpd256(X, N) __builtin_ia32_vpermilpd256(X, 1)
39#define __builtin_ia32_vpermilps(X, N) __builtin_ia32_vpermilps(X, 1)
40#define __builtin_ia32_vpermilps256(X, N) __builtin_ia32_vpermilps256(X, 1)
41#define __builtin_ia32_vpermil2pd(X, Y, C, I) __builtin_ia32_vpermil2pd(X, Y, C, 1)
42#define __builtin_ia32_vpermil2pd256(X, Y, C, I) __builtin_ia32_vpermil2pd256(X, Y, C, 1)
43#define __builtin_ia32_vpermil2ps(X, Y, C, I) __builtin_ia32_vpermil2ps(X, Y, C, 1)
44#define __builtin_ia32_vpermil2ps256(X, Y, C, I) __builtin_ia32_vpermil2ps256(X, Y, C, 1)
45#define __builtin_ia32_vperm2f128_pd256(X, Y, C) __builtin_ia32_vperm2f128_pd256(X, Y, 1)
46#define __builtin_ia32_vperm2f128_ps256(X, Y, C) __builtin_ia32_vperm2f128_ps256(X, Y, 1)
47#define __builtin_ia32_vperm2f128_si256(X, Y, C) __builtin_ia32_vperm2f128_si256(X, Y, 1)
48#define __builtin_ia32_vinsertf128_pd256(X, Y, C) __builtin_ia32_vinsertf128_pd256(X, Y, 1)
49#define __builtin_ia32_vinsertf128_ps256(X, Y, C) __builtin_ia32_vinsertf128_ps256(X, Y, 1)
50#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
51#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
52#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
53
54/* wmmintrin.h */
55#define __builtin_ia32_aeskeygenassist128(X, C) __builtin_ia32_aeskeygenassist128(X, 1)
56#define __builtin_ia32_pclmulqdq128(X, Y, I) __builtin_ia32_pclmulqdq128(X, Y, 1)
57
58/* smmintrin.h */
59#define __builtin_ia32_roundpd(V, M) __builtin_ia32_roundpd(V, 1)
60#define __builtin_ia32_roundsd(D, V, M) __builtin_ia32_roundsd(D, V, 1)
61#define __builtin_ia32_roundps(V, M) __builtin_ia32_roundps(V, 1)
62#define __builtin_ia32_roundss(D, V, M) __builtin_ia32_roundss(D, V, 1)
63
64#define __builtin_ia32_pblendw128(X, Y, M) __builtin_ia32_pblendw128 (X, Y, 1)
65#define __builtin_ia32_blendps(X, Y, M) __builtin_ia32_blendps(X, Y, 1)
66#define __builtin_ia32_blendpd(X, Y, M) __builtin_ia32_blendpd(X, Y, 1)
67#define __builtin_ia32_dpps(X, Y, M) __builtin_ia32_dpps(X, Y, 1)
68#define __builtin_ia32_dppd(X, Y, M) __builtin_ia32_dppd(X, Y, 1)
69#define __builtin_ia32_insertps128(D, S, N) __builtin_ia32_insertps128(D, S, 1)
70#define __builtin_ia32_vec_ext_v4sf(X, N) __builtin_ia32_vec_ext_v4sf(X, 1)
71#define __builtin_ia32_vec_set_v16qi(D, S, N) __builtin_ia32_vec_set_v16qi(D, S, 1)
72#define __builtin_ia32_vec_set_v4si(D, S, N) __builtin_ia32_vec_set_v4si(D, S, 1)
73#define __builtin_ia32_vec_set_v2di(D, S, N) __builtin_ia32_vec_set_v2di(D, S, 1)
74#define __builtin_ia32_vec_ext_v16qi(X, N) __builtin_ia32_vec_ext_v16qi(X, 1)
75#define __builtin_ia32_vec_ext_v4si(X, N) __builtin_ia32_vec_ext_v4si(X, 1)
76#define __builtin_ia32_vec_ext_v2di(X, N) __builtin_ia32_vec_ext_v2di(X, 1)
77#define __builtin_ia32_mpsadbw128(X, Y, M) __builtin_ia32_mpsadbw128(X, Y, 1)
78#define __builtin_ia32_pcmpistrm128(X, Y, M) \
79  __builtin_ia32_pcmpistrm128(X, Y, 1)
80#define __builtin_ia32_pcmpistri128(X, Y, M) \
81  __builtin_ia32_pcmpistri128(X, Y, 1)
82#define __builtin_ia32_pcmpestrm128(X, LX, Y, LY, M) \
83  __builtin_ia32_pcmpestrm128(X, LX, Y, LY, 1)
84#define __builtin_ia32_pcmpestri128(X, LX, Y, LY, M) \
85  __builtin_ia32_pcmpestri128(X, LX, Y, LY, 1)
86#define __builtin_ia32_pcmpistria128(X, Y, M) \
87  __builtin_ia32_pcmpistria128(X, Y, 1)
88#define __builtin_ia32_pcmpistric128(X, Y, M) \
89  __builtin_ia32_pcmpistric128(X, Y, 1)
90#define __builtin_ia32_pcmpistrio128(X, Y, M) \
91  __builtin_ia32_pcmpistrio128(X, Y, 1)
92#define __builtin_ia32_pcmpistris128(X, Y, M) \
93  __builtin_ia32_pcmpistris128(X, Y, 1)
94#define __builtin_ia32_pcmpistriz128(X, Y, M) \
95  __builtin_ia32_pcmpistriz128(X, Y, 1)
96#define __builtin_ia32_pcmpestria128(X, LX, Y, LY, M) \
97  __builtin_ia32_pcmpestria128(X, LX, Y, LY, 1)
98#define __builtin_ia32_pcmpestric128(X, LX, Y, LY, M) \
99  __builtin_ia32_pcmpestric128(X, LX, Y, LY, 1)
100#define __builtin_ia32_pcmpestrio128(X, LX, Y, LY, M) \
101  __builtin_ia32_pcmpestrio128(X, LX, Y, LY, 1)
102#define __builtin_ia32_pcmpestris128(X, LX, Y, LY, M) \
103  __builtin_ia32_pcmpestris128(X, LX, Y, LY, 1)
104#define __builtin_ia32_pcmpestriz128(X, LX, Y, LY, M) \
105  __builtin_ia32_pcmpestriz128(X, LX, Y, LY, 1)
106
107/* tmmintrin.h */
108#define __builtin_ia32_palignr128(X, Y, N) __builtin_ia32_palignr128(X, Y, 8)
109#define __builtin_ia32_palignr(X, Y, N) __builtin_ia32_palignr(X, Y, 8)
110
111/* emmintrin.h */
112#define __builtin_ia32_psrldqi128(A, B) __builtin_ia32_psrldqi128(A, 8)
113#define __builtin_ia32_pslldqi128(A, B) __builtin_ia32_pslldqi128(A, 8)
114#define __builtin_ia32_pshufhw(A, N) __builtin_ia32_pshufhw(A, 0)
115#define __builtin_ia32_pshuflw(A, N) __builtin_ia32_pshuflw(A, 0)
116#define __builtin_ia32_pshufd(A, N) __builtin_ia32_pshufd(A, 0)
117#define __builtin_ia32_vec_set_v8hi(A, D, N) \
118  __builtin_ia32_vec_set_v8hi(A, D, 0)
119#define __builtin_ia32_vec_ext_v8hi(A, N) __builtin_ia32_vec_ext_v8hi(A, 0)
120#define __builtin_ia32_shufpd(A, B, N) __builtin_ia32_shufpd(A, B, 0)
121
122/* xmmintrin.h */
123#define __builtin_prefetch(P, A, I) __builtin_prefetch(P, A, _MM_HINT_NTA)
124#define __builtin_ia32_pshufw(A, N) __builtin_ia32_pshufw(A, 0)
125#define __builtin_ia32_vec_set_v4hi(A, D, N) \
126  __builtin_ia32_vec_set_v4hi(A, D, 0)
127#define __builtin_ia32_vec_ext_v4hi(A, N) __builtin_ia32_vec_ext_v4hi(A, 0)
128#define __builtin_ia32_shufps(A, B, N) __builtin_ia32_shufps(A, B, 0)
129
130/* xopintrin.h */
131#define __builtin_ia32_vprotbi(A, N) __builtin_ia32_vprotbi (A,1)
132#define __builtin_ia32_vprotwi(A, N) __builtin_ia32_vprotwi (A,1)
133#define __builtin_ia32_vprotdi(A, N) __builtin_ia32_vprotdi (A,1)
134#define __builtin_ia32_vprotqi(A, N) __builtin_ia32_vprotqi (A,1)
135
136/* lwpintrin.h */
137#define __builtin_ia32_lwpval32(D2, D1, F) __builtin_ia32_lwpval32 (D2, D1, 1)
138#define __builtin_ia32_lwpval64(D2, D1, F) __builtin_ia32_lwpval64 (D2, D1, 1)
139#define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1)
140#define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1)
141
142#include <x86intrin.h>
143