diff options
author | John Wehle <john@feith.com> | 1999-04-13 17:47:40 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-04-13 10:47:40 -0700 |
commit | 63a4a903a76197650e672fe559ac654b7c85ec43 (patch) | |
tree | 2490ae80556c3fa9c6d242b2769d8b91b3377bf7 /gcc/config | |
parent | 15838c69df8023c5894680673d101e9a9d2ca807 (diff) | |
download | gcc-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.md | 34 |
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 |