aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-11-06 14:47:43 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-11-06 09:47:43 -0500
commit03f5402658f745ab297ed24216311dcefe4ca633 (patch)
treef972cb555703b7e43d818f9f647b442e9974ef40 /gcc
parentbfd82dbfc72ead366d2aec6401d1e1057342d710 (diff)
downloadgcc-03f5402658f745ab297ed24216311dcefe4ca633.zip
gcc-03f5402658f745ab297ed24216311dcefe4ca633.tar.gz
gcc-03f5402658f745ab297ed24216311dcefe4ca633.tar.bz2
rtl.h (mem_for_const_double): New declaration.
* rtl.h (mem_for_const_double): New declaration. * varasm.c (mem_for_const_double): New function. * config/convex/convex.md (movdf): Use it. * config/m68k/hp320.h (LEGITIMATE_PIC_OPERAND_P): Likewise. * config/m68k/linux.h, config/m68k/m68k.h: Likewise. * config/m68k/m68kv4.h: Likewise. From-SVN: r46808
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/convex/convex.md2
-rw-r--r--gcc/config/m68k/hp320.h9
-rw-r--r--gcc/config/m68k/linux.h9
-rw-r--r--gcc/config/m68k/m68k.h10
-rw-r--r--gcc/config/m68k/m68kv4.h9
-rw-r--r--gcc/rtl.h1
-rw-r--r--gcc/varasm.c18
8 files changed, 47 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 98708ec..c62be21 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
Tue Nov 6 09:21:34 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+ * rtl.h (mem_for_const_double): New declaration.
+ * varasm.c (mem_for_const_double): New function.
+ * config/convex/convex.md (movdf): Use it.
+ * config/m68k/hp320.h (LEGITIMATE_PIC_OPERAND_P): Likewise.
+ * config/m68k/linux.h, config/m68k/m68k.h: Likewise.
+ * config/m68k/m68kv4.h: Likewise.
+
* config/alpha/alpha.h (SECONDARY_MEMORY_NEEDED): Adjust for addition
of new GP reg classes.
diff --git a/gcc/config/convex/convex.md b/gcc/config/convex/convex.md
index 31ee5ee..3ff36ed 100644
--- a/gcc/config/convex/convex.md
+++ b/gcc/config/convex/convex.md
@@ -206,7 +206,7 @@
(define_insn ""
[(set (match_operand:DF 0 "register_operand" "=d")
(match_operand:DF 1 "const_double_operand" "F"))]
- "CONST_DOUBLE_MEM (operands[1]) == const0_rtx"
+ "mem_for_const_double (operands[1]) == 0"
"ld.u %u1,%0\;ld.w %v1,%0"
[(set_attr "type" "xalu")])
diff --git a/gcc/config/m68k/hp320.h b/gcc/config/m68k/hp320.h
index ac87edd..6bb86d3 100644
--- a/gcc/config/m68k/hp320.h
+++ b/gcc/config/m68k/hp320.h
@@ -625,10 +625,11 @@ do { register int i; \
#undef LEGITIMATE_PIC_OPERAND_P
#define LEGITIMATE_PIC_OPERAND_P(X) \
((! symbolic_operand (X, VOIDmode) \
- && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \
- && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \
- && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \
- || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
+ && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \
+ && GET_CODE (mem_for_const_double (X)) == MEM \
+ && symbolic_operand (XEXP (mem_for_const_double (X), 0), \
+ VOIDmode))) \
+ || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
/* hpux8 and later have C++ compatible include files, so do not
diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h
index 6c3c8f0d..256d790 100644
--- a/gcc/config/m68k/linux.h
+++ b/gcc/config/m68k/linux.h
@@ -310,10 +310,11 @@ do { \
#undef LEGITIMATE_PIC_OPERAND_P
#define LEGITIMATE_PIC_OPERAND_P(X) \
((! symbolic_operand (X, VOIDmode) \
- && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \
- && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \
- && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \
- || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
+ && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \
+ && GET_CODE (mem_for_const_double (X)) == MEM \
+ && symbolic_operand (XEXP (mem_for_const_double (X), 0), \
+ VOIDmode))) \
+ || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
/* Turn off function cse if we are doing PIC. We always want function
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 914b9b4..fad6408 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -1459,11 +1459,11 @@ __transfer_from_trampoline () \
#define LEGITIMATE_PIC_OPERAND_P(X) \
((! symbolic_operand (X, VOIDmode) \
- && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \
- && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \
- && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), \
- VOIDmode))) \
- || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
+ && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \
+ && GET_CODE (mem_for_const_double (X)) == MEM \
+ && symbolic_operand (XEXP (mem_for_const_double (X), 0), \
+ VOIDmode))) \
+ || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
diff --git a/gcc/config/m68k/m68kv4.h b/gcc/config/m68k/m68kv4.h
index 4914cf4..e10b6e5 100644
--- a/gcc/config/m68k/m68kv4.h
+++ b/gcc/config/m68k/m68kv4.h
@@ -278,10 +278,11 @@ int switch_table_difference_label_flag;
#undef LEGITIMATE_PIC_OPERAND_P
#define LEGITIMATE_PIC_OPERAND_P(X) \
((! symbolic_operand (X, VOIDmode) \
- && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \
- && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \
- && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \
- || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
+ && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \
+ && GET_CODE (mem_for_const_double (X)) == MEM \
+ && symbolic_operand (XEXP (mem_for_const_double (X), 0), \
+ VOIDmode))) \
+ || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
/* Turn off function cse if we are doing PIC. We always want function call
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 6260f57..872d70d 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1273,6 +1273,7 @@ extern rtx gen_sequence PARAMS ((void));
/* In varasm.c */
extern rtx immed_double_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));
+extern rtx mem_for_const_double PARAMS ((rtx));
extern rtx force_const_mem PARAMS ((enum machine_mode, rtx));
/* In varasm.c */
diff --git a/gcc/varasm.c b/gcc/varasm.c
index ebdac3b..064a6ca 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -3756,6 +3756,24 @@ record_constant_rtx (mode, x)
return ptr;
}
+/* Given a constant rtx X, return a MEM for the location in memory at which
+ this constant has been placed. Return 0 if it not has been placed yet. */
+
+rtx
+mem_for_const_double (x)
+ rtx x;
+{
+ enum machine_mode mode = GET_MODE (x);
+ struct constant_descriptor *desc;
+
+ for (desc = const_rtx_hash_table[const_hash_rtx (mode, x)]; desc;
+ desc = desc->next)
+ if (compare_constant_rtx (mode, x, desc))
+ return desc->rtl;
+
+ return 0;
+}
+
/* Given a constant rtx X, make (or find) a memory constant for its value
and return a MEM rtx to refer to it in memory. */