https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101865
--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> --- The current code reads if ((flags & OPTION_MASK_DIRECT_MOVE) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8"); if ((flags & OPTION_MASK_MODULO) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR9"); if ((flags & OPTION_MASK_POWER10) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR10"); Only the p10 one here is (maybe?) correct, all the other defines depend on flags that can be (directly or indirectly) disabled. This is not limited to just these three, of course. The reason this showed up for p8 is that it shows up with a reasonable choice of flags.