aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Van Artsdalen <jrv@gnu.org>1992-09-06 10:36:53 +0000
committerJames Van Artsdalen <jrv@gnu.org>1992-09-06 10:36:53 +0000
commit783cdf659a4dd424fd224fb2aaeb7cad2e5e4bcf (patch)
tree5d37e93860b34cf167d6abb333b9c3bc521a7d10 /gcc
parent8888fada8439249f9b4d181ed2f1f000f7739f38 (diff)
downloadgcc-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.md22
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