diff mbox series

[v2] x86: Also check _SOFT_FLOAT in <x86gprintrin.h>

Message ID 20220314143117.1253752-1-hjl.tools@gmail.com
State New
Headers show
Series [v2] x86: Also check _SOFT_FLOAT in <x86gprintrin.h> | expand

Commit Message

H.J. Lu March 14, 2022, 2:31 p.m. UTC
Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.

gcc/

	PR target/104890
	* config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
	pushing target("general-regs-only").

gcc/testsuite/

	PR target/104890
	* gcc.target/i386/pr104890.c: New test.
---
 gcc/config/i386/x86gprintrin.h           |  2 +-
 gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c

Comments

H.J. Lu March 15, 2022, 2:39 p.m. UTC | #1
On Mon, Mar 14, 2022 at 7:31 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.
>
> gcc/
>
>         PR target/104890
>         * config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
>         pushing target("general-regs-only").
>
> gcc/testsuite/
>
>         PR target/104890
>         * gcc.target/i386/pr104890.c: New test.
> ---
>  gcc/config/i386/x86gprintrin.h           |  2 +-
>  gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
>  2 files changed, 12 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c
>
> diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
> index 017ec299793..e0be01d5e78 100644
> --- a/gcc/config/i386/x86gprintrin.h
> +++ b/gcc/config/i386/x86gprintrin.h
> @@ -24,7 +24,7 @@
>  #ifndef _X86GPRINTRIN_H_INCLUDED
>  #define _X86GPRINTRIN_H_INCLUDED
>
> -#if defined __MMX__ || defined __SSE__
> +#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
>  #pragma GCC push_options
>  #pragma GCC target("general-regs-only")
>  #define __DISABLE_GENERAL_REGS_ONLY__
> diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
> new file mode 100644
> index 00000000000..cb430eef688
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr104890.c
> @@ -0,0 +1,11 @@
> +/* { dg-do compile { target ia32 } } */
> +/* { dg-options "-O2 -mshstk -march=i686" } */
> +
> +#include <x86gprintrin.h>
> +
> +__attribute__((target ("general-regs-only")))
> +int
> +foo ()
> +{
> +  return _get_ssp ();
> +}
> --
> 2.35.1
>

It also fixed:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99744#c18

Any comments on this patch?
Hongtao Liu March 16, 2022, 1:57 a.m. UTC | #2
On Tue, Mar 15, 2022 at 10:40 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Mon, Mar 14, 2022 at 7:31 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.
> >
> > gcc/
> >
> >         PR target/104890
> >         * config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
> >         pushing target("general-regs-only").
> >
> > gcc/testsuite/
> >
> >         PR target/104890
> >         * gcc.target/i386/pr104890.c: New test.
> > ---
> >  gcc/config/i386/x86gprintrin.h           |  2 +-
> >  gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
> >  2 files changed, 12 insertions(+), 1 deletion(-)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c
> >
> > diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
> > index 017ec299793..e0be01d5e78 100644
> > --- a/gcc/config/i386/x86gprintrin.h
> > +++ b/gcc/config/i386/x86gprintrin.h
> > @@ -24,7 +24,7 @@
> >  #ifndef _X86GPRINTRIN_H_INCLUDED
> >  #define _X86GPRINTRIN_H_INCLUDED
> >
> > -#if defined __MMX__ || defined __SSE__
> > +#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
The patch LGTM.
> >  #pragma GCC push_options
> >  #pragma GCC target("general-regs-only")
> >  #define __DISABLE_GENERAL_REGS_ONLY__
> > diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
> > new file mode 100644
> > index 00000000000..cb430eef688
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr104890.c
> > @@ -0,0 +1,11 @@
> > +/* { dg-do compile { target ia32 } } */
> > +/* { dg-options "-O2 -mshstk -march=i686" } */
> > +
> > +#include <x86gprintrin.h>
> > +
> > +__attribute__((target ("general-regs-only")))
> > +int
> > +foo ()
> > +{
> > +  return _get_ssp ();
> > +}
> > --
> > 2.35.1
> >
>
> It also fixed:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99744#c18
>
> Any comments on this patch?
>
> --
> H.J.
H.J. Lu March 16, 2022, 1:28 p.m. UTC | #3
On Tue, Mar 15, 2022 at 6:57 PM Hongtao Liu <crazylht@gmail.com> wrote:
>
> On Tue, Mar 15, 2022 at 10:40 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > On Mon, Mar 14, 2022 at 7:31 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> > >
> > > Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.
> > >
> > > gcc/
> > >
> > >         PR target/104890
> > >         * config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
> > >         pushing target("general-regs-only").
> > >
> > > gcc/testsuite/
> > >
> > >         PR target/104890
> > >         * gcc.target/i386/pr104890.c: New test.
> > > ---
> > >  gcc/config/i386/x86gprintrin.h           |  2 +-
> > >  gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
> > >  2 files changed, 12 insertions(+), 1 deletion(-)
> > >  create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c
> > >
> > > diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
> > > index 017ec299793..e0be01d5e78 100644
> > > --- a/gcc/config/i386/x86gprintrin.h
> > > +++ b/gcc/config/i386/x86gprintrin.h
> > > @@ -24,7 +24,7 @@
> > >  #ifndef _X86GPRINTRIN_H_INCLUDED
> > >  #define _X86GPRINTRIN_H_INCLUDED
> > >
> > > -#if defined __MMX__ || defined __SSE__
> > > +#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
> The patch LGTM.

I am checking it in.

> > >  #pragma GCC push_options
> > >  #pragma GCC target("general-regs-only")
> > >  #define __DISABLE_GENERAL_REGS_ONLY__
> > > diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
> > > new file mode 100644
> > > index 00000000000..cb430eef688
> > > --- /dev/null
> > > +++ b/gcc/testsuite/gcc.target/i386/pr104890.c
> > > @@ -0,0 +1,11 @@
> > > +/* { dg-do compile { target ia32 } } */
> > > +/* { dg-options "-O2 -mshstk -march=i686" } */
> > > +
> > > +#include <x86gprintrin.h>
> > > +
> > > +__attribute__((target ("general-regs-only")))
> > > +int
> > > +foo ()
> > > +{
> > > +  return _get_ssp ();
> > > +}
> > > --
> > > 2.35.1
> > >
> >
> > It also fixed:
> >
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99744#c18
> >
> > Any comments on this patch?
> >
> > --
> > H.J.
>
>
>
> --
> BR,
> Hongtao
Marc Poulhiès March 17, 2022, 10 a.m. UTC | #4
"H.J. Lu" <hjl.tools@gmail.com> writes:

Hello,

> I am checking it in.

Are you planning on also applying this patch in the gcc-11 branch?

Thanks,
Marc
H.J. Lu March 17, 2022, 3:05 p.m. UTC | #5
On Mon, Mar 14, 2022 at 7:31 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.
>
> gcc/
>
>         PR target/104890
>         * config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
>         pushing target("general-regs-only").
>
> gcc/testsuite/
>
>         PR target/104890
>         * gcc.target/i386/pr104890.c: New test.
> ---
>  gcc/config/i386/x86gprintrin.h           |  2 +-
>  gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
>  2 files changed, 12 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c
>
> diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
> index 017ec299793..e0be01d5e78 100644
> --- a/gcc/config/i386/x86gprintrin.h
> +++ b/gcc/config/i386/x86gprintrin.h
> @@ -24,7 +24,7 @@
>  #ifndef _X86GPRINTRIN_H_INCLUDED
>  #define _X86GPRINTRIN_H_INCLUDED
>
> -#if defined __MMX__ || defined __SSE__
> +#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
>  #pragma GCC push_options
>  #pragma GCC target("general-regs-only")
>  #define __DISABLE_GENERAL_REGS_ONLY__
> diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
> new file mode 100644
> index 00000000000..cb430eef688
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr104890.c
> @@ -0,0 +1,11 @@
> +/* { dg-do compile { target ia32 } } */
> +/* { dg-options "-O2 -mshstk -march=i686" } */
> +
> +#include <x86gprintrin.h>
> +
> +__attribute__((target ("general-regs-only")))
> +int
> +foo ()
> +{
> +  return _get_ssp ();
> +}
> --
> 2.35.1
>

OK to backport to GCC 11?

Thanks.
H.J. Lu March 22, 2022, 2:28 p.m. UTC | #6
On Thu, Mar 17, 2022 at 8:05 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Mon, Mar 14, 2022 at 7:31 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > Push target("general-regs-only") in <x86gprintrin.h> if x87 is enabled.
> >
> > gcc/
> >
> >         PR target/104890
> >         * config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
> >         pushing target("general-regs-only").
> >
> > gcc/testsuite/
> >
> >         PR target/104890
> >         * gcc.target/i386/pr104890.c: New test.
> > ---
> >  gcc/config/i386/x86gprintrin.h           |  2 +-
> >  gcc/testsuite/gcc.target/i386/pr104890.c | 11 +++++++++++
> >  2 files changed, 12 insertions(+), 1 deletion(-)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr104890.c
> >
> > diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
> > index 017ec299793..e0be01d5e78 100644
> > --- a/gcc/config/i386/x86gprintrin.h
> > +++ b/gcc/config/i386/x86gprintrin.h
> > @@ -24,7 +24,7 @@
> >  #ifndef _X86GPRINTRIN_H_INCLUDED
> >  #define _X86GPRINTRIN_H_INCLUDED
> >
> > -#if defined __MMX__ || defined __SSE__
> > +#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
> >  #pragma GCC push_options
> >  #pragma GCC target("general-regs-only")
> >  #define __DISABLE_GENERAL_REGS_ONLY__
> > diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
> > new file mode 100644
> > index 00000000000..cb430eef688
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr104890.c
> > @@ -0,0 +1,11 @@
> > +/* { dg-do compile { target ia32 } } */
> > +/* { dg-options "-O2 -mshstk -march=i686" } */
> > +
> > +#include <x86gprintrin.h>
> > +
> > +__attribute__((target ("general-regs-only")))
> > +int
> > +foo ()
> > +{
> > +  return _get_ssp ();
> > +}
> > --
> > 2.35.1
> >
>
> OK to backport to GCC 11?
>

I am backporting this to GCC 11.
diff mbox series

Patch

diff --git a/gcc/config/i386/x86gprintrin.h b/gcc/config/i386/x86gprintrin.h
index 017ec299793..e0be01d5e78 100644
--- a/gcc/config/i386/x86gprintrin.h
+++ b/gcc/config/i386/x86gprintrin.h
@@ -24,7 +24,7 @@ 
 #ifndef _X86GPRINTRIN_H_INCLUDED
 #define _X86GPRINTRIN_H_INCLUDED
 
-#if defined __MMX__ || defined __SSE__
+#if !defined _SOFT_FLOAT || defined __MMX__ || defined __SSE__
 #pragma GCC push_options
 #pragma GCC target("general-regs-only")
 #define __DISABLE_GENERAL_REGS_ONLY__
diff --git a/gcc/testsuite/gcc.target/i386/pr104890.c b/gcc/testsuite/gcc.target/i386/pr104890.c
new file mode 100644
index 00000000000..cb430eef688
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr104890.c
@@ -0,0 +1,11 @@ 
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "-O2 -mshstk -march=i686" } */
+
+#include <x86gprintrin.h>
+
+__attribute__((target ("general-regs-only")))
+int
+foo ()
+{
+  return _get_ssp ();
+}