avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [avr-gcc-list] BUG: GCC use don't saved registers in ISR with -O3opt


From: Weddington, Eric
Subject: RE: [avr-gcc-list] BUG: GCC use don't saved registers in ISR with -O3optimization
Date: Mon, 2 Jun 2008 11:15:09 -0600

 

> -----Original Message-----
> From: 
> address@hidden 
> [mailto:address@hidden
> org] On Behalf Of Anatoly Sokolov
> Sent: Monday, June 02, 2008 12:19 AM
> To: address@hidden
> Subject: [avr-gcc-list] BUG: GCC use don't saved registers in 
> ISR with -O3optimization
> 
> Hello.
> 
> Testcase:
> #include <avr/io.h>
> #include <avr/interrupt.h>
> 
> volatile unsigned char   UART_RxChar;
> volatile unsigned char   UART_ReceivedChar;
> 
> SIGNAL(SIG_USART_RECV)      
> {
>     /* Indicate that the UART has received a character */
>     UART_ReceivedChar = 1;
>     /* Store received character */
>     UART_RxChar = UDR;
> }
> 
> Request: use -frename-registers optimization, enabled on -O3.
> 
> Result code:
> .global __vector_13
>  .type __vector_13, @function
> __vector_13:
> .LFB2:
> .LM1:
>  push __zero_reg__
>  push r0
>  in r0,__SREG__
>  push r0
>  clr __zero_reg__
>  push r24
> /* prologue: Signal */
> /* frame size = 0 */
> .LM2:
>  ldi r26,lo8(1)
>  sts UART_ReceivedChar,r26
> .LM3:
>  lds r24,198
>  sts UART_RxChar,r24
> /* epilogue start */
> .LM4:
>  pop r24
>  pop r0
>  out __SREG__,r0
>  pop r0
>  pop __zero_reg__
>  reti
> 
> R26 register used in ISR but don't saved/restored.
> 
> Workaround: Don't use '-frename-registers' optimization.  
> Disable 'frename-registers' 
> optimization with '-fno-rename-registers' switch when used -O3.
> 
> Bug fix: need define HARD_REGNO_RENAME_OK macro in config/avr.h

Hi Anatoly,

Do you have a GCC bug report for this yet? I could not find one...

Eric




reply via email to

[Prev in Thread] Current Thread [Next in Thread]