I am trying to pass a blank value to a macro funtion in GNU Assembly on x64, this function is supposed to add three value togather or just two according to if the first argument is blank, e.g.,
.macro foo1 t0, t1, t2
.ifnb t0
add \t0, \t1
.endif
add \t1, \t2
.endm
foo2:
foo1 , %rax, %rbx
foo1 %rax, %rbx, %rcx
But when I complie the above code, the gcc said expecting operand before ','; got nothing because I call foo1 use the folloing format foo1 , %rax, %rbx.
So I am confused about how to use .ifnb pseudo-op, and how to pass a blank argument to a macro like foo1.
I tried to search in google, but I got few things about gnu assembly blank value. https://sourceware.org/binutils/docs/as/If.html
I also read GAS official docs but it also not mention how to use .ifnb and no blank argument example was given for .macro. https://sourceware.org/binutils/docs/as/Macro.html
The correct syntax for
.ifnbis as follows:You are getting a confusing error message pointing to the line of macro invocation, because it seem to be generated after the macro expansion to
add , %raxbut still refer to the line in the original code.