Previous one didn't work, because I mixed up a0 and a1 pointers when subtracting.
But that gave me a new idea: copy pointer to d0 and complement the difference instead of addq, saving a1 register (+stack operations) and a move-instruction:
strlen: move.l %a0,-(%sp)
movl %a0, %d0 ;# d0 = a0;
slenloop: tst.b (%a0)+ ;# test *a0, post incr
bneb slenloop ;# loop if non-zero
sub.l %a0, %d0 ;# d0 = d0 - a0;
not.l %d0 ;# d0 = ~d0;
move.l (%sp)+,%a0
rts ;# d0 is the return value