From patchwork Tue Mar 6 13:03:51 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Georg-Johann Lay X-Patchwork-Id: 144936 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 444C2B6FA3 for ; Wed, 7 Mar 2012 00:04:18 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1331643859; h=Comment: DomainKey-Signature:Received:Received:Received:Received: Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:Sender:Delivered-To; bh=3+1HHOx gwSdbN5CODdt5DH8mS00=; b=cI+GBHb2fJ6rQ7ZNYnFnlNlMBs2I5UcqEysKCxo gsc/YuCwR6mgAAJEfsRhZZBCZAUXhZ7mwEFdiEfNX5S5rsI6Knvov24CYcsJ6b60 MyGGieaOZ2yHkOKBZ1M35cADMEb+I72T09KirT4pmwtbowMCrc2q8fY4zR60Y3L+ PHIs= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:X-RZG-AUTH:X-RZG-CLASS-ID:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=o6YT/Ravs8bRTPYfMTEIulMFRFxDnXbeU5/l5BifD3be63Uz+7OakZm5r0TJwm OpfP8bOq4x1DG2pLUNCkQ/w2NBJwrXi4oCkJ90A8W2bKzRAGZ6VOCQRAqF+RVA8o A6MDjRJJgbYEHHASswzRih2kuPwbdrx7eSDAigUMwRG6A=; Received: (qmail 29694 invoked by alias); 6 Mar 2012 13:04:14 -0000 Received: (qmail 29682 invoked by uid 22791); 6 Mar 2012 13:04:12 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL, BAYES_50, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mo-p00-ob.rzone.de (HELO mo-p00-ob.rzone.de) (81.169.146.160) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Mar 2012 13:03:58 +0000 X-RZG-AUTH: :LXoWVUeid/7A29J/hMvvT2k715jHQaJercGObUOFkj18odoYNahU4Q== X-RZG-CLASS-ID: mo00 Received: from [192.168.0.22] (business-188-111-022-002.static.arcor-ip.net [188.111.22.2]) by smtp.strato.de (jimi mo60) (RZmta 27.7 AUTH) with ESMTPA id x02e07o26CJVvn ; Tue, 6 Mar 2012 14:03:52 +0100 (MET) Message-ID: <4F560B37.5000709@gjlay.de> Date: Tue, 06 Mar 2012 14:03:51 +0100 From: Georg-Johann Lay User-Agent: Thunderbird 2.0.0.24 (X11/20100302) MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org CC: Denis Chertykov , Eric Weddington Subject: [Patch,AVR]: Fix PR52506 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org The problem is that RAMPD/X/Y/Z are restored in the wrong order in ISR epilogue. Ok for trunk? Johann PR target/52506 * gcc/config/avr/avr.c (expand_epilogue): Fix order of restoration to: RAMPZ, RAMPY, RAMPX, RAMPD. (expand_prologue): Only clear RAMPZ if it has effect on RAM-read. Index: gcc/config/avr/avr.c =================================================================== --- gcc/config/avr/avr.c (revision 184887) +++ gcc/config/avr/avr.c (working copy) @@ -1123,11 +1123,11 @@ expand_prologue (void) emit_push_sfr (rampy_rtx, false /* frame-related */, true /* clr */); } - if (AVR_HAVE_RAMPZ + if (AVR_HAVE_RAMPZ && TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)) { - emit_push_sfr (rampz_rtx, false /* frame-related */, true /* clr */); + emit_push_sfr (rampz_rtx, false /* frame-related */, AVR_HAVE_RAMPD); } } /* is_interrupt is_signal */ @@ -1347,12 +1347,12 @@ expand_epilogue (bool sibcall_p) /* Restore RAMPZ/Y/X/D using tmp_reg as scratch. The conditions to restore them must be tha same as in prologue. */ - if (AVR_HAVE_RAMPX - && TEST_HARD_REG_BIT (set, REG_X) - && TEST_HARD_REG_BIT (set, REG_X + 1)) + if (AVR_HAVE_RAMPZ + && TEST_HARD_REG_BIT (set, REG_Z) + && TEST_HARD_REG_BIT (set, REG_Z + 1)) { emit_pop_byte (TMP_REGNO); - emit_move_insn (rampx_rtx, tmp_reg_rtx); + emit_move_insn (rampz_rtx, tmp_reg_rtx); } if (AVR_HAVE_RAMPY @@ -1364,12 +1364,12 @@ expand_epilogue (bool sibcall_p) emit_move_insn (rampy_rtx, tmp_reg_rtx); } - if (AVR_HAVE_RAMPZ - && TEST_HARD_REG_BIT (set, REG_Z) - && TEST_HARD_REG_BIT (set, REG_Z + 1)) + if (AVR_HAVE_RAMPX + && TEST_HARD_REG_BIT (set, REG_X) + && TEST_HARD_REG_BIT (set, REG_X + 1)) { emit_pop_byte (TMP_REGNO); - emit_move_insn (rampz_rtx, tmp_reg_rtx); + emit_move_insn (rampx_rtx, tmp_reg_rtx); } if (AVR_HAVE_RAMPD)