From patchwork Sun Apr 8 14:54:29 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 151358 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 07309B702B for ; Mon, 9 Apr 2012 00:54:52 +1000 (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=1334501694; h=Comment: DomainKey-Signature:Received:Received:Received:Received: MIME-Version:Received:Received:In-Reply-To:References:Date: Message-ID:Subject:From:To:Cc:Content-Type: Content-Transfer-Encoding:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=4awBtaSPAlS0Rr7efQFm5OeqFM0=; b=bYxfK655avb/m5t nzxktqI+D2ZhevBN7MBrQp+kpAfOY6s39xkJiQV1ujeh0bDehbvQyhysDDBLbUry R4f0F6IuJ7t2h34aNveHLKyH/FY+t672IARu4YOetRJMFqLOk7NgYjgES1nZSGKb bEyHVSGRUowEHwHz19JK/dydIeHA= 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:Received:MIME-Version:Received:Received:In-Reply-To:References:Date:Message-ID:Subject:From:To:Cc:Content-Type:Content-Transfer-Encoding:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=hQqOuwHLWgp48jAOsx4Gcq7ryg6yA8MJz5ZeeOdJ6VidrBSKWLJWT+MnhZ+wM0 8TBU2G23cW4M6PIEJOP1oaUz9Wyy7ej9kI+nDAJ6aUhpATL1T0o4zlxBxZTpG2uK BG5wABimrsflkugIrAC2ULRIlWPO4vdkpebWajO9T10Tc=; Received: (qmail 8493 invoked by alias); 8 Apr 2012 14:54:47 -0000 Received: (qmail 8482 invoked by uid 22791); 8 Apr 2012 14:54:46 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, KHOP_RCVD_TRUST, KHOP_THREADED, RCVD_IN_DNSWL_LOW, RCVD_IN_HOSTKARMA_YE, TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-qa0-f43.google.com (HELO mail-qa0-f43.google.com) (209.85.216.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 08 Apr 2012 14:54:30 +0000 Received: by qadb15 with SMTP id b15so1304448qad.9 for ; Sun, 08 Apr 2012 07:54:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.116.5 with SMTP id k5mr5596222qaq.19.1333896869918; Sun, 08 Apr 2012 07:54:29 -0700 (PDT) Received: by 10.229.163.7 with HTTP; Sun, 8 Apr 2012 07:54:29 -0700 (PDT) In-Reply-To: <9959DE37-E2EC-4361-B555-3B7192C742CF@googlemail.com> References: <28756905-85A0-4319-93CB-CC35D0601F96@comcast.net> <20120330180556.GA9392@bromo.med.uc.edu> <20120330202328.GA9998@bromo.med.uc.edu> <20120331192444.GA15969@bromo.med.uc.edu> <9959DE37-E2EC-4361-B555-3B7192C742CF@googlemail.com> Date: Sun, 8 Apr 2012 07:54:29 -0700 Message-ID: Subject: Re: PATCH: Add OPTION_MASK_ISA_X86_64 and support TARGET_BI_ARCH == 2 From: "H.J. Lu" To: Iain Sandoe Cc: "Joseph S. Myers" , Mike Stump , GCC Patches 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 On Sun, Apr 8, 2012 at 4:38 AM, Iain Sandoe wrote: > Hi H.J. > > > On 31 Mar 2012, at 20:24, Jack Howarth wrote: >> >> >>  The latest gcc-pr52784-2.patch patch also allows current gcc trunk to >> bootstrap on i386-apple-darwin10. > > > Despite the fact that bootstrap is restored, there remain problems with this > patch and some more work is needed. > > (a) [trivial] the option 'mx32' is in i386.opt, which means it is exposed to > all sub-targets, even if they don't support it. > > $ ./gcc/xgcc -Bgcc ../tests/hello.c -mx32 -o hc > /var/folders/OW/OW-PGOtgHbKakssxFpJpkU++-0E/-Tmp-//ccIP9e4Z.s:10:bad > register name `%rbp' > /var/folders/OW/OW-PGOtgHbKakssxFpJpkU++-0E/-Tmp-//ccIP9e4Z.s:14:bad > register name `%rsi' > etc. etc. It is useful for bootstrap and allows you check out what X32 code looks like even if your OS doesn't support it. > (b) [serious] the m64 ObjC multi-lib is broken on i?86-darwin* (and likely > there are other more subtle effects). > > This is because the code in config/darwin.c that Joseph pointed out (earlier > in this thread) is called for SUBSUBTARGET_OVERRIDE_OPTIONS. > > That code sets defaults for, and checks errors for, flags that apply to > *-*-darwin* (and are needed for LTO as well as c-family). > > In the case of the ObjC ABI (fobjc-abi-version=) we need to default it to > "2" @ m64 (and default it to 0 or 1 depending on the darwin version @ m32). > > I accept that some of this could possibly be done in driver-self-specs; > however, we allow m32/m64 to be unspecified on the c/l and to default for > the target.  I'm also not yet sure whether %:version-compare() would be > applicable to fobjc-abi-version. > > Thus, the current trunk implementation is broken by your patch and we need > to address that pending other solutions (I'm also very short of free time > for Darwin right now - to experiment with the specs solution). Please try this > =--= > > It is possible that there is an options handling issue, (although I might > also have misunderstood) viz: > > ========= > (current) i386.opt: > > ;; ISA support > > > m32 > Target RejectNegative Negative(m64) Report InverseMask(ISA_64BIT) > Var(ix86_isa_flags) Save > Generate 32bit i386 code > > m64 > Target RejectNegative Negative(mx32) Report Mask(ABI_64) Var(ix86_isa_flags) > Save > > Generate 64bit x86-64 code > > mx32 > Target RejectNegative Negative(m32) Report Mask(ABI_X32) Var(ix86_isa_flags) > Save > Generate 32bit x86-64 code > > ======= > from gccint.pdf (section 8.2): > > Negative(othername ) > The option will turn off another option othername, which is the option name > with the leading “-” removed. This chain action will propagate through the > Negative property of the option to be turned off. > As a consequence, if you have a group of mutually-exclusive options, their > Negative properties should form a circular chain. For example, if options > ‘-a ’, ‘-b ’ and ‘-c ’ are mutually exclusive, their respective Negative > properties > should be ‘Negative(b )’, ‘Negative(c )’ and ‘Negative(a )’. > > ====== > > I read this as "if the User specifies -a on the command line the inverse of > -b *and* the inverse of -c will be applied". > > so that when -m64 is issued, the *inverse* of Mask(ABI_X32) should be > applied and then the *inverse* of InverseMask(ISA_64BIT) - which would > (correctly, for the case we're considering) set MASK_ISA_64BIT. > > However, in the example above this does NOT happen - if I set a breakpoint > at the entry of x86_internal_override_options - ISA_64BIT ends up as 0 when > -m64 is specified on the c/l for i?86-darwin*. > > The x86_isa_explicit stuff doesn't appear to get set either, although > global_options_set.x_x86_isa... does, which I've used in the attached patch. > > so is this an options bug or misunderstanding on my part? > There is no problem here. ISA_64BIT is turned on by ABI_64: else if (TARGET_LP64) { /* Always turn on OPTION_MASK_ISA_64BIT and turn off OPTION_MASK_ABI_X32 for TARGET_LP64. */ ix86_isa_flags |= OPTION_MASK_ISA_64BIT; ix86_isa_flags &= ~OPTION_MASK_ABI_X32; } diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c959113..69893ab 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -3109,14 +3109,6 @@ ix86_option_override_internal (bool main_args_p) sw = "attribute"; } -#ifdef SUBTARGET_OVERRIDE_OPTIONS - SUBTARGET_OVERRIDE_OPTIONS; -#endif - -#ifdef SUBSUBTARGET_OVERRIDE_OPTIONS - SUBSUBTARGET_OVERRIDE_OPTIONS; -#endif - /* Turn off both OPTION_MASK_ABI_64 and OPTION_MASK_ABI_X32 if TARGET_64BIT_DEFAULT is true and TARGET_64BIT is false. */ if (TARGET_64BIT_DEFAULT && !TARGET_64BIT) @@ -3157,6 +3149,14 @@ ix86_option_override_internal (bool main_args_p) ix86_isa_flags &= ~OPTION_MASK_ABI_X32; } +#ifdef SUBTARGET_OVERRIDE_OPTIONS + SUBTARGET_OVERRIDE_OPTIONS; +#endif + +#ifdef SUBSUBTARGET_OVERRIDE_OPTIONS + SUBSUBTARGET_OVERRIDE_OPTIONS; +#endif + /* -fPIC is the default for x86_64. */ if (TARGET_MACHO && TARGET_64BIT) flag_pic = 2;