Just add -masm=intel asm dialect alternative.
2016-03-01 Uros Bizjak <[email protected]>
PR target/70027
* config/i386/i386.c (ix86_output_call_insn): Add -masm=intel
asm dialect alternatives to explicit GOTPCREL calls.
testsuite/ChangeLog:
2016-03-01 Uros Bizjak <[email protected]>
PR target/70027
* gcc.target/i386/pr70027.c: New test.
Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
Committed to mainline SVN.
Uros.
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c (revision 233856)
+++ config/i386/i386.c (working copy)
@@ -27293,14 +27293,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op
if (SIBLING_CALL_P (insn))
{
- if (direct_p && ix86_nopic_noplt_attribute_p (call_op))
- xasm = "%!jmp\t*%p0@GOTPCREL(%%rip)";
- else if (direct_p)
- xasm = "%!jmp\t%P0";
+ if (direct_p)
+ {
+ if (ix86_nopic_noplt_attribute_p (call_op))
+ xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR
%p0@GOTPCREL[rip]]}";
+ else
+ xasm = "%!jmp\t%P0";
+ }
/* SEH epilogue detection requires the indirect branch case
to include REX.W. */
else if (TARGET_SEH)
- xasm = "%!rex.W jmp %A0";
+ xasm = "%!rex.W jmp\t%A0";
else
xasm = "%!jmp\t%A0";
@@ -27338,10 +27341,13 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op
seh_nop_p = true;
}
- if (direct_p && ix86_nopic_noplt_attribute_p (call_op))
- xasm = "%!call\t*%p0@GOTPCREL(%%rip)";
- else if (direct_p)
- xasm = "%!call\t%P0";
+ if (direct_p)
+ {
+ if (ix86_nopic_noplt_attribute_p (call_op))
+ xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}";
+ else
+ xasm = "%!call\t%P0";
+ }
else
xasm = "%!call\t%A0";
Index: testsuite/gcc.target/i386/pr70027.c
===================================================================
--- testsuite/gcc.target/i386/pr70027.c (nonexistent)
+++ testsuite/gcc.target/i386/pr70027.c (working copy)
@@ -0,0 +1,11 @@
+/* { dg-do assemble } */
+/* { dg-options "-fno-plt -masm=intel" } */
+/* { dg-require-effective-target masm_intel } */
+
+extern void bar (int);
+
+void
+foo (void)
+{
+ bar (123);
+}