diff options
| author | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-26 06:49:57 +0000 |
|---|---|---|
| committer | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-26 06:49:57 +0000 |
| commit | 495a87f45d50288c58caeae15898764a7149a220 (patch) | |
| tree | 041850d2ac0283600e53adf93284b676fbb0226f | |
| parent | 3a5502f923bb731124b8b65a5ec591de26d8d913 (diff) | |
| download | ppe42-gcc-495a87f45d50288c58caeae15898764a7149a220.tar.gz ppe42-gcc-495a87f45d50288c58caeae15898764a7149a220.zip | |
2005-08-26 Adrian Straetling <straetling@de.ibm.com>
* config/s390/s390.md: ("movstr", "*movstr"): Add patterns.
(UNSPEC_MVST): New constant.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103516 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/s390/s390.md | 43 |
2 files changed, 48 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 84b1da07761..837d6e7fc8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-08-26 Adrian Straetling <straetling@de.ibm.com> + + * config/s390/s390.md: ("movstr", "*movstr"): Add patterns. + (UNSPEC_MVST): New constant. + 2005-08-26 Andreas Krebbel <krebbel1@de.ibm.com> * config/s390/predicates.md ("shift_count_operand", "setmem_operand"): diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index e4d7097606b..84e58d7838d 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -130,6 +130,7 @@ ; String Functions (UNSPEC_SRST 600) + (UNSPEC_MVST 601) ; Stack Smashing Protector (UNSPEC_SP_SET 700) @@ -1944,6 +1945,48 @@ (set_attr "type" "vs")]) ; +; movstr instruction pattern. +; + +(define_expand "movstr" + [(set (reg:SI 0) (const_int 0)) + (parallel + [(clobber (match_dup 3)) + (set (match_operand:BLK 1 "memory_operand" "") + (match_operand:BLK 2 "memory_operand" "")) + (set (match_operand 0 "register_operand" "") + (unspec [(match_dup 1) + (match_dup 2) + (reg:SI 0)] UNSPEC_MVST)) + (clobber (reg:CC CC_REGNUM))])] + "" +{ + rtx addr1 = gen_reg_rtx (Pmode); + rtx addr2 = gen_reg_rtx (Pmode); + + emit_move_insn (addr1, force_operand (XEXP (operands[1], 0), NULL_RTX)); + emit_move_insn (addr2, force_operand (XEXP (operands[2], 0), NULL_RTX)); + operands[1] = replace_equiv_address_nv (operands[1], addr1); + operands[2] = replace_equiv_address_nv (operands[2], addr2); + operands[3] = addr2; +}) + +(define_insn "*movstr" + [(clobber (match_operand:P 2 "register_operand" "=d")) + (set (mem:BLK (match_operand:P 1 "register_operand" "0")) + (mem:BLK (match_operand:P 3 "register_operand" "2"))) + (set (match_operand:P 0 "register_operand" "=d") + (unspec [(mem:BLK (match_dup 1)) + (mem:BLK (match_dup 3)) + (reg:SI 0)] UNSPEC_MVST)) + (clobber (reg:CC CC_REGNUM))] + "" + "mvst\t%1,%2\;jo\t.-4" + [(set_attr "length" "8") + (set_attr "type" "vs")]) + + +; ; movmemM instruction pattern(s). ; |

