https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118843
--- Comment #2 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- We have if (TARGET_HARD_FLOAT && ISA_HAS_FRECIPE) builtin_define ("__loongarch_frecipe"); where the logic seems correct. But __loongarch_frecipe is also in la_evo_macro_name and it can get defined by: for (int i = 0; i < N_EVO_FEATURES; i++) if (la_target.isa.evolution & la_evo_feature_masks[i]) { builtin_define (la_evo_macro_name[i]); ... ... Maybe we can just do if (!TARGET_HARD_FLOAT) cpp_undef ("__loongarch_frecipe"); after the loop above (and remove the useless if block on the top).