From patchwork Sat Jan 30 17:11:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Edelsohn X-Patchwork-Id: 1433716 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@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.a=rsa-sha256 header.s=default header.b=YDzKaNGo; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DSgjf6RVlz9sVJ for ; Sun, 31 Jan 2021 04:11:48 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AC4EC3840C2A; Sat, 30 Jan 2021 17:11:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AC4EC3840C2A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1612026702; bh=ckELuAB9SpshfdwWUvIZKdaM9u9M9KqsGwa5l91SBBQ=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=YDzKaNGoAK1P/TszqRZUmD1tXCFQK7pVvQlLnr54X2ff9hOYguf1QnZDzjS5hYNUF ML0y2+RPa0GjuOtjud0nrXyuF63zlwBZpIoiGbSN6h8RBHTosC9i5+Pl6q7gGU5uKJ mAQW4SWhoCp1O0AKToa/qbSD8yqg2Y0f2Ann+liY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id DDF4E3857000 for ; Sat, 30 Jan 2021 17:11:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DDF4E3857000 Received: by mail-wr1-x434.google.com with SMTP id m13so12049680wro.12 for ; Sat, 30 Jan 2021 09:11:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ckELuAB9SpshfdwWUvIZKdaM9u9M9KqsGwa5l91SBBQ=; b=i2KFKLDT7p6APw4tulAynWk48KQi9da9+a/91L7GNjeH46v7d9GLCpN6tRNSlSRfCQ tbQN9PIWQLVb7l60ljgOpewG3PPnevNauw8cetyJQTDoZlzgE1V14LWPUdlpLUfBszDe OXJWgTyvVPK5xmW5jK2L8pPdbOVW+KzYeqyUKMjy/U3c72CqqlN/CfCusmXDnv4BkC6m XtuiPJjTTfQTNpKWK8httnHQGfdlCdgqL7AeMshddpGbt6/9TeVY/Gwr+ReF9klEoMWd FmsMtUxxEPFUn3aWZzGAV5WXQhD/A0ioXt+VPkKvfnGpLIJaizLi1N3AyqVaRdCJbMcQ 10Tw== X-Gm-Message-State: AOAM532d3fjhoXlNXtfC1LPiIaI6z5APLW/zdrZ3wbwHEmYO67/in8KL hUKm3c9OJhgl8Sjci5dOj54TRhd9iBSlfDv0ynQt2GRyRYA= X-Google-Smtp-Source: ABdhPJyv4dcNsAAFAgebr5RhZF5UZ9KzdJlf8keeFqpiCQxSVlfGXdbCDD3OJ02dLG8zK9qtDl7x8gyFlt+M6/H88Jk= X-Received: by 2002:a5d:6842:: with SMTP id o2mr10504019wrw.310.1612026698455; Sat, 30 Jan 2021 09:11:38 -0800 (PST) MIME-Version: 1.0 Date: Sat, 30 Jan 2021 12:11:27 -0500 Message-ID: Subject: [PATCH] Permit use of AIX Vector extended ABI mode To: GCC Patches X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: David Edelsohn via Gcc-patches From: David Edelsohn Reply-To: David Edelsohn Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" AIX only permits use of Altivec VSRs 20-31 in a Vector Extended ABI mode. This patch explicitly enables use of the VSRs using the new -mabi=vec-extabi command line option also implemented in LLVM for AIX. Bootstrapped on powerpc-ibm-aix7.2.3.0 and powerpc64le-linux-gnu. gcc/ChangeLog: * config/rs6000/rs6000.opt (mabi=vec-extabi): New. (mabi=vec-default): New. * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define __EXTABI__ for AIX Vector extended ABI. * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print AIX Vector extabi info. (conditional_register_usage): If AIX vec_extabi enabled, vs20-vs31 are non-volatile. * doc/invoke.texi (PowerPC mabi): Add AIX vec-extabi and vec-default. diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 656cdb39f3f..06b3bc0df33 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -483,6 +483,8 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags, /* Define this when supporting context-sensitive keywords. */ if (!flag_iso) rs6000_define_or_undefine_macro (define_p, "__APPLE_ALTIVEC__"); + if (rs6000_aix_extabi) + rs6000_define_or_undefine_macro (define_p, "__EXTABI__"); } /* Note that the OPTION_MASK_VSX flag is automatically turned on in the following conditions: diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index fbaff289a40..0d5ef38bd82 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -2512,6 +2512,9 @@ rs6000_debug_reg_global (void) if (rs6000_altivec_abi) fprintf (stderr, DEBUG_FMT_S, "altivec_abi", "true"); + if (rs6000_aix_extabi) + fprintf (stderr, DEBUG_FMT_S, "AIX vec-extabi", "true"); + if (rs6000_darwin64_abi) fprintf (stderr, DEBUG_FMT_S, "darwin64_abi", "true"); @@ -9815,7 +9818,7 @@ rs6000_conditional_register_usage (void) call_used_regs[i] = 1; /* AIX reserves VR20:31 in non-extended ABI mode. */ - if (TARGET_XCOFF) + if (TARGET_XCOFF && !rs6000_aix_extabi) for (i = FIRST_ALTIVEC_REGNO + 20; i < FIRST_ALTIVEC_REGNO + 32; ++i) fixed_regs[i] = call_used_regs[i] = 1; } diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 6240f779694..7aaabf39b25 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -352,6 +352,7 @@ mdebug= Target RejectNegative Joined -mdebug= Enable debug output. +; Altivec ABI mabi=altivec Target RejectNegative Var(rs6000_altivec_abi) Save Use the AltiVec ABI extensions. @@ -360,6 +361,16 @@ mabi=no-altivec Target RejectNegative Var(rs6000_altivec_abi, 0) Do not use the AltiVec ABI extensions. +; AIX Extended vector ABI +mabi=vec-extabi +Target RejectNegative Var(rs6000_aix_extabi, 1) Save +Use the AIX Vector Extended ABI + +mabi=vec-default +Target RejectNegative Var(rs6000_aix_extabi, 0) +Do not use the AIX Vector Extended ABI + +; PPC64 Linux ELF ABI mabi=elfv1 Target RejectNegative Var(rs6000_elf_abi, 1) Save Use the ELFv1 ABI. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a89d3859d6d..3751bc3ac7c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27509,9 +27509,10 @@ SVR4 ABI)@. @item -mabi=@var{abi-type} @opindex mabi Extend the current ABI with a particular extension, or remove such extension. -Valid values are @samp{altivec}, @samp{no-altivec}, +Valid values are: @samp{altivec}, @samp{no-altivec}, @samp{ibmlongdouble}, @samp{ieeelongdouble}, -@samp{elfv1}, @samp{elfv2}@. +@samp{elfv1}, @samp{elfv2}, +and for AIX: @samp{vec-extabi}, @samp{vec-default}@. @item -mabi=ibmlongdouble @opindex mabi=ibmlongdouble