On Thu, Nov 16, 2017 at 08:46:08AM -0800, Sami Tolvanen wrote:
On Thu, Nov 16, 2017 at 07:56:50AM -0600, Segher Boessenkool wrote:
quoted
The compiler is fine, the assembler is fine (and the linker has
nothing to do with it). Your code is not fine.
Would you care to elaborate? The current code assumes that macros are
visible in other inline assembly blocks, and LLVM developers seem to
feel this isn't correct behavior. This patch fixes the current code so
it works with both assemblers.
If you say e.g.
void f(void)
{
asm(".macro something\n\t.endm");
}
there is nothing that prevents the compiler from emitting this more
than once. Expecting things to be emitted in whatever order is a bad
idea, too.
The thing with .purgem can work. Inelegant, sure, but it can work :-)
Just make sure you do the macro define, the code that uses it, and the
undefine, all in the same inline asm statement.
Segher