Commit 977e83a3 by Kirill Yukhin Committed by H.J. Lu

Add support for AVX2 builtin functions.

2011-08-22  Kirill Yukhin  <kirill.yukhin@intel.com>

	* config/i386/avx2intrin.h: New file.
	* config/i386/i386-builtin-types.def (PCINT, PCINT64, PV4SI,
	PV8SI, V32QI_FTYPE_V32QI, V32QI_FTYPE_V16QI, V16HI_FTYPE_V16HI,
	V16HI_FTYPE_V8HI, V8SI_FTYPE_V8SI, V16HI_FTYPE_V16QI,
	V8SI_FTYPE_V16QI, V4DI_FTYPE_V16QI, V8SI_FTYPE_V8HI,
	V4DI_FTYPE_V8HI, V4DI_FTYPE_V4SI, V4DI_FTYPE_PV4DI,
	V4DI_FTYPE_V2DI, V2DI_FTYPE_PCV2DI_V2DI, V4SI_FTYPE_PCV4SI_V4SI,
	V32QI_FTYPE_V16HI_V16HI, V16HI_FTYPE_V8SI_V8SI,
	V32QI_FTYPE_V32QI_V32QI, V16HI_FTYPE_V32QI_V32QI,
	V16HI_FTYPE_V16HI_V8HI, V16HI_FTYPE_V16HI_V16HI,
	V16HI_FTYPE_V16HI_INT, V16HI_FTYPE_V16HI_SI,
	V16HI_FTYPE_V16HI_V16HI_INT, V32QI_FTYPE_V32QI_V32QI_INT,
	V8SI_FTYPE_V8SI_V4SI, V8SI_FTYPE_V8SI_V8SI,
	V8SI_FTYPE_V16HI_V16HI, V8SI_FTYPE_V8SI_INT, V8SI_FTYPE_V8SI_SI,
	V8SI_FTYPE_PCV8SI_V8SI, V4DI_FTYPE_V4DI_V4DI,
	V4DI_FTYPE_V8SI_V8SI, V4DI_FTYPE_V4DI_V2DI,
	V4DI_FTYPE_PCV4DI_V4DI, V4DI_FTYPE_V4DI_INT,
	V2DI_FTYPE_V4DI_INT, V4DI_FTYPE_V4DI_V4DI_INT,
	V4DI_FTYPE_V4DI_V2DI_INT, VOID_FTYPE_PV2DI_V2DI_V2DI,
	VOID_FTYPE_PV4DI_V4DI_V4DI, VOID_FTYPE_PV4SI_V4SI_V4SI,
	VOID_FTYPE_PV8SI_V8SI_V8SI,
	V2DF_FTYPE_V2DF_PCDOUBLE_V4SI_V2DF_INT,
	V4DF_FTYPE_V4DF_PCDOUBLE_V4SI_V4DF_INT,
	V2DF_FTYPE_V2DF_PCDOUBLE_V2DI_V2DF_INT,
	V4DF_FTYPE_V4DF_PCDOUBLE_V4DI_V4DF_INT,
	V4SF_FTYPE_V4SF_PCFLOAT_V4SI_V4SF_INT,
	V8SF_FTYPE_V8SF_PCFLOAT_V8SI_V8SF_INT,
	V4SF_FTYPE_V4SF_PCFLOAT_V2DI_V4SF_INT,
	V4SF_FTYPE_V4SF_PCFLOAT_V4DI_V4SF_INT,
	V2DI_FTYPE_V2DI_PCINT64_V4SI_V2DI_INT,
	V4DI_FTYPE_V4DI_PCINT64_V4SI_V4DI_INT,
	V2DI_FTYPE_V2DI_PCINT64_V2DI_V2DI_INT,
	V4DI_FTYPE_V4DI_PCINT64_V4DI_V4DI_INT,
	V4SI_FTYPE_V4SI_PCINT_V4SI_V4SI_INT,
	V8SI_FTYPE_V8SI_PCINT_V8SI_V8SI_INT,
	V4SI_FTYPE_V4SI_PCINT_V2DI_V4SI_INT,
	V4SI_FTYPE_V4SI_PCINT_V4DI_V4SI_INT,
	V16HI_FTYPE_V16HI_SI_COUNT, V16HI_FTYPE_V16HI_V8HI_COUNT,
	V8SI_FTYPE_V8SI_SI_COUNT, V8SI_FTYPE_V8SI_V4SI_COUNT,
	V4DI_FTYPE_V4DI_INT_COUNT, V4DI_FTYPE_V4DI_V2DI_COUNT,
	V4DI_FTYPE_V4DI_INT_CONVERT,
	V4DI_FTYPE_V4DI_V4DI_INT_CONVERT): New.
	* config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_MPSADBW256,
	IX86_BUILTIN_PABSB256, IX86_BUILTIN_PABSW256,
	IX86_BUILTIN_PABSD256, IX86_BUILTIN_PACKSSDW256,
	IX86_BUILTIN_PACKSSWB256, IX86_BUILTIN_PACKUSDW256,
	IX86_BUILTIN_PACKUSWB256, IX86_BUILTIN_PADDB256,
	IX86_BUILTIN_PADDW256, IX86_BUILTIN_PADDD256,
	IX86_BUILTIN_PADDQ256, IX86_BUILTIN_PADDSB256,
	IX86_BUILTIN_PADDSW256, IX86_BUILTIN_PADDUSB256,
	IX86_BUILTIN_PADDUSW256, IX86_BUILTIN_PALIGNR256,
	IX86_BUILTIN_AND256I, IX86_BUILTIN_ANDNOT256I,
	IX86_BUILTIN_PAVGB256, IX86_BUILTIN_PAVGW256,
	IX86_BUILTIN_PBLENDVB256, IX86_BUILTIN_PBLENDVW256,
	IX86_BUILTIN_PCMPEQB256, IX86_BUILTIN_PCMPEQW256,
	IX86_BUILTIN_PCMPEQD256, IX86_BUILTIN_PCMPEQQ256,
	IX86_BUILTIN_PCMPGTB256, IX86_BUILTIN_PCMPGTW256,
	IX86_BUILTIN_PCMPGTD256, IX86_BUILTIN_PCMPGTQ256,
	IX86_BUILTIN_PHADDW256, IX86_BUILTIN_PHADDD256,
	IX86_BUILTIN_PHADDSW256, IX86_BUILTIN_PHSUBW256,
	IX86_BUILTIN_PHSUBD256, IX86_BUILTIN_PHSUBSW256,
	IX86_BUILTIN_PMADDUBSW256, IX86_BUILTIN_PMADDWD256,
	IX86_BUILTIN_PMAXSB256, IX86_BUILTIN_PMAXSW256,
	IX86_BUILTIN_PMAXSD256, IX86_BUILTIN_PMAXUB256,
	IX86_BUILTIN_PMAXUW256, IX86_BUILTIN_PMAXUD256,
	IX86_BUILTIN_PMINSB256, IX86_BUILTIN_PMINSW256,
	IX86_BUILTIN_PMINSD256, IX86_BUILTIN_PMINUB256,
	IX86_BUILTIN_PMINUW256, IX86_BUILTIN_PMINUD256,
	IX86_BUILTIN_PMOVMSKB256, IX86_BUILTIN_PMOVSXBW256,
	IX86_BUILTIN_PMOVSXBD256, IX86_BUILTIN_PMOVSXBQ256,
	IX86_BUILTIN_PMOVSXWD256, IX86_BUILTIN_PMOVSXWQ256,
	IX86_BUILTIN_PMOVSXDQ256, IX86_BUILTIN_PMOVZXBW256,
	IX86_BUILTIN_PMOVZXBD256, IX86_BUILTIN_PMOVZXBQ256,
	IX86_BUILTIN_PMOVZXWD256, IX86_BUILTIN_PMOVZXWQ256,
	IX86_BUILTIN_PMOVZXDQ256, IX86_BUILTIN_PMULDQ256,
	IX86_BUILTIN_PMULHRSW256, IX86_BUILTIN_PMULHUW256,
	IX86_BUILTIN_PMULHW256, IX86_BUILTIN_PMULLW256,
	IX86_BUILTIN_PMULLD256, IX86_BUILTIN_PMULUDQ256,
	IX86_BUILTIN_POR256, IX86_BUILTIN_PSADBW256,
	IX86_BUILTIN_PSHUFB256, IX86_BUILTIN_PSHUFD256,
	IX86_BUILTIN_PSHUFHW256, IX86_BUILTIN_PSHUFLW256,
	IX86_BUILTIN_PSIGNB256, IX86_BUILTIN_PSIGNW256,
	IX86_BUILTIN_PSIGND256, IX86_BUILTIN_PSLLDQI256,
	IX86_BUILTIN_PSLLWI256, IX86_BUILTIN_PSLLW256,
	IX86_BUILTIN_PSLLDI256, IX86_BUILTIN_PSLLD256,
	IX86_BUILTIN_PSLLQI256, IX86_BUILTIN_PSLLQ256,
	IX86_BUILTIN_PSRAWI256, IX86_BUILTIN_PSRAW256,
	IX86_BUILTIN_PSRADI256, IX86_BUILTIN_PSRAD256,
	IX86_BUILTIN_PSRLDQI256, IX86_BUILTIN_PSRLWI256,
	IX86_BUILTIN_PSRLW256, IX86_BUILTIN_PSRLDI256,
	IX86_BUILTIN_PSRLD256, IX86_BUILTIN_PSRLQI256,
	IX86_BUILTIN_PSRLQ256, IX86_BUILTIN_PSUBB256,
	IX86_BUILTIN_PSUBW256, IX86_BUILTIN_PSUBD256,
	IX86_BUILTIN_PSUBQ256, IX86_BUILTIN_PSUBSB256,
	IX86_BUILTIN_PSUBSW256, IX86_BUILTIN_PSUBUSB256,
	IX86_BUILTIN_PSUBUSW256, IX86_BUILTIN_PUNPCKHBW256,
	IX86_BUILTIN_PUNPCKHWD256, IX86_BUILTIN_PUNPCKHDQ256,
	IX86_BUILTIN_PUNPCKHQDQ256, IX86_BUILTIN_PUNPCKLBW256,
	IX86_BUILTIN_PUNPCKLWD256, IX86_BUILTIN_PUNPCKLDQ256,
	IX86_BUILTIN_PUNPCKLQDQ256, IX86_BUILTIN_PXOR256,
	IX86_BUILTIN_MOVNTDQA256, IX86_BUILTIN_VBROADCASTSS_PS,
	IX86_BUILTIN_VBROADCASTSS_PS256,
	IX86_BUILTIN_VBROADCASTSD_PD256,
	IX86_BUILTIN_VBROADCASTSI256, IX86_BUILTIN_PBLENDD256,
	IX86_BUILTIN_PBLENDD128, IX86_BUILTIN_PBROADCASTB256,
	IX86_BUILTIN_PBROADCASTW256, IX86_BUILTIN_PBROADCASTD256,
	IX86_BUILTIN_PBROADCASTQ256, IX86_BUILTIN_PBROADCASTB128,
	IX86_BUILTIN_PBROADCASTW128, IX86_BUILTIN_PBROADCASTD128,
	IX86_BUILTIN_PBROADCASTQ128, IX86_BUILTIN_VPERMVARSI256,
	IX86_BUILTIN_VPERMDF256, IX86_BUILTIN_VPERMVARSF256,
	IX86_BUILTIN_VPERMDI256, IX86_BUILTIN_VPERMTI256,
	IX86_BUILTIN_VEXTRACT128I256, IX86_BUILTIN_VINSERT128I256,
	IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
	IX86_BUILTIN_MASKLOADD256, IX86_BUILTIN_MASKLOADQ256,
	IX86_BUILTIN_MASKSTORED, IX86_BUILTIN_MASKSTOREQ,
	IX86_BUILTIN_MASKSTORED256, IX86_BUILTIN_MASKSTOREQ256,
	IX86_BUILTIN_PSLLVV4DI, IX86_BUILTIN_PSLLVV2DI,
	IX86_BUILTIN_PSLLVV8SI, IX86_BUILTIN_PSLLVV4SI,
	IX86_BUILTIN_PSRAVV8SI, IX86_BUILTIN_PSRAVV4SI,
	IX86_BUILTIN_PSRLVV4DI, IX86_BUILTIN_PSRLVV2DI,
	IX86_BUILTIN_PSRLVV8SI, IX86_BUILTIN_PSRLVV4SI,
	IX86_BUILTIN_GATHERSIV2DF, IX86_BUILTIN_GATHERSIV4DF,
	IX86_BUILTIN_GATHERDIV2DF, IX86_BUILTIN_GATHERDIV4DF,
	IX86_BUILTIN_GATHERSIV4SF, IX86_BUILTIN_GATHERSIV8SF,
	IX86_BUILTIN_GATHERDIV4SF, IX86_BUILTIN_GATHERDIV8SF,
	IX86_BUILTIN_GATHERSIV2DI, IX86_BUILTIN_GATHERSIV4DI,
	IX86_BUILTIN_GATHERDIV2DI, IX86_BUILTIN_GATHERDIV4DI,
	IX86_BUILTIN_GATHERSIV4SI, IX86_BUILTIN_GATHERSIV8SI,
	IX86_BUILTIN_GATHERDIV4SI, IX86_BUILTIN_GATHERDIV8SI.
	(bdesc_special_args): Add IX86_BUILTIN_MOVNTDQA256,
	IX86_BUILTIN_MASKLOADD, IX86_BUILTIN_MASKLOADQ,
	IX86_BUILTIN_MASKLOADD256, IX86_BUILTIN_MASKLOADQ256,
	IX86_BUILTIN_MASKSTORED, IX86_BUILTIN_MASKSTOREQ,
	IX86_BUILTIN_MASKSTORED256, IX86_BUILTIN_MASKSTOREQ256.
	(bdesc_args): Add  IX86_BUILTIN_MPSADBW256,
	IX86_BUILTIN_PABSB256, IX86_BUILTIN_PABSW256,
	IX86_BUILTIN_PABSD256, IX86_BUILTIN_PACKSSDW256,
	IX86_BUILTIN_PACKSSWB256, IX86_BUILTIN_PACKUSDW256,
	IX86_BUILTIN_PACKUSWB256, IX86_BUILTIN_PADDB256,
	IX86_BUILTIN_PADDW256, IX86_BUILTIN_PADDD256,
	IX86_BUILTIN_PADDQ256, IX86_BUILTIN_PADDSB256,
	IX86_BUILTIN_PADDSW256, IX86_BUILTIN_PADDUSB256,
	IX86_BUILTIN_PADDUSW256, IX86_BUILTIN_PALIGNR256,
	IX86_BUILTIN_AND256I, IX86_BUILTIN_ANDNOT256I,
	IX86_BUILTIN_PAVGB256, IX86_BUILTIN_PAVGW256,
	IX86_BUILTIN_PBLENDVB256, IX86_BUILTIN_PBLENDVW256,
	IX86_BUILTIN_PCMPEQB256, IX86_BUILTIN_PCMPEQW256,
	IX86_BUILTIN_PCMPEQD256, IX86_BUILTIN_PCMPEQQ256,
	IX86_BUILTIN_PCMPGTB256, IX86_BUILTIN_PCMPGTW256,
	IX86_BUILTIN_PCMPGTD256, IX86_BUILTIN_PCMPGTQ256,
	IX86_BUILTIN_PHADDW256, IX86_BUILTIN_PHADDD256,
	IX86_BUILTIN_PHADDSW256, IX86_BUILTIN_PHSUBW256,
	IX86_BUILTIN_PHSUBD256, IX86_BUILTIN_PHSUBSW256,
	IX86_BUILTIN_PMADDUBSW256, IX86_BUILTIN_PMADDWD256,
	IX86_BUILTIN_PMAXSB256, IX86_BUILTIN_PMAXSW256,
	IX86_BUILTIN_PMAXSD256, IX86_BUILTIN_PMAXUB256,
	IX86_BUILTIN_PMAXUW256, IX86_BUILTIN_PMAXUD256,
	IX86_BUILTIN_PMINSB256, IX86_BUILTIN_PMINSW256,
	IX86_BUILTIN_PMINSD256, IX86_BUILTIN_PMINUB256,
	IX86_BUILTIN_PMINUW256, IX86_BUILTIN_PMINUD256,
	IX86_BUILTIN_PMOVMSKB256, IX86_BUILTIN_PMOVSXBW256,
	IX86_BUILTIN_PMOVSXBD256, IX86_BUILTIN_PMOVSXBQ256,
	IX86_BUILTIN_PMOVSXWD256, IX86_BUILTIN_PMOVSXWQ256,
	IX86_BUILTIN_PMOVSXDQ256, IX86_BUILTIN_PMOVZXBW256,
	IX86_BUILTIN_PMOVZXBD256, IX86_BUILTIN_PMOVZXBQ256,
	IX86_BUILTIN_PMOVZXWD256, IX86_BUILTIN_PMOVZXWQ256,
	IX86_BUILTIN_PMOVZXDQ256, IX86_BUILTIN_PMULDQ256,
	IX86_BUILTIN_PMULHRSW256, IX86_BUILTIN_PMULHUW256,
	IX86_BUILTIN_PMULHW256, IX86_BUILTIN_PMULLW256,
	IX86_BUILTIN_PMULLD256, IX86_BUILTIN_PMULUDQ256,
	IX86_BUILTIN_POR256, IX86_BUILTIN_PSADBW256,
	IX86_BUILTIN_PSHUFB256, IX86_BUILTIN_PSHUFD256,
	IX86_BUILTIN_PSHUFHW256, IX86_BUILTIN_PSHUFLW256,
	IX86_BUILTIN_PSIGNB256, IX86_BUILTIN_PSIGNW256,
	IX86_BUILTIN_PSIGND256, IX86_BUILTIN_PSLLDQI256,
	IX86_BUILTIN_PSLLWI256, IX86_BUILTIN_PSLLW256,
	IX86_BUILTIN_PSLLDI256, IX86_BUILTIN_PSLLD256,
	IX86_BUILTIN_PSLLQI256, IX86_BUILTIN_PSLLQ256,
	IX86_BUILTIN_PSRAWI256, IX86_BUILTIN_PSRAW256,
	IX86_BUILTIN_PSRADI256, IX86_BUILTIN_PSRAD256,
	IX86_BUILTIN_PSRLDQI256, IX86_BUILTIN_PSRLWI256,
	IX86_BUILTIN_PSRLW256, IX86_BUILTIN_PSRLDI256,
	IX86_BUILTIN_PSRLD256, IX86_BUILTIN_PSRLQI256,
	IX86_BUILTIN_PSRLQ256, IX86_BUILTIN_PSUBB256,
	IX86_BUILTIN_PSUBW256, IX86_BUILTIN_PSUBD256,
	IX86_BUILTIN_PSUBQ256, IX86_BUILTIN_PSUBSB256,
	IX86_BUILTIN_PSUBSW256, IX86_BUILTIN_PSUBUSB256,
	IX86_BUILTIN_PSUBUSW256, IX86_BUILTIN_PUNPCKHBW256,
	IX86_BUILTIN_PUNPCKHWD256, IX86_BUILTIN_PUNPCKHDQ256,
	IX86_BUILTIN_PUNPCKHQDQ256, IX86_BUILTIN_PUNPCKLBW256,
	IX86_BUILTIN_PUNPCKLWD256, IX86_BUILTIN_PUNPCKLDQ256,
	IX86_BUILTIN_PUNPCKLQDQ256, IX86_BUILTIN_PXOR256,
	IX86_BUILTIN_VBROADCASTSS_PS, IX86_BUILTIN_VBROADCASTSS_PS256,
	IX86_BUILTIN_VBROADCASTSD_PD256,
	IX86_BUILTIN_VBROADCASTSI256, IX86_BUILTIN_PBLENDD256,
	IX86_BUILTIN_PBLENDD128, IX86_BUILTIN_PBROADCASTB256,
	IX86_BUILTIN_PBROADCASTW256, IX86_BUILTIN_PBROADCASTD256,
	IX86_BUILTIN_PBROADCASTQ256, IX86_BUILTIN_PBROADCASTB128,
	IX86_BUILTIN_PBROADCASTW128, IX86_BUILTIN_PBROADCASTD128,
	IX86_BUILTIN_PBROADCASTQ128, IX86_BUILTIN_VPERMVARSI256,
	IX86_BUILTIN_VPERMDF256, IX86_BUILTIN_VPERMVARSF256,
	IX86_BUILTIN_VPERMDI256, IX86_BUILTIN_VPERMTI256,
	IX86_BUILTIN_VEXTRACT128I256, IX86_BUILTIN_VINSERT128I256,
	IX86_BUILTIN_PSLLVV4DI, IX86_BUILTIN_PSLLVV2DI,
	IX86_BUILTIN_PSLLVV8SI, IX86_BUILTIN_PSLLVV4SI,
	IX86_BUILTIN_PSRAVV8SI, IX86_BUILTIN_PSRAVV4SI,
	IX86_BUILTIN_PSRLVV4DI, IX86_BUILTIN_PSRLVV2DI,
	IX86_BUILTIN_PSRLVV8SI, IX86_BUILTIN_PSRLVV4SI.
	(ix86_init_mmx_sse_builtins): Add IX86_BUILTIN_GATHERSIV2DF,
	IX86_BUILTIN_GATHERSIV4DF, IX86_BUILTIN_GATHERDIV2DF,
	IX86_BUILTIN_GATHERDIV4DF, IX86_BUILTIN_GATHERSIV4SF,
	IX86_BUILTIN_GATHERSIV8SF, IX86_BUILTIN_GATHERDIV4SF,
	IX86_BUILTIN_GATHERDIV8SF, IX86_BUILTIN_GATHERSIV2DI,
	IX86_BUILTIN_GATHERSIV4DI, IX86_BUILTIN_GATHERDIV2DI,
	IX86_BUILTIN_GATHERDIV4DI, IX86_BUILTIN_GATHERSIV4SI,
	IX86_BUILTIN_GATHERSIV8SI, IX86_BUILTIN_GATHERDIV4SI,
	IX86_BUILTIN_GATHERDIV8SI.
	(ix86_preferred_simd_mode): Support AVX2 modes.
	(ix86_expand_args_builtin): Support AVX2 built-ins.
	(ix86_expand_special_args_builtin): Likewise.
	(ix86_expand_builtin): Likewise.
	* config/i386/i386.md (UNSPEC_VPERMSI): New.
	(UNSPEC_VPERMDF): Likewise.
	(UNSPEC_VPERMSF): Likewise.
	(UNSPEC_VPERMDI): Likewise.
	(UNSPEC_VPERMTI): Likewise.
	(UNSPEC_GATHER): Likewise.
	(ssemodesuffix): Extend.
	* config/i386/immintrin.h: Include avx2intrin.h when __AVX2__
	is defined.
	* config/i386/predicates.md (const1248_operand): New.
	* config/i386/sse.md (VI_AVX2):
	(VI1_AVX2): Likewise.
	(VI2_AVX2): Likewise.
	(VI4_AVX2): Likewise.
	(VI8_AVX2): Likewise.
	(VIMAX_AVX2): Likewise.
	(SSESCALARMODE): Likewise.
	(VI12_AVX2): Likewise.
	(VI24_AVX2): Likewise.
	(VI124_AVX2): Likeuse_submit_for_speed = 1
	wise.
	(VI248_AVX2): Likewise.
	(VI48_AVX2): Likewise.
	(VI4SD_AVX2): Likewise.
	(V48_AVX2): Likewise.
	(avx2modesuffix): Likewise.
	(sse_avx2): Likewise.
	(sse2_avx2): Likewise.
	(ssse3_avx2): Likewise.
	(sse4_1_avx2): Likewise.
	(avx_avx2): Likewise.
	(lshift)<code_oterator>: Likewise.
	(lshift_insn): Likewise.
	(lshift)<code_attr>: Likewise.
	(SSESHORTMODE): Likewise.
	(SSELONGMODE): Likewise.
	(SSEBYTEMODE): Likewise.
	(AVXTOSSEMODE): Likewise.
	(shortmode): Likewise.
	(ssescalarmodesuffix): Update.
	(sseunpackmode): Likewise.
	(ssepackmode): Likewise.
	(AVX256MODEI): New.
	(AVX256MODE124): Likewise.
	(AVX256MODE1248): Likewise.
	(AVX256MODE248): Likewise.
	(AVXMODE48P_SI): Likewise.
	(AVXMODE48P_SI): Likewise.
	(AVXMODE48P_DI): Likewise.
	(AVXMODE48P_DI): Likewise.
	(gthrfirstp): Likewise.
	(gthrlastp): Likewise.
	(avx2): Likwise.
	(ssevecsize): Likewise.
	(ssedoublesizemode): Likewise.
	(avxvecmode): Likewise.
	(avxvecsize): Likewise.
	(avxhalfvecmode): Likewise.
	(avxscalarmode): Likewise.
	(avxpermvecmode): Likewise.
	(avxmodesuffixp): Likewise.
	(avxmodesuffix): Likewise.
	(avx2_vec_dupv4sf): New.
	(avx2_vec_dupv8sf): Likewise.
	(avx2_interleave_highv4di): Likewise.
	(avx2_interleave_lowv4di): Likewise.
	(<plusminus_insn><mode>3): Update.
	(*<plusminus_insn><mode>3): Likewise.
	(sse2_<plusminus_insn><mode>3): Rename to ...
	("<sse2_avx2>_<plusminus_insn><mode>3): ... this. updated.
	(*sse2_<plusminus_insn><mode>3): Likewise.
	(*<sse2_avx2>_<plusminus_insn><mode>3): Likewise.
	(mulv8hi3): Likewise.
	(mul<mode>3): Likewise.
	(*mulv8hi3): Likewise.
	(*mul<mode>3): Likewise.
	(<s>mulv8hi3_highpart): Likewise.
	(<s>mul<mode>3_highpart): Likewise.
	(*<s>mulv8hi3_highpart): Likewise.
	(*<s>mul<mode>3_highpart): Likewise.
	(avx2_umulv4siv4di3): Likewise.
	(*avx_umulv4siv4di3): Likewise.
	(sse4_1_mulv2siv2di3): Likewise.
	(<sse4_1_avx2>_mul<shortmode><mode>3): Likewise.
	(*sse4_1_mulv2siv2di3): Likewise.
	(*<sse4_1_avx2>_mulv2siv2di3): Likewise.
	(avx2_pmaddwd): New.
	(*avx2_pmaddwd): Likewise.
	(mulv4si3): Rename to ...
	(mul<mode>3): ... this. Update.
	(*sse4_1_mulv4si3): Likewise.
	(*<sse4_1_avx2>_mul<mode>3): Likewise.
	(ashr<mode>3): Update.
	(avx2_lshrqv4di3): New.
	(lshr<mode>3): Update.
	(avx2_lshlqv4di3): New.
	(avx2_lshl<mode>3): Likewise.
	(sse2_ashlv1ti3): Rename to ...
	(<sse2_avx2>_ashl<mode>3): ... this. Update.
	(avx2_<code><mode>3)<umaxmin>: New.
	(*avx2_<code><mode>3)<umaxmin>: Likewise.
	(avx2_<code><mode>3)<smaxmin>: New.
	(*avx2_<code><mode>3)<smaxmin>: Likewise.
	(avx2_eq<mode>3): Likewise.
	(*avx2_eq<mode>3): Likewise.
	(avx2_gt<mode>3): Likewise.
	(sse2_andnot<mode>3): Rename to ...
	(<sse2_avx2>_andnot<mode>3): ... this. Update.
	(*andnot<mode>3): Update.
	(<code><mode>3)<any_logic>: Update.
	(*<code><mode>3)<any_logic>: Likewise.
	(sse2_packsswb): Rename to ...
	(<sse2_avx2>_packsswb): ... this. Update.
	(sse2_packssdw): Likewise.
	(<sse2_avx2>_packssdw): Likewise.
	(sse2_packuswb): Likewise.
	(<sse2_avx2>_packuswb): Likewise.
	(avx2_interleave_highv32qi): New.
	(avx2_interleave_lowv32qi): Likewise.
	(avx2_interleave_highv16hi): Likewise.
	(avx2_interleave_lowv16hi): Likewise.
	(avx2_interleave_highv8si): Likewise.
	(avx2_interleave_lowv8si): Likewise.
	(avx2_pshufd): New
	(avx2_pshufd_1): Likewise.
	(avx2_pshuflwv3): Likewise.
	(avx2_pshuflw_1): Likewise.
	(avx2_pshufhwv3): Likewise.
	(avx2_pshufhw_1): Likewise.
	(avx2_uavgv32qi3): Likewise.
	(*avx2_uavgv32qi3): Likewise.
	(avx2_uavgv16hi3): Likewise.
	(*avx2_uavgv16hi3): Likewise.
	(sse2_psadbw): Rename to ...
	(<sse2_avx2>_psadbw): ... this. Update.
	(avx2_pmovmskb): New.
	(avx2_phaddwv16hi3): Likewise.
	(avx2_phadddv8si3): Likewise.
	(avx2_phaddswv16hi3): Likewise.
	(avx2_phsubwv16hi3): Likewise.
	(avx2_phsubdv8si3): Likewise.
	(avx2_phsubswv16hi3): Likewise.
	(avx2_pmaddubsw256): Likewise.
	(avx2_umulhrswv16hi3): Likewise.
	(*avx2_umulhrswv16hi3): Likewise.
	(ssse3_pshufbv16qi3): Rename to ...
	(<ssse3_avx2>_pshufb<mode>3): ... this. Update.
	(ssse3_psign<mode>3): Likewise.
	(<ssse3_avx2>_psign<mode>3): Likewise.
	(ssse3_palignrti): Likewise.
	(<ssse3_avx2>_palignr<mode>): Likewise.
	(abs<mode>2): Likewise.
	(sse4_1_movntdqa): Rename to ...
	(<sse4_1_avx2>_movntdqa): ... this. Update.
	(sse4_1_mpsadbw): Likewise.
	(<sse4_1_avx2>_mpsadbw): Likewise.
	(avx2_packusdw): New.
	(sse4_1_pblendvb): Rename to ...
	(<sse4_1_avx2>_pblendvb): ... this. Update.
	(sse4_1_pblendw): Likewise.
	(<sse4_1_avx2>_pblendw): Likewise.
	(avx2_pblendd<mode>): New.
	(avx2_<code>v16qiv16hi2): Likewise.
	(avx2_<code>v8qiv8si2): Likewise.
	(avx2_<code>v8hiv8si2): Likewise.
	(avx2_<code>v4qiv4di2): Likewise.
	(avx2_<code>v4hiv4di2): Likewise.
	(avx2_<code>v4siv4di2): Likewise.
	(avx2_pbroadcast<mode>): Likewise.
	(avx2_permvarv8si): Likewise.
	(avx2_permv4df): Likewise.
	(avx2_permvarv8sf): Likewise.
	(avx2_permv4di): Likewise.
	(avx2_permv2ti): Likewise.
	(avx2_vec_dupv4df): Likewise.
	(avx2_vbroadcasti128_<mode>): Likewise.
	(avx2_vec_set_lo_v4di): Likewise.
	(avx2_vec_set_hi_v4di): Likewise.
	(avx_maskload<ssemodesuffix><avxsizesuffix>): Rename to ...
	(<avx_avx2>_maskload<avx2modesuffix><avxmodesuffix>): ... this.
	Update.
	(avx_maskstore<ssemodesuffix><avxsizesuffix>): Likewise.
	(<avx_avx2>_maskstore<avx2modesuffix><avxmodesuffix>): Likewise.
	(*avx2_maskmov<avx2modesuffix><avxmodesuffix>): New.
	(avx2_extracti128): Likewise.
	(avx2_inserti128): Likewise.
	(avx2_ashrvv8si): Likewise.
	(avx2_ashrvv4si): Likewise.
	(avx2_<lshift>vv8si): Likewise.
	(avx2_<lshift>v<mode>): Likewise.
	(avx2_<lshift>vv2di): Likewise.
	(avx2_gathersi<mode>): Likewise.
	(*avx2_gathersi<mode>): Likewise.
	(avx2_gatherdi<mode>): Likewise.
	(*avx2_gatherdi<mode>): Likewise.
	(avx2_gatherdi<mode>256): Likewise.
	(*avx2_gatherdi<mode>256): Likewise.
	* doc/extend.texi: Document AVX2 built-in functions.
	* doc/invoke.texi: Document -mavx2.

From-SVN: r177955
parent bdb7daeb
...@@ -352,7 +352,7 @@ i[34567]86-*-*) ...@@ -352,7 +352,7 @@ i[34567]86-*-*)
nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h
immintrin.h x86intrin.h avxintrin.h xopintrin.h immintrin.h x86intrin.h avxintrin.h xopintrin.h
ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h
lzcntintrin.h bmiintrin.h tbmintrin.h" lzcntintrin.h bmiintrin.h tbmintrin.h avx2intrin.h"
;; ;;
x86_64-*-*) x86_64-*-*)
cpu_type=i386 cpu_type=i386
...@@ -364,7 +364,7 @@ x86_64-*-*) ...@@ -364,7 +364,7 @@ x86_64-*-*)
nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h
immintrin.h x86intrin.h avxintrin.h xopintrin.h immintrin.h x86intrin.h avxintrin.h xopintrin.h
ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h
lzcntintrin.h bmiintrin.h tbmintrin.h" lzcntintrin.h bmiintrin.h tbmintrin.h avx2intrin.h"
need_64bit_hwint=yes need_64bit_hwint=yes
;; ;;
ia64-*-*) ia64-*-*)
......
...@@ -102,6 +102,8 @@ DEF_VECTOR_TYPE (V32QI, QI) ...@@ -102,6 +102,8 @@ DEF_VECTOR_TYPE (V32QI, QI)
DEF_POINTER_TYPE (PCCHAR, CHAR, CONST) DEF_POINTER_TYPE (PCCHAR, CHAR, CONST)
DEF_POINTER_TYPE (PCDOUBLE, DOUBLE, CONST) DEF_POINTER_TYPE (PCDOUBLE, DOUBLE, CONST)
DEF_POINTER_TYPE (PCFLOAT, FLOAT, CONST) DEF_POINTER_TYPE (PCFLOAT, FLOAT, CONST)
DEF_POINTER_TYPE (PCINT, INT, CONST)
DEF_POINTER_TYPE (PCINT64, INT64, CONST)
DEF_POINTER_TYPE (PCHAR, CHAR) DEF_POINTER_TYPE (PCHAR, CHAR)
DEF_POINTER_TYPE (PCVOID, VOID, CONST) DEF_POINTER_TYPE (PCVOID, VOID, CONST)
DEF_POINTER_TYPE (PVOID, VOID) DEF_POINTER_TYPE (PVOID, VOID)
...@@ -119,6 +121,8 @@ DEF_POINTER_TYPE (PV4DF, V4DF) ...@@ -119,6 +121,8 @@ DEF_POINTER_TYPE (PV4DF, V4DF)
DEF_POINTER_TYPE (PV4DI, V4DI) DEF_POINTER_TYPE (PV4DI, V4DI)
DEF_POINTER_TYPE (PV4SF, V4SF) DEF_POINTER_TYPE (PV4SF, V4SF)
DEF_POINTER_TYPE (PV8SF, V8SF) DEF_POINTER_TYPE (PV8SF, V8SF)
DEF_POINTER_TYPE (PV4SI, V4SI)
DEF_POINTER_TYPE (PV8SI, V8SI)
DEF_POINTER_TYPE (PCV2DF, V2DF, CONST) DEF_POINTER_TYPE (PCV2DF, V2DF, CONST)
DEF_POINTER_TYPE (PCV2SF, V2SF, CONST) DEF_POINTER_TYPE (PCV2SF, V2SF, CONST)
...@@ -126,6 +130,11 @@ DEF_POINTER_TYPE (PCV4DF, V4DF, CONST) ...@@ -126,6 +130,11 @@ DEF_POINTER_TYPE (PCV4DF, V4DF, CONST)
DEF_POINTER_TYPE (PCV4SF, V4SF, CONST) DEF_POINTER_TYPE (PCV4SF, V4SF, CONST)
DEF_POINTER_TYPE (PCV8SF, V8SF, CONST) DEF_POINTER_TYPE (PCV8SF, V8SF, CONST)
DEF_POINTER_TYPE (PCV2DI, V2DI, CONST)
DEF_POINTER_TYPE (PCV4SI, V4SI, CONST)
DEF_POINTER_TYPE (PCV4DI, V4DI, CONST)
DEF_POINTER_TYPE (PCV8SI, V8SI, CONST)
DEF_FUNCTION_TYPE (FLOAT128) DEF_FUNCTION_TYPE (FLOAT128)
DEF_FUNCTION_TYPE (UINT64) DEF_FUNCTION_TYPE (UINT64)
DEF_FUNCTION_TYPE (UNSIGNED) DEF_FUNCTION_TYPE (UNSIGNED)
...@@ -141,6 +150,7 @@ DEF_FUNCTION_TYPE (INT, V4DF) ...@@ -141,6 +150,7 @@ DEF_FUNCTION_TYPE (INT, V4DF)
DEF_FUNCTION_TYPE (INT, V4SF) DEF_FUNCTION_TYPE (INT, V4SF)
DEF_FUNCTION_TYPE (INT, V8QI) DEF_FUNCTION_TYPE (INT, V8QI)
DEF_FUNCTION_TYPE (INT, V8SF) DEF_FUNCTION_TYPE (INT, V8SF)
DEF_FUNCTION_TYPE (INT, V32QI)
DEF_FUNCTION_TYPE (INT64, INT64) DEF_FUNCTION_TYPE (INT64, INT64)
DEF_FUNCTION_TYPE (INT64, V2DF) DEF_FUNCTION_TYPE (INT64, V2DF)
DEF_FUNCTION_TYPE (INT64, V4SF) DEF_FUNCTION_TYPE (INT64, V4SF)
...@@ -199,6 +209,11 @@ DEF_FUNCTION_TYPE (V8SF, V8SI) ...@@ -199,6 +209,11 @@ DEF_FUNCTION_TYPE (V8SF, V8SI)
DEF_FUNCTION_TYPE (V8SF, V8HI) DEF_FUNCTION_TYPE (V8SF, V8HI)
DEF_FUNCTION_TYPE (V8SI, V4SI) DEF_FUNCTION_TYPE (V8SI, V4SI)
DEF_FUNCTION_TYPE (V8SI, V8SF) DEF_FUNCTION_TYPE (V8SI, V8SF)
DEF_FUNCTION_TYPE (V32QI, V32QI)
DEF_FUNCTION_TYPE (V32QI, V16QI)
DEF_FUNCTION_TYPE (V16HI, V16HI)
DEF_FUNCTION_TYPE (V16HI, V8HI)
DEF_FUNCTION_TYPE (V8SI, V8SI)
DEF_FUNCTION_TYPE (VOID, PCVOID) DEF_FUNCTION_TYPE (VOID, PCVOID)
DEF_FUNCTION_TYPE (VOID, PVOID) DEF_FUNCTION_TYPE (VOID, PVOID)
DEF_FUNCTION_TYPE (VOID, UINT64) DEF_FUNCTION_TYPE (VOID, UINT64)
...@@ -206,6 +221,14 @@ DEF_FUNCTION_TYPE (VOID, UNSIGNED) ...@@ -206,6 +221,14 @@ DEF_FUNCTION_TYPE (VOID, UNSIGNED)
DEF_FUNCTION_TYPE (INT, PUSHORT) DEF_FUNCTION_TYPE (INT, PUSHORT)
DEF_FUNCTION_TYPE (INT, PUNSIGNED) DEF_FUNCTION_TYPE (INT, PUNSIGNED)
DEF_FUNCTION_TYPE (INT, PULONGLONG) DEF_FUNCTION_TYPE (INT, PULONGLONG)
DEF_FUNCTION_TYPE (V16HI, V16QI)
DEF_FUNCTION_TYPE (V8SI, V16QI)
DEF_FUNCTION_TYPE (V4DI, V16QI)
DEF_FUNCTION_TYPE (V8SI, V8HI)
DEF_FUNCTION_TYPE (V4DI, V8HI)
DEF_FUNCTION_TYPE (V4DI, V4SI)
DEF_FUNCTION_TYPE (V4DI, PV4DI)
DEF_FUNCTION_TYPE (V4DI, V2DI)
DEF_FUNCTION_TYPE (DI, V2DI, INT) DEF_FUNCTION_TYPE (DI, V2DI, INT)
DEF_FUNCTION_TYPE (DOUBLE, V2DF, INT) DEF_FUNCTION_TYPE (DOUBLE, V2DF, INT)
...@@ -252,6 +275,7 @@ DEF_FUNCTION_TYPE (V2DI, V2DI, SI) ...@@ -252,6 +275,7 @@ DEF_FUNCTION_TYPE (V2DI, V2DI, SI)
DEF_FUNCTION_TYPE (V2DI, V2DI, V16QI) DEF_FUNCTION_TYPE (V2DI, V2DI, V16QI)
DEF_FUNCTION_TYPE (V2DI, V2DI, V2DI) DEF_FUNCTION_TYPE (V2DI, V2DI, V2DI)
DEF_FUNCTION_TYPE (V2DI, V4SI, V4SI) DEF_FUNCTION_TYPE (V2DI, V4SI, V4SI)
DEF_FUNCTION_TYPE (V2DI, PCV2DI, V2DI)
DEF_FUNCTION_TYPE (V2SF, V2SF, V2SF) DEF_FUNCTION_TYPE (V2SF, V2SF, V2SF)
DEF_FUNCTION_TYPE (V2SI, INT, INT) DEF_FUNCTION_TYPE (V2SI, INT, INT)
DEF_FUNCTION_TYPE (V2SI, V2SF, V2SF) DEF_FUNCTION_TYPE (V2SI, V2SF, V2SF)
...@@ -284,6 +308,7 @@ DEF_FUNCTION_TYPE (V4SI, V4SI, SI) ...@@ -284,6 +308,7 @@ DEF_FUNCTION_TYPE (V4SI, V4SI, SI)
DEF_FUNCTION_TYPE (V4SI, V4SI, V4SI) DEF_FUNCTION_TYPE (V4SI, V4SI, V4SI)
DEF_FUNCTION_TYPE (V4SI, V8HI, V8HI) DEF_FUNCTION_TYPE (V4SI, V8HI, V8HI)
DEF_FUNCTION_TYPE (V4SI, V8SI, INT) DEF_FUNCTION_TYPE (V4SI, V8SI, INT)
DEF_FUNCTION_TYPE (V4SI, PCV4SI, V4SI)
DEF_FUNCTION_TYPE (V8HI, V16QI, V16QI) DEF_FUNCTION_TYPE (V8HI, V16QI, V16QI)
DEF_FUNCTION_TYPE (V8HI, V4SI, V4SI) DEF_FUNCTION_TYPE (V8HI, V4SI, V4SI)
DEF_FUNCTION_TYPE (V8HI, V8HI, INT) DEF_FUNCTION_TYPE (V8HI, V8HI, INT)
...@@ -297,6 +322,28 @@ DEF_FUNCTION_TYPE (V8SF, PCV8SF, V8SI) ...@@ -297,6 +322,28 @@ DEF_FUNCTION_TYPE (V8SF, PCV8SF, V8SI)
DEF_FUNCTION_TYPE (V8SF, V8SF, INT) DEF_FUNCTION_TYPE (V8SF, V8SF, INT)
DEF_FUNCTION_TYPE (V8SF, V8SF, V8SF) DEF_FUNCTION_TYPE (V8SF, V8SF, V8SF)
DEF_FUNCTION_TYPE (V8SF, V8SF, V8SI) DEF_FUNCTION_TYPE (V8SF, V8SF, V8SI)
DEF_FUNCTION_TYPE (V32QI, V16HI, V16HI)
DEF_FUNCTION_TYPE (V16HI, V8SI, V8SI)
DEF_FUNCTION_TYPE (V32QI, V32QI, V32QI)
DEF_FUNCTION_TYPE (V16HI, V32QI, V32QI)
DEF_FUNCTION_TYPE (V16HI, V16HI, V8HI)
DEF_FUNCTION_TYPE (V16HI, V16HI, V16HI)
DEF_FUNCTION_TYPE (V16HI, V16HI, INT)
DEF_FUNCTION_TYPE (V16HI, V16HI, SI)
DEF_FUNCTION_TYPE (V16HI, V16HI, V16HI, INT)
DEF_FUNCTION_TYPE (V32QI, V32QI, V32QI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, V4SI)
DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI)
DEF_FUNCTION_TYPE (V8SI, V16HI, V16HI)
DEF_FUNCTION_TYPE (V8SI, V8SI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, SI)
DEF_FUNCTION_TYPE (V8SI, PCV8SI, V8SI)
DEF_FUNCTION_TYPE (V4DI, V4DI, V4DI)
DEF_FUNCTION_TYPE (V4DI, V8SI, V8SI)
DEF_FUNCTION_TYPE (V4DI, V4DI, V2DI)
DEF_FUNCTION_TYPE (V4DI, PCV4DI, V4DI)
DEF_FUNCTION_TYPE (V4DI, V4DI, INT)
DEF_FUNCTION_TYPE (V2DI, V4DI, INT)
DEF_FUNCTION_TYPE (VOID, PCHAR, V16QI) DEF_FUNCTION_TYPE (VOID, PCHAR, V16QI)
DEF_FUNCTION_TYPE (VOID, PCHAR, V32QI) DEF_FUNCTION_TYPE (VOID, PCHAR, V32QI)
DEF_FUNCTION_TYPE (VOID, PDOUBLE, V2DF) DEF_FUNCTION_TYPE (VOID, PDOUBLE, V2DF)
...@@ -351,11 +398,17 @@ DEF_FUNCTION_TYPE (V8SF, V8SF, V8SF, V8SI, INT) ...@@ -351,11 +398,17 @@ DEF_FUNCTION_TYPE (V8SF, V8SF, V8SF, V8SI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, V4SI, INT) DEF_FUNCTION_TYPE (V8SI, V8SI, V4SI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, INT) DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, V8SI) DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, V8SI)
DEF_FUNCTION_TYPE (V4DI, V4DI, V4DI, INT)
DEF_FUNCTION_TYPE (V4DI, V4DI, V2DI, INT)
DEF_FUNCTION_TYPE (VOID, PCVOID, UNSIGNED, UNSIGNED) DEF_FUNCTION_TYPE (VOID, PCVOID, UNSIGNED, UNSIGNED)
DEF_FUNCTION_TYPE (VOID, PV2DF, V2DI, V2DF) DEF_FUNCTION_TYPE (VOID, PV2DF, V2DI, V2DF)
DEF_FUNCTION_TYPE (VOID, PV4DF, V4DI, V4DF) DEF_FUNCTION_TYPE (VOID, PV4DF, V4DI, V4DF)
DEF_FUNCTION_TYPE (VOID, PV4SF, V4SI, V4SF) DEF_FUNCTION_TYPE (VOID, PV4SF, V4SI, V4SF)
DEF_FUNCTION_TYPE (VOID, PV8SF, V8SI, V8SF) DEF_FUNCTION_TYPE (VOID, PV8SF, V8SI, V8SF)
DEF_FUNCTION_TYPE (VOID, PV2DI, V2DI, V2DI)
DEF_FUNCTION_TYPE (VOID, PV4DI, V4DI, V4DI)
DEF_FUNCTION_TYPE (VOID, PV4SI, V4SI, V4SI)
DEF_FUNCTION_TYPE (VOID, PV8SI, V8SI, V8SI)
DEF_FUNCTION_TYPE (VOID, UINT, UINT, UINT) DEF_FUNCTION_TYPE (VOID, UINT, UINT, UINT)
DEF_FUNCTION_TYPE (VOID, UINT64, UINT, UINT) DEF_FUNCTION_TYPE (VOID, UINT64, UINT, UINT)
DEF_FUNCTION_TYPE (VOID, V16QI, V16QI, PCHAR) DEF_FUNCTION_TYPE (VOID, V16QI, V16QI, PCHAR)
...@@ -377,6 +430,23 @@ DEF_FUNCTION_TYPE (V16QI, V16QI, INT, V16QI, INT, INT) ...@@ -377,6 +430,23 @@ DEF_FUNCTION_TYPE (V16QI, V16QI, INT, V16QI, INT, INT)
DEF_FUNCTION_TYPE (V8QI, QI, QI, QI, QI, QI, QI, QI, QI) DEF_FUNCTION_TYPE (V8QI, QI, QI, QI, QI, QI, QI, QI, QI)
DEF_FUNCTION_TYPE (V2DF, V2DF, PCDOUBLE, V4SI, V2DF, INT)
DEF_FUNCTION_TYPE (V4DF, V4DF, PCDOUBLE, V4SI, V4DF, INT)
DEF_FUNCTION_TYPE (V2DF, V2DF, PCDOUBLE, V2DI, V2DF, INT)
DEF_FUNCTION_TYPE (V4DF, V4DF, PCDOUBLE, V4DI, V4DF, INT)
DEF_FUNCTION_TYPE (V4SF, V4SF, PCFLOAT, V4SI, V4SF, INT)
DEF_FUNCTION_TYPE (V8SF, V8SF, PCFLOAT, V8SI, V8SF, INT)
DEF_FUNCTION_TYPE (V4SF, V4SF, PCFLOAT, V2DI, V4SF, INT)
DEF_FUNCTION_TYPE (V4SF, V4SF, PCFLOAT, V4DI, V4SF, INT)
DEF_FUNCTION_TYPE (V2DI, V2DI, PCINT64, V4SI, V2DI, INT)
DEF_FUNCTION_TYPE (V4DI, V4DI, PCINT64, V4SI, V4DI, INT)
DEF_FUNCTION_TYPE (V2DI, V2DI, PCINT64, V2DI, V2DI, INT)
DEF_FUNCTION_TYPE (V4DI, V4DI, PCINT64, V4DI, V4DI, INT)
DEF_FUNCTION_TYPE (V4SI, V4SI, PCINT, V4SI, V4SI, INT)
DEF_FUNCTION_TYPE (V8SI, V8SI, PCINT, V8SI, V8SI, INT)
DEF_FUNCTION_TYPE (V4SI, V4SI, PCINT, V2DI, V4SI, INT)
DEF_FUNCTION_TYPE (V4SI, V4SI, PCINT, V4DI, V4SI, INT)
DEF_FUNCTION_TYPE_ALIAS (V2DF_FTYPE_V2DF, ROUND) DEF_FUNCTION_TYPE_ALIAS (V2DF_FTYPE_V2DF, ROUND)
DEF_FUNCTION_TYPE_ALIAS (V4DF_FTYPE_V4DF, ROUND) DEF_FUNCTION_TYPE_ALIAS (V4DF_FTYPE_V4DF, ROUND)
DEF_FUNCTION_TYPE_ALIAS (V4SF_FTYPE_V4SF, ROUND) DEF_FUNCTION_TYPE_ALIAS (V4SF_FTYPE_V4SF, ROUND)
...@@ -404,11 +474,19 @@ DEF_FUNCTION_TYPE_ALIAS (V2SI_FTYPE_V2SI_V2SI, COUNT) ...@@ -404,11 +474,19 @@ DEF_FUNCTION_TYPE_ALIAS (V2SI_FTYPE_V2SI_V2SI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V4HI_FTYPE_V4HI_V4HI, COUNT) DEF_FUNCTION_TYPE_ALIAS (V4HI_FTYPE_V4HI_V4HI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V4SI_FTYPE_V4SI_V4SI, COUNT) DEF_FUNCTION_TYPE_ALIAS (V4SI_FTYPE_V4SI_V4SI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V8HI_FTYPE_V8HI_V8HI, COUNT) DEF_FUNCTION_TYPE_ALIAS (V8HI_FTYPE_V8HI_V8HI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V16HI_FTYPE_V16HI_SI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V16HI_FTYPE_V16HI_V8HI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V8SI_FTYPE_V8SI_SI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V8SI_FTYPE_V8SI_V4SI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V4DI_FTYPE_V4DI_INT, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V4DI_FTYPE_V4DI_V2DI, COUNT)
DEF_FUNCTION_TYPE_ALIAS (V2DF_FTYPE_V2DF_V2DF, SWAP) DEF_FUNCTION_TYPE_ALIAS (V2DF_FTYPE_V2DF_V2DF, SWAP)
DEF_FUNCTION_TYPE_ALIAS (V4SF_FTYPE_V4SF_V4SF, SWAP) DEF_FUNCTION_TYPE_ALIAS (V4SF_FTYPE_V4SF_V4SF, SWAP)
DEF_FUNCTION_TYPE_ALIAS (V4DI_FTYPE_V4DI_INT, CONVERT)
DEF_FUNCTION_TYPE_ALIAS (V2DI_FTYPE_V2DI_INT, CONVERT) DEF_FUNCTION_TYPE_ALIAS (V2DI_FTYPE_V2DI_INT, CONVERT)
DEF_FUNCTION_TYPE_ALIAS (V4DI_FTYPE_V4DI_V4DI_INT, CONVERT)
DEF_FUNCTION_TYPE_ALIAS (V2DI_FTYPE_V2DI_V2DI_INT, CONVERT) DEF_FUNCTION_TYPE_ALIAS (V2DI_FTYPE_V2DI_V2DI_INT, CONVERT)
DEF_FUNCTION_TYPE_ALIAS (V1DI_FTYPE_V1DI_V1DI_INT, CONVERT) DEF_FUNCTION_TYPE_ALIAS (V1DI_FTYPE_V1DI_V1DI_INT, CONVERT)
......
...@@ -231,6 +231,14 @@ ...@@ -231,6 +231,14 @@
UNSPEC_VCVTPH2PS UNSPEC_VCVTPH2PS
UNSPEC_VCVTPS2PH UNSPEC_VCVTPS2PH
;; For AVX2 support
UNSPEC_VPERMSI
UNSPEC_VPERMDF
UNSPEC_VPERMSF
UNSPEC_VPERMDI
UNSPEC_VPERMTI
UNSPEC_GATHER
;; For BMI support ;; For BMI support
UNSPEC_BEXTR UNSPEC_BEXTR
...@@ -930,7 +938,8 @@ ...@@ -930,7 +938,8 @@
[(SF "ss") (DF "sd") [(SF "ss") (DF "sd")
(V8SF "ps") (V4DF "pd") (V8SF "ps") (V4DF "pd")
(V4SF "ps") (V2DF "pd") (V4SF "ps") (V2DF "pd")
(V16QI "b") (V8HI "w") (V4SI "d") (V2DI "q")]) (V16QI "b") (V8HI "w") (V4SI "d") (V2DI "q")
(V32QI "b") (V16HI "w") (V8SI "d") (V4DI "q")])
;; SSE vector suffix for floating point modes ;; SSE vector suffix for floating point modes
(define_mode_attr ssevecmodesuffix [(SF "ps") (DF "pd")]) (define_mode_attr ssevecmodesuffix [(SF "ps") (DF "pd")])
......
...@@ -56,6 +56,10 @@ ...@@ -56,6 +56,10 @@
#include <avxintrin.h> #include <avxintrin.h>
#endif #endif
#ifdef __AVX2__
#include <avx2intrin.h>
#endif
#ifdef __RDRND__ #ifdef __RDRND__
extern __inline int extern __inline int
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
......
...@@ -611,6 +611,14 @@ ...@@ -611,6 +611,14 @@
return i == 2 || i == 4 || i == 8; return i == 2 || i == 4 || i == 8;
}) })
;; Match 1, 2, 4, or 8
(define_predicate "const1248_operand"
(match_code "const_int")
{
HOST_WIDE_INT i = INTVAL (op);
return i == 1 || i == 2 || i == 4 || i == 8;
})
;; Match 3, 5, or 9. Used for leal multiplicands. ;; Match 3, 5, or 9. Used for leal multiplicands.
(define_predicate "const359_operand" (define_predicate "const359_operand"
(match_code "const_int") (match_code "const_int")
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -9455,6 +9455,184 @@ v4df __builtin_ia32_xorpd256 (v4df,v4df) ...@@ -9455,6 +9455,184 @@ v4df __builtin_ia32_xorpd256 (v4df,v4df)
v8sf __builtin_ia32_xorps256 (v8sf,v8sf) v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
@end smallexample @end smallexample
The following built-in functions are available when @option{-mavx2} is
used. All of them generate the machine instruction that is part of the
name.
@smallexample
v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
v32qi __builtin_ia32_pabsb256 (v32qi)
v16hi __builtin_ia32_pabsw256 (v16hi)
v8si __builtin_ia32_pabsd256 (v8si)
v16hi builtin_ia32_packssdw256 (v8si,v8si)
v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
v16hi __builtin_ia32_packusdw256 (v8si,v8si)
v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
v32qi__builtin_ia32_paddb256 (v32qi,v32qi)
v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
v8si __builtin_ia32_paddd256 (v8si,v8si)
v4di __builtin_ia32_paddq256 (v4di,v4di)
v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
v4di __builtin_ia32_palignr256 (v4di,v4di,int)
v4di __builtin_ia32_andsi256 (v4di,v4di)
v4di __builtin_ia32_andnotsi256 (v4di,v4di)
v32qi__builtin_ia32_pavgb256 (v32qi,v32qi)
v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
v8si __builtin_ia32_phaddd256 (v8si,v8si)
v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
v8si __builtin_ia32_phsubd256 (v8si,v8si)
v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
v8si __builtin_ia32_pmaxud256 (v8si,v8si)
v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
v8si __builtin_ia32_pminsd256 (v8si,v8si)
v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
v8si __builtin_ia32_pminud256 (v8si,v8si)
int __builtin_ia32_pmovmskb256 (v32qi)
v16hi __builtin_ia32_pmovsxbw256 (v16qi)
v8si __builtin_ia32_pmovsxbd256 (v16qi)
v4di __builtin_ia32_pmovsxbq256 (v16qi)
v8si __builtin_ia32_pmovsxwd256 (v8hi)
v4di __builtin_ia32_pmovsxwq256 (v8hi)
v4di __builtin_ia32_pmovsxdq256 (v4si)
v16hi __builtin_ia32_pmovzxbw256 (v16qi)
v8si __builtin_ia32_pmovzxbd256 (v16qi)
v4di __builtin_ia32_pmovzxbq256 (v16qi)
v8si __builtin_ia32_pmovzxwd256 (v8hi)
v4di __builtin_ia32_pmovzxwq256 (v8hi)
v4di __builtin_ia32_pmovzxdq256 (v4si)
v4di __builtin_ia32_pmuldq256 (v8si,v8si)
v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
v8si __builtin_ia32_pmulld256 (v8si,v8si)
v4di __builtin_ia32_pmuludq256 (v8si,v8si)
v4di __builtin_ia32_por256 (v4di,v4di)
v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
v8si __builtin_ia32_pshufd256 (v8si,int)
v16hi __builtin_ia32_pshufhw256 (v16hi,int)
v16hi __builtin_ia32_pshuflw256 (v16hi,int)
v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
v8si __builtin_ia32_psignd256 (v8si,v8si)
v4di __builtin_ia32_pslldqi256 (v4di,int)
v16hi __builtin_ia32_psllwi256 (16hi,int)
v16hi __builtin_ia32_psllw256(v16hi,v8hi)
v8si __builtin_ia32_pslldi256 (v8si,int)
v8si __builtin_ia32_pslld256(v8si,v4si)
v4di __builtin_ia32_psllqi256 (v4di,int)
v4di __builtin_ia32_psllq256(v4di,v2di)
v16hi __builtin_ia32_psrawi256 (v16hi,int)
v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
v8si __builtin_ia32_psradi256 (v8si,int)
v8si __builtin_ia32_psrad256 (v8si,v4si)
v4di __builtin_ia32_psrldqi256 (v4di, int)
v16hi __builtin_ia32_psrlwi256 (v16hi,int)
v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
v8si __builtin_ia32_psrldi256 (v8si,int)
v8si __builtin_ia32_psrld256 (v8si,v4si)
v4di __builtin_ia32_psrlqi256 (v4di,int)
v4di __builtin_ia32_psrlq256(v4di,v2di)
v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
v8si __builtin_ia32_psubd256 (v8si,v8si)
v4di __builtin_ia32_psubq256 (v4di,v4di)
v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
v8si __builtin_ia32_punpckldq256 (v8si,v8si)
v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
v4di __builtin_ia32_pxor256 (v4di,v4di)
v4di __builtin_ia32_movntdqa256 (pv4di)
v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
v4di __builtin_ia32_vbroadcastsi256 (v2di)
v4si __builtin_ia32_pblendd128 (v4si,v4si)
v8si __builtin_ia32_pblendd256 (v8si,v8si)
v32qi __builtin_ia32_pbroadcastb256 (v16qi)
v16hi __builtin_ia32_pbroadcastw256 (v8hi)
v8si __builtin_ia32_pbroadcastd256 (v4si)
v4di __builtin_ia32_pbroadcastq256 (v2di)
v16qi __builtin_ia32_pbroadcastb128 (v16qi)
v8hi __builtin_ia32_pbroadcastw128 (v8hi)
v4si __builtin_ia32_pbroadcastd128 (v4si)
v2di __builtin_ia32_pbroadcastq128 (v2di)
v8si __builtin_ia32_permvarsi256 (v8si,v8si)
v4df __builtin_ia32_permdf256 (v4df,int)
v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
v4di __builtin_ia32_permdi256 (v4di,int)
v4di __builtin_ia32_permti256 (v4di,v4di,int)
v4di __builtin_ia32_extract128i256 (v4di,int)
v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
v4si __builtin_ia32_maskloadd (pcv4si,v4si)
v2di __builtin_ia32_maskloadq (pcv2di,v2di)
void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
void __builtin_ia32_maskstored (pv4si,v4si,v4si)
void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
v8si __builtin_ia32_psllv8si (v8si,v8si)
v4si __builtin_ia32_psllv4si (v4si,v4si)
v4di __builtin_ia32_psllv4di (v4di,v4di)
v2di __builtin_ia32_psllv2di (v2di,v2di)
v8si __builtin_ia32_psrav8si (v8si,v8si)
v4si __builtin_ia32_psrav4si (v4si,v4si)
v8si __builtin_ia32_psrlv8si (v8si,v8si)
v4si __builtin_ia32_psrlv4si (v4si,v4si)
v4di __builtin_ia32_psrlv4di (v4di,v4di)
v2di __builtin_ia32_psrlv2di (v2di,v2di)
v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
@end smallexample
The following built-in functions are available when @option{-maes} is The following built-in functions are available when @option{-maes} is
used. All of them generate the machine instruction that is part of the used. All of them generate the machine instruction that is part of the
name. name.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment