17332Sjkh/* { dg-do compile } */
27332Sjkh/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8" } */
37332Sjkh
47332Sjkh#include <mm_malloc.h>
57332Sjkh
67332Sjkh/* Test that the intrinsics compile with optimization.  All of them
77332Sjkh   are defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h,
87332Sjkh   xopintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h that
97332Sjkh   reference the proper builtin functions.  Defining away "extern" and
107332Sjkh   "__inline" results in all of them being compiled as proper
117332Sjkh   functions.  */
127332Sjkh
137332Sjkh#define extern
147332Sjkh#define __inline
1513765Smpp
167332Sjkh/* Following intrinsics require immediate arguments. */
177332Sjkh
187332Sjkh/* ammintrin.h */
197332Sjkh#define __builtin_ia32_extrqi(X, I, L)  __builtin_ia32_extrqi(X, 1, 1)
207332Sjkh#define __builtin_ia32_insertqi(X, Y, I, L) __builtin_ia32_insertqi(X, Y, 1, 1)
217332Sjkh
227332Sjkh/* wmmintrin.h */
237332Sjkh#define __builtin_ia32_aeskeygenassist128(X, C) __builtin_ia32_aeskeygenassist128(X, 1)
247332Sjkh#define __builtin_ia32_pclmulqdq128(X, Y, I) __builtin_ia32_pclmulqdq128(X, Y, 1)
257332Sjkh
267332Sjkh/* smmintrin.h */
277332Sjkh#define __builtin_ia32_roundpd(V, M) __builtin_ia32_roundpd(V, 1)
2850477Speter#define __builtin_ia32_roundsd(D, V, M) __builtin_ia32_roundsd(D, V, 1)
297332Sjkh#define __builtin_ia32_roundps(V, M) __builtin_ia32_roundps(V, 1)
307332Sjkh#define __builtin_ia32_roundss(D, V, M) __builtin_ia32_roundss(D, V, 1)
317332Sjkh
327332Sjkh#define __builtin_ia32_pblendw128(X, Y, M) __builtin_ia32_pblendw128 (X, Y, 1)
337332Sjkh#define __builtin_ia32_blendps(X, Y, M) __builtin_ia32_blendps(X, Y, 1)
347332Sjkh#define __builtin_ia32_blendpd(X, Y, M) __builtin_ia32_blendpd(X, Y, 1)
357332Sjkh#define __builtin_ia32_dpps(X, Y, M) __builtin_ia32_dpps(X, Y, 1)
367332Sjkh#define __builtin_ia32_dppd(X, Y, M) __builtin_ia32_dppd(X, Y, 1)
377332Sjkh#define __builtin_ia32_insertps128(D, S, N) __builtin_ia32_insertps128(D, S, 1)
387332Sjkh#define __builtin_ia32_vec_ext_v4sf(X, N) __builtin_ia32_vec_ext_v4sf(X, 1)
397332Sjkh#define __builtin_ia32_vec_set_v16qi(D, S, N) __builtin_ia32_vec_set_v16qi(D, S, 1)
407332Sjkh#define __builtin_ia32_vec_set_v4si(D, S, N) __builtin_ia32_vec_set_v4si(D, S, 1)
417332Sjkh#define __builtin_ia32_vec_set_v2di(D, S, N) __builtin_ia32_vec_set_v2di(D, S, 1)
427332Sjkh#define __builtin_ia32_vec_ext_v16qi(X, N) __builtin_ia32_vec_ext_v16qi(X, 1)
437332Sjkh#define __builtin_ia32_vec_ext_v4si(X, N) __builtin_ia32_vec_ext_v4si(X, 1)
447332Sjkh#define __builtin_ia32_vec_ext_v2di(X, N) __builtin_ia32_vec_ext_v2di(X, 1)
457332Sjkh#define __builtin_ia32_mpsadbw128(X, Y, M) __builtin_ia32_mpsadbw128(X, Y, 1)
467332Sjkh#define __builtin_ia32_pcmpistrm128(X, Y, M) \
477332Sjkh  __builtin_ia32_pcmpistrm128(X, Y, 1)
487332Sjkh#define __builtin_ia32_pcmpistri128(X, Y, M) \
497332Sjkh  __builtin_ia32_pcmpistri128(X, Y, 1)
507332Sjkh#define __builtin_ia32_pcmpestrm128(X, LX, Y, LY, M) \
517332Sjkh  __builtin_ia32_pcmpestrm128(X, LX, Y, LY, 1)
527332Sjkh#define __builtin_ia32_pcmpestri128(X, LX, Y, LY, M) \
537332Sjkh  __builtin_ia32_pcmpestri128(X, LX, Y, LY, 1)
547332Sjkh#define __builtin_ia32_pcmpistria128(X, Y, M) \
557332Sjkh  __builtin_ia32_pcmpistria128(X, Y, 1)
567332Sjkh#define __builtin_ia32_pcmpistric128(X, Y, M) \
577332Sjkh  __builtin_ia32_pcmpistric128(X, Y, 1)
587332Sjkh#define __builtin_ia32_pcmpistrio128(X, Y, M) \
597332Sjkh  __builtin_ia32_pcmpistrio128(X, Y, 1)
607332Sjkh#define __builtin_ia32_pcmpistris128(X, Y, M) \
617332Sjkh  __builtin_ia32_pcmpistris128(X, Y, 1)
627332Sjkh#define __builtin_ia32_pcmpistriz128(X, Y, M) \
637332Sjkh  __builtin_ia32_pcmpistriz128(X, Y, 1)
647332Sjkh#define __builtin_ia32_pcmpestria128(X, LX, Y, LY, M) \
657332Sjkh  __builtin_ia32_pcmpestria128(X, LX, Y, LY, 1)
667332Sjkh#define __builtin_ia32_pcmpestric128(X, LX, Y, LY, M) \
677332Sjkh  __builtin_ia32_pcmpestric128(X, LX, Y, LY, 1)
687332Sjkh#define __builtin_ia32_pcmpestrio128(X, LX, Y, LY, M) \
697332Sjkh  __builtin_ia32_pcmpestrio128(X, LX, Y, LY, 1)
707332Sjkh#define __builtin_ia32_pcmpestris128(X, LX, Y, LY, M) \
717332Sjkh  __builtin_ia32_pcmpestris128(X, LX, Y, LY, 1)
727332Sjkh#define __builtin_ia32_pcmpestriz128(X, LX, Y, LY, M) \
737332Sjkh  __builtin_ia32_pcmpestriz128(X, LX, Y, LY, 1)
747332Sjkh
757332Sjkh/* tmmintrin.h */
767332Sjkh#define __builtin_ia32_palignr128(X, Y, N) __builtin_ia32_palignr128(X, Y, 8)
777332Sjkh#define __builtin_ia32_palignr(X, Y, N) __builtin_ia32_palignr(X, Y, 8)
787332Sjkh
797332Sjkh/* emmintrin.h */
807332Sjkh#define __builtin_ia32_psrldqi128(A, B) __builtin_ia32_psrldqi128(A, 8)
817332Sjkh#define __builtin_ia32_pslldqi128(A, B) __builtin_ia32_pslldqi128(A, 8)
827332Sjkh#define __builtin_ia32_pshufhw(A, N) __builtin_ia32_pshufhw(A, 0)
837332Sjkh#define __builtin_ia32_pshuflw(A, N) __builtin_ia32_pshuflw(A, 0)
847332Sjkh#define __builtin_ia32_pshufd(A, N) __builtin_ia32_pshufd(A, 0)
857332Sjkh#define __builtin_ia32_vec_set_v8hi(A, D, N) \
867332Sjkh  __builtin_ia32_vec_set_v8hi(A, D, 0)
877332Sjkh#define __builtin_ia32_vec_ext_v8hi(A, N) __builtin_ia32_vec_ext_v8hi(A, 0)
887332Sjkh#define __builtin_ia32_shufpd(A, B, N) __builtin_ia32_shufpd(A, B, 0)
897332Sjkh
907332Sjkh/* xmmintrin.h */
91143063Sjoerg#define __builtin_prefetch(P, A, I) __builtin_prefetch(P, A, _MM_HINT_NTA)
927332Sjkh#define __builtin_ia32_pshufw(A, N) __builtin_ia32_pshufw(A, 0)
937332Sjkh#define __builtin_ia32_vec_set_v4hi(A, D, N) \
947332Sjkh  __builtin_ia32_vec_set_v4hi(A, D, 0)
957332Sjkh#define __builtin_ia32_vec_ext_v4hi(A, N) __builtin_ia32_vec_ext_v4hi(A, 0)
967332Sjkh#define __builtin_ia32_shufps(A, B, N) __builtin_ia32_shufps(A, B, 0)
977332Sjkh
987332Sjkh/* immintrin.h */
997332Sjkh#define __builtin_ia32_blendpd256(X, Y, M) __builtin_ia32_blendpd256(X, Y, 1)
1007332Sjkh#define __builtin_ia32_blendps256(X, Y, M) __builtin_ia32_blendps256(X, Y, 1)
1017332Sjkh#define __builtin_ia32_dpps256(X, Y, M) __builtin_ia32_dpps256(X, Y, 1)
102143063Sjoerg#define __builtin_ia32_shufpd256(X, Y, M) __builtin_ia32_shufpd256(X, Y, 1)
1037332Sjkh#define __builtin_ia32_shufps256(X, Y, M) __builtin_ia32_shufps256(X, Y, 1)
1047332Sjkh#define __builtin_ia32_cmpsd(X, Y, O) __builtin_ia32_cmpsd(X, Y, 1)
1057332Sjkh#define __builtin_ia32_cmpss(X, Y, O) __builtin_ia32_cmpss(X, Y, 1)
1067332Sjkh#define __builtin_ia32_cmppd(X, Y, O) __builtin_ia32_cmppd(X, Y, 1)
1077332Sjkh#define __builtin_ia32_cmpps(X, Y, O) __builtin_ia32_cmpps(X, Y, 1)
1087332Sjkh#define __builtin_ia32_cmppd256(X, Y, O) __builtin_ia32_cmppd256(X, Y, 1)
109143063Sjoerg#define __builtin_ia32_cmpps256(X, Y, O) __builtin_ia32_cmpps256(X, Y, 1)
1107332Sjkh#define __builtin_ia32_vextractf128_pd256(X, N) __builtin_ia32_vextractf128_pd256(X, 1)
1117332Sjkh#define __builtin_ia32_vextractf128_ps256(X, N) __builtin_ia32_vextractf128_ps256(X, 1)
1127332Sjkh#define __builtin_ia32_vextractf128_si256(X, N) __builtin_ia32_vextractf128_si256(X, 1)
1137332Sjkh#define __builtin_ia32_vpermilpd(X, N) __builtin_ia32_vpermilpd(X, 1)
1147332Sjkh#define __builtin_ia32_vpermilpd256(X, N) __builtin_ia32_vpermilpd256(X, 1)
1157332Sjkh#define __builtin_ia32_vpermilps(X, N) __builtin_ia32_vpermilps(X, 1)
1167332Sjkh#define __builtin_ia32_vpermilps256(X, N) __builtin_ia32_vpermilps256(X, 1)
1177332Sjkh#define __builtin_ia32_vpermil2pd(X, Y, C, I) __builtin_ia32_vpermil2pd(X, Y, C, 1)
1187332Sjkh#define __builtin_ia32_vpermil2pd256(X, Y, C, I) __builtin_ia32_vpermil2pd256(X, Y, C, 1)
1197332Sjkh#define __builtin_ia32_vpermil2ps(X, Y, C, I) __builtin_ia32_vpermil2ps(X, Y, C, 1)
1207332Sjkh#define __builtin_ia32_vpermil2ps256(X, Y, C, I) __builtin_ia32_vpermil2ps256(X, Y, C, 1)
1217332Sjkh#define __builtin_ia32_vperm2f128_pd256(X, Y, C) __builtin_ia32_vperm2f128_pd256(X, Y, 1)
1227332Sjkh#define __builtin_ia32_vperm2f128_ps256(X, Y, C) __builtin_ia32_vperm2f128_ps256(X, Y, 1)
1237332Sjkh#define __builtin_ia32_vperm2f128_si256(X, Y, C) __builtin_ia32_vperm2f128_si256(X, Y, 1)
1247332Sjkh#define __builtin_ia32_vinsertf128_pd256(X, Y, C) __builtin_ia32_vinsertf128_pd256(X, Y, 1)
1257332Sjkh#define __builtin_ia32_vinsertf128_ps256(X, Y, C) __builtin_ia32_vinsertf128_ps256(X, Y, 1)
1267332Sjkh#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
1277332Sjkh#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
1287332Sjkh#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
1297332Sjkh
1307332Sjkh/* xopintrin.h */
1317332Sjkh#define __builtin_ia32_vprotbi(A, B) __builtin_ia32_vprotbi(A,1)
1327332Sjkh#define __builtin_ia32_vprotwi(A, B) __builtin_ia32_vprotwi(A,1)
1337332Sjkh#define __builtin_ia32_vprotdi(A, B) __builtin_ia32_vprotdi(A,1)
1347332Sjkh#define __builtin_ia32_vprotqi(A, B) __builtin_ia32_vprotqi(A,1)
1357332Sjkh
1367332Sjkh/* lwpintrin.h */
137143063Sjoerg#define __builtin_ia32_lwpval32(D2, D1, F) __builtin_ia32_lwpval32 (D2, D1, 1)
1387332Sjkh#define __builtin_ia32_lwpval64(D2, D1, F) __builtin_ia32_lwpval64 (D2, D1, 1)
1397332Sjkh#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#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp")
143#include <wmmintrin.h>
144#include <smmintrin.h>
145#include <mm3dnow.h>
146#include <x86intrin.h>
147