Why do you need to use a different base register then a7?
Are you calling your functions with registers on the stack? In this case it may be a bit uncomfortable.
Code:
STRUCTURE bla,0
WORD bla_bum
...
ALIGNLONG
LABEL bla_SIZEOF
_func movem.l rl,-(a7)
moveq #bla_SIZEOF/4-1,dx
.clr clr.l -(a7)
dbf dx,.clr
move #33,(bla_bum,a7)
add.w #bla_SIZEOF,a7
movem.l (a7)+,rl
rts
is shorter than link/unlk + clear