Add AVX2 testcases.

gcc/

2011-08-23  Kirill Yukhin  <kirill.yukhin@intel.com>

	* config/i386/sse.md (<s>mul<mode>3_highpart): Update.

gcc/testsuite/

2011-08-23  Kirill Yukhin  <kirill.yukhin@intel.com>

	* g++.dg/other/i386-2.C: Add -mavx2 check.
	* g++.dg/other/i386-3.C: Likewise.
	* gcc.target/i386/avx-1.c: Add AVX2.
	* gcc.target/i386/avx-2.c: Likewise.
	* gcc.target/i386/funcspec-5.c: Likewise.
	* gcc.target/i386/sse-12.c: Likewise.
	* gcc.target/i386/sse-13.c: Likewise.
	* gcc.target/i386/sse-14.c: Likewise.
	* gcc.target/i386/sse-22.c: Likewise.
	* gcc.target/i386/sse-23.c: Likewise.
	* gcc.target/i386/i386.exp (check_effective_target_avx2): Likewise.
	* gcc.target/i386/avx2-check.h: New.
	* gcc.target/i386/avx2-i32gatherd-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd256-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd256-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd256-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherd256-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd256-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd256-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd256-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherpd256-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps256-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps256-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps256-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherps256-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq-4.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq256-1.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq256-2.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq256-3.c: Likewise.
	* gcc.target/i386/avx2-i32gatherq256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd256-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd256-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd256-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherd256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd256-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd256-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd256-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps256-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps256-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps256-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherps256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq256-1.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq256-2.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq256-3.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq256-4.c: Likewise.
	* gcc.target/i386/avx2-mpsadbw-1.c: Likewise.
	* gcc.target/i386/avx2-mpsadbw-2.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastsd_pd-1.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastsd_pd-2.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastsi128-1.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastsi128-2.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastss_ps-1.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastss_ps-2.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastss_ps256-1.c: Likewise.
	* gcc.target/i386/avx2-vbroadcastss_ps256-2.c: Likewise.
	* gcc.target/i386/avx2-vextracti128-1.c: Likewise.
	* gcc.target/i386/avx2-vextracti128-2.c: Likewise.
	* gcc.target/i386/avx2-vinserti128-1.c: Likewise.
	* gcc.target/i386/avx2-vinserti128-2.c: Likewise.
	* gcc.target/i386/avx2-vmovmskb-2.c: Likewise.
	* gcc.target/i386/avx2-vmovntdqa-1.c: Likewise.
	* gcc.target/i386/avx2-vmovntdqa-2.c: Likewise.
	* gcc.target/i386/avx2-vpabsb256-1.c: Likewise.
	* gcc.target/i386/avx2-vpabsb256-2.c: Likewise.
	* gcc.target/i386/avx2-vpabsd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpabsd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpabsw256-1.c: Likewise.
	* gcc.target/i386/avx2-vpabsw256-2.c: Likewise.
	* gcc.target/i386/avx2-vpackssdw-1.c: Likewise.
	* gcc.target/i386/avx2-vpackssdw-2.c: Likewise.
	* gcc.target/i386/avx2-vpacksswb-1.c: Likewise.
	* gcc.target/i386/avx2-vpacksswb-2.c: Likewise.
	* gcc.target/i386/avx2-vpackusdw-1.c: Likewise.
	* gcc.target/i386/avx2-vpackusdw-2.c: Likewise.
	* gcc.target/i386/avx2-vpackuswb-1.c: Likewise.
	* gcc.target/i386/avx2-vpackuswb-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddb-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddb-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddd-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddd-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddq-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddq-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddsb-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddsb-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddusb-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddusb-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddusw-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddusw-2.c: Likewise.
	* gcc.target/i386/avx2-vpaddw-1.c: Likewise.
	* gcc.target/i386/avx2-vpaddw-2.c: Likewise.
	* gcc.target/i386/avx2-vpalignr256-1.c: Likewise.
	* gcc.target/i386/avx2-vpalignr256-2.c: Likewise.
	* gcc.target/i386/avx2-vpand-1.c: Likewise.
	* gcc.target/i386/avx2-vpand-2.c: Likewise.
	* gcc.target/i386/avx2-vpandn-1.c: Likewise.
	* gcc.target/i386/avx2-vpandn-2.c: Likewise.
	* gcc.target/i386/avx2-vpavgb-1.c: Likewise.
	* gcc.target/i386/avx2-vpavgb-2.c: Likewise.
	* gcc.target/i386/avx2-vpavgw-1.c: Likewise.
	* gcc.target/i386/avx2-vpavgw-2.c: Likewise.
	* gcc.target/i386/avx2-vpblendd128-1.c: Likewise.
	* gcc.target/i386/avx2-vpblendd128-2.c: Likewise.
	* gcc.target/i386/avx2-vpblendd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpblendd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpblendvb-1.c: Likewise.
	* gcc.target/i386/avx2-vpblendvb-2.c: Likewise.
	* gcc.target/i386/avx2-vpblendw-1.c: Likewise.
	* gcc.target/i386/avx2-vpblendw-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastb128-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastb128-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastb256-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastb256-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastd128-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastd128-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastq128-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastq128-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastq256-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastq256-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastw128-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastw128-2.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastw256-1.c: Likewise.
	* gcc.target/i386/avx2-vpbroadcastw256-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqb-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqb-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqd-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqd-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqq-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqq-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqw-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpeqw-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtb-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtb-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtd-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtd-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtq-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtq-2.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtw-1.c: Likewise.
	* gcc.target/i386/avx2-vpcmpgtw-2.c: Likewise.
	* gcc.target/i386/avx2-vperm2i128-1.c: Likewise.
	* gcc.target/i386/avx2-vperm2i128-2.c: Likewise.
	* gcc.target/i386/avx2-vpermd-1.c: Likewise.
	* gcc.target/i386/avx2-vpermd-2.c: Likewise.
	* gcc.target/i386/avx2-vpermpd-1.c: Likewise.
	* gcc.target/i386/avx2-vpermpd-2.c: Likewise.
	* gcc.target/i386/avx2-vpermps-1.c: Likewise.
	* gcc.target/i386/avx2-vpermps-2.c: Likewise.
	* gcc.target/i386/avx2-vpermq-1.c: Likewise.
	* gcc.target/i386/avx2-vpermq-2.c: Likewise.
	* gcc.target/i386/avx2-vphaddd-1.c: Likewise.
	* gcc.target/i386/avx2-vphaddd-2.c: Likewise.
	* gcc.target/i386/avx2-vphaddsw-1.c: Likewise.
	* gcc.target/i386/avx2-vphaddsw-2.c: Likewise.
	* gcc.target/i386/avx2-vphaddw-1.c: Likewise.
	* gcc.target/i386/avx2-vphaddw-2.c: Likewise.
	* gcc.target/i386/avx2-vphsubd-1.c: Likewise.
	* gcc.target/i386/avx2-vphsubd-2.c: Likewise.
	* gcc.target/i386/avx2-vphsubsw-1.c: Likewise.
	* gcc.target/i386/avx2-vphsubsw-2.c: Likewise.
	* gcc.target/i386/avx2-vphsubw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaddubsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaddubsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaddwd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaddwd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadq256-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskloadq256-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstored-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstored-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstored256-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstored256-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstoreq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstoreq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstoreq256-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaskstoreq256-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsb-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsb-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxub-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxub-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxud-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxud-2.c: Likewise.
	* gcc.target/i386/avx2-vpmaxuw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmaxuw-2.c: Likewise.
	* gcc.target/i386/avx2-vpminsb-1.c: Likewise.
	* gcc.target/i386/avx2-vpminsb-2.c: Likewise.
	* gcc.target/i386/avx2-vpminsd-1.c: Likewise.
	* gcc.target/i386/avx2-vpminsd-2.c: Likewise.
	* gcc.target/i386/avx2-vpminsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpminsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpminub-1.c: Likewise.
	* gcc.target/i386/avx2-vpminub-2.c: Likewise.
	* gcc.target/i386/avx2-vpminud-1.c: Likewise.
	* gcc.target/i386/avx2-vpminud-2.c: Likewise.
	* gcc.target/i386/avx2-vpminuw-1.c: Likewise.
	* gcc.target/i386/avx2-vpminuw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovmskb-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxbw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxdq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxdq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxwd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxwd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxwq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovsxwq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxbw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxdq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxdq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxwd-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxwd-2.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxwq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmovzxwq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmuldq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmuldq-2.c: Likewise.
	* gcc.target/i386/avx2-vpmulhrsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmulhrsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmulhuw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmulhuw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmulhw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmulhw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmulld-1.c: Likewise.
	* gcc.target/i386/avx2-vpmulld-2.c: Likewise.
	* gcc.target/i386/avx2-vpmullw-1.c: Likewise.
	* gcc.target/i386/avx2-vpmullw-2.c: Likewise.
	* gcc.target/i386/avx2-vpmuludq-1.c: Likewise.
	* gcc.target/i386/avx2-vpmuludq-2.c: Likewise.
	* gcc.target/i386/avx2-vpor-1.c: Likewise.
	* gcc.target/i386/avx2-vpor-2.c: Likewise.
	* gcc.target/i386/avx2-vpsadbw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsadbw-2.c: Likewise.
	* gcc.target/i386/avx2-vpshufb-1.c: Likewise.
	* gcc.target/i386/avx2-vpshufb-2.c: Likewise.
	* gcc.target/i386/avx2-vpshufd-1.c: Likewise.
	* gcc.target/i386/avx2-vpshufd-2.c: Likewise.
	* gcc.target/i386/avx2-vpshufhw-1.c: Likewise.
	* gcc.target/i386/avx2-vpshufhw-2.c: Likewise.
	* gcc.target/i386/avx2-vpshuflw-1.c: Likewise.
	* gcc.target/i386/avx2-vpshuflw-2.c: Likewise.
	* gcc.target/i386/avx2-vpsignb-1.c: Likewise.
	* gcc.target/i386/avx2-vpsignb-2.c: Likewise.
	* gcc.target/i386/avx2-vpsignd-1.c: Likewise.
	* gcc.target/i386/avx2-vpsignd-2.c: Likewise.
	* gcc.target/i386/avx2-vpsignw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsignw-2.c: Likewise.
	* gcc.target/i386/avx2-vpslld-1.c: Likewise.
	* gcc.target/i386/avx2-vpslld-2.c: Likewise.
	* gcc.target/i386/avx2-vpslldi-1.c: Likewise.
	* gcc.target/i386/avx2-vpslldi-2.c: Likewise.
	* gcc.target/i386/avx2-vpslldq-1.c: Likewise.
	* gcc.target/i386/avx2-vpslldq-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllq-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllq-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllqi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllqi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllvd128-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllvd128-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllvd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllvd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllvq128-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllvq128-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllvq256-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllvq256-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllw-2.c: Likewise.
	* gcc.target/i386/avx2-vpsllwi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsllwi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrad-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrad-2.c: Likewise.
	* gcc.target/i386/avx2-vpsradi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsradi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsravd128-1.c: Likewise.
	* gcc.target/i386/avx2-vpsravd128-2.c: Likewise.
	* gcc.target/i386/avx2-vpsravd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpsravd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpsraw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsraw-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrawi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrawi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrld-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrld-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrldi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrldi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrldq-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrldq-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlq-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlq-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlqi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlqi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvd128-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvd128-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvd256-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvq128-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvq128-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvq256-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlvq256-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlw-2.c: Likewise.
	* gcc.target/i386/avx2-vpsrlwi-1.c: Likewise.
	* gcc.target/i386/avx2-vpsrlwi-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubb-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubb-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubd-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubd-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubq-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubq-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubsb-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubsb-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubsw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubsw-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubusb-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubusb-2.c: Likewise.
	* gcc.target/i386/avx2-vpsubusw-1.c: Likewise.
	* gcc.target/i386/avx2-vpsubusw-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhbw-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhbw-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhdq-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhdq-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhqdq-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhqdq-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhwd-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpckhwd-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklbw-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklbw-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpckldq-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpckldq-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklqdq-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklqdq-2.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklwd-1.c: Likewise.
	* gcc.target/i386/avx2-vpunpcklwd-2.c: Likewise.
	* gcc.target/i386/avx2-vpxor-1.c: Likewise.
	* gcc.target/i386/avx2-vpxor-2.c: Likewise.
	* gcc.target/i386/testimm-9.c: Likewise.

From-SVN: r178006
This commit is contained in:
Kirill Yukhin 2011-08-23 19:29:54 +00:00 committed by H.J. Lu
parent a3a704a495
commit 2ddfea8a33
389 changed files with 11175 additions and 12 deletions

View File

@ -1,3 +1,7 @@
2011-08-23 Kirill Yukhin <kirill.yukhin@intel.com>
* config/i386/sse.md (<s>mul<mode>3_highpart): Update.
2011-08-23 Mark Heffernan <meheff@google.com>
PR middle-end/38509

View File

@ -4761,7 +4761,7 @@
(match_operand:VI2_AVX2 2 "nonimmediate_operand" "")))
(const_int 16))))]
"TARGET_SSE2"
"ix86_fixup_binary_operands_no_copy (MULT, V8HImode, operands);")
"ix86_fixup_binary_operands_no_copy (MULT, <MODE>mode, operands);")
(define_insn "*<s>mul<mode>3_highpart"
[(set (match_operand:VI2_AVX2 0 "register_operand" "=x,x")

View File

@ -1,3 +1,390 @@
2011-08-23 Kirill Yukhin <kirill.yukhin@intel.com>
* g++.dg/other/i386-2.C: Add -mavx2 check.
* g++.dg/other/i386-3.C: Likewise.
* gcc.target/i386/avx-1.c: Add AVX2.
* gcc.target/i386/avx-2.c: Likewise.
* gcc.target/i386/funcspec-5.c: Likewise.
* gcc.target/i386/sse-12.c: Likewise.
* gcc.target/i386/sse-13.c: Likewise.
* gcc.target/i386/sse-14.c: Likewise.
* gcc.target/i386/sse-22.c: Likewise.
* gcc.target/i386/sse-23.c: Likewise.
* gcc.target/i386/i386.exp (check_effective_target_avx2): Likewise.
* gcc.target/i386/avx2-check.h: New.
* gcc.target/i386/avx2-i32gatherd-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherd-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherd-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherd-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherd256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherd256-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherd256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherd256-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherpd256-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherps-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherps256-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherq-4.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-1.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-2.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-3.c: Likewise.
* gcc.target/i386/avx2-i32gatherq256-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherd-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherd256-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherpd256-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherps-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherps256-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherq-4.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-1.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-2.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-3.c: Likewise.
* gcc.target/i386/avx2-i64gatherq256-4.c: Likewise.
* gcc.target/i386/avx2-mpsadbw-1.c: Likewise.
* gcc.target/i386/avx2-mpsadbw-2.c: Likewise.
* gcc.target/i386/avx2-vbroadcastsd_pd-1.c: Likewise.
* gcc.target/i386/avx2-vbroadcastsd_pd-2.c: Likewise.
* gcc.target/i386/avx2-vbroadcastsi128-1.c: Likewise.
* gcc.target/i386/avx2-vbroadcastsi128-2.c: Likewise.
* gcc.target/i386/avx2-vbroadcastss_ps-1.c: Likewise.
* gcc.target/i386/avx2-vbroadcastss_ps-2.c: Likewise.
* gcc.target/i386/avx2-vbroadcastss_ps256-1.c: Likewise.
* gcc.target/i386/avx2-vbroadcastss_ps256-2.c: Likewise.
* gcc.target/i386/avx2-vextracti128-1.c: Likewise.
* gcc.target/i386/avx2-vextracti128-2.c: Likewise.
* gcc.target/i386/avx2-vinserti128-1.c: Likewise.
* gcc.target/i386/avx2-vinserti128-2.c: Likewise.
* gcc.target/i386/avx2-vmovmskb-2.c: Likewise.
* gcc.target/i386/avx2-vmovntdqa-1.c: Likewise.
* gcc.target/i386/avx2-vmovntdqa-2.c: Likewise.
* gcc.target/i386/avx2-vpabsb256-1.c: Likewise.
* gcc.target/i386/avx2-vpabsb256-2.c: Likewise.
* gcc.target/i386/avx2-vpabsd256-1.c: Likewise.
* gcc.target/i386/avx2-vpabsd256-2.c: Likewise.
* gcc.target/i386/avx2-vpabsw256-1.c: Likewise.
* gcc.target/i386/avx2-vpabsw256-2.c: Likewise.
* gcc.target/i386/avx2-vpackssdw-1.c: Likewise.
* gcc.target/i386/avx2-vpackssdw-2.c: Likewise.
* gcc.target/i386/avx2-vpacksswb-1.c: Likewise.
* gcc.target/i386/avx2-vpacksswb-2.c: Likewise.
* gcc.target/i386/avx2-vpackusdw-1.c: Likewise.
* gcc.target/i386/avx2-vpackusdw-2.c: Likewise.
* gcc.target/i386/avx2-vpackuswb-1.c: Likewise.
* gcc.target/i386/avx2-vpackuswb-2.c: Likewise.
* gcc.target/i386/avx2-vpaddb-1.c: Likewise.
* gcc.target/i386/avx2-vpaddb-2.c: Likewise.
* gcc.target/i386/avx2-vpaddd-1.c: Likewise.
* gcc.target/i386/avx2-vpaddd-2.c: Likewise.
* gcc.target/i386/avx2-vpaddq-1.c: Likewise.
* gcc.target/i386/avx2-vpaddq-2.c: Likewise.
* gcc.target/i386/avx2-vpaddsb-1.c: Likewise.
* gcc.target/i386/avx2-vpaddsb-2.c: Likewise.
* gcc.target/i386/avx2-vpaddsw-1.c: Likewise.
* gcc.target/i386/avx2-vpaddsw-2.c: Likewise.
* gcc.target/i386/avx2-vpaddusb-1.c: Likewise.
* gcc.target/i386/avx2-vpaddusb-2.c: Likewise.
* gcc.target/i386/avx2-vpaddusw-1.c: Likewise.
* gcc.target/i386/avx2-vpaddusw-2.c: Likewise.
* gcc.target/i386/avx2-vpaddw-1.c: Likewise.
* gcc.target/i386/avx2-vpaddw-2.c: Likewise.
* gcc.target/i386/avx2-vpalignr256-1.c: Likewise.
* gcc.target/i386/avx2-vpalignr256-2.c: Likewise.
* gcc.target/i386/avx2-vpand-1.c: Likewise.
* gcc.target/i386/avx2-vpand-2.c: Likewise.
* gcc.target/i386/avx2-vpandn-1.c: Likewise.
* gcc.target/i386/avx2-vpandn-2.c: Likewise.
* gcc.target/i386/avx2-vpavgb-1.c: Likewise.
* gcc.target/i386/avx2-vpavgb-2.c: Likewise.
* gcc.target/i386/avx2-vpavgw-1.c: Likewise.
* gcc.target/i386/avx2-vpavgw-2.c: Likewise.
* gcc.target/i386/avx2-vpblendd128-1.c: Likewise.
* gcc.target/i386/avx2-vpblendd128-2.c: Likewise.
* gcc.target/i386/avx2-vpblendd256-1.c: Likewise.
* gcc.target/i386/avx2-vpblendd256-2.c: Likewise.
* gcc.target/i386/avx2-vpblendvb-1.c: Likewise.
* gcc.target/i386/avx2-vpblendvb-2.c: Likewise.
* gcc.target/i386/avx2-vpblendw-1.c: Likewise.
* gcc.target/i386/avx2-vpblendw-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastb128-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastb128-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastb256-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastb256-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastd128-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastd128-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastd256-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastd256-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastq128-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastq128-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastq256-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastq256-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastw128-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastw128-2.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastw256-1.c: Likewise.
* gcc.target/i386/avx2-vpbroadcastw256-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqb-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqb-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqd-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqd-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqq-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqq-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqw-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpeqw-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtb-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtb-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtd-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtd-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtq-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtq-2.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtw-1.c: Likewise.
* gcc.target/i386/avx2-vpcmpgtw-2.c: Likewise.
* gcc.target/i386/avx2-vperm2i128-1.c: Likewise.
* gcc.target/i386/avx2-vperm2i128-2.c: Likewise.
* gcc.target/i386/avx2-vpermd-1.c: Likewise.
* gcc.target/i386/avx2-vpermd-2.c: Likewise.
* gcc.target/i386/avx2-vpermpd-1.c: Likewise.
* gcc.target/i386/avx2-vpermpd-2.c: Likewise.
* gcc.target/i386/avx2-vpermps-1.c: Likewise.
* gcc.target/i386/avx2-vpermps-2.c: Likewise.
* gcc.target/i386/avx2-vpermq-1.c: Likewise.
* gcc.target/i386/avx2-vpermq-2.c: Likewise.
* gcc.target/i386/avx2-vphaddd-1.c: Likewise.
* gcc.target/i386/avx2-vphaddd-2.c: Likewise.
* gcc.target/i386/avx2-vphaddsw-1.c: Likewise.
* gcc.target/i386/avx2-vphaddsw-2.c: Likewise.
* gcc.target/i386/avx2-vphaddw-1.c: Likewise.
* gcc.target/i386/avx2-vphaddw-2.c: Likewise.
* gcc.target/i386/avx2-vphsubd-1.c: Likewise.
* gcc.target/i386/avx2-vphsubd-2.c: Likewise.
* gcc.target/i386/avx2-vphsubsw-1.c: Likewise.
* gcc.target/i386/avx2-vphsubsw-2.c: Likewise.
* gcc.target/i386/avx2-vphsubw-1.c: Likewise.
* gcc.target/i386/avx2-vpmaddubsw-1.c: Likewise.
* gcc.target/i386/avx2-vpmaddubsw-2.c: Likewise.
* gcc.target/i386/avx2-vpmaddwd-1.c: Likewise.
* gcc.target/i386/avx2-vpmaddwd-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadd-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadd-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadd256-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadd256-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadq-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadq-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadq256-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskloadq256-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskstored-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskstored-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskstored256-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskstored256-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskstoreq-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskstoreq-2.c: Likewise.
* gcc.target/i386/avx2-vpmaskstoreq256-1.c: Likewise.
* gcc.target/i386/avx2-vpmaskstoreq256-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxsb-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxsb-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxsd-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxsd-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxsw-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxsw-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxub-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxub-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxud-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxud-2.c: Likewise.
* gcc.target/i386/avx2-vpmaxuw-1.c: Likewise.
* gcc.target/i386/avx2-vpmaxuw-2.c: Likewise.
* gcc.target/i386/avx2-vpminsb-1.c: Likewise.
* gcc.target/i386/avx2-vpminsb-2.c: Likewise.
* gcc.target/i386/avx2-vpminsd-1.c: Likewise.
* gcc.target/i386/avx2-vpminsd-2.c: Likewise.
* gcc.target/i386/avx2-vpminsw-1.c: Likewise.
* gcc.target/i386/avx2-vpminsw-2.c: Likewise.
* gcc.target/i386/avx2-vpminub-1.c: Likewise.
* gcc.target/i386/avx2-vpminub-2.c: Likewise.
* gcc.target/i386/avx2-vpminud-1.c: Likewise.
* gcc.target/i386/avx2-vpminud-2.c: Likewise.
* gcc.target/i386/avx2-vpminuw-1.c: Likewise.
* gcc.target/i386/avx2-vpminuw-2.c: Likewise.
* gcc.target/i386/avx2-vpmovmskb-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbd-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbd-2.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbq-2.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbw-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxbw-2.c: Likewise.
* gcc.target/i386/avx2-vpmovsxdq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxdq-2.c: Likewise.
* gcc.target/i386/avx2-vpmovsxwd-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxwd-2.c: Likewise.
* gcc.target/i386/avx2-vpmovsxwq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovsxwq-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbd-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbd-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbq-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbw-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxbw-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxdq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxdq-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxwd-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxwd-2.c: Likewise.
* gcc.target/i386/avx2-vpmovzxwq-1.c: Likewise.
* gcc.target/i386/avx2-vpmovzxwq-2.c: Likewise.
* gcc.target/i386/avx2-vpmuldq-1.c: Likewise.
* gcc.target/i386/avx2-vpmuldq-2.c: Likewise.
* gcc.target/i386/avx2-vpmulhrsw-1.c: Likewise.
* gcc.target/i386/avx2-vpmulhrsw-2.c: Likewise.
* gcc.target/i386/avx2-vpmulhuw-1.c: Likewise.
* gcc.target/i386/avx2-vpmulhuw-2.c: Likewise.
* gcc.target/i386/avx2-vpmulhw-1.c: Likewise.
* gcc.target/i386/avx2-vpmulhw-2.c: Likewise.
* gcc.target/i386/avx2-vpmulld-1.c: Likewise.
* gcc.target/i386/avx2-vpmulld-2.c: Likewise.
* gcc.target/i386/avx2-vpmullw-1.c: Likewise.
* gcc.target/i386/avx2-vpmullw-2.c: Likewise.
* gcc.target/i386/avx2-vpmuludq-1.c: Likewise.
* gcc.target/i386/avx2-vpmuludq-2.c: Likewise.
* gcc.target/i386/avx2-vpor-1.c: Likewise.
* gcc.target/i386/avx2-vpor-2.c: Likewise.
* gcc.target/i386/avx2-vpsadbw-1.c: Likewise.
* gcc.target/i386/avx2-vpsadbw-2.c: Likewise.
* gcc.target/i386/avx2-vpshufb-1.c: Likewise.
* gcc.target/i386/avx2-vpshufb-2.c: Likewise.
* gcc.target/i386/avx2-vpshufd-1.c: Likewise.
* gcc.target/i386/avx2-vpshufd-2.c: Likewise.
* gcc.target/i386/avx2-vpshufhw-1.c: Likewise.
* gcc.target/i386/avx2-vpshufhw-2.c: Likewise.
* gcc.target/i386/avx2-vpshuflw-1.c: Likewise.
* gcc.target/i386/avx2-vpshuflw-2.c: Likewise.
* gcc.target/i386/avx2-vpsignb-1.c: Likewise.
* gcc.target/i386/avx2-vpsignb-2.c: Likewise.
* gcc.target/i386/avx2-vpsignd-1.c: Likewise.
* gcc.target/i386/avx2-vpsignd-2.c: Likewise.
* gcc.target/i386/avx2-vpsignw-1.c: Likewise.
* gcc.target/i386/avx2-vpsignw-2.c: Likewise.
* gcc.target/i386/avx2-vpslld-1.c: Likewise.
* gcc.target/i386/avx2-vpslld-2.c: Likewise.
* gcc.target/i386/avx2-vpslldi-1.c: Likewise.
* gcc.target/i386/avx2-vpslldi-2.c: Likewise.
* gcc.target/i386/avx2-vpslldq-1.c: Likewise.
* gcc.target/i386/avx2-vpslldq-2.c: Likewise.
* gcc.target/i386/avx2-vpsllq-1.c: Likewise.
* gcc.target/i386/avx2-vpsllq-2.c: Likewise.
* gcc.target/i386/avx2-vpsllqi-1.c: Likewise.
* gcc.target/i386/avx2-vpsllqi-2.c: Likewise.
* gcc.target/i386/avx2-vpsllvd128-1.c: Likewise.
* gcc.target/i386/avx2-vpsllvd128-2.c: Likewise.
* gcc.target/i386/avx2-vpsllvd256-1.c: Likewise.
* gcc.target/i386/avx2-vpsllvd256-2.c: Likewise.
* gcc.target/i386/avx2-vpsllvq128-1.c: Likewise.
* gcc.target/i386/avx2-vpsllvq128-2.c: Likewise.
* gcc.target/i386/avx2-vpsllvq256-1.c: Likewise.
* gcc.target/i386/avx2-vpsllvq256-2.c: Likewise.
* gcc.target/i386/avx2-vpsllw-1.c: Likewise.
* gcc.target/i386/avx2-vpsllw-2.c: Likewise.
* gcc.target/i386/avx2-vpsllwi-1.c: Likewise.
* gcc.target/i386/avx2-vpsllwi-2.c: Likewise.
* gcc.target/i386/avx2-vpsrad-1.c: Likewise.
* gcc.target/i386/avx2-vpsrad-2.c: Likewise.
* gcc.target/i386/avx2-vpsradi-1.c: Likewise.
* gcc.target/i386/avx2-vpsradi-2.c: Likewise.
* gcc.target/i386/avx2-vpsravd128-1.c: Likewise.
* gcc.target/i386/avx2-vpsravd128-2.c: Likewise.
* gcc.target/i386/avx2-vpsravd256-1.c: Likewise.
* gcc.target/i386/avx2-vpsravd256-2.c: Likewise.
* gcc.target/i386/avx2-vpsraw-1.c: Likewise.
* gcc.target/i386/avx2-vpsraw-2.c: Likewise.
* gcc.target/i386/avx2-vpsrawi-1.c: Likewise.
* gcc.target/i386/avx2-vpsrawi-2.c: Likewise.
* gcc.target/i386/avx2-vpsrld-1.c: Likewise.
* gcc.target/i386/avx2-vpsrld-2.c: Likewise.
* gcc.target/i386/avx2-vpsrldi-1.c: Likewise.
* gcc.target/i386/avx2-vpsrldi-2.c: Likewise.
* gcc.target/i386/avx2-vpsrldq-1.c: Likewise.
* gcc.target/i386/avx2-vpsrldq-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlq-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlq-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlqi-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlqi-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlvd128-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlvd128-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlvd256-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlvd256-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlvq128-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlvq128-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlvq256-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlvq256-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlw-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlw-2.c: Likewise.
* gcc.target/i386/avx2-vpsrlwi-1.c: Likewise.
* gcc.target/i386/avx2-vpsrlwi-2.c: Likewise.
* gcc.target/i386/avx2-vpsubb-1.c: Likewise.
* gcc.target/i386/avx2-vpsubb-2.c: Likewise.
* gcc.target/i386/avx2-vpsubd-1.c: Likewise.
* gcc.target/i386/avx2-vpsubd-2.c: Likewise.
* gcc.target/i386/avx2-vpsubq-1.c: Likewise.
* gcc.target/i386/avx2-vpsubq-2.c: Likewise.
* gcc.target/i386/avx2-vpsubsb-1.c: Likewise.
* gcc.target/i386/avx2-vpsubsb-2.c: Likewise.
* gcc.target/i386/avx2-vpsubsw-1.c: Likewise.
* gcc.target/i386/avx2-vpsubsw-2.c: Likewise.
* gcc.target/i386/avx2-vpsubusb-1.c: Likewise.
* gcc.target/i386/avx2-vpsubusb-2.c: Likewise.
* gcc.target/i386/avx2-vpsubusw-1.c: Likewise.
* gcc.target/i386/avx2-vpsubusw-2.c: Likewise.
* gcc.target/i386/avx2-vpunpckhbw-1.c: Likewise.
* gcc.target/i386/avx2-vpunpckhbw-2.c: Likewise.
* gcc.target/i386/avx2-vpunpckhdq-1.c: Likewise.
* gcc.target/i386/avx2-vpunpckhdq-2.c: Likewise.
* gcc.target/i386/avx2-vpunpckhqdq-1.c: Likewise.
* gcc.target/i386/avx2-vpunpckhqdq-2.c: Likewise.
* gcc.target/i386/avx2-vpunpckhwd-1.c: Likewise.
* gcc.target/i386/avx2-vpunpckhwd-2.c: Likewise.
* gcc.target/i386/avx2-vpunpcklbw-1.c: Likewise.
* gcc.target/i386/avx2-vpunpcklbw-2.c: Likewise.
* gcc.target/i386/avx2-vpunpckldq-1.c: Likewise.
* gcc.target/i386/avx2-vpunpckldq-2.c: Likewise.
* gcc.target/i386/avx2-vpunpcklqdq-1.c: Likewise.
* gcc.target/i386/avx2-vpunpcklqdq-2.c: Likewise.
* gcc.target/i386/avx2-vpunpcklwd-1.c: Likewise.
* gcc.target/i386/avx2-vpunpcklwd-2.c: Likewise.
* gcc.target/i386/avx2-vpxor-1.c: Likewise.
* gcc.target/i386/avx2-vpxor-2.c: Likewise.
* gcc.target/i386/testimm-9.c: Likewise.
2011-08-23 Kirill Yukhin <kirill.yukhin@intel.com>
* g++.dg/other/i386-2.C: Add -mbmi2 check.

View File

@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
/* { 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" } */
/* 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,

View File

@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
/* { 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" } */
/* 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,

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -maes -mpclmul" } */
/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mavx2 -maes -mpclmul" } */
#include <mm_malloc.h>
@ -49,6 +49,39 @@
#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
#define __builtin_ia32_mpsadbw256(X, Y, M) __builtin_ia32_mpsadbw256(X, Y, 1)
#define __builtin_ia32_palignr256(X, Y, M) __builtin_ia32_palignr256(X, Y, 8)
#define __builtin_ia32_pblendw256(X, Y, M) __builtin_ia32_pblendw256(X, Y, 8)
#define __builtin_ia32_pshufd256(X, M) __builtin_ia32_pshufd256(X, 8)
#define __builtin_ia32_pshufhw256(X, M) __builtin_ia32_pshufhw256(X, 8)
#define __builtin_ia32_pshuflw256(X, M) __builtin_ia32_pshuflw256(X, 8)
#define __builtin_ia32_pslldqi256(X, M) __builtin_ia32_pslldqi256(X, 8)
#define __builtin_ia32_psrldqi256(X, M) __builtin_ia32_psrldqi256(X, 8)
#define __builtin_ia32_pblendd128(X, Y, M) __builtin_ia32_pblendd128(X, Y, 1)
#define __builtin_ia32_pblendd256(X, Y, M) __builtin_ia32_pblendd256(X, Y, 1)
#define __builtin_ia32_permdf256(X, M) __builtin_ia32_permdf256(X, 1)
#define __builtin_ia32_permdi256(X, M) __builtin_ia32_permdi256(X, 1)
#define __builtin_ia32_permti256(X, Y, M) __builtin_ia32_permti256(X, Y, 1)
#define __builtin_ia32_extract128i256(X, M) __builtin_ia32_extract128i256(X, 1)
#define __builtin_ia32_insert128i256(X, Y, M) __builtin_ia32_insert128i256(X, Y, 1)
#define __builtin_ia32_gathersiv2df(A, B, C, D, M) __builtin_ia32_gathersiv2df(A, B, C, D, 1)
#define __builtin_ia32_gathersiv4df(A, B, C, D, M) __builtin_ia32_gathersiv4df(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv2df(A, B, C, D, M) __builtin_ia32_gatherdiv2df(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4df(A, B, C, D, M) __builtin_ia32_gatherdiv4df(A, B, C, D, 1)
#define __builtin_ia32_gathersiv4sf(A, B, C, D, M) __builtin_ia32_gathersiv4sf(A, B, C, D, 1)
#define __builtin_ia32_gathersiv8sf(A, B, C, D, M) __builtin_ia32_gathersiv8sf(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4sf(A, B, C, D, M) __builtin_ia32_gatherdiv4sf(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4sf256(A, B, C, D, M) \
__builtin_ia32_gatherdiv4sf256(A, B, C, D, 1)
#define __builtin_ia32_gathersiv2di(A, B, C, D, M) __builtin_ia32_gathersiv2di(A, B, C, D, 1)
#define __builtin_ia32_gathersiv4di(A, B, C, D, M) __builtin_ia32_gathersiv4di(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv2di(A, B, C, D, M) __builtin_ia32_gatherdiv2di(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4di(A, B, C, D, M) __builtin_ia32_gatherdiv4di(A, B, C, D, 1)
#define __builtin_ia32_gathersiv4si(A, B, C, D, M) __builtin_ia32_gathersiv4si(A, B, C, D, 1)
#define __builtin_ia32_gathersiv8si(A, B, C, D, M) __builtin_ia32_gathersiv8si(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4si(A, B, C, D, M) __builtin_ia32_gatherdiv4si(A, B, C, D, 1)
#define __builtin_ia32_gatherdiv4si256(A, B, C, D, M) \
__builtin_ia32_gatherdiv4si256(A, B, C, D, 1)
/* wmmintrin.h */
#define __builtin_ia32_aeskeygenassist128(X, C) __builtin_ia32_aeskeygenassist128(X, 1)

View File

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -msse4a -maes -mpclmul" } */
/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mavx2 -msse4a -maes -mpclmul" } */
#include <mm_malloc.h>

View File

@ -0,0 +1,44 @@
#include <stdlib.h>
#include "cpuid.h"
#include "m256-check.h"
#include "avx-os-support.h"
static void avx2_test (void);
static void __attribute__ ((noinline)) do_test (void)
{
avx2_test ();
}
int
main ()
{
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return 0;
/* Run AVX2 test only if host has AVX2 support. */
if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
{
__cpuid_count (7, 0, eax, ebx, ecx, edx);
if ((avx_os_support ()) && ((ebx & bit_AVX2) == bit_AVX2))
{
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;
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i32gather_epi32 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherd (int *s1, int *s2, int scale, int *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128i_d res;
int s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm_i32gather_epi32 (s1, idx.x, 2);
compute_i32gatherd (s1, idx.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i32gather_epi32 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,50 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherd (int *src, int *s1, int *s2, int *mask, int scale, int *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((mask[i] >> 31) & 1)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128i_d res, src, mask;
int s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((int *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm_mask_i32gather_epi32 (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherd (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i32gather_epi32 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherd256 (int *s1, int *s2, int scale, int *r)
{
int i;
for (i = 0; i < 8; ++i)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union256i_d idx;
union256i_d res;
int s1[8], res_ref[8] = { 0 };
for (i = 0; i < 8; ++i)
{
/* Set some stuff */
s1[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 = _mm256_i32gather_epi32 (s1, idx.x, 2);
compute_i32gatherd256 (s1, idx.a, 2, res_ref);
if (check_union256i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256i x;
int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i32gather_epi32 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherd256 (int *src,
int *s1, int *s2, int *mask, int scale, int *r)
{
int i;
for (i = 0; i < 8; ++i)
if ((mask[i] >> 31) & 1)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union256i_d idx;
union256i_d res, src, mask;
int s1[8], res_ref[8] = { 0 };
for (i = 0; i < 8; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
res.x = _mm256_mask_i32gather_epi32 (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherd256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i32gather_pd (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd (double *s1, int *s2, int scale, double *r)
{
int i;
for (i = 0; i < 2; ++i)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128d res;
double s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_i32gather_pd (s1, idx.x, 2);
compute_i32gatherpd (s1, idx.a, 2, res_ref);
if (check_union128d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i32gather_pd (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd (double *src,
double *s1, int *s2, double *mask, int scale, double *r)
{
int i;
for (i = 0; i < 2; ++i)
if ((((long long *) mask)[i] >> 63) & 1)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128d res, src, mask;
double s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((long long *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_mask_i32gather_pd (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherpd (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm256_i32gather_pd (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd256 (double *s1, int *s2, int scale, double *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union256d res;
double s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[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) * 8) >> 1;
}
res.x = _mm256_i32gather_pd (s1, idx.x, 2);
compute_i32gatherpd256 (s1, idx.a, 2, res_ref);
if (check_union256d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i32gather_pd (x, base, idx, x, 1);
}

View File

@ -0,0 +1,52 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd256 (double *src,
double *s1,
int *s2, double *mask, int scale, double *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((((long long *) mask)[i] >> 63) & 1)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union256d res, src, mask;
double s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((long long *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order, divide by 2
to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm256_mask_i32gather_pd (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherpd256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i32gather_ps (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherps (float *s1, int *s2, int scale, float *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128 res;
float s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm_i32gather_ps (s1, idx.x, 2);
compute_i32gatherps (s1, idx.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i32gather_ps (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherps (float *src,
float *s1, int *s2, float *mask, int scale, float *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((((int *) mask)[i] >> 31) & 1)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_d idx;
union128 res, src, mask;
float s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((int *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm_mask_i32gather_ps (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherps (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256 x;
float *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i32gather_ps (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherps256 (float *s1, int *s2, int scale, float *r)
{
int i;
for (i = 0; i < 8; ++i)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union256i_d idx;
union256 res;
float s1[8], res_ref[8] = { 0 };
for (i = 0; i < 8; ++i)
{
/* Set some stuff */
s1[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 = _mm256_i32gather_ps (s1, idx.x, 2);
compute_i32gatherps256 (s1, idx.a, 2, res_ref);
if (check_union256 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherdps\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256 x;
float *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i32gather_ps (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherps256 (float *src,
float *s1, int *s2, float *mask, int scale, float *r)
{
int i;
for (i = 0; i < 8; ++i)
if ((((int *) mask)[i] >> 31) & 1)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union256i_d idx;
union256 res, src, mask;
float s1[8], res_ref[8] = { 0 };
for (i = 0; i < 8; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((int *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 4) >> 1;
}
res.x = _mm256_mask_i32gather_ps (src.x, s1, idx.x, mask.x, 2);
compute_i32gatherps256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i32gather_epi64 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd (long long *s1, int *s2, int scale, long long *r)
{
long long i;
for (i = 0; i < 2; ++i)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
long long i;
union128i_d idx;
union128i_q res;
long long s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_i32gather_epi64 ((long long int *) s1, idx.x, 2);
compute_i32gatherpd (s1, idx.a, 2, res_ref);
if (check_union128i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i32gather_epi64 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,53 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd (long long *src,
long long *s1,
int *s2, long long *mask, int scale, long long *r)
{
long long i;
for (i = 0; i < 2; ++i)
if ((mask[i] >> 63) & 1)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
long long i;
union128i_d idx;
union128i_q res, src, mask;
long long s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x =
_mm_mask_i32gather_epi64 (src.x, (long long int *) s1, idx.x, mask.x, 2);
compute_i32gatherpd (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm256_i32gather_epi64 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd256 (long long *s1, int *s2, int scale, long long *r)
{
long long i;
for (i = 0; i < 4; ++i)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
long long i;
union128i_d idx;
union256i_q res;
long long s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 8) >> 1;
}
res.x = _mm256_i32gather_epi64 ((long long int *) s1, idx.x, 2);
compute_i32gatherpd256 (s1, idx.a, 2, res_ref);
if (check_union256i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherdq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i32gather_epi64 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,54 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i32gatherpd256 (long long *src,
long long *s1,
int *s2, long long *mask, int scale, long long *r)
{
long long i;
for (i = 0; i < 4; ++i)
if ((mask[i] >> 63) & 1)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
long long i;
union128i_d idx;
union256i_q res, src, mask;
long long s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order, divide by 2
to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm256_mask_i32gather_epi64 (src.x,
(long long int *) s1,
idx.x, mask.x, 2);
compute_i32gatherpd256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i64gather_epi32 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps (int *s1, long long *s2, int scale, int *r)
{
int i;
for (i = 0; i < 2; ++i)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128i_d res;
int s1[2], res_ref[4] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (8 - (i + 1) * 4) >> 1;
}
res.x = _mm_i64gather_epi32 (s1, idx.x, 2);
compute_i64gatherps (s1, idx.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i64gather_epi32 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps (int *src,
int *s1, long long *s2, int *mask, int scale, int *r)
{
int i;
for (i = 0; i < 2; ++i)
if ((mask[i] >> 31) & 1)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128i_d res, src, mask;
int s1[2], res_ref[4] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (8 - (i + 1) * 4) >> 1;
}
res.x = _mm_mask_i64gather_epi32 (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherps (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i64gather_epi32 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps256 (int *s1, long long *s2, int scale, int *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union128i_d res;
int s1[8], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm256_i64gather_epi32 (s1, idx.x, 2);
compute_i64gatherps256 (s1, idx.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i64gather_epi32 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,51 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps256 (int *src,
int *s1, long long *s2, int *mask, int scale, int *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((mask[i] >> 31) & 1)
r[i] = *(int *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union128i_d res, src, mask;
int s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1973 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm256_mask_i64gather_epi32 (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherps256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128i_d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i64gather_pd (base, idx, 1);
}

View File

@ -0,0 +1,40 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd (double *s1, long long *s2, int scale, double *r)
{
int i;
for (i = 0; i < 2; ++i)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128d res;
double s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order, divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_i64gather_pd (s1, idx.x, 2);
compute_i64gatherpd (s1, idx.a, 2, res_ref);
if (check_union128d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128d x;
double *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i64gather_pd (x, base, idx, x, 1);
}

View File

@ -0,0 +1,52 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd (double *src,
double *s1,
long long int *s2, double *mask, int scale, double *r)
{
int i;
for (i = 0; i < 2; ++i)
if ((((long long *) mask)[i] >> 63) & 1)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128d res, src, mask;
double s1[2], res_ref[2] = { 0, 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((long long *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_mask_i64gather_pd (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherpd (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256d x;
double *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i64gather_pd (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd256 (double *s1, long long int *s2, int scale, double *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union256d res;
double s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[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) * 8) >> 1;
}
res.x = _mm256_i64gather_pd (s1, idx.x, 2);
compute_i64gatherpd256 (s1, idx.a, 2, res_ref);
if (check_union256d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256d x;
double *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i64gather_pd (x, base, idx, x, 1);
}

View File

@ -0,0 +1,52 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd256 (double *src,
double *s1,
long long int *s2, double *mask, int scale, double *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((((long long *) mask)[i] >> 63) & 1)
r[i] = *(double *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union256d res, src, mask;
double s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((long long *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm256_mask_i64gather_pd (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherpd256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256d (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i64gather_ps (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps (float *s1, long long *s2, int scale, float *r)
{
int i;
for (i = 0; i < 2; ++i)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128 res;
float s1[2], res_ref[4] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (8 - (i + 1) * 4) >> 1;
}
res.x = _mm_i64gather_ps (s1, idx.x, 2);
compute_i64gatherps (s1, idx.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i64gather_ps (x, base, idx, x, 1);
}

View File

@ -0,0 +1,52 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps (float *src,
float *s1,
long long *s2, float *mask, int scale, float *r)
{
int i;
for (i = 0; i < 2; ++i)
if ((((int *) mask)[i] >> 31) & 1)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union128i_q idx;
union128 res, src, mask;
float s1[2], res_ref[4] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((int *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (8 - (i + 1) * 4) >> 1;
}
res.x = _mm_mask_i64gather_ps (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherps (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i64gather_ps (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps256 (float *s1, long long *s2, int scale, float *r)
{
int i;
for (i = 0; i < 4; ++i)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union128 res;
float s1[8], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm256_i64gather_ps (s1, idx.x, 2);
compute_i64gatherps256 (s1, idx.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vgatherqps\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
float *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i64gather_ps (x, base, idx, x, 1);
}

View File

@ -0,0 +1,52 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherps256 (float *src,
float *s1,
long long *s2, float *mask, int scale, float *r)
{
int i;
for (i = 0; i < 4; ++i)
if ((((int *) mask)[i] >> 31) & 1)
r[i] = *(float *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
int i;
union256i_q idx;
union128 res, src, mask;
float s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 2.718281828459045 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((int *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 4) >> 1;
}
res.x = _mm256_mask_i64gather_ps (src.x, s1, idx.x, mask.x, 2);
compute_i64gatherps256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128 (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_i64gather_epi64 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd (long long *s1, long long *s2, int scale, long long *r)
{
long long i;
for (i = 0; i < 2; ++i)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
long long i;
union128i_q idx;
union128i_q res;
long long s1[2], res_ref[2] = { 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm_i64gather_epi64 ((long long int *) s1, idx.x, 2);
compute_i64gatherpd (s1, idx.a, 2, res_ref);
if (check_union128i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128i x;
long long int *base;
__m128i idx;
void extern
avx2_test (void)
{
x = _mm_mask_i64gather_epi64 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,53 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherpd (long long *src,
long long *s1,
long long *s2, long long *mask, int scale, long long *r)
{
long long i;
for (i = 0; i < 2; ++i)
if ((mask[i] >> 63) & 1)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
long long i;
union128i_q idx;
union128i_q res, src, mask;
long long s1[2], res_ref[2] = { 0, 0 };
for (i = 0; i < 2; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
mask.a[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x =
_mm_mask_i64gather_epi64 (src.x, (long long int *) s1, idx.x, mask.x, 2);
compute_i64gatherpd (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union128i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
long long int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_i64gather_epi64 (base, idx, 1);
}

View File

@ -0,0 +1,41 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherq256 (long long *s1, long long *s2, int scale, long long *r)
{
long long i;
for (i = 0; i < 4; ++i)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
}
void static
avx2_test (void)
{
long long i;
union256i_q idx;
union256i_q res;
long long s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (32 - (i + 1) * 8) >> 1;
}
res.x = _mm256_i64gather_epi64 ((long long int *) s1, idx.x, 2);
compute_i64gatherq256 (s1, idx.a, 2, res_ref);
if (check_union256i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpgatherqq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
__m256i x;
long long int *base;
__m256i idx;
void extern
avx2_test (void)
{
x = _mm256_mask_i64gather_epi64 (x, base, idx, x, 1);
}

View File

@ -0,0 +1,55 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
static void
compute_i64gatherq256 (long long *src,
long long *s1,
long long *s2,
long long *mask, int scale, long long *r)
{
long long i;
for (i = 0; i < 4; ++i)
if ((mask[i] >> 63) & 1)
r[i] = *(long long *) (((unsigned char *) s1) + s2[i] * scale);
else
r[i] = src[i];
}
void static
avx2_test (void)
{
long long i;
union256i_q idx;
union256i_q res, src, mask;
long long s1[4], res_ref[4] = { 0 };
for (i = 0; i < 4; ++i)
{
/* Set some stuff */
s1[i] = 1983 * (i + 1) * (i + 2);
/* Set src as something different from s1 */
src.a[i] = -s1[i];
/* Mask out evens */
((long long *) mask.a)[i] = i % 2 ? 0 : -1;
/* About to gather in reverse order,
divide by 2 to demonstrate scale */
idx.a[i] = (16 - (i + 1) * 8) >> 1;
}
res.x = _mm256_mask_i64gather_epi64 (src.x,
(long long int *) s1,
idx.x, mask.x, 2);
compute_i64gatherq256 (src.a, s1, idx.a, mask.a, 2, res_ref);
if (check_union256i_q (res, res_ref) != 0)
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-O2 -mavx2" } */
/* { dg-final { scan-assembler "mpsadbw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
/* imm = 13 is arbitrary here */
x = _mm256_mpsadbw_epu8 (x, x, 13);
}

View File

@ -0,0 +1,132 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
#define msk0 0xC0
#define msk1 0x01
#define msk2 0xF2
#define msk3 0x03
#define msk4 0x84
#define msk5 0x05
#define msk6 0xE6
#define msk7 0x67
static void
compute_mpsadbw (int *i1, int *i2, int mask, int *r)
{
unsigned char s[4];
int i, j;
int offs1, offs2;
unsigned char *v1 = (char *) i1;
unsigned char *v2 = (char *) i2;
unsigned short *ret = (unsigned short *) r;
memset (ret, 0, 32);
/* Lower part */
offs2 = 4 * (mask & 3);
for (i = 0; i < 4; i++)
s[i] = v2[offs2 + i];
offs1 = 4 * ((mask & 4) >> 2);
for (j = 0; j < 8; j++)
for (i = 0; i < 4; i++)
ret[j] += abs (v1[offs1 + j + i] - s[i]);
/* Higher part */
offs2 = 4 * ((mask >> 3) & 3) + 16;
for (i = 0; i < 4; i++)
s[i] = v2[offs2 + i];
offs1 = 4 * ((mask & 0x20) >> 5) + 16;
for (j = 0; j < 8; j++)
for (i = 0; i < 4; i++)
ret[j + 8] += abs (v1[offs1 + j + i] - s[i]);
}
static void
avx2_test (void)
{
union256i_d val1, val2, val3[8], res[8];
int tmp[8];
unsigned char masks[8];
int i, j;
val1.a[0] = 0x35251505;
val1.a[1] = 0x75655545;
val1.a[2] = 0xB5A59585;
val1.a[3] = 0xF5E5D5C5;
val1.a[4] = 0x35251505;
val1.a[5] = 0x75655545;
val1.a[6] = 0xB5A59585;
val1.a[7] = 0xF5E5D5C5;
val2.a[0] = 0x31211101;
val2.a[1] = 0x71615141;
val2.a[2] = 0xB1A19181;
val2.a[3] = 0xF1E1D1C1;
val2.a[4] = 0x31211101;
val2.a[5] = 0x71615141;
val2.a[6] = 0xB1A19181;
val2.a[7] = 0xF1E1D1C1;
for (i = 0; i < 8; i++)
switch (i % 3)
{
case 1:
val3[i].a[0] = 0xF1E1D1C1;
val3[i].a[1] = 0xB1A19181;
val3[i].a[2] = 0x71615141;
val3[i].a[3] = 0x31211101;
break;
default:
val3[i].x = val2.x;
break;
}
/* Check mpsadbw imm8, ymm, ymm. */
res[0].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk0);
res[1].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk1);
res[2].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk2);
res[3].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk3);
res[4].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk4);
res[5].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk5);
res[6].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk6);
res[7].x = _mm256_mpsadbw_epu8 (val1.x, val2.x, msk7);
masks[0] = msk0;
masks[1] = msk1;
masks[2] = msk2;
masks[3] = msk3;
masks[4] = msk4;
masks[5] = msk5;
masks[6] = msk6;
masks[7] = msk7;
for (i = 0; i < 8; i++)
{
compute_mpsadbw (val1.a, val2.a, masks[i], tmp);
if (check_union256i_d (res[i], tmp))
abort ();
}
/* Check mpsadbw imm8, m256, ymm. */
for (i = 0; i < 8; i++)
{
res[i].x = _mm256_mpsadbw_epu8 (val1.x, val3[i].x, msk4);
masks[i] = msk4;
}
for (i = 0; i < 8; i++)
{
compute_mpsadbw (val1.a, val3[i].a, masks[i], tmp);
if (check_union256i_d (res[i], tmp))
abort ();
}
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vbroadcastsd\[ \\t\]+\[^\n\]*" } } */
#include <immintrin.h>
__m128d x;
__m256d y;
void extern
avx2_test (void)
{
y = _mm256_broadcastsd_pd (x);
}

View File

@ -0,0 +1,32 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union128d s1;
union256d res;
double res_ref[4];
int i, j;
int fail = 0;
for (i = 0; i < 10; i++)
{
s1.a[0] = i * 3.14;
res.x = _mm256_broadcastsd_pd (s1.x);
for (j = 0; j < 4; j++)
memcpy (res_ref + j, s1.a, 8);
fail += check_union256d (res, res_ref);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vbroadcasti128\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
__m128i y;
void extern
avx2_test (void)
{
x = _mm_broadcastsi128_si256 (y);
}

View File

@ -0,0 +1,33 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union128i_q s1;
union256i_q res;
long long int res_ref[4];
int i, j;
int fail = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 2; j++)
s1.a[j] = j * i;
res.x = _mm_broadcastsi128_si256 (s1.x);
memcpy (res_ref, s1.a, 16);
memcpy (res_ref + 2, s1.a, 16);
fail += check_union256i_q (res, res_ref);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vbroadcastss\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
void extern
avx2_test (void)
{
x = _mm_broadcastss_ps (x);
}

View File

@ -0,0 +1,31 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union128 s1, res;
float res_ref[4];
int i, j;
int fail = 0;
for (i = 0; i < 10; i++)
{
s1.a[0] = i * 3.14;
res.x = _mm_broadcastss_ps (s1.x);
for (j = 0; j < 4; j++)
memcpy (res_ref + j, s1.a, 4);
fail += check_union128 (res, res_ref);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vbroadcastss\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */
#include <immintrin.h>
__m128 x;
__m256 y;
void extern
avx2_test (void)
{
y = _mm256_broadcastss_ps (x);
}

View File

@ -0,0 +1,32 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union128 s1;
union256 res;
float res_ref[8];
int i, j;
int fail = 0;
for (i = 0; i < 10; i++)
{
s1.a[0] = i * 3.14;
res.x = _mm256_broadcastss_ps (s1.x);
for (j = 0; j < 8; j++)
memcpy (res_ref + j, s1.a, 4);
fail += check_union256 (res, res_ref);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vextracti128\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
__m128i y;
void extern
avx2_test (void)
{
y = _mm256_extracti128_si256 (x, 1);
}

View File

@ -0,0 +1,34 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union256i_q s1;
union128i_q res;
long long int res_ref[2];
int j;
for (j = 0; j < 4; j++)
s1.a[j] = j * j;
res.x = _mm256_extracti128_si256 (s1.x, 0);
memset (res_ref, 0, 16);
memcpy (res_ref, s1.a, 16);
if (check_union128i_q (res, res_ref))
abort ();
res.x = _mm256_extracti128_si256 (s1.x, 1);
memset (res_ref, 0, 16);
memcpy (res_ref, s1.a + 2, 16);
if (check_union128i_q (res, res_ref))
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vinserti128\[ \\t\]+\[^\n\]" } } */
#include <immintrin.h>
volatile __m256i x;
__m128i y;
void extern
avx2_test (void)
{
x = _mm256_inserti128_si256 (x, y, 1);
}

View File

@ -0,0 +1,37 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include <string.h>
#include "avx2-check.h"
void static
avx2_test (void)
{
union256i_q s1, res;
union128i_q s2;
long long int res_ref[4];
int j;
for (j = 0; j < 4; j++)
s1.a[j] = j * j;
for (j = 0; j < 2; j++)
s2.a[j] = j * j * j;
res.x = _mm256_inserti128_si256 (s1.x, s2.x, 0);
memcpy (res_ref, s1.a, 32);
memcpy (res_ref, s2.a, 16);
if (check_union256i_q (res, res_ref))
abort ();
res.x = _mm256_inserti128_si256 (s1.x, s2.x, 1);
memcpy (res_ref, s1.a, 32);
memcpy (res_ref + 2, s2.a, 16);
if (check_union256i_q (res, res_ref))
abort ();
}

View File

@ -0,0 +1,26 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vmovmskb" } } */
#include "avx2-check.h"
static void
avx2_test (void)
{
union256i_b s;
int res, res_ref;
int i, e = 0;
s.x = _mm256_set_epi8 (1, 2, 3, 4, 10, 20, 30, 90, -80, -40, -100,
15, 98, 25, 98, 7, 1, 2, 3, 4, 10, 20, 30, 90,
-80, -40, -100, -15, 98, 25, 98, 7);
res = _mm256_movemask_epi8 (s.x);
for (i = 0; i < 32; i++)
if (s.a[i] & (1 << 7))
res_ref = res_ref | (1 << i);
if (res != res_ref)
abort ();
}

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vmovntdqa\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
__m256i *y;
void extern
avx2_test (void)
{
x = _mm256_stream_load_si256 (y);
}

View File

@ -0,0 +1,26 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include "avx2-check.h"
void static
avx2_test (void)
{
union256i_q s1, res;
int i, j;
int fail = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 4; j++)
s1.a[j] = j * i;
res.x = _mm256_stream_load_si256 (&s1.x);
fail += check_union256i_q (res, s1.a);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpabsb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_abs_epi8 (x);
}

View File

@ -0,0 +1,46 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include "ssse3-vals.h"
#include "avx2-check.h"
/* Routine to manually compute the results */
static void
compute_pabs256 (int *i1, char *r)
{
char *b1 = (char *) i1;
int i;
for (i = 0; i < 32; i++)
if (b1[i] < 0)
r[i] = -b1[i];
else
r[i] = b1[i];
}
static void
avx2_test (void)
{
int i;
char ck[32];
int fail = 0;
union256i_b s, d;
for (i = 0; i < 256; ++i)
{
/* Recompute the results for 256-bits */
compute_pabs256 (&vals[i], ck);
s.x = _mm256_loadu_si256 ((__m256i *) & vals[i]);
/* Run the 256-bit tests */
d.x = _mm256_abs_epi8 (s.x);
fail += check_union256i_b (d, ck);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpabsd\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_abs_epi32 (x);
}

View File

@ -0,0 +1,45 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include "ssse3-vals.h"
#include "avx2-check.h"
/* Routine to manually compute the results */
static void
compute_pabs256 (int *i1, int *r)
{
int i;
for (i = 0; i < 8; i++)
if (i1[i] < 0)
r[i] = -i1[i];
else
r[i] = i1[i];
}
static void
avx2_test (void)
{
int i;
int ck[8];
int fail = 0;
union256i_d s, d;
for (i = 0; i < 256; ++i)
{
/* Recompute the results for 256-bits */
compute_pabs256 (&vals[i], ck);
s.x = _mm256_loadu_si256 ((__m256i *) & vals[i]);
/* Run the 256-bit tests */
d.x = _mm256_abs_epi32 (s.x);
fail += check_union256i_d (d, ck);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpabsw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_abs_epi16 (x);
}

View File

@ -0,0 +1,47 @@
/* { dg-do run } */
/* { dg-require-effective-target avx2 } */
/* { dg-options "-O2 -mavx2" } */
#include "ssse3-vals.h"
#include "avx2-check.h"
/* Routine to manually compute the results */
static void
compute_pabs256 (int *i1, short *r)
{
short *b1 = (short *) i1;
int i;
for (i = 0; i < 16; i++)
if (b1[i] < 0)
r[i] = -b1[i];
else
r[i] = b1[i];
}
static void
avx2_test (void)
{
int i;
short ck[16];
int fail = 0;
union256i_w s, d;
for (i = 0; i < 256; ++i)
{
/* Using only first 2 bytes of int */
/* Recompute the results for 256-bits */
compute_pabs256 (&vals[i], ck);
s.x = _mm256_loadu_si256 ((__m256i *) & vals[i]);
/* Run the 256-bit tests */
d.x = _mm256_abs_epi16 (s.x);
fail += check_union256i_w (d, ck);
}
if (fail != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpackssdw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_packs_epi32 (x, x);
}

View File

@ -0,0 +1,46 @@
/* { dg-do run } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-require-effective-target avx2 } */
#include "avx2-check.h"
static short
int_to_short (int iVal)
{
short sVal;
if (iVal < -32768)
sVal = -32768;
else if (iVal > 32767)
sVal = 32767;
else
sVal = iVal;
return sVal;
}
void static
avx2_test (void)
{
union256i_d s1, s2;
union256i_w u;
short e[16];
int i;
s1.x = _mm256_set_epi32 (1, 2, 3, 4, 65000, 20, 30, 90);
s2.x = _mm256_set_epi32 (88, 44, 33, 22, 11, 98, 76, -65000);
u.x = _mm256_packs_epi32 (s1.x, s2.x);
for (i = 0; i < 4; i++)
{
e[i] = int_to_short (s1.a[i]);
e[i + 4] = int_to_short (s2.a[i]);
e[i + 8] = int_to_short (s1.a[i + 4]);
e[i + 12] = int_to_short (s2.a[i + 4]);
}
if (check_union256i_w (u, e))
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpacksswb\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_packs_epi16 (x, x);
}

View File

@ -0,0 +1,48 @@
/* { dg-do run } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-require-effective-target avx2 } */
#include "avx2-check.h"
static char
short_to_byte (short iVal)
{
char sVal;
if (iVal < -128)
sVal = -128;
else if (iVal > 127)
sVal = 127;
else
sVal = iVal;
return sVal;
}
void static
avx2_test (void)
{
union256i_w s1, s2;
union256i_b u;
char e[32];
int i;
s1.x = _mm256_set_epi16 (1, 2, 3, 4, 6500, 20, 30, 90,
88, 44, 33, 22, 11, 98, 78, -1000);
s2.x = _mm256_set_epi16 (88, 44, 33, 22, 11, 98, 76, -650,
1, 2, 3, 4, 6500, 20, 30, 90);
u.x = _mm256_packs_epi16 (s1.x, s2.x);
for (i = 0; i < 8; i++)
{
e[i] = short_to_byte (s1.a[i]);
e[i + 8] = short_to_byte (s2.a[i]);
e[i + 16] = short_to_byte (s1.a[i + 8]);
e[i + 24] = short_to_byte (s2.a[i + 8]);
}
if (check_union256i_b (u, e))
abort ();
}

View File

@ -0,0 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-mavx2 -O2" } */
/* { dg-final { scan-assembler "vpackusdw\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
volatile __m256i x;
void extern
avx2_test (void)
{
x = _mm256_packus_epi32 (x, x);
}

Some files were not shown because too many files have changed in this diff Show More