*** empty log message ***
From-SVN: r1213
This commit is contained in:
parent
7c0891a18f
commit
b565a3163d
@ -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)
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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)) == '<' \
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
34
gcc/loop.c
34
gcc/loop.c
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user