diff options
author | James Van Artsdalen <jrv@gnu.org> | 1992-09-06 10:36:53 +0000 |
---|---|---|
committer | James Van Artsdalen <jrv@gnu.org> | 1992-09-06 10:36:53 +0000 |
commit | 783cdf659a4dd424fd224fb2aaeb7cad2e5e4bcf (patch) | |
tree | 5d37e93860b34cf167d6abb333b9c3bc521a7d10 /gcc | |
parent | 8888fada8439249f9b4d181ed2f1f000f7739f38 (diff) | |
download | gcc-783cdf659a4dd424fd224fb2aaeb7cad2e5e4bcf.zip gcc-783cdf659a4dd424fd224fb2aaeb7cad2e5e4bcf.tar.gz gcc-783cdf659a4dd424fd224fb2aaeb7cad2e5e4bcf.tar.bz2 |
(cmpstrsi): Rewrite expander to handle operands correctly.
From-SVN: r2060
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386.md | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index e212126..3edce9f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3938,20 +3938,28 @@ (define_expand "cmpstrsi" [(parallel [(set (match_operand:QI 0 "general_operand" "") - (compare:CC - (mem:BLK (match_operand:BLK 1 "address_operand" "")) - (mem:BLK (match_operand:BLK 2 "address_operand" "")))) + (compare:CC (match_operand:BLK 1 "general_operand" "") + (match_operand:BLK 2 "general_operand" ""))) (use (match_operand:SI 3 "general_operand" "")) (use (match_operand:SI 4 "immediate_operand" "")) - (clobber (match_dup 1)) - (clobber (match_dup 2)) + (clobber (match_dup 5)) + (clobber (match_dup 6)) (clobber (match_dup 3))])] "" " { - operands[1] = copy_to_mode_reg (SImode, XEXP (operands[1], 0)); - operands[2] = copy_to_mode_reg (SImode, XEXP (operands[2], 0)); + rtx addr1, addr2; + + addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); + addr2 = copy_to_mode_reg (Pmode, XEXP (operands[2], 0)); operands[3] = copy_to_mode_reg (SImode, operands[3]); + + operands[5] = addr1; + operands[6] = addr2; + + operands[1] = gen_rtx (MEM, BLKmode, addr1); + operands[2] = gen_rtx (MEM, BLKmode, addr2); + }") ;; memcmp recognizers. The `cmpsb' opcode does nothing if the count is |