aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/rs6000/rs6000.c2
-rw-r--r--gcc/config/rs6000/rs6000.h2
-rw-r--r--gcc/config/rs6000/rs6000.md24
4 files changed, 21 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b909d3e..99793e2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,7 +1,13 @@
2000-05-14 Geoffrey Keating <geoffk@cygnus.com>
- * rs6000.c (output_cbranch): Don't output prediction codes
- when old mnemonics are in use. Print register names
+ * config/rs6000/rs6000.md (movsi): Don't modify RTL in-place.
+ (movdi): Make similar to movsi.
+ * config/rs6000/rs6000.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): There
+ is no such thing as a DImode CONST_DOUBLE.
+ * config/rs6000/rs6000.c (output_toc): Likewise.
+
+ * config/rs6000/rs6000.c (output_cbranch): Don't output prediction
+ codes when old mnemonics are in use. Print register names
for cc registers when requested.
* optabs.c (expand_float): Don't allow mode widening that causes
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 104cc8d..7a8f1b7 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -6228,7 +6228,7 @@ output_toc (file, x, labelno)
return;
}
}
- else if (GET_MODE (x) == DImode
+ else if (GET_MODE (x) == VOIDmode
&& (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
&& ! (TARGET_NO_FP_IN_TOC && ! TARGET_MINIMAL_TOC))
{
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b0dcbf4..9959ab5 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2355,7 +2355,7 @@ extern int toc_initialized;
|| (! (TARGET_NO_FP_IN_TOC && ! TARGET_MINIMAL_TOC) \
&& GET_CODE (X) == CONST_DOUBLE \
&& (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
- || (TARGET_POWERPC64 && GET_MODE (X) == DImode)))))
+ || TARGET_POWERPC64))))
#if 0
&& BITS_PER_WORD == HOST_BITS_PER_INT)))
#endif
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 66a2350..1f54ec1 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -8087,7 +8087,8 @@
&& ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (
XEXP (operands[1], 0))))
{
- XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0));
+ operands[1] = gen_rtx_MEM (SImode,
+ create_TOC_reference (XEXP (operands[1], 0)));
MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set ();
RTX_UNCHANGING_P (operands[1]) = 1;
}
@@ -8709,27 +8710,24 @@
}
operands[1] = force_const_mem (DImode, operands[1]);
- if (TARGET_TOC && CONSTANT_POOL_EXPR_P (XEXP (operands[1], 0)))
+
+ if (TARGET_TOC
+ && CONSTANT_POOL_EXPR_P (XEXP (operands[1], 0))
+ && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (
+ XEXP (operands[1], 0))))
{
- XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0));
+ operands[1] = gen_rtx_MEM (DImode,
+ create_TOC_reference (XEXP (operands[1], 0)));
+
MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set ();
RTX_UNCHANGING_P (operands[1]) = 1;
}
+
if (! memory_address_p (DImode, XEXP (operands[1], 0))
&& ! reload_in_progress)
operands[1] = change_address (operands[1], DImode,
XEXP (operands[1], 0));
}
-
- if (TARGET_TOC
- && GET_CODE (operands[1]) == MEM
- && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
- {
- XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0));
- MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set ();
- RTX_UNCHANGING_P (operands[1]) = 1;
- }
-
}")
(define_insn "*movdi_32"