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