Commit b289d712 by Alexander Ivchenko Committed by Kirill Yukhin

avx512cd-check.h: New file.

testsuite/

	* gcc.target/i386/avx512cd-check.h: New file.
	* gcc.target/i386/avx512cd-vpbroadcastmb2q-1.c: Ditto.
	* gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c: Ditto.
	* gcc.target/i386/avx512cd-vpbroadcastmw2d-1.c: Ditto.
	* gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c: Ditto.
	* gcc.target/i386/avx512cd-vpconflictd-1.c: Ditto.
	* gcc.target/i386/avx512cd-vpconflictd-2.c: Ditto.
	* gcc.target/i386/avx512cd-vpconflictq-1.c: Ditto.
	* gcc.target/i386/avx512cd-vpconflictq-2.c: Ditto.
	* gcc.target/i386/avx512cd-vplzcntd-1.c: Ditto.
	* gcc.target/i386/avx512cd-vplzcntd-2.c: Ditto.
	* gcc.target/i386/avx512cd-vplzcntq-1.c: Ditto.
	* gcc.target/i386/avx512cd-vplzcntq-2.c: Ditto.
	* gcc.target/i386/avx512cd-vptestnmd-1.c: Ditto.
	* gcc.target/i386/avx512cd-vptestnmd-2.c: Ditto.
	* gcc.target/i386/avx512cd-vptestnmq-1.c: Ditto.
	* gcc.target/i386/avx512cd-vptestnmq-2.c: Ditto.
	* gcc.target/i386/avx512er-vexp2pd-1.c: Ditto.
	* gcc.target/i386/avx512er-vexp2pd-2.c: Ditto.
	* gcc.target/i386/avx512er-vexp2ps-1.c: Ditto.
	* gcc.target/i386/avx512er-vexp2ps-2.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28pd-1.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28pd-2.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28ps-1.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28ps-2.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28pd-1.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28pd-2.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28ps-1.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28ps-2.c: Ditto.
	* gcc.target/i386/avx512f-broadcast-gpr-1.c: Ditto.
	* gcc.target/i386/avx512f-broadcast-gpr-2.c: Ditto.
	* gcc.target/i386/avx512f-ceil-sfix-vec-1.c: Ditto.
	* gcc.target/i386/avx512f-ceil-sfix-vec-2.c: Ditto.
	* gcc.target/i386/avx512f-dummy.c: Ditto.
	* gcc.target/i386/avx512f-floor-sfix-vec-1.c: Ditto.
	* gcc.target/i386/avx512f-floor-sfix-vec-2.c: Ditto.
	* gcc.target/i386/avx512f-gather-1.c: Ditto.
	* gcc.target/i386/avx512f-gather-2.c: Ditto.
	* gcc.target/i386/avx512f-gather-3.c: Ditto.
	* gcc.target/i386/avx512f-gather-4.c: Ditto.
	* gcc.target/i386/avx512f-gather-5.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherpd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherpd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherps512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherps512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherq512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32gatherq512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterpd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterpd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterps512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterps512-2.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterq512-1.c: Ditto.
	* gcc.target/i386/avx512f-i32scatterq512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherpd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherpd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherps512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherps512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherq512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64gatherq512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterpd512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterpd512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterps512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterps512-2.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterq512-1.c: Ditto.
	* gcc.target/i386/avx512f-i64scatterq512-2.c: Ditto.
	* gcc.target/i386/avx512f-inline-asm.c: Ditto.
	* gcc.target/i386/avx512f-kandnw-1.c: Ditto.
	* gcc.target/i386/avx512f-kandw-1.c: Ditto.
	* gcc.target/i386/avx512f-klogic-2.c: Ditto.
	* gcc.target/i386/avx512f-knotw-1.c: Ditto.
	* gcc.target/i386/avx512f-kortestw-1.c: Ditto.
	* gcc.target/i386/avx512f-kortestw-2.c: Ditto.
	* gcc.target/i386/avx512f-korw-1.c: Ditto.
	* gcc.target/i386/avx512f-kunpckbw-1.c: Ditto.
	* gcc.target/i386/avx512f-kxnorw-1.c: Ditto.
	* gcc.target/i386/avx512f-kxorw-1.c: Ditto.
	* gcc.target/i386/avx512f-rounding.c: Ditto.
	* gcc.target/i386/avx512f-set-v16sf-1.c: Ditto.
	* gcc.target/i386/avx512f-set-v16sf-2.c: Ditto.
	* gcc.target/i386/avx512f-set-v16sf-3.c: Ditto.
	* gcc.target/i386/avx512f-set-v16sf-4.c: Ditto.
	* gcc.target/i386/avx512f-set-v16sf-5.c: Ditto.
	* gcc.target/i386/avx512f-set-v16si-1.c: Ditto.
	* gcc.target/i386/avx512f-set-v16si-2.c: Ditto.
	* gcc.target/i386/avx512f-set-v16si-3.c: Ditto.
	* gcc.target/i386/avx512f-set-v16si-4.c: Ditto.
	* gcc.target/i386/avx512f-set-v16si-5.c: Ditto.
	* gcc.target/i386/avx512f-set-v8df-1.c: Ditto.
	* gcc.target/i386/avx512f-set-v8df-2.c: Ditto.
	* gcc.target/i386/avx512f-set-v8df-3.c: Ditto.
	* gcc.target/i386/avx512f-set-v8df-4.c: Ditto.
	* gcc.target/i386/avx512f-set-v8df-5.c: Ditto.
	* gcc.target/i386/avx512f-set-v8di-1.c: Ditto.
	* gcc.target/i386/avx512f-set-v8di-2.c: Ditto.
	* gcc.target/i386/avx512f-set-v8di-3.c: Ditto.
	* gcc.target/i386/avx512f-set-v8di-4.c: Ditto.
	* gcc.target/i386/avx512f-set-v8di-5.c: Ditto.
	* gcc.target/i386/avx512f-setzero-pd-1.c: Ditto.
	* gcc.target/i386/avx512f-setzero-ps-1.c: Ditto.
	* gcc.target/i386/avx512f-setzero-si512-1.c: Ditto.
	* gcc.target/i386/avx512f-vaddpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vaddpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vaddps-1.c: Ditto.
	* gcc.target/i386/avx512f-vaddps-2.c: Ditto.
	* gcc.target/i386/avx512f-vaddsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vaddsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vaddss-1.c: Ditto.
	* gcc.target/i386/avx512f-vaddss-2.c: Ditto.
	* gcc.target/i386/avx512f-valignd-1.c: Ditto.
	* gcc.target/i386/avx512f-valignd-2.c: Ditto.
	* gcc.target/i386/avx512f-valignq-1.c: Ditto.
	* gcc.target/i386/avx512f-valignq-2.c: Ditto.
	* gcc.target/i386/avx512f-vblendmpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vblendmpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vblendmps-1.c: Ditto.
	* gcc.target/i386/avx512f-vblendmps-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastf32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastf32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastf64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastf64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcasti32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcasti32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcasti64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcasti64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastss-1.c: Ditto.
	* gcc.target/i386/avx512f-vbroadcastss-2.c: Ditto.
	* gcc.target/i386/avx512f-vcmppd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcmppd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcmpps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcmpps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcmpsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcmpsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcmpss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcmpss-2.c: Ditto.
	* gcc.target/i386/avx512f-vcomisd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcomiss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcompresspd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcompresspd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcompressps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcompressps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtdq2pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtdq2pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtdq2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtdq2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2dq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2dq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2udq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtpd2udq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtph2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtph2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2dq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2dq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2ph-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2ph-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2udq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtps2udq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2ss-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2usi-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2usi-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2usi64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2usi64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2sd64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2ss64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2sd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2sd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2usi-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2usi-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2usi64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2usi64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttpd2dq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttpd2dq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttpd2udq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttpd2udq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttps2dq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttps2dq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttps2udq-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttps2udq-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2si-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2si64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2usi-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2usi-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2usi64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttsd2usi64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2si-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2si64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2usi-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2usi-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2usi64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvttss2usi64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtudq2pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtudq2pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtudq2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtudq2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2sd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2sd-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2sd64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2sd64-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2ss-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2ss64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtusi2ss64-2.c: Ditto.
	* gcc.target/i386/avx512f-vdivpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vdivpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vdivps-1.c: Ditto.
	* gcc.target/i386/avx512f-vdivps-2.c: Ditto.
	* gcc.target/i386/avx512f-vdivsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vdivsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vdivss-1.c: Ditto.
	* gcc.target/i386/avx512f-vdivss-2.c: Ditto.
	* gcc.target/i386/avx512f-vec-init.c: Ditto.
	* gcc.target/i386/avx512f-vec-unpack.c: Ditto.
	* gcc.target/i386/avx512f-vexpandpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vexpandpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vexpandps-1.c: Ditto.
	* gcc.target/i386/avx512f-vexpandps-2.c: Ditto.
	* gcc.target/i386/avx512f-vextractf32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vextractf32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vextractf64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vextractf64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vextracti32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vextracti32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vextracti64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vextracti64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmss-1.c: Ditto.
	* gcc.target/i386/avx512f-vfixupimmss-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXss-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddXXXss-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddsubXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddsubXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddsubXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmaddsubXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXss-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubXXXss-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubaddXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubaddXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubaddXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfmsubaddXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXss-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmaddXXXss-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXps-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXps-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXss-1.c: Ditto.
	* gcc.target/i386/avx512f-vfnmsubXXXss-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetexppd-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetexppd-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpps-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpps-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpss-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetexpss-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantps-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantps-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantss-1.c: Ditto.
	* gcc.target/i386/avx512f-vgetmantss-2.c: Ditto.
	* gcc.target/i386/avx512f-vinsertf32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vinsertf32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vinsertf64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vinsertf64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vinserti32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vinserti32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vinserti64x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vinserti64x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vmaxpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmaxpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmaxps-1.c: Ditto.
	* gcc.target/i386/avx512f-vmaxps-2.c: Ditto.
	* gcc.target/i386/avx512f-vmaxsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmaxsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmaxss-1.c: Ditto.
	* gcc.target/i386/avx512f-vmaxss-2.c: Ditto.
	* gcc.target/i386/avx512f-vminpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vminpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vminps-1.c: Ditto.
	* gcc.target/i386/avx512f-vminps-2.c: Ditto.
	* gcc.target/i386/avx512f-vminsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vminsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vminss-1.c: Ditto.
	* gcc.target/i386/avx512f-vminss-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovapd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovapd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovaps-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovaps-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovddup-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovddup-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqa32-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqa32-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqa64-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqa64-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqu32-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqu32-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqu64-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovdqu64-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovntdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovntdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovntpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovntpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovntps-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovntps-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovshdup-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovshdup-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovsldup-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovsldup-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovss-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovss-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovupd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovupd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmovups-1.c: Ditto.
	* gcc.target/i386/avx512f-vmovups-2.c: Ditto.
	* gcc.target/i386/avx512f-vmulpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmulpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmulps-1.c: Ditto.
	* gcc.target/i386/avx512f-vmulps-2.c: Ditto.
	* gcc.target/i386/avx512f-vmulsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vmulsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vmulss-1.c: Ditto.
	* gcc.target/i386/avx512f-vmulss-2.c: Ditto.
	* gcc.target/i386/avx512f-vpabsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpabsd512-1.c: Ditto.
	* gcc.target/i386/avx512f-vpabsq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpabsq512-1.c: Ditto.
	* gcc.target/i386/avx512f-vpaddd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpaddd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpaddq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpaddq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpandd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpandd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpandnd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpandnd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpandnq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpandnq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpandq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpandq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpblendmd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpblendmd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpblendmq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpblendmq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpbroadcastd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpbroadcastd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpbroadcastq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpbroadcastq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpud-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpud-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpuq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpuq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcompressd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcompressd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpcompressq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcompressq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2d-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2d-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2q-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermi2q-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpdi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpdi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermilps-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermilps-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpsi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermilpsi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermpdi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermpdi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermps-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermps-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermq-imm-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermq-imm-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermq-var-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermq-var-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2d-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2d-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2q-1.c: Ditto.
	* gcc.target/i386/avx512f-vpermt2q-2.c: Ditto.
	* gcc.target/i386/avx512f-vpexpandd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpexpandd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpexpandq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpexpandq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxsq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxsq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxud-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxud-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxuq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmaxuq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpminsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpminsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpminsq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpminsq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpminud-1.c: Ditto.
	* gcc.target/i386/avx512f-vpminud-2.c: Ditto.
	* gcc.target/i386/avx512f-vpminuq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpminuq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovdb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovdb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovdw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovdw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovqw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsdb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsdb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsdw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsdw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsqw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxbd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxbd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxbq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxbq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxwd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxwd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxwq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovsxwq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusdb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusdb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusdw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusdw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqb-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqb-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovusqw-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxbd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxbd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxbq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxbq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxwd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxwd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxwq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmovzxwq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmuldq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmuldq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmulld-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmulld-2.c: Ditto.
	* gcc.target/i386/avx512f-vpmuludq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpmuludq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpord-1.c: Ditto.
	* gcc.target/i386/avx512f-vpord-2.c: Ditto.
	* gcc.target/i386/avx512f-vporq-1.c: Ditto.
	* gcc.target/i386/avx512f-vporq-2.c: Ditto.
	* gcc.target/i386/avx512f-vprold-1.c: Ditto.
	* gcc.target/i386/avx512f-vprold-2.c: Ditto.
	* gcc.target/i386/avx512f-vprolq-1.c: Ditto.
	* gcc.target/i386/avx512f-vprolq-2.c: Ditto.
	* gcc.target/i386/avx512f-vprolvd-1.c: Ditto.
	* gcc.target/i386/avx512f-vprolvd-2.c: Ditto.
	* gcc.target/i386/avx512f-vprolvq-1.c: Ditto.
	* gcc.target/i386/avx512f-vprolvq-2.c: Ditto.
	* gcc.target/i386/avx512f-vprord-1.c: Ditto.
	* gcc.target/i386/avx512f-vprord-2.c: Ditto.
	* gcc.target/i386/avx512f-vprorq-1.c: Ditto.
	* gcc.target/i386/avx512f-vprorq-2.c: Ditto.
	* gcc.target/i386/avx512f-vprorvd-1.c: Ditto.
	* gcc.target/i386/avx512f-vprorvd-2.c: Ditto.
	* gcc.target/i386/avx512f-vprorvq-1.c: Ditto.
	* gcc.target/i386/avx512f-vprorvq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpshufd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpshufd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpslld-1.c: Ditto.
	* gcc.target/i386/avx512f-vpslld-2.c: Ditto.
	* gcc.target/i386/avx512f-vpslldi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpslldi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsllq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsllq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsllqi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsllqi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvq512-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsllvq512-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrad-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrad-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsradi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsradi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsraq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsraq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsraqi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsraqi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsravd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsravd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsravq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsravq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsravq512-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsravq512-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrld-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrld-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrldi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrldi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlqi-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlqi-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvq512-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsrlvq512-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsubd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsubd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpsubq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpsubq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpternlogd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpternlogd-2.c: Ditto.
	* gcc.target/i386/avx512f-vpternlogq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpternlogq-2.c: Ditto.
	* gcc.target/i386/avx512f-vptestmd-1.c: Ditto.
	* gcc.target/i386/avx512f-vptestmd-2.c: Ditto.
	* gcc.target/i386/avx512f-vptestmq-1.c: Ditto.
	* gcc.target/i386/avx512f-vptestmq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckhdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckhdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckhqdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckhqdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckldq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpunpckldq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpunpcklqdq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpunpcklqdq-2.c: Ditto.
	* gcc.target/i386/avx512f-vpxord-1.c: Ditto.
	* gcc.target/i386/avx512f-vpxord-2.c: Ditto.
	* gcc.target/i386/avx512f-vpxorq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpxorq-2.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14sd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14sd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vrcp14ss-2.c: Ditto.
	* gcc.target/i386/avx512f-vrndscalepd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrndscalepd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrndscaleps-1.c: Ditto.
	* gcc.target/i386/avx512f-vrndscaleps-2.c: Ditto.
	* gcc.target/i386/avx512f-vrndscalesd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrndscalesd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrndscaless-1.c: Ditto.
	* gcc.target/i386/avx512f-vrndscaless-2.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14pd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14pd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14ps-1.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14ps-2.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14sd-1.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14sd-2.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vrsqrt14ss-2.c: Ditto.
	* gcc.target/i386/avx512f-vscalefpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vscalefps-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefps-2.c: Ditto.
	* gcc.target/i386/avx512f-vscalefsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vscalefss-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefss-2.c: Ditto.
	* gcc.target/i386/avx512f-vshuff32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vshuff32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vshuff64x2-1.c: Ditto.
	* gcc.target/i386/avx512f-vshuff64x2-2.c: Ditto.
	* gcc.target/i386/avx512f-vshufi32x4-1.c: Ditto.
	* gcc.target/i386/avx512f-vshufi32x4-2.c: Ditto.
	* gcc.target/i386/avx512f-vshufi64x2-1.c: Ditto.
	* gcc.target/i386/avx512f-vshufi64x2-2.c: Ditto.
	* gcc.target/i386/avx512f-vshufpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vshufpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vshufps-1.c: Ditto.
	* gcc.target/i386/avx512f-vshufps-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtps-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtps-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtss-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtss-2.c: Ditto.
	* gcc.target/i386/avx512f-vsubpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vsubpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vsubps-1.c: Ditto.
	* gcc.target/i386/avx512f-vsubps-2.c: Ditto.
	* gcc.target/i386/avx512f-vsubsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vsubsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vsubss-1.c: Ditto.
	* gcc.target/i386/avx512f-vsubss-2.c: Ditto.
	* gcc.target/i386/avx512f-vucomisd-1.c: Ditto.
	* gcc.target/i386/avx512f-vucomiss-1.c: Ditto.
	* gcc.target/i386/avx512f-vunpckhpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vunpckhpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vunpckhps-1.c: Ditto.
	* gcc.target/i386/avx512f-vunpckhps-2.c: Ditto.
	* gcc.target/i386/avx512f-vunpcklpd-1.c: Ditto.
	* gcc.target/i386/avx512f-vunpcklpd-2.c: Ditto.
	* gcc.target/i386/avx512f-vunpcklps-1.c: Ditto.
	* gcc.target/i386/avx512f-vunpcklps-2.c: Ditto.
	* gcc.target/i386/avx512f_cond_move.c: Ditto.
	* gcc.target/i386/avx512f_evex_reg_asm-1.c: Ditto.
	* gcc.target/i386/avx512f_evex_reg_asm-2.c: Ditto.
	* gcc.target/i386/avx512pf-vgatherpf0dps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vgatherpf0qps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vgatherpf1dps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vgatherpf1qps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vscatterpf0dps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vscatterpf0qps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vscatterpf1dps-1.c: Ditto.
	* gcc.target/i386/avx512pf-vscatterpf1qps-1.c: Ditto.
	* gcc.target/i386/sse-12.c: Updated options.
	* gcc.target/i386/sse-13.c: Updated options, added defines for
	__builtin_ia32_addpd512_mask, __builtin_ia32_addps512_mask,
	__builtin_ia32_addsd_mask, __builtin_ia32_addss_mask,
	__builtin_ia32_alignd512_mask, __builtin_ia32_alignq512_mask,
	__builtin_ia32_cmpd512_mask, __builtin_ia32_cmppd512_mask,
	__builtin_ia32_cmpps512_mask, __builtin_ia32_cmpq512_mask,
	__builtin_ia32_cmpsd_mask, __builtin_ia32_cmpss_mask,
	__builtin_ia32_cvtdq2ps512_mask, __builtin_ia32_cvtpd2dq512_mask,
	__builtin_ia32_cvtpd2ps512_mask, __builtin_ia32_cvtpd2udq512_mask,
	__builtin_ia32_cvtps2dq512_mask, __builtin_ia32_cvtps2pd512_mask,
	__builtin_ia32_cvtps2udq512_mask, __builtin_ia32_cvtsd2ss_mask,
	__builtin_ia32_cvtsi2sd64, __builtin_ia32_cvtsi2ss32,
	__builtin_ia32_cvtsi2ss64, __builtin_ia32_cvtss2sd_mask,
	__builtin_ia32_cvttpd2dq512_mask, __builtin_ia32_cvttpd2udq512_mask,
	__builtin_ia32_cvttps2dq512_mask, __builtin_ia32_cvttps2udq512_mask,
	__builtin_ia32_cvtudq2ps512_mask, __builtin_ia32_cvtusi2sd64,
	__builtin_ia32_cvtusi2ss32, __builtin_ia32_cvtusi2ss64,
	__builtin_ia32_divpd512_mask, __builtin_ia32_divps512_mask,
	__builtin_ia32_divsd_mask, __builtin_ia32_divss_mask,
	__builtin_ia32_extractf32x4_mask, __builtin_ia32_extractf64x4_mask,
	__builtin_ia32_extracti32x4_mask, __builtin_ia32_extracti64x4_mask,
	__builtin_ia32_fixupimmpd512_mask, __builtin_ia32_fixupimmpd512_maskz,
	__builtin_ia32_fixupimmps512_mask, __builtin_ia32_fixupimmps512_maskz,
	__builtin_ia32_fixupimmsd_mask, __builtin_ia32_fixupimmsd_maskz,
	__builtin_ia32_fixupimmss_mask, __builtin_ia32_fixupimmss_maskz,
	__builtin_ia32_gatherdiv8df, __builtin_ia32_gatherdiv8di,
	__builtin_ia32_gatherdiv16sf, __builtin_ia32_gatherdiv16si,
	__builtin_ia32_gathersiv16sf, __builtin_ia32_gathersiv16si,
	__builtin_ia32_gathersiv8df, __builtin_ia32_gathersiv8di,
	__builtin_ia32_getexppd512_mask, __builtin_ia32_getexpps512_mask,
	__builtin_ia32_getexpsd128_mask, __builtin_ia32_getexpss128_mask,
	__builtin_ia32_getmantpd512_mask, __builtin_ia32_getmantps512_mask,
	__builtin_ia32_getmantsd_mask, __builtin_ia32_getmantss_mask,
	__builtin_ia32_insertf32x4_mask, __builtin_ia32_insertf64x4_mask,
	__builtin_ia32_inserti32x4_mask, __builtin_ia32_inserti64x4_mask,
	__builtin_ia32_maxpd512_mask, __builtin_ia32_maxps512_mask,
	__builtin_ia32_maxsd_mask, __builtin_ia32_maxss_mask,
	__builtin_ia32_minpd512_mask, __builtin_ia32_minps512_mask,
	__builtin_ia32_minsd_mask, __builtin_ia32_minss_mask,
	__builtin_ia32_mulpd512_mask, __builtin_ia32_mulps512_mask,
	__builtin_ia32_mulsd_mask, __builtin_ia32_mulss_mask,
	__builtin_ia32_permdf512_mask, __builtin_ia32_permdi512_mask,
	__builtin_ia32_prold512_mask, __builtin_ia32_prolq512_mask,
	__builtin_ia32_prord512_mask, __builtin_ia32_prorq512_mask,
	__builtin_ia32_pshufd512_mask, __builtin_ia32_pslldi512_mask,
	__builtin_ia32_psllqi512_mask, __builtin_ia32_psradi512_mask,
	__builtin_ia32_psraqi512_mask, __builtin_ia32_psrldi512_mask,
	__builtin_ia32_psrlqi512_mask, __builtin_ia32_pternlogd512_mask,
	__builtin_ia32_pternlogd512_maskz, __builtin_ia32_pternlogq512_mask,
	__builtin_ia32_pternlogq512_maskz, __builtin_ia32_rndscalepd_mask,
	__builtin_ia32_rndscaleps_mask, __builtin_ia32_rndscalesd_mask,
	__builtin_ia32_rndscaless_mask, __builtin_ia32_scalefpd512_mask,
	__builtin_ia32_scalefps512_mask, __builtin_ia32_scalefsd_mask,
	__builtin_ia32_scalefss_mask, __builtin_ia32_scatterdiv8df,
	__builtin_ia32_scatterdiv8di, __builtin_ia32_scatterdiv16sf,
	__builtin_ia32_scatterdiv16si, __builtin_ia32_scattersiv16sf,
	__builtin_ia32_scattersiv16si, __builtin_ia32_scattersiv8df,
	__builtin_ia32_scattersiv8di, __builtin_ia32_shuf_f32x4_mask,
	__builtin_ia32_shuf_f64x2_mask, __builtin_ia32_shuf_i32x4_mask,
	__builtin_ia32_shuf_i64x2_mask, __builtin_ia32_shufpd512_mask,
	__builtin_ia32_shufps512_mask, __builtin_ia32_sqrtpd512_mask,
	__builtin_ia32_sqrtps512_mask, __builtin_ia32_sqrtsd_mask,
	__builtin_ia32_sqrtss_mask, __builtin_ia32_subpd512_mask,
	__builtin_ia32_subps512_mask, __builtin_ia32_subsd_mask,
	__builtin_ia32_subss_mask, __builtin_ia32_ucmpd512_mask,
	__builtin_ia32_ucmpq512_mask, __builtin_ia32_vcomisd,
	__builtin_ia32_vcomiss, __builtin_ia32_vcvtph2ps512_mask,
	__builtin_ia32_vcvtps2ph512_mask, __builtin_ia32_vcvtsd2si32,
	__builtin_ia32_vcvtsd2si64, __builtin_ia32_vcvtsd2usi32,
	__builtin_ia32_vcvtsd2usi64, __builtin_ia32_vcvtss2si32,
	__builtin_ia32_vcvtss2si64, __builtin_ia32_vcvtss2usi32,
	__builtin_ia32_vcvtss2usi64, __builtin_ia32_vcvttsd2si32,
	__builtin_ia32_vcvttsd2si64, __builtin_ia32_vcvttsd2usi32,
	__builtin_ia32_vcvttsd2usi64, __builtin_ia32_vcvttss2si32,
	__builtin_ia32_vcvttss2si64, __builtin_ia32_vcvttss2usi32,
	__builtin_ia32_vcvttss2usi64, __builtin_ia32_vfmaddpd512_mask,
	__builtin_ia32_vfmaddpd512_mask3, __builtin_ia32_vfmaddpd512_maskz,
	__builtin_ia32_vfmaddps512_mask, __builtin_ia32_vfmaddps512_mask3,
	__builtin_ia32_vfmaddps512_maskz, __builtin_ia32_vfmaddsd3_mask,
	__builtin_ia32_vfmaddsd3_mask3, __builtin_ia32_vfmaddsd3_maskz,
	__builtin_ia32_vfmaddss3_mask, __builtin_ia32_vfmaddss3_mask3,
	__builtin_ia32_vfmaddss3_maskz, __builtin_ia32_vfmaddsubpd512_mask,
	__builtin_ia32_vfmaddsubpd512_mask3,
	__builtin_ia32_vfmaddsubpd512_maskz,
	__builtin_ia32_vfmaddsubps512_mask,
	__builtin_ia32_vfmaddsubps512_mask3,
	__builtin_ia32_vfmaddsubps512_maskz,
	__builtin_ia32_vfmsubaddpd512_mask3,
	__builtin_ia32_vfmsubaddps512_mask3, __builtin_ia32_vfmsubpd512_mask3,
	__builtin_ia32_vfmsubps512_mask3, __builtin_ia32_vfmsubsd3_mask3,
	__builtin_ia32_vfmsubss3_mask3, __builtin_ia32_vfnmaddpd512_mask,
	__builtin_ia32_vfnmaddps512_mask, __builtin_ia32_vfnmsubpd512_mask,
	__builtin_ia32_vfnmsubpd512_mask3, __builtin_ia32_vfnmsubps512_mask,
	__builtin_ia32_vfnmsubps512_mask3, __builtin_ia32_vpermilpd512_mask,
	__builtin_ia32_vpermilps512_mask, __builtin_ia32_exp2ps_mask,
	__builtin_ia32_exp2pd_mask, __builtin_ia32_exp2ps_mask,
	__builtin_ia32_exp2pd_mask, __builtin_ia32_rsqrt28ps_mask,
	__builtin_ia32_rsqrt28pd_mask, __builtin_ia32_gatherpfdps,
	__builtin_ia32_gatherpfqps, __builtin_ia32_scatterpfdps,
	__builtin_ia32_scatterpfqps, __builtin_ia32_addpd512_mask,
	__builtin_ia32_addps512_mask, __builtin_ia32_addsd_mask,
	__builtin_ia32_addss_mask, __builtin_ia32_alignd512_mask,
	__builtin_ia32_alignq512_mask, __builtin_ia32_cmpd512_mask,
	__builtin_ia32_cmppd512_mask, __builtin_ia32_cmpps512_mask,
	__builtin_ia32_cmpq512_mask, __builtin_ia32_cmpsd_mask,
	__builtin_ia32_cmpss_mask, __builtin_ia32_cvtdq2ps512_mask,
	__builtin_ia32_cvtpd2dq512_mask, __builtin_ia32_cvtpd2ps512_mask,
	__builtin_ia32_cvtpd2udq512_mask, __builtin_ia32_cvtps2dq512_mask,
	__builtin_ia32_cvtps2pd512_mask, __builtin_ia32_cvtps2udq512_mask,
	__builtin_ia32_cvtsd2ss_mask, __builtin_ia32_cvtsi2sd64,
	__builtin_ia32_cvtsi2ss32, __builtin_ia32_cvtsi2ss64,
	__builtin_ia32_cvtss2sd_mask, __builtin_ia32_cvttpd2dq512_mask,
	__builtin_ia32_cvttpd2udq512_mask, __builtin_ia32_cvttps2dq512_mask,
	__builtin_ia32_cvttps2udq512_mask, __builtin_ia32_cvtudq2ps512_mask,
	__builtin_ia32_cvtusi2sd64, __builtin_ia32_cvtusi2ss32,
	__builtin_ia32_cvtusi2ss64, __builtin_ia32_divpd512_mask,
	__builtin_ia32_divps512_mask, __builtin_ia32_divsd_mask,
	__builtin_ia32_divss_mask, __builtin_ia32_extractf32x4_mask,
	__builtin_ia32_extractf64x4_mask, __builtin_ia32_extracti32x4_mask,
	__builtin_ia32_extracti64x4_mask, __builtin_ia32_fixupimmpd512_mask,
	__builtin_ia32_fixupimmpd512_maskz, __builtin_ia32_fixupimmps512_mask,
	__builtin_ia32_fixupimmps512_maskz, __builtin_ia32_fixupimmsd_mask,
	__builtin_ia32_fixupimmsd_maskz, __builtin_ia32_fixupimmss_mask,
	__builtin_ia32_fixupimmss_maskz, __builtin_ia32_gatherdiv8df,
	__builtin_ia32_gatherdiv8di, __builtin_ia32_gatherdiv16sf,
	__builtin_ia32_gatherdiv16si, __builtin_ia32_gathersiv16sf,
	__builtin_ia32_gathersiv16si, __builtin_ia32_gathersiv8df,
	__builtin_ia32_gathersiv8di, __builtin_ia32_getexppd512_mask,
	__builtin_ia32_getexpps512_mask, __builtin_ia32_getexpsd128_mask,
	__builtin_ia32_getexpss128_mask, __builtin_ia32_getmantpd512_mask,
	__builtin_ia32_getmantps512_mask, __builtin_ia32_getmantsd_mask,
	__builtin_ia32_getmantss_mask, __builtin_ia32_insertf32x4_mask,
	__builtin_ia32_insertf64x4_mask, __builtin_ia32_inserti32x4_mask,
	__builtin_ia32_inserti64x4_mask, __builtin_ia32_maxpd512_mask,
	__builtin_ia32_maxps512_mask, __builtin_ia32_maxsd_mask,
	__builtin_ia32_maxss_mask, __builtin_ia32_minpd512_mask,
	__builtin_ia32_minps512_mask, __builtin_ia32_minsd_mask,
	__builtin_ia32_minss_mask, __builtin_ia32_mulpd512_mask,
	__builtin_ia32_mulps512_mask, __builtin_ia32_mulsd_mask,
	__builtin_ia32_mulss_mask, __builtin_ia32_permdf512_mask,
	__builtin_ia32_permdi512_mask, __builtin_ia32_prold512_mask,
	__builtin_ia32_prolq512_mask, __builtin_ia32_prord512_mask,
	__builtin_ia32_prorq512_mask, __builtin_ia32_pshufd512_mask,
	__builtin_ia32_pslldi512_mask, __builtin_ia32_psllqi512_mask,
	__builtin_ia32_psradi512_mask, __builtin_ia32_psraqi512_mask,
	__builtin_ia32_psrldi512_mask, __builtin_ia32_psrlqi512_mask,
	__builtin_ia32_pternlogd512_mask, __builtin_ia32_pternlogd512_maskz,
	__builtin_ia32_pternlogq512_mask, __builtin_ia32_pternlogq512_maskz,
	__builtin_ia32_rndscalepd_mask, __builtin_ia32_rndscaleps_mask,
	__builtin_ia32_rndscalesd_mask, __builtin_ia32_rndscaless_mask,
	__builtin_ia32_scalefpd512_mask, __builtin_ia32_scalefps512_mask,
	__builtin_ia32_scalefsd_mask, __builtin_ia32_scalefss_mask,
	__builtin_ia32_scatterdiv8df, __builtin_ia32_scatterdiv8di,
	__builtin_ia32_scatterdiv16sf, __builtin_ia32_scatterdiv16si,
	__builtin_ia32_scattersiv16sf, __builtin_ia32_scattersiv16si,
	__builtin_ia32_scattersiv8df, __builtin_ia32_scattersiv8di,
	__builtin_ia32_shuf_f32x4_mask, __builtin_ia32_shuf_f64x2_mask,
	__builtin_ia32_shuf_i32x4_mask, __builtin_ia32_shuf_i64x2_mask,
	__builtin_ia32_shufpd512_mask, __builtin_ia32_shufps512_mask,
	__builtin_ia32_sqrtpd512_mask, __builtin_ia32_sqrtps512_mask,
	__builtin_ia32_sqrtsd_mask, __builtin_ia32_sqrtss_mask,
	__builtin_ia32_subpd512_mask, __builtin_ia32_subps512_mask,
	__builtin_ia32_subsd_mask, __builtin_ia32_subss_mask,
	__builtin_ia32_ucmpd512_mask, __builtin_ia32_ucmpq512_mask,
	__builtin_ia32_vcomisd, __builtin_ia32_vcomiss,
	__builtin_ia32_vcvtph2ps512_mask, __builtin_ia32_vcvtps2ph512_mask,
	__builtin_ia32_vcvtsd2si32, __builtin_ia32_vcvtsd2si64,
	__builtin_ia32_vcvtsd2usi32, __builtin_ia32_vcvtsd2usi64,
	__builtin_ia32_vcvtss2si32, __builtin_ia32_vcvtss2si64,
	__builtin_ia32_vcvtss2usi32, __builtin_ia32_vcvtss2usi64,
	__builtin_ia32_vcvttsd2si32, __builtin_ia32_vcvttsd2si64,
	__builtin_ia32_vcvttsd2usi32, __builtin_ia32_vcvttsd2usi64,
	__builtin_ia32_vcvttss2si32, __builtin_ia32_vcvttss2si64,
	__builtin_ia32_vcvttss2usi32, __builtin_ia32_vcvttss2usi64,
	__builtin_ia32_vfmaddpd512_mask, __builtin_ia32_vfmaddpd512_mask3,
	__builtin_ia32_vfmaddpd512_maskz, __builtin_ia32_vfmaddps512_mask,
	__builtin_ia32_vfmaddps512_mask3, __builtin_ia32_vfmaddps512_maskz,
	__builtin_ia32_vfmaddsd3_mask, __builtin_ia32_vfmaddsd3_mask3,
	__builtin_ia32_vfmaddsd3_maskz, __builtin_ia32_vfmaddss3_mask,
	__builtin_ia32_vfmaddss3_mask3, __builtin_ia32_vfmaddss3_maskz,
	__builtin_ia32_vfmaddsubpd512_mask,
	__builtin_ia32_vfmaddsubpd512_mask3,
	__builtin_ia32_vfmaddsubpd512_maskz,
	__builtin_ia32_vfmaddsubps512_mask,
	__builtin_ia32_vfmaddsubps512_mask3,
	__builtin_ia32_vfmaddsubps512_maskz,
	__builtin_ia32_vfmsubaddpd512_mask3,
	__builtin_ia32_vfmsubaddps512_mask3, __builtin_ia32_vfmsubpd512_mask3,
	__builtin_ia32_vfmsubps512_mask3, __builtin_ia32_vfmsubsd3_mask3,
	__builtin_ia32_vfmsubss3_mask3, __builtin_ia32_vfnmaddpd512_mask,
	__builtin_ia32_vfnmaddps512_mask, __builtin_ia32_vfnmsubpd512_mask,
	__builtin_ia32_vfnmsubpd512_mask3, __builtin_ia32_vfnmsubps512_mask,
	__builtin_ia32_vfnmsubps512_mask3, __builtin_ia32_vpermilpd512_mask,
	__builtin_ia32_vpermilps512_mask, __builtin_ia32_gatherpfdps,
	__builtin_ia32_gatherpfqps, __builtin_ia32_scatterpfdps,
	__builtin_ia32_scatterpfqps, __builtin_ia32_exp2pd_mask,
	__builtin_ia32_exp2ps_mask, __builtin_ia32_rcp28pd_mask,
	__builtin_ia32_rcp28ps_mask, __builtin_ia32_rsqrt28pd_mask,
	__builtin_ia32_rsqrt28ps_mask.
	* gcc.target/i386/sse-14.c (test_1y): New.
	(test_2y): Ditto.
	(test_2vx): Ditto.
	(test_3x): Ditto.
	(test_3v): Ditto.
	(test_3vx): Ditto.
	(test_4x): Ditto.
	(test_4y): Ditto.
	(test_4v): Ditto.
	(pragma GCC target): Add avx512f, avx512er, avx512cd, avx512pf.
	(tests): Add  _mm512_cvt_roundepi32_ps, _mm512_cvt_roundepu32_ps,
	_mm512_cvt_roundpd_epi32, _mm512_cvt_roundpd_epu32,
	_mm512_cvt_roundpd_ps, _mm512_cvt_roundph_ps,
	_mm512_cvt_roundps_epi32, _mm512_cvt_roundps_epu32,
	_mm512_cvt_roundps_pd, _mm512_cvtps_ph, _mm512_cvtt_roundpd_epi32,
	_mm512_cvtt_roundpd_epu32, _mm512_cvtt_roundps_epi32,
	_mm512_cvtt_roundps_epu32, _mm512_extractf32x4_ps,
	_mm512_extractf64x4_pd, _mm512_extracti32x4_epi32,
	_mm512_extracti64x4_epi64, _mm512_getexp_round_pd,
	_mm512_getexp_round_ps, _mm512_getmant_round_pd,
	_mm512_getmant_round_ps, _mm512_permute_pd, _mm512_permute_ps,
	_mm512_permutex_epi64, _mm512_permutex_pd, _mm512_rol_epi32,
	_mm512_rol_epi64, _mm512_ror_epi32, _mm512_ror_epi64,
	_mm512_shuffle_epi32, _mm512_slli_epi32, _mm512_slli_epi64,
	_mm512_sqrt_round_pd, _mm512_sqrt_round_ps, _mm512_srai_epi32,
	_mm512_srai_epi64, _mm512_srli_epi32, _mm512_srli_epi64,
	_mm_cvt_roundsd_i32, _mm_cvt_roundsd_u32, _mm_cvt_roundss_i32,
	_mm_cvt_roundss_u32, _mm_cvtt_roundsd_i32, _mm_cvtt_roundsd_u32,
	_mm_cvtt_roundss_i32, _mm_cvtt_roundss_u32, _mm512_getmant_pd,
	_mm512_getmant_ps, _mm_cvt_roundi32_ss, _mm512_add_round_pd,
	_mm512_add_round_ps, _mm512_alignr_epi32, _mm512_alignr_epi64,
	_mm512_cmp_epi32_mask, _mm512_cmp_epi64_mask, _mm512_cmp_epu32_mask,
	_mm512_cmp_epu64_mask, _mm512_cmp_pd_mask, _mm512_cmp_ps_mask,
	_mm512_div_round_pd, _mm512_div_round_ps, _mm512_i32gather_epi32,
	_mm512_i32gather_epi64, _mm512_i32gather_pd, _mm512_i32gather_ps,
	_mm512_i64gather_epi32, _mm512_i64gather_epi64, _mm512_i64gather_pd,
	_mm512_i64gather_ps, _mm512_insertf32x4, _mm512_insertf64x4,
	_mm512_inserti32x4, _mm512_inserti64x4,
	_mm512_maskz_cvt_roundepi32_ps, _mm512_maskz_cvt_roundepu32_ps,
	_mm512_maskz_cvt_roundpd_epi32, _mm512_maskz_cvt_roundpd_epu32,
	_mm512_maskz_cvt_roundpd_ps, _mm512_maskz_cvt_roundph_ps,
	_mm512_maskz_cvt_roundps_epi32, _mm512_maskz_cvt_roundps_epu32,
	_mm512_maskz_cvt_roundps_pd, _mm512_maskz_cvtps_ph,
	_mm512_maskz_cvtt_roundpd_epi32, _mm512_maskz_cvtt_roundpd_epu32,
	_mm512_maskz_cvtt_roundps_epi32, _mm512_maskz_cvtt_roundps_epu32,
	_mm512_maskz_extractf32x4_ps, _mm512_maskz_extractf64x4_pd,
	_mm512_maskz_extracti32x4_epi32, _mm512_maskz_extracti64x4_epi64,
	_mm512_maskz_getexp_round_pd, _mm512_maskz_getexp_round_ps,
	_mm512_maskz_getmant_round_pd, _mm512_maskz_getmant_round_ps,
	_mm512_maskz_permute_pd, _mm512_maskz_permute_ps,
	_mm512_maskz_permutex_epi64, _mm512_maskz_permutex_pd,
	_mm512_maskz_rol_epi32, _mm512_maskz_rol_epi64,
	_mm512_maskz_ror_epi32, _mm512_maskz_ror_epi64,
	_mm512_maskz_shuffle_epi32, _mm512_maskz_slli_epi32,
	_mm512_maskz_slli_epi64, _mm512_maskz_sqrt_round_pd,
	_mm512_maskz_sqrt_round_ps, _mm512_maskz_srai_epi32,
	_mm512_maskz_srai_epi64, _mm512_maskz_srli_epi32,
	_mm512_maskz_srli_epi64, _mm512_max_round_pd, _mm512_max_round_ps,
	_mm512_min_round_pd, _mm512_min_round_ps, _mm512_mul_round_pd,
	_mm512_mul_round_ps, _mm512_scalef_round_pd, _mm512_scalef_round_ps,
	_mm512_shuffle_f32x4, _mm512_shuffle_f64x2, _mm512_shuffle_i32x4,
	_mm512_shuffle_i64x2, _mm512_shuffle_pd, _mm512_shuffle_ps,
	_mm512_sub_round_pd, _mm512_sub_round_ps, _mm_add_round_sd,
	_mm_add_round_ss, _mm_cmp_sd_mask, _mm_cmp_ss_mask,
	_mm_cvt_roundi64_sd, _mm_cvt_roundi64_ss, _mm_cvt_roundsd_ss,
	_mm_cvt_roundss_sd, _mm_cvt_roundu32_ss, _mm_cvt_roundu64_sd,
	_mm_cvt_roundu64_ss, _mm_div_round_sd, _mm_div_round_ss,
	_mm_getexp_round_sd, _mm_getexp_round_ss, _mm_getmant_round_sd,
	_mm_getmant_round_ss, _mm_mul_round_sd, _mm_mul_round_ss,
	_mm_scalef_round_sd, _mm_scalef_round_ss, _mm_sqrt_round_sd,
	_mm_sqrt_round_ss, _mm_sub_round_sd, _mm_sub_round_ss,
	_mm512_cmp_round_pd_mask, _mm512_cmp_round_ps_mask,
	_mm512_maskz_roundscale_round_pd, _mm512_maskz_roundscale_round_ps,
	_mm_cmp_round_sd_mask, _mm_cmp_round_ss_mask, _mm_comi_round_sd,
	_mm_comi_round_ss, _mm_roundscale_round_sd, _mm_roundscale_round_ss,
	_mm512_fmadd_round_pd, _mm512_fmadd_round_ps,
	_mm512_fmaddsub_round_pd, _mm512_fmaddsub_round_ps,
	_mm512_fmsub_round_pd, _mm512_fmsub_round_ps,
	_mm512_fmsubadd_round_pd, _mm512_fmsubadd_round_ps,
	_mm512_fnmadd_round_pd, _mm512_fnmadd_round_ps,
	_mm512_fnmsub_round_pd, _mm512_fnmsub_round_ps,
	_mm512_mask_cmp_epi32_mask, _mm512_mask_cmp_epi64_mask,
	_mm512_mask_cmp_epu32_mask, _mm512_mask_cmp_epu64_mask,
	_mm512_mask_cmp_pd_mask, _mm512_mask_cmp_ps_mask,
	_mm512_mask_cvt_roundepi32_ps, _mm512_mask_cvt_roundepu32_ps,
	_mm512_mask_cvt_roundpd_epi32, _mm512_mask_cvt_roundpd_epu32,
	_mm512_mask_cvt_roundpd_ps, _mm512_mask_cvt_roundph_ps,
	_mm512_mask_cvt_roundps_epi32, _mm512_mask_cvt_roundps_epu32,
	_mm512_mask_cvt_roundps_pd, _mm512_mask_cvtps_ph,
	_mm512_mask_cvtt_roundpd_epi32, _mm512_mask_cvtt_roundpd_epu32,
	_mm512_mask_cvtt_roundps_epi32, _mm512_mask_cvtt_roundps_epu32,
	_mm512_mask_extractf32x4_ps, _mm512_mask_extractf64x4_pd,
	_mm512_mask_extracti32x4_epi32, _mm512_mask_extracti64x4_epi64,
	_mm512_mask_getexp_round_pd, _mm512_mask_getexp_round_ps,
	_mm512_mask_getmant_round_pd, _mm512_mask_getmant_round_ps,
	_mm512_mask_permute_pd, _mm512_mask_permute_ps,
	_mm512_mask_permutex_epi64, _mm512_mask_permutex_pd,
	_mm512_mask_rol_epi32, _mm512_mask_rol_epi64, _mm512_mask_ror_epi32,
	_mm512_mask_ror_epi64, _mm512_mask_shuffle_epi32,
	_mm512_mask_slli_epi32, _mm512_mask_slli_epi64,
	_mm512_mask_sqrt_round_pd, _mm512_mask_sqrt_round_ps,
	_mm512_mask_srai_epi32, _mm512_mask_srai_epi64,
	_mm512_mask_srli_epi32, _mm512_mask_srli_epi64,
	_mm512_maskz_add_round_pd, _mm512_maskz_add_round_ps,
	_mm512_maskz_alignr_epi32, _mm512_maskz_alignr_epi64,
	_mm512_maskz_div_round_pd, _mm512_maskz_div_round_ps,
	_mm512_maskz_insertf32x4, _mm512_maskz_insertf64x4,
	_mm512_maskz_inserti32x4, _mm512_maskz_inserti64x4,
	_mm512_maskz_max_round_pd, _mm512_maskz_max_round_ps,
	_mm512_maskz_min_round_pd, _mm512_maskz_min_round_ps,
	_mm512_maskz_mul_round_pd, _mm512_maskz_mul_round_ps,
	_mm512_maskz_scalef_round_pd, _mm512_maskz_scalef_round_ps,
	_mm512_maskz_shuffle_f32x4, _mm512_maskz_shuffle_f64x2,
	_mm512_maskz_shuffle_i32x4, _mm512_maskz_shuffle_i64x2,
	_mm512_maskz_shuffle_pd, _mm512_maskz_shuffle_ps,
	_mm512_maskz_sub_round_pd, _mm512_maskz_sub_round_ps,
	_mm512_ternarylogic_epi32, _mm512_ternarylogic_epi64,
	_mm_fmadd_round_sd, _mm_fmadd_round_ss, _mm_fmsub_round_sd,
	_mm_fmsub_round_ss, _mm_fnmadd_round_sd, _mm_fnmadd_round_ss,
	_mm_fnmsub_round_sd, _mm_fnmsub_round_ss, _mm_mask_cmp_sd_mask,
	_mm_mask_cmp_ss_mask, _mm_maskz_add_round_sd, _mm_maskz_add_round_ss,
	_mm_maskz_cvt_roundsd_ss, _mm_maskz_cvt_roundss_sd,
	_mm_maskz_div_round_sd, _mm_maskz_div_round_ss,
	_mm_maskz_getexp_round_sd, _mm_maskz_getexp_round_ss,
	_mm_maskz_getmant_round_sd, _mm_maskz_getmant_round_ss,
	_mm_maskz_mul_round_sd, _mm_maskz_mul_round_ss,
	_mm_maskz_scalef_round_sd, _mm_maskz_scalef_round_ss,
	_mm_maskz_sqrt_round_sd, _mm_maskz_sqrt_round_ss,
	_mm_maskz_sub_round_sd, _mm_maskz_sub_round_ss,
	_mm512_i32scatter_epi32, _mm512_i32scatter_epi64,
	_mm512_i32scatter_pd, _mm512_i32scatter_ps, _mm512_i64scatter_epi32,
	_mm512_i64scatter_epi64, _mm512_i64scatter_pd, _mm512_i64scatter_ps,
	_mm512_mask_roundscale_round_pd, _mm512_mask_roundscale_round_ps,
	_mm512_mask_cmp_round_pd_mask, _mm512_mask_cmp_round_ps_mask,
	_mm_fixupimm_round_sd, _mm_fixupimm_round_ss,
	_mm_mask_cmp_round_sd_mask, _mm_mask_cmp_round_ss_mask,
	_mm_maskz_roundscale_round_sd, _mm_maskz_roundscale_round_ss,
	_mm512_mask3_fmadd_round_pd, _mm512_mask3_fmadd_round_ps,
	_mm512_mask3_fmaddsub_round_pd, _mm512_mask3_fmaddsub_round_ps,
	_mm512_mask3_fmsub_round_pd, _mm512_mask3_fmsub_round_ps,
	_mm512_mask3_fmsubadd_round_pd, _mm512_mask3_fmsubadd_round_ps,
	_mm512_mask3_fnmadd_round_pd, _mm512_mask3_fnmadd_round_ps,
	_mm512_mask3_fnmsub_round_pd, _mm512_mask3_fnmsub_round_ps,
	_mm512_mask_add_round_pd, _mm512_mask_add_round_ps,
	_mm512_mask_alignr_epi32, _mm512_mask_alignr_epi64,
	_mm512_mask_div_round_pd, _mm512_mask_div_round_ps,
	_mm512_mask_fmadd_round_pd, _mm512_mask_fmadd_round_ps,
	_mm512_mask_fmaddsub_round_pd, _mm512_mask_fmaddsub_round_ps,
	_mm512_mask_fmsub_round_pd, _mm512_mask_fmsub_round_ps,
	_mm512_mask_fmsubadd_round_pd, _mm512_mask_fmsubadd_round_ps,
	_mm512_mask_fnmadd_round_pd, _mm512_mask_fnmadd_round_ps,
	_mm512_mask_fnmsub_round_pd, _mm512_mask_fnmsub_round_ps,
	_mm512_mask_i32gather_epi32, _mm512_mask_i32gather_epi64,
	_mm512_mask_i32gather_pd, _mm512_mask_i32gather_ps,
	_mm512_mask_i64gather_epi32, _mm512_mask_i64gather_epi64,
	_mm512_mask_i64gather_pd, _mm512_mask_i64gather_ps,
	_mm512_mask_insertf32x4, _mm512_mask_insertf64x4,
	_mm512_mask_inserti32x4, _mm512_mask_inserti64x4,
	_mm512_mask_max_round_pd, _mm512_mask_max_round_ps,
	_mm512_mask_min_round_pd, _mm512_mask_min_round_ps,
	_mm512_mask_mul_round_pd, _mm512_mask_mul_round_ps,
	_mm512_mask_scalef_round_pd, _mm512_mask_scalef_round_ps,
	_mm512_mask_shuffle_f32x4, _mm512_mask_shuffle_f64x2,
	_mm512_mask_shuffle_i32x4, _mm512_mask_shuffle_i64x2,
	_mm512_mask_shuffle_pd, _mm512_mask_shuffle_ps,
	_mm512_mask_sub_round_pd, _mm512_mask_sub_round_ps,
	_mm512_mask_ternarylogic_epi32, _mm512_mask_ternarylogic_epi64,
	_mm512_maskz_fmadd_round_pd, _mm512_maskz_fmadd_round_ps,
	_mm512_maskz_fmaddsub_round_pd, _mm512_maskz_fmaddsub_round_ps,
	_mm512_maskz_fmsub_round_pd, _mm512_maskz_fmsub_round_ps,
	_mm512_maskz_fmsubadd_round_pd, _mm512_maskz_fmsubadd_round_ps,
	_mm512_maskz_fnmadd_round_pd, _mm512_maskz_fnmadd_round_ps,
	_mm512_maskz_fnmsub_round_pd, _mm512_maskz_fnmsub_round_ps,
	_mm512_maskz_ternarylogic_epi32, _mm512_maskz_ternarylogic_epi64,
	_mm_mask3_fmadd_round_sd, _mm_mask3_fmadd_round_ss,
	_mm_mask3_fmsub_round_sd, _mm_mask3_fmsub_round_ss,
	_mm_mask3_fnmadd_round_sd, _mm_mask3_fnmadd_round_ss,
	_mm_mask3_fnmsub_round_sd, _mm_mask3_fnmsub_round_ss,
	_mm_mask_add_round_sd, _mm_mask_add_round_ss, _mm_mask_cvt_roundsd_ss,
	_mm_mask_cvt_roundss_sd, _mm_mask_div_round_sd, _mm_mask_div_round_ss,
	_mm_mask_fmadd_round_sd, _mm_mask_fmadd_round_ss,
	_mm_mask_fmsub_round_sd, _mm_mask_fmsub_round_ss,
	_mm_mask_fnmadd_round_sd, _mm_mask_fnmadd_round_ss,
	_mm_mask_fnmsub_round_sd, _mm_mask_fnmsub_round_ss,
	_mm_mask_getexp_round_sd, _mm_mask_getexp_round_ss,
	_mm_mask_getmant_round_sd, _mm_mask_getmant_round_ss,
	_mm_mask_mul_round_sd, _mm_mask_mul_round_ss,
	_mm_mask_scalef_round_sd, _mm_mask_scalef_round_ss,
	_mm_mask_sqrt_round_sd, _mm_mask_sqrt_round_ss, _mm_mask_sub_round_sd,
	_mm_mask_sub_round_ss, _mm_maskz_fmadd_round_sd,
	_mm_maskz_fmadd_round_ss, _mm_maskz_fmsub_round_sd,
	_mm_maskz_fmsub_round_ss, _mm_maskz_fnmadd_round_sd,
	_mm_maskz_fnmadd_round_ss, _mm_maskz_fnmsub_round_sd,
	_mm_maskz_fnmsub_round_ss, _mm512_mask_i32scatter_epi32,
	_mm512_mask_i32scatter_epi64, _mm512_mask_i32scatter_pd,
	_mm512_mask_i32scatter_ps, _mm512_mask_i64scatter_epi32,
	_mm512_mask_i64scatter_epi64, _mm512_mask_i64scatter_pd,
	_mm512_mask_i64scatter_ps, _mm_mask_getmant_sd, _mm_mask_getmant_ss,
	_mm_mask_roundscale_round_sd, _mm_mask_roundscale_round_ss,
	_mm512_mask_fixupimm_round_pd, _mm512_mask_fixupimm_round_ps,
	_mm512_maskz_fixupimm_round_pd, _mm512_maskz_fixupimm_round_ps,
	_mm_mask_fixupimm_round_sd, _mm_mask_fixupimm_round_ss,
	_mm_maskz_fixupimm_round_sd, _mm_maskz_fixupimm_round_ss,
	_mm512_mask_prefetch_i32gather_ps, _mm512_mask_prefetch_i32scatter_ps,
	_mm512_mask_prefetch_i64gather_ps, _mm512_mask_prefetch_i64scatter_ps,
	_mm512_exp2a23_round_pd, _mm512_exp2a23_round_ps,
	_mm512_rcp28_round_pd, _mm512_rcp28_round_ps, _mm512_rsqrt28_round_pd,
	_mm512_rsqrt28_round_ps, _mm512_maskz_exp2a23_round_pd,
	_mm512_maskz_exp2a23_round_ps, _mm512_maskz_rcp28_round_pd,
	_mm512_maskz_rcp28_round_ps, _mm512_maskz_rsqrt28_round_pd,
	_mm512_maskz_rsqrt28_round_ps, _mm512_mask_exp2a23_round_pd,
	_mm512_mask_exp2a23_round_ps, _mm512_mask_rcp28_round_pd,
	_mm512_mask_rcp28_round_ps, _mm512_mask_rsqrt28_round_pd,
	_mm512_mask_rsqrt28_round_ps.
	* gcc.target/i386/testimm-10.c: New file.
	* gcc.target/i386/testround-1.c: Ditto.
	* gcc.target/i386/testround-2.c: Ditto.
	* gcc.target/x86_64/abi/avx512f/test_m512_returning.c: Ditto.
	* gcc.target/x86_64/abi/avx512f/test_passing_m512.c: Ditto.
	* gcc.target/x86_64/abi/avx512f/test_passing_structs.c: Ditto.
	* gcc.target/x86_64/abi/avx512f/test_passing_unions.c: Ditto.
	* gcc.target/i386/avx512cd-check.h: Ditto.
	* gcc.target/i386/avx512er-check.h: Ditto.
	* gcc.target/i386/avx512f-check.h: Ditto.
	* gcc.target/i386/avx512f-helper.h: Ditto.
	* gcc.target/i386/avx512f-mask-type.h: Ditto.
	* gcc.target/i386/avx512f-os-support.h: Ditto.
	* gcc.target/i386/i386.exp (check_effective_target_avx512f): New.
	(check_effective_target_avx512cd): Ditto.
	(check_effective_target_avx512er): Ditto.
	* gcc.target/i386/m128-check.h (CHECK_FP_EXP): Ditto.
	* gcc.target/i386/m512-check.h: Ditto.
	* gcc.target/x86_64/abi/avx512f/abi-avx512f.exp: New file.
	* gcc.target/x86_64/abi/avx512f/args.h: Ditto.
	* gcc.target/x86_64/abi/avx512f/asm-support.S: Ditto.
	* gcc.target/x86_64/abi/avx512f/avx512f-check.h: Ditto.
	* lib/target-supports.exp (check_effective_target_avx512f): New.


Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>
Co-Authored-By: Sergey Lega <sergey.s.lega@intel.com>

From-SVN: r206262
parent 756c5857
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt" } */
/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -mavx512f -mavx512er -mavx512cd" } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
......
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt" } */
/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -mavx512f -mavx512er -mavx512cd" } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
......
#include <stdlib.h>
#include "cpuid.h"
#include "m512-check.h"
#include "avx512f-os-support.h"
static void avx512cd_test (void);
static void __attribute__ ((noinline)) do_test (void)
{
avx512cd_test ();
}
int
main ()
{
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return 0;
if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
{
if (__get_cpuid_max (0, NULL) < 7)
return 0;
__cpuid_count (7, 0, eax, ebx, ecx, edx);
if ((avx512f_os_support ()) && ((ebx & (bit_AVX512CD)) == (bit_AVX512CD)))
{
do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
return 0;
}
#ifdef DEBUG
printf ("SKIPPED\n");
#endif
}
#ifdef DEBUG
else
printf ("SKIPPED\n");
#endif
return 0;
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler "vpbroadcastmb2q\[ \\t\]+\[^\n\]*k\[1-7\]\[^\n\]*%zmm\[0-7\]" } } */
#include <immintrin.h>
volatile __m512i x;
volatile __mmask8 m8;
void extern
avx512f_test (void)
{
x = _mm512_broadcastmb_epi64 (m8);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 64)
CALC (long long *res, __mmask8 src)
{
int i;
for (i = 0; i < SIZE; i++)
res[i] = src;
}
static void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_q) res;
long long res_ref[SIZE];
__mmask8 src;
for (i = 0; i < SIZE; i++)
{
res.a[i] = -1;
}
res.x = INTRINSIC (_broadcastmb_epi64) (src);
CALC (res_ref, src);
if (UNION_CHECK (AVX512F_LEN, i_q) (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler "vpbroadcastmw2d\[ \\t\]+\[^\n\]*k\[1-7\]\[^\n\]*%zmm\[0-7\]" } } */
#include <immintrin.h>
volatile __m512i x;
volatile __mmask16 m16;
void extern
avx512f_test (void)
{
x = _mm512_broadcastmw_epi32 (m16);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 32)
CALC (int *res, __mmask16 src)
{
int i;
for (i = 0; i < SIZE; i++)
res[i] = src;
}
static void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_d) res;
int res_ref[SIZE];
__mmask16 src;
for (i = 0; i < SIZE; i++)
{
res.a[i] = -1;
}
res.x = INTRINSIC (_broadcastmw_epi32) (src);
CALC (res_ref, src);
if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vpconflictd\[ \\t\]+\[^\n\]*%zmm\[0-9\]" 3 } } */
/* { dg-final { scan-assembler-times "vpconflictd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vpconflictd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512i s;
volatile __m512i res;
void extern
avx512f_test (void)
{
res = _mm512_conflict_epi32 (s);
res = _mm512_mask_conflict_epi32 (res, 2, s);
res = _mm512_maskz_conflict_epi32 (2, s);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 32)
#include "avx512f-mask-type.h"
static void
CALC (int *s, int *r)
{
int i, j;
for (i = 0; i < SIZE; i++)
{
r[i] = 0;
for (j = 0; j < i; j++)
{
r[i] |= s[j] == s[i] ? 1 << j : 0;
}
}
}
static void
TEST (void)
{
UNION_TYPE (AVX512F_LEN, i_d) s, res1, res2, res3;
int res_ref[SIZE];
MASK_TYPE mask = MASK_VALUE;
int i;
for (i = 0; i < SIZE; i++)
{
s.a[i] = 1234 * (i % 5);
res1.a[i] = DEFAULT_VALUE;
res2.a[i] = DEFAULT_VALUE;
res3.a[i] = DEFAULT_VALUE;
}
res1.x = INTRINSIC (_conflict_epi32) (s.x);
res2.x = INTRINSIC (_mask_conflict_epi32) (res2.x, mask, s.x);
res3.x = INTRINSIC (_maskz_conflict_epi32) (mask, s.x);
CALC (s.a, res_ref);
if (UNION_CHECK (AVX512F_LEN, i_d) (res1, res_ref))
abort ();
MASK_MERGE (i_d) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_d) (res2, res_ref))
abort ();
MASK_ZERO (i_d) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_d) (res3, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vpconflictq\[ \\t\]+\[^\n\]*%zmm\[0-9\]" 3 } } */
/* { dg-final { scan-assembler-times "vpconflictq\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
/* { dg-final { scan-assembler-times "vpconflictq\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
#include <immintrin.h>
volatile __m512i s;
volatile __m512i res;
void extern
avx512f_test (void)
{
res = _mm512_conflict_epi64 (s);
res = _mm512_mask_conflict_epi64 (res, 2, s);
res = _mm512_maskz_conflict_epi64 (2, s);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 64)
#include "avx512f-mask-type.h"
static void
CALC (long long *s, long long *r)
{
int i, j;
for (i = 0; i < SIZE; i++)
{
r[i] = 0;
for (j = 0; j < i; j++)
{
r[i] |= s[i] == s[j] ? 1 << j : 0;
}
}
}
static void
TEST (void)
{
UNION_TYPE (AVX512F_LEN, i_q) s, res1, res2, res3;
long long res_ref[SIZE];
MASK_TYPE mask = MASK_VALUE;
int i;
for (i = 0; i < SIZE; i++)
{
s.a[i] = 12345678 * (i % 5);
res1.a[i] = DEFAULT_VALUE;
res2.a[i] = DEFAULT_VALUE;
res3.a[i] = DEFAULT_VALUE;
}
res1.x = INTRINSIC (_conflict_epi64) (s.x);
res2.x = INTRINSIC (_mask_conflict_epi64) (res2.x, mask, s.x);
res3.x = INTRINSIC (_maskz_conflict_epi64) (mask, s.x);
CALC (s.a, res_ref);
if (UNION_CHECK (AVX512F_LEN, i_q) (res1, res_ref))
abort ();
MASK_MERGE (i_q) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_q) (res2, res_ref))
abort ();
MASK_ZERO (i_q) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_q) (res3, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vplzcntd\[ \\t\]+\[^\n\]*%zmm\[0-9\]" 3 } } */
/* { dg-final { scan-assembler-times "vplzcntd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1} } */
/* { dg-final { scan-assembler-times "vplzcntd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
#include <immintrin.h>
volatile __m512i s;
volatile __m512i res;
void extern
avx512f_test (void)
{
res = _mm512_lzcnt_epi32 (s);
res = _mm512_mask_lzcnt_epi32 (res, 2, s);
res = _mm512_maskz_lzcnt_epi32 (2, s);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 32)
#include "avx512f-mask-type.h"
#include <strings.h>
static void
CALC (int *s, int *r)
{
int i, res;
for (i = 0; i < SIZE; i++)
{
res = 0;
while ((res < 32) && (((s[i] >> (31 - res)) & 1) == 0))
++res;
r[i] = res;
}
}
static void
TEST (void)
{
UNION_TYPE (AVX512F_LEN, i_d) s, res1, res2, res3;
int res_ref[SIZE];
MASK_TYPE mask = MASK_VALUE;
int i;
for (i = 0; i < SIZE; i++)
{
s.a[i] = 12345678 * (i % 5);
res1.a[i] = DEFAULT_VALUE;
res2.a[i] = DEFAULT_VALUE;
res3.a[i] = DEFAULT_VALUE;
}
res1.x = INTRINSIC (_lzcnt_epi32) (s.x);
res2.x = INTRINSIC (_mask_lzcnt_epi32) (res2.x, mask, s.x);
res3.x = INTRINSIC (_maskz_lzcnt_epi32) (mask, s.x);
CALC (s.a, res_ref);
if (UNION_CHECK (AVX512F_LEN, i_d) (res1, res_ref))
abort ();
MASK_MERGE (i_d) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_d) (res2, res_ref))
abort ();
MASK_ZERO (i_d) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_d) (res3, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vplzcntq\[ \\t\]+\[^\n\]*%zmm\[0-9\]" 3 } } */
/* { dg-final { scan-assembler-times "vplzcntq\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vplzcntq\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512i s;
volatile __m512i res;
void extern
avx512f_test (void)
{
res = _mm512_lzcnt_epi64 (s);
res = _mm512_maskz_lzcnt_epi64 (2, s);
res = _mm512_mask_lzcnt_epi64 (res, 2, s);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define HAVE_512
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 64)
#include "avx512f-mask-type.h"
#include <strings.h>
static void
CALC (long long *s, long long *r)
{
int i, res;
for (i = 0; i < SIZE; i++)
{
res = 0;
while ((res < 64) && (((s[i] >> (63 - res)) & 1) == 0))
++res;
r[i] = res;
}
}
static void
TEST (void)
{
UNION_TYPE (AVX512F_LEN, i_q) s, res1, res2, res3;
long long res_ref[SIZE];
MASK_TYPE mask = MASK_VALUE;
int i;
for (i = 0; i < SIZE; i++)
{
s.a[i] = 12345678 * (i % 5);
res1.a[i] = DEFAULT_VALUE;
res2.a[i] = DEFAULT_VALUE;
res3.a[i] = DEFAULT_VALUE;
}
res1.x = INTRINSIC (_lzcnt_epi64) (s.x);
res2.x = INTRINSIC (_mask_lzcnt_epi64) (res2.x, mask, s.x);
res3.x = INTRINSIC (_maskz_lzcnt_epi64) (mask, s.x);
CALC (s.a, res_ref);
if (UNION_CHECK (AVX512F_LEN, i_q) (res1, res_ref))
abort ();
MASK_MERGE (i_q) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_q) (res2, res_ref))
abort ();
MASK_ZERO (i_q) (res_ref, mask, SIZE);
if (UNION_CHECK (AVX512F_LEN, i_q) (res3, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vptestnmd\[ \\t\]+\[^\n\]*%zmm\[0-7\]\[^\n^k\]*k\[1-7\]\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vptestnmd\[ \\t\]+\[^\n\]*%zmm\[0-7\]\[^\n^k\]*k\[1-7\]\{" 1 } } */
#include <immintrin.h>
volatile __m512i x;
volatile __mmask16 m16;
void extern
avx512cd_test (void)
{
m16 = _mm512_testn_epi32_mask (x, x);
m16 = _mm512_mask_testn_epi32_mask (3, x, x);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 32)
#include "avx512f-mask-type.h"
CALC (MASK_TYPE *res, int *src1, int *src2)
{
int i;
*res = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (!(src1[i] & src2[i]))
*res = *res | one << i;
}
static void
TEST (void)
{
int i, sign = 1;
UNION_TYPE (AVX512F_LEN, i_d) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
res1 = 0;
res2 = 0;
for (i = 0; i < SIZE; i++)
{
src1.a[i] = i * i * sign;
src2.a[i] = i + 20;
sign = -sign;
}
res1 = INTRINSIC (_testn_epi32_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_testn_epi32_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res1 != res_ref)
abort ();
res_ref &= mask;
if (res2 != res_ref)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512cd -O2" } */
/* { dg-final { scan-assembler-times "vptestnmq\[ \\t\]+\[^\n\]*%zmm\[0-7\]\[^\n^k\]*k\[1-7\]\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vptestnmq\[ \\t\]+\[^\n\]*%zmm\[0-7\]\[^\n^k\]*k\[1-7\]\{" 1 } } */
#include <immintrin.h>
volatile __m512i x;
volatile __mmask8 m8;
void extern
avx512cd_test (void)
{
m8 = _mm512_testn_epi64_mask (x, x);
m8 = _mm512_mask_testn_epi64_mask (3, x, x);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512cd" } */
/* { dg-require-effective-target avx512cd } */
#define AVX512CD
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 64)
#include "avx512f-mask-type.h"
CALC (MASK_TYPE *res, long long *src1, long long *src2)
{
int i;
*res = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (!(src1[i] & src2[i]))
*res = *res | one << i;
}
static void
TEST (void)
{
int i, sign = 1;
UNION_TYPE (AVX512F_LEN, i_q) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
res1 = 0;
res2 = 0;
for (i = 0; i < SIZE; i++)
{
src1.a[i] = i * i * sign;
src2.a[i] = i + 20;
sign = -sign;
}
res1 = INTRINSIC (_testn_epi64_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_testn_epi64_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res1 != res_ref)
abort ();
res_ref &= mask;
if (res2 != res_ref)
abort ();
}
#include <stdlib.h>
#include "cpuid.h"
#include "m512-check.h"
#include "avx512f-os-support.h"
static void avx512er_test (void);
static void __attribute__ ((noinline)) do_test (void)
{
avx512er_test ();
}
int
main ()
{
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return 0;
if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
{
if (__get_cpuid_max (0, NULL) < 7)
return 0;
__cpuid_count (7, 0, eax, ebx, ecx, edx);
if ((avx512f_os_support ()) && ((ebx & bit_AVX512ER) == bit_AVX512ER))
{
do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
return 0;
}
#ifdef DEBUG
printf ("SKIPPED\n");
#endif
}
#ifdef DEBUG
else
printf ("SKIPPED\n");
#endif
return 0;
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*\{rd-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vexp2pd\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512d x;
volatile __mmask8 m;
void extern
avx512er_test (void)
{
x = _mm512_exp2a23_pd (x);
x = _mm512_mask_exp2a23_pd (x, m, x);
x = _mm512_maskz_exp2a23_pd (m, x);
x = _mm512_exp2a23_round_pd (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_exp2a23_round_pd (x, m, x, _MM_FROUND_TO_NEG_INF);
x = _mm512_maskz_exp2a23_round_pd (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
#include <math.h>
void static
compute_vexp2pd (double *s, double *r)
{
int i;
for (i = 0; i < 8; i++)
r[i] = pow (2.0, s[i]);
}
void static
avx512er_test (void)
{
union512d src, res1, res2, res3;
__mmask8 mask = MASK_VALUE;
double res_ref[8];
int i;
for (i = 0; i < 8; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_exp2a23_pd (src.x);
res2.x = _mm512_mask_exp2a23_pd (res2.x, mask, src.x);
res3.x = _mm512_maskz_exp2a23_pd (mask, src.x);
compute_vexp2pd (src.a, res_ref);
if (check_rough_union512d (res1, res_ref, 0.0001))
abort ();
MASK_MERGE (d) (res_ref, mask, 8);
if (check_rough_union512d (res2, res_ref, 0.0001))
abort ();
MASK_ZERO (d) (res_ref, mask, 8);
if (check_rough_union512d (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*\{ru-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vexp2ps\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512 x;
volatile __mmask16 m;
void extern
avx512er_test (void)
{
x = _mm512_exp2a23_ps (x);
x = _mm512_mask_exp2a23_ps (x, m, x);
x = _mm512_maskz_exp2a23_ps (m, x);
x = _mm512_exp2a23_round_ps (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_exp2a23_round_ps (x, m, x, _MM_FROUND_TO_POS_INF);
x = _mm512_maskz_exp2a23_round_ps (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
#include <math.h>
void static
compute_vexp2ps (float *s, float *r)
{
int i;
for (i = 0; i < 16; i++)
r[i] = pow (2.0, s[i]);
}
void static
avx512er_test (void)
{
union512 src, res1, res2, res3;
__mmask16 mask = MASK_VALUE;
float res_ref[16];
int i;
for (i = 0; i < 16; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_exp2a23_ps (src.x);
res2.x = _mm512_mask_exp2a23_ps (res2.x, mask, src.x);
res3.x = _mm512_maskz_exp2a23_ps (mask, src.x);
compute_vexp2ps (src.a, res_ref);
if (check_rough_union512 (res1, res_ref, 0.0001))
abort ();
MASK_MERGE ()(res_ref, mask, 16);
if (check_rough_union512 (res2, res_ref, 0.0001))
abort ();
MASK_ZERO ()(res_ref, mask, 16);
if (check_rough_union512 (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*\{rd-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vrcp28pd\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512d x;
volatile __mmask8 m;
void extern
avx512er_test (void)
{
x = _mm512_rcp28_pd (x);
x = _mm512_mask_rcp28_pd (x, m, x);
x = _mm512_maskz_rcp28_pd (m, x);
x = _mm512_rcp28_round_pd (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_rcp28_round_pd (x, m, x, _MM_FROUND_TO_NEG_INF);
x = _mm512_maskz_rcp28_round_pd (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
void static
compute_vrcp28pd (double *s, double *r)
{
int i;
for (i = 0; i < 8; i++)
r[i] = 1.0 / s[i];
}
void static
avx512er_test (void)
{
union512d src, res1, res2, res3;
__mmask8 mask = MASK_VALUE;
double res_ref[8];
int i;
for (i = 0; i < 8; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_rcp28_pd (src.x);
res2.x = _mm512_mask_rcp28_pd (res2.x, mask, src.x);
res3.x = _mm512_maskz_rcp28_pd (mask, src.x);
compute_vrcp28pd (src.a, res_ref);
if (check_rough_union512d (res1, res_ref, 0.0001))
abort ();
MASK_MERGE (d) (res_ref, mask, 8);
if (check_rough_union512d (res2, res_ref, 0.0001))
abort ();
MASK_ZERO (d) (res_ref, mask, 8);
if (check_rough_union512d (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*\{ru-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vrcp28ps\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512 x;
volatile __mmask16 m;
void extern
avx512er_test (void)
{
x = _mm512_rcp28_ps (x);
x = _mm512_mask_rcp28_ps (x, m, x);
x = _mm512_maskz_rcp28_ps (m, x);
x = _mm512_rcp28_round_ps (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_rcp28_round_ps (x, m, x, _MM_FROUND_TO_POS_INF);
x = _mm512_maskz_rcp28_round_ps (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
void static
compute_vrcp28ps (float *s, float *r)
{
int i;
for (i = 0; i < 16; i++)
r[i] = 1.0 / s[i];
}
void static
avx512er_test (void)
{
union512 src, res1, res2, res3;
__mmask16 mask = MASK_VALUE;
float res_ref[16];
int i;
for (i = 0; i < 16; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_rcp28_ps (src.x);
res2.x = _mm512_mask_rcp28_ps (res2.x, mask, src.x);
res3.x = _mm512_maskz_rcp28_ps (mask, src.x);
compute_vrcp28ps (src.a, res_ref);
if (check_rough_union512 (res1, res_ref, 0.0001))
abort ();
MASK_MERGE ()(res_ref, mask, 16);
if (check_rough_union512 (res2, res_ref, 0.0001))
abort ();
MASK_ZERO ()(res_ref, mask, 16);
if (check_rough_union512 (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*\{rd-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vrsqrt28pd\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512d x;
volatile __mmask8 m;
void extern
avx512er_test (void)
{
x = _mm512_rsqrt28_pd (x);
x = _mm512_mask_rsqrt28_pd (x, m, x);
x = _mm512_maskz_rsqrt28_pd (m, x);
x = _mm512_rsqrt28_round_pd (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_rsqrt28_round_pd (x, m, x, _MM_FROUND_TO_NEG_INF);
x = _mm512_maskz_rsqrt28_round_pd (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
#include <math.h>
void static
compute_vrsqrt28pd (double *s, double *r)
{
int i;
for (i = 0; i < 8; i++)
r[i] = 1.0 / sqrt (s[i]);
}
void static
avx512er_test (void)
{
union512d src, res1, res2, res3;
__mmask8 mask = MASK_VALUE;
double res_ref[8];
int i;
for (i = 0; i < 8; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_rsqrt28_pd (src.x);
res2.x = _mm512_mask_rsqrt28_pd (res2.x, mask, src.x);
res3.x = _mm512_maskz_rsqrt28_pd (mask, src.x);
compute_vrsqrt28pd (src.a, res_ref);
if (check_rough_union512d (res1, res_ref, 0.0001))
abort ();
MASK_MERGE (d) (res_ref, mask, 8);
if (check_rough_union512d (res2, res_ref, 0.0001))
abort ();
MASK_ZERO (d) (res_ref, mask, 8);
if (check_rough_union512d (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512er -O2" } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[\\n\]" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 2 } } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*\{rn-sae\}\[^\n\]*%zmm\[0-9\]" 1 } } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*\{ru-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vrsqrt28ps\[ \\t\]+\[^\n\]*\{rz-sae\}\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */
#include <immintrin.h>
volatile __m512 x;
volatile __mmask16 m;
void extern
avx512er_test (void)
{
x = _mm512_rsqrt28_ps (x);
x = _mm512_mask_rsqrt28_ps (x, m, x);
x = _mm512_maskz_rsqrt28_ps (m, x);
x = _mm512_rsqrt28_round_ps (x, _MM_FROUND_TO_NEAREST_INT);
x = _mm512_mask_rsqrt28_round_ps (x, m, x, _MM_FROUND_TO_POS_INF);
x = _mm512_maskz_rsqrt28_round_ps (m, x, _MM_FROUND_TO_ZERO);
}
/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */
#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
#include <math.h>
void static
compute_vrsqrt28ps (float *s, float *r)
{
int i;
for (i = 0; i < 16; i++)
r[i] = 1.0 / sqrt (s[i]);
}
void static
avx512er_test (void)
{
union512 src, res1, res2, res3;
__mmask16 mask = MASK_VALUE;
float res_ref[16];
int i;
for (i = 0; i < 16; i++)
{
src.a[i] = 179.345 - 6.5645 * i;
res2.a[i] = DEFAULT_VALUE;
}
res1.x = _mm512_rsqrt28_ps (src.x);
res2.x = _mm512_mask_rsqrt28_ps (res2.x, mask, src.x);
res3.x = _mm512_maskz_rsqrt28_ps (mask, src.x);
compute_vrsqrt28ps (src.a, res_ref);
if (check_rough_union512 (res1, res_ref, 0.0001))
abort ();
MASK_MERGE ()(res_ref, mask, 16);
if (check_rough_union512 (res2, res_ref, 0.0001))
abort ();
MASK_ZERO ()(res_ref, mask, 16);
if (check_rough_union512 (res3, res_ref, 0.0001))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpbroadcastq\[ \\t\]+%r\[^\n\]+%zmm\[0-9\]\[^\{\]" 1 { target { ! { ia32 } } } } } */
/* { dg-final { scan-assembler-times "vpbroadcastd\[ \\t\]+%e\[^\n\]+%zmm\[0-9\]\[^\{\]" 1 { target { ! { ia32 } } } } } */
/* { dg-final { scan-assembler-times "vpbroadcastq\[ \\t\]+\[^\n\]+%zmm\[0-9\]\[^\{\]" 1 { target ia32 } } } */
/* { dg-final { scan-assembler-times "vpbroadcastd\[ \\t\]+\[^\n\]+%zmm\[0-9\]\[^\{\]" 1 { target ia32 } } } */
#include <x86intrin.h>
__m512i
foo_1 (long long y)
{
return __extension__ (__m512i)(__v8di){ y, y, y, y, y, y, y, y };
}
__m512i
foo_2 (int y)
{
return __extension__ (__m512i)(__v16si){ y, y, y, y, y, y, y, y, y,
y, y, y, y, y, y, y };
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#include "avx512f-broadcast-gpr-1.c"
void
avx512f_test (void)
{
union512i_q q;
union512i_d d;
int i;
q.x = foo_1 (3);
d.x = foo_2 (5);
for (i = 0; i < 8; i++)
{
if (q.a[i] != 3)
abort ();
}
for (i = 0; i < 16; i++)
{
if (d.a[i] != 5)
abort ();
}
}
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */
/* { dg-require-effective-target avx512f } */
/* { dg-skip-if "no M_PI" { vxworks_kernel } } */
#include <math.h>
#include "avx512f-check.h"
extern double ceil (double);
#define NUM 64
static void
__attribute__((__target__("fpmath=sse")))
init_src (double *src)
{
int i, sign = 1;
double f = rand ();
for (i = 0; i < NUM; i++)
{
src[i] = (i + 1) * f * M_PI * sign;
if (i < (NUM / 2))
{
if ((i % 6) == 0)
f = f * src[i];
}
else if (i == (NUM / 2))
f = rand ();
else if ((i % 6) == 0)
f = 1 / (f * (i + 1) * src[i] * M_PI * sign);
sign = -sign;
}
}
static void
__attribute__((__target__("fpmath=387")))
avx512f_test (void)
{
double a[NUM];
int r[NUM];
int i;
init_src (a);
for (i = 0; i < NUM; i++)
r[i] = (int) ceil (a[i]);
/* check results: */
for (i = 0; i < NUM; i++)
if (r[i] != (int) ceil (a[i]))
abort();
}
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */
#include "avx512f-ceil-sfix-vec-1.c"
/* { dg-final { scan-assembler "vrndscalepd\[^\n\]*zmm\[0-9\]" } } */
/* { dg-final { scan-assembler "vcvttpd2dq\[^\n\]*zmm\[0-9\]" } } */
#include <stdlib.h>
#include "cpuid.h"
#include "m512-check.h"
#include "avx512f-os-support.h"
static void avx512f_test (void);
static void __attribute__ ((noinline)) do_test (void)
{
avx512f_test ();
}
int
main ()
{
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return 0;
/* Run AVX512F test only if host has AVX512F support. */
if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
{
if (__get_cpuid_max (0, NULL) < 7)
return 0;
__cpuid_count (7, 0, eax, ebx, ecx, edx);
if ((avx512f_os_support ()) && ((ebx & bit_AVX512F) == bit_AVX512F))
{
do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
return 0;
}
#ifdef DEBUG
printf ("SKIPPED\n");
#endif
}
#ifdef DEBUG
else
printf ("SKIPPED\n");
#endif
return 0;
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
void static
avx512f_test (void)
{
union512i_q u, s1, s2;
long long e[8];
volatile int tst = check_union512i_q (u, e);
}
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */
/* { dg-require-effective-target avx512f } */
/* { dg-skip-if "no M_PI" { vxworks_kernel } } */
#include <math.h>
#include "avx512f-check.h"
extern double floor (double);
#define NUM 64
static void
__attribute__((__target__("fpmath=sse")))
init_src (double *src)
{
int i, sign = 1;
double f = rand ();
for (i = 0; i < NUM; i++)
{
src[i] = (i + 1) * f * M_PI * sign;
if (i < (NUM / 2))
{
if ((i % 6) == 0)
f = f * src[i];
}
else if (i == (NUM / 2))
f = rand ();
else if ((i % 6) == 0)
f = 1 / (f * (i + 1) * src[i] * M_PI * sign);
sign = -sign;
}
}
static void
__attribute__((__target__("fpmath=387")))
avx512f_test (void)
{
double a[NUM];
int r[NUM];
int i;
init_src (a);
for (i = 0; i < NUM; i++)
r[i] = (int) floor (a[i]);
/* check results: */
for (i = 0; i < NUM; i++)
if (r[i] != (int) floor (a[i]))
abort();
}
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512f" } */
#include "avx512f-floor-sfix-vec-1.c"
/* { dg-final { scan-assembler "vrndscalepd\[^\n\]*zmm\[0-9\]" } } */
/* { dg-final { scan-assembler "vcvttpd2dq\[^\n\]*zmm\[0-9\]" } } */
/* { dg-do run } */
/* { dg-require-effective-target avx512f } */
/* { dg-options "-O3 -mavx512f" } */
#include "avx512f-check.h"
#define N 1024
float vf1[N+16], vf2[N];
double vd1[N+16], vd2[N];
int vi1[N+16], vi2[N], k[N];
long long vl1[N+16], vl2[N];
long l[N];
__attribute__((noinline, noclone)) void
f1 (void)
{
int i;
for (i = 0; i < N; i++)
vf2[i] = vf1[k[i]];
}
__attribute__((noinline, noclone)) void
f2 (void)
{
int i;
for (i = 0; i < N; i++)
vi2[i] = vi1[k[i]];
}
__attribute__((noinline, noclone)) void
f3 (int x)
{
int i;
for (i = 0; i < N; i++)
vf2[i] = vf1[k[i] + x];
}
__attribute__((noinline, noclone)) void
f4 (int x)
{
int i;
for (i = 0; i < N; i++)
vi2[i] = vi1[k[i] + x];
}
__attribute__((noinline, noclone)) void
f5 (void)
{
int i;
for (i = 0; i < N; i++)
vd2[i] = vd1[k[i]];
}
__attribute__((noinline, noclone)) void
f6 (void)
{
int i;
for (i = 0; i < N; i++)
vl2[i] = vl1[k[i]];
}
__attribute__((noinline, noclone)) void
f7 (int x)
{
int i;
for (i = 0; i < N; i++)
vd2[i] = vd1[k[i] + x];
}
__attribute__((noinline, noclone)) void
f8 (int x)
{
int i;
for (i = 0; i < N; i++)
vl2[i] = vl1[k[i] + x];
}
__attribute__((noinline, noclone)) void
f9 (void)
{
int i;
for (i = 0; i < N; i++)
vf2[i] = vf1[l[i]];
}
__attribute__((noinline, noclone)) void
f10 (void)
{
int i;
for (i = 0; i < N; i++)
vi2[i] = vi1[l[i]];
}
__attribute__((noinline, noclone)) void
f11 (int x)
{
int i;
for (i = 0; i < N; i++)
vf2[i] = vf1[l[i] + x];
}
__attribute__((noinline, noclone)) void
f12 (int x)
{
int i;
for (i = 0; i < N; i++)
vi2[i] = vi1[l[i] + x];
}
__attribute__((noinline, noclone)) void
f13 (void)
{
int i;
for (i = 0; i < N; i++)
vd2[i] = vd1[l[i]];
}
__attribute__((noinline, noclone)) void
f14 (void)
{
int i;
for (i = 0; i < N; i++)
vl2[i] = vl1[l[i]];
}
__attribute__((noinline, noclone)) void
f15 (int x)
{
int i;
for (i = 0; i < N; i++)
vd2[i] = vd1[l[i] + x];
}
__attribute__((noinline, noclone)) void
f16 (int x)
{
int i;
for (i = 0; i < N; i++)
vl2[i] = vl1[l[i] + x];
}
static void
avx512f_test (void)
{
int i;
for (i = 0; i < N + 16; i++)
{
asm ("");
vf1[i] = 17.0f + i;
vd1[i] = 19.0 + i;
vi1[i] = 21 + i;
vl1[i] = 23L + i;
}
for (i = 0; i < N; i++)
{
asm ("");
k[i] = (i * 731) & (N - 1);
l[i] = (i * 657) & (N - 1);
}
f1 ();
f2 ();
for (i = 0; i < N; i++)
if (vf2[i] != ((i * 731) & (N - 1)) + 17
|| vi2[i] != ((i * 731) & (N - 1)) + 21)
abort ();
f3 (12);
f4 (14);
for (i = 0; i < N; i++)
if (vf2[i] != ((i * 731) & (N - 1)) + 17 + 12
|| vi2[i] != ((i * 731) & (N - 1)) + 21 + 14)
abort ();
f5 ();
f6 ();
for (i = 0; i < N; i++)
if (vd2[i] != ((i * 731) & (N - 1)) + 19
|| vl2[i] != ((i * 731) & (N - 1)) + 23)
abort ();
f7 (6);
f8 (3);
for (i = 0; i < N; i++)
if (vd2[i] != ((i * 731) & (N - 1)) + 19 + 6
|| vl2[i] != ((i * 731) & (N - 1)) + 23 + 3)
abort ();
f9 ();
f10 ();
for (i = 0; i < N; i++)
if (vf2[i] != ((i * 657) & (N - 1)) + 17
|| vi2[i] != ((i * 657) & (N - 1)) + 21)
abort ();
f11 (7);
f12 (9);
for (i = 0; i < N; i++)
if (vf2[i] != ((i * 657) & (N - 1)) + 17 + 7
|| vi2[i] != ((i * 657) & (N - 1)) + 21 + 9)
abort ();
f13 ();
f14 ();
for (i = 0; i < N; i++)
if (vd2[i] != ((i * 657) & (N - 1)) + 19
|| vl2[i] != ((i * 657) & (N - 1)) + 23)
abort ();
f15 (2);
f16 (12);
for (i = 0; i < N; i++)
if (vd2[i] != ((i * 657) & (N - 1)) + 19 + 2
|| vl2[i] != ((i * 657) & (N - 1)) + 23 + 12)
abort ();
}
/* { dg-do compile } */ /* PR59617 */
/* { dg-options "-O3 -mavx512f -fdump-tree-vect-details" } */
#include "avx512f-gather-1.c"
/* { dg-final { scan-assembler-not "gather\[^\n\]*ymm\[^\n\]*ymm" { xfail { *-*-* } } } } */ /* PR59617 */
/* { dg-final { scan-assembler-not "gather\[^\n\]*xmm\[^\n\]*ymm" { xfail { *-*-* } } } } */ /* PR59617 */
/* { dg-final { scan-assembler-not "gather\[^\n\]*ymm\[^\n\]*xmm" { xfail { *-*-* } } } } */ /* PR59617 */
/* { dg-final { scan-assembler-not "gather\[^\n\]*xmm\[^\n\]*xmm" { xfail { lp64 } } } } */ /* PR59617 */
/* { dg-final { scan-tree-dump-times "note: vectorized 1 loops in function" 16 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
/* { dg-do run } */
/* { dg-require-effective-target avx512f } */
/* { dg-options "-O3 -mavx512f -ffast-math" } */
#include "avx512f-check.h"
#define N 1024
float f[N];
double d[N];
int k[N];
float *l[N];
double *n[N];
int **m[N];
long q[N];
long long **o[N];
long long t[N];
long long *r[N];
int *s[N];
__attribute__((noinline, noclone)) float
f1 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += f[k[i]];
return g;
}
__attribute__((noinline, noclone)) float
f2 (float *p)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[k[i]];
return g;
}
__attribute__((noinline, noclone)) float
f3 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += *l[i];
return g;
}
__attribute__((noinline, noclone)) int
f4 (void)
{
int i;
int g = 0;
for (i = 0; i < N / 2; i++)
g += **m[i];
return g;
}
__attribute__((noinline, noclone)) double
f5 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += d[k[i]];
return g;
}
__attribute__((noinline, noclone)) double
f6 (double *p)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[k[i]];
return g;
}
__attribute__((noinline, noclone)) double
f7 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += *n[i];
return g;
}
__attribute__((noinline, noclone)) int
f8 (void)
{
int i;
int g = 0;
for (i = 0; i < N / 2; i++)
g += **o[i];
return g;
}
__attribute__((noinline, noclone)) float
f9 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += f[q[i]];
return g;
}
__attribute__((noinline, noclone)) float
f10 (float *p)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[q[i]];
return g;
}
__attribute__((noinline, noclone)) double
f11 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += d[q[i]];
return g;
}
__attribute__((noinline, noclone)) double
f12 (double *p)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[q[i]];
return g;
}
static void
avx512f_test (void)
{
int i;
for (i = 0; i < N; i++)
{
asm ("");
f[i] = -256.0f + i;
d[i] = -258.0 + i;
k[i] = (i * 731) & (N - 1);
q[i] = (i * 657) & (N - 1);
t[i] = (i * 657) & (N - 1);
l[i] = &f[(i * 239) & (N - 1)];
n[i] = &d[(i * 271) & (N - 1)];
r[i] = &t[(i * 323) & (N - 1)];
s[i] = &k[(i * 565) & (N - 1)];
m[i] = &s[(i * 13) & (N - 1)];
o[i] = &r[(i * 19) & (N - 1)];
}
if (f1 () != 136448.0f || f2 (f) != 136448.0f || f3 () != 130304.0)
abort ();
if (f4 () != 261376 || f5 () != 135424.0 || f6 (d) != 135424.0)
abort ();
if (f7 () != 129280.0 || f8 () != 259840L || f9 () != 130816.0f)
abort ();
if (f10 (f) != 130816.0f || f11 () != 129792.0 || f12 (d) != 129792.0)
abort ();
}
/* { dg-do run } */
/* { dg-require-effective-target avx512f } */
/* { dg-options "-O3 -mavx512f" } */
#include "avx512f-check.h"
#define N 1024
int a[N], b[N], c[N], d[N];
__attribute__((noinline, noclone)) void
foo (float *__restrict p, float *__restrict q, float *__restrict r,
int s1, int s2, int s3)
{
int i;
for (i = 0; i < N; i++)
p[i] = q[a[i] * s1 + b[i] * s2 + s3] * r[c[i] * s1 + d[i] * s2 + s3];
}
static void
avx512f_test (void)
{
int i;
float e[N], f[N], g[N];
for (i = 0; i < N; i++)
{
a[i] = (i * 7) & (N / 8 - 1);
b[i] = (i * 13) & (N / 8 - 1);
c[i] = (i * 23) & (N / 8 - 1);
d[i] = (i * 5) & (N / 8 - 1);
e[i] = 16.5 + i;
f[i] = 127.5 - i;
}
foo (g, e, f, 3, 2, 4);
for (i = 0; i < N; i++)
if (g[i] != (float) ((20.5 + a[i] * 3 + b[i] * 2)
* (123.5 - c[i] * 3 - d[i] * 2)))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-O3 -mavx512f" } */
#include "avx512f-gather-4.c"
/* { dg-final { scan-assembler "gather\[^\n\]*zmm" { xfail { *-*-* } } } } */ /* PR59617 */
/* { dg-final { scan-assembler-not "gather\[^\n\]*ymm\[^\n\]*ymm" { xfail { *-*-* } } } } */ /* PR59617 */
/* { dg-final { scan-assembler-not "gather\[^\n\]*xmm\[^\n\]*ymm" } } */
/* { dg-final { scan-assembler-not "gather\[^\n\]*ymm\[^\n\]*xmm" } } */
/* { dg-final { scan-assembler-not "gather\[^\n\]*xmm\[^\n\]*xmm" } } */
/* This file is used to reduce a number of runtime tests for AVX512F
instructions. Idea is to create one file per instruction -
avx512f-insn-2.c - using defines from this file instead of intrinsic
name, vector length etc. Then dg-options are set with appropriate
-Dwhatever options in that .c file producing tests for specific
length. */
#if defined (AVX512F)
#include "avx512f-check.h"
#elif defined (AVX512ER)
#include "avx512er-check.h"
#elif defined (AVX512CD)
#include "avx512cd-check.h"
#endif
/* Macros expansion. */
#define CONCAT(a,b,c) a ## b ## c
#define EVAL(a,b,c) CONCAT(a,b,c)
/* Value to be written into destination.
We have one value for all types so it must be small enough
to fit into signed char. */
#define DEFAULT_VALUE 117
#define MAKE_MASK_MERGE(NAME, TYPE) \
static void \
__attribute__((noinline, unused)) \
merge_masking_##NAME (TYPE *arr, unsigned long long mask, int size) \
{ \
int i; \
for (i = 0; i < size; i++) \
{ \
arr[i] = (mask & (1LL << i)) ? arr[i] : DEFAULT_VALUE; \
} \
}
MAKE_MASK_MERGE(i_b, char)
MAKE_MASK_MERGE(i_w, short)
MAKE_MASK_MERGE(i_d, int)
MAKE_MASK_MERGE(i_q, long long)
MAKE_MASK_MERGE(, float)
MAKE_MASK_MERGE(d, double)
#define MASK_MERGE(TYPE) merge_masking_##TYPE
#define MAKE_MASK_ZERO(NAME, TYPE) \
static void \
__attribute__((noinline, unused)) \
zero_masking_##NAME (TYPE *arr, unsigned long long mask, int size) \
{ \
int i; \
for (i = 0; i < size; i++) \
{ \
arr[i] = (mask & (1LL << i)) ? arr[i] : 0; \
} \
}
MAKE_MASK_ZERO(i_b, char)
MAKE_MASK_ZERO(i_w, short)
MAKE_MASK_ZERO(i_d, int)
MAKE_MASK_ZERO(i_q, long long)
MAKE_MASK_ZERO(, float)
MAKE_MASK_ZERO(d, double)
#define MASK_ZERO(TYPE) zero_masking_##TYPE
/* Intrinsic being tested. */
#define INTRINSIC(NAME) EVAL(_mm, AVX512F_LEN, NAME)
/* Unions used for testing (for example union512d, union256d etc.). */
#define UNION_TYPE(SIZE, NAME) EVAL(union, SIZE, NAME)
/* Corresponding union check. */
#define UNION_CHECK(SIZE, NAME) EVAL(check_union, SIZE, NAME)
/* Corresponding fp union check. */
#define UNION_FP_CHECK(SIZE, NAME) EVAL(check_fp_union, SIZE, NAME)
/* Corresponding rough union check. */
#define UNION_ROUGH_CHECK(SIZE, NAME) \
EVAL(check_rough_union, SIZE, NAME)
/* Function which tests intrinsic for given length. */
#define TEST EVAL(test_, AVX512F_LEN,)
/* Function which calculates result. */
#define CALC EVAL(calc_, AVX512F_LEN,)
#define AVX512F_LEN 512
#define AVX512F_LEN_HALF 256
static void test_512 ();
#if defined (AVX512F)
void
avx512f_test (void) { test_512 (); }
#elif defined (AVX512CD)
void
avx512cd_test (void) { test_512 (); }
#elif defined (AVX512ER)
void
avx512er_test (void) { test_512 (); }
#endif
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpgatherdd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i x, idx;
volatile __mmask16 m16;
int *base;
void extern
avx512f_test (void)
{
x = _mm512_i32gather_epi32 (idx, base, 8);
x = _mm512_mask_i32gather_epi32 (x, m16, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherdd (int *res, __mmask16 m16, int *idx,
int *src, int scale, int *r)
{
int i;
for (i = 0; i < 16; i++)
{
if (m16 & (1 << i))
r[i] = *(int *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union512i_d idx, res;
int src[16];
int res_ref[16];
__mmask16 m16 = 0xBC5D;
for (i = 0; i < 16; i++)
{
src[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 4) >> 1;
}
res.x = _mm512_mask_i32gather_epi32 (res.x, m16, idx.x, src, SCALE);
compute_gatherdd (res.a, m16, idx.a, src, SCALE, res_ref);
if (check_union512i_d (res, res_ref))
abort ();
res.x = _mm512_i32gather_epi32 (idx.x, src, SCALE);
compute_gatherdd (res.a, 0xFFFF, idx.a, src, SCALE, res_ref);
if (check_union512i_d (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vgatherdpd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512d x;
volatile __m256i idx;
volatile __mmask8 m8;
double *base;
void extern
avx512f_test (void)
{
x = _mm512_i32gather_pd (idx, base, 8);
x = _mm512_mask_i32gather_pd (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherdpd (double *res, __mmask8 m8, int *idx,
double *src, int scale, double *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(double *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union512d res;
union256i_d idx;
double src[8];
double res_ref[8];
__mmask8 m8 = 0xC5;
res.x = _mm512_setzero_pd();
for (i = 0; i < 8; i++)
{
src[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
res.x = _mm512_mask_i32gather_pd (res.x, m8, idx.x, src, SCALE);
compute_gatherdpd (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union512d (res, res_ref))
abort ();
res.x = _mm512_i32gather_pd (idx.x, src, SCALE);
compute_gatherdpd (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union512d (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vgatherdps\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512 x;
volatile __m512i idx;
volatile __mmask16 m16;
float *base;
void extern
avx512f_test (void)
{
x = _mm512_i32gather_ps (idx, base, 8);
x = _mm512_mask_i32gather_ps (x, m16, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherdps (float *res, __mmask16 m16, int *idx,
float *src, int scale, float *r)
{
int i;
for (i = 0; i < 16; i++)
{
if (m16 & (1 << i))
r[i] = *(float *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union512 res;
union512i_d idx;
float src[16];
float res_ref[16];
__mmask16 m16 = 0xBC5D;
res.x = _mm512_setzero_ps();
for (i = 0; i < 16; i++)
{
src[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 4) >> 1;
}
res.x = _mm512_mask_i32gather_ps (res.x, m16, idx.x, src, SCALE);
compute_gatherdps (res.a, m16, idx.a, src, SCALE, res_ref);
if (check_union512 (res, res_ref))
abort ();
res.x = _mm512_i32gather_ps (idx.x, src, SCALE);
compute_gatherdps (res.a, 0xFFFF, idx.a, src, SCALE, res_ref);
if (check_union512 (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpgatherdq\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i x;
volatile __m256i idx;
volatile __mmask8 m8;
long long *base;
void extern
avx512f_test (void)
{
x = _mm512_i32gather_epi64 (idx, base, 8);
x = _mm512_mask_i32gather_epi64 (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherdq (long long *res, __mmask8 m8, int *idx,
long long *src, int scale, long long *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(long long *)
(((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union256i_d idx;
union512i_q res;
long long src[8];
long long res_ref[8];
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
res.x = _mm512_mask_i32gather_epi64 (res.x, m8, idx.x, src, SCALE);
compute_gatherdq (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union512i_q (res, res_ref))
abort ();
res.x = _mm512_i32gather_epi64 (idx.x, src, SCALE);
compute_gatherdq (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union512i_q (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpscatterdd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i src, idx;
volatile __mmask16 m16;
int *addr;
void extern
avx512f_test (void)
{
_mm512_i32scatter_epi32 (addr, idx, src, 8);
_mm512_mask_i32scatter_epi32 (addr, m16, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterdd (__mmask16 m16, int *idx,
int *src, int scale, int *r)
{
int i;
for (i = 0; i < 16; i++)
{
if (m16 & (1 << i))
*(int *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union512i_d src, idx;
int res[16] = { 0 };
int res_ref[16] = { 0 };
__mmask16 m16 = 0xBC5D;
for (i = 0; i < 16; i++)
{
src.a[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 4) >> 1;
}
_mm512_mask_i32scatter_epi32 (res, m16, idx.x, src.x, SCALE);
compute_scatterdd (m16, idx.a, src.a, SCALE, res_ref);
if (checkVi (res, res_ref, 16))
abort ();
_mm512_i32scatter_epi32 (res, idx.x, src.x, SCALE);
compute_scatterdd (0xFFFF, idx.a, src.a, SCALE, res_ref);
if (checkVi (res, res_ref, 16))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vscatterdpd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512d src;
volatile __m256i idx;
volatile __mmask8 m8;
double *addr;
void extern
avx512f_test (void)
{
_mm512_i32scatter_pd (addr, idx, src, 8);
_mm512_mask_i32scatter_pd (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterdpd (__mmask8 m8, int *idx, double *src,
int scale, double *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(double *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union512d src;
union256i_d idx;
double res[8] = { 0.0 };
double res_ref[8] = { 0.0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
_mm512_mask_i32scatter_pd (res, m8, idx.x, src.x, SCALE);
compute_scatterdpd (m8, idx.a, src.a, SCALE, res_ref);
if (checkVd (res, res_ref, 8))
abort ();
_mm512_i32scatter_pd (res, idx.x, src.x, SCALE);
compute_scatterdpd (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVd (res, res_ref, 8))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vscatterdps\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512 src;
volatile __m512i idx;
volatile __mmask16 m16;
float *addr;
void extern
avx512f_test (void)
{
_mm512_i32scatter_ps (addr, idx, src, 8);
_mm512_mask_i32scatter_ps (addr, m16, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterdps (__mmask16 m16, int *idx,
float *src, int scale, float *r)
{
int i;
for (i = 0; i < 16; i++)
{
if (m16 & (1 << i))
*(float *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union512 src;
union512i_d idx;
float res[16] = { 0.0 };
float res_ref[16] = { 0.0 };
__mmask16 m16 = 0xBC5D;
for (i = 0; i < 16; i++)
{
src.a[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 4) >> 1;
}
_mm512_mask_i32scatter_ps (res, m16, idx.x, src.x, SCALE);
compute_scatterdps (m16, idx.a, src.a, SCALE, res_ref);
if (checkVf (res, res_ref, 16))
abort ();
_mm512_i32scatter_ps (res, idx.x, src.x, SCALE);
compute_scatterdps (0xFFFF, idx.a, src.a, SCALE, res_ref);
if (checkVf (res, res_ref, 16))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpscatterdq\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*ymm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i src;
volatile __m256i idx;
volatile __mmask8 m8;
long long *addr;
void extern
avx512f_test (void)
{
_mm512_i32scatter_epi64 (addr, idx, src, 8);
_mm512_mask_i32scatter_epi64 (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterdq (__mmask8 m8, int *idx, long long *src,
int scale, long long *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(long long *) (((unsigned char *) r) + idx[i] * scale) =
src[i];
}
}
static void
avx512f_test (void)
{
int i;
union256i_d idx;
union512i_q src;
long long res[8] = { 0 };
long long res_ref[8] = { 0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
_mm512_mask_i32scatter_epi64 (res, m8, idx.x, src.x, SCALE);
compute_scatterdq (m8, idx.a, src.a, SCALE, res_ref);
if (checkVl (res, res_ref, 8))
abort ();
_mm512_i32scatter_epi64 (res, idx.x, src.x, SCALE);
compute_scatterdq (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVl (res, res_ref, 8))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpgatherqd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*ymm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m256i x;
volatile __m512i idx;
volatile __mmask8 m8;
int *base;
void extern
avx512f_test (void)
{
x = _mm512_i64gather_epi32 (idx, base, 8);
x = _mm512_mask_i64gather_epi32 (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherqd (int *res, __mmask8 m8, long long *idx,
int *src, int scale, int *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(int *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union256i_d res;
union512i_q idx;
int src[8];
int res_ref[8];
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
res.x = _mm512_mask_i64gather_epi32 (res.x, m8, idx.x, src, SCALE);
compute_gatherqd (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union256i_d (res, res_ref))
abort ();
res.x = _mm512_i64gather_epi32 (idx.x, src, SCALE);
compute_gatherqd (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union256i_d (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vgatherqpd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512d x;
volatile __m512i idx;
volatile __mmask8 m8;
double *base;
void extern
avx512f_test (void)
{
x = _mm512_i64gather_pd (idx, base, 8);
x = _mm512_mask_i64gather_pd (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherqpd (double *res, __mmask8 m8, long long *idx,
double *src, int scale, double *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(double *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union512d res;
union512i_q idx;
double src[8];
double res_ref[8];
__mmask8 m8 = 0xC5;
res.x = _mm512_setzero_pd();
for (i = 0; i < 8; i++)
{
src[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
res.x = _mm512_mask_i64gather_pd (res.x, m8, idx.x, src, SCALE);
compute_gatherqpd (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union512d (res, res_ref))
abort ();
res.x = _mm512_i64gather_pd (idx.x, src, SCALE);
compute_gatherqpd (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union512d (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vgatherqps\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*ymm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m256 x;
volatile __m512i idx;
volatile __mmask8 m8;
float *base;
void extern
avx512f_test (void)
{
x = _mm512_i64gather_ps (idx, base, 8);
x = _mm512_mask_i64gather_ps (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherqps (float *res, __mmask8 m8, long long *idx,
float *src, int scale, float *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(float *) (((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union256 res;
union512i_q idx;
float src[8];
float res_ref[8];
__mmask8 m8 = 0xC5;
res.x = _mm256_setzero_ps();
for (i = 0; i < 8; i++)
{
src[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
res.x = _mm512_mask_i64gather_ps (res.x, m8, idx.x, src, SCALE);
compute_gatherqps (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union256 (res, res_ref))
abort ();
res.x = _mm512_i64gather_ps (idx.x, src, SCALE);
compute_gatherqps (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union256 (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpgatherqq\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i x, idx;
volatile __mmask8 m8;
long long *base;
void extern
avx512f_test (void)
{
x = _mm512_i64gather_epi64 (idx, base, 8);
x = _mm512_mask_i64gather_epi64 (x, m8, idx, base, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_gatherqq (long long *res, __mmask8 m8, long long *idx,
long long *src, int scale, long long *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
r[i] = *(long long *)
(((unsigned char *) src) + idx[i] * scale);
else
r[i] = res[i];
}
}
static void
avx512f_test (void)
{
int i;
union512i_q idx, res;
long long src[8];
long long res_ref[8];
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
res.x = _mm512_mask_i64gather_epi64 (res.x, m8, idx.x, src, SCALE);
compute_gatherqq (res.a, m8, idx.a, src, SCALE, res_ref);
if (check_union512i_q (res, res_ref))
abort ();
res.x = _mm512_i64gather_epi64 (idx.x, src, SCALE);
compute_gatherqq (res.a, 0xFF, idx.a, src, SCALE, res_ref);
if (check_union512i_q (res, res_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpscatterqd\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m256i src;
volatile __m512i idx;
volatile __mmask8 m8;
int *addr;
void extern
avx512f_test (void)
{
_mm512_i64scatter_epi32 (addr, idx, src, 8);
_mm512_mask_i64scatter_epi32 (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterqd (__mmask8 m8, long long *idx,
int *src, int scale, int *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(int *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union256i_d src;
union512i_q idx;
int res[8] = { 0 };
int res_ref[8] = { 0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
_mm512_mask_i64scatter_epi32 (res, m8, idx.x, src.x, SCALE);
compute_scatterqd (m8, idx.a, src.a, SCALE, res_ref);
if (checkVi (res, res_ref, 8))
abort ();
_mm512_i64scatter_epi32 (res, idx.x, src.x, SCALE);
compute_scatterqd (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVi (res, res_ref, 8))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vscatterqpd\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512d src;
volatile __m512i idx;
volatile __mmask8 m8;
double *addr;
void extern
avx512f_test (void)
{
_mm512_i64scatter_pd (addr, idx, src, 8);
_mm512_mask_i64scatter_pd (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterqpd (__mmask8 m8, long long *idx, double *src,
int scale, double *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(double *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union512d src;
union512i_q idx;
double res[8] = { 0.0 };
double res_ref[8] = { 0.0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
_mm512_mask_i64scatter_pd (res, m8, idx.x, src.x, SCALE);
compute_scatterqpd (m8, idx.a, src.a, SCALE, res_ref);
if (checkVd (res, res_ref, 8))
abort ();
_mm512_i64scatter_pd (res, idx.x, src.x, SCALE);
compute_scatterqpd (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVd (res, res_ref, 8))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vscatterqps\[ \\t\]+\[^\n\]*ymm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m256 src;
volatile __m512i idx;
volatile __mmask8 m8;
float *addr;
void extern
avx512f_test (void)
{
_mm512_i64scatter_ps (addr, idx, src, 8);
_mm512_mask_i64scatter_ps (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterqps (__mmask8 m8, long long *idx,
float *src, int scale, float *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(float *) (((unsigned char *) r) + idx[i] * scale) = src[i];
}
}
static void
avx512f_test (void)
{
int i;
union256 src;
union512i_q idx;
float res[8] = { 0.0 };
float res_ref[8] = { 0.0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
_mm512_mask_i64scatter_ps (res, m8, idx.x, src.x, SCALE);
compute_scatterqps (m8, idx.a, src.a, SCALE, res_ref);
if (checkVf (res, res_ref, 8))
abort ();
_mm512_i64scatter_ps (res, idx.x, src.x, SCALE);
compute_scatterqps (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVf (res, res_ref, 8))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "vpscatterqq\[ \\t\]+\[^\n\]*zmm\[0-9\]\[^\n\]*zmm\[0-9\]\[^\n\]*{%k\[1-7\]}" 2 } } */
#include <immintrin.h>
volatile __m512i src, idx;
volatile __mmask8 m8;
long long *addr;
void extern
avx512f_test (void)
{
_mm512_i64scatter_epi64 (addr, idx, src, 8);
_mm512_mask_i64scatter_epi64 (addr, m8, idx, src, 8);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
#define SCALE 2
static void
compute_scatterqq (__mmask8 m8, long long *idx, long long *src,
int scale, long long *r)
{
int i;
for (i = 0; i < 8; i++)
{
if (m8 & (1 << i))
*(long long *) (((unsigned char *) r) + idx[i] * scale) =
src[i];
}
}
static void
avx512f_test (void)
{
int i;
union512i_q src, idx;
long long res[8] = { 0 };
long long res_ref[8] = { 0 };
__mmask8 m8 = 0xC5;
for (i = 0; i < 8; i++)
{
src.a[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (64 - (i + 1) * 8) >> 1;
}
_mm512_mask_i64scatter_epi64 (res, m8, idx.x, src.x, SCALE);
compute_scatterqq (m8, idx.a, src.a, SCALE, res_ref);
if (checkVl (res, res_ref, 8))
abort ();
_mm512_i64scatter_epi64 (res, idx.x, src.x, SCALE);
compute_scatterqq (0xFF, idx.a, src.a, SCALE, res_ref);
if (checkVl (res, res_ref, 8))
abort ();
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static void
init_vpadd_mask (int* dst, int *src1, int *src2, int seed)
{
int i;
for (i = 0; i < 16; i++)
{
dst[i] = -1;
src1[i] = seed * 2 * i + 1;
src2[i] = seed * 2 * i;
}
}
static inline void
calc_vpadd_mask_zeroed (int *dst, __mmask16 m, int *src1, int *src2)
{
int i;
for (i = 0; i < 16; i++)
{
if (m & (1 << i))
dst[i] = src1[i] + src2[i];
else
dst[i] = 0;
}
}
void static
avx512f_test (void)
{
/* Checking mask arithmetic instruction */
__mmask16 msk_dst, msk_src1, msk_src2, msk_dst_ref;
msk_src1 = 0x0FFB;
msk_src2 = 0x0F0F;
asm ("kandw\t%2, %1, %0"
: "=Yk" (msk_dst)
: "Yk" (msk_src1), "Yk" (msk_src2));
msk_dst_ref = _mm512_kand (msk_src1, msk_src2);
if (msk_dst != msk_dst_ref)
abort ();
/* Checking zero-masked vector instruction */
union512i_d dst, src1, src2;
int dst_ref[16];
init_vpadd_mask (dst.a, src1.a, src2.a, 1);
init_vpadd_mask (dst_ref, src1.a, src2.a, 1);
asm ("vpaddd\t%2, %1, %0 %{%3%}%{z%}"
: "=x" (dst.x)
: "x" (src1.x), "x" (src2.x), "k" (msk_dst));
calc_vpadd_mask_zeroed (dst_ref, msk_dst, src1.a, src2.a);
if (check_union512i_d (dst, dst_ref))
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "kandnw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kandn (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "kandw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kand (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* { dg-do run } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
void
avx512f_test (void)
{
__mmask16 dst, src1, src2, dst_ref;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (src1) : "r" (0x0FFF) );
__asm__( "kmovw %1, %0" : "=k" (src2) : "r" (0x0F0F) );
dst = _mm512_kand (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = src1 & src2;
if (dst != dst_ref)
abort ();
dst = _mm512_kandn (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = ~src1 & src2;
if (dst != dst_ref)
abort ();
dst = _mm512_kor (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = src1 | src2;
if (dst != dst_ref)
abort ();
dst = _mm512_kxnor (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = ~(src1 ^ src2);
if (dst != dst_ref)
abort ();
dst = _mm512_kxor (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = src1 ^ src2;
if (dst != dst_ref)
abort ();
dst = _mm512_knot (src1);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = ~src1;
if (dst != dst_ref)
abort ();
dst = _mm512_kunpackb (src1, src2);
x = _mm512_mask_add_ps (x, dst, x, x);
dst_ref = 0xFF0F;
if (dst != dst_ref)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "knotw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (45) );
k2 = _mm512_knot (k1);
x = _mm512_mask_add_ps (x, k1, x, x);
x = _mm512_mask_add_ps (x, k2, x, x);
}
/* { dg-do compile } */
/* { dg-options "-O0 -mavx512f" } */
/* { dg-final { scan-assembler-times "kortestw\[ \\t\]+\[^\n\]*%k\[0-7\]" 4 } } */
#include <immintrin.h>
void
avx512f_test () {
volatile __mmask16 k1;
__mmask16 k2;
volatile __mmask8 k3;
__mmask8 k4;
volatile short r;
/* Check that appropriate insn sequence is generated at -O0. */
r = _mm512_kortestc (k1, k2);
r = _mm512_kortestz (k1, k2);
r = _mm512_kortestc (k3, k4);
r = _mm512_kortestz (k3, k4);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
void
avx512f_test () {
volatile __mmask16 k1;
__mmask16 k2;
volatile short r = 0;
/* Test kortestc. */
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (45) );
r += _mm512_kortestc (k1, k2);
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
r += _mm512_kortestc (k1, k2);
if (r)
abort ();
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (-1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
r += _mm512_kortestc (k1, k2);
if (!r)
abort ();
r = 0;
/* Test kortestz. */
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (45) );
r += _mm512_kortestz (k1, k2);
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (-1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
r += _mm512_kortestz (k1, k2);
if (r)
abort ();
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (0) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (0) );
r += _mm512_kortestz (k1, k2);
if (!r)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "korw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kor (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "kunpckbw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test () {
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kunpackb (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "kxnorw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kxnor (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* { dg-do compile } */
/* { dg-options "-mavx512f -O2" } */
/* { dg-final { scan-assembler-times "kxorw\[ \\t\]+\[^\n\]*%k\[1-7\]" 1 } } */
#include <immintrin.h>
void
avx512f_test ()
{
__mmask16 k1, k2, k3;
volatile __m512 x;
__asm__( "kmovw %1, %0" : "=k" (k1) : "r" (1) );
__asm__( "kmovw %1, %0" : "=k" (k2) : "r" (2) );
k3 = _mm512_kxor (k1, k2);
x = _mm512_mask_add_ps (x, k3, x, x);
}
/* Type of mask. */
#if SIZE <= 8
#define MASK_TYPE __mmask8
#define MASK_VALUE 0xB9
#elif SIZE <= 16
#define MASK_TYPE __mmask16
#define MASK_VALUE 0xA6BA
#endif
/* Check if the OS supports executing AVX512F instructions. */
static int
avx512f_os_support (void)
{
unsigned int eax, edx;
__asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
return (eax & 230) == 230;
}
/* { dg-do compile } */
/* { dg-options "-O0 -mavx512f" } */
#include <x86intrin.h>
int
test_rounding (__m128d x, int r)
{
return _mm_cvt_roundsd_i32 (x, r); /* { dg-error "incorrect rounding operand." } */
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512
__attribute__ ((noinline))
foo (float *v)
{
return _mm512_set_ps (v[15], v[14], v[13], v[12],
v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4],
v[3], v[2], v[1], v[0]);
}
static __m512
__attribute__ ((noinline))
foo_r (float *v)
{
return _mm512_setr_ps (v[0], v[1], v[2], v[3],
v[4], v[5], v[6], v[7],
v[8], v[9], v[10], v[11],
v[12], v[13], v[14], v[15]);
}
static void
avx512f_test (void)
{
float v[16] = { -3.3, 2.6, 1.48, 9.104, -23.9, 17, -13.48, 4,
69.78, 0.33, 81, 0.4, -8.9, -173.37, 0.8, 68 };
union512 res;
res.x = foo (v);
if (check_union512 (res, v))
abort ();
res.x = _mm512_setzero_ps ();
res.x = foo_r (v);
if (check_union512 (res, v))
abort ();
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512
__attribute__ ((noinline))
foo (float x1, float x2, float x3, float x4,
float x5, float x6, float x7, float x8,
float x9, float x10, float x11, float x12,
float x13, float x14, float x15, float x16)
{
return _mm512_set_ps (x1, x2, x3, x4, x5, x6, x7, x8,
x9, x10, x11, x12, x13, x14, x15, x16);
}
static __m512
__attribute__ ((noinline))
foo_r (float x1, float x2, float x3, float x4,
float x5, float x6, float x7, float x8,
float x9, float x10, float x11, float x12,
float x13, float x14, float x15, float x16)
{
return _mm512_setr_ps (x16, x15, x14, x13, x12, x11, x10, x9,
x8, x7, x6, x5, x4, x3, x2, x1);
}
static void
avx512f_test (void)
{
float v[16] = { -3.3, 2.6, 1.48, 9.104, -23.9, 17, -13.48, 4,
69.78, 0.33, 81, 0.4, -8.9, -173.37, 0.8, 68 };
union512 res;
res.x = foo (v[15], v[14], v[13], v[12], v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4], v[3], v[2], v[1], v[0]);
if (check_union512 (res, v))
abort ();
res.x = _mm512_setzero_ps ();
res.x = foo_r (v[15], v[14], v[13], v[12], v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4], v[3], v[2], v[1], v[0]);
if (check_union512 (res, v))
abort ();
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512
__attribute__ ((noinline))
foo (float x)
{
return _mm512_set_ps (x, x, x, x, x, x, x, x,
x, x, x, x, x, x, x, x);
}
static __m512
__attribute__ ((noinline))
foo_r (float x)
{
return _mm512_setr_ps (x, x, x, x, x, x, x, x,
x, x, x, x, x, x, x, x);
}
static void
avx512f_test (void)
{
int i;
float e = 34.5;
float v[16];
union512 res;
for (i = 0; i < 16; i++)
v[i] = e;
res.x = foo (e);
if (check_union512 (res, v))
abort ();
res.x = _mm512_setzero_ps ();
res.x = foo_r (e);
if (check_union512 (res, v))
abort ();
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512
__attribute__ ((noinline))
foo (float x, int i)
{
switch (i)
{
case 15:
return _mm512_set_ps (x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 14:
return _mm512_set_ps (0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 13:
return _mm512_set_ps (0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 12:
return _mm512_set_ps (0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 11:
return _mm512_set_ps (0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 10:
return _mm512_set_ps (0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 9:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 8:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0);
case 7:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0);
case 6:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0);
case 5:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0);
case 4:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0);
case 3:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0);
case 2:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0);
case 1:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0);
case 0:
return _mm512_set_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x);
default:
abort ();
}
}
static __m512
__attribute__ ((noinline))
foo_r (float x, int i)
{
switch (i)
{
case 0:
return _mm512_setr_ps (x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 1:
return _mm512_setr_ps (0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 2:
return _mm512_setr_ps (0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 3:
return _mm512_setr_ps (0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 4:
return _mm512_setr_ps (0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 5:
return _mm512_setr_ps (0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 6:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0, 0);
case 7:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0, 0);
case 8:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0, 0);
case 9:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0, 0);
case 10:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0, 0);
case 11:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0, 0);
case 12:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0, 0);
case 13:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0, 0);
case 14:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x, 0);
case 15:
return _mm512_setr_ps (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x);
default:
abort ();
}
}
static void
avx512f_test (void)
{
float e = -3.234;
float v[16];
union512 res;
int i, j;
for (i = 0; i < 16; i++)
{
for (j = 0; j < 16; j++)
v[j] = 0;
v[i] = e;
res.x = foo (e, i);
if (check_union512 (res, v))
abort ();
res.x = _mm512_setzero_ps ();
res.x = foo_r (e, i);
if (check_union512 (res, v))
abort ();
}
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512
__attribute__ ((noinline))
foo (float x, int i)
{
switch (i)
{
case 15:
return _mm512_set_ps (x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 14:
return _mm512_set_ps (1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 13:
return _mm512_set_ps (1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 12:
return _mm512_set_ps (1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 11:
return _mm512_set_ps (1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 10:
return _mm512_set_ps (1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 9:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 8:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1);
case 7:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1);
case 6:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1);
case 5:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1);
case 4:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1);
case 3:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1);
case 2:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1);
case 1:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1);
case 0:
return _mm512_set_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x);
default:
abort ();
}
}
static __m512
__attribute__ ((noinline))
foo_r (float x, int i)
{
switch (i)
{
case 0:
return _mm512_setr_ps (x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 1:
return _mm512_setr_ps (1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 2:
return _mm512_setr_ps (1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 3:
return _mm512_setr_ps (1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 4:
return _mm512_setr_ps (1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 5:
return _mm512_setr_ps (1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 6:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1, 1);
case 7:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1, 1);
case 8:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1, 1);
case 9:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1, 1);
case 10:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1, 1);
case 11:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1, 1);
case 12:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1, 1);
case 13:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1, 1);
case 14:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x, 1);
case 15:
return _mm512_setr_ps (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, x);
default:
abort ();
}
}
static void
avx512f_test (void)
{
float e = -3.234;
float v[16];
union512 res;
int i, j;
for (i = 0; i < 16; i++)
{
for (j = 0; j < 16; j++)
v[j] = 1;
v[i] = e;
res.x = foo (e, i);
if (check_union512 (res, v))
abort ();
res.x = _mm512_setzero_ps ();
res.x = foo_r (e, i);
if (check_union512 (res, v))
abort ();
}
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512i
__attribute__ ((noinline))
foo (int *v)
{
return _mm512_set_epi32 (v[15], v[14], v[13], v[12],
v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4],
v[3], v[2], v[1], v[0]);
}
static __m512i
__attribute__ ((noinline))
foo_r (int *v)
{
return _mm512_setr_epi32 (v[0], v[1], v[2], v[3],
v[4], v[5], v[6], v[7],
v[8], v[9], v[10], v[11],
v[12], v[13], v[14], v[15]);
}
static void
avx512f_test (void)
{
int v[16] = { 19832468, 2134, 6576856, 6678,
8723467, 54646, 234566, 12314,
786784, 77575, 645245, 234555,
9487733, 411244, 12344, 86533 };
union512i_d res;
res.x = foo (v);
if (check_union512i_d (res, v))
abort ();
res.x = _mm512_setzero_si512 ();
res.x = foo_r (v);
if (check_union512i_d (res, v))
abort ();
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */
#include "avx512f-check.h"
static __m512i
__attribute__ ((noinline))
foo (int x1, int x2, int x3, int x4,
int x5, int x6, int x7, int x8,
int x9, int x10, int x11, int x12,
int x13, int x14, int x15, int x16)
{
return _mm512_set_epi32 (x1, x2, x3, x4, x5, x6, x7, x8,
x9, x10, x11, x12, x13, x14, x15, x16);
}
static __m512i
__attribute__ ((noinline))
foo_r (int x1, int x2, int x3, int x4,
int x5, int x6, int x7, int x8,
int x9, int x10, int x11, int x12,
int x13, int x14, int x15, int x16)
{
return _mm512_setr_epi32 (x16, x15, x14, x13, x12, x11, x10, x9,
x8, x7, x6, x5, x4, x3, x2, x1);
}
static void
avx512f_test (void)
{
int v[16] = { -3, -453, 2, -231, 1, -111, 9, -145,
23, 671, -173, 166, -13, 714, 69, 123 };
union512i_d res;
res.x = foo (v[15], v[14], v[13], v[12], v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4], v[3], v[2], v[1], v[0]);
if (check_union512i_d (res, v))
abort ();
res.x = _mm512_setzero_si512 ();
res.x = foo_r (v[15], v[14], v[13], v[12], v[11], v[10], v[9], v[8],
v[7], v[6], v[5], v[4], v[3], v[2], v[1], v[0]);
if (check_union512i_d (res, v))
abort ();
}
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