From patchwork Mon Jan 7 02:24:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1021138 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-493493-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="V9gG9+wh"; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lni7kqyr"; 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 43Xzk41H7yz9s9G for ; Mon, 7 Jan 2019 13:24:41 +1100 (AEDT) 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:references:mime-version :content-type:in-reply-to; q=dns; s=default; b=v2RIt76uvDFoRp/FJ f50DJCpSM5L5UlOzSdR8Jjx04WBQyt0hXy3dB0XoycMY5YMY9eVEM3ATpy9abRJD D+hKPaMQM0EvpJ71R0aexxT/VtaTOqcMcL6pusb7icIIylvYWAt10KrKp+hZxlpy fPOpf8SALd+IoWAMvT3jNrK3YE= 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:references:mime-version :content-type:in-reply-to; s=default; bh=2PLslPloeOvyI0gzi/KZuXx HnEw=; b=V9gG9+whuWjufPY+dXSLA5bmYsp7BJUo6aMEp9aJeOuPfzgs60wlbfj nf6emgcW/zZZkS5OjCUlcKGTHRLDdC6BheJ2jd6S9I+0zBomNOd2GVSeuGoefm9m 58/hYaiLejsHZRveWN9vzdPczJGnY9I8GDL/4Mi8FftMvGPQhlgI= Received: (qmail 40356 invoked by alias); 7 Jan 2019 02:24:34 -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 40322 invoked by uid 89); 7 Jan 2019 02:24:28 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=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=existed, 2266 X-HELO: mail-pf1-f171.google.com Received: from mail-pf1-f171.google.com (HELO mail-pf1-f171.google.com) (209.85.210.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 07 Jan 2019 02:24:25 +0000 Received: by mail-pf1-f171.google.com with SMTP id z9so21060862pfi.2 for ; Sun, 06 Jan 2019 18:24:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=X1iCrU1Bfu9pSe+zsYy/vOMtNhg1WEW0tek6IYz8+ow=; b=lni7kqyrle2Xz6Snozn3/B2bhj4ZCVrUTntSDDg/RkSrse47gRRuTUl03fBeccX71D qeD2Xxr31BbMv7tz0oqDqBvpDnD9kIc6XMk9qaafJCIheElvheUNqAeyA/KdJUFfsL/D 6Ajfeb1UNZlvNy+oBMrvGKu1E5nOGsU11J2MxfFe+TPNZQoiQvBgByLHHWQzQXT9GAYF vTZ2VGUIbXy5dY4gS11DudQJnJuqde2XzcJSXDxaHdW16BhooheRX9VuHwowojdhlWey qZHuLqVud7OX4tukeoERX+FB2uCS3zLCfPrdnZ8To2xJA74CJkfg5zBtruTkJXQKoM9k 6pBw== Received: from bubble.grove.modra.org ([58.175.241.133]) by smtp.gmail.com with ESMTPSA id a18sm86447866pgj.30.2019.01.06.18.24.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 06 Jan 2019 18:24:06 -0800 (PST) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id CF9CB805F0; Mon, 7 Jan 2019 12:54:02 +1030 (ACDT) Date: Mon, 7 Jan 2019 12:54:02 +1030 From: Alan Modra To: gcc-patches@gcc.gnu.org Cc: Segher Boessenkool Subject: [RS6000] Implement -mno-pltseq Message-ID: <20190107022402.GJ3170@bubble.grove.modra.org> References: <20190107015844.GI3170@bubble.grove.modra.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190107015844.GI3170@bubble.grove.modra.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-IsSubscribed: yes Since the last patch untangled inline PLT and TLS marker support there now isn't a way of requesting the older long call sequences on a compiler built with inline PLT support. This patch adds support for a new -mno-pltseq option. Bootstrapped etc. powerpc64le-linux and powerpc64-linux. OK? * config/rs6000/rs6000.opt (mpltseq): New option. * config/rs6000/rs6000.h (TARGET_PLTSEQ): Define. * config/rs6000/rs6000.c (rs6000_option_override_internal): Error if given -mpltseq when assembler support is lacking. (rs6000_indirect_call_template_1, rs6000_longcall_ref), (rs6000_call_aix, rs6000_call_sysv, rs6000_sibcall_sysv): Replace uses of HAVE_AS_PLTSEQ with TARGET_PLTSEQ. * config/rs6000/rs6000.md (pltseq_tocsave_), (pltseq_plt16_ha_, pltseq_plt16_lo_), (pltseq_mtctr_): Likewise. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index c126734d3e6..e846e676810 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4513,6 +4513,9 @@ rs6000_option_override_internal (bool global_init_p) if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET) rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags); + if (global_options_set.x_rs6000_pltseq && TARGET_PLTSEQ != rs6000_pltseq) + error ("%qs not supported by your assembler", "-mpltseq"); + rs6000_always_hint = (rs6000_tune != PROCESSOR_POWER4 && rs6000_tune != PROCESSOR_POWER5 && rs6000_tune != PROCESSOR_POWER6 @@ -21613,7 +21616,7 @@ rs6000_indirect_call_template_1 (rtx *operands, unsigned int funop, || (REG_P (operands[funop]) && REGNO (operands[funop]) == LR_REGNO)); - if (!TARGET_MACHO && HAVE_AS_PLTSEQ && GET_CODE (operands[funop]) == UNSPEC) + if (!TARGET_MACHO && TARGET_PLTSEQ && GET_CODE (operands[funop]) == UNSPEC) { const char *rel64 = TARGET_64BIT ? "64" : ""; char tls[29]; @@ -32767,7 +32770,7 @@ rs6000_longcall_ref (rtx call_ref, rtx arg) call_ref = gen_rtx_SYMBOL_REF (VOIDmode, IDENTIFIER_POINTER (node)); } - if (HAVE_AS_PLTSEQ + if (TARGET_PLTSEQ && (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4)) { rtx base = const0_rtx; @@ -37765,7 +37768,7 @@ rs6000_call_aix (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) gen_rtx_PLUS (Pmode, stack_ptr, stack_toc_offset)); MEM_VOLATILE_P (stack_toc_mem) = 1; - if (HAVE_AS_PLTSEQ + if (TARGET_PLTSEQ && DEFAULT_ABI == ABI_ELFv2 && GET_CODE (func_desc) == SYMBOL_REF) { @@ -37789,7 +37792,7 @@ rs6000_call_aix (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) calls via LR, so move the address there. Needed to mark this insn for linker plt sequence editing too. */ func_addr = gen_rtx_REG (Pmode, CTR_REGNO); - if (HAVE_AS_PLTSEQ + if (TARGET_PLTSEQ && GET_CODE (func_desc) == SYMBOL_REF) { rtvec v = gen_rtvec (3, abi_reg, func_desc, tlsarg); @@ -37930,7 +37933,7 @@ rs6000_call_sysv (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) func = rs6000_longcall_ref (func_desc, tlsarg); /* If the longcall was implemented using PLT16 relocs, then r11 needs to be valid at the call for lazy linking. */ - if (HAVE_AS_PLTSEQ) + if (TARGET_PLTSEQ) abi_reg = func; } @@ -37943,7 +37946,7 @@ rs6000_call_sysv (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) calls via LR, so move the address there. Needed to mark this insn for linker plt sequence editing too. */ func_addr = gen_rtx_REG (Pmode, CTR_REGNO); - if (HAVE_AS_PLTSEQ + if (TARGET_PLTSEQ && GET_CODE (func_desc) == SYMBOL_REF) { rtvec v = gen_rtvec (3, func, func_desc, tlsarg); @@ -38000,7 +38003,7 @@ rs6000_sibcall_sysv (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) func = rs6000_longcall_ref (func_desc, tlsarg); /* If the longcall was implemented using PLT16 relocs, then r11 needs to be valid at the call for lazy linking. */ - if (HAVE_AS_PLTSEQ) + if (TARGET_PLTSEQ) abi_reg = func; } @@ -38012,7 +38015,7 @@ rs6000_sibcall_sysv (rtx value, rtx func_desc, rtx tlsarg, rtx cookie) /* Indirect sibcalls must go via CTR. Needed to mark this insn for linker plt sequence editing too. */ func_addr = gen_rtx_REG (Pmode, CTR_REGNO); - if (HAVE_AS_PLTSEQ + if (TARGET_PLTSEQ && GET_CODE (func_desc) == SYMBOL_REF) { rtvec v = gen_rtvec (3, func, func_desc, tlsarg); diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 9c0cc8de2b6..5ffa55e562c 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -226,6 +226,12 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define HAVE_AS_PLTSEQ 0 #endif +#if !HAVE_AS_PLTSEQ +#define TARGET_PLTSEQ 0 +#else +#define TARGET_PLTSEQ rs6000_pltseq +#endif + #ifndef TARGET_LINK_STACK #define TARGET_LINK_STACK 0 #endif diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 58070447639..b028b48aacc 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -10250,7 +10250,7 @@ (define_insn "*pltseq_tocsave_" (match_operand:P 2 "symbol_ref_operand" "s") (match_operand:P 3 "" "")] UNSPEC_PLTSEQ))] - "HAVE_AS_PLTSEQ + "TARGET_PLTSEQ && DEFAULT_ABI == ABI_ELFv2" { return rs6000_pltseq_template (operands, 0); @@ -10262,7 +10262,7 @@ (define_insn "*pltseq_plt16_ha_" (match_operand:P 2 "symbol_ref_operand" "s") (match_operand:P 3 "" "")] UNSPEC_PLT16_HA))] - "HAVE_AS_PLTSEQ + "TARGET_PLTSEQ && (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4)" { return rs6000_pltseq_template (operands, 1); @@ -10274,7 +10274,7 @@ (define_insn "*pltseq_plt16_lo_" (match_operand:P 2 "symbol_ref_operand" "s") (match_operand:P 3 "" "")] UNSPEC_PLT16_LO))] - "HAVE_AS_PLTSEQ + "TARGET_PLTSEQ && (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4)" { return rs6000_pltseq_template (operands, 2); @@ -10287,7 +10287,7 @@ (define_insn "*pltseq_mtctr_" (match_operand:P 2 "symbol_ref_operand" "s") (match_operand:P 3 "" "")] UNSPEC_PLTSEQ))] - "HAVE_AS_PLTSEQ + "TARGET_PLTSEQ && (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4)" { return rs6000_pltseq_template (operands, 3); diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 2e90bf37747..3f94bb7671c 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -405,6 +405,10 @@ mlongcall Target Report Var(rs6000_default_long_calls) Save Avoid all range limits on call instructions. +mpltseq +Target Report Var(rs6000_pltseq) Init(1) Save +Use inline plt sequences to implement long calls. + ; This option existed in the past, but now is always on. mgen-cell-microcode Target RejectNegative Undocumented Ignore