From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25510 invoked by alias); 2 Jun 2008 17:56:42 -0000 Received: (qmail 25442 invoked by uid 48); 2 Jun 2008 17:56:00 -0000 Date: Mon, 02 Jun 2008 17:56:00 -0000 Subject: [Bug target/36424] New: avr-gcc use don't saved registers in ISR with -O3 ('-frename-registers' ) optimization X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "aesok at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-06/txt/msg00076.txt.bz2 Testcase: #include #include 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. To fix bug, need define HARD_REGNO_RENAME_OK macro in config/avr.h Anatoly. -- Summary: avr-gcc use don't saved registers in ISR with -O3 ('- frename-registers' ) optimization Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: aesok at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36424