On Wed, Aug 8, 2012 at 1:31 PM, <ganesh.gopalasubraman...@amd.com> wrote: > Hello, > > Bdver2 cpu supports both fma and fma4 instructions. > Previous to patch, option "-mno-xop" removes "-mfma4". > Similarly, option "-mno-fma4" removes "-mxop".
Eh? Why's that? I think we should disentangle -mxop and -mfma4 instead. Otherwise, what does -mno-fma4 -mxop do? (it should enable both xop and fma4!) what should -mfma4 -mno-xop do (it should disable both xop and fma4!). All this is just confusing to the user, even if in AMD documents XOP includes FMA4. Richard. > So, the patch conditionally disables "-mfma" or "-mfma4". > Enabling "-mxop" is done by also checking "-mfma". > > Ok for trunk? > > Regards > Ganesh > > 2012-08-08 Ganesh Gopalasubramanian <ganesh.gopalasubraman...@amd.com> > > * common/config/i386/i386-common.c (ix86_handle_option): Reset > fma flag after checking fma4. Reset fma4 flag after checking fma. > Set xop flag after checking fma flags. > > Index: gcc/common/config/i386/i386-common.c > =================================================================== > --- gcc/common/config/i386/i386-common.c (revision 189996) > +++ gcc/common/config/i386/i386-common.c (working copy) > @@ -310,8 +310,16 @@ > } > else > { > - opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET; > - opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET; > + if (opts->x_ix86_isa_flags & OPTION_MASK_ISA_FMA4) > + { > + opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA ; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA; > + } > + else > + { > + opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET; > + } > } > return true; > > @@ -359,16 +367,32 @@ > } > else > { > - opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET; > - opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET; > + if (opts->x_ix86_isa_flags & OPTION_MASK_ISA_FMA) > + { > + opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4 ; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4; > + } > + else > + { > + opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET; > + } > } > return true; > > case OPT_mxop: > if (value) > { > - opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET; > - opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET; > + if (opts->x_ix86_isa_flags & OPTION_MASK_ISA_FMA) > + { > + opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP ; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP; > + } > + else > + { > + opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET; > + } > } > else > { >