Hello, Bdver2 cpu supports both fma and fma4 instructions. Previous to patch, option "-mno-xop" removes "-mfma4". Similarly, option "-mno-fma4" removes "-mxop".
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 {