Well, you say you don't want to use an argument....so remove the __ARGS and replace it with a number (stack size).
However! :
My macros can be used without arguments too. It will then default to 1024 stack size.
So it either takes 0, 1 or 2 arguments. The arguments being TOC (also place r2 on the stack) and stack size.
.macro prolog stacksize, data
.if \data = "TOC"
stw r2,20(r1)
.endif
mflr r0
stw r0,8(r1)
mfcr r0
stw r0,4(r1)
stw r13,-4(r1)
subi r13,r1,4
.if \stacksize = ""
stwu r1,-1024(r1)
.else
stwu r1,-(\stacksize+60)(r1)
.endif
.endm
And:
.macro epilog data
lwz r1,0(r1)
lwz r13,-4(r1)
lwz r0,8(r1)
mtlr r0
lwz r0,4(r1)
mtcr r0
.if (\data = "TOC")
lwz r2,20(r1)
blr
.endif
.endm
This worked last time I checked. In the past various VASM versions would error on generic arguments like \1 and \2. Haven't tested these in a while.
The 56 or 60 is for room for the volatile registers r3-r12 and some more stuff.
I see in your example lr is saved to 20(r1) but maybe that is SysV ABI which is quite different from the one used in WarpOS.