From patchwork Fri Apr 1 22:01:26 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Georg-Johann Lay X-Patchwork-Id: 89355 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 B0425100AC6 for ; Sat, 2 Apr 2011 09:06:27 +1100 (EST) Received: (qmail 28260 invoked by alias); 1 Apr 2011 22:06:26 -0000 Received: (qmail 28251 invoked by uid 22791); 1 Apr 2011 22:06:25 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE, TW_RJ X-Spam-Check-By: sourceware.org Received: from mo-p00-ob.rzone.de (HELO mo-p00-ob.rzone.de) (81.169.146.161) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 01 Apr 2011 22:06:20 +0000 X-RZG-AUTH: :LXoWVUeid/7A29J/hMvvT2k715jHQaJercGOZE+TiTS5oCO0h49I8BA= X-RZG-CLASS-ID: mo00 Received: from [192.168.2.100] (dslb-084-058-209-173.pools.arcor-ip.net [84.58.209.173]) by post.strato.de (mrclete mo29) (RZmta 25.8) with ESMTPA id u06f0cn31LRrXY ; Sat, 2 Apr 2011 00:06:02 +0200 (MEST) Message-ID: <4D964B36.3050008@gjlay.de> Date: Sat, 02 Apr 2011 00:01:26 +0200 From: Georg-Johann Lay User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) MIME-Version: 1.0 To: Georg-Johann Lay CC: gcc-patches@gcc.gnu.org, Denis Chertykov , Anatoly Sokolov , Eric Weddington Subject: Re: [Patch,AVR]: Fix PR45263 References: <4D96175D.8080203@gjlay.de> In-Reply-To: <4D96175D.8080203@gjlay.de> 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 This is a better fix that does not need push/pop and does not increase numer of instructions. r16 takes the role of r20, and the value formerly in r16, i.e. hh8(__dtors_end resp. __ctors_start) is recreated as needed. 2011-04-02 Georg-Johann Lay PR target/45263 * config/avr/libgcc.S (__do_global_ctors, __do_global_dtors): Don't use r20 around calls of __tablejump_elpm__ Index: libgcc.S =================================================================== --- libgcc.S (Revision 171857) +++ libgcc.S (Arbeitskopie) @@ -791,22 +791,22 @@ #if defined(__AVR_HAVE_RAMPZ__) __do_global_ctors: ldi r17, hi8(__ctors_start) - ldi r16, hh8(__ctors_start) ldi r28, lo8(__ctors_end) ldi r29, hi8(__ctors_end) - ldi r20, hh8(__ctors_end) + ldi r16, hh8(__ctors_end) rjmp .L__do_global_ctors_start .L__do_global_ctors_loop: sbiw r28, 2 - sbc r20, __zero_reg__ + sbc r16, __zero_reg__ mov_h r31, r29 mov_l r30, r28 - out __RAMPZ__, r20 + out __RAMPZ__, r16 XCALL __tablejump_elpm__ .L__do_global_ctors_start: cpi r28, lo8(__ctors_start) cpc r29, r17 - cpc r20, r16 + ldi r24, hh8(__ctors_start) + cpc r16, r24 brne .L__do_global_ctors_loop #else __do_global_ctors: @@ -832,22 +832,22 @@ #if defined(__AVR_HAVE_RAMPZ__) __do_global_dtors: ldi r17, hi8(__dtors_end) - ldi r16, hh8(__dtors_end) ldi r28, lo8(__dtors_start) ldi r29, hi8(__dtors_start) - ldi r20, hh8(__dtors_start) + ldi r16, hh8(__dtors_start) rjmp .L__do_global_dtors_start .L__do_global_dtors_loop: sbiw r28, 2 - sbc r20, __zero_reg__ + sbc r16, __zero_reg__ mov_h r31, r29 mov_l r30, r28 - out __RAMPZ__, r20 + out __RAMPZ__, r16 XCALL __tablejump_elpm__ .L__do_global_dtors_start: cpi r28, lo8(__dtors_end) cpc r29, r17 - cpc r20, r16 + ldi r24, hh8(__dtors_end) + cpc r16, r24 brne .L__do_global_dtors_loop #else __do_global_dtors: