* config/rs6000/rs6000.md: Add TI constant splitter.
authorAlan Modra <amodra@bigpond.net.au>
Thu, 27 Feb 2003 01:24:06 +0000 (01:24 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 27 Feb 2003 01:24:06 +0000 (11:54 +1030)
From-SVN: r63498

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 9cf8fa1..2bd7864 100644 (file)
@@ -1,3 +1,7 @@
+2003-02-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/rs6000/rs6000.md: Add TI constant splitter.
+
 2003-02-26  Alexandre Oliva  <aoliva@redhat.com>
 
        * builtins.c (purge_builtin_constant_p): Handle subreg of
@@ -333,6 +337,7 @@ Mon Feb 24 22:08:22 CET 2003  Jan Hubicka  <jh@suse.cz>
 
 2003-02-24  Alan Modra  <amodra@bigpond.net.au>
 
+       PR 9297, PR 9722
        * calls.c (store_one_arg): Revert 1999-02-16 change.  Revert
        2000-12-17 change.  Pass EXPAND_STACK_PARM to expand_expr.
        * expr.h (enum expand_modifier): Define EXPAND_STACK_PARM.
index d60b9ac..ece5be1 100644 (file)
   operands[5] = GEN_INT (CONST_DOUBLE_LOW  (operands[1]));
 }")
 
+(define_split
+  [(set (match_operand:TI 0 "gpc_reg_operand" "")
+       (match_operand:TI 1 "const_double_operand" ""))]
+  "TARGET_POWERPC64"
+  [(set (match_dup 2) (match_dup 4))
+   (set (match_dup 3) (match_dup 5))]
+  "
+{
+  operands[2] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN == 0,
+                                      TImode);
+  operands[3] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN != 0,
+                                      TImode);
+  if (GET_CODE (operands[1]) == CONST_DOUBLE)
+    {
+      operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
+      operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
+    }
+  else if (GET_CODE (operands[1]) == CONST_INT)
+    {
+      operands[4] = GEN_INT (- (INTVAL (operands[1]) < 0));
+      operands[5] = operands[1];
+    }
+  else
+    FAIL;
+}")
+
 (define_insn "*movdi_internal64"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,?f,f,m,r,*h,*h")
        (match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))]