aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2009-07-23 11:51:33 +0200
committerUros Bizjak <uros@gcc.gnu.org>2009-07-23 11:51:33 +0200
commit33ecc1265b18d7029d3af54a0ee81bdcb7e5aea5 (patch)
tree5a9564d4d6bebdcd0ef9574c0844ed881fab2fc3
parent5d5e9775770b0e2dbfbe88ce19ecd3d7debe8975 (diff)
downloadgcc-33ecc1265b18d7029d3af54a0ee81bdcb7e5aea5.zip
gcc-33ecc1265b18d7029d3af54a0ee81bdcb7e5aea5.tar.gz
gcc-33ecc1265b18d7029d3af54a0ee81bdcb7e5aea5.tar.bz2
re PR target/40832 (gfortran 4.4.0 generates invalid .s file on solaris-x86 using -march=k8 for 130.socorro)
PR target/40832 * config/i386/i386.c (output_387_ffreep): Rewrite to return ASM_SHORT instead of .word. * config/i386/i386.md (*tls_global_dynamic_64): Use ASM_SHORT instead of .word in asm template. From-SVN: r149988
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/config/i386/i386.md2
3 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 774c458..746938a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2009-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/40832
+ * config/i386/i386.c (output_387_ffreep): Rewrite to return
+ ASM_SHORT instead of .word.
+ * config/i386/i386.md (*tls_global_dynamic_64): Use ASM_SHORT
+ instead of .word in asm template.
+
2009-07-22 Vladimir Makarov <vmakarov@redhat.com>
PR target/37488
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index c11c34a..f6c94e5 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12537,16 +12537,18 @@ static const char *
output_387_ffreep (rtx *operands ATTRIBUTE_UNUSED, int opno)
{
if (TARGET_USE_FFREEP)
-#if HAVE_AS_IX86_FFREEP
+#ifdef HAVE_AS_IX86_FFREEP
return opno ? "ffreep\t%y1" : "ffreep\t%y0";
#else
{
- static char retval[] = ".word\t0xc_df";
+ static char retval[32];
int regno = REGNO (operands[opno]);
gcc_assert (FP_REGNO_P (regno));
- retval[9] = '0' + (regno - FIRST_STACK_REG);
+ regno -= FIRST_STACK_REG;
+
+ snprintf (retval, sizeof (retval), ASM_SHORT "0xc%ddf", regno);
return retval;
}
#endif
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 47f2ce6..f50bcc19 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -16473,7 +16473,7 @@
(unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
UNSPEC_TLS_GD)]
"TARGET_64BIT"
- ".byte\t0x66\;lea{q}\t{%a1@TLSGD(%%rip), %%rdi|rdi, %a1@TLSGD[rip]}\;.word\t0x6666\;rex64\;call\t%P2"
+ { return ".byte\t0x66\n\tlea{q}\t{%a1@TLSGD(%%rip), %%rdi|rdi, %a1@TLSGD[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; }
[(set_attr "type" "multi")
(set_attr "length" "16")])