From patchwork Sat Sep 23 21:16:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 817831 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-462832-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="NlsIij3l"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3y038J04y5z9t1t for ; Sun, 24 Sep 2017 07:17:14 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=noyE4Aom5Z7g6LN01TbRFJmM1LsLfZZiqNBvsYqbhSHI2UPVCh UpPEo9GGZmQswlvuZl08iS6RXwi0qMmeAyimo50R1iEgtPsYM5BJeJpZiNSbYy5W HK51ThlxwUu66S+J3no7Fi+IzmUJ4tnQoQFQa0MNjly+YZON+gizZa/Gw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=ftDtJupgfDsT2PaLz+lXY7giCu0=; b=NlsIij3l1kbWZz0ITD7B N39S3F+HchZUis8HKWRZI5CP77e1Pbe/mFhoqn2bBc2rQ7GieMxGrevy4C+NgJQd nq3YX1Ez75A8zwaqePuyXj8m1OGzH9TXnHftvUO89HsvaB2GMNCKbXnadZwV7stY 9JaEz+NjNzukxLm+FdbAryg= Received: (qmail 59325 invoked by alias); 23 Sep 2017 21:17:05 -0000 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 Received: (qmail 58467 invoked by uid 89); 23 Sep 2017 21:17:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=HX-Received:10.84.218.198 X-HELO: mail-pf0-f175.google.com Received: from mail-pf0-f175.google.com (HELO mail-pf0-f175.google.com) (209.85.192.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 23 Sep 2017 21:17:02 +0000 Received: by mail-pf0-f175.google.com with SMTP id g65so2053034pfe.13 for ; Sat, 23 Sep 2017 14:17:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=o2hgeVc4QOjPfEj6gl/2wY8pChfObIkqEDhSwzlAEv4=; b=PRvmU9DiHbYetSZnWS0YyGbpJRwsDBc1dMkPfWgSCCmGAk5hw0nFka/vLEbYK/5aWk 8wzoVeWnuydqck6mRdUnz9QNp2CHGF8eGKhirHOZXrVbNWiXCvXh9qNEFDDAwruIbsDo Ff+/VHHgpGwYmqRvGRZJMwUUf2I8PXidA311YBVDxO8RjJ/Dg8PLqTH/1zzKTugA9lZx afPt1+cgXgg6r68UucmZI75XrGrvvCkIjDoAMsVa9ubpvPIi9SOh4v74yEO4ZIiYRlSl 0XdAe8bW9YElBCwDMeQv870MethE77w3vjku6wOMU1KTdTBef9XmF0F95hvKbrvKSofF F3Ng== X-Gm-Message-State: AHPjjUifFOsBYYmqFkJGh4tu/vNuNaBd9VtVhmhnRzT1hfgsKnJ/J84i jl/Vn0wI6eBqNiROo5Cgj2Ek1GeLu5Y= X-Google-Smtp-Source: AOwi7QCVaK/dwZqFgMFu632wiSV5+UGWpGiP3gWLVI0oFYlC9FNxtHKZOmq2UA9kDOZpNIGFvUgqJg== X-Received: by 10.84.218.198 with SMTP id g6mr3080001plm.23.1506201420713; Sat, 23 Sep 2017 14:17:00 -0700 (PDT) Received: from gnu-efi-2.localdomain ([172.56.6.192]) by smtp.gmail.com with ESMTPSA id b63sm5491048pga.27.2017.09.23.14.16.58 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 23 Sep 2017 14:16:59 -0700 (PDT) Received: by gnu-efi-2.localdomain (Postfix, from userid 1000) id C946F1C35E9; Sat, 23 Sep 2017 14:16:20 -0700 (PDT) Date: Sat, 23 Sep 2017 14:16:20 -0700 From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: Uros Bizjak Subject: [PATCH] x32: Encode %esp as %rsp to avoid 0x67 prefix Message-ID: <20170923211620.GA2652@gmail.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.8.3 (2017-05-23) X-IsSubscribed: yes Since the upper 32 bits of stack register are always zero for x32, we can encode %esp as %rsp to avoid 0x67 prefix in address if there is no index or base register. Tested on x86-64. OK for trunk? H.J. ---- gcc/ PR target/82267 * config/i386/i386.c (ix86_print_operand_address_as): Encode %esp as %rsp to avoid 0x67 prefix if there is no index or base register. gcc/testsuite/ PR target/82267 * gcc.target/i386/pr82267.c: New tests. --- gcc/config/i386/i386.c | 17 +++++++++++++++++ gcc/testsuite/gcc.target/i386/pr82267.c | 14 ++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr82267.c diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5e8f58c5e9f..519fdb0ffae 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -19849,6 +19849,23 @@ ix86_print_operand_address_as (FILE *file, rtx addr, disp = parts.disp; scale = parts.scale; + /* Since the upper 32 bits of RSP are always zero for x32, we can + encode %esp as %rsp to avoid 0x67 prefix if there is no index or + base register. */ + if (TARGET_X32 + && Pmode == SImode + && (!index || !base) + && index != base) + { + if (base) + { + if (REGNO (base) == SP_REG) + base = gen_rtx_REG (DImode, SP_REG); + } + else if (REGNO (index) == SP_REG) + index = gen_rtx_REG (DImode, SP_REG); + } + if (ADDR_SPACE_GENERIC_P (as)) as = parts.seg; else diff --git a/gcc/testsuite/gcc.target/i386/pr82267.c b/gcc/testsuite/gcc.target/i386/pr82267.c new file mode 100644 index 00000000000..5e4b271d41d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82267.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-require-effective-target maybe_x32 } */ +/* { dg-options "-O2 -mx32 -maddress-mode=short" } */ + +int +stackuse (void) +{ + volatile int foo = 2; + return foo * 3; +} + +/* Verify we that use %rsp to access stack. */ +/* { dg-final { scan-assembler-not "%esp" } } */ +/* { dg-final { scan-assembler "%rsp" } } */