From patchwork Sat Mar 12 15:45:36 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: 86523 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 91A91B6EEE for ; Sun, 13 Mar 2011 02:45:44 +1100 (EST) Received: (qmail 5573 invoked by alias); 12 Mar 2011 15:45:42 -0000 Received: (qmail 5558 invoked by uid 22791); 12 Mar 2011 15:45:42 -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 mga02.intel.com (HELO mga02.intel.com) (134.134.136.20) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 12 Mar 2011 15:45:38 +0000 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 12 Mar 2011 07:45:37 -0800 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([10.3.194.135]) by orsmga002.jf.intel.com with ESMTP; 12 Mar 2011 07:45:37 -0800 Received: by gnu-6.sc.intel.com (Postfix, from userid 500) id CB4F1180DDE; Sat, 12 Mar 2011 07:45:36 -0800 (PST) Date: Sat, 12 Mar 2011 07:45:36 -0800 From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Subject: [x32] PATCH: Don't generate byte 0x66 in TLS GD for TARGET_X32 Message-ID: <20110312154536.GA4034@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, For x32, pointers are 32bit. It uses movl %fs:0, %eax instead of movq %fs:0, %rax to load TCB pointer. I checked in this patch to avoid byte 0x66 in TLS GD for TARGET_X32. H.J. --- From 8c92f0d4860fd2693af864d87804aaee843f2680 Mon Sep 17 00:00:00 2001 From: H.J. Lu Date: Sat, 12 Mar 2011 05:53:03 -0800 Subject: [PATCH 5/5] Don't generate byte 0x66 in TLS GD for TARGET_X32. --- gcc/ChangeLog.x32 | 5 +++++ gcc/config/i386/i386.md | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog.x32 b/gcc/ChangeLog.x32 index 5ecea15..b85956c 100644 --- a/gcc/ChangeLog.x32 +++ b/gcc/ChangeLog.x32 @@ -1,3 +1,8 @@ +2011-03-12 H.J. Lu + + * config/i386/i386.md (*tls_global_dynamic_64): Don't generate + byte 0x66 before lea for TARGET_X32. + 2011-03-11 H.J. Lu PR target/48084 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 8208491..89c0455 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -12595,9 +12595,15 @@ (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")] UNSPEC_TLS_GD)] "TARGET_64BIT" - { return ASM_BYTE "0x66\n\tlea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; } +{ + if (TARGET_X32) + return "lea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; + else + return ASM_BYTE "0x66\n\tlea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; +} [(set_attr "type" "multi") - (set_attr "length" "16")]) + (set (attr "length") + (symbol_ref "TARGET_X32 ? 15 : 16"))]) (define_expand "tls_global_dynamic_64" [(parallel [(set (match_operand:DI 0 "register_operand" "")