AVX512FP16: Add vfcmaddcph/vfmaddcph/vfcmulcph/vfmulcph

gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (_mm512_fcmadd_pch):
	New intrinsic.
	(_mm512_mask_fcmadd_pch): Likewise.
	(_mm512_mask3_fcmadd_pch): Likewise.
	(_mm512_maskz_fcmadd_pch): Likewise.
	(_mm512_fmadd_pch): Likewise.
	(_mm512_mask_fmadd_pch): Likewise.
	(_mm512_mask3_fmadd_pch): Likewise.
	(_mm512_maskz_fmadd_pch): Likewise.
	(_mm512_fcmadd_round_pch): Likewise.
	(_mm512_mask_fcmadd_round_pch): Likewise.
	(_mm512_mask3_fcmadd_round_pch): Likewise.
	(_mm512_maskz_fcmadd_round_pch): Likewise.
	(_mm512_fmadd_round_pch): Likewise.
	(_mm512_mask_fmadd_round_pch): Likewise.
	(_mm512_mask3_fmadd_round_pch): Likewise.
	(_mm512_maskz_fmadd_round_pch): Likewise.
	(_mm512_fcmul_pch): Likewise.
	(_mm512_mask_fcmul_pch): Likewise.
	(_mm512_maskz_fcmul_pch): Likewise.
	(_mm512_fmul_pch): Likewise.
	(_mm512_mask_fmul_pch): Likewise.
	(_mm512_maskz_fmul_pch): Likewise.
	(_mm512_fcmul_round_pch): Likewise.
	(_mm512_mask_fcmul_round_pch): Likewise.
	(_mm512_maskz_fcmul_round_pch): Likewise.
	(_mm512_fmul_round_pch): Likewise.
	(_mm512_mask_fmul_round_pch): Likewise.
	(_mm512_maskz_fmul_round_pch): Likewise.
	* config/i386/avx512fp16vlintrin.h (_mm_fmadd_pch):
	New intrinsic.
	(_mm_mask_fmadd_pch): Likewise.
	(_mm_mask3_fmadd_pch): Likewise.
	(_mm_maskz_fmadd_pch): Likewise.
	(_mm256_fmadd_pch): Likewise.
	(_mm256_mask_fmadd_pch): Likewise.
	(_mm256_mask3_fmadd_pch): Likewise.
	(_mm256_maskz_fmadd_pch): Likewise.
	(_mm_fcmadd_pch): Likewise.
	(_mm_mask_fcmadd_pch): Likewise.
	(_mm_mask3_fcmadd_pch): Likewise.
	(_mm_maskz_fcmadd_pch): Likewise.
	(_mm256_fcmadd_pch): Likewise.
	(_mm256_mask_fcmadd_pch): Likewise.
	(_mm256_mask3_fcmadd_pch): Likewise.
	(_mm256_maskz_fcmadd_pch): Likewise.
	(_mm_fmul_pch): Likewise.
	(_mm_mask_fmul_pch): Likewise.
	(_mm_maskz_fmul_pch): Likewise.
	(_mm256_fmul_pch): Likewise.
	(_mm256_mask_fmul_pch): Likewise.
	(_mm256_maskz_fmul_pch): Likewise.
	(_mm_fcmul_pch): Likewise.
	(_mm_mask_fcmul_pch): Likewise.
	(_mm_maskz_fcmul_pch): Likewise.
	(_mm256_fcmul_pch): Likewise.
	(_mm256_mask_fcmul_pch): Likewise.
	(_mm256_maskz_fcmul_pch): Likewise.
	* config/i386/i386-builtin-types.def (V8HF_FTYPE_V8HF_V8HF_V8HF,
	V8HF_FTYPE_V16HF_V16HF_V16HF, V16HF_FTYPE_V16HF_V16HF_V16HF_UQI,
	V32HF_FTYPE_V32HF_V32HF_V32HF_INT,
	V32HF_FTYPE_V32HF_V32HF_V32HF_UHI_INT): Add new builtin types.
	* config/i386/i386-builtin.def: Add new builtins.
	* config/i386/i386-expand.c: Handle new builtin types.
	* config/i386/subst.md (SUBST_CV): New.
	(maskc_name): Ditto.
	(maskc_operand3): Ditto.
	(maskc): Ditto.
	(sdc_maskz_name): Ditto.
	(sdc_mask_op4): Ditto.
	(sdc_mask_op5): Ditto.
	(sdc_mask_mode512bit_condition): Ditto.
	(sdc): Ditto.
	(round_maskc_operand3): Ditto.
	(round_sdc_mask_operand4): Ditto.
	(round_maskc_op3): Ditto.
	(round_sdc_mask_op4): Ditto.
	(round_saeonly_sdc_mask_operand5): Ditto.
	* config/i386/sse.md (unspec): Add complex fma unspecs.
	(avx512fmaskcmode): New.
	(UNSPEC_COMPLEX_F_C_MA): Ditto.
	(UNSPEC_COMPLEX_F_C_MUL): Ditto.
	(complexopname): Ditto.
	(<avx512>_fmaddc_<mode>_maskz<round_expand_name>): New expander.
	(<avx512>_fcmaddc_<mode>_maskz<round_expand_name>): Ditto.
	(fma_<complexopname>_<mode><sdc_maskz_name><round_name>): New
	define insn.
	(<avx512>_<complexopname>_<mode>_mask<round_name>): Ditto.
	(<avx512>_<complexopname>_<mode><maskc_name><round_name>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx-1.c: Add test for new builtins.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/sse-14.c: Add test for new intrinsics.
	* gcc.target/i386/sse-22.c: Ditto.
12 files changed