There are things like compiling a tail call as JMP func_addr.
Would you not have to use a jump instead of call for it to be a tail call at all- ie otherwise a new frame is created on each call
Yes, I think the most common is a tail call. There also of course can be several ret's from a single function.
Would you not have to use a jump instead of call for it to be a tail call at all- ie otherwise a new frame is created on each call