assumption was that debug information has to be stored into the final executable, thus making it bigger.
call --> 4 cyclesret ---> 4 cycles(4 + 4) * 5 / 16 = 2.5 microseconds.
[Copious data redacted.]My suggestion still is: don't try to outsmart the compiler. Write simple, readable code.
Registers are only used when available which depends entirely on what else the CPU is doing at the time, at all other times the stack is used, so you should not rely on the use of registers, but you should factor the stack into your operation as this is the worst case senario.
Function call conventions:Arguments - allocated left to right, r25 to r8. All arguments are aligned to start in even-numbered registers (odd-sized arguments, including char, have one free register above them). This allows making better use of the movw instruction on the enhanced core.If too many, those that don't fit are passed on the stack.
If too many, those that don't fit are passed on the stack.
The evidence is in numerous books. My experience working with assembler dates back to the early 80's with 6502 and Z80. You only have a limited number of registers, when you run out of registers, this doesn't mean you can't call any functions, it simply switches to the stack. Go read some books or search online.Like-wise, if you nest to many function calls you will run out of stack space and encounter a stack overflow.QuoteIf too many, those that don't fit are passed on the stack.