From 664921b428a4b0410d06003734d93520fa93fe5b Mon Sep 17 00:00:00 2001 From: James Van Artsdalen Date: Fri, 28 Aug 1992 06:24:41 +0000 Subject: [PATCH] (movstrsi): Rewrite to handle operands correctly. From-SVN: r1984 --- gcc/config/i386/i386.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f6b031cdf35..e2121260747 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3870,20 +3870,29 @@ "nop") (define_expand "movstrsi" - [(parallel [(set (mem:BLK (match_operand:BLK 0 "address_operand" "")) - (mem:BLK (match_operand:BLK 1 "address_operand" ""))) + [(parallel [(set (match_operand:BLK 0 "memory_operand" "") + (match_operand:BLK 1 "memory_operand" "")) (use (match_operand:SI 2 "const_int_operand" "")) (use (match_operand:SI 3 "const_int_operand" "")) (clobber (match_scratch:SI 4 "")) - (clobber (match_dup 0)) - (clobber (match_dup 1))])] + (clobber (match_dup 5)) + (clobber (match_dup 6))])] "" " { + rtx addr0, addr1; + if (GET_CODE (operands[2]) != CONST_INT) FAIL; - operands[0] = copy_to_mode_reg (SImode, XEXP (operands[0], 0)); - operands[1] = copy_to_mode_reg (SImode, XEXP (operands[1], 0)); + + addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); + addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); + + operands[5] = addr0; + operands[6] = addr1; + + operands[0] = gen_rtx (MEM, BLKmode, addr0); + operands[1] = gen_rtx (MEM, BLKmode, addr1); }") ;; It might seem that operands 0 & 1 could use predicate register_operand. -- 2.30.2