Macro expansion works differently on ASM and C files.
Neil Booth
neil@daikokuya.co.uk
Thu Aug 14 21:31:00 GMT 2003
gp@qnx.com wrote:-
> Hi. I have source with macros in it that use the "##" concatenation to
> construct assembly output. The macros are expanded differently based on
> whether the file has a ".c" extension vs a ".S", with identical content
> (actually a symlink to the same file foo.S --> foo.c).
>
> The simple test case is:
>
> #define FOO(a,b) b,$##a
> FOO (a, b)
> FOO ( a, b)
>
> As 'foo.c' both FOO macro calls are expanded to "b,$a". As 'foo.S' the second
> one is expanded to "b,$ a". As you can see, I have a simple workaround, but
> it does look like a bug to me.
No, asm is different in several respects. We don't permit dollars in
identifiers by default, for example, whereas we might with C files.
> The actual macro being used is:
>
> #define SAVE_ONE(reg,bias) mfc0 t0,$##reg; nop; sw t0,(reg*4)+bias(a0)
> ...
> SAVE_ONE ( 0, 0)
>
> This is a problem as the assembler chokes on "mfc0 t0,$ 0;" where "mfc0
> t0,$0;" is fine.
Try -fdollars-in-identifiers?
Neil.
More information about the Gcc
mailing list