diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2001-11-06 14:47:43 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2001-11-06 09:47:43 -0500 |
commit | 03f5402658f745ab297ed24216311dcefe4ca633 (patch) | |
tree | f972cb555703b7e43d818f9f647b442e9974ef40 /gcc | |
parent | bfd82dbfc72ead366d2aec6401d1e1057342d710 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/convex/convex.md | 2 | ||||
-rw-r--r-- | gcc/config/m68k/hp320.h | 9 | ||||
-rw-r--r-- | gcc/config/m68k/linux.h | 9 | ||||
-rw-r--r-- | gcc/config/m68k/m68k.h | 10 | ||||
-rw-r--r-- | gcc/config/m68k/m68kv4.h | 9 | ||||
-rw-r--r-- | gcc/rtl.h | 1 | ||||
-rw-r--r-- | gcc/varasm.c | 18 |
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 @@ -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. */ |