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