https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102485
Peter Bergner <bergner at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amodra at gcc dot gnu.org, | |bergner at gcc dot gnu.org, | |dje at gcc dot gnu.org, | |meissner at gcc dot gnu.org, | |segher at gcc dot gnu.org, | |wschmidt at gcc dot gnu.org --- Comment #1 from Peter Bergner <bergner at gcc dot gnu.org> --- I agree it is GCC's job to emit a ".machine CPU" directive that allows the assembler to correctly assemble the code GCC generates. Your test case however uses inline asm and GCC does not know that you are using the mfppr32 mnemonic. The assembler code you write in an inline asm is basically a black box to the compiler. It is therefor up to the programmer to ensure that either the -mcpu=CPU GCC option that is being used (which emits".machine CPU" directive) is enough to assemble the mnemonics in the inline asm or you have to emit them in your inline asm. For the later, you can fix your test case like: bergner@pike:~$ cat mfppr32.c long f () { long ppr; asm volatile ("mfppr32 %0" : "=r"(ppr)); return ppr; } bergner@pike:~$ cat mfppr32-2.c long f () { long ppr; asm volatile (".machine push\n\ .machine power7\n\ mfppr32 %0\n\ .machine pop" : "=r"(ppr)); return ppr; } bergner@pike:~$ gcc -c mfppr32.c /tmp/ccSpp2V8.s: Assembler messages: /tmp/ccSpp2V8.s:19: Error: unrecognized opcode: `mfppr32' bergner@pike:~$ gcc -c mfppr32-2.c bergner@pike:~$ Therefore, I'm not sure there is anything for GCC to do here.