From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9634 invoked by alias); 21 Aug 2019 12:25:39 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 9625 invoked by uid 89); 21 Aug 2019 12:25:38 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=unspec, on, unspecs, sk:rs6000 X-HELO: mail-pg1-f169.google.com Received: from mail-pg1-f169.google.com (HELO mail-pg1-f169.google.com) (209.85.215.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 21 Aug 2019 12:25:35 +0000 Received: by mail-pg1-f169.google.com with SMTP id e11so1233623pga.5 for ; Wed, 21 Aug 2019 05:25:35 -0700 (PDT) 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=blon6QLSB1n9WUvdgnMwaa/myWpPJwgjgMFTKSY4k5w=; b=X3l6VhX9XFYJXhj28/0TNU5UchMCT1jTqKXnnGZn1r0IP8zznglrKyvAz18wegZ4lV DOBUY3X4V7binb9wQgVx7nZ8ejKyKaC1DeaegqcrHnRMkzP+ftCGkQNXtgi7u+vNixtn fJQwlcFTJHjhzCQsZyd2bv62C53IhOcaZ0Y3tS+aN+UhuOOgMqvZn7tWcSild6sfT1UM q63s3zxPEta/lvzgjO8yMl2+wQQDAQMjVKIp+4ue73VqGPEaln4tNnmEFT9rFxVaGeiC yjna3/k+VMT9ntX/8bZbwMLOH/LzrqdTu3POcnlzvt7YBfEc49IH/d1YlDR8RrSjCf0W uX9A== Return-Path: Received: from bubble.grove.modra.org (158.106.96.58.static.exetel.com.au. [58.96.106.158]) by smtp.gmail.com with ESMTPSA id v18sm24300214pgl.87.2019.08.21.05.25.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2019 05:25:32 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id 3AEFE805B0; Wed, 21 Aug 2019 21:55:28 +0930 (ACST) Date: Wed, 21 Aug 2019 13:34:00 -0000 From: Alan Modra To: Segher Boessenkool Cc: Michael Meissner , gcc-patches@gcc.gnu.org, dje.gcc@gmail.com Subject: Re: PC-relative TLS support Message-ID: <20190821122528.GC9455@bubble.grove.modra.org> References: <20190814205732.GA11956@ibm-toto.the-meissners.org> <20190815040510.GJ1969@bubble.grove.modra.org> <20190815182407.GN31406@gate.crashing.org> <20190816015930.GA26147@bubble.grove.modra.org> <20190819124519.GF31406@gate.crashing.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190819124519.GF31406@gate.crashing.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg01491.txt.bz2 On Mon, Aug 19, 2019 at 07:45:19AM -0500, Segher Boessenkool wrote: > But if you think we can remove the !TARGET_TLS_MARKERS everywhere it > is relevant at all, now is the time, patches very welcome, it would be > a nice cleanup :-) Needs testing everywhere of course, but now is > stage 1 :-) This patch removes !TARGET_TLS_MARKERS support. -mtls-markers (and -mno-tls-markers) disappear as valid options too, because I figure they haven't been used too much except by people testing the compiler. Bootstrapped and regression tested powerpc64le-linux and powerpc-ibm-aix7.1.3.0 (on gcc111). I believe powerpc*-darwin doesn't support TLS. Requiring an 8 year old binutils-2.20 shouldn't be that onerous. Note that this patch doesn't remove the configure test to set HAVE_AS_TLS_MARKERS. I was wondering whether I ought to hook that into a "sorry, your assembler is too old" error? * config/rs6000/rs6000-protos.h (rs6000_output_tlsargs): Delete. * config/rs6000/rs6000.c (rs6000_output_tlsargs): Delete. (rs6000_legitimize_tls_address): Remove !TARGET_TLS_MARKERS code. (rs6000_call_template_1): Delete TARGET_TLS_MARKERS test and allow other UNSPECs besides UNSPEC_TLSGD and UNSPEC_TLSLD. (rs6000_indirect_call_template_1): Likewise. (rs6000_pltseq_template): Likewise. (rs6000_opt_vars): Remove "tls-markers" entry. * config/rs6000/rs6000.h (TARGET_TLS_MARKERS): Don't define. (IS_NOMARK_TLSGETADDR): Likewise. * config/rs6000/rs6000.md (tls_gd): Replace TARGET_TLS_MARKERS with !TARGET_XCOFF. (tls_gd_high, tls_gd_low): Likewise. (tls_ld, tls_ld_high, tls_ld_low): Likewise. (pltseq_plt_pcrel): Likewise. (call_value_local32): Remove IS_NOMARK_TLSGETADDR predicate test. (call_value_local64): Likewise. (call_value_indirect_nonlocal_sysv): Remove IS_NOMARK_TLSGETADDR output and length attribute sub-expression. (call_value_nonlocal_sysv), (call_value_nonlocal_sysv_secure), (call_value_local_aix, call_value_nonlocal_aix), (call_value_indirect_aix, call_value_indirect_elfv2), (call_value_indirect_pcrel): Likewise. * config/rs6000/rs6000.opt (mtls-markers): Delete. * doc/install.texi (powerpc-*-*): Require binutils-2.20. diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h index 06e40d94b17..88b5b7cec55 100644 --- a/gcc/config/rs6000/rs6000-protos.h +++ b/gcc/config/rs6000/rs6000-protos.h @@ -139,7 +139,6 @@ extern bool valid_sf_si_move (rtx, rtx, machine_mode); extern void rs6000_emit_move (rtx, rtx, machine_mode); extern bool rs6000_legitimate_offset_address_p (machine_mode, rtx, bool, bool); -extern void rs6000_output_tlsargs (rtx *); extern rtx rs6000_find_base_term (rtx); extern rtx rs6000_return_addr (int, rtx); extern void rs6000_output_symbol_ref (FILE*, rtx); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e792116fb40..5e2b08c3c72 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -8329,41 +8329,6 @@ rs6000_legitimize_tls_address_aix (rtx addr, enum tls_model model) return dest; } -/* Output arg setup instructions for a !TARGET_TLS_MARKERS - __tls_get_addr call. */ - -void -rs6000_output_tlsargs (rtx *operands) -{ - /* Set up operands for output_asm_insn, without modifying OPERANDS. */ - rtx op[3]; - - /* The set dest of the call, ie. r3, which is also the first arg reg. */ - op[0] = operands[0]; - /* The TLS symbol from global_tlsarg stashed as CALL operand 2. */ - op[1] = XVECEXP (operands[2], 0, 0); - if (XINT (operands[2], 1) == UNSPEC_TLSGD) - { - /* The GOT register. */ - op[2] = XVECEXP (operands[2], 0, 1); - if (TARGET_CMODEL != CMODEL_SMALL) - output_asm_insn ("addis %0,%2,%1@got@tlsgd@ha\n\t" - "addi %0,%0,%1@got@tlsgd@l", op); - else - output_asm_insn ("addi %0,%2,%1@got@tlsgd", op); - } - else if (XINT (operands[2], 1) == UNSPEC_TLSLD) - { - if (TARGET_CMODEL != CMODEL_SMALL) - output_asm_insn ("addis %0,%1,%&@got@tlsld@ha\n\t" - "addi %0,%0,%&@got@tlsld@l", op); - else - output_asm_insn ("addi %0,%1,%&@got@tlsld", op); - } - else - gcc_unreachable (); -} - /* Passes the tls arg value for global dynamic and local dynamic emit_library_call_value in rs6000_legitimize_tls_address to rs6000_call_aix and rs6000_call_sysv. This is used to emit the @@ -8465,16 +8430,10 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model) rtx arg = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, addr, got), UNSPEC_TLSGD); tga = rs6000_tls_get_addr (); + rtx argreg = gen_rtx_REG (Pmode, 3); + emit_insn (gen_rtx_SET (argreg, arg)); global_tlsarg = arg; - if (TARGET_TLS_MARKERS) - { - rtx argreg = gen_rtx_REG (Pmode, 3); - emit_insn (gen_rtx_SET (argreg, arg)); - emit_library_call_value (tga, dest, LCT_CONST, Pmode, - argreg, Pmode); - } - else - emit_library_call_value (tga, dest, LCT_CONST, Pmode); + emit_library_call_value (tga, dest, LCT_CONST, Pmode, argreg, Pmode); global_tlsarg = NULL_RTX; /* Make a note so that the result of this call can be CSEd. */ @@ -8487,16 +8446,10 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model) rtx arg = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, got), UNSPEC_TLSLD); tga = rs6000_tls_get_addr (); tmp1 = gen_reg_rtx (Pmode); + rtx argreg = gen_rtx_REG (Pmode, 3); + emit_insn (gen_rtx_SET (argreg, arg)); global_tlsarg = arg; - if (TARGET_TLS_MARKERS) - { - rtx argreg = gen_rtx_REG (Pmode, 3); - emit_insn (gen_rtx_SET (argreg, arg)); - emit_library_call_value (tga, tmp1, LCT_CONST, Pmode, - argreg, Pmode); - } - else - emit_library_call_value (tga, tmp1, LCT_CONST, Pmode); + emit_library_call_value (tga, tmp1, LCT_CONST, Pmode, argreg, Pmode); global_tlsarg = NULL_RTX; /* Make a note so that the result of this call can be CSEd. */ @@ -13270,14 +13223,12 @@ rs6000_call_template_1 (rtx *operands, unsigned int funop, bool sibcall) char arg[12]; arg[0] = 0; - if (TARGET_TLS_MARKERS && GET_CODE (operands[funop + 1]) == UNSPEC) + if (GET_CODE (operands[funop + 1]) == UNSPEC) { if (XINT (operands[funop + 1], 1) == UNSPEC_TLSGD) sprintf (arg, "(%%%u@tlsgd)", funop + 1); else if (XINT (operands[funop + 1], 1) == UNSPEC_TLSLD) sprintf (arg, "(%%&@tlsld)"); - else - gcc_unreachable (); } /* The magic 32768 offset here corresponds to the offset of @@ -13418,7 +13369,7 @@ rs6000_indirect_call_template_1 (rtx *operands, unsigned int funop, const char *rel64 = TARGET_64BIT ? "64" : ""; char tls[29]; tls[0] = 0; - if (TARGET_TLS_MARKERS && GET_CODE (operands[funop + 1]) == UNSPEC) + if (GET_CODE (operands[funop + 1]) == UNSPEC) { if (XINT (operands[funop + 1], 1) == UNSPEC_TLSGD) sprintf (tls, ".reloc .,R_PPC%s_TLSGD,%%%u\n\t", @@ -13426,8 +13377,6 @@ rs6000_indirect_call_template_1 (rtx *operands, unsigned int funop, else if (XINT (operands[funop + 1], 1) == UNSPEC_TLSLD) sprintf (tls, ".reloc .,R_PPC%s_TLSLD,%%&\n\t", rel64); - else - gcc_unreachable (); } const char *notoc = rs6000_pcrel_p (cfun) ? "_NOTOC" : ""; @@ -13514,7 +13463,7 @@ rs6000_pltseq_template (rtx *operands, int which) const char *rel64 = TARGET_64BIT ? "64" : ""; char tls[30]; tls[0] = 0; - if (TARGET_TLS_MARKERS && GET_CODE (operands[3]) == UNSPEC) + if (GET_CODE (operands[3]) == UNSPEC) { char off = which == RS6000_PLTSEQ_PLT_PCREL34 ? '8' : '4'; if (XINT (operands[3], 1) == UNSPEC_TLSGD) @@ -13523,8 +13472,6 @@ rs6000_pltseq_template (rtx *operands, int which) else if (XINT (operands[3], 1) == UNSPEC_TLSLD) sprintf (tls, ".reloc .-%c,R_PPC%s_TLSLD,%%&\n\t", off, rel64); - else - gcc_unreachable (); } gcc_assert (DEFAULT_ABI == ABI_ELFv2 || DEFAULT_ABI == ABI_V4); @@ -22866,9 +22813,6 @@ static struct rs6000_opt_var const rs6000_opt_vars[] = { "align-branch-targets", offsetof (struct gcc_options, x_TARGET_ALIGN_BRANCH_TARGETS), offsetof (struct cl_target_option, x_TARGET_ALIGN_BRANCH_TARGETS), }, - { "tls-markers", - offsetof (struct gcc_options, x_tls_markers), - offsetof (struct cl_target_option, x_tls_markers), }, { "sched-prolog", offsetof (struct gcc_options, x_TARGET_SCHED_PROLOG), offsetof (struct cl_target_option, x_TARGET_SCHED_PROLOG), }, diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 9c11a3e4d46..b263213ad75 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -228,15 +228,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define TARGET_MFCRF 0 #endif -/* Define TARGET_TLS_MARKERS if the target assembler does not support - arg markers for __tls_get_addr calls. */ -#ifndef HAVE_AS_TLS_MARKERS -#undef TARGET_TLS_MARKERS -#define TARGET_TLS_MARKERS 0 -#else -#define TARGET_TLS_MARKERS tls_markers -#endif - #ifndef TARGET_SECURE_PLT #define TARGET_SECURE_PLT 0 #endif @@ -1513,13 +1504,6 @@ enum rs6000_pltseq_enum { #define IS_V4_FP_ARGS(OP) \ ((INTVAL (OP) & (CALL_V4_CLEAR_FP_ARGS | CALL_V4_SET_FP_ARGS)) != 0) -/* Whether OP is an UNSPEC used in !TARGET_TLS_MARKER calls. */ -#define IS_NOMARK_TLSGETADDR(OP) \ - (!TARGET_TLS_MARKERS \ - && GET_CODE (OP) == UNSPEC \ - && (XINT (OP, 1) == UNSPEC_TLSGD \ - || XINT (OP, 1) == UNSPEC_TLSLD)) - /* We don't have prologue and epilogue functions to save/restore everything for most ABIs. */ #define WORLD_SAVE_P(INFO) 0 diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 9a7a1da987f..b5b4bc1587e 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -9413,7 +9413,7 @@ (define_insn_and_split "*tls_gd" (unspec:P [(match_operand:P 1 "rs6000_tls_symbol_ref" "") (match_operand:P 2 "gpc_reg_operand" "b")] UNSPEC_TLSGD))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS" + "HAVE_AS_TLS && !TARGET_XCOFF" "addi %0,%2,%1@got@tlsgd" "&& TARGET_CMODEL != CMODEL_SMALL" [(set (match_dup 3) @@ -9436,7 +9436,7 @@ (define_insn "*tls_gd_high" (unspec:P [(match_operand:P 1 "rs6000_tls_symbol_ref" "") (match_operand:P 2 "gpc_reg_operand" "b")] UNSPEC_TLSGD)))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL" + "HAVE_AS_TLS && !TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" "addis %0,%2,%1@got@tlsgd@ha") (define_insn "*tls_gd_low" @@ -9445,14 +9445,14 @@ (define_insn "*tls_gd_low" (unspec:P [(match_operand:P 2 "rs6000_tls_symbol_ref" "") (match_operand:P 3 "gpc_reg_operand" "b")] UNSPEC_TLSGD)))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL" + "HAVE_AS_TLS && !TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" "addi %0,%1,%2@got@tlsgd@l") (define_insn_and_split "*tls_ld" [(set (match_operand:P 0 "gpc_reg_operand" "=b") (unspec:P [(match_operand:P 1 "gpc_reg_operand" "b")] UNSPEC_TLSLD))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS" + "HAVE_AS_TLS && !TARGET_XCOFF" "addi %0,%1,%&@got@tlsld" "&& TARGET_CMODEL != CMODEL_SMALL" [(set (match_dup 2) @@ -9474,7 +9474,7 @@ (define_insn "*tls_ld_high" (high:P (unspec:P [(match_operand:P 1 "gpc_reg_operand" "b")] UNSPEC_TLSLD)))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL" + "HAVE_AS_TLS && !TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" "addis %0,%1,%&@got@tlsld@ha") (define_insn "*tls_ld_low" @@ -9482,7 +9482,7 @@ (define_insn "*tls_ld_low" (lo_sum:P (match_operand:P 1 "gpc_reg_operand" "b") (unspec:P [(match_operand:P 2 "gpc_reg_operand" "b")] UNSPEC_TLSLD)))] - "HAVE_AS_TLS && TARGET_TLS_MARKERS && TARGET_CMODEL != CMODEL_SMALL" + "HAVE_AS_TLS && !TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" "addi %0,%1,%&@got@tlsld@l") (define_insn "tls_dtprel_" @@ -10193,7 +10193,7 @@ (define_insn "*pltseq_plt_pcrel" (match_operand:P 2 "symbol_ref_operand" "s") (match_operand:P 3 "" "")] UNSPEC_PLT_PCREL))] - "HAVE_AS_PLTSEQ && TARGET_TLS_MARKERS + "HAVE_AS_PLTSEQ && !TARGET_XCOFF && rs6000_pcrel_p (cfun)" { return rs6000_pltseq_template (operands, RS6000_PLTSEQ_PLT_PCREL34); @@ -10308,8 +10308,7 @@ (define_insn "*call_value_local32" (match_operand 2))) (use (match_operand:SI 3 "immediate_operand" "O,n")) (clobber (reg:SI LR_REGNO))] - "(INTVAL (operands[3]) & CALL_LONG) == 0 - && !IS_NOMARK_TLSGETADDR (operands[2])" + "(INTVAL (operands[3]) & CALL_LONG) == 0" { if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) output_asm_insn ("crxor 6,6,6", operands); @@ -10329,8 +10328,7 @@ (define_insn "*call_value_local64" (match_operand 2))) (use (match_operand:SI 3 "immediate_operand" "O,n")) (clobber (reg:DI LR_REGNO))] - "TARGET_64BIT && (INTVAL (operands[3]) & CALL_LONG) == 0 - && !IS_NOMARK_TLSGETADDR (operands[2])" + "TARGET_64BIT && (INTVAL (operands[3]) & CALL_LONG) == 0" { if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) output_asm_insn ("crxor 6,6,6", operands); @@ -10428,10 +10426,7 @@ (define_insn "*call_value_indirect_nonlocal_sysv" "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - - else if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) + if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) output_asm_insn ("crxor 6,6,6", operands); else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) @@ -10442,8 +10437,7 @@ (define_insn "*call_value_indirect_nonlocal_sysv" [(set_attr "type" "jmpreg") (set (attr "length") (plus - (if_then_else (ior (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (match_test "IS_V4_FP_ARGS (operands[3])")) + (if_then_else (match_test "IS_V4_FP_ARGS (operands[3])") (const_int 4) (const_int 0)) (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") @@ -10461,10 +10455,7 @@ (define_insn "*call_value_nonlocal_sysv" || (DEFAULT_ABI == ABI_V4 && (INTVAL (operands[3]) & CALL_LONG) == 0))" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - - else if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) + if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) output_asm_insn ("crxor 6,6,6", operands); else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) @@ -10474,8 +10465,7 @@ (define_insn "*call_value_nonlocal_sysv" } [(set_attr "type" "branch") (set (attr "length") - (if_then_else (ior (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (match_test "IS_V4_FP_ARGS (operands[3])")) + (if_then_else (match_test "IS_V4_FP_ARGS (operands[3])") (const_int 8) (const_int 4)))]) @@ -10490,10 +10480,7 @@ (define_insn "*call_value_nonlocal_sysv_secure" && TARGET_SECURE_PLT && flag_pic && !SYMBOL_REF_LOCAL_P (operands[1]) && (INTVAL (operands[3]) & CALL_LONG) == 0)" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - - else if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) + if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS) output_asm_insn ("crxor 6,6,6", operands); else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) @@ -10503,8 +10490,7 @@ (define_insn "*call_value_nonlocal_sysv_secure" } [(set_attr "type" "branch") (set (attr "length") - (if_then_else (ior (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (match_test "IS_V4_FP_ARGS (operands[3])")) + (if_then_else (match_test "IS_V4_FP_ARGS (operands[3])") (const_int 8) (const_int 4)))]) @@ -10527,8 +10513,7 @@ (define_insn "*call_value_local_aix" (call (mem:SI (match_operand:P 1 "current_file_function_operand" "s")) (match_operand 2))) (clobber (reg:P LR_REGNO))] - "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2) - && !IS_NOMARK_TLSGETADDR (operands[2])" + "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2" { if (rs6000_pcrel_p (cfun)) return "bl %z1@notoc"; @@ -10560,21 +10545,13 @@ (define_insn "*call_value_nonlocal_aix" (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - return rs6000_call_template (operands, 1); } [(set_attr "type" "branch") (set (attr "length") - (plus (if_then_else (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (if_then_else (match_test "TARGET_CMODEL != CMODEL_SMALL") - (const_int 8) - (const_int 4)) - (const_int 0)) - (if_then_else (match_test "rs6000_pcrel_p (cfun)") - (const_int 4) - (const_int 8))))]) + (if_then_else (match_test "rs6000_pcrel_p (cfun)") + (const_int 4) + (const_int 8)))]) ;; Call to indirect functions with the AIX abi using a 3 word descriptor. ;; Operand0 is the addresss of the function to call @@ -10609,23 +10586,14 @@ (define_insn "*call_value_indirect_aix" (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - return rs6000_indirect_call_template (operands, 1); } [(set_attr "type" "jmpreg") (set (attr "length") - (plus - (if_then_else (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (if_then_else (match_test "TARGET_CMODEL != CMODEL_SMALL") - (const_int 8) - (const_int 4)) - (const_int 0)) - (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") - (match_test "which_alternative != 1")) + (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") + (match_test "which_alternative != 1")) (const_string "16") - (const_string "12"))))]) + (const_string "12")))]) ;; Call to indirect functions with the ELFv2 ABI. ;; Operand0 is the addresss of the function to call @@ -10672,23 +10640,14 @@ (define_insn "*call_value_indirect_elfv2" (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_ELFv2" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - return rs6000_indirect_call_template (operands, 1); } [(set_attr "type" "jmpreg") (set (attr "length") - (plus - (if_then_else (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (if_then_else (match_test "TARGET_CMODEL != CMODEL_SMALL") - (const_int 8) - (const_int 4)) - (const_int 0)) - (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") - (match_test "which_alternative != 1")) + (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") + (match_test "which_alternative != 1")) (const_string "12") - (const_string "8"))))]) + (const_string "8")))]) (define_insn "*call_value_indirect_pcrel" [(set (match_operand 0 "" "") @@ -10697,23 +10656,14 @@ (define_insn "*call_value_indirect_pcrel" (clobber (reg:P LR_REGNO))] "rs6000_pcrel_p (cfun)" { - if (IS_NOMARK_TLSGETADDR (operands[2])) - rs6000_output_tlsargs (operands); - return rs6000_indirect_call_template (operands, 1); } [(set_attr "type" "jmpreg") (set (attr "length") - (plus - (if_then_else (match_test "IS_NOMARK_TLSGETADDR (operands[2])") - (if_then_else (match_test "TARGET_CMODEL != CMODEL_SMALL") - (const_int 8) - (const_int 4)) - (const_int 0)) - (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") - (match_test "which_alternative != 1")) + (if_then_else (and (match_test "!rs6000_speculate_indirect_jumps") + (match_test "which_alternative != 1")) (const_string "8") - (const_string "4"))))]) + (const_string "4")))]) ;; Call subroutine returning any type. (define_expand "untyped_call" diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 1b69507cfa8..29803b753eb 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -246,10 +246,6 @@ mavoid-indexed-addresses Target Report Var(TARGET_AVOID_XFORM) Init(-1) Save Avoid generation of indexed load/store instructions when possible. -mtls-markers -Target Report Var(tls_markers) Init(1) Save -Mark __tls_get_addr calls with argument info. - msched-epilog Target Undocumented Var(TARGET_SCHED_PROLOG) Init(1) Save diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index df6fefd72b9..feeda9fcc0e 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4354,7 +4354,7 @@ The OpenRISC 1000 32-bit processor with delay slots. You can specify a default version for the @option{-mcpu=@var{cpu_type}} switch by using the configure option @option{--with-cpu-@var{cpu_type}}. -You will need GNU binutils 2.15 or newer. +You will need GNU binutils 2.20 or newer. @html
-- Alan Modra Australia Development Lab, IBM