OSDN Git Service

* config/rs6000/rs6000.md (movsi): Don't modify RTL in-place.
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 May 2000 21:40:33 +0000 (21:40 +0000)
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 May 2000 21:40:33 +0000 (21:40 +0000)
(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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33898 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md

index b909d3e..99793e2 100644 (file)
@@ -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
index 104cc8d..7a8f1b7 100644 (file)
@@ -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))
     {
index b0dcbf4..9959ab5 100644 (file)
@@ -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
index 66a2350..1f54ec1 100644 (file)
          && 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;
        }
        }
 
       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"