Message ID | CAE0nxxhacnNEGpHmZn5tFLGWZ9AJ+iBFwVBAmUJ+8EHxvpGn+w@mail.gmail.com |
---|---|
State | New |
Headers | show |
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.
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 --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");