Commit 88e6fdcb by Richard Henderson Committed by Richard Henderson

recog.h (struct recog_data): Make dup_num...

        * recog.h (struct recog_data): Make dup_num, operand_address_p,
        n_operands, n_dups, n_alternatives `char' instead of `unsigned char'.
        (struct insn_data): Likewise with n_operands, n_dups,
        n_alternatives, output_format.
        * regclass.c (scan_one_insn): Cast n_operands to int before
        arithmetic inside comparison.

From-SVN: r29413
parent 5a26ca07
Tue Sep 14 16:20:24 1999 Richard Henderson <rth@cygnus.com>
* recog.h (struct recog_data): Make dup_num, operand_address_p,
n_operands, n_dups, n_alternatives `char' instead of `unsigned char'.
(struct insn_data): Likewise with n_operands, n_dups,
n_alternatives, output_format.
* regclass.c (scan_one_insn): Cast n_operands to int before
arithmetic inside comparison.
Tue Sep 14 15:13:36 1999 Richard Henderson <rth@cygnus.com> Tue Sep 14 15:13:36 1999 Richard Henderson <rth@cygnus.com>
* toplev.c (compile_function): Unconditionally emit nop. * toplev.c (compile_function): Unconditionally emit nop.
......
...@@ -156,21 +156,31 @@ struct recog_data ...@@ -156,21 +156,31 @@ struct recog_data
/* Gives the operand number that was duplicated in the Nth /* Gives the operand number that was duplicated in the Nth
duplicate-appearance of an operand. */ duplicate-appearance of an operand. */
unsigned char dup_num[MAX_DUP_OPERANDS]; char dup_num[MAX_DUP_OPERANDS];
#ifndef REGISTER_CONSTRAINTS #ifndef REGISTER_CONSTRAINTS
/* Nonzero if operand N should be an address. */ /* Nonzero if operand N should be an address. */
unsigned char operand_address_p[MAX_RECOG_OPERANDS]; char operand_address_p[MAX_RECOG_OPERANDS];
#endif #endif
/* ??? Note that these are `char' instead of `unsigned char' to (try to)
avoid certain lossage from K&R C, wherein `unsigned char' default
promotes to `unsigned int' instead of `int' as in ISO C. As of 1999,
the most common places to bootstrap from K&R C are SunOS and HPUX,
both of which have signed characters by default. The only other
supported natives that have both K&R C and unsigned characters are
ROMP and Irix 3, and neither have been seen for a while, but do
continue to consider unsignedness when performing arithmetic inside
a comparison. */
/* The number of operands of the insn. */ /* The number of operands of the insn. */
unsigned char n_operands; char n_operands;
/* The number of MATCH_DUPs in the insn. */ /* The number of MATCH_DUPs in the insn. */
unsigned char n_dups; char n_dups;
/* The number of alternatives in the constraints for the insn. */ /* The number of alternatives in the constraints for the insn. */
unsigned char n_alternatives; char n_alternatives;
}; };
extern struct recog_data recog_data; extern struct recog_data recog_data;
...@@ -225,10 +235,10 @@ struct insn_data ...@@ -225,10 +235,10 @@ struct insn_data
insn_gen_fn genfun; insn_gen_fn genfun;
const struct insn_operand_data *operand; const struct insn_operand_data *operand;
unsigned char n_operands; char n_operands;
unsigned char n_dups; char n_dups;
unsigned char n_alternatives; char n_alternatives;
unsigned char output_format; char output_format;
}; };
extern const struct insn_data insn_data[]; extern const struct insn_data insn_data[];
...@@ -901,7 +901,7 @@ scan_one_insn (insn, pass) ...@@ -901,7 +901,7 @@ scan_one_insn (insn, pass)
have been initialized. We must do this even if one operand have been initialized. We must do this even if one operand
is a constant--see addsi3 in m68k.md. */ is a constant--see addsi3 in m68k.md. */
for (i = 0; i < recog_data.n_operands - 1; i++) for (i = 0; i < (int) recog_data.n_operands - 1; i++)
if (constraints[i][0] == '%') if (constraints[i][0] == '%')
{ {
const char *xconstraints[MAX_RECOG_OPERANDS]; const char *xconstraints[MAX_RECOG_OPERANDS];
......
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