Hi all,
I am working on an ATMEGA8. Since my code was getting close to 8K, I thought I
would tweak the code. I have a function listed below
void pulse_en (void)
{
set_EN; // Set EN
_delay_loop_1 (255);
clr_EN; // clear EN
_delay_loop_1 (255);
}
Since the delay after the "clr" instruction had no meaning, I commented the
line and compiled the code hoping I would save a couple of bytes. But to my
surprise the code size increased to 7172 bytes compared to 7148 bytes with the
function call in place. I looked at the list file and found that the function
gets shifted to a different location with and without the function call. Here
are the list file snippets
With the call in place:
351 pulse_en:
352 .LFB23:
353 .LM47:
354 /* prologue: function */
355 /* frame size = 0 */
356 .LM48:
357 0128 C29A sbi 56-32,2
358 .LBB80:
359 .LBB81:
360 .LM49:
361 012a 8FEF ldi r24,lo8(-1)
362 012c 982F mov r25,r24
363 .LVL17:
364 /* #APP */
365 ; 83
"c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h" 1
366 012e 9A95 1: dec r25
367 0130 01F4 brne 1b
368 ; 0 "" 2
369 /* #NOAPP */
370 .LBE81:
371 .LBE80:
372 .LM50:
373 0132 C298 cbi 56-32,2
374 .LBB82:
375 .LBB83:
376 .LM51:
377 /* #APP */
378 ; 83
"c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h" 1
379 0134 8A95 1: dec r24
380 0136 01F4 brne 1b
381 ; 0 "" 2
382 .LVL18:
383 /* epilogue start */
384 /* #NOAPP */
385 .LBE83:
386 .LBE82:
387 .LM52:
388 0138 0895 ret
Without the call:
621 .LFE21:
623 .globalpulse_en
625 pulse_en:
626 .LFB23:
627 .LM87:
628 /* prologue: function */
629 /* frame size = 0 */
630 .LM88:
631 01c2 C29A sbi 56-32,2
632 .LBB146:
633 .LBB147:
634 .LM89:
635 01c4 8FEF ldi r24,lo8(-1)
636 .LVL36:
637 /* #APP */
638 ; 83
"c:/winavr-20100110/lib/gcc/../../avr/include/util/delay_basic.h" 1
639 01c6 8A95 1: dec r24
640 01c8 01F4 brne 1b
641 ; 0 "" 2
642 /* #NOAPP */
643 .LBE147:
644 .LBE146:
645 .LM90:
646 01ca C298 cbi 56-32,2
647 /* epilogue start */
648 .LM91:
649 01cc 0895 ret
Will some one please let me know why this is happening? If such is the case,
perhaps extra code is being generated for other function too.
I am using: avr-gcc (WinAVR 20100110) 4.3.3
Thank you for your time.
Regards,
Nayani
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list