Commit c3c637e3 by Graham Stott Committed by Roger Sayle

i386.c (any_fp_register_operand, [...]): New predicate functions.

2002-09-12  Graham Stott  <graham.stott@btinternet.com>
            Roger Sayle  <roger@eyesopen.com>

	* i386.c (any_fp_register_operand, fp_register_operand,
	register_and_not_any_fp_reg_operand, register_and_not_fp_reg_operand):
	New predicate functions.
	* i386-protos.h:  Add their prototypes.
	* i386.h: Add them to PREDICATE_CODES.
	* i386.md ("*pushsf_rex64"+2, "*pushsf_rex64"+3, "*pushdf_integer"+1,
	"*pushdf_integer"+2, "*pushtf_integer"+1, "*pushtf_integer"+2,
	"*pushtf_integer"+3, "*pushtf_integer"+4, "*dummy_extendsfdf2"+1,
	"*dummy_extendsfdf2"+2, "*dummy_extendsfxf2"+1,
	"*dummy_extendsftf2"+1, "*dummy_extendsftf2"+2,
	"*dummy_extenddfxf2"+1, "*dummy_extenddftf2"+1,
	"*dummy_extenddftf2"+2, "*negsf2_if"+1, "*negsf2_if"+2,
	"*negdf2_if_rex64"+1, "*negdf2_if_rex64"+2, "*negxf2_if"+1,
	"*negxf2_if"+2, "*negtf2_if"+1, "*negtf2_if"+2, "*abssf2_if"+1,
	"*abssf2_if"+2, "*absdf2_if_rex64"+1, "*absdf2_if_rex64"+2,
	"*absxf2_if"+1, "*absxf2_if"+2, "*abstf2_if"+1, "*abstf2_if"+2):
	Use these new predicates to simplify and correct the use of
	FP_REG_P, ANY_FP_REG_P, FP_REGNO_P and any ANY_FP_REGNO_P.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>

From-SVN: r57068
parent 236a2ac8
2002-09-12 Graham Stott <graham.stott@btinternet.com>
Roger Sayle <roger@eyesopen.com>
* i386.c (any_fp_register_operand, fp_register_operand,
register_and_not_any_fp_reg_operand, register_and_not_fp_reg_operand):
New predicate functions.
* i386-protos.h: Add their prototypes.
* i386.h: Add them to PREDICATE_CODES.
* i386.md ("*pushsf_rex64"+2, "*pushsf_rex64"+3, "*pushdf_integer"+1,
"*pushdf_integer"+2, "*pushtf_integer"+1, "*pushtf_integer"+2,
"*pushtf_integer"+3, "*pushtf_integer"+4, "*dummy_extendsfdf2"+1,
"*dummy_extendsfdf2"+2, "*dummy_extendsfxf2"+1,
"*dummy_extendsftf2"+1, "*dummy_extendsftf2"+2,
"*dummy_extenddfxf2"+1, "*dummy_extenddftf2"+1,
"*dummy_extenddftf2"+2, "*negsf2_if"+1, "*negsf2_if"+2,
"*negdf2_if_rex64"+1, "*negdf2_if_rex64"+2, "*negxf2_if"+1,
"*negxf2_if"+2, "*negtf2_if"+1, "*negtf2_if"+2, "*abssf2_if"+1,
"*abssf2_if"+2, "*absdf2_if_rex64"+1, "*absdf2_if_rex64"+2,
"*absxf2_if"+1, "*absxf2_if"+2, "*abstf2_if"+1, "*abstf2_if"+2):
Use these new predicates to simplify and correct the use of
FP_REG_P, ANY_FP_REG_P, FP_REGNO_P and any ANY_FP_REGNO_P.
2002-09-12 Jason Merrill <jason@redhat.com> 2002-09-12 Jason Merrill <jason@redhat.com>
* diagnostic.c (output_add_identifier): New fn. * diagnostic.c (output_add_identifier): New fn.
......
...@@ -42,6 +42,12 @@ extern int standard_80387_constant_p PARAMS ((rtx)); ...@@ -42,6 +42,12 @@ extern int standard_80387_constant_p PARAMS ((rtx));
extern int standard_sse_constant_p PARAMS ((rtx)); extern int standard_sse_constant_p PARAMS ((rtx));
extern int symbolic_reference_mentioned_p PARAMS ((rtx)); extern int symbolic_reference_mentioned_p PARAMS ((rtx));
extern int any_fp_register_operand PARAMS ((rtx, enum machine_mode));
extern int register_and_not_any_fp_reg_operand PARAMS ((rtx, enum machine_mode));
extern int fp_register_operand PARAMS ((rtx, enum machine_mode));
extern int register_and_not_fp_reg_operand PARAMS ((rtx, enum machine_mode));
extern int x86_64_general_operand PARAMS ((rtx, enum machine_mode)); extern int x86_64_general_operand PARAMS ((rtx, enum machine_mode));
extern int x86_64_szext_general_operand PARAMS ((rtx, enum machine_mode)); extern int x86_64_szext_general_operand PARAMS ((rtx, enum machine_mode));
extern int x86_64_nonmemory_operand PARAMS ((rtx, enum machine_mode)); extern int x86_64_nonmemory_operand PARAMS ((rtx, enum machine_mode));
......
...@@ -2754,6 +2754,43 @@ ix86_va_arg (valist, type) ...@@ -2754,6 +2754,43 @@ ix86_va_arg (valist, type)
return addr_rtx; return addr_rtx;
} }
/* Return nonzero if OP is either a i387 or SSE fp register. */
int
any_fp_register_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return ANY_FP_REG_P (op);
}
/* Return nonzero if OP is an i387 fp register. */
int
fp_register_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return FP_REG_P (op);
}
/* Return nonzero if OP is a non-fp register_operand. */
int
register_and_not_any_fp_reg_operand (op, mode)
rtx op;
enum machine_mode mode;
{
return register_operand (op, mode) && !ANY_FP_REG_P (op);
}
/* Return nonzero of OP is a register operand other than an
i387 fp register. */
int
register_and_not_fp_reg_operand (op, mode)
rtx op;
enum machine_mode mode;
{
return register_operand (op, mode) && !FP_REG_P (op);
}
/* Return nonzero if OP is general operand representable on x86_64. */ /* Return nonzero if OP is general operand representable on x86_64. */
int int
......
...@@ -3203,7 +3203,11 @@ do { \ ...@@ -3203,7 +3203,11 @@ do { \
{"global_dynamic_symbolic_operand", {SYMBOL_REF}}, \ {"global_dynamic_symbolic_operand", {SYMBOL_REF}}, \
{"local_dynamic_symbolic_operand", {SYMBOL_REF}}, \ {"local_dynamic_symbolic_operand", {SYMBOL_REF}}, \
{"initial_exec_symbolic_operand", {SYMBOL_REF}}, \ {"initial_exec_symbolic_operand", {SYMBOL_REF}}, \
{"local_exec_symbolic_operand", {SYMBOL_REF}}, {"local_exec_symbolic_operand", {SYMBOL_REF}}, \
{"any_fp_register_operand", {REG}}, \
{"register_and_not_any_fp_reg_operand", {REG}}, \
{"fp_register_operand", {REG}}, \
{"register_and_not_fp_reg_operand", {REG}}, \
/* A list of predicates that do special things with modes, and so /* A list of predicates that do special things with modes, and so
should not elicit warnings for VOIDmode match_operand. */ should not elicit warnings for VOIDmode match_operand. */
......
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