aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-10-19 19:30:28 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-10-19 19:30:28 -0400
commit8f75773e1fc6ebd96c65db1156afaba4915f40df (patch)
tree2b697b05380509d993acb4f5097ee91ae608429e
parentdbe3df294330ee9d910328cece3578589daf0972 (diff)
downloadgcc-8f75773e1fc6ebd96c65db1156afaba4915f40df.zip
gcc-8f75773e1fc6ebd96c65db1156afaba4915f40df.tar.gz
gcc-8f75773e1fc6ebd96c65db1156afaba4915f40df.tar.bz2
({low_32_bit,offsettable_mem}_operand): The function low_32_bit_operand is now unused, delete it.
({low_32_bit,offsettable_mem}_operand): The function low_32_bit_operand is now unused, delete it. New function offsettable_mem_operand to determine if a memory address is offsettable. (float_conv_temp): New global. (output_epilog): Zero out float_conv_temp. From-SVN: r10481
-rw-r--r--gcc/config/rs6000/rs6000.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2e295a3..ca0a9b8 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -73,6 +73,10 @@ int rs6000_pic_labelno;
/* Whether a System V.4 varargs area was created. */
int rs6000_sysv_varargs_p;
+
+/* Temporary memory used to convert integer -> float */
+struct rtx_def *float_conv_temp;
+
/* Print the options used in the assembly file. */
@@ -481,22 +485,22 @@ easy_fp_constant (op, mode)
return (mode == SFmode
|| (low != 0 && input_operand (low, word_mode)));
}
-
-/* Return 1 if the operand is a constant whose low-order 32 bits are
- zero. */
+
+/* Return 1 if the operand is an offsettable memory operand. */
int
-low_32_bit_operand (op, mode)
+offsettable_mem_operand (op, mode)
register rtx op;
enum machine_mode mode;
{
- rtx low;
+ if (GET_CODE (op) != MEM)
+ return 0;
- if (GET_CODE (op) != CONST_DOUBLE && GET_CODE (op) != CONST_INT)
+ if (mode != GET_MODE (op))
return 0;
- low = operand_subword (op, 1, 0, mode);
- return low != 0 && GET_CODE (low) == CONST_INT && INTVAL (low) == 0;
+ return offsettable_address_p (reload_completed | reload_in_progress,
+ mode, XEXP (op, 0));
}
/* Return 1 if the operand is either a floating-point register, a pseudo
@@ -2750,6 +2754,9 @@ output_epilog (file, size)
char *load_reg = (TARGET_64BIT) ? "\tld %s,%d(%s)" : "\t{l|lwz} %s,%d(%s)\n";
rtx insn = get_last_insn ();
+ /* Forget about the float conversion temporary used. */
+ float_conv_temp = NULL_RTX;
+
/* If the last insn was a BARRIER, we don't have to write anything except
the trace table. */
if (GET_CODE (insn) == NOTE)