Thanks, Micah, for your answer.
This was one of my guess, but unfortunately, I never observed in the generated ISA that macros marked as outline were turned into functions (unless the normal behaviour of a function is to be inlined...).
Moreover, just saying "it is converted into a function" is a little short for a semantic.
Since macro can have arguments (unlimited count?), with lexical scope (if I understood corretly the - very limited - documentation) and I didn't find in the documentation a description of some argument passing conventions (using specific registers?), nor a description of a stack mechanism, what arises with multiple outlined macro calls, possibly nested, with a high argument number??? Will this clobber temp registers?
Of course, if everything stays inlined, as it seems to be in practice, then the problem disappears.
Regarding macros not working, I got very different results just by changing the name of some registers in a way that shouldn't affect the result. Basically I used registers (supposed to be local according to the doc) inside the macro body with the same names as the one passed as macro arguments and also used by the caller (a classical case of lexical capture in most languages with C-like macros). I changed the names in order to avoid any conflicts and I got back what I expected.
This is a large file I can't send you. I will try to isolate it in a limited example.
Best regards,
Antoine