This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [1/3] AVX branch merge --- Update x86 backend


On Thu, Aug 21, 2008 at 5:08 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> On Thu, Aug 21, 2008 at 05:03:54PM -0700, H.J. Lu wrote:
>> Here is the x86 backend patch for AVX support.  OK for trunk?
>>
>> Thanks.
>>
>>
>> H.J.
>> ----
>> 2008-08-21  H.J. Lu  <hongjiu.lu@intel.com>
>>           Joey Ye  <joey.ye@intel.com>
>>           Xuepeng Guo  <xuepeng.guo@intel.com>
>>
>>       * config.gcc (extra_headers): Add gmmintrin.h for x86 and x86-64.
>>
>>       * config/i386/cpuid.h (bit_FMA): New.
>>       (bit_XSAVE): Likewise.
>>       (bit_OSXSAVE): Likewise.
>>       (bit_AVX): Likewise.
>>
>>       * config/i386/gas.h (ASM_OUTPUT_OPCODE): Undefine before
>>       define.  Use ASM_OUTPUT_AVX_PREFIX.
>>
>>       * config/i386/gmmintrin.h: New.
>>
>>       * config/i386/i386.c (x86_64_reg_class): Add X86_64_AVX_CLASS.
>>       (OPTION_MASK_ISA_AVX_SET): New.
>>       (OPTION_MASK_ISA_FMA_SET): Likewise.
>>       (OPTION_MASK_ISA_AVX_UNSET): Likewise.
>>       (OPTION_MASK_ISA_FMA_SET): Likewise.
>>       (OPTION_MASK_ISA_SSE4_2_UNSET): Updated.
>>       (ix86_handle_option): Handle OPT_mavx and OPT_mfma.
>>       (pta_flags): Add PTA_AVX and PTA_FMA.
>>       (override_options): Handle PTA_AVX and PTA_FMA.
>>       (init_cumulative_args): Handle warn_avx.
>>       (classify_argument): Return 0 for COImode and OImode.  Return
>>       1 and X86_64_AVX_CLASS for 256bit vector types.
>>       (examine_argument): Handle X86_64_AVX_CLASS.
>>       (construct_container): Likewise.
>>       (function_arg_advance_32): Pass OImode and 256bit vector types
>>       in AVX register.
>>       (function_arg_advance_64): Take a new argument to indicate if a
>>       parameter is named.  Handle 256bit vector types.  Return
>>       immediately for unnamed 256bit vector mode parameters.
>>       (function_arg_advance): Updated.
>>       (function_arg_32): Add comments for TImode.  Handle OImode
>>       and 256bit vector types.
>>       (function_arg_64): Take a new argument to indicate if a
>>       parameter is named.  Handle 256bit vector types.  Return NULL
>>       for unnamed 256bit vector mode parameters.
>>       (function_arg): Updated.
>>       (setup_incoming_varargs_64): Support
>>       AVX encoding for *sse_prologue_save_insn.
>>       (ix86_gimplify_va_arg): Handle 256bit vector mode parameters.
>>       (standard_sse_mode_p): Return 2 for 256bit vector modes.
>>       (standard_sse_constant_p): Return -2 for all 1s if SSE2 isn't
>>       enabled.  For all 1s in 256bit vector modes, return 3 if AVX is
>>       enabled, otherwise return -3.
>>       (standard_sse_constant_opcode): Handle AVX and 256bit vector
>>       modes.
>>       (print_reg): Support AVX registers.  Handle 'x' and 't'.
>>       Handle 'd' to duplicate the operand.
>>       (print_operand): Likewise.  Also support AVX vector compare
>>       instructions.
>>       (output_387_binary_op): Support AVX.
>>       (output_fp_compare): Likewise.
>>       (ix86_expand_vector_move_misalign): Likewise.
>>       (ix86_attr_length_vex_default): New.
>>       (ix86_builtins): Add IX86_BUILTIN_ADDPD256,
>>       IX86_BUILTIN_ADDPS256, IX86_BUILTIN_ADDSUBPD256,
>>       IX86_BUILTIN_ADDSUBPS256, IX86_BUILTIN_ANDPD256,
>>       IX86_BUILTIN_ANDPS256, IX86_BUILTIN_ANDNPD256,
>>       IX86_BUILTIN_ANDNPS256, IX86_BUILTIN_BLENDPD256,
>>       IX86_BUILTIN_BLENDPS256, IX86_BUILTIN_BLENDVPD256,
>>       IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_DIVPD256,
>>       IX86_BUILTIN_DIVPS256, IX86_BUILTIN_DPPS256,
>>       IX86_BUILTIN_HADDPD256, IX86_BUILTIN_HADDPS256,
>>       IX86_BUILTIN_HSUBPD256, IX86_BUILTIN_HSUBPS256,
>>       IX86_BUILTIN_MAXPD256, IX86_BUILTIN_MAXPS256,
>>       IX86_BUILTIN_MINPD256, IX86_BUILTIN_MINPS256,
>>       IX86_BUILTIN_MULPD256, IX86_BUILTIN_MULPS256,
>>       IX86_BUILTIN_ORPD256, IX86_BUILTIN_ORPS256,
>>       IX86_BUILTIN_SHUFPD256, IX86_BUILTIN_SHUFPS256,
>>       IX86_BUILTIN_SUBPD256, IX86_BUILTIN_SUBPS256,
>>       IX86_BUILTIN_XORPD256, IX86_BUILTIN_XORPS256,
>>       IX86_BUILTIN_CMPSD, IX86_BUILTIN_CMPSS, IX86_BUILTIN_CMPPD,
>>       IX86_BUILTIN_CMPPS, IX86_BUILTIN_CMPPD256,
>>       IX86_BUILTIN_CMPPS256, IX86_BUILTIN_CVTDQ2PD256,
>>       IX86_BUILTIN_CVTDQ2PS256, IX86_BUILTIN_CVTPD2PS256,
>>       IX86_BUILTIN_CVTPS2DQ256, IX86_BUILTIN_CVTPS2PD256,
>>       IX86_BUILTIN_CVTTPD2DQ256, IX86_BUILTIN_CVTPD2DQ256,
>>       IX86_BUILTIN_CVTTPS2DQ256, IX86_BUILTIN_EXTRACTF128PD256,
>>       IX86_BUILTIN_EXTRACTF128PS256, IX86_BUILTIN_EXTRACTF128SI256,
>>       IX86_BUILTIN_VZEROALL, IX86_BUILTIN_VZEROUPPER,
>>       IX86_BUILTIN_VZEROUPPER_REX64, IX86_BUILTIN_VPERMILVARPD,
>>       IX86_BUILTIN_VPERMILVARPS, IX86_BUILTIN_VPERMILVARPD256,
>>       IX86_BUILTIN_VPERMILVARPS256, IX86_BUILTIN_VPERMILPD,
>>       IX86_BUILTIN_VPERMILPS, IX86_BUILTIN_VPERMILPD256,
>>       IX86_BUILTIN_VPERMILPS256, IX86_BUILTIN_VPERMIL2PD,
>>       IX86_BUILTIN_VPERMIL2PS, IX86_BUILTIN_VPERMIL2PD256,
>>       IX86_BUILTIN_VPERMIL2PS256, IX86_BUILTIN_VPERM2F128PD256,
>>       IX86_BUILTIN_VPERM2F128PS256, IX86_BUILTIN_VPERM2F128SI256,
>>       IX86_BUILTIN_VBROADCASTSS, IX86_BUILTIN_VBROADCASTSD256,
>>       IX86_BUILTIN_VBROADCASTSS256, IX86_BUILTIN_VBROADCASTPD256,
>>       IX86_BUILTIN_VBROADCASTPS256, IX86_BUILTIN_VINSERTF128PD256,
>>       IX86_BUILTIN_VINSERTF128PS256, IX86_BUILTIN_VINSERTF128SI256,
>>       IX86_BUILTIN_LOADUPD256, IX86_BUILTIN_LOADUPS256,
>>       IX86_BUILTIN_STOREUPD256, IX86_BUILTIN_STOREUPS256,
>>       IX86_BUILTIN_LDDQU256, IX86_BUILTIN_LOADDQU256,
>>       IX86_BUILTIN_STOREDQU256, IX86_BUILTIN_MASKLOADPD,
>>       IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKSTOREPD,
>>       IX86_BUILTIN_MASKSTOREPS, IX86_BUILTIN_MASKLOADPD256,
>>       IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKSTOREPD256,
>>       IX86_BUILTIN_MASKSTOREPS256, IX86_BUILTIN_MOVSHDUP256,
>>       IX86_BUILTIN_MOVSLDUP256, IX86_BUILTIN_MOVDDUP256,
>>       IX86_BUILTIN_SQRTPD256, IX86_BUILTIN_SQRTPS256,
>>       IX86_BUILTIN_SQRTPS_NR256, IX86_BUILTIN_RSQRTPS256,
>>       IX86_BUILTIN_RSQRTPS_NR256, IX86_BUILTIN_RCPPS256,
>>       IX86_BUILTIN_ROUNDPD256, IX86_BUILTIN_ROUNDPS256,
>>       IX86_BUILTIN_UNPCKHPD256, IX86_BUILTIN_UNPCKLPD256,
>>       IX86_BUILTIN_UNPCKHPS256, IX86_BUILTIN_UNPCKLPS256,
>>       IX86_BUILTIN_SI256_SI, IX86_BUILTIN_PS256_PS,
>>       IX86_BUILTIN_PD256_PD, IX86_BUILTIN_SI_SI256,
>>       IX86_BUILTIN_PS_PS256, IX86_BUILTIN_PD_PD256,
>>       IX86_BUILTIN_VTESTZPD, IX86_BUILTIN_VTESTCPD,
>>       IX86_BUILTIN_VTESTNZCPD, IX86_BUILTIN_VTESTZPS,
>>       IX86_BUILTIN_VTESTCPS, IX86_BUILTIN_VTESTNZCPS,
>>       IX86_BUILTIN_VTESTZPD256, IX86_BUILTIN_VTESTCPD256,
>>       IX86_BUILTIN_VTESTNZCPD256, IX86_BUILTIN_VTESTZPS256,
>>       IX86_BUILTIN_VTESTCPS256, IX86_BUILTIN_VTESTNZCPS256,
>>       IX86_BUILTIN_PTESTZ256, IX86_BUILTIN_PTESTC256,
>>       IX86_BUILTIN_PTESTNZC256, IX86_BUILTIN_MOVMSKPD256
>>       and IX86_BUILTIN_MOVMSKPS256,
>>       (ix86_special_builtin_type): Add V32QI_FTYPE_PCCHAR,
>>       V8SF_FTYPE_PCV4SF, V8SF_FTYPE_PCFLOAT, V4DF_FTYPE_PCV2DF,
>>       V4DF_FTYPE_PCDOUBLE, V8SF_FTYPE_PCV8SF_V8SF,
>>       V4DF_FTYPE_PCV4DF_V4DF, V4SF_FTYPE_PCV4SF_V4SF,
>>       V2DF_FTYPE_PCV2DF_V2DF, VOID_FTYPE_PCHAR_V32QI,
>>       VOID_FTYPE_PFLOAT_V8SF, VOID_FTYPE_PDOUBLE_V4DF,
>>       VOID_FTYPE_PV8SF_V8SF_V8SF, VOID_FTYPE_PV4DF_V4DF_V4DF,
>>       VOID_FTYPE_PV4SF_V4SF_V4SF and VOID_FTYPE_PV2DF_V2DF_V2DF,
>>       (ix86_builtin_type): Add INT_FTYPE_V8SF_V8SF_PTEST,
>>       INT_FTYPE_V4DI_V4DI_PTEST, INT_FTYPE_V4DF_V4DF_PTEST,
>>       INT_FTYPE_V4SF_V4SF_PTEST, INT_FTYPE_V2DF_V2DF_PTEST,
>>       INT_FTYPE_V8SF, INT_FTYPE_V4DF, V8SI_FTYPE_V8SF, V8SI_FTYPE_V4SI,
>>       V8SF_FTYPE_V8SF, V8SF_FTYPE_V8SI, V8SF_FTYPE_V4SF,
>>       V4SI_FTYPE_V8SI, V4SI_FTYPE_V4DF, V4DF_FTYPE_V4DF,
>>       V4DF_FTYPE_V4SI, V4DF_FTYPE_V4SF, V4DF_FTYPE_V2DF,
>>       V4SF_FTYPE_V4DF, V4SF_FTYPE_V8SF, V2DF_FTYPE_V4DF,
>>       V8SF_FTYPE_V8SF_V8SF, V8SF_FTYPE_V8SF_V8SI,
>>       V4DF_FTYPE_V4DF_V4DF, V4DF_FTYPE_V4DF_V4DI,
>>       V4SF_FTYPE_V4SF_V4SI, V2DF_FTYPE_V2DF_V2DI,
>>       V8SF_FTYPE_V8SF_INT, V4SI_FTYPE_V8SI_INT, V4SF_FTYPE_V8SF_INT,
>>       V2DF_FTYPE_V4DF_INT, V4DF_FTYPE_V4DF_INT,
>>       V8SF_FTYPE_V8SF_V8SF_V8SF, V4DF_FTYPE_V4DF_V4DF_V4DF,
>>       V8SI_FTYPE_V8SI_V8SI_INT, V8SF_FTYPE_V8SF_V8SF_INT,
>>       V4DF_FTYPE_V4DF_V4DF_INT, V4DF_FTYPE_V4DF_V2DF_INT,
>>       V8SF_FTYPE_V8SF_V8SF_V8SI_INT, V4DF_FTYPE_V4DF_V4DF_V4DI_INT,
>>       V4SF_FTYPE_V4SF_V4SF_V4SI_INT and V2DF_FTYPE_V2DF_V2DF_V2DI_INT.
>>       (bdesc_special_args): Add IX86_BUILTIN_VZEROALL,
>>       IX86_BUILTIN_VZEROUPPER. IX86_BUILTIN_VZEROUPPER_REX64,
>>       IX86_BUILTIN_VBROADCASTSS, IX86_BUILTIN_VBROADCASTSD256,
>>       IX86_BUILTIN_VBROADCASTSS256, IX86_BUILTIN_VBROADCASTPD256,
>>       IX86_BUILTIN_VBROADCASTPS256, IX86_BUILTIN_LOADUPD256,
>>       IX86_BUILTIN_LOADUPS256, IX86_BUILTIN_STOREUPD256,
>>       IX86_BUILTIN_STOREUPS256, IX86_BUILTIN_LOADDQU256,
>>       IX86_BUILTIN_STOREDQU256, IX86_BUILTIN_LDDQU256,
>>       IX86_BUILTIN_MASKLOADPD, IX86_BUILTIN_MASKLOADPS,
>>       IX86_BUILTIN_MASKLOADPD256, IX86_BUILTIN_MASKLOADPS256,
>>       IX86_BUILTIN_MASKSTOREPD, IX86_BUILTIN_MASKSTOREPS,
>>       IX86_BUILTIN_MASKSTOREPD256 and IX86_BUILTIN_MASKSTOREPS256.
>>       (ix86_builtins): Add IX86_BUILTIN_ADDPD256,
>>       IX86_BUILTIN_ADDPS256, IX86_BUILTIN_ADDSUBPD256,
>>       IX86_BUILTIN_ADDSUBPS256, IX86_BUILTIN_ANDPD256,
>>       IX86_BUILTIN_ANDPS256, IX86_BUILTIN_ANDNPD256,
>>       IX86_BUILTIN_ANDNPS256, IX86_BUILTIN_DIVPD256,
>>       IX86_BUILTIN_DIVPS256, IX86_BUILTIN_HADDPD256,
>>       IX86_BUILTIN_HSUBPS256, IX86_BUILTIN_HSUBPD256,
>>       IX86_BUILTIN_HADDPS256, IX86_BUILTIN_MAXPD256,
>>       IX86_BUILTIN_MAXPS256, IX86_BUILTIN_MINPD256,
>>       IX86_BUILTIN_MINPS256, IX86_BUILTIN_MULPD256,
>>       IX86_BUILTIN_MULPS256, IX86_BUILTIN_ORPD256,
>>       IX86_BUILTIN_ORPS256, IX86_BUILTIN_SUBPD256,
>>       IX86_BUILTIN_SUBPS256, IX86_BUILTIN_XORPD256,
>>       IX86_BUILTIN_XORPS256, IX86_BUILTIN_VPERMILVARPD,
>>       IX86_BUILTIN_VPERMILVARPS, IX86_BUILTIN_VPERMILVARPD256,
>>       IX86_BUILTIN_VPERMILVARPS256, IX86_BUILTIN_BLENDPD256,
>>       IX86_BUILTIN_BLENDPS256, IX86_BUILTIN_BLENDVPD256,
>>       IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_DPPS256,
>>       IX86_BUILTIN_SHUFPD256, IX86_BUILTIN_SHUFPS256,
>>       IX86_BUILTIN_CMPSD, IX86_BUILTIN_CMPSS, IX86_BUILTIN_CMPPD,
>>       IX86_BUILTIN_CMPPS,
>>       IX86_BUILTIN_CMPPD256,IX86_BUILTIN_CMPPS256,
>>       IX86_BUILTIN_EXTRACTF128PD256, IX86_BUILTIN_EXTRACTF128PS256,
>>       IX86_BUILTIN_EXTRACTF128SI256, IX86_BUILTIN_CVTDQ2PD256,
>>       IX86_BUILTIN_CVTDQ2PS256, IX86_BUILTIN_CVTPD2PS256,
>>       IX86_BUILTIN_CVTPS2DQ256, IX86_BUILTIN_CVTPS2PD256,
>>       IX86_BUILTIN_CVTTPD2DQ256, IX86_BUILTIN_CVTPD2DQ256,
>>       IX86_BUILTIN_CVTTPS2DQ256, IX86_BUILTIN_VPERM2F128PD256,
>>       IX86_BUILTIN_VPERM2F128PS256, IX86_BUILTIN_VPERM2F128SI256,
>>       IX86_BUILTIN_VPERMILPD, IX86_BUILTIN_VPERMILPS,
>>       IX86_BUILTIN_VPERMILPD256, IX86_BUILTIN_VPERMILPS256,
>>       IX86_BUILTIN_VPERMIL2PD, IX86_BUILTIN_VPERMILPS,
>>       IX86_BUILTIN_VPERMILPD256, IX86_BUILTIN_VPERMILPS256,
>>       IX86_BUILTIN_VPERMIL2PD, IX86_BUILTIN_VPERMIL2PS,
>>       IX86_BUILTIN_VPERMIL2PD256, IX86_BUILTIN_VPERMIL2PS256,
>>       IX86_BUILTIN_VINSERTF128PD256, IX86_BUILTIN_VINSERTF128PS256,
>>       IX86_BUILTIN_VINSERTF128SI256, IX86_BUILTIN_MOVSHDUP256,
>>       IX86_BUILTIN_MOVSLDUP256, IX86_BUILTIN_MOVDDUP256,
>>       IX86_BUILTIN_SQRTPD256, IX86_BUILTIN_SQRTPS256,
>>       IX86_BUILTIN_SQRTPS_NR256, IX86_BUILTIN_RSQRTPS256,
>>       IX86_BUILTIN_RSQRTPS_NR256, IX86_BUILTIN_RCPPS256,
>>       IX86_BUILTIN_ROUNDPD256, IX86_BUILTIN_ROUNDPS256,
>>       IX86_BUILTIN_UNPCKHPD256, IX86_BUILTIN_UNPCKLPD256,
>>       IX86_BUILTIN_UNPCKHPS256, IX86_BUILTIN_UNPCKLPS256,
>>       IX86_BUILTIN_SI256_SI, IX86_BUILTIN_PS256_PS,
>>       IX86_BUILTIN_PD256_PD, IX86_BUILTIN_SI_SI256,
>>       IX86_BUILTIN_PS_PS256, IX86_BUILTIN_PD_PD256,
>>       IX86_BUILTIN_VTESTZPD, IX86_BUILTIN_VTESTCPD,
>>       IX86_BUILTIN_VTESTNZCPD, IX86_BUILTIN_VTESTZPS,
>>       IX86_BUILTIN_VTESTCPS, IX86_BUILTIN_VTESTNZCPS,
>>       IX86_BUILTIN_VTESTZPD256, IX86_BUILTIN_VTESTCPD256,
>>       IX86_BUILTIN_VTESTNZCPD256, IX86_BUILTIN_VTESTZPS256,
>>       IX86_BUILTIN_VTESTCPS256, IX86_BUILTIN_VTESTNZCPS256,
>>       IX86_BUILTIN_PTESTZ256, IX86_BUILTIN_PTESTC256,
>>       IX86_BUILTIN_PTESTNZC256, IX86_BUILTIN_MOVMSKPD256 and
>>       IX86_BUILTIN_MOVMSKPS256.
>>       (ix86_init_mmx_sse_builtins): Support AVX builtins.
>>       (ix86_expand_args_builtin): Likewise.
>>       (ix86_expand_special_args_builtin): Likewise.
>>       (ix86_hard_regno_mode_ok): Handle AVX modes.
>>       (ix86_expand_vector_init_duplicate): Likewise.
>>       (ix86_expand_vector_init_one_nonzero): Likewise.
>>       (ix86_expand_vector_init_one_var): Likewise.
>>       (ix86_expand_vector_init_concat): Likewise.
>>       (ix86_expand_vector_init_general): Likewise.
>>       (ix86_expand_vector_set): Likewise.
>>       (ix86_vector_mode_supported_p): Likewise.
>>       (x86_extended_reg_mentioned_p): Check INSN_P before using
>>       PATTERN.
>>
>>       * config/i386/i386-c.c (ix86_target_macros_internal): Handle
>>       OPTION_MASK_ISA_AVX and OPTION_MASK_ISA_FMA.
>>
>>       * config/i386/i386.h (TARGET_AVX): New.
>>       (TARGET_FMA): Likewise.
>>       (TARGET_CPU_CPP_BUILTINS): Handle TARGET_AVX and TARGET_FMA.
>>       (BIGGEST_ALIGNMENT): Set to 256 for TARGET_AVX.
>>       (VALID_AVX256_REG_MODE): New.
>>       (AVX256_VEC_FLOAT_MODE_P): Likewise.
>>       (AVX_FLOAT_MODE_P): Likewise.
>>       (AVX128_VEC_FLOAT_MODE_P): Likewise.
>>       (AVX256_VEC_FLOAT_MODE_P): Likewise.
>>       (AVX_VEC_FLOAT_MODE_P): Likewise.
>>       (ASM_OUTPUT_AVX_PREFIX): Likewise.
>>       (ASM_OUTPUT_OPCODE): Likewise.
>>       (UNITS_PER_SIMD_WORD): Add a FIXME for 32byte vectorizer
>>       support.
>>       (SSE_REG_MODE_P): Allow 256bit vector modes.
>>       (ix86_args): Add a warn_avx field.
>>
>>       * config/i386/i386.md (UNSPEC_PCMP): New.
>>       (UNSPEC_VPERMIL): Likewise.
>>       (UNSPEC_VPERMIL2): Likewise.
>>       (UNSPEC_VPERMIL2F128): Likewise.
>>       (UNSPEC_MASKLOAD): Likewise.
>>       (UNSPEC_MASKSTORE): Likewise.
>>       (UNSPEC_CAST): Likewise.
>>       (UNSPEC_VTESTP): Likewise.
>>       (UNSPECV_VZEROALL): Likewise.
>>       (UNSPECV_VZEROUPPER): Likewise.
>>       (XMM0_REG): Likewise.
>>       (XMM1_REG): Likewise.
>>       (XMM2_REG): Likewise.
>>       (XMM3_REG): Likewise.
>>       (XMM4_REG): Likewise.
>>       (XMM5_REG): Likewise.
>>       (XMM6_REG): Likewise.
>>       (XMM8_REG): Likewise.
>>       (XMM9_REG): Likewise.
>>       (XMM10_REG): Likewise.
>>       (XMM11_REG): Likewise.
>>       (XMM12_REG): Likewise.
>>       (XMM13_REG): Likewise.
>>       (XMM14_REG): Likewise.
>>       (XMM15_REG): Likewise.
>>       (prefix): Likewise.
>>       (prefix_vex_imm8): Likewise.
>>       (prefix_vex_w): Likewise.
>>       (length_vex): Likewise.
>>       (maxmin): Likewise.
>>       (movoi): Likewise.
>>       (*avx_ashlti3): Likewise.
>>       (*avx_lshrti3): Likewise.
>>       (*avx_setcc<mode>): Likewise.
>>       (*fop_<mode>_comm_mixed_avx): Likewise.
>>       (*fop_<mode>_comm_avx): Likewise.
>>       (*fop_<mode>_1_mixed_avx): Likewise.
>>       (*fop_<mode>_1_avx): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_ieee_smin<mode>3): Likewise.
>>       (*avx_ieee_smax<mode>3): Likewise.
>>       (mode): Add OI, V8SF and V4DF.
>>       (length): Support VEX prefix.
>>       (*cmpfp_i_mixed): Set prefix attribute.
>>       (*cmpfp_i_sse): Likewise.
>>       (*cmpfp_iu_mixed): Likewise.
>>       (*cmpfp_iu_sse): Likewise.
>>       (*movsi_1): Support AVX.
>>       (*movdi_2): Likewise.
>>       (*movdi_1_rex64): Likewise.
>>       (*movti_internal): Likewise.
>>       (*movti_rex64): Likewise.
>>       (*movsf_1): Likewise.
>>       (*movdf_nointeger): Likewise.
>>       (*movdf_integer_rex64): Likewise.
>>       (*movtf_internal): Likewise.
>>       (zero_extendsidi2_32): Likewise.
>>       (zero_extendsidi2_rex64): Likewise.
>>       (*extendsfdf2_mixed): Likewise.
>>       (*extendsfdf2_sse): Likewise.
>>       (*truncdfsf_fast_mixed): Likewise.
>>       (*truncdfsf_fast_sse): Likewise.
>>       (*truncdfsf_mixed): Likewise.
>>       (fix_trunc<mode>di_sse): Likewise.
>>       (fix_trunc<mode>si_sse): Likewise.
>>       (*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit): Likewise.
>>       (*float<SSEMODEI24:mode><MODEF:mode>2_mixed_nointerunit): Likewise.
>>       (*float<SSEMODEI24:mode><MODEF:mode>2_sse_interunit): Likewise.
>>       (*float<SSEMODEI24:mode><MODEF:mode>2_sse_nointerunit): Likewise.
>>       (*rcpsf2_sse): Likewise.
>>       (*rsqrtsf2_sse): Likewise.
>>       (*sqrt<mode>2_sse): Likewise.
>>       (sse4_1_round<mode>2): Likewise.
>>       (*sse_prologue_save_insn): Disallow REX prefix for AVX.
>>       Support AVX.  Set length attribute properly for AVX.
>>
>>       * config/i386/i386-modes.def (VECTOR_MODES (INT, 32)): New.
>>       (VECTOR_MODES (FLOAT, 32)): Likewise.
>>       (VECTOR_MODE (INT, DI, 8)): Likewise.
>>       (VECTOR_MODE (INT, HI, 32)): Likewise.
>>       (VECTOR_MODE (INT, QI, 64)): Likewise.
>>       (VECTOR_MODE (FLOAT, DF, 8)): Likewise.
>>       (VECTOR_MODE (FLOAT, SF, 16)): Likewise.
>>       (VECTOR_MODE (INT, DI, 4)): Removed.
>>       (VECTOR_MODE (INT, SI, 8)): Likewise.
>>       (VECTOR_MODE (INT, HI, 16)): Likewise.
>>       (VECTOR_MODE (INT, QI, 32)): Likewise.
>>       (VECTOR_MODE (FLOAT, SF, 8)): Likewise.
>>       (INT_MODE (OI, 32)): Likewise.
>>
>>       * config/i386/i386.opt (mavx): New.
>>       (mfma): Likewise.
>>
>>       * config/i386/i386-protos.h (ix86_attr_length_vex_default): New.
>>
>>       * config/i386/mmx.md (*mov<mode>_internal_rex64): Support AVX.
>>       (*mov<mode>_internal_avx): New.
>>       (*movv2sf_internal_rex64_avx): Likewise.
>>       (*movv2sf_internal_avx): Likewise.
>>
>>       * config/i386/predicates.md (const_4_to_5_operand): New.
>>       (const_6_to_7_operand): Likewise.
>>       (const_8_to_11_operand): Likewise.
>>       (const_12_to_15_operand): Likewise.
>>       (avx_comparison_float_operator): Likewise.
>>
>>       * config/i386/sse.md (AVX256MODEI): New.
>>       (AVX256MODE): Likewise.
>>       (AVXMODEQI): Likewise.
>>       (AVXMODE): Likewise.
>>       (AVX256MODEF2P): Likewise.
>>       (AVX256MODE2P): Likewise.
>>       (AVX256MODE4P): Likewise.
>>       (AVX256MODE8P): Likewise.
>>       (AVXMODEF2P): Likewise.
>>       (AVXMODEF4P): Likewise.
>>       (AVXMODEDCVTDQ2PS): Likewise.
>>       (AVXMODEDCVTPS2DQ): Likewise.
>>       (avxvecmode): Likewise.
>>       (avxvecpsmode): Likewise.
>>       (avxhalfvecmode): Likewise.
>>       (avxscalarmode): Likewise.
>>       (avxcvtvecmode): Likewise.
>>       (avxpermvecmode): Likewise.
>>       (avxmodesuffixf2c): Likewise.
>>       (avxmodesuffixp): Likewise.
>>       (avxmodesuffixs): Likewise.
>>       (avxmodesuffix): Likewise.
>>       (vpermilbits): Likewise.
>>       (pinsrbits): Likewise.
>>       (mov<mode>): Likewise.
>>       (*mov<mode>_internal): Likewise.
>>       (push<mode>1): Likewise.
>>       (movmisalign<mode>): Likewise.
>>       (avx_movup<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_movdqu<avxmodesuffix>): Likewise.
>>       (avx_lddqu<avxmodesuffix>): Likewise.
>>       (<plusminus_insn><mode>3): Likewise.
>>       (*avx_<plusminus_insn><mode>3): Likewise.
>>       (*avx_vm<plusminus_insn><mode>3): Likewise.
>>       (mul<mode>3): Likewise.
>>       (*avx_mul<mode>3): Likewise.
>>       (*avx_vmmul<mode>3): Likewise.
>>       (divv8sf3): Likewise.
>>       (divv4df3): Likewise.
>>       (avx_div<mode>3): Likewise.
>>       (*avx_div<mode>3): Likewise.
>>       (*avx_vmdiv<mode>3): Likewise.
>>       (avx_rcpv8sf2): Likewise.
>>       (*avx_vmrcpv4sf2): Likewise.
>>       (sqrtv8sf2): Likewise.
>>       (avx_sqrtv8sf2): Likewise.
>>       (*avx_vmsqrt<mode>2): Likewise.
>>       (rsqrtv8sf2): Likewise.
>>       (avx_rsqrtv8sf2): Likewise.
>>       (*avx_vmrsqrtv4sf2): Likewise.
>>       (<code><mode>3): Likewise.
>>       (*avx_<code><mode>3_finite): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_vm<code><mode>3): Likewise.
>>       (*avx_ieee_smin<mode>3): Likewise.
>>       (*avx_ieee_smax<mode>3): Likewise.
>>       (avx_addsubv8sf3): Likewise.
>>       (avx_addsubv4df3): Likewise.
>>       (*avx_addsubv4sf3): Likewise.
>>       (*avx_addsubv2df3): Likewise.
>>       (avx_h<plusminus_insn>v4df3): Likewise.
>>       (avx_h<plusminus_insn>v8sf3): Likewise.
>>       (*avx_h<plusminus_insn>v4sf3): Likewise.
>>       (*avx_h<plusminus_insn>v2df3): Likewise.
>>       (avx_cmpp<avxmodesuffixf2c><mode>3): Likewise.
>>       (avx_cmps<ssemodesuffixf2c><mode>3): Likewise.
>>       (*avx_maskcmp<mode>3): Likewise.
>>       (avx_nand<mode>3): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_nand<mode>3): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_cvtsi2ss): Likewise.
>>       (*avx_cvtsi2ssq): Likewise.
>>       (*avx_cvtsi2sd): Likewise.
>>       (*avx_cvtsi2sdq): Likewise.
>>       (*avx_cvtsd2ss): Likewise.
>>       (avx_cvtss2sd): Likewise.
>>       (avx_cvtdq2ps<avxmodesuffix>): Likewise.
>>       (avx_cvtps2dq<avxmodesuffix>): Likewise.
>>       (avx_cvttps2dq<avxmodesuffix>): Likewise.
>>       (*avx_cvtsi2sd): Likewise.
>>       (*avx_cvtsi2sdq): Likewise.
>>       (avx_cvtdq2pd256): Likewise.
>>       (avx_cvtpd2dq256): Likewise.
>>       (avx_cvttpd2dq256): Likewise.
>>       (*avx_cvtsd2ss): Likewise.
>>       (*avx_cvtss2sd): Likewise.
>>       (avx_cvtpd2ps256): Likewise.
>>       (avx_cvtps2pd256): Likewise.
>>       (*avx_movhlps): Likewise.
>>       (*avx_movlhps): Likewise.
>>       (avx_unpckhps256): Likewise.
>>       (*avx_unpckhps): Likewise.
>>       (avx_unpcklps256): Likewise.
>>       (*avx_unpcklps): Likewise.
>>       (avx_movshdup256): Likewise.
>>       (avx_movsldup256): Likewise.
>>       (avx_shufps256): Likewise.
>>       (avx_shufps256_1): Likewise.
>>       (*avx_shufps_<mode>): Likewise.
>>       (*avx_loadhps): Likewise.
>>       (*avx_storelps): Likewise.
>>       (*avx_loadlps): Likewise.
>>       (*avx_movss): Likewise.
>>       (*vec_dupv4sf_avx): Likewise.
>>       (*vec_concatv2sf_avx): Likewise.
>>       (*vec_concatv4sf_avx): Likewise.
>>       (*vec_setv4sf_0_avx): Likewise.
>>       (*vec_setv4sf_avx): Likewise.
>>       (*avx_insertps): Likewise.
>>       (avx_vextractf128<mode>): Likewise.
>>       (vec_extract_lo_<mode>): Likewise.
>>       (vec_extract_hi_<mode>): Likewise.
>>       (vec_extract_lo_<mode>): Likewise.
>>       (vec_extract_hi_<mode>): Likewise.
>>       (vec_extract_lo_v16hi): Likewise.
>>       (vec_extract_hi_v16hi): Likewise.
>>       (vec_extract_lo_v32qi): Likewise.
>>       (vec_extract_hi_v32qi): Likewise.
>>       (avx_unpckhpd256): Likewise.
>>       (*avx_unpckhpd): Likewise.
>>       (avx_movddup256): Likewise.
>>       (*avx_movddup): Likewise.
>>       (avx_unpcklpd256): Likewise.
>>       (*avx_unpcklpd): Likewise.
>>       (avx_shufpd256): Likewise.
>>       (avx_shufpd256_1): Likewise.
>>       (*avx_punpckhqdq): Likewise.
>>       (*avx_punpcklqdq): Likewise.
>>       (*avx_shufpd_<mode>): Likewise.
>>       (*avx_storehpd): Likewise.
>>       (*avx_loadhpd): Likewise.
>>       (*avx_loadlpd): Likewise.
>>       (*avx_movsd): Likewise.
>>       (*vec_concatv2df_avx): Likewise.
>>       (*avx_<plusminus_insn><mode>3): Likewise.
>>       (*avx_<plusminus_insn><mode>3): Likewise.
>>       (*avx_mulv8hi3): Likewise.
>>       (*avxv8hi3_highpart): Likewise.
>>       (*avx_umulv8hi3_highpart): Likewise.
>>       (*avx_umulv2siv2di3): Likewise.
>>       (*avx_mulv2siv2di3): Likewise.
>>       (*avx_pmaddwd): Likewise.
>>       (*avx_mulv4si3): Likewise.
>>       (*avx_ashr<mode>3): Likewise.
>>       (*avx_lshr<mode>3): Likewise.
>>       (*avx_ashl<mode>3): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_eq<mode>3): Likewise.
>>       (*avx_gt<mode>3): Likewise.
>>       (*avx_nand<mode>3): Likewise.
>>       (*avx_nand<mode>3): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_<code><mode>3): Likewise.
>>       (*avx_packsswb): Likewise.
>>       (*avx_packssdw): Likewise.
>>       (*avx_packuswb): Likewise.
>>       (*avx_punpckhbw): Likewise.
>>       (*avx_punpcklbw): Likewise.
>>       (*avx_punpckhwd): Likewise.
>>       (*avx_punpcklwd): Likewise.
>>       (*avx_punpckhdq): Likewise.
>>       (*avx_punpckldq): Likewise.
>>       (*avx_pinsr<avxmodesuffixs>): Likewise.
>>       (*avx_pinsrq): Likewise.
>>       (*avx_loadld): Likewise.
>>       (*vec_extractv2di_1_rex64_avx): Likewise.
>>       (*vec_extractv2di_1_avx): Likewise.
>>       (*vec_dupv2di_avx): Likewise.
>>       (*vec_concatv2si_avx): Likewise.
>>       (*vec_concatv4si_1_avx): Likewise.
>>       (*vec_concatv2di_avx): Likewise.
>>       (*vec_concatv2di_rex64_avx): Likewise.
>>       (*avx_uavgv16qi3): Likewise.
>>       (*avx_uavgv8hi3): Likewise.
>>       (*avx_psadbw): Likewise.
>>       (avx_movmskp<avxmodesuffixf2c>256): Likewise.
>>       (*avx_phaddwv8hi3): Likewise.
>>       (*avx_phadddv4si3): Likewise.
>>       (*avx_phaddswv8hi3): Likewise.
>>       (*avx_phsubwv8hi3): Likewise.
>>       (*avx_phsubdv4si3): Likewise.
>>       (*avx_phsubswv8hi3): Likewise.
>>       (*avx_pmaddubsw128): Likewise.
>>       (*avx_pmulhrswv8hi3): Likewise.
>>       (*avx_pshufbv16qi3): Likewise.
>>       (*avx_psign<mode>3): Likewise.
>>       (*avx_palignrti): Likewise.
>>       (avx_blendp<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_blendvp<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_dpp<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (*avx_mpsadbw): Likewise.
>>       (*avx_packusdw): Likewise.
>>       (*avx_pblendvb): Likewise.
>>       (*avx_pblendw): Likewise.
>>       (avx_vtestp<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_ptest256): Likewise.
>>       (avx_roundp<avxmodesuffixf2c>256): Likewise.
>>       (*avx_rounds<ssemodesuffixf2c>): Likewise.
>>       (*avx_aesenc): Likewise.
>>       (*avx_aesenclast): Likewise.
>>       (*avx_aesdec): Likewise.
>>       (*avx_aesdeclast): Likewise.
>>       (avx_vzeroupper): Likewise.
>>       (avx_vzeroupper_rex64): Likewise.
>>       (avx_vpermil<mode>): Likewise.
>>       (avx_vpermilvar<mode>3): Likewise.
>>       (avx_vpermil2<mode>3): Likewise.
>>       (avx_vperm2f128<mode>3): Likewise.
>>       (avx_vbroadcasts<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_vbroadcastss256): Likewise.
>>       (avx_vbroadcastf128_p<avxmodesuffixf2c>256): Likewise.
>>       (avx_vinsertf128<mode>): Likewise.
>>       (vec_set_lo_<mode>): Likewise.
>>       (vec_set_hi_<mode>): Likewise.
>>       (vec_set_lo_<mode>): Likewise.
>>       (vec_set_hi_<mode>): Likewise.
>>       (vec_set_lo_v16hi): Likewise.
>>       (vec_set_hi_v16hi): Likewise.
>>       (vec_set_lo_v32qi): Likewise.
>>       (vec_set_hi_v32qi): Likewise.
>>       (avx_maskloadp<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_maskstorep<avxmodesuffixf2c><avxmodesuffix>): Likewise.
>>       (avx_<avxmodesuffixp><avxmodesuffix>_<avxmodesuffixp>): Likewise.
>>       (avx_<avxmodesuffixp>_<avxmodesuffixp><avxmodesuffix>): Likewise.
>>       (vec_init<mode>): Likewise.
>>       (*vec_concat<mode>_avx): Likewise.
>>       (blendbits): Support V8SF and V4DF.
>>       (sse2_movq128): Support AVX.
>>       (<sse>_movnt<mode>): Likewise.
>>       (sse2_movntv2di): Likewise.
>>       (sse_rcpv4sf2): Likewise.
>>       (sse_sqrtv4sf2): Likewise.
>>       (sse_rsqrtv4sf2): Likewise.
>>       (<sse>_comi): Likewise.
>>       (<sse>_ucomi): Likewise.
>>       (sse_cvtss2si): Likewise.
>>       (sse_cvtss2si_2): Likewise.
>>       (sse_cvtss2siq): Likewise.
>>       (sse_cvtss2siq_2): Likewise.
>>       (sse_cvttss2si): Likewise.
>>       (sse_cvttss2siq): Likewise.
>>       (sse2_cvtsd2si): Likewise.
>>       (sse2_cvtsd2si_2): Likewise.
>>       (sse2_cvtsd2siq): Likewise.
>>       (sse2_cvtsd2siq_2): Likewise.
>>       (sse2_cvttsd2si): Likewise.
>>       (sse2_cvttsd2siq): Likewise.
>>       (sse2_cvtdq2pd): Likewise.
>>       (*sse2_cvtpd2dq): Likewise.
>>       (*sse2_cvttpd2dq): Likewise.
>>       (*sse2_cvtpd2ps): Likewise.
>>       (sse2_cvtps2pd): Likewise.
>>       (sse3_movshdup): Likewise.
>>       (sse3_movsldup): Likewise.
>>       (sse_storehps): Likewise.
>>       (*sse4_1_extractps): Likewise.
>>       (sse2_storelpd): Likewise.
>>       (vec_dupv2df_sse3): Likewise.
>>       (*vec_concatv2df_sse3): Likewise.
>>       (*sse4_1_pextrb): Likewise.
>>       (*sse4_1_pextrb_memory): Likewise.
>>       (*sse2_pextrw): Likewise.
>>       (*sse4_1_pextrw_memory): Likewise.
>>       (*sse4_1_pextrd): Likewise.
>>       (*sse4_1_pextrq): Likewise.
>>       (sse2_pshufd_1): Likewise.
>>       (sse2_pshuflw_1): Likewise.
>>       (sse2_pshufhw_1): Likewise.
>>       (*sse2_storeq_rex64): Likewise.
>>       (*vec_dupv4si): Likewise.
>>       (<sse>_movmskp<ssemodesuffixf2c>): Likewise.
>>       (sse2_pmovmskb): Likewise.
>>       (*sse2_maskmovdqu): Likewise.
>>       (*sse2_maskmovdqu_rex64): Likewise.
>>       (sse_ldmxcsr): Likewise.
>>       (sse_stmxcsr): Likewise.
>>       (abs<mode>2): Likewise.
>>       (sse4_1_movntdqa): Likewise.
>>       (sse4_1_phminposuw): Likewise.
>>       (sse4_1_extendv8qiv8hi2): Likewise.
>>       (*sse4_1_extendv8qiv8hi2): Likewise.
>>       (sse4_1_extendv4qiv4si2): Likewise.
>>       (*sse4_1_extendv4qiv4si2): Likewise.
>>       (sse4_1_extendv2qiv2di2): Likewise.
>>       (*sse4_1_extendv2qiv2di2): Likewise.
>>       (sse4_1_extendv4hiv4si2): Likewise.
>>       (*sse4_1_extendv4hiv4si2): Likewise.
>>       (sse4_1_extendv2hiv2di2): Likewise.
>>       (*sse4_1_extendv2hiv2di2): Likewise.
>>       (sse4_1_extendv2siv2di2): Likewise.
>>       (*sse4_1_extendv2siv2di2): Likewise.
>>       (sse4_1_zero_extendv8qiv8hi2): Likewise.
>>       (*sse4_1_zero_extendv8qiv8hi2): Likewise.
>>       (sse4_1_zero_extendv4qiv4si2): Likewise.
>>       (*sse4_1_zero_extendv4qiv4si2): Likewise.
>>       (sse4_1_zero_extendv2qiv2di2): Likewise.
>>       (*sse4_1_zero_extendv2qiv2di2): Likewise.
>>       (sse4_1_zero_extendv4hiv4si2): Likewise.
>>       (*sse4_1_zero_extendv4hiv4si2): Likewise.
>>       (sse4_1_zero_extendv2hiv2di2): Likewise.
>>       (*sse4_1_zero_extendv2hiv2di2): Likewise.
>>       (sse4_1_zero_extendv2siv2di2): Likewise.
>>       (*sse4_1_zero_extendv2siv2di2): Likewise.
>>       (sse4_1_ptest): Likewise.
>>       (sse4_1_roundp<ssemodesuffixf2c>): Likewise.
>>       (sse4_2_pcmpestri): Likewise.
>>       (sse4_2_pcmpestrm): Likewise.
>>       (sse4_2_pcmpistri): Likewise.
>>       (sse4_2_pcmpistrm): Likewise.
>>       (aesimc): Likewise.
>>       (aeskeygenassist): Likewise.
>>
>> 2008-08-21  Uros Bizjak  <ubizjak@gmail.com>
>>
>>       * config/i386/predicates.md (vzeroall_operation): New.
>>
>>       * config/i386/sse.md (avx_vzeroall): New.
>>       (*avx_vzeroall): Likewise.
>>
>
> The patch may be to big. Here is the compressed one.
>

Here is the updated patch for x86 backend since sse.md is changed
to fix PR target/37191.  OK for trunk?

Thanks.


-- 
H.J.

Attachment: gcc-avx-v1.1-code.patch.bz2
Description: BZip2 compressed data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]