Georg-Johann Lay writes: > On 02.08.2016 06:50, Senthil Kumar Selvaraj wrote: >> >> Denis Chertykov writes: >> >>> 2016-08-01 15:17 GMT+03:00 Georg-Johann Lay <a...@gjlay.de>: >>>> Problem with -fcaller-saves is that there are situations where it triggers >>>> an expensive frame just to store a variable around a function call even >>>> though there are plenty of call-saved registers. >>>> >>>> Example: >>>> >>>> typedef __UINT8_TYPE__ uint8_t; >>>> >>>> extern uint8_t uart0_getc (void); >>>> >>>> void foo (uint8_t *buffer, uint8_t cnt) >>>> { >>>> while (--cnt) >>>> { >>>> *buffer++ = uart0_getc(); >>>> } >>>> } >>>> >>>> $ avr-gcc -Os -S -dp -mmcu=atmega8 loop-buf.c >>>> >>>> $ avr-gcc gcc -B$TV -Os -c -save-temps -dp -mmcu=atmega8 loop-buf.c && >>>> avr-size loop-buf.o >>>> text data bss dec hex filename >>>> 50 0 0 50 32 loop-buf.o >>>> >>>> $ avr-gcc -Os -c -save-temps -dp -mmcu=atmega8 loop-buf.c -fno-caller-saves >>>> && avr-size loop-buf.o >>>> text data bss dec hex filename >>>> 32 0 0 32 20 loop-buf.o >>>> >>>> I actually came never across a situation where -fcaller-saves improved the >>>> code performance, hence this patch proposes to switch off -fcaller-saved >>>> per >>>> default. >> >> Like you mentioned in the bug report, would fixing the costs be a better >> way to fix this rather than a blanket disabling of the option? > > What costs specifically? Where could the costs of different epilogues / > prologues be described?
I don't know either - I'd have to dig in to find that out too. Let me check that out. Regards Senthil