summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-26 06:49:57 +0000
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-26 06:49:57 +0000
commit495a87f45d50288c58caeae15898764a7149a220 (patch)
tree041850d2ac0283600e53adf93284b676fbb0226f
parent3a5502f923bb731124b8b65a5ec591de26d8d913 (diff)
downloadppe42-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/ChangeLog5
-rw-r--r--gcc/config/s390/s390.md43
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).
;
OpenPOWER on IntegriCloud