From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12823 invoked by alias); 3 Jan 2013 12:49:01 -0000 Received: (qmail 12808 invoked by uid 22791); 3 Jan 2013 12:48:59 -0000 X-SWARE-Spam-Status: No, hits=-6.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 03 Jan 2013 12:48:53 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r03CmqUI005780 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 3 Jan 2013 07:48:53 -0500 Received: from Cadeux.redhat.com (vpn1-4-29.ams2.redhat.com [10.36.4.29]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r03CmdSJ032679 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 3 Jan 2013 07:48:48 -0500 From: Nick Clifton To: dj@redhat.com Cc: gcc-patches@gcc.gnu.org Subject: RFA: RL78: Always select register bank 0 at the start of an ISR Date: Thu, 03 Jan 2013 12:49:00 -0000 Message-ID: <878v8a1llw.fsf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-01/txt/msg00110.txt.bz2 Hi DJ, Since interrupts can happen at any time, it is possible for a ISR to be called when register bank 0 is not the currently selected bank. Hence the prologue for an interrupt handler should always select bank 0 before saving any registers. The patch below makes sure that this happens. No regressions with a rl78-elf toolchain. OK to apply ? Cheers Nick gcc/ChangeLog 2013-01-03 Nick Clifton * config/rl78/rl78.c (rl78_expand_prologue): Always select register bank 0 at the start of an interrupt handler. Index: gcc/config/rl78/rl78.c =================================================================== --- gcc/config/rl78/rl78.c (revision 194833) +++ gcc/config/rl78/rl78.c (working copy) @@ -839,6 +839,9 @@ if (flag_stack_usage_info) current_function_static_stack_size = cfun->machine->framesize; + if (is_interrupt_func (cfun->decl)) + emit_insn (gen_sel_rb (GEN_INT (0))); + for (i = 0; i < 16; i++) if (cfun->machine->need_to_push [i]) {