diff options
author | Kirill Yukhin <kirill.yukhin@intel.com> | 2011-08-22 13:57:18 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2011-08-22 06:57:18 -0700 |
commit | 977e83a3edc1a58077e33143ad3cc1f9349d6197 (patch) | |
tree | af60ab13d7a0d5ccfb359b7d30574fe0ddeb89db /gcc/doc/extend.texi | |
parent | bdb7daebd20c38495ae1640a00e23d11d0f8ebee (diff) | |
download | gcc-977e83a3edc1a58077e33143ad3cc1f9349d6197.zip gcc-977e83a3edc1a58077e33143ad3cc1f9349d6197.tar.gz gcc-977e83a3edc1a58077e33143ad3cc1f9349d6197.tar.bz2 |
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
Diffstat (limited to 'gcc/doc/extend.texi')
-rw-r--r-- | gcc/doc/extend.texi | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index cf7fdbf..29c02b8 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -9455,6 +9455,184 @@ v4df __builtin_ia32_xorpd256 (v4df,v4df) v8sf __builtin_ia32_xorps256 (v8sf,v8sf) @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 used. All of them generate the machine instruction that is part of the name. |