aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>1999-04-13 17:47:40 +0000
committerRichard Henderson <rth@gcc.gnu.org>1999-04-13 10:47:40 -0700
commit63a4a903a76197650e672fe559ac654b7c85ec43 (patch)
tree2490ae80556c3fa9c6d242b2769d8b91b3377bf7 /gcc/config
parent15838c69df8023c5894680673d101e9a9d2ca807 (diff)
downloadgcc-63a4a903a76197650e672fe559ac654b7c85ec43.zip
gcc-63a4a903a76197650e672fe559ac654b7c85ec43.tar.gz
gcc-63a4a903a76197650e672fe559ac654b7c85ec43.tar.bz2
John Wehle (john@feith.com)
John Wehle (john@feith.com) * i386.md (movdi): Add splitter. From-SVN: r26415
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md34
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 20901d3..f54565e 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1699,6 +1699,40 @@
[(set_attr "type" "integer,memory")
(set_attr "memory" "*,load")])
+(define_split
+ [(set (match_operand:DI 0 "nonimmediate_operand" "")
+ (match_operand:DI 1 "general_operand" ""))]
+ "reload_completed
+ && (offsettable_memref_p (operands[0])
+ || nonmemory_operand (operands[0], DImode))
+ && (offsettable_memref_p (operands[1])
+ || nonmemory_operand (operands[1], DImode))
+ && (! reg_overlap_mentioned_p (gen_lowpart (SImode, operands[0]),
+ operands[1])
+ || ! reg_overlap_mentioned_p (gen_highpart (SImode, operands[0]),
+ operands[1]))"
+ [(set (match_dup 2)
+ (match_dup 4))
+ (set (match_dup 3)
+ (match_dup 5))]
+ "
+{
+ split_di (&operands[0], 1, &operands[2], &operands[3]);
+ split_di (&operands[1], 1, &operands[4], &operands[5]);
+
+ if (reg_overlap_mentioned_p (operands[2], operands[1]))
+ {
+ rtx tmp;
+
+ tmp = operands[2];
+ operands[2] = operands[3];
+ operands[3] = tmp;
+
+ tmp = operands[4];
+ operands[4] = operands[5];
+ operands[5] = tmp;
+ }
+}")
;;- conversion instructions
;;- NONE