aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2003-02-27 01:24:06 +0000
committerAlan Modra <amodra@gcc.gnu.org>2003-02-27 11:54:06 +1030
commit6fc19dc9299b0fcbb9c2b2af125860488ae808d6 (patch)
treeed424f577a3241a320dd6309b374a592d80bf27b
parentf50e2df29117201a727eb38ef0130da0b33c5e53 (diff)
downloadgcc-6fc19dc9299b0fcbb9c2b2af125860488ae808d6.zip
gcc-6fc19dc9299b0fcbb9c2b2af125860488ae808d6.tar.gz
gcc-6fc19dc9299b0fcbb9c2b2af125860488ae808d6.tar.bz2
* config/rs6000/rs6000.md: Add TI constant splitter.
From-SVN: r63498
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.md26
2 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9cf8fa1..2bd7864 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index d60b9ac..ece5be1 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -8420,6 +8420,32 @@
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"))]