From patchwork Mon Feb 28 19:13:57 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 84860 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 49E9DB7130 for ; Tue, 1 Mar 2011 06:14:07 +1100 (EST) Received: (qmail 32436 invoked by alias); 28 Feb 2011 19:14:05 -0000 Received: (qmail 32426 invoked by uid 22791); 28 Feb 2011 19:14:03 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL, BAYES_00, NO_DNS_FOR_FROM, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mga03.intel.com (HELO mga03.intel.com) (143.182.124.21) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 28 Feb 2011 19:13:59 +0000 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 28 Feb 2011 11:13:57 -0800 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([10.3.194.135]) by azsmga001.ch.intel.com with ESMTP; 28 Feb 2011 11:13:57 -0800 Received: by gnu-6.sc.intel.com (Postfix, from userid 500) id 17EC618099D; Mon, 28 Feb 2011 11:13:57 -0800 (PST) Date: Mon, 28 Feb 2011 11:13:57 -0800 From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Subject: [x32] PATCH: PR target/47926: [x32] nested function pointer doesn't work Message-ID: <20110228191356.GA30709@intel.com> Reply-To: "H.J. Lu" MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) 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 Hi, We should always use ptr_mode on on address for trampoline. Checked into x32 branch. H.J. diff --git a/gcc/ChangeLog.x32 b/gcc/ChangeLog.x32 index a7547677..df35e6f 100644 --- a/gcc/ChangeLog.x32 +++ b/gcc/ChangeLog.x32 @@ -1,3 +1,9 @@ +2011-02-28 H.J. Lu + + PR target/47926 + * config/i386/i386.c (ix86_trampoline_init): Always use ptr_mode + on address. + 2011-02-25 H.J. Lu PR target/47715 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7b42577..39b638c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -23408,7 +23408,10 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) mem = adjust_address (m_tramp, HImode, offset); emit_move_insn (mem, gen_int_mode (0xbb49, HImode)); - mem = adjust_address (m_tramp, DImode, offset + 2); + mem = adjust_address (m_tramp, ptr_mode, offset + 2); + if (GET_MODE (fnaddr) != ptr_mode) + fnaddr = simplify_gen_subreg (ptr_mode, fnaddr, + GET_MODE (fnaddr), 0); emit_move_insn (mem, fnaddr); offset += 10; } @@ -23417,7 +23420,7 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) mem = adjust_address (m_tramp, HImode, offset); emit_move_insn (mem, gen_int_mode (0xba49, HImode)); - mem = adjust_address (m_tramp, DImode, offset + 2); + mem = adjust_address (m_tramp, ptr_mode, offset + 2); emit_move_insn (mem, chain_value); offset += 10;