https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65341
--- Comment #16 from Michael Meissner <meissner at gcc dot gnu.org> --- As I can see there are several issues/whatever. 1) Each of the _ARCH_PWR<n> is cumulative, so if you say -mcpu=power8 for instance, it defines _ARCH_PWR4, _ARCH_PWR5, _ARCH_PWR5X, _ARCH_PWR6, _ARCH_PWR7, and _ARCH_PWR8. Note, it does not define _ARCH_PWR6X, since those instructions only exist in the power6x, and are not in later versions of the power hardware. 2) If you had used a compiler that was configured using the --with-cpu=power8 option, it would have shown the same results, since _ARCH_PWR6 would have been defined. It was only if you use a compiler that was not configured using --with-cpu=<xxx>, would the code be assembled using the older form of the asm insns. I believe each of the 3 distributions use some form of --with-cpu=<xxx> in building their compiler. 3) Given that ISA 2.07 (i.e. power8) is officially the minimum baseline for 64-bit PowerPC little endian, perhaps the assembler should be modified to default to power8. Obviously if this change is desired, you need to raise it on the appropriate binutils forums. 4) Using .machine altivec as you've discovered is the wrong value for PowerPC 64 Little Endian Linux. It was the right value back in the days of the Apple G5, but it is not right for the current PowerPC 64LE environment.