From patchwork Fri Oct 22 19:57:25 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: DJ Delorie X-Patchwork-Id: 68950 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 5A170B6EE8 for ; Sat, 23 Oct 2010 06:57:40 +1100 (EST) Received: (qmail 24879 invoked by alias); 22 Oct 2010 19:57:36 -0000 Received: (qmail 24871 invoked by uid 22791); 22 Oct 2010 19:57:35 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL, BAYES_00, MAY_BE_FORGED, 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; Fri, 22 Oct 2010 19:57:29 +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.13.8/8.13.8) with ESMTP id o9MJvS0h006882 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 22 Oct 2010 15:57:28 -0400 Received: from greed.delorie.com ([10.3.112.3]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o9MJvQfM006508 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 22 Oct 2010 15:57:27 -0400 Received: from greed.delorie.com (greed.delorie.com [127.0.0.1] (may be forged)) by greed.delorie.com (8.14.3/8.14.3) with ESMTP id o9MJvPGc009765 for ; Fri, 22 Oct 2010 15:57:25 -0400 Received: (from dj@localhost) by greed.delorie.com (8.14.3/8.14.3/Submit) id o9MJvPaQ009762; Fri, 22 Oct 2010 15:57:25 -0400 Date: Fri, 22 Oct 2010 15:57:25 -0400 Message-Id: <201010221957.o9MJvPaQ009762@greed.delorie.com> From: DJ Delorie To: gcc-patches@gcc.gnu.org Subject: [m32c] make m32c_jsri16 reentrant 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 Applied. 2010-10-22 DJ Delorie * config/m32c/m32c-lib1.S (m32c_jsri16): Make reentrant. Index: config/m32c/m32c-lib1.S =================================================================== --- config/m32c/m32c-lib1.S (revision 165857) +++ config/m32c/m32c-lib1.S (working copy) @@ -201,23 +201,31 @@ cmpsi_gt: cmpsi_lt: mov.w #0,r0 exitd #endif #ifdef L__m32c_jsri16 - .data -m32c_jsri_addr: - .byte 0, 0, 0 -m32c_jsri_ret: - .byte 0, 0, 0 - .text +#ifdef A16 .global m32c_jsri16 m32c_jsri16: - pop.w m32c_jsri_ret - pop.b m32c_jsri_ret+2 - pop.w m32c_jsri_addr - push.b m32c_jsri_ret+2 - push.w m32c_jsri_ret - jmpi.a m32c_jsri_addr + add.w #-1, sp + + /* Read the address (16 bits) and return address (24 bits) off + the stack. */ + mov.w 4[sp], r0 + mov.w 1[sp], r3 + mov.b 3[sp], a0 /* This zero-extends, so the high byte has + zero in it. */ + + /* Write the return address, then new address, to the stack. */ + mov.w a0, 1[sp] /* Just to get the zero in 2[sp]. */ + mov.w r0, 0[sp] + mov.w r3, 3[sp] + mov.b a0, 5[sp] + + /* This "returns" to the target address, leaving the pending + return address on the stack. */ + rts +#endif #endif