diff options
author | James Van Artsdalen <jrv@gnu.org> | 1992-10-12 21:38:15 +0000 |
---|---|---|
committer | James Van Artsdalen <jrv@gnu.org> | 1992-10-12 21:38:15 +0000 |
commit | 981661494522a10d35c902192629f28189372773 (patch) | |
tree | 3fdced49c46528634c15f68de2680323902d6e4f | |
parent | b329456eff9087db32b6dd24e8300ef59821f07c (diff) | |
download | gcc-981661494522a10d35c902192629f28189372773.zip gcc-981661494522a10d35c902192629f28189372773.tar.gz gcc-981661494522a10d35c902192629f28189372773.tar.bz2 |
(cmpstrM patterns): Compare strings of unsigned chars, not strings of
signed chars.
From-SVN: r2414
-rw-r--r-- | gcc/config/i386/i386.md | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index dfd8fa6..f7dd53f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3976,7 +3976,7 @@ }") (define_expand "cmpstrsi" - [(parallel [(set (match_operand:QI 0 "general_operand" "") + [(parallel [(set (match_operand:SI 0 "general_operand" "") (compare:CC (match_operand:BLK 1 "general_operand" "") (match_operand:BLK 2 "general_operand" ""))) (use (match_operand:SI 3 "general_operand" "")) @@ -4013,7 +4013,7 @@ ;; code to handle zero-length compares. (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=&q") + [(set (match_operand:SI 0 "general_operand" "=&r") (compare:CC (mem:BLK (match_operand:SI 1 "address_operand" "S")) (mem:BLK (match_operand:SI 2 "address_operand" "D")))) (use (match_operand:SI 3 "register_operand" "c")) @@ -4024,12 +4024,12 @@ "" "* { - rtx xops[3], label; + rtx xops[4], label; label = gen_label_rtx (); output_asm_insn (\"cld\", operands); - output_asm_insn (AS2 (xor%B0,%0,%0), operands); + output_asm_insn (AS2 (xor%L0,%0,%0), operands); output_asm_insn (\"repz\;cmps%B2\", operands); output_asm_insn (\"je %l0\", &label); @@ -4038,9 +4038,12 @@ gen_rtx (PLUS, SImode, operands[1], constm1_rtx)); xops[2] = gen_rtx (MEM, QImode, gen_rtx (PLUS, SImode, operands[2], constm1_rtx)); + xops[3] = operands[3]; - output_asm_insn (AS2 (mov%B0,%1,%b0), xops); - output_asm_insn (AS2 (sub%B0,%2,%b0), xops); + output_asm_insn (AS2 (movz%B1%L0,%1,%0), xops); + output_asm_insn (AS2 (movz%B2%L3,%2,%3), xops); + + output_asm_insn (AS2 (sub%L0,%3,%0), xops); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (label)); RET; }") @@ -4059,6 +4062,8 @@ { rtx xops[2]; + cc_status.flags |= CC_NOT_SIGNED; + xops[0] = gen_rtx (REG, QImode, 0); xops[1] = CONST0_RTX (QImode); |