Commit 40f1bdd9 by Rainer Orth Committed by Rainer Orth

sourcebuild.texi (Effective-Target Keywords): Document 3dnow, sse3, sse2.

	gcc:
	* doc/sourcebuild.texi (Effective-Target Keywords): Document
	3dnow, sse3, sse2.
	(Directives): Document optional	dg-require-effective-target
	selector.

	gcc/testsuite:
	* lib/target-supports.exp (check_effective_target_sse2): New proc.
	* lib/target-supports-dg.exp (dg-require-effective-target): Allow
	for optional selector.
	* gcc.target/i386/i386.exp (check_effective_target_3dnow): New proc.
	(check_effective_target_sse3): New proc.
	* gcc.target/i386/math-torture/math-torture.exp: Load
	target-supports.exp.
	Only add options with -msse2 to MATH_TORTURE_OPTIONS if
	check_effective_target_sse2.
	* gcc.dg/vect/vect.exp: Return unless check_effective_target_sse2.
	* gcc.dg/vect/costmodel/i386/i386-costmodel-vect.exp: Likewise.
	* g++.dg/vect/vect.exp: Likewise.
	* gfortran.dg/vect/vect.exp: Likewise.
	* lib/fortran-torture.exp (get-fortran-torture-options): Only use
	-msse2 if check_effective_target_sse2.

	* gcc.target/i386/3dnow-1.c: Use dg-require-effective-target 3dnow.
	* gcc.target/i386/3dnow-2.c: Likewise.
	* gcc.target/i386/3dnowA-1.c: Likewise.
	* gcc.target/i386/3dnowA-2.c: Likewise.
	* gcc.target/i386/pr42549.c: Likewise.

	* gcc.target/i386/sse3-addsubpd.c: Use dg-require-effective-target sse3.
	* gcc.target/i386/sse3-addsubps.c: Likewise.
	* gcc.target/i386/sse3-haddpd.c: Likewise.
	* gcc.target/i386/sse3-haddps.c: Likewise.
	* gcc.target/i386/sse3-hsubpd.c: Likewise.
	* gcc.target/i386/sse3-hsubps.c: Likewise.
	* gcc.target/i386/sse3-lddqu.c: Likewise.
	* gcc.target/i386/sse3-movddup.c: Likewise.
	* gcc.target/i386/sse3-movshdup.c: Likewise.
	* gcc.target/i386/sse3-movsldup.c: Likewise.

	* g++.dg/abi/mangle42.C: Use dg-require-effective-target sse2.
	* g++.dg/ext/attrib35.C: Likewise.
	* g++.dg/opt/pr40496.C: Likewise.
	* g++.dg/other/i386-1.C: Likewise.
	* g++.dg/other/i386-4.C: Likewise.
	* g++.dg/other/pr34435.C: Likewise.
	* g++.dg/other/pr39496.C: Likewise.
	* g++.dg/other/pr40446.C: Likewise.
	* gcc.dg/compat/union-m128-1_main.c: Likewise.
	* gcc.dg/compat/vector-1a_main.c: Likewise.
	* gcc.dg/compat/vector-2a_main.c: Likewise.
	* gcc.dg/lto/20090206-1_0.c: Likewise.
	* gcc.dg/pr34856.c: Likewise.
	* gcc.dg/pr36584.c: Likewise.
	* gcc.dg/pr36997.c: Likewise.  Adapt dg-message line number.
	* gcc.dg/pr37544.c: Likewise.
	* gcc.dg/torture/pr16104-1.c: Likewise.
	* gcc.dg/torture/pr35771-1.c: Likewise.
	* gcc.dg/torture/pr35771-2.c: Likewise.
	* gcc.dg/torture/pr35771-3.c: Likewise.
	* gcc.dg/torture/stackalign/alloca-2.c: Likewise.
	* gcc.dg/torture/stackalign/alloca-3.c: Likewise.
	* gcc.dg/torture/stackalign/push-1.c: Likewise.
	* gcc.dg/torture/stackalign/vararg-3.c: Likewise.
	* gcc.dg/tree-ssa/prefetch-6.c: Likewise.
	* gcc.dg/tree-ssa/prefetch-7.c: Likewise.
	* gcc.dg/vect/vect-debug-pr41926.c: Likewise.
	* gcc.target/i386/20060512-1.c: Likewise.
	* gcc.target/i386/20060512-3.c: Likewise.
	* gcc.target/i386/all_one_m128i.c: Likewise.
	* gcc.target/i386/float128-1.c: Likewise.
	* gcc.target/i386/float128-2.c: Likewise.
	* gcc.target/i386/fpcvt-1.c: Likewise.
	* gcc.target/i386/fpcvt-2.c: Likewise.
	* gcc.target/i386/fpcvt-3.c: Likewise.
	* gcc.target/i386/fpprec-1.c: Likewise.
	* gcc.target/i386/funcspec-9.c: Likewise.
	* gcc.target/i386/incoming-1.c: Likewise.
	* gcc.target/i386/incoming-12.c: Likewise.
	* gcc.target/i386/incoming-2.c: Likewise.
	* gcc.target/i386/incoming-3.c: Likewise.
	* gcc.target/i386/incoming-4.c: Likewise.
	* gcc.target/i386/incoming-6.c: Likewise.
	* gcc.target/i386/incoming-7.c: Likewise.
	* gcc.target/i386/incoming-8.c: Likewise.
	* gcc.target/i386/opt-1.c: Likewise.
	* gcc.target/i386/opt-2.c: Likewise.
	* gcc.target/i386/ordcmp-1.c: Likewise.
	* gcc.target/i386/pr17692.c: Likewise.
	* gcc.target/i386/pr18614-1.c: Likewise.
	* gcc.target/i386/pr22152.c: Likewise.
	* gcc.target/i386/pr23570.c: Likewise.
	* gcc.target/i386/pr23575.c: Likewise.
	* gcc.target/i386/pr26449-1.c: Likewise.
	* gcc.target/i386/pr26600.c: Likewise.
	* gcc.target/i386/pr27790.c: Likewise.
	* gcc.target/i386/pr28839.c: Likewise.
	* gcc.target/i386/pr30970.c: Likewise.
	* gcc.target/i386/pr32000-1.c: Likewise.
	* gcc.target/i386/pr32000-2.c: Likewise.
	* gcc.target/i386/pr32280.c: Likewise.
	* gcc.target/i386/pr32661.c: Likewise.
	* gcc.target/i386/pr32708-1.c: Likewise.
	* gcc.target/i386/pr32961.c: Likewise.
	* gcc.target/i386/pr33329.c: Likewise.
	* gcc.target/i386/pr35714.c: Likewise.
	* gcc.target/i386/pr35767-1.c: Likewise.
	* gcc.target/i386/pr35767-1d.c: Likewise.
	* gcc.target/i386/pr35767-1i.c: Likewise.
	* gcc.target/i386/pr35767-2.c: Likewise.
	* gcc.target/i386/pr35767-2d.c: Likewise.
	* gcc.target/i386/pr35767-2i.c: Likewise.
	* gcc.target/i386/pr35767-3.c: Likewise.
	* gcc.target/i386/pr35767-5.c: Likewise.
	* gcc.target/i386/pr36222-1.c: Likewise.
	* gcc.target/i386/pr36578-1.c: Likewise.
	* gcc.target/i386/pr36578-2.c: Likewise.
	* gcc.target/i386/pr36992-1.c: Likewise.
	* gcc.target/i386/pr37101.c: Likewise.
	* gcc.target/i386/pr37216.c: Likewise.
	* gcc.target/i386/pr37434-1.c: Likewise.
	* gcc.target/i386/pr37434-2.c: Likewise.
	* gcc.target/i386/pr37843-3.c: Likewise.
	* gcc.target/i386/pr37843-4.c: Likewise.
	* gcc.target/i386/pr39162.c: Likewise.
	* gcc.target/i386/pr39315-1.c: Likewise.
	* gcc.target/i386/pr39315-2.c: Likewise.
	* gcc.target/i386/pr39315-3.c: Likewise.
	* gcc.target/i386/pr39315-4.c: Likewise.
	* gcc.target/i386/pr39445.c: Likewise.
	* gcc.target/i386/pr39496.c: Likewise.
	* gcc.target/i386/pr40809.c: Likewise.
	* gcc.target/i386/pr40906-3.c: Likewise.
	* gcc.target/i386/pr41019.c: Likewise.
	* gcc.target/i386/pr42542-1.c: Likewise.
	* gcc.target/i386/pr42542-2.c: Likewise.
	* gcc.target/i386/pr42542-3.c: Likewise.
	* gcc.target/i386/pr42542-3a.c: Likewise.
	* gcc.target/i386/pr42881.c: Likewise.
	* gcc.target/i386/push-1.c: Likewise.
	* gcc.target/i386/quad-sse.c: Likewise.
	* gcc.target/i386/reload-1.c: Likewise.
	* gcc.target/i386/sse-10.c: Likewise.
	* gcc.target/i386/sse-11.c: Likewise.
	* gcc.target/i386/sse-15.c: Likewise.
	* gcc.target/i386/sse-17.c: Likewise.
	* gcc.target/i386/sse-18.c: Likewise.
	* gcc.target/i386/sse-19.c: Likewise.
	* gcc.target/i386/sse-4.c: Likewise.
	* gcc.target/i386/sse-6.c: Likewise.
	* gcc.target/i386/sse-vect-types.c: Likewise.
	* gcc.target/i386/sse2-addpd-1.c: Likewise.
	* gcc.target/i386/sse2-addsd-1.c: Likewise.
	* gcc.target/i386/sse2-andnpd-1.c: Likewise.
	* gcc.target/i386/sse2-andpd-1.c: Likewise.
	* gcc.target/i386/sse2-cmpsd-1.c: Likewise.
	* gcc.target/i386/sse2-comisd-1.c: Likewise.
	* gcc.target/i386/sse2-comisd-2.c: Likewise.
	* gcc.target/i386/sse2-comisd-3.c: Likewise.
	* gcc.target/i386/sse2-comisd-4.c: Likewise.
	* gcc.target/i386/sse2-comisd-5.c: Likewise.
	* gcc.target/i386/sse2-comisd-6.c: Likewise.
	* gcc.target/i386/sse2-copysign-vec.c: Likewise.
	* gcc.target/i386/sse2-cvtdq2pd-1.c: Likewise.
	* gcc.target/i386/sse2-cvtdq2ps-1.c: Likewise.
	* gcc.target/i386/sse2-cvtpd2dq-1.c: Likewise.
	* gcc.target/i386/sse2-cvtpd2ps-1.c: Likewise.
	* gcc.target/i386/sse2-cvtps2dq-1.c: Likewise.
	* gcc.target/i386/sse2-cvtps2pd-1.c: Likewise.
	* gcc.target/i386/sse2-cvtsd2si-1.c: Likewise.
	* gcc.target/i386/sse2-cvtsd2si-2.c: Likewise.
	* gcc.target/i386/sse2-cvtsd2ss-1.c: Likewise.
	* gcc.target/i386/sse2-cvtsi2sd-1.c: Likewise.
	* gcc.target/i386/sse2-cvtsi2sd-2.c: Likewise.
	* gcc.target/i386/sse2-cvtss2sd-1.c: Likewise.
	* gcc.target/i386/sse2-cvttpd2dq-1.c: Likewise.
	* gcc.target/i386/sse2-cvttps2dq-1.c: Likewise.
	* gcc.target/i386/sse2-cvttsd2si-1.c: Likewise.
	* gcc.target/i386/sse2-cvttsd2si-2.c: Likewise.
	* gcc.target/i386/sse2-divpd-1.c: Likewise.
	* gcc.target/i386/sse2-divsd-1.c: Likewise.
	* gcc.target/i386/sse2-init-v16qi-1.c: Likewise.
	* gcc.target/i386/sse2-init-v2di-1.c: Likewise.
	* gcc.target/i386/sse2-init-v4si-1.c: Likewise.
	* gcc.target/i386/sse2-init-v8hi-1.c: Likewise.
	* gcc.target/i386/sse2-lrint-vec.c: Likewise.
	* gcc.target/i386/sse2-lrintf-vec.c: Likewise.
	* gcc.target/i386/sse2-maxpd-1.c: Likewise.
	* gcc.target/i386/sse2-maxsd-1.c: Likewise.
	* gcc.target/i386/sse2-minpd-1.c: Likewise.
	* gcc.target/i386/sse2-minsd-1.c: Likewise.
	* gcc.target/i386/sse2-mmx.c: Likewise.
	* gcc.target/i386/sse2-movapd-1.c: Likewise.
	* gcc.target/i386/sse2-movapd-2.c: Likewise.
	* gcc.target/i386/sse2-movd-1.c: Likewise.
	* gcc.target/i386/sse2-movd-2.c: Likewise.
	* gcc.target/i386/sse2-movdqa-1.c: Likewise.
	* gcc.target/i386/sse2-movdqa-2.c: Likewise.
	* gcc.target/i386/sse2-movdqu-1.c: Likewise.
	* gcc.target/i386/sse2-movdqu-2.c: Likewise.
	* gcc.target/i386/sse2-movhpd-1.c: Likewise.
	* gcc.target/i386/sse2-movhpd-2.c: Likewise.
	* gcc.target/i386/sse2-movlpd-1.c: Likewise.
	* gcc.target/i386/sse2-movlpd-2.c: Likewise.
	* gcc.target/i386/sse2-movmskpd-1.c: Likewise.
	* gcc.target/i386/sse2-movntdq-1.c: Likewise.
	* gcc.target/i386/sse2-movntpd-1.c: Likewise.
	* gcc.target/i386/sse2-movq-1.c: Likewise.
	* gcc.target/i386/sse2-movq-2.c: Likewise.
	* gcc.target/i386/sse2-movq-3.c: Likewise.
	* gcc.target/i386/sse2-movsd-1.c: Likewise.
	* gcc.target/i386/sse2-movsd-2.c: Likewise.
	* gcc.target/i386/sse2-movupd-1.c: Likewise.
	* gcc.target/i386/sse2-movupd-2.c: Likewise.
	* gcc.target/i386/sse2-mulpd-1.c: Likewise.
	* gcc.target/i386/sse2-mulsd-1.c: Likewise.
	* gcc.target/i386/sse2-orpd-1.c: Likewise.
	* gcc.target/i386/sse2-packssdw-1.c: Likewise.
	* gcc.target/i386/sse2-packsswb-1.c: Likewise.
	* gcc.target/i386/sse2-packuswb-1.c: Likewise.
	* gcc.target/i386/sse2-paddb-1.c: Likewise.
	* gcc.target/i386/sse2-paddd-1.c: Likewise.
	* gcc.target/i386/sse2-paddq-1.c: Likewise.
	* gcc.target/i386/sse2-paddsb-1.c: Likewise.
	* gcc.target/i386/sse2-paddsw-1.c: Likewise.
	* gcc.target/i386/sse2-paddusb-1.c: Likewise.
	* gcc.target/i386/sse2-paddusw-1.c: Likewise.
	* gcc.target/i386/sse2-paddw-1.c: Likewise.
	* gcc.target/i386/sse2-pand-1.c: Likewise.
	* gcc.target/i386/sse2-pandn-1.c: Likewise.
	* gcc.target/i386/sse2-pavgb-1.c: Likewise.
	* gcc.target/i386/sse2-pavgw-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpeqb-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpeqd-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpeqw-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpgtb-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpgtd-1.c: Likewise.
	* gcc.target/i386/sse2-pcmpgtw-1.c: Likewise.
	* gcc.target/i386/sse2-pmaddwd-1.c: Likewise.
	* gcc.target/i386/sse2-pmaxsw-1.c: Likewise.
	* gcc.target/i386/sse2-pmaxub-1.c: Likewise.
	* gcc.target/i386/sse2-pminsw-1.c: Likewise.
	* gcc.target/i386/sse2-pminub-1.c: Likewise.
	* gcc.target/i386/sse2-pmovmskb-1.c: Likewise.
	* gcc.target/i386/sse2-pmulhuw-1.c: Likewise.
	* gcc.target/i386/sse2-pmulhw-1.c: Likewise.
	* gcc.target/i386/sse2-pmullw-1.c: Likewise.
	* gcc.target/i386/sse2-pmuludq-1.c: Likewise.
	* gcc.target/i386/sse2-por-1.c: Likewise.
	* gcc.target/i386/sse2-psadbw-1.c: Likewise.
	* gcc.target/i386/sse2-pshufd-1.c: Likewise.
	* gcc.target/i386/sse2-pshufhw-1.c: Likewise.
	* gcc.target/i386/sse2-pshuflw-1.c: Likewise.
	* gcc.target/i386/sse2-pslld-1.c: Likewise.
	* gcc.target/i386/sse2-pslld-2.c: Likewise.
	* gcc.target/i386/sse2-pslldq-1.c: Likewise.
	* gcc.target/i386/sse2-psllq-1.c: Likewise.
	* gcc.target/i386/sse2-psllq-2.c: Likewise.
	* gcc.target/i386/sse2-psllw-1.c: Likewise.
	* gcc.target/i386/sse2-psllw-2.c: Likewise.
	* gcc.target/i386/sse2-psrad-1.c: Likewise.
	* gcc.target/i386/sse2-psrad-2.c: Likewise.
	* gcc.target/i386/sse2-psraw-1.c: Likewise.
	* gcc.target/i386/sse2-psraw-2.c: Likewise.
	* gcc.target/i386/sse2-psrld-1.c: Likewise.
	* gcc.target/i386/sse2-psrld-2.c: Likewise.
	* gcc.target/i386/sse2-psrldq-1.c: Likewise.
	* gcc.target/i386/sse2-psrlq-1.c: Likewise.
	* gcc.target/i386/sse2-psrlq-2.c: Likewise.
	* gcc.target/i386/sse2-psrlw-1.c: Likewise.
	* gcc.target/i386/sse2-psrlw-2.c: Likewise.
	* gcc.target/i386/sse2-psubb-1.c: Likewise.
	* gcc.target/i386/sse2-psubd-1.c: Likewise.
	* gcc.target/i386/sse2-psubq-1.c: Likewise.
	* gcc.target/i386/sse2-psubsb-1.c: Likewise.
	* gcc.target/i386/sse2-psubsw-1.c: Likewise.
	* gcc.target/i386/sse2-psubw-1.c: Likewise.
	* gcc.target/i386/sse2-punpckhbw-1.c: Likewise.
	* gcc.target/i386/sse2-punpckhdq-1.c: Likewise.
	* gcc.target/i386/sse2-punpckhqdq-1.c: Likewise.
	* gcc.target/i386/sse2-punpckhwd-1.c: Likewise.
	* gcc.target/i386/sse2-punpcklbw-1.c: Likewise.
	* gcc.target/i386/sse2-punpckldq-1.c: Likewise.
	* gcc.target/i386/sse2-punpcklqdq-1.c: Likewise.
	* gcc.target/i386/sse2-punpcklwd-1.c: Likewise.
	* gcc.target/i386/sse2-pxor-1.c: Likewise.
	* gcc.target/i386/sse2-set-epi32-1.c: Likewise.
	* gcc.target/i386/sse2-set-epi64x-1.c: Likewise.
	* gcc.target/i386/sse2-set-v16qi-1.c: Likewise.
	* gcc.target/i386/sse2-set-v16qi-2.c: Likewise.
	* gcc.target/i386/sse2-set-v16qi-3.c: Likewise.
	* gcc.target/i386/sse2-set-v8hi-1.c: Likewise.
	* gcc.target/i386/sse2-set-v8hi-1a.c: Likewise.
	* gcc.target/i386/sse2-set-v8hi-2.c: Likewise.
	* gcc.target/i386/sse2-set-v8hi-2a.c: Likewise.
	* gcc.target/i386/sse2-shufpd-1.c: Likewise.
	* gcc.target/i386/sse2-shufps-1.c: Likewise.
	* gcc.target/i386/sse2-sqrtpd-1.c: Likewise.
	* gcc.target/i386/sse2-subpd-1.c: Likewise.
	* gcc.target/i386/sse2-subsd-1.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-1.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-2.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-3.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-4.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-5.c: Likewise.
	* gcc.target/i386/sse2-ucomisd-6.c: Likewise.
	* gcc.target/i386/sse2-unpack-1.c: Likewise.
	* gcc.target/i386/sse2-unpckhpd-1.c: Likewise.
	* gcc.target/i386/sse2-unpcklpd-1.c: Likewise.
	* gcc.target/i386/sse2-vec-1.c: Likewise.
	* gcc.target/i386/sse2-vec-2.c: Likewise.
	* gcc.target/i386/sse2-vec-3.c: Likewise.
	* gcc.target/i386/sse2-vec-4.c: Likewise.
	* gcc.target/i386/sse2-vec-5.c: Likewise.
	* gcc.target/i386/sse2-vec-6.c: Likewise.
	* gcc.target/i386/sse2-xorpd-1.c: Likewise.
	* gcc.target/i386/ssefn-2.c: Likewise.
	* gcc.target/i386/ssefn-4.c: Likewise.
	* gcc.target/i386/ssefp-1.c: Likewise.
	* gcc.target/i386/ssefp-2.c: Likewise.
	* gcc.target/i386/sseregparm-3.c: Likewise.
	* gcc.target/i386/sseregparm-4.c: Likewise.
	* gcc.target/i386/sseregparm-5.c: Likewise.
	* gcc.target/i386/sseregparm-6.c: Likewise.
	* gcc.target/i386/sseregparm-7.c: Likewise.
	* gcc.target/i386/ssetype-1.c: Likewise.
	* gcc.target/i386/ssetype-2.c: Likewise.
	* gcc.target/i386/ssetype-3.c: Likewise.
	* gcc.target/i386/ssetype-4.c: Likewise.
	* gcc.target/i386/ssetype-5.c: Likewise.
	* gcc.target/i386/unordcmp-1.c: Likewise.
	* gcc.target/i386/vararg-1.c: Likewise.
	* gcc.target/i386/vararg-2.c: Likewise.
	* gcc.target/i386/vararg-3.c: Likewise.
	* gcc.target/i386/vararg-4.c: Likewise.
	* gcc.target/i386/vararg-7.c: Likewise.
	* gcc.target/i386/vararg-8.c: Likewise.
	* gcc.target/i386/vecinit-1.c: Likewise.
	* gcc.target/i386/vecinit-2.c: Likewise.
	* gcc.target/i386/vecinit-3.c: Likewise.
	* gcc.target/i386/vecinit-4.c: Likewise.
	* gcc.target/i386/vecinit-5.c: Likewise.
	* gcc.target/i386/vecinit-6.c: Likewise.
	* gcc.target/i386/vectorize2.c: Likewise.
	* gcc.target/i386/vectorize3.c: Likewise.
	* gcc.target/i386/vectorize4.c: Likewise.
	* gcc.target/i386/vectorize6.c: Likewise.
	* gcc.target/i386/vectorize7.c: Likewise.
	* gcc.target/i386/vectorize8.c: Likewise.
	* gcc.target/i386/vperm-v2df.c: Likewise.
	* gcc.target/i386/vperm-v2di.c: Likewise.
	* gcc.target/i386/vperm-v4si-1.c: Likewise.
	* gcc.target/i386/xorps-sse2.c: Likewise.
	* gcc.target/i386/xorps.c: Likewise.
	* gfortran.dg/graphite/pr42326-1.f90: Likewise.
	* gfortran.dg/graphite/pr42326.f90: Likewise.
	* gfortran.dg/vect/fast-math-mgrid-resid.f: Likewise.

From-SVN: r159584
parent 817c2996
2010-05-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* doc/sourcebuild.texi (Effective-Target Keywords): Document
3dnow, sse3, sse2.
(Directives): Document optional dg-require-effective-target
selector.
2010-05-19 Richard Guenther <rguenther@suse.de> 2010-05-19 Richard Guenther <rguenther@suse.de>
PR lto/44196 PR lto/44196
......
...@@ -1094,9 +1094,12 @@ but not if @code{-fpic} is also present: ...@@ -1094,9 +1094,12 @@ but not if @code{-fpic} is also present:
/* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */ /* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */
@end smallexample @end smallexample
@item @{ dg-require-effective-target @var{keyword} @} @item @{ dg-require-effective-target @var{keyword} [@{ @var{selector} @}] @}
Skip the test if the test target, including current multilib flags, Skip the test if the test target, including current multilib flags,
is not covered by the effective-target keyword. is not covered by the effective-target keyword.
If the directive includes the optional @samp{@{ @var{selector} @}}
then the effective-target test is only performed if the target system
matches the @var{selector}.
This directive must appear after any @code{dg-do} directive in the test This directive must appear after any @code{dg-do} directive in the test
and before any @code{dg-additional-sources} directive. and before any @code{dg-additional-sources} directive.
@xref{Effective-Target Keywords, , }. @xref{Effective-Target Keywords, , }.
...@@ -1595,6 +1598,9 @@ Target uses a ColdFire FPU. ...@@ -1595,6 +1598,9 @@ Target uses a ColdFire FPU.
@item hard_float @item hard_float
Target supports FPU instructions. Target supports FPU instructions.
@item sse2
Target supports compiling @code{sse2} instructions.
@item sync_char_short @item sync_char_short
Target supports atomic operations on @code{char} and @code{short}. Target supports atomic operations on @code{char} and @code{short}.
...@@ -1794,6 +1800,9 @@ Target supports @code{wchar_t} that is compatible with @code{char32_t}. ...@@ -1794,6 +1800,9 @@ Target supports @code{wchar_t} that is compatible with @code{char32_t}.
@subsubsection Local to tests in @code{gcc.target/i386} @subsubsection Local to tests in @code{gcc.target/i386}
@table @code @table @code
@item 3dnow
Target supports compiling @code{3dnow} instructions.
@item aes @item aes
Target supports compiling @code{aes} instructions. Target supports compiling @code{aes} instructions.
...@@ -1806,6 +1815,9 @@ Target supports attribute @code{ms_hook_prologue}. ...@@ -1806,6 +1815,9 @@ Target supports attribute @code{ms_hook_prologue}.
@item pclmul @item pclmul
Target supports compiling @code{pclmul} instructions. Target supports compiling @code{pclmul} instructions.
@item sse3
Target supports compiling @code{sse3} instructions.
@item sse4 @item sse4
Target supports compiling @code{sse4} instructions. Target supports compiling @code{sse4} instructions.
......
// Origin: PR c++/43375 // Origin: PR c++/43375
// { dg-do compile { target i?86-*-* x86_64-*-* } } // { dg-do compile { target i?86-*-* x86_64-*-* } }
// { dg-options "-msse2 -std=gnu++0x" } // { dg-options "-msse2 -std=gnu++0x" }
// { dg-require-effective-target sse2 }
typedef float __v4sf __attribute__ ((__vector_size__ (16))); typedef float __v4sf __attribute__ ((__vector_size__ (16)));
typedef int __v4si __attribute__ ((__vector_size__ (16))); typedef int __v4si __attribute__ ((__vector_size__ (16)));
......
// { dg-do compile { target i?86-*-* x86_64-*-* } } // { dg-do compile { target i?86-*-* x86_64-*-* } }
// { dg-options "-O3 -msse2" } // { dg-options "-O3 -msse2" }
// { dg-require-effective-target sse2 }
// You can make NON-template typedefs with a large alignment. // You can make NON-template typedefs with a large alignment.
typedef double AlignedDoubleType __attribute__((aligned(16))); typedef double AlignedDoubleType __attribute__((aligned(16)));
......
// { dg-do compile } // { dg-do compile }
// { dg-options "-O2 -fprefetch-loop-arrays -msse2" { target i?86-*-* x86_64-*-* } } // { dg-options "-O2 -fprefetch-loop-arrays -msse2" { target i?86-*-* x86_64-*-* } }
// { dg-require-effective-target sse2 { target i?86-*-* x86_64-*-* } }
struct DOMStringHandle struct DOMStringHandle
{ {
......
/* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
#include <xmmintrin.h> #include <xmmintrin.h>
......
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O1 -msse2" } */ /* { dg-options "-O1 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include <xmmintrin.h> #include <xmmintrin.h>
......
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2 -Wno-abi" } */ /* { dg-options "-msse2 -Wno-abi" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
// PR target/39496 // PR target/39496
// { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && ilp32 } } } // { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && ilp32 } } }
// { dg-options "-O0 -fverbose-asm -fno-omit-frame-pointer -mtune=i686 -msse2 -mfpmath=sse" } // { dg-options "-O0 -fverbose-asm -fno-omit-frame-pointer -mtune=i686 -msse2 -mfpmath=sse" }
// { dg-require-effective-target sse2 }
// Verify that {foo,bar}{,2}param are all passed on the stack, using // Verify that {foo,bar}{,2}param are all passed on the stack, using
// normal calling conventions, when not optimizing. // normal calling conventions, when not optimizing.
// { dg-final { scan-assembler "\[^0-9-\]8\\(%ebp\\),\[^\n\]*fooparam," } } // { dg-final { scan-assembler "\[^0-9-\]8\\(%ebp\\),\[^\n\]*fooparam," } }
......
// PR middle-end/40446 // PR middle-end/40446
// { dg-do run { target i?86-*-* x86_64-*-* } } // { dg-do run { target i?86-*-* x86_64-*-* } }
// { dg-options "-O1 -msse2" } // { dg-options "-O1 -msse2" }
// { dg-require-effective-target sse2 }
#include <emmintrin.h> #include <emmintrin.h>
#include "cpuid.h" #include "cpuid.h"
......
# Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc. # Copyright (C) 2004, 2007, 2008, 2010 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
...@@ -75,6 +75,9 @@ if [istarget "powerpc-*paired*"] { ...@@ -75,6 +75,9 @@ if [istarget "powerpc-*paired*"] {
} elseif { [istarget "spu-*-*"] } { } elseif { [istarget "spu-*-*"] } {
set dg-do-what-default run set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
if { ![check_effective_target_sse2] } then {
return
}
lappend DEFAULT_VECTCFLAGS "-msse2" lappend DEFAULT_VECTCFLAGS "-msse2"
if [check_sse2_hw_available] { if [check_sse2_hw_available] {
set dg-do-what-default run set dg-do-what-default run
......
/* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-O" } */ /* { dg-options "-O" } */
/* { dg-require-effective-target sse2 } */
#include "cpuid.h" #include "cpuid.h"
......
/* { dg-skip-if "test SSE2 vector" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-skip-if "test SSE2 vector" { ! { i?86-*-* x86_64-*-* } } } */
/* { dg-require-effective-target sse2 } */
/* Test compatibility of vector types: layout between separately-compiled /* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses modules, parameter passing, and function return. This test uses
......
/* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */ /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
/* { dg-require-effective-target sse2 } */
/* Test compatibility of vector types: layout between separately-compiled /* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses modules, parameter passing, and function return. This test uses
......
/* { dg-lto-do link } */ /* { dg-lto-do link } */
/* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */ /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */
/* { dg-lto-options {{-fPIC -r -nostdlib -fwhopr -msse2}} } */ /* { dg-lto-options {{-fPIC -r -nostdlib -fwhopr -msse2}} } */
/* { dg-require-effective-target sse2 } */
/* { dg-suppress-ld-options {-fPIC -msse2} } */ /* { dg-suppress-ld-options {-fPIC -msse2} } */
typedef short v8hi __attribute__((__vector_size__(16))); typedef short v8hi __attribute__((__vector_size__(16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2" } */ /* { dg-options "-O2" } */
/* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */
/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */ /* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */
typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t; typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t;
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -lm" } */ /* { dg-options "-O2 -lm" } */
/* { dg-options "-O2 -msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-options "-O2 -msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-require-effective-target sse2 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#ifdef __i386__ #ifdef __i386__
#include "cpuid.h" #include "cpuid.h"
......
/* { dg-do compile { target x86_64-*-* i?86-*-* } } */ /* { dg-do compile { target x86_64-*-* i?86-*-* } } */
/* { dg-options "-std=c99 -msse2" } */ /* { dg-options "-std=c99 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__)); typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
__m64 _mm_add_si64 (__m64 __m1, __m64 __m2) __m64 _mm_add_si64 (__m64 __m1, __m64 __m2)
{ {
return (__m64) __builtin_ia32_paddq ((long long)__m1, (long long)__m2); /* { dg-error "incompatible type" } */ return (__m64) __builtin_ia32_paddq ((long long)__m1, (long long)__m2); /* { dg-error "incompatible type" } */
/* { dg-message "note: expected '__vector.1. long long int' but argument is of type 'long long int'" "" { target *-*-* } 7 } */ /* { dg-message "note: expected '__vector.1. long long int' but argument is of type 'long long int'" "" { target *-*-* } 8 } */
} }
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2" } */ /* { dg-options "-O2" } */
/* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */
/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
#ifdef __i386__ #ifdef __i386__
#include "cpuid.h" #include "cpuid.h"
......
/* PR rtl-optimization/16104 */ /* PR rtl-optimization/16104 */
/* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
#include "cpuid.h" #include "cpuid.h"
......
/* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__)); typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
......
/* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
......
/* { dg-do run { target i?86-*-* x86_64-*-* } } */ /* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
#include "cpuid.h" #include "cpuid.h"
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
#include "cpuid.h" #include "cpuid.h"
......
/* PR middle-end/37010 */ /* PR middle-end/37010 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */ /* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
#include "cpuid.h" #include "cpuid.h"
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */ /* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2 } */
#include <stdarg.h> #include <stdarg.h>
#include <emmintrin.h> #include <emmintrin.h>
......
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target ilp32 } */ /* { dg-require-effective-target ilp32 } */
/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 -fdump-tree-aprefetch-details" } */ /* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 -fdump-tree-aprefetch-details" } */
#define N 1000 #define N 1000
......
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target ilp32 } */ /* { dg-require-effective-target ilp32 } */
/* { dg-require-effective-target sse2 } */
/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=athlon" } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=athlon" } } */
/* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 --param max-unrolled-insns=1 -fdump-tree-aprefetch-details -fdump-tree-optimized" } */ /* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 --param max-unrolled-insns=1 -fdump-tree-aprefetch-details -fdump-tree-optimized" } */
......
# Copyright (C) 1997, 2004, 2005, 2006, 2007, 2008 # Copyright (C) 1997, 2004, 2005, 2006, 2007, 2008, 2010
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
...@@ -39,6 +39,9 @@ lappend DEFAULT_VECTCFLAGS "-O2" "-ftree-vectorize" "-fvect-cost-model" ...@@ -39,6 +39,9 @@ lappend DEFAULT_VECTCFLAGS "-O2" "-ftree-vectorize" "-fvect-cost-model"
global dg-do-what-default global dg-do-what-default
set save-dg-do-what-default ${dg-do-what-default} set save-dg-do-what-default ${dg-do-what-default}
if { ![check_effective_target_sse2] } then {
return
}
lappend DEFAULT_VECTCFLAGS "-msse2" lappend DEFAULT_VECTCFLAGS "-msse2"
if [check_sse2_hw_available] { if [check_sse2_hw_available] {
set dg-do-what-default run set dg-do-what-default run
......
/* PR debug/41926 */ /* PR debug/41926 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -g -ffast-math -funroll-loops -ftree-vectorize -msse2" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-O2 -g -ffast-math -funroll-loops -ftree-vectorize -msse2" { target { i?86-*-* x86_64-*-* } } } */
/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
void void
foo (double (*__restrict p)[4], double (*__restrict q)[4], foo (double (*__restrict p)[4], double (*__restrict q)[4],
......
# Copyright (C) 1997, 2004, 2005, 2006, 2007, 2008 # Copyright (C) 1997, 2004, 2005, 2006, 2007, 2008, 2010
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
...@@ -67,6 +67,9 @@ if [istarget "powerpc-*paired*"] { ...@@ -67,6 +67,9 @@ if [istarget "powerpc-*paired*"] {
} elseif { [istarget "spu-*-*"] } { } elseif { [istarget "spu-*-*"] } {
set dg-do-what-default run set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
if { ![check_effective_target_sse2] } then {
return
}
lappend DEFAULT_VECTCFLAGS "-msse2" lappend DEFAULT_VECTCFLAGS "-msse2"
if [check_sse2_hw_available] { if [check_sse2_hw_available] {
set dg-do-what-default run set dg-do-what-default run
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-require-effective-target ilp32 } */ /* { dg-require-effective-target ilp32 } */
/* { dg-options "-std=gnu99 -msse2 -mpreferred-stack-boundary=4" } */ /* { dg-options "-std=gnu99 -msse2 -mpreferred-stack-boundary=4" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-require-effective-target ilp32 } */ /* { dg-require-effective-target ilp32 } */
/* { dg-require-effective-target sse2 } */
/* { dg-options "-std=gnu99 -msse2 -mstackrealign -mpreferred-stack-boundary=4" } */ /* { dg-options "-std=gnu99 -msse2 -mstackrealign -mpreferred-stack-boundary=4" } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do assemble } */ /* { dg-do assemble } */
/* { dg-require-effective-target 3dnow } */
/* { dg-options "-O2 -Werror-implicit-function-declaration -m3dnow" } */ /* { dg-options "-O2 -Werror-implicit-function-declaration -m3dnow" } */
/* Test that the intrinsics compile with optimization. All of them are /* Test that the intrinsics compile with optimization. All of them are
......
/* { dg-do assemble } */ /* { dg-do assemble } */
/* { dg-require-effective-target 3dnow } */
/* { dg-options "-O0 -Werror-implicit-function-declaration -m3dnow" } */ /* { dg-options "-O0 -Werror-implicit-function-declaration -m3dnow" } */
/* Test that the intrinsics compile without optimization. All of them are /* Test that the intrinsics compile without optimization. All of them are
......
/* { dg-do assemble } */ /* { dg-do assemble } */
/* { dg-require-effective-target 3dnow } */
/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow" } */ /* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow" } */
/* Test that the intrinsics compile with optimization. All of them are /* Test that the intrinsics compile with optimization. All of them are
......
/* { dg-do assemble } */ /* { dg-do assemble } */
/* { dg-require-effective-target 3dnow } */
/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow" } */ /* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow" } */
/* Test that the intrinsics compile without optimization. All of them are /* Test that the intrinsics compile without optimization. All of them are
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
typedef int __v4si __attribute__ ((__vector_size__ (16))); typedef int __v4si __attribute__ ((__vector_size__ (16)));
......
/* { dg-do run { target *-*-linux* } } */ /* { dg-do run { target *-*-linux* } } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
/* { dg-do run { target *-*-linux* *-*-darwin* } } */ /* { dg-do run { target *-*-linux* *-*-darwin* } } */
/* { dg-options "-Os -msse2" } */ /* { dg-options "-Os -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */ /* { dg-final { scan-assembler-not "cvtss2sd" } } */
float a,b; float a,b;
main() main()
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */ /* { dg-final { scan-assembler-not "cvtss2sd" } } */
float a,b; float a,b;
main() main()
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */ /* { dg-final { scan-assembler-not "cvtss2sd" } } */
extern double fabs (double); extern double fabs (double);
float a,b; float a,b;
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -fno-math-errno -fno-trapping-math -msse2 -mfpmath=sse" } */ /* { dg-options "-O2 -fno-math-errno -fno-trapping-math -msse2 -mfpmath=sse" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* Test whether using target specific options, we can generate FMA4 code. */ /* Test whether using target specific options, we can generate FMA4 code. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -march=k8 -mfpmath=sse -msse2" } */ /* { dg-options "-O2 -march=k8 -mfpmath=sse -msse2" } */
/* { dg-require-effective-target sse2 } */
extern void exit (int); extern void exit (int);
......
...@@ -37,6 +37,29 @@ proc check_effective_target_ms_hook_prologue { } { ...@@ -37,6 +37,29 @@ proc check_effective_target_ms_hook_prologue { } {
} }
} }
# Return 1 if 3dnow instructions can be compiled.
proc check_effective_target_3dnow { } {
return [check_no_compiler_messages 3dnow object {
void _m_pfadd (void)
{
__builtin_ia32_pfadd();
}
} "-O2 -m3dnow" ]
}
# Return 1 if sse3 instructions can be compiled.
proc check_effective_target_sse3 { } {
return [check_no_compiler_messages sse3 object {
typedef double __m128d __attribute__ ((__vector_size__ (16)));
typedef double __v2df __attribute__ ((__vector_size__ (16)));
__m128d _mm_addsub_pd (__m128d __X, __m128d __Y)
{
return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y);
}
} "-O2 -msse3" ]
}
# Return 1 if ssse3 instructions can be compiled. # Return 1 if ssse3 instructions can be compiled.
proc check_effective_target_ssse3 { } { proc check_effective_target_ssse3 { } {
return [check_no_compiler_messages ssse3 object { return [check_no_compiler_messages ssse3 object {
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
/* PR target/40838 */ /* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */ /* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16))); typedef int v4si __attribute__ ((vector_size (16)));
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
/* PR middle-end/37009 */ /* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include <stdarg.h> #include <stdarg.h>
#include <emmintrin.h> #include <emmintrin.h>
......
/* PR target/40838 */ /* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */ /* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16))); typedef int v4si __attribute__ ((vector_size (16)));
......
/* PR target/40838 */ /* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */ /* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16))); typedef int v4si __attribute__ ((vector_size (16)));
......
/* PR target/40838 */ /* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */ /* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O3 -msse2 -mpreferred-stack-boundary=4" } */ /* { dg-options "-w -mstackrealign -O3 -msse2 -mpreferred-stack-boundary=4" } */
/* { dg-require-effective-target sse2 } */
float float
foo (float f) foo (float f)
......
# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
# This harness is for tests that should be run at all optimisation levels. # This harness is for tests that should be run at all optimisation levels.
load_lib target-supports.exp
# Exit immediately if this isn't a x86 target. # Exit immediately if this isn't a x86 target.
if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then { if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
return return
...@@ -27,27 +29,31 @@ set MATH_TORTURE_OPTIONS [list \ ...@@ -27,27 +29,31 @@ set MATH_TORTURE_OPTIONS [list \
{ -O0 } \ { -O0 } \
{ -O0 -mfpmath=387 } \ { -O0 -mfpmath=387 } \
{ -O0 -msse -mno-sse2 -mfpmath=sse } \ { -O0 -msse -mno-sse2 -mfpmath=sse } \
{ -O0 -msse -msse2 -mfpmath=sse } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 } \ { -O0 -msse -mno-sse2 -mfpmath=sse,387 } \
{ -O0 -msse -msse2 -mfpmath=sse,387 } \
{ -O0 -mfpmath=387 -ffast-math } \ { -O0 -mfpmath=387 -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse -ffast-math } \ { -O0 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O0 -msse -msse2 -mfpmath=sse -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \ { -O0 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
{ -O0 -msse -msse2 -mfpmath=sse,387 -ffast-math } \
{ -O2 } \ { -O2 } \
{ -O2 -mfpmath=387 } \ { -O2 -mfpmath=387 } \
{ -O2 -msse -mno-sse2 -mfpmath=sse } \ { -O2 -msse -mno-sse2 -mfpmath=sse } \
{ -O2 -msse -msse2 -mfpmath=sse } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 } \ { -O2 -msse -mno-sse2 -mfpmath=sse,387 } \
{ -O2 -msse -msse2 -mfpmath=sse,387 } \
{ -O2 -mfpmath=387 -ffast-math } \ { -O2 -mfpmath=387 -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse -ffast-math } \ { -O2 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O2 -msse -msse2 -mfpmath=sse -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \ { -O2 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
{ -O2 -msse -msse2 -mfpmath=sse,387 -ffast-math } \
] ]
if { [check_effective_target_sse2] } {
lappend MATH_TORTURE_OPTIONS \
{ -O0 -msse -msse2 -mfpmath=sse } \
{ -O0 -msse -msse2 -mfpmath=sse,387 } \
{ -O0 -msse -msse2 -mfpmath=sse -ffast-math } \
{ -O0 -msse -msse2 -mfpmath=sse,387 -ffast-math } \
{ -O2 -msse -msse2 -mfpmath=sse } \
{ -O2 -msse -msse2 -mfpmath=sse,387 } \
{ -O2 -msse -msse2 -mfpmath=sse -ffast-math } \
{ -O2 -msse -msse2 -mfpmath=sse,387 -ffast-math } \
}
load_lib gcc-dg.exp load_lib gcc-dg.exp
load_lib torture-options.exp load_lib torture-options.exp
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
whether we vectorize a simple loop. */ whether we vectorize a simple loop. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */ /* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "prefetcht0" } } */ /* { dg-final { scan-assembler "prefetcht0" } } */
/* { dg-final { scan-assembler "addps" } } */ /* { dg-final { scan-assembler "addps" } } */
/* { dg-final { scan-assembler "subss" } } */ /* { dg-final { scan-assembler "subss" } } */
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
whether we vectorize a simple loop. */ whether we vectorize a simple loop. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */ /* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "prefetcht0" } } */ /* { dg-final { scan-assembler "prefetcht0" } } */
/* { dg-final { scan-assembler "addps" } } */ /* { dg-final { scan-assembler "addps" } } */
/* { dg-final { scan-assembler "subss" } } */ /* { dg-final { scan-assembler "subss" } } */
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "cmpordss" } } */ /* { dg-final { scan-assembler "cmpordss" } } */
/* { dg-final { scan-assembler "cmpordps" } } */ /* { dg-final { scan-assembler "cmpordps" } } */
/* { dg-final { scan-assembler "cmpordsd" } } */ /* { dg-final { scan-assembler "cmpordsd" } } */
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -mfpmath=sse -msse2" } */ /* { dg-options "-O -mfpmath=sse -msse2" } */
/* { dg-require-effective-target sse2 } */
/* The fact that t1 and t2 are uninitialized is critical. With them /* The fact that t1 and t2 are uninitialized is critical. With them
uninitialized, the register allocator is free to put them in the same uninitialized, the register allocator is free to put them in the same
hard register, which results in hard register, which results in
......
/* PR rtl-optimization/18614 */ /* PR rtl-optimization/18614 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef double v2df __attribute__ ((vector_size (16))); typedef double v2df __attribute__ ((vector_size (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include <mmintrin.h> #include <mmintrin.h>
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef float __v4sf __attribute__ ((__vector_size__ (16))); typedef float __v4sf __attribute__ ((__vector_size__ (16)));
typedef float __m128 __attribute__ ((__vector_size__ (16))); typedef float __m128 __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */ /* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target sse2 } */
/* We used to ICE because of a bogous pattern. */ /* We used to ICE because of a bogous pattern. */
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -mtune=k8" } */ /* { dg-options "-O2 -msse2 -mtune=k8" } */
/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16))); typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -ftree-vectorize -msse2" } */ /* { dg-options "-O -ftree-vectorize -msse2" } */
/* { dg-require-effective-target sse2 } */
void foo(int *p, int N) void foo(int *p, int N)
{ {
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -ftree-vectorize -msse2" } */ /* { dg-options "-O -ftree-vectorize -msse2" } */
/* { dg-require-effective-target sse2 } */
void binarize (int npixels, unsigned char *b) void binarize (int npixels, unsigned char *b)
{ {
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -ftree-vectorize -funswitch-loops" } */ /* { dg-options "-O2 -msse2 -ftree-vectorize -funswitch-loops" } */
/* { dg-require-effective-target sse2 } */
static int ready[10]; static int ready[10];
void abort (void); void abort (void);
......
/* { dg-do compile } /* { dg-do compile }
/* { dg-options "-msse2 -O2 -ftree-vectorize" } */ /* { dg-options "-msse2 -O2 -ftree-vectorize" } */
/* { dg-require-effective-target sse2 } */
#define N 256 #define N 256
int b[N]; int b[N];
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-require-effective-target dfp } */ /* { dg-require-effective-target dfp } */
/* { dg-options "-O -msse2 -std=gnu99" } */ /* { dg-options "-O -msse2 -std=gnu99" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-skip-if "" { ! { ilp32 && dfp } } { "*" } { "" } } */ /* { dg-skip-if "" { ! { ilp32 && dfp } } { "*" } { "" } } */
/* { dg-options "-O -msse2 -std=gnu99 -mpreferred-stack-boundary=2" } */ /* { dg-options "-O -msse2 -std=gnu99 -mpreferred-stack-boundary=2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef int __v4si __attribute__ ((__vector_size__ (16))); typedef int __v4si __attribute__ ((__vector_size__ (16)));
typedef float __v4sf __attribute__ ((__vector_size__ (16))); typedef float __v4sf __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef long long __v2di __attribute__ ((__vector_size__ (16))); typedef long long __v2di __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O0 -msse2" } */ /* { dg-options "-O0 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include <xmmintrin.h> #include <xmmintrin.h>
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -ftree-vectorize -msse2" } */ /* { dg-options "-O2 -ftree-vectorize -msse2" } */
/* { dg-require-effective-target sse2 } */
extern void g (int *); extern void g (int *);
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-require-effective-target dfp } */ /* { dg-require-effective-target dfp } */
/* { dg-require-effective-target sse2 } */
/* { dg-options "-O -msse2 -std=gnu99" } */ /* { dg-options "-O -msse2 -std=gnu99" } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* Test that we generate aligned load when memory is aligned. */ /* Test that we generate aligned load when memory is aligned. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */ /* { dg-options "-O -msse2 -mtune=generic" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */ /* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler "movaps" } } */ /* { dg-final { scan-assembler "movaps" } } */
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
typedef int __v4si __attribute__ ((__vector_size__ (16))); typedef int __v4si __attribute__ ((__vector_size__ (16)));
......
/* Test for unsafe floating-point conversions. PR 36578. */ /* Test for unsafe floating-point conversions. PR 36578. */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-msse2 -mfpmath=sse" } */ /* { dg-options "-msse2 -mfpmath=sse" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* Test for unsafe floating-point conversions. */ /* Test for unsafe floating-point conversions. */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-msse2 -mfpmath=sse" } */ /* { dg-options "-msse2 -mfpmath=sse" } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do compile } /* { dg-do compile }
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
#include <emmintrin.h> #include <emmintrin.h>
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -ftree-vectorize -march=nocona" } */ /* { dg-options "-O2 -msse2 -ftree-vectorize -march=nocona" } */
/* { dg-require-effective-target sse2 } */
typedef __SIZE_TYPE__ size_t; typedef __SIZE_TYPE__ size_t;
extern void *malloc (size_t); extern void *malloc (size_t);
......
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O3 -msse2" } */ /* { dg-options "-O3 -msse2" } */
/* { dg-options "-O3 -msse2 -mpe-aligned-commons" { target pe_aligned_commons } } */ /* { dg-options "-O3 -msse2 -mpe-aligned-commons" { target pe_aligned_commons } } */
/* { dg-require-effective-target sse2 } */
#include "sse2-check.h" #include "sse2-check.h"
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16))); typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -mtune=core2 -msse2" } */ /* { dg-options "-O2 -mtune=core2 -msse2" } */
/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16))); typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16)));
......
/* Test for stack alignment with sibcall optimization. */ /* Test for stack alignment with sibcall optimization. */
/* { dg-do compile { target { ilp32 && nonpic } } } */ /* { dg-do compile { target { ilp32 && nonpic } } } */
/* { dg-options "-O2 -msse2 -mpreferred-stack-boundary=4 -mstackrealign" } */ /* { dg-options "-O2 -msse2 -mpreferred-stack-boundary=4 -mstackrealign" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%\[re\]?sp" } } */ /* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%\[re\]?sp" } } */
/* { dg-final { scan-assembler-not "call\[\\t \]*_?foo" } } */ /* { dg-final { scan-assembler-not "call\[\\t \]*_?foo" } } */
/* { dg-final { scan-assembler "jmp\[\\t \]*_?foo" } } */ /* { dg-final { scan-assembler "jmp\[\\t \]*_?foo" } } */
......
/* Test for stack alignment with sibcall optimization. */ /* Test for stack alignment with sibcall optimization. */
/* { dg-do compile { target { ilp32 && nonpic } } } */ /* { dg-do compile { target { ilp32 && nonpic } } } */
/* { dg-options "-O2 -msse2 -mpreferred-stack-boundary=4 -mstackrealign" } */ /* { dg-options "-O2 -msse2 -mpreferred-stack-boundary=4 -mstackrealign" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%\[re\]?sp" } } */ /* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%\[re\]?sp" } } */
/* { dg-final { scan-assembler-not "call\[\\t \]*foo" } } */ /* { dg-final { scan-assembler-not "call\[\\t \]*foo" } } */
/* { dg-final { scan-assembler "jmp\[\\t \]*foo" } } */ /* { dg-final { scan-assembler "jmp\[\\t \]*foo" } } */
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msse2 -mno-avx" } */ /* { dg-options "-O2 -msse2 -mno-avx" } */
/* { dg-require-effective-target sse2 } */
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__)); typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
......
/* PR middle-end/39315 */ /* PR middle-end/39315 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */ /* { dg-options "-O -msse2 -mtune=generic" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */ /* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler-not "movlps" } } */ /* { dg-final { scan-assembler-not "movlps" } } */
/* { dg-final { scan-assembler-not "movhps" } } */ /* { dg-final { scan-assembler-not "movhps" } } */
......
/* PR middle-end/39315 */ /* PR middle-end/39315 */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O -msse2 -mtune=generic" } */ /* { dg-options "-O -msse2 -mtune=generic" } */
/* { dg-require-effective-target sse2 } */
/* { dg-additional-sources pr39315-check.c } */ /* { dg-additional-sources pr39315-check.c } */
typedef float __m128 __attribute__ ((__vector_size__ (16))); typedef float __m128 __attribute__ ((__vector_size__ (16)));
......
/* PR middle-end/39315 */ /* PR middle-end/39315 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */ /* { dg-options "-O -msse2 -mtune=generic" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */ /* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler-not "movlps" } } */ /* { dg-final { scan-assembler-not "movlps" } } */
/* { dg-final { scan-assembler-not "movhps" } } */ /* { dg-final { scan-assembler-not "movhps" } } */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment