Commit f0e1f482 by Jakub Jelinek Committed by Jakub Jelinek

re PR bootstrap/4195 (mn10200-elf fails building libgcc __ffssi2)

	PR bootstrap/4195
	* genrecog.c (maybe_both_true_mode): Remove.
	(maybe_both_true_2, write_switch): Revert 2001-07-17 changes.
	* machmode.def (Pmode): Likewise.

From-SVN: r51115
parent c14b9960
2002-03-21 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/4195
* genrecog.c (maybe_both_true_mode): Remove.
(maybe_both_true_2, write_switch): Revert 2001-07-17 changes.
* machmode.def (Pmode): Likewise.
Thu Mar 21 01:55:06 EST 2002 John Wehle (john@feith.com) Thu Mar 21 01:55:06 EST 2002 John Wehle (john@feith.com)
* alias.c: (nonlocal_mentioned_p): Use for_each_rtx. * alias.c: (nonlocal_mentioned_p): Use for_each_rtx.
......
...@@ -238,8 +238,6 @@ static void validate_pattern ...@@ -238,8 +238,6 @@ static void validate_pattern
static struct decision *add_to_sequence static struct decision *add_to_sequence
PARAMS ((rtx, struct decision_head *, const char *, enum routine_type, int)); PARAMS ((rtx, struct decision_head *, const char *, enum routine_type, int));
static int maybe_both_true_mode
PARAMS ((enum machine_mode, enum machine_mode));
static int maybe_both_true_2 static int maybe_both_true_2
PARAMS ((struct decision_test *, struct decision_test *)); PARAMS ((struct decision_test *, struct decision_test *));
static int maybe_both_true_1 static int maybe_both_true_1
...@@ -1056,29 +1054,6 @@ add_to_sequence (pattern, last, position, insn_type, top) ...@@ -1056,29 +1054,6 @@ add_to_sequence (pattern, last, position, insn_type, top)
return sub; return sub;
} }
/* A subroutine of maybe_both_true; compares two modes.
Returns > 0 for "definitely both true" and < 0 for "maybe both true". */
static int
maybe_both_true_mode (m1, m2)
enum machine_mode m1, m2;
{
enum mode_class other_mode_class;
/* Pmode is not a distinct mode. We do know that it is
either MODE_INT or MODE_PARTIAL_INT though. */
if (m1 == Pmode)
other_mode_class = GET_MODE_CLASS (m2);
else if (m2 == Pmode)
other_mode_class = GET_MODE_CLASS (m1);
else
return m1 == m2;
return (other_mode_class == MODE_INT
|| other_mode_class == MODE_PARTIAL_INT
? -1 : 0);
}
/* A subroutine of maybe_both_true; examines only one test. /* A subroutine of maybe_both_true; examines only one test.
Returns > 0 for "definitely both true" and < 0 for "maybe both true". */ Returns > 0 for "definitely both true" and < 0 for "maybe both true". */
...@@ -1091,7 +1066,7 @@ maybe_both_true_2 (d1, d2) ...@@ -1091,7 +1066,7 @@ maybe_both_true_2 (d1, d2)
switch (d1->type) switch (d1->type)
{ {
case DT_mode: case DT_mode:
return maybe_both_true_mode (d1->u.mode, d2->u.mode); return d1->u.mode == d2->u.mode;
case DT_code: case DT_code:
return d1->u.code == d2->u.code; return d1->u.code == d2->u.code;
...@@ -1127,7 +1102,7 @@ maybe_both_true_2 (d1, d2) ...@@ -1127,7 +1102,7 @@ maybe_both_true_2 (d1, d2)
{ {
if (d2->type == DT_mode) if (d2->type == DT_mode)
{ {
if (maybe_both_true_mode (d1->u.pred.mode, d2->u.mode) == 0 if (d1->u.pred.mode != d2->u.mode
/* The mode of an address_operand predicate is the /* The mode of an address_operand predicate is the
mode of the memory, not the operand. It can only mode of the memory, not the operand. It can only
be used for testing the predicate, so we must be used for testing the predicate, so we must
...@@ -1910,9 +1885,6 @@ write_switch (start, depth) ...@@ -1910,9 +1885,6 @@ write_switch (start, depth)
|| type == DT_elt_zero_wide_safe) || type == DT_elt_zero_wide_safe)
{ {
const char *indent = ""; const char *indent = "";
/* Pmode may not be a compile-time constant. */
if (type == DT_mode && p->tests->u.mode == Pmode)
return p;
/* We cast switch parameter to integer, so we must ensure that the value /* We cast switch parameter to integer, so we must ensure that the value
fits. */ fits. */
...@@ -1956,10 +1928,6 @@ write_switch (start, depth) ...@@ -1956,10 +1928,6 @@ write_switch (start, depth)
if (nodes_identical_1 (p->tests, q->tests)) if (nodes_identical_1 (p->tests, q->tests))
goto case_done; goto case_done;
/* Pmode may not be a compile-time constant. */
if (type == DT_mode && p->tests->u.mode == Pmode)
goto case_done;
if (p != start && p->need_label && needs_label == NULL) if (p != start && p->need_label && needs_label == NULL)
needs_label = p; needs_label = p;
......
...@@ -165,14 +165,7 @@ EXTRA_CC_MODES ...@@ -165,14 +165,7 @@ EXTRA_CC_MODES
#undef CC #undef CC
/* The symbol Pmode stands for one of the above machine modes (usually SImode). /* The symbol Pmode stands for one of the above machine modes (usually SImode).
The tm file specifies which one. It is not a distinct mode. Nevertheless, The tm file specifies which one. It is not a distinct mode. */
while processing the md file, we wish to treat as a distinct mode so that
it is preserved intact through to the insn-foo.c files. This eliminates a
lot of redundancy in ports that support both 32-bit and 64-bit targets. */
#ifdef GENERATOR_FILE
#undef Pmode
DEF_MACHMODE (Pmode, "P", MODE_RANDOM, 0, 0, 0, VOIDmode, VOIDmode)
#endif
/* /*
Local variables: Local variables:
......
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