On Wed, Oct 14, 2015 at 5:08 PM, Yulia Koval <vaalfr...@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.