aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2010-07-12 11:32:42 +0000
committerRainer Orth <ro@gcc.gnu.org>2010-07-12 11:32:42 +0000
commitae6a0535822d2ca38d3347f3ef6e890bd7039f75 (patch)
treefac742dd5cccacf7c9bab96b5cf40469d13df1e6 /gcc
parente56d9a76ea0f45715f69c74754050428ff9761bb (diff)
downloadgcc-ae6a0535822d2ca38d3347f3ef6e890bd7039f75.zip
gcc-ae6a0535822d2ca38d3347f3ef6e890bd7039f75.tar.gz
gcc-ae6a0535822d2ca38d3347f3ef6e890bd7039f75.tar.bz2
config.gcc (i[34567]86-*-solaris2*): Default with_arch_32 to pentiumpro on Solaris 8 and 9/x86.
gcc: * config.gcc (i[34567]86-*-solaris2*): Default with_arch_32 to pentiumpro on Solaris 8 and 9/x86. * doc/install.texi (Specific, i?86-*-solaris2.[89]): Recommend GNU as. Document SSE/SSE2 support. * doc/sourcebuild.texi (Effective-Target Keywords): Document sse. gcc/testsuite: * lib/target-supports.exp (check_effective_target_sse): New proc. * gcc.target/i386/sol2-check.h: New file. * gcc.target/i386/sse-check.h (ILL_INSN, ILL_INSN_LEN): Define. Include sol2-check.h. (main) Only run do_test () if sol2_check (). * gcc.target/i386/sse2-check.h: Likewise. * gcc.target/i386/sse3-check.h: Likewise. * gcc.dg/vect/tree-vect.h (check_vect) [__i386__ || __x86_64__] [__sun__ && __svr4__]: Execute SSE2 instruction. * gcc.target/i386/math-torture/math-torture.exp: Only add options with -msse to MATH_TORTURE_OPTIONS if check_effective_target_sse. * g++.dg/debug/dwarf2/const2b.C: Use dg-require-effective-target sse. * g++.dg/ext/vector14.C: Likewise. * g++.dg/other/mmintrin.C: Likewise. * gcc.dg/20020418-1.c: Likewise. * gcc.dg/debug/dwarf2/const-2b.c: Likewise. * gcc.dg/format/ms_unnamed-1.c: Likewise. * gcc.dg/format/unnamed-1.c: Likewise. Adapt dg-warning line number. * gcc.dg/graphite/pr40281.c: Likewise. * gcc.dg/pr32176.c: Likewise. * gcc.dg/pr40550.c: Likewise. * gcc.dg/prefetch-loop-arrays-1.c: Likewise. * gcc.dg/torture/pr36891.c: Likewise. * gcc.target/i386/20020218-1.c: Likewise. * gcc.target/i386/20020523.c: Likewise. * gcc.target/i386/abi-1.c: Likewise. * gcc.target/i386/brokensqrt.c: Likewise. * gcc.target/i386/fastcall-sseregparm.c: Likewise. * gcc.target/i386/pr13366.c: Likewise. * gcc.target/i386/pr13685.c: Likewise. * gcc.target/i386/pr24306.c: Likewise. * gcc.target/i386/pr31486.c: Likewise. * gcc.target/i386/pr32065-1.c: Likewise. * gcc.target/i386/pr32065-2.c: Likewise. * gcc.target/i386/pr32389.c: Likewise. * gcc.target/i386/pr38824.c: Likewise. * gcc.target/i386/pr38931.c: Likewise. * gcc.target/i386/pr39592-1.c: Likewise. * gcc.target/i386/pr43766.c: Likewise. * gcc.target/i386/recip-divf.c: Likewise. * gcc.target/i386/recip-sqrtf.c: Likewise. * gcc.target/i386/recip-vec-divf.c: Likewise. * gcc.target/i386/recip-vec-sqrtf.c: Likewise. * gcc.target/i386/sse-1.c: Likewise. * gcc.target/i386/sse-16.c: Likewise. * gcc.target/i386/sse-2.c: Likewise. * gcc.target/i386/sse-20.c: Likewise. * gcc.target/i386/sse-3.c: Likewise. * gcc.target/i386/sse-7.c: Likewise. * gcc.target/i386/sse-9.c: Likewise. * gcc.target/i386/sse-addps-1.c: Likewise. * gcc.target/i386/sse-addss-1.c: Likewise. * gcc.target/i386/sse-andnps-1.c: Likewise. * gcc.target/i386/sse-andps-1.c: Likewise. * gcc.target/i386/sse-cmpss-1.c: Likewise. * gcc.target/i386/sse-comiss-1.c: Likewise. * gcc.target/i386/sse-comiss-2.c: Likewise. * gcc.target/i386/sse-comiss-3.c: Likewise. * gcc.target/i386/sse-comiss-4.c: Likewise. * gcc.target/i386/sse-comiss-5.c: Likewise. * gcc.target/i386/sse-comiss-6.c: Likewise. * gcc.target/i386/sse-copysignf-vec.c: Likewise. * gcc.target/i386/sse-cvtsi2ss-1.c: Likewise. * gcc.target/i386/sse-cvtsi2ss-2.c: Likewise. * gcc.target/i386/sse-cvtss2si-1.c: Likewise. * gcc.target/i386/sse-cvtss2si-2.c: Likewise. * gcc.target/i386/sse-cvttss2si-1.c: Likewise. * gcc.target/i386/sse-cvttss2si-2.c: Likewise. * gcc.target/i386/sse-divps-1.c: Likewise. * gcc.target/i386/sse-divss-1.c: Likewise. * gcc.target/i386/sse-init-v4hi-1.c: Likewise. * gcc.target/i386/sse-init-v4sf-1.c: Likewise. * gcc.target/i386/sse-maxps-1.c: Likewise. * gcc.target/i386/sse-maxss-1.c: Likewise. * gcc.target/i386/sse-minps-1.c: Likewise. * gcc.target/i386/sse-minss-1.c: Likewise. * gcc.target/i386/sse-movaps-1.c: Likewise. * gcc.target/i386/sse-movaps-2.c: Likewise. * gcc.target/i386/sse-movhlps-1.c: Likewise. * gcc.target/i386/sse-movhps-1.c: Likewise. * gcc.target/i386/sse-movhps-2.c: Likewise. * gcc.target/i386/sse-movlhps-1.c: Likewise. * gcc.target/i386/sse-movmskps-1.c: Likewise. * gcc.target/i386/sse-movntps-1.c: Likewise. * gcc.target/i386/sse-movss-1.c: Likewise. * gcc.target/i386/sse-movss-2.c: Likewise. * gcc.target/i386/sse-movss-3.c: Likewise. * gcc.target/i386/sse-movups-1.c: Likewise. * gcc.target/i386/sse-movups-2.c: Likewise. * gcc.target/i386/sse-mulps-1.c: Likewise. * gcc.target/i386/sse-mulss-1.c: Likewise. * gcc.target/i386/sse-orps-1.c: Likewise. * gcc.target/i386/sse-rcpps-1.c: Likewise. * gcc.target/i386/sse-recip-vec.c: Likewise. * gcc.target/i386/sse-recip.c: Likewise. * gcc.target/i386/sse-rsqrtps-1.c: Likewise. * gcc.target/i386/sse-set-ps-1.c: Likewise. * gcc.target/i386/sse-sqrtps-1.c: Likewise. * gcc.target/i386/sse-subps-1.c: Likewise. * gcc.target/i386/sse-subss-1.c: Likewise. * gcc.target/i386/sse-ucomiss-1.c: Likewise. * gcc.target/i386/sse-ucomiss-2.c: Likewise. * gcc.target/i386/sse-ucomiss-3.c: Likewise. * gcc.target/i386/sse-ucomiss-4.c: Likewise. * gcc.target/i386/sse-ucomiss-5.c: Likewise. * gcc.target/i386/sse-ucomiss-6.c: Likewise. * gcc.target/i386/sse-unpckhps-1.c: Likewise. * gcc.target/i386/sse-unpcklps-1.c: Likewise. * gcc.target/i386/sse-xorps-1.c: Likewise. * gcc.target/i386/ssefn-1.c: Likewise. * gcc.target/i386/ssefn-3.c: Likewise. * gcc.target/i386/sseregparm-1.c: Likewise. * gcc.target/i386/stackalign/return-3.c: Likewise. * gcc.target/i386/vectorize1.c: Likewise. * gcc.target/i386/vperm-v4sf-1.c: Likewise. * gcc.target/i386/xorps-sse.c: Likewise. * gfortran.dg/pr28158.f90: Likewise. * gfortran.dg/pr30667.f: Likewise. * gnat.dg/loop_optimization7.adb: Likewise. * gnat.dg/sse_nolib.adb: Likewise. libgfortran: * config/fpu-387.h [__sun__ && __svr4__] Include <signal.h>, <ucontext.h>. (sigill_caught): New. (sigill_hdlr): New function (has_sse) [__sun__ && __svr4__]: Check if SSE instruction causes SIGILL. From-SVN: r162073
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config.gcc11
-rw-r--r--gcc/doc/install.texi22
-rw-r--r--gcc/doc/sourcebuild.texi3
-rw-r--r--gcc/testsuite/ChangeLog124
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/const2b.C1
-rw-r--r--gcc/testsuite/g++.dg/ext/vector14.C3
-rw-r--r--gcc/testsuite/g++.dg/other/mmintrin.C1
-rw-r--r--gcc/testsuite/gcc.dg/20020418-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c1
-rw-r--r--gcc/testsuite/gcc.dg/format/ms_unnamed-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/format/unnamed-1.c3
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr40281.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr32176.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr40550.c1
-rw-r--r--gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr36891.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/tree-vect.h5
-rw-r--r--gcc/testsuite/gcc.target/i386/20020218-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/20020523.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/abi-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/brokensqrt.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr13366.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr13685.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr24306.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr31486.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32065-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32065-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32389.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr38824.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr38931.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39592-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr43766.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-divf.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-sqrtf.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-divf.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sol2-check.h48
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-16.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-20.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-7.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-9.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-addps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-addss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-andnps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-andps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-check.h9
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cmpss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-divps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-divss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-maxps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-maxss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-minps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-minss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movaps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movaps-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhlps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhps-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movlhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movmskps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movntps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movups-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movups-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-mulps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-mulss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-orps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-rcpps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip-vec.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-set-ps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-subps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-subss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-xorps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse2-check.h8
-rw-r--r--gcc/testsuite/gcc.target/i386/sse3-check.h8
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefn-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefn-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/stackalign/return-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/xorps-sse.c1
-rw-r--r--gcc/testsuite/gfortran.dg/pr28158.f901
-rw-r--r--gcc/testsuite/gfortran.dg/pr30667.f1
-rw-r--r--gcc/testsuite/gnat.dg/loop_optimization7.adb1
-rw-r--r--gcc/testsuite/gnat.dg/sse_nolib.adb1
-rw-r--r--gcc/testsuite/lib/target-supports.exp11
120 files changed, 365 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e1322b1..571551a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2010-07-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config.gcc (i[34567]86-*-solaris2*): Default with_arch_32 to
+ pentiumpro on Solaris 8 and 9/x86.
+ * doc/install.texi (Specific, i?86-*-solaris2.[89]): Recommend GNU as.
+ Document SSE/SSE2 support.
+ * doc/sourcebuild.texi (Effective-Target Keywords): Document sse.
+
2010-07-12 Andi Kleen <ak@linux.intel.com>
* lto-symtab.c (lto_symtab_merge_decls_1): Use fatal_error
diff --git a/gcc/config.gcc b/gcc/config.gcc
index c39b990..31ea32e 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1253,13 +1253,10 @@ i[34567]86-*-solaris2*)
# Set default arch_32 to pentium4, tune_32 to generic like the other
# i386 targets, although config.guess defaults to i386-pc-solaris2*.
case ${target} in
- *-*-solaris2.8*)
- if test x$gas = xyes; then
- with_arch_32=${with_arch_32:-pentium4}
- else
- # Solaris 8/x86 as cannot handle sse2.
- with_arch_32=${with_arch_32:-pentiumpro}
- fi
+ *-*-solaris2.[89]*)
+ # Solaris 8 and 9/x86 cannot execute SSE/SSE2 instructions by
+ # default.
+ with_arch_32=${with_arch_32:-pentiumpro}
;;
*)
with_arch_32=${with_arch_32:-pentium4}
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 6b1e6a3..7580dee 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -2898,6 +2898,8 @@ information are.
@item
@uref{#ix86-x-linux,,i?86-*-linux*}
@item
+@uref{#ix86-x-solaris289,,i?86-*-solaris2.[89]}
+@item
@uref{#ix86-x-solaris210,,i?86-*-solaris2.10}
@item
@uref{#ia64-x-linux,,ia64-*-linux}
@@ -3473,6 +3475,26 @@ found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
@html
<hr />
@end html
+@heading @anchor{ix86-x-solaris289}i?86-*-solaris2.[89]
+The Sun assembler in Solaris 8 and 9 has several bugs and limitations.
+While GCC works around them, several features are missing, so it is
+@c FIXME: which ones?
+recommended to use the GNU assembler instead. There is no bundled
+version, but the current version, from GNU binutils 2.20.1, is known to
+work.
+
+Solaris~2/x86 doesn't support the execution of SSE/SSE2 instructions
+before Solaris~9 4/04, even if the CPU supports them. Programs will
+receive @code{SIGILL} if they try. The fix is available both in
+Solaris~9 Update~6 and kernel patch 112234-12 or newer. There is no
+corresponding patch for Solaris 8. To avoid this problem,
+@option{-march} defaults to @samp{pentiumpro} on Solaris 8 and 9. If
+you have the patch installed, you can configure GCC with an appropriate
+@option{--with-arch} option, but need GNU @command{as} for SSE2 support.
+
+@html
+<hr />
+@end html
@heading @anchor{ix86-x-solaris210}i?86-*-solaris2.10
Use this for Solaris 10 or later on x86 and x86-64 systems. This
configuration is supported by GCC 4.0 and later versions only. Unlike
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index cb116a9..191e425 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1604,6 +1604,9 @@ Target uses a ColdFire FPU.
@item hard_float
Target supports FPU instructions.
+@item sse
+Target supports compiling @code{sse} instructions.
+
@item sse2
Target supports compiling @code{sse2} instructions.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1182677..9bc5450 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,127 @@
+2010-07-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/target-supports.exp (check_effective_target_sse): New proc.
+ * gcc.target/i386/sol2-check.h: New file.
+ * gcc.target/i386/sse-check.h (ILL_INSN, ILL_INSN_LEN): Define.
+ Include sol2-check.h.
+ (main) Only run do_test () if sol2_check ().
+ * gcc.target/i386/sse2-check.h: Likewise.
+ * gcc.target/i386/sse3-check.h: Likewise.
+ * gcc.dg/vect/tree-vect.h (check_vect) [__i386__ || __x86_64__]
+ [__sun__ && __svr4__]: Execute SSE2 instruction.
+ * gcc.target/i386/math-torture/math-torture.exp: Only add options
+ with -msse to MATH_TORTURE_OPTIONS if check_effective_target_sse.
+ * g++.dg/debug/dwarf2/const2b.C: Use dg-require-effective-target sse.
+ * g++.dg/ext/vector14.C: Likewise.
+ * g++.dg/other/mmintrin.C: Likewise.
+ * gcc.dg/20020418-1.c: Likewise.
+ * gcc.dg/debug/dwarf2/const-2b.c: Likewise.
+ * gcc.dg/format/ms_unnamed-1.c: Likewise.
+ * gcc.dg/format/unnamed-1.c: Likewise.
+ Adapt dg-warning line number.
+ * gcc.dg/graphite/pr40281.c: Likewise.
+ * gcc.dg/pr32176.c: Likewise.
+ * gcc.dg/pr40550.c: Likewise.
+ * gcc.dg/prefetch-loop-arrays-1.c: Likewise.
+ * gcc.dg/torture/pr36891.c: Likewise.
+ * gcc.target/i386/20020218-1.c: Likewise.
+ * gcc.target/i386/20020523.c: Likewise.
+ * gcc.target/i386/abi-1.c: Likewise.
+ * gcc.target/i386/brokensqrt.c: Likewise.
+ * gcc.target/i386/fastcall-sseregparm.c: Likewise.
+ * gcc.target/i386/pr13366.c: Likewise.
+ * gcc.target/i386/pr13685.c: Likewise.
+ * gcc.target/i386/pr24306.c: Likewise.
+ * gcc.target/i386/pr31486.c: Likewise.
+ * gcc.target/i386/pr32065-1.c: Likewise.
+ * gcc.target/i386/pr32065-2.c: Likewise.
+ * gcc.target/i386/pr32389.c: Likewise.
+ * gcc.target/i386/pr38824.c: Likewise.
+ * gcc.target/i386/pr38931.c: Likewise.
+ * gcc.target/i386/pr39592-1.c: Likewise.
+ * gcc.target/i386/pr43766.c: Likewise.
+ * gcc.target/i386/recip-divf.c: Likewise.
+ * gcc.target/i386/recip-sqrtf.c: Likewise.
+ * gcc.target/i386/recip-vec-divf.c: Likewise.
+ * gcc.target/i386/recip-vec-sqrtf.c: Likewise.
+ * gcc.target/i386/sse-1.c: Likewise.
+ * gcc.target/i386/sse-16.c: Likewise.
+ * gcc.target/i386/sse-2.c: Likewise.
+ * gcc.target/i386/sse-20.c: Likewise.
+ * gcc.target/i386/sse-3.c: Likewise.
+ * gcc.target/i386/sse-7.c: Likewise.
+ * gcc.target/i386/sse-9.c: Likewise.
+ * gcc.target/i386/sse-addps-1.c: Likewise.
+ * gcc.target/i386/sse-addss-1.c: Likewise.
+ * gcc.target/i386/sse-andnps-1.c: Likewise.
+ * gcc.target/i386/sse-andps-1.c: Likewise.
+ * gcc.target/i386/sse-cmpss-1.c: Likewise.
+ * gcc.target/i386/sse-comiss-1.c: Likewise.
+ * gcc.target/i386/sse-comiss-2.c: Likewise.
+ * gcc.target/i386/sse-comiss-3.c: Likewise.
+ * gcc.target/i386/sse-comiss-4.c: Likewise.
+ * gcc.target/i386/sse-comiss-5.c: Likewise.
+ * gcc.target/i386/sse-comiss-6.c: Likewise.
+ * gcc.target/i386/sse-copysignf-vec.c: Likewise.
+ * gcc.target/i386/sse-cvtsi2ss-1.c: Likewise.
+ * gcc.target/i386/sse-cvtsi2ss-2.c: Likewise.
+ * gcc.target/i386/sse-cvtss2si-1.c: Likewise.
+ * gcc.target/i386/sse-cvtss2si-2.c: Likewise.
+ * gcc.target/i386/sse-cvttss2si-1.c: Likewise.
+ * gcc.target/i386/sse-cvttss2si-2.c: Likewise.
+ * gcc.target/i386/sse-divps-1.c: Likewise.
+ * gcc.target/i386/sse-divss-1.c: Likewise.
+ * gcc.target/i386/sse-init-v4hi-1.c: Likewise.
+ * gcc.target/i386/sse-init-v4sf-1.c: Likewise.
+ * gcc.target/i386/sse-maxps-1.c: Likewise.
+ * gcc.target/i386/sse-maxss-1.c: Likewise.
+ * gcc.target/i386/sse-minps-1.c: Likewise.
+ * gcc.target/i386/sse-minss-1.c: Likewise.
+ * gcc.target/i386/sse-movaps-1.c: Likewise.
+ * gcc.target/i386/sse-movaps-2.c: Likewise.
+ * gcc.target/i386/sse-movhlps-1.c: Likewise.
+ * gcc.target/i386/sse-movhps-1.c: Likewise.
+ * gcc.target/i386/sse-movhps-2.c: Likewise.
+ * gcc.target/i386/sse-movlhps-1.c: Likewise.
+ * gcc.target/i386/sse-movmskps-1.c: Likewise.
+ * gcc.target/i386/sse-movntps-1.c: Likewise.
+ * gcc.target/i386/sse-movss-1.c: Likewise.
+ * gcc.target/i386/sse-movss-2.c: Likewise.
+ * gcc.target/i386/sse-movss-3.c: Likewise.
+ * gcc.target/i386/sse-movups-1.c: Likewise.
+ * gcc.target/i386/sse-movups-2.c: Likewise.
+ * gcc.target/i386/sse-mulps-1.c: Likewise.
+ * gcc.target/i386/sse-mulss-1.c: Likewise.
+ * gcc.target/i386/sse-orps-1.c: Likewise.
+ * gcc.target/i386/sse-rcpps-1.c: Likewise.
+ * gcc.target/i386/sse-recip-vec.c: Likewise.
+ * gcc.target/i386/sse-recip.c: Likewise.
+ * gcc.target/i386/sse-rsqrtps-1.c: Likewise.
+ * gcc.target/i386/sse-set-ps-1.c: Likewise.
+ * gcc.target/i386/sse-sqrtps-1.c: Likewise.
+ * gcc.target/i386/sse-subps-1.c: Likewise.
+ * gcc.target/i386/sse-subss-1.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-1.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-2.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-3.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-4.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-5.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-6.c: Likewise.
+ * gcc.target/i386/sse-unpckhps-1.c: Likewise.
+ * gcc.target/i386/sse-unpcklps-1.c: Likewise.
+ * gcc.target/i386/sse-xorps-1.c: Likewise.
+ * gcc.target/i386/ssefn-1.c: Likewise.
+ * gcc.target/i386/ssefn-3.c: Likewise.
+ * gcc.target/i386/sseregparm-1.c: Likewise.
+ * gcc.target/i386/stackalign/return-3.c: Likewise.
+ * gcc.target/i386/vectorize1.c: Likewise.
+ * gcc.target/i386/vperm-v4sf-1.c: Likewise.
+ * gcc.target/i386/xorps-sse.c: Likewise.
+ * gfortran.dg/pr28158.f90: Likewise.
+ * gfortran.dg/pr30667.f: Likewise.
+ * gnat.dg/loop_optimization7.adb: Likewise.
+ * gnat.dg/sse_nolib.adb: Likewise.
+
2010-07-11 Tobias Burnus <burnus@net-b.de>
PR fortran/44702
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C b/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
index 593e080..81360c2 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
@@ -1,5 +1,6 @@
/* { dg-do compile { target i386*-*-* } } */
/* { dg-options "-O -gdwarf-2 -dA -msse" } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "DW_AT_const_value" } } */
typedef float FloatVect __attribute__((__vector_size__(16)));
diff --git a/gcc/testsuite/g++.dg/ext/vector14.C b/gcc/testsuite/g++.dg/ext/vector14.C
index 78109c1..8e79210 100644
--- a/gcc/testsuite/g++.dg/ext/vector14.C
+++ b/gcc/testsuite/g++.dg/ext/vector14.C
@@ -1,6 +1,7 @@
// PR c++/35758
// { dg-do compile }
-// { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+// { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+// { dg-require-effective-target sse }
// Ignore warning on some powerpc-linux configurations.
// { dg-prune-output "non-standard ABI extension" }
// { dg-prune-output "mangled name" }
diff --git a/gcc/testsuite/g++.dg/other/mmintrin.C b/gcc/testsuite/g++.dg/other/mmintrin.C
index 417a1ac..8315f93 100644
--- a/gcc/testsuite/g++.dg/other/mmintrin.C
+++ b/gcc/testsuite/g++.dg/other/mmintrin.C
@@ -1,4 +1,5 @@
// { dg-do compile { target i?86-*-* x86_64-*-* } }
// { dg-options "-msse" }
+// { dg-require-effective-target sse }
#include <xmmintrin.h>
diff --git a/gcc/testsuite/gcc.dg/20020418-1.c b/gcc/testsuite/gcc.dg/20020418-1.c
index 7314ec0..285af2b 100644
--- a/gcc/testsuite/gcc.dg/20020418-1.c
+++ b/gcc/testsuite/gcc.dg/20020418-1.c
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -msse -ffast-math" { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target sse { target i?86-*-* x86_64-*-* } } */
void bar (float *a, float *b);
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
index 9d577ea..6cbdc85 100644
--- a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target i386*-*-* } } */
/* { dg-options "-O -gdwarf-2 -dA -msse" } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "DW_AT_const_value" } } */
typedef float FloatVect __attribute__((__vector_size__(16)));
diff --git a/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c b/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
index aa4f6cb..4b837e5 100644
--- a/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
+++ b/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
@@ -3,6 +3,7 @@
/* { dg-do compile { target { *-*-mingw* } } } */
/* { dg-options "-Wformat" } */
/* { dg-options "-Wformat -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#define USE_SYSTEM_FORMATS
#include "format.h"
diff --git a/gcc/testsuite/gcc.dg/format/unnamed-1.c b/gcc/testsuite/gcc.dg/format/unnamed-1.c
index 2d4f77c..b3efdcb 100644
--- a/gcc/testsuite/gcc.dg/format/unnamed-1.c
+++ b/gcc/testsuite/gcc.dg/format/unnamed-1.c
@@ -3,6 +3,7 @@
/* { dg-do compile } */
/* { dg-options "-Wformat" } */
/* { dg-options "-Wformat -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#include "format.h"
@@ -20,5 +21,5 @@ f (TItype x)
{
printf("%d", x); /* { dg-warning "expects type" } */
printf("%d", 141592653589793238462643383279502884197169399375105820974944); /* { dg-warning "expects type" } */
- /* { dg-warning "unsigned only|too large" "constant" { target *-*-* } 22 } */
+ /* { dg-warning "unsigned only|too large" "constant" { target *-*-* } 23 } */
}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr40281.c b/gcc/testsuite/gcc.dg/graphite/pr40281.c
index a09147a..437f343 100644
--- a/gcc/testsuite/gcc.dg/graphite/pr40281.c
+++ b/gcc/testsuite/gcc.dg/graphite/pr40281.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O -fprefetch-loop-arrays -w" } */
/* { dg-options "-O -fprefetch-loop-arrays -march=i686 -msse -w" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
void foo(int);
void bar(int n)
diff --git a/gcc/testsuite/gcc.dg/pr32176.c b/gcc/testsuite/gcc.dg/pr32176.c
index 6646db0..e0e63a3 100644
--- a/gcc/testsuite/gcc.dg/pr32176.c
+++ b/gcc/testsuite/gcc.dg/pr32176.c
@@ -3,6 +3,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
/* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
void foo (void)
{
diff --git a/gcc/testsuite/gcc.dg/pr40550.c b/gcc/testsuite/gcc.dg/pr40550.c
index 27935ab..3dd11eb 100644
--- a/gcc/testsuite/gcc.dg/pr40550.c
+++ b/gcc/testsuite/gcc.dg/pr40550.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#ifdef __i386__
#include "cpuid.h"
diff --git a/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c b/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
index 59cebc5..6c6f0b3 100644
--- a/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
+++ b/gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
/* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse -w" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
__extension__ typedef __SIZE_TYPE__ size_t;
diff --git a/gcc/testsuite/gcc.dg/torture/pr36891.c b/gcc/testsuite/gcc.dg/torture/pr36891.c
index 31f7e17..53e6163 100644
--- a/gcc/testsuite/gcc.dg/torture/pr36891.c
+++ b/gcc/testsuite/gcc.dg/torture/pr36891.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-ffast-math" } */
/* { dg-options "-ffast-math -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#define __vector __attribute__((vector_size(16) ))
__vector float f(void);
diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h
index 2f21c2b..ed59d79 100644
--- a/gcc/testsuite/gcc.dg/vect/tree-vect.h
+++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h
@@ -41,6 +41,11 @@ check_vect (void)
want_level = 1, want_c = bit_SSSE3, want_d = 0;
# else
want_level = 1, want_c = 0, want_d = bit_SSE2;
+# if defined(__sun__) && defined(__svr4__)
+ /* Before Solaris 9 4/04, trying to execute an SSE2 instruction gives
+ SIGILL even if the CPU can handle them. */
+ asm volatile ("unpcklpd %xmm0,%xmm2");
+# endif
# endif
if (!__get_cpuid (want_level, &a, &b, &c, &d)
diff --git a/gcc/testsuite/gcc.target/i386/20020218-1.c b/gcc/testsuite/gcc.target/i386/20020218-1.c
index 13a835e..cbba714 100644
--- a/gcc/testsuite/gcc.target/i386/20020218-1.c
+++ b/gcc/testsuite/gcc.target/i386/20020218-1.c
@@ -1,6 +1,7 @@
/* Verify that X86-64 only SSE registers aren't restored on IA-32. */
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
/* { dg-final { scan-assembler-not "xmm8" } } */
diff --git a/gcc/testsuite/gcc.target/i386/20020523.c b/gcc/testsuite/gcc.target/i386/20020523.c
index 7c3490f..0684d5f 100644
--- a/gcc/testsuite/gcc.target/i386/20020523.c
+++ b/gcc/testsuite/gcc.target/i386/20020523.c
@@ -4,6 +4,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -mfpmath=sse -ffast-math" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/abi-1.c b/gcc/testsuite/gcc.target/i386/abi-1.c
index 62b80ef..8a84ca1 100644
--- a/gcc/testsuite/gcc.target/i386/abi-1.c
+++ b/gcc/testsuite/gcc.target/i386/abi-1.c
@@ -1,6 +1,7 @@
/* Make certain that we pass V2DF in the correct register for SSE1. */
/* { dg-do compile } */
/* { dg-options "-O1 -msse -mno-sse2" } */
+/* { dg-require-effective-target sse } */
typedef double v2df __attribute__((vector_size (16)));
v2df foo (void) { return (v2df){ 1.0, 2.0 }; }
diff --git a/gcc/testsuite/gcc.target/i386/brokensqrt.c b/gcc/testsuite/gcc.target/i386/brokensqrt.c
index 19a59d8..836d3b3 100644
--- a/gcc/testsuite/gcc.target/i386/brokensqrt.c
+++ b/gcc/testsuite/gcc.target/i386/brokensqrt.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
extern float sqrtf (float);
diff --git a/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c b/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
index bdfae5b..1a55a3d 100644
--- a/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
+++ b/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-mpreferred-stack-boundary=4 -msse" } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp b/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
index a0e7b8d..2b1d63d 100644
--- a/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
+++ b/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
@@ -28,19 +28,23 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
set MATH_TORTURE_OPTIONS [list \
{ -O0 } \
{ -O0 -mfpmath=387 } \
+ { -O0 -mfpmath=387 -ffast-math } \
+ { -O2 } \
+ { -O2 -mfpmath=387 } \
+ { -O2 -mfpmath=387 -ffast-math } \
+]
+
+if { [check_effective_target_sse] } {
+ lappend MATH_TORTURE_OPTIONS \
{ -O0 -msse -mno-sse2 -mfpmath=sse } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 } \
- { -O0 -mfpmath=387 -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
- { -O2 } \
- { -O2 -mfpmath=387 } \
{ -O2 -msse -mno-sse2 -mfpmath=sse } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 } \
- { -O2 -mfpmath=387 -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
-]
+}
if { [check_effective_target_sse2] } {
lappend MATH_TORTURE_OPTIONS \
diff --git a/gcc/testsuite/gcc.target/i386/pr13366.c b/gcc/testsuite/gcc.target/i386/pr13366.c
index f0dce0b..569f1ad 100644
--- a/gcc/testsuite/gcc.target/i386/pr13366.c
+++ b/gcc/testsuite/gcc.target/i386/pr13366.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O -msse" } */
+/* { dg-require-effective-target sse } */
#include <xmmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr13685.c b/gcc/testsuite/gcc.target/i386/pr13685.c
index 159112d..a50681b 100644
--- a/gcc/testsuite/gcc.target/i386/pr13685.c
+++ b/gcc/testsuite/gcc.target/i386/pr13685.c
@@ -1,6 +1,7 @@
/* PR target/13685 */
/* { dg-do run } */
/* { dg-options "-Os -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr24306.c b/gcc/testsuite/gcc.target/i386/pr24306.c
index c578475..1319918 100644
--- a/gcc/testsuite/gcc.target/i386/pr24306.c
+++ b/gcc/testsuite/gcc.target/i386/pr24306.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr31486.c b/gcc/testsuite/gcc.target/i386/pr31486.c
index 7082d3d..d9f251f 100644
--- a/gcc/testsuite/gcc.target/i386/pr31486.c
+++ b/gcc/testsuite/gcc.target/i386/pr31486.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse -mno-sse2" } */
+/* { dg-require-effective-target sse } */
typedef double __v2df __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr32065-1.c b/gcc/testsuite/gcc.target/i386/pr32065-1.c
index eefea27..951f252 100644
--- a/gcc/testsuite/gcc.target/i386/pr32065-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr32065-1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target dfp } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-msse -std=gnu99" } */
_Decimal128 test (void)
diff --git a/gcc/testsuite/gcc.target/i386/pr32065-2.c b/gcc/testsuite/gcc.target/i386/pr32065-2.c
index e1a8859..5f055b5 100644
--- a/gcc/testsuite/gcc.target/i386/pr32065-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr32065-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target dfp } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-Os -msse -std=gnu99" } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr32389.c b/gcc/testsuite/gcc.target/i386/pr32389.c
index 24c2767..511f0ca 100644
--- a/gcc/testsuite/gcc.target/i386/pr32389.c
+++ b/gcc/testsuite/gcc.target/i386/pr32389.c
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-msse" } */
double f1();
diff --git a/gcc/testsuite/gcc.target/i386/pr38824.c b/gcc/testsuite/gcc.target/i386/pr38824.c
index 637abfd..11102f2 100644
--- a/gcc/testsuite/gcc.target/i386/pr38824.c
+++ b/gcc/testsuite/gcc.target/i386/pr38824.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
typedef float v4sf __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr38931.c b/gcc/testsuite/gcc.target/i386/pr38931.c
index dd35dec..96f9559 100644
--- a/gcc/testsuite/gcc.target/i386/pr38931.c
+++ b/gcc/testsuite/gcc.target/i386/pr38931.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
typedef int __m64 __attribute__ ((__vector_size__ (8)));
diff --git a/gcc/testsuite/gcc.target/i386/pr39592-1.c b/gcc/testsuite/gcc.target/i386/pr39592-1.c
index a7f3704..65f3417 100644
--- a/gcc/testsuite/gcc.target/i386/pr39592-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr39592-1.c
@@ -2,6 +2,7 @@
39592. */
/* { dg-do compile } */
/* { dg-options "-ansi -msse" } */
+/* { dg-require-effective-target sse } */
double
foo (unsigned long var)
diff --git a/gcc/testsuite/gcc.target/i386/pr43766.c b/gcc/testsuite/gcc.target/i386/pr43766.c
index 731b780..b9735a9 100644
--- a/gcc/testsuite/gcc.target/i386/pr43766.c
+++ b/gcc/testsuite/gcc.target/i386/pr43766.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -msse -mregparm=3" { target ilp32 } } */
+/* { dg-require-effective-target sse } */
void p (int *a, int i)
{
diff --git a/gcc/testsuite/gcc.target/i386/recip-divf.c b/gcc/testsuite/gcc.target/i386/recip-divf.c
index b4447d3..5d2f1be 100644
--- a/gcc/testsuite/gcc.target/i386/recip-divf.c
+++ b/gcc/testsuite/gcc.target/i386/recip-divf.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
float t1(float a, float b)
{
diff --git a/gcc/testsuite/gcc.target/i386/recip-sqrtf.c b/gcc/testsuite/gcc.target/i386/recip-sqrtf.c
index 859d218..a288cab 100644
--- a/gcc/testsuite/gcc.target/i386/recip-sqrtf.c
+++ b/gcc/testsuite/gcc.target/i386/recip-sqrtf.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
extern float sqrtf (float);
diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c
index 4bdbba7..5cce7a6 100644
--- a/gcc/testsuite/gcc.target/i386/recip-vec-divf.c
+++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
float a[16];
float b[16];
diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c
index bcef700..d70cb70 100644
--- a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c
+++ b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
float a[16];
float b[16];
diff --git a/gcc/testsuite/gcc.target/i386/sol2-check.h b/gcc/testsuite/gcc.target/i386/sol2-check.h
new file mode 100644
index 0000000..25a915e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/sol2-check.h
@@ -0,0 +1,48 @@
+#if defined(__sun__) && defined(__svr4__)
+/* Make sure sigaction() is declared even with -std=c99. */
+#define __EXTENSIONS__
+#include <signal.h>
+#include <ucontext.h>
+
+static volatile sig_atomic_t sigill_caught;
+
+static void
+sigill_hdlr (int sig __attribute((unused)),
+ siginfo_t *sip __attribute__((unused)),
+ ucontext_t *ucp)
+{
+ sigill_caught = 1;
+ /* Set PC to the instruction after the faulting one to skip over it,
+ otherwise we enter an infinite loop. */
+ ucp->uc_mcontext.gregs[EIP] += ILL_INSN_LEN;
+ setcontext (ucp);
+}
+#endif
+
+/* Solaris 2 before Solaris 9 4/04 cannot execute SSE/SSE2 instructions
+ even if the CPU supports them. Programs receive SIGILL instead, so
+ check for that at runtime. */
+static int
+sol2_check (void)
+{
+#if defined(__sun__) && defined(__svr4__)
+ struct sigaction act, oact;
+
+ act.sa_handler = sigill_hdlr;
+ sigemptyset (&act.sa_mask);
+ /* Need to set SA_SIGINFO so a ucontext_t * is passed to the handler. */
+ act.sa_flags = SA_SIGINFO;
+ sigaction (SIGILL, &act, &oact);
+
+ ILL_INSN;
+
+ sigaction (SIGILL, &oact, NULL);
+
+ if (sigill_caught)
+ exit (0);
+ else
+ return 1;
+#else
+ return 1;
+#endif /* __sun__ && __svr4__ */
+}
diff --git a/gcc/testsuite/gcc.target/i386/sse-1.c b/gcc/testsuite/gcc.target/i386/sse-1.c
index afae22d..c313a1f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-1.c
@@ -1,6 +1,7 @@
/* PR 12902 */
/* { dg-do compile } */
/* { dg-options "-O1 -msse" } */
+/* { dg-require-effective-target sse } */
#include <xmmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-16.c b/gcc/testsuite/gcc.target/i386/sse-16.c
index e429630..c07df66 100644
--- a/gcc/testsuite/gcc.target/i386/sse-16.c
+++ b/gcc/testsuite/gcc.target/i386/sse-16.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O0 -msse" } */
+/* { dg-require-effective-target sse } */
typedef float __vr __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/sse-2.c b/gcc/testsuite/gcc.target/i386/sse-2.c
index cbaa5e6..4dbc886 100644
--- a/gcc/testsuite/gcc.target/i386/sse-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O3 -msse" } */
+/* { dg-require-effective-target sse } */
#include <xmmintrin.h>
static const __m128 v_sign = {-.0f, -.0f, -.0f, -.0f};
static const __m128 v_half = {0.5f, 0.5f, 0.5f, 0.5f};
diff --git a/gcc/testsuite/gcc.target/i386/sse-20.c b/gcc/testsuite/gcc.target/i386/sse-20.c
index 5aa8f7a..fc0744f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-20.c
+++ b/gcc/testsuite/gcc.target/i386/sse-20.c
@@ -1,5 +1,6 @@
/* PR target/13685 */
/* { dg-options "-Os -msse" } */
+/* { dg-require-effective-target sse } */
typedef float __m128 __attribute__ ((vector_size (16)));
typedef int __m64 __attribute__ ((vector_size (8)));
diff --git a/gcc/testsuite/gcc.target/i386/sse-3.c b/gcc/testsuite/gcc.target/i386/sse-3.c
index 338b7c6..1be1d1a 100644
--- a/gcc/testsuite/gcc.target/i386/sse-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-3.c
@@ -1,6 +1,7 @@
/* PR target/21149 */
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-7.c b/gcc/testsuite/gcc.target/i386/sse-7.c
index 12b88ca..30e2c13 100644
--- a/gcc/testsuite/gcc.target/i386/sse-7.c
+++ b/gcc/testsuite/gcc.target/i386/sse-7.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-9.c b/gcc/testsuite/gcc.target/i386/sse-9.c
index 0106cb5..e1a0a22 100644
--- a/gcc/testsuite/gcc.target/i386/sse-9.c
+++ b/gcc/testsuite/gcc.target/i386/sse-9.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-addps-1.c b/gcc/testsuite/gcc.target/i386/sse-addps-1.c
index 2aa1cfa..b280667 100644
--- a/gcc/testsuite/gcc.target/i386/sse-addps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-addps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-addss-1.c b/gcc/testsuite/gcc.target/i386/sse-addss-1.c
index 911a6cd..43aa2d5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-addss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-addss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-andnps-1.c b/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
index 06d1e07..eeeec02 100644
--- a/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-andps-1.c b/gcc/testsuite/gcc.target/i386/sse-andps-1.c
index aa46b8a..6094dba 100644
--- a/gcc/testsuite/gcc.target/i386/sse-andps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-andps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-check.h b/gcc/testsuite/gcc.target/i386/sse-check.h
index 85629cc..d6c92a3 100644
--- a/gcc/testsuite/gcc.target/i386/sse-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse-check.h
@@ -1,9 +1,14 @@
-#include <stdio.h>
#include <stdlib.h>
#include "m128-check.h"
#include "cpuid.h"
+/* We need a single SSE instruction here so the handler can safely skip
+ over it. */
+#define ILL_INSN __asm__ volatile ("movss %xmm2,%xmm1")
+#define ILL_INSN_LEN 4
+#include "sol2-check.h"
+
static void sse_test (void);
static void
@@ -22,7 +27,7 @@ main ()
return 0;
/* Run SSE test only if host has SSE support. */
- if (edx & bit_SSE)
+ if ((edx & bit_SSE) && sol2_check ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c b/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
index e4be731..2c9e9fe 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -std=c99" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-1.c b/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
index 2892a70..ff623aa 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-2.c b/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
index 63b6d6d..d674bed 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-3.c b/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
index 75ac4e4..d2301ad 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-4.c b/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
index ceeeca7..7f372e2 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-5.c b/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
index 8f50351..104fdd7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-6.c b/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
index 38df9b8..8229b7d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c b/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
index 9342e2c..bd85889 100644
--- a/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
+++ b/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ftree-vectorize -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
index e5435b6..740227f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
index aa74e11..6abc4d5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
index 5740626..3f8c549 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
index e136b71..44a5faf 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
index 8edc197..667806d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
index 94e831e..eb85223 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-divps-1.c b/gcc/testsuite/gcc.target/i386/sse-divps-1.c
index d4d441a..321bb5a 100644
--- a/gcc/testsuite/gcc.target/i386/sse-divps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-divps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-divss-1.c b/gcc/testsuite/gcc.target/i386/sse-divss-1.c
index e744949..1427e4f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-divss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-divss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c b/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
index 5c25477..f251315 100644
--- a/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c b/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
index 4cb1f33..eea03ec 100644
--- a/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-maxps-1.c b/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
index 5e6fcd6..9a82f66 100644
--- a/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-maxss-1.c b/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
index 5b5215a..7b88dfc 100644
--- a/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-minps-1.c b/gcc/testsuite/gcc.target/i386/sse-minps-1.c
index a41139f..452df83 100644
--- a/gcc/testsuite/gcc.target/i386/sse-minps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-minps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-minss-1.c b/gcc/testsuite/gcc.target/i386/sse-minss-1.c
index 9280b07..b7288f8 100644
--- a/gcc/testsuite/gcc.target/i386/sse-minss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-minss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movaps-1.c b/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
index 3677ac4..ed3562b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movaps-2.c b/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
index 46b971a..fcfa80b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c b/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
index 7023bf9..4d7b3ed 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhps-1.c b/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
index 9f28927..44b8859 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhps-2.c b/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
index 023937b..11ab383 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c b/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
index aba9a9a..4ce3edf 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c b/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
index f1f0d7ed..8557a30 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movntps-1.c b/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
index 8c45da3..067f296 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-1.c b/gcc/testsuite/gcc.target/i386/sse-movss-1.c
index eccdf5a..ee53d5f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-2.c b/gcc/testsuite/gcc.target/i386/sse-movss-2.c
index f64fa4d..6386665 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-3.c b/gcc/testsuite/gcc.target/i386/sse-movss-3.c
index 1212622..a090aada 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movups-1.c b/gcc/testsuite/gcc.target/i386/sse-movups-1.c
index 222da79..7ea9122 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movups-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movups-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movups-2.c b/gcc/testsuite/gcc.target/i386/sse-movups-2.c
index 4165723..188967a 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movups-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movups-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-mulps-1.c b/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
index a07b5ab..de66a28 100644
--- a/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-mulss-1.c b/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
index 7b45063..99161a8 100644
--- a/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-orps-1.c b/gcc/testsuite/gcc.target/i386/sse-orps-1.c
index 6c8dac5..6056037 100644
--- a/gcc/testsuite/gcc.target/i386/sse-orps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-orps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c b/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
index 7a1a8fa..4d07835 100644
--- a/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
index 202351d..bb1e458 100644
--- a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
+++ b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-recip.c b/gcc/testsuite/gcc.target/i386/sse-recip.c
index d88eb7f..4f7d3bf 100644
--- a/gcc/testsuite/gcc.target/i386/sse-recip.c
+++ b/gcc/testsuite/gcc.target/i386/sse-recip.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c b/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
index 4052c21..c2db725 100644
--- a/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c b/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
index 8232c72..5a0c9b9 100644
--- a/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c b/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
index 9f0658d..1dbd260 100644
--- a/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-subps-1.c b/gcc/testsuite/gcc.target/i386/sse-subps-1.c
index 2e7e8d5..e63e478 100644
--- a/gcc/testsuite/gcc.target/i386/sse-subps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-subps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-subss-1.c b/gcc/testsuite/gcc.target/i386/sse-subss-1.c
index 5b3ef26..5d9a5f5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-subss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-subss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
index b38b1fd..4d72b01 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
index e0212a4..dc4ba80 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
index dc728fb..042898b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
index 3251c0b..a3f32bb 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
index ad34f01..821dd77 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
index b9b2f4b..602a923 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c b/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
index be4ab36..005924b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c b/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
index 5a5da20..456ef20 100644
--- a/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-xorps-1.c b/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
index 6f96e69..8ec5008 100644
--- a/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse2-check.h b/gcc/testsuite/gcc.target/i386/sse2-check.h
index e9f17f0..7e91192 100644
--- a/gcc/testsuite/gcc.target/i386/sse2-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse2-check.h
@@ -2,6 +2,12 @@
#include "cpuid.h"
#include "m128-check.h"
+/* We need a single SSE2 instruction here so the handler can safely skip
+ over it. */
+#define ILL_INSN __asm__ volatile ("unpcklpd %xmm0,%xmm2")
+#define ILL_INSN_LEN 4
+#include "sol2-check.h"
+
static void sse2_test (void);
static void
@@ -20,7 +26,7 @@ main ()
return 0;
/* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
+ if ((edx & bit_SSE2) && sol2_check ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/sse3-check.h b/gcc/testsuite/gcc.target/i386/sse3-check.h
index df0e63a..c7b1896 100644
--- a/gcc/testsuite/gcc.target/i386/sse3-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse3-check.h
@@ -3,6 +3,12 @@
#include "cpuid.h"
+/* We need a single SSE3 instruction here so the handler can safely skip
+ over it. */
+#define ILL_INSN __asm__ volatile ("movddup %xmm1,%xmm2")
+#define ILL_INSN_LEN 4
+#include "sol2-check.h"
+
static void sse3_test (void);
static void
@@ -21,7 +27,7 @@ main ()
return 0;
/* Run SSE3 test only if host has SSE3 support. */
- if (ecx & bit_SSE3)
+ if ((ecx & bit_SSE3) && sol2_check ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/ssefn-1.c b/gcc/testsuite/gcc.target/i386/ssefn-1.c
index bea6cb2..37bbf6f 100644
--- a/gcc/testsuite/gcc.target/i386/ssefn-1.c
+++ b/gcc/testsuite/gcc.target/i386/ssefn-1.c
@@ -3,6 +3,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "movss" } } */
/* { dg-final { scan-assembler "mulss" } } */
/* { dg-final { scan-assembler-not "movsd" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssefn-3.c b/gcc/testsuite/gcc.target/i386/ssefn-3.c
index adf72cc..b96b211 100644
--- a/gcc/testsuite/gcc.target/i386/ssefn-3.c
+++ b/gcc/testsuite/gcc.target/i386/ssefn-3.c
@@ -3,6 +3,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -mfpmath=sse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-1.c b/gcc/testsuite/gcc.target/i386/sseregparm-1.c
index 9d426b8..946a24d 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-1.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-1.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse" } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
float essef(float) __attribute__((sseregparm));
double essed(double) __attribute__((sseregparm));
diff --git a/gcc/testsuite/gcc.target/i386/stackalign/return-3.c b/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
index 87210d8..dd2c2e8 100644
--- a/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
+++ b/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-skip-if "" { ! { ilp32 && dfp } } { "*" } { "" } } */
/* { dg-options "-msse -std=gnu99 -mpreferred-stack-boundary=2" } */
+/* { dg-require-effective-target sse } */
/* This compile only test is to detect an assertion failure in stack branch
development. */
diff --git a/gcc/testsuite/gcc.target/i386/vectorize1.c b/gcc/testsuite/gcc.target/i386/vectorize1.c
index 7a5023a..f673e44 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize1.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize1.c
@@ -1,5 +1,6 @@
/* PR middle-end/28915 */
/* { dg-options "-msse -O2 -ftree-vectorize -fdump-tree-vect" } */
+/* { dg-require-effective-target sse } */
extern char lanip[3][40];
typedef struct
diff --git a/gcc/testsuite/gcc.target/i386/xorps-sse.c b/gcc/testsuite/gcc.target/i386/xorps-sse.c
index e9c0a2e..ab43ab7 100644
--- a/gcc/testsuite/gcc.target/i386/xorps-sse.c
+++ b/gcc/testsuite/gcc.target/i386/xorps-sse.c
@@ -1,6 +1,7 @@
/* Test that we generate xorps instruction when pxor is not available. */
/* { dg-do compile } */
/* { dg-options "-O -msse -mno-sse2" } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "xorps\[ \t\]" } } */
#define vector __attribute__ ((vector_size (16)))
diff --git a/gcc/testsuite/gfortran.dg/pr28158.f90 b/gcc/testsuite/gfortran.dg/pr28158.f90
index 4556ecd..d1cb9a4 100644
--- a/gcc/testsuite/gfortran.dg/pr28158.f90
+++ b/gcc/testsuite/gfortran.dg/pr28158.f90
@@ -1,6 +1,7 @@
! { dg-do compile { target i?86-*-* x86_64-*-* } }
! { dg-require-effective-target ilp32 }
! { dg-options "-O -msse -mfpmath=sse" }
+! { dg-require-effective-target sse }
subroutine yhalf(z)
complex cdexpj,z
z=cdexpj((0.d0,1.d0)*z)
diff --git a/gcc/testsuite/gfortran.dg/pr30667.f b/gcc/testsuite/gfortran.dg/pr30667.f
index 0f1af29..99e536b 100644
--- a/gcc/testsuite/gfortran.dg/pr30667.f
+++ b/gcc/testsuite/gfortran.dg/pr30667.f
@@ -1,6 +1,7 @@
! { dg-do compile { target i?86-*-* x86_64-*-* } }
! { dg-require-effective-target ilp32 }
! { dg-options "-O2 -msse -ftree-vectorize" }
+! { dg-require-effective-target sse }
subroutine cblank_cvb(a,ndim)
character*(*) a
character*1 blank
diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.adb b/gcc/testsuite/gnat.dg/loop_optimization7.adb
index 1668394..c6a5dc9 100644
--- a/gcc/testsuite/gnat.dg/loop_optimization7.adb
+++ b/gcc/testsuite/gnat.dg/loop_optimization7.adb
@@ -1,6 +1,7 @@
-- { dg-do compile }
-- { dg-options "-O3" }
-- { dg-options "-O3 -msse" { target i?86-*-* x86_64-*-* } }
+-- { dg-require-effective-target sse }
package body Loop_Optimization7 is
diff --git a/gcc/testsuite/gnat.dg/sse_nolib.adb b/gcc/testsuite/gnat.dg/sse_nolib.adb
index b024a21..d678b9a 100644
--- a/gcc/testsuite/gnat.dg/sse_nolib.adb
+++ b/gcc/testsuite/gnat.dg/sse_nolib.adb
@@ -1,5 +1,6 @@
-- { dg-do run { target i?86-*-* x86_64-*-* } }
-- { dg-options "-O1 -msse" }
+-- { dg-require-effective-target sse }
with Ada.Unchecked_Conversion;
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 798a27d..bb28a77 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3261,6 +3261,17 @@ proc check_effective_target_avx { } {
} "-O2 -mavx" ]
}
+# Return 1 if sse instructions can be compiled.
+proc check_effective_target_sse { } {
+ return [check_no_compiler_messages sse object {
+ int main ()
+ {
+ __builtin_ia32_stmxcsr ();
+ return 0;
+ }
+ } "-O2 -msse" ]
+}
+
# Return 1 if sse2 instructions can be compiled.
proc check_effective_target_sse2 { } {
return [check_no_compiler_messages sse2 object {