(cmpstrM patterns): Compare strings of unsigned chars, not strings of
authorJames Van Artsdalen <jrv@gnu.org>
Mon, 12 Oct 1992 21:38:15 +0000 (21:38 +0000)
committerJames Van Artsdalen <jrv@gnu.org>
Mon, 12 Oct 1992 21:38:15 +0000 (21:38 +0000)
signed chars.

From-SVN: r2414

gcc/config/i386/i386.md

index dfd8fa6518c5be6b9761a49c26a724708c5c4eda..f7dd53fe4e70fac4f8afca2e8314722c9142f943 100644 (file)
 }")
 
 (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" ""))
 ;; 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"))
   ""
   "*
 {
-  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);
 
                     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;
 }")
 {
   rtx xops[2];
 
+  cc_status.flags |= CC_NOT_SIGNED;
+
   xops[0] = gen_rtx (REG, QImode, 0);
   xops[1] = CONST0_RTX (QImode);