diff mbox

Fix pr67963

Message ID CAE0nxxhacnNEGpHmZn5tFLGWZ9AJ+iBFwVBAmUJ+8EHxvpGn+w@mail.gmail.com
State New
Headers show

Commit Message

Yulia Koval Oct. 14, 2015, 3:08 p.m. UTC
Hi,

This patch fixes the issue:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67963

  gcc/config/i386/i386.c (ix86_option_override_internal) Disable
    80387 mask if lakemont target is set.

Ok for trunk?

Yulia

Comments

H.J. Lu Oct. 14, 2015, 3:15 p.m. UTC | #1
On Wed, Oct 14, 2015 at 8:08 AM, Yulia Koval <vaalfreja@gmail.com> wrote:
> Hi,
>
> This patch fixes the issue:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67963
>
>   gcc/config/i386/i386.c (ix86_option_override_internal) Disable
>     80387 mask if lakemont target is set.
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 4c25c9e..db722aa 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -4943,6 +4943,12 @@ ix86_option_override_internal (bool main_args_p,
>   break;
>        }
>
> +  if (!strcmp (opts->x_ix86_arch_string, "lakemont"))
> +    {
> +      opts->x_target_flags &= ~MASK_80387;
> +      opts_set->x_target_flags |= MASK_80387;
> +    }
> +
>    if (TARGET_X32 && (opts->x_ix86_isa_flags & OPTION_MASK_ISA_MPX))
>      error ("Intel MPX does not support x32");
>
> Ok for trunk?

We should add a bit to "struct pta" to indicate availability of
80387 ISA and turn it off for lakemount if 90387 ISA hasn't be
turned on explicitly.

We also need some testcases.
Uros Bizjak Oct. 15, 2015, 11:45 a.m. UTC | #2
On Wed, Oct 14, 2015 at 5:08 PM, Yulia Koval <vaalfreja@gmail.com> wrote:
> Hi,
>
> This patch fixes the issue:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67963
>
>   gcc/config/i386/i386.c (ix86_option_override_internal) Disable
>     80387 mask if lakemont target is set.
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 4c25c9e..db722aa 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -4943,6 +4943,12 @@ ix86_option_override_internal (bool main_args_p,
>   break;
>        }
>
> +  if (!strcmp (opts->x_ix86_arch_string, "lakemont"))
> +    {
> +      opts->x_target_flags &= ~MASK_80387;
> +      opts_set->x_target_flags |= MASK_80387;
> +    }
> +
>    if (TARGET_X32 && (opts->x_ix86_isa_flags & OPTION_MASK_ISA_MPX))
>      error ("Intel MPX does not support x32");
>
> Ok for trunk?

The problem is in TARGET_SUBTARGET{32,64}_DEFAULT, that will override
set target flags, unless relevant bit of opts_set->x_target_flags is
set. However, we can't just set x_target_flag, because
__attribute__((target("arch=...."))) won't work. Unfortunately, my
proposed patch in the PR violates this last requirement.

This can probably be solved by adding local "x_target_flags_mask" and
use it after TARGET_SUBTARGET processing.

Uros.
diff mbox

Patch

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 4c25c9e..db722aa 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4943,6 +4943,12 @@  ix86_option_override_internal (bool main_args_p,
  break;
       }

+  if (!strcmp (opts->x_ix86_arch_string, "lakemont"))
+    {
+      opts->x_target_flags &= ~MASK_80387;
+      opts_set->x_target_flags |= MASK_80387;
+    }
+
   if (TARGET_X32 && (opts->x_ix86_isa_flags & OPTION_MASK_ISA_MPX))
     error ("Intel MPX does not support x32");