*** empty log message ***

From-SVN: r1213
This commit is contained in:
Richard Kenner 1992-06-18 15:50:09 -04:00
parent 7c0891a18f
commit b565a3163d
7 changed files with 33 additions and 23 deletions

View File

@ -1170,7 +1170,7 @@ while (0)
For floating-point equality comparisons, CCFPEQmode should be used.
VOIDmode should be used in all other cases. */
#define SELECT_CC_MODE(OP,X) \
#define SELECT_CC_MODE(OP,X,Y) \
(GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
&& ((OP) == EQ || (OP) == NE) ? CCFPEQmode : CCmode)

View File

@ -1631,7 +1631,7 @@ gen_compare_reg (code, x, y)
enum rtx_code code;
rtx x, y;
{
enum machine_mode mode = SELECT_CC_MODE (code, x);
enum machine_mode mode = SELECT_CC_MODE (code, x, y);
rtx cc_reg = gen_rtx (REG, mode, 0);
emit_insn (gen_rtx (SET, VOIDmode, cc_reg,

View File

@ -1288,7 +1288,7 @@ while (0)
should be used. CC_NOOVmode should be used when the first operand is a
PLUS, MINUS, or NEG. CCmode should be used when no special processing is
needed. */
#define SELECT_CC_MODE(OP,X) \
#define SELECT_CC_MODE(OP,X,Y) \
(GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode : CCmode) \
/* A function address in a call instruction

View File

@ -1268,7 +1268,7 @@ struct rs6000_args {int words, fregno, nargs_prototype; };
CCEQmode should be used when we are doing an inequality comparison on
the result of a comparison. CCmode should be used in all other cases. */
#define SELECT_CC_MODE(OP,X) \
#define SELECT_CC_MODE(OP,X,Y) \
(GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode \
: (OP) == GTU || (OP) == LTU || (OP) == GEU || (OP) == LEU ? CCUNSmode \
: (((OP) == EQ || (OP) == NE) && GET_RTX_CLASS (GET_CODE (X)) == '<' \

View File

@ -2376,6 +2376,11 @@ subst_constants (loc, insn, map)
op_mode = GET_MODE (XEXP (x, 1));
new = simplify_relational_operation (code, op_mode,
XEXP (x, 0), XEXP (x, 1));
#ifdef FLOAT_STORE_FLAG_VALUE
if (new != 0 && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
new = ((new == const0_rtx) ? CONST0_RTX (GET_MODE (x))
: immed_real_const_1 (FLOAT_STORE_FLAG_VALUE, GET_MODE (x)));
#endif
break;
}

View File

@ -6254,18 +6254,32 @@ get_condition (jump, earliest)
enum machine_mode inner_mode = GET_MODE (SET_SRC (set));
if ((GET_CODE (SET_SRC (set)) == COMPARE
|| ((code == NE
|| (code == LT
&& GET_MODE_BITSIZE (inner_mode) <= HOST_BITS_PER_INT
&& (STORE_FLAG_VALUE
& (1 << (GET_MODE_BITSIZE (inner_mode) - 1)))))
|| (((code == NE
|| (code == LT
&& GET_MODE_CLASS (inner_mode) == MODE_INT
&& GET_MODE_BITSIZE (inner_mode) <= HOST_BITS_PER_INT
&& (STORE_FLAG_VALUE
& (1 << (GET_MODE_BITSIZE (inner_mode) - 1))))
#ifdef FLOAT_STORE_FLAG_VALUE
|| (code == LT
&& GET_MODE_CLASS (inner_mode) == MODE_FLOAT
&& FLOAT_STORE_FLAG_VALUE < 0)
#endif
))
&& GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<')))
x = SET_SRC (set);
else if ((code == EQ
|| (code == GE
&& GET_MODE_BITSIZE (inner_mode) <= HOST_BITS_PER_INT
&& (STORE_FLAG_VALUE
& (1 << (GET_MODE_BITSIZE (inner_mode) - 1)))))
else if (((code == EQ
|| (code == GE
&& GET_MODE_BITSIZE (inner_mode) <= HOST_BITS_PER_INT
&& GET_MODE_CLASS (inner_mode) == MODE_INT
&& (STORE_FLAG_VALUE
& (1 << (GET_MODE_BITSIZE (inner_mode) - 1))))
#ifdef FLOAT_STORE_FLAG_VALUE
|| (code == GE
&& GET_MODE_CLASS (inner_mode) == MODE_FLOAT
&& FLOAT_STORE_FLAG_VALUE < 0)
#eneif
))
&& GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<')
{
/* We might have reversed a LT to get a GE here. But this wasn't

View File

@ -194,15 +194,6 @@ extern char * strrchr ();
#define STRINGIFY(STRING) "STRING"
#endif
/* POSIX systems will not have definitions for WIFEXITED or WEXITSTATUS.
Define them correctly and so that they work for all environments. */
#undef WIFEXITED
#define WIFEXITED(status_word) ((*((int *)&status_word) & 0xff) == 0x00)
#undef WEXITSTATUS
#define WEXITSTATUS(status_word) ((*((int *)&status_word) & 0xff00) >> 8)
/* Define a default place to find the SYSCALLS.X file. */
#ifndef STD_PROTO_DIR