Commit 7e08e190 by Jan Hubicka Committed by Jakub Jelinek

i386.h: Clarify CCNOmode description in comment.

	* config/i386/i386.h: Clarify CCNOmode description in comment.
	(EXTRA_CC_MODES): Remove CCRCmode.
	* config/i386/i386.c (ix86_comparison_operator): Remove CCRCmode.
	(put_condition_code, ix86_match_ccmode): Likewise.
	(ix86_cc_mode): Likewise.  Fix comment.
	(ix86_expand_strlensi_unroll_1): *rc patterns are gone.
	* config/i386/i386.md: Add unspec 12 description.
	(adddi3 split): Use unspec 12 instead of CCRCmode.
	(addsi3_carry_rc): Remove.
	(addsi3_cc, addqi3_cc): New patterns.
	(addsi_3): Swap operands, match CCZmode.
	(addsi_4): Rewritten.
	(addsi_5): Renamed from addsi_6.
	(addsi_6): Removed.
	(addhi_3): Swap operands, match CCZmode.
	(addhi_4): Rewritten.
	(addhi_5): Renamed from addhi_6.
	(addhi_6): Removed.
	(addqi_3): Swap operands, match CCZmode.
	(addqi_4): Rewritten.
	(addqi_5): Renamed from addqi_6.  Use =q constraint for clobber.
	(subsi3_carry_rc): Removed.
	(iorqi_3): Use =q constraint for clobber.
	(xorqi_cc_2): Likewise.
	(negdi2_1 split): Don't use CCRCmode, use ltu instead of gtu.
	(x86_movsicc_0_m1_rc): Removed.
	(cmp?i peepholes): Remove neg.  Use CCGCmode instead of CCRCmode.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r37166
parent 99fa3f5e
2000-10-31 Jan Hubicka <jh@suse.cz>
Jakub Jelinek <jakub@redhat.com>
* config/i386/i386.h: Clarify CCNOmode description in comment.
(EXTRA_CC_MODES): Remove CCRCmode.
* config/i386/i386.c (ix86_comparison_operator): Remove CCRCmode.
(put_condition_code, ix86_match_ccmode): Likewise.
(ix86_cc_mode): Likewise. Fix comment.
(ix86_expand_strlensi_unroll_1): *rc patterns are gone.
* config/i386/i386.md: Add unspec 12 description.
(adddi3 split): Use unspec 12 instead of CCRCmode.
(addsi3_carry_rc): Remove.
(addsi3_cc, addqi3_cc): New patterns.
(addsi_3): Swap operands, match CCZmode.
(addsi_4): Rewritten.
(addsi_5): Renamed from addsi_6.
(addsi_6): Removed.
(addhi_3): Swap operands, match CCZmode.
(addhi_4): Rewritten.
(addhi_5): Renamed from addhi_6.
(addhi_6): Removed.
(addqi_3): Swap operands, match CCZmode.
(addqi_4): Rewritten.
(addqi_5): Renamed from addqi_6. Use =q constraint for clobber.
(subsi3_carry_rc): Removed.
(iorqi_3): Use =q constraint for clobber.
(xorqi_cc_2): Likewise.
(negdi2_1 split): Don't use CCRCmode, use ltu instead of gtu.
(x86_movsicc_0_m1_rc): Removed.
(cmp?i peepholes): Remove neg. Use CCGCmode instead of CCRCmode.
2000-10-31 Joseph S. Myers <jsm28@cam.ac.uk> 2000-10-31 Joseph S. Myers <jsm28@cam.ac.uk>
* c-typeck.c (build_unary_op): If pedantic, pedwarn for increment * c-typeck.c (build_unary_op): If pedantic, pedwarn for increment
......
...@@ -1305,22 +1305,18 @@ ix86_comparison_operator (op, mode) ...@@ -1305,22 +1305,18 @@ ix86_comparison_operator (op, mode)
return 1; return 1;
case LT: case GE: case LT: case GE:
inmode = GET_MODE (XEXP (op, 0)); inmode = GET_MODE (XEXP (op, 0));
if (inmode == CCmode || inmode == CCGCmode || inmode == CCRCmode if (inmode == CCmode || inmode == CCGCmode
|| inmode == CCGOCmode || inmode == CCNOmode) || inmode == CCGOCmode || inmode == CCNOmode)
return 1; return 1;
return 0; return 0;
case LTU: case GTU: case LTU: case GTU: case LEU: case ORDERED: case UNORDERED: case GEU:
inmode = GET_MODE (XEXP (op, 0));
return inmode == CCmode;
case LEU: case ORDERED: case UNORDERED: case GEU:
inmode = GET_MODE (XEXP (op, 0)); inmode = GET_MODE (XEXP (op, 0));
if (inmode == CCmode || inmode == CCRCmode) if (inmode == CCmode)
return 1; return 1;
return 0; return 0;
case GT: case LE: case GT: case LE:
inmode = GET_MODE (XEXP (op, 0)); inmode = GET_MODE (XEXP (op, 0));
if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode)
|| inmode == CCRCmode)
return 1; return 1;
return 0; return 0;
default: default:
...@@ -3112,22 +3108,21 @@ put_condition_code (code, mode, reverse, fp, file) ...@@ -3112,22 +3108,21 @@ put_condition_code (code, mode, reverse, fp, file)
suffix = "ne"; suffix = "ne";
break; break;
case GT: case GT:
if (mode != CCmode && mode != CCNOmode && mode != CCGCmode if (mode != CCmode && mode != CCNOmode && mode != CCGCmode)
&& mode != CCRCmode)
abort (); abort ();
suffix = "g"; suffix = "g";
break; break;
case GTU: case GTU:
/* ??? Use "nbe" instead of "a" for fcmov losage on some assemblers. /* ??? Use "nbe" instead of "a" for fcmov losage on some assemblers.
Those same assemblers have the same but opposite losage on cmov. */ Those same assemblers have the same but opposite losage on cmov. */
if (mode != CCmode && mode != CCRCmode) if (mode != CCmode)
abort (); abort ();
suffix = fp ? "nbe" : "a"; suffix = fp ? "nbe" : "a";
break; break;
case LT: case LT:
if (mode == CCNOmode || mode == CCGOCmode) if (mode == CCNOmode || mode == CCGOCmode)
suffix = "s"; suffix = "s";
else if (mode == CCmode || mode == CCGCmode || mode == CCRCmode) else if (mode == CCmode || mode == CCGCmode)
suffix = "l"; suffix = "l";
else else
abort (); abort ();
...@@ -3140,33 +3135,26 @@ put_condition_code (code, mode, reverse, fp, file) ...@@ -3140,33 +3135,26 @@ put_condition_code (code, mode, reverse, fp, file)
case GE: case GE:
if (mode == CCNOmode || mode == CCGOCmode) if (mode == CCNOmode || mode == CCGOCmode)
suffix = "ns"; suffix = "ns";
else if (mode == CCmode || mode == CCGCmode || mode == CCRCmode) else if (mode == CCmode || mode == CCGCmode)
suffix = "ge"; suffix = "ge";
else else
abort (); abort ();
break; break;
case GEU: case GEU:
/* ??? As above. */ /* ??? As above. */
if (mode != CCmode && mode != CCRCmode) if (mode != CCmode)
abort (); abort ();
if (mode == CCRCmode) suffix = fp ? "nb" : "ae";
suffix = "be";
else
suffix = fp ? "nb" : "ae";
break; break;
case LE: case LE:
if (mode != CCmode && mode != CCGCmode && mode != CCNOmode if (mode != CCmode && mode != CCGCmode && mode != CCNOmode)
&& mode != CCRCmode)
abort (); abort ();
suffix = "le"; suffix = "le";
break; break;
case LEU: case LEU:
if (mode != CCmode) if (mode != CCmode)
abort (); abort ();
if (mode == CCRCmode) suffix = "be";
suffix = fp ? "nb" : "ae";
else
suffix = "be";
break; break;
case UNORDERED: case UNORDERED:
suffix = "p"; suffix = "p";
...@@ -4594,13 +4582,6 @@ ix86_match_ccmode (insn, req_mode) ...@@ -4594,13 +4582,6 @@ ix86_match_ccmode (insn, req_mode)
return 0; return 0;
break; break;
case CCmode: case CCmode:
if (req_mode == CCRCmode)
return 0;
goto no_carry;
case CCRCmode:
if (req_mode == CCmode)
return 0;
no_carry:
if (req_mode == CCGCmode) if (req_mode == CCGCmode)
return 0; return 0;
/* FALLTHRU */ /* FALLTHRU */
...@@ -4732,18 +4713,15 @@ ix86_cc_mode (code, op0, op1) ...@@ -4732,18 +4713,15 @@ ix86_cc_mode (code, op0, op1)
case NE: /* ZF!=0 */ case NE: /* ZF!=0 */
return CCZmode; return CCZmode;
/* Codes needing carry flag. */ /* Codes needing carry flag. */
case LTU: /* CF=1 */
case LEU: /* CF=1 | ZF=1 */
return CCmode;
case GEU: /* CF=0 */ case GEU: /* CF=0 */
case GTU: /* CF=0 & ZF=0 */ case GTU: /* CF=0 & ZF=0 */
if (GET_CODE (op1) == NEG) case LTU: /* CF=1 */
return CCRCmode; case LEU: /* CF=1 | ZF=1 */
return CCmode; return CCmode;
/* Codes possibly doable only with sign flag when /* Codes possibly doable only with sign flag when
comparing against zero. */ comparing against zero. */
case GE: /* SF=OF or SF=0 */ case GE: /* SF=OF or SF=0 */
case LT: /* SF<>OF or SF=0 */ case LT: /* SF<>OF or SF=1 */
if (op1 == const0_rtx) if (op1 == const0_rtx)
return CCGOCmode; return CCGOCmode;
else else
...@@ -6197,8 +6175,8 @@ ix86_expand_strlensi_unroll_1 (out, align_rtx, scratch) ...@@ -6197,8 +6175,8 @@ ix86_expand_strlensi_unroll_1 (out, align_rtx, scratch)
/* Avoid branch in fixing the byte. */ /* Avoid branch in fixing the byte. */
tmpreg = gen_lowpart (QImode, tmpreg); tmpreg = gen_lowpart (QImode, tmpreg);
emit_insn (gen_addqi3_ccrc (tmpreg, tmpreg, tmpreg)); emit_insn (gen_addqi3_cc (tmpreg, tmpreg, tmpreg));
emit_insn (gen_subsi3_carry_rc (out, out, GEN_INT (3))); emit_insn (gen_subsi3_carry (out, out, GEN_INT (3)));
emit_label (end_0_label); emit_label (end_0_label);
} }
......
...@@ -2478,8 +2478,8 @@ while (0) ...@@ -2478,8 +2478,8 @@ while (0)
equality comparisons are being done. equality comparisons are being done.
Add CCNO to indicate comparisons against zero that requires Add CCNO to indicate comparisons against zero that requires
No Overflow. Sign bit test is used instead and thus Overflow flag to be unset. Sign bit test is used instead and
can be used to form "a&b>0" type of tests. thus can be used to form "a&b>0" type of tests.
Add CCGC to indicate comparisons agains zero that allows Add CCGC to indicate comparisons agains zero that allows
unspecified garbage in the Carry flag. This mode is used unspecified garbage in the Carry flag. This mode is used
...@@ -2490,14 +2490,10 @@ while (0) ...@@ -2490,14 +2490,10 @@ while (0)
mode is used to simulate comparisons of (a-b) and (a+b) mode is used to simulate comparisons of (a-b) and (a+b)
against zero using sub/cmp/add operations. against zero using sub/cmp/add operations.
Add CCZ to indicate that only the Zero flag is valid. Add CCZ to indicate that only the Zero flag is valid. */
Add CCRC to indicate that carry flag is valid, but reversed.
*/
#define EXTRA_CC_MODES \ #define EXTRA_CC_MODES \
CC(CCGCmode, "CCGC") \ CC(CCGCmode, "CCGC") \
CC(CCRCmode, "CCRC") \
CC(CCGOCmode, "CCGOC") \ CC(CCGOCmode, "CCGOC") \
CC(CCNOmode, "CCNO") \ CC(CCNOmode, "CCNO") \
CC(CCZmode, "CCZ") \ CC(CCZmode, "CCZ") \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment