OSDN Git Service

* config/mips/mips.c (mips_move_2words): Split doubles if ISA >= 3,
authorgavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Oct 1999 12:18:56 +0000 (12:18 +0000)
committergavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Oct 1999 12:18:56 +0000 (12:18 +0000)
!TARGET_64BIT, and destination is not an FP register.

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

gcc/ChangeLog
gcc/config/mips/mips.c

index c94f985..5f257cc 100644 (file)
@@ -1,3 +1,9 @@
+Mon Oct  4 16:48:16 1999  Diego Novillo <dnovillo@cygnus.com>
+                          Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+       * config/mips/mips.c (mips_move_2words): Split doubles if
+       ISA >= 3, !TARGET_64BIT, and destination is not an FP register.
+
 Mon Oct  4 21:47:31 1999  Richard Henderson  <rth@cygnus.com>
 
        * genrecog.c (struct decision_test): New.
index f24452b..b760292 100644 (file)
@@ -2214,7 +2214,17 @@ mips_move_2words (operands, insn)
                    }
                  else
 #endif
-                   ret = "li.d\t%0,%1";
+                   /* GNU as emits 64-bit code for li.d if the ISA is 3
+                      or higher.  For !TARGET_64BIT && gp registers we
+                      need to avoid this by using two li instructions
+                      instead.  */
+                   if (mips_isa >= 3 && !TARGET_64BIT && !FP_REG_P (regno0))
+                     {
+                       split_double (op1, operands + 2, operands + 3);
+                       ret = "li\t%0,%2\n\tli\t%D0,%3";
+                     }
+                   else
+                     ret = "li.d\t%0,%1";
                }
 
              else if (TARGET_64BIT)