Add Sub-byte element extration and Symmetric-signed saturation narrow support.

gcc/ChangeLog:

	* config/i386/avx10v2auxintrin.h (_mm_cvtss_epi32_epi8): New intrin.
	(_mm_mask_cvtss_epi32_epi8): Ditto.
	(_mm_maskz_cvtss_epi32_epi8): Ditto.
	(_mm_mask_cvtss_epi32_storeu_epi8): Ditto.
	(_mm256_cvtss_epi32_epi8): Ditto.
	(_mm256_mask_cvtss_epi32_epi8): Ditto.
	(_mm256_maskz_cvtss_epi32_epi8): Ditto.
	(_mm256_mask_cvtss_epi32_storeu_epi8): Ditto.
	(_mm512_cvtss_epi32_epi8): Ditto.
	(_mm512_mask_cvtss_epi32_epi8): Ditto.
	(_mm512_maskz_cvtss_epi32_epi8): Ditto.
	(_mm512_mask_cvtss_epi32_storeu_epi8): Ditto.
	(_mm_unpack_epi8): Ditto.
	(_mm_mask_unpack_epi8): Ditto.
	(_mm_maskz_unpack_epi8): Ditto.
	(_mm256_unpack_epi8): Ditto.
	(_mm256_mask_unpack_epi8): Ditto.
	(_mm256_maskz_unpack_epi8): Ditto.
	(_mm512_unpack_epi8): Ditto.
	(_mm512_mask_unpack_epi8): Ditto.
	(_mm512_maskz_unpack_epi8): Ditto.
	* config/i386/i386-builtin-types.def: New function types.
	* config/i386/i386-builtin.def (BDESC): New builtins.
	* config/i386/i386-expand.cc (ix86_expand_args_builtin): Handle new function types
	and reserved immediate check.
	* config/i386/sse.md (vunpackb<mode><mask_name>): New.
	(avx10v2aux_sym_truncatev4siv4qi2): Ditto.
	(*avx10v2aux_sym_truncatev4siv4qi2): Ditto.
	(avx10v2aux_sym_truncatev8siv8qi2): Ditto.
	(*avx10v2aux_sym_truncatev8siv8qi2): Ditto.
	(avx10v2aux_sym_truncatev4siv4qi2_mask): Ditto.
	(*avx10v2aux_sym_truncatev4siv4qi2_mask): Ditto.
	(avx10v2aux_sym_truncatev8siv8qi2_mask): Ditto.
	(*avx10v2aux_sym_truncatev8siv8qi2_mask): Ditto.
	(*avx10v2aux_sym_truncatev16siv16qi2): Ditto.
	(avx10v2aux_sym_truncatev16siv16qi2_mask): Ditto.
	(avx10v2aux_sym_truncatev16siv16qi2_mask_store): Ditto.
	(*avx10v2aux_sym_truncate<mode>v<ssescalarnum>qi2_store_1): Ditto.
	(*avx10v2aux_sym_truncate<mode>v<ssescalarnum>qi2_store_2): Ditto.
	(avx10v2aux_sym_truncate<mode>v<ssescalarnum>qi2_mask_store_1): Ditto.
	(avx10v2aux_sym_truncate<mode>v<ssescalarnum>qi2_mask_store_2): Ditto.

gcc/testsuite/ChangeLog:

	* g++.dg/other/i386-2.C: Add tests for avx10v2aux.
	* g++.dg/other/i386-3.C: Likewise.
	* gcc.target/i386/avx-1.c: Likewise.
	* gcc.target/i386/funcspec-56.inc: Likewise.
	* gcc.target/i386/sse-12.c: Likewise.
	* gcc.target/i386/sse-13.c: Likewise.
	* gcc.target/i386/sse-14.c: Likewise.
	* gcc.target/i386/sse-22.c: Likewise.
	* gcc.target/i386/sse-23.c: Likewise.
	* lib/target-supports.exp: Add more checks for avx10v2aux.
	* gcc.target/i386/avx10v2aux-convert-1i.c: New test.
	* gcc.target/i386/avx10v2aux-convert-1j.c: New test.
	* gcc.target/i386/avx10v2aux-convert-1k.c: New test.
	* gcc.target/i386/avx10v2aux-convert-1l.c: New test.

Co-authored-by: Venkataramanan Kumar <Venkataramanan.Kumar@amd.com>
Co-authored-by: Haochen Jiang <haochen.jiang@intel.com>
19 files changed