---
gcc/config/s390/s390.cc | 16 +++-------------
gcc/config/s390/s390.md | 8 ++++----
.../gcc.target/s390/call-z10-pic-nodatarel.c | 6 ++----
gcc/testsuite/gcc.target/s390/call-z10-pic.c | 6 ++----
gcc/testsuite/gcc.target/s390/call-z10.c | 14 +++++---------
.../gcc.target/s390/call-z9-pic-nodatarel.c | 6 ++----
gcc/testsuite/gcc.target/s390/call-z9-pic.c | 6 ++----
gcc/testsuite/gcc.target/s390/call-z9.c | 14 +++++---------
8 files changed, 25 insertions(+), 51 deletions(-)
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 86a5f059b85..1d96df49fea 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -8585,7 +8585,7 @@ print_operand_address (FILE *file, rtx addr)
'E': print opcode suffix for branch on index instruction.
'G': print the size of the operand in bytes.
'J': print tls_load/tls_gdcall/tls_ldcall suffix
- 'K': print @PLT suffix for call targets and load address values.
+ 'K': print @PLT suffix for branch targets; do not use with larl.
'M': print the second word of a TImode operand.
'N': print the second word of a DImode operand.
'O': print only the displacement of a memory reference or address.
@@ -8854,19 +8854,9 @@ print_operand (FILE *file, rtx x, int code)
call even static functions via PLT. ld will optimize @PLT away for
normal code, and keep it for patches.
- Do not indiscriminately add @PLT in 31-bit mode due to the %r12
- restriction, use UNSPEC_PLT31 instead.
-
@PLT only makes sense for functions, data is taken care of by
- -mno-pic-data-is-text-relative.
-
- Adding @PLT interferes with handling of weak symbols in non-PIC code,
- since their addresses are loaded with larl, which then always produces
- a non-NULL result, so skip them here as well. */
- if (TARGET_64BIT
- && GET_CODE (x) == SYMBOL_REF
- && SYMBOL_REF_FUNCTION_P (x)
- && !(SYMBOL_REF_WEAK (x) && !flag_pic))
+ -mno-pic-data-is-text-relative. */
+ if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x))
fprintf (file, "@PLT");
return;
}
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index c164ea72c78..9d495803387 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -2001,7 +2001,7 @@
vlgvg\t%0,%v1,0
vleg\t%v0,%1,0
vsteg\t%v1,%0,0
- larl\t%0,%1%K1"
+ larl\t%0,%1"
[(set_attr "op_type"
"RI,RI,RI,RI,RI,RIL,RIL,RIL,RRE,RRE,RRE,RXY,RIL,RRE,RXY,
RXY,RR,RX,RXY,RX,RXY,RIL,SIL,*,*,RS,RS,VRI,VRR,VRS,VRS,
VRX,VRX,RIL")
@@ -2390,7 +2390,7 @@
(match_operand:SI 1 "larl_operand" "X"))]
"!TARGET_64BIT
&& !FP_REG_P (operands[0])"
- "larl\t%0,%1%K1"
+ "larl\t%0,%1"
[(set_attr "op_type" "RIL")
(set_attr "type" "larl")
(set_attr "z10prop" "z10_fwd_A1")
@@ -11735,7 +11735,7 @@
[(set (match_operand 0 "register_operand" "=a")
(unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_MAIN_BASE))]
"GET_MODE (operands[0]) == Pmode"
- "larl\t%0,%1%K1"
+ "larl\t%0,%1"
[(set_attr "op_type" "RIL")
(set_attr "type" "larl")
(set_attr "z10prop" "z10_fwd_A1")
@@ -11755,7 +11755,7 @@
[(set (match_operand 0 "register_operand" "=a")
(unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_RELOAD_BASE))]
"GET_MODE (operands[0]) == Pmode"
- "larl\t%0,%1%K1"
+ "larl\t%0,%1"
[(set_attr "op_type" "RIL")
(set_attr "type" "larl")
(set_attr "z10prop" "z10_fwd_A1")])
diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
index 49984614bc6..6df0c75584f 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
@@ -7,10 +7,8 @@
/* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
/* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } }
} } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } }
} */
diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic.c
b/gcc/testsuite/gcc.target/s390/call-z10-pic.c
index 210c56cc4ca..30145d5b760 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10-pic.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10-pic.c
@@ -7,10 +7,8 @@
/* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
/* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } }
} } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } }
} */
diff --git a/gcc/testsuite/gcc.target/s390/call-z10.c
b/gcc/testsuite/gcc.target/s390/call-z10.c
index 2d7dc735df4..d4eab4ff89f 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10.c
@@ -3,17 +3,13 @@
#include "call.h"
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
/* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
index b1ae318d3e9..fe515bf1903 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
@@ -6,10 +6,8 @@
/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic.c
b/gcc/testsuite/gcc.target/s390/call-z9-pic.c
index a89e78d8df8..43e1c2f7cb3 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9-pic.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9-pic.c
@@ -6,10 +6,8 @@
/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9.c
b/gcc/testsuite/gcc.target/s390/call-z9.c
index 21d035aecb6..b755f33498a 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9.c
@@ -3,17 +3,13 @@
#include "call.h"
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 }
} } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } }
*/
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } }
} */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
/* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
/* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */