diff options
author | James Van Artsdalen <jrv@gnu.org> | 1992-08-28 06:24:41 +0000 |
---|---|---|
committer | James Van Artsdalen <jrv@gnu.org> | 1992-08-28 06:24:41 +0000 |
commit | 664921b428a4b0410d06003734d93520fa93fe5b (patch) | |
tree | 0b5687425eebac55e3a2c31e995b78437354c1e9 | |
parent | 1bbddf1116691381ec23f6a5c4908648784e868d (diff) | |
download | gcc-664921b428a4b0410d06003734d93520fa93fe5b.zip gcc-664921b428a4b0410d06003734d93520fa93fe5b.tar.gz gcc-664921b428a4b0410d06003734d93520fa93fe5b.tar.bz2 |
(movstrsi): Rewrite to handle operands correctly.
From-SVN: r1984
-rw-r--r-- | gcc/config/i386/i386.md | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f6b031c..e212126 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. |