Commit 69fcc21d by Richard Earnshaw

(EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Zmode.

(SELECT_CC_MODE): return CC_Zmode if the operand is QImode.  Allow LT
and GE comparisons in CC_NOOVmode.
(PREDICATE_CODES): add offsettable_memory_operand and
alignable_memory_operand.

From-SVN: r11306
parent 0502226c
...@@ -1438,17 +1438,18 @@ do \ ...@@ -1438,17 +1438,18 @@ do \
CCFPEmode should be used with floating inequalities, CCFPEmode should be used with floating inequalities,
CCFPmode should be used with floating equalities. CCFPmode should be used with floating equalities.
CC_NOOVmode should be used with SImode integer equalities. CC_NOOVmode should be used with SImode integer equalities.
CC_Zmode should be used if only the Z flag is set correctly
CCmode should be used otherwise. */ CCmode should be used otherwise. */
#define EXTRA_CC_MODES CC_NOOVmode, CCFPmode, CCFPEmode #define EXTRA_CC_MODES CC_NOOVmode, CC_Zmode, CCFPmode, CCFPEmode
#define EXTRA_CC_NAMES "CC_NOOV", "CCFP", "CCFPE" #define EXTRA_CC_NAMES "CC_NOOV", "CC_Z", "CCFP", "CCFPE"
#define SELECT_CC_MODE(OP,X,Y) \ #define SELECT_CC_MODE(OP,X,Y) \
(GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \ ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \
: ((GET_MODE (X) == SImode) \ : ((GET_MODE (X) == SImode) \
&& ((OP) == EQ || (OP) == NE) \ && ((OP) == EQ || (OP) == NE || (OP) == LT || (OP) == GE) \
&& (GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ && (GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \
|| GET_CODE (X) == AND || GET_CODE (X) == IOR \ || GET_CODE (X) == AND || GET_CODE (X) == IOR \
|| GET_CODE (X) == XOR || GET_CODE (X) == MULT \ || GET_CODE (X) == XOR || GET_CODE (X) == MULT \
...@@ -1457,7 +1458,7 @@ do \ ...@@ -1457,7 +1458,7 @@ do \
|| GET_CODE (X) == ASHIFT || GET_CODE (X) == ASHIFTRT \ || GET_CODE (X) == ASHIFT || GET_CODE (X) == ASHIFTRT \
|| GET_CODE (X) == ROTATERT || GET_CODE (X) == ZERO_EXTRACT) \ || GET_CODE (X) == ROTATERT || GET_CODE (X) == ZERO_EXTRACT) \
? CC_NOOVmode \ ? CC_NOOVmode \
: GET_MODE (X) == QImode ? CC_NOOVmode : CCmode)) : GET_MODE (X) == QImode ? CC_Zmode : CCmode))
#define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode) #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
...@@ -1478,6 +1479,8 @@ extern int arm_compare_fp; ...@@ -1478,6 +1479,8 @@ extern int arm_compare_fp;
{"arm_rhs_operand", {SUBREG, REG, CONST_INT}}, \ {"arm_rhs_operand", {SUBREG, REG, CONST_INT}}, \
{"fpu_rhs_operand", {SUBREG, REG, CONST_DOUBLE}}, \ {"fpu_rhs_operand", {SUBREG, REG, CONST_DOUBLE}}, \
{"arm_not_operand", {SUBREG, REG, CONST_INT}}, \ {"arm_not_operand", {SUBREG, REG, CONST_INT}}, \
{"offsettable_memory_operand", {MEM}}, \
{"alignable_memory_operand", {MEM}}, \
{"shiftable_operator", {PLUS, MINUS, AND, IOR, XOR}}, \ {"shiftable_operator", {PLUS, MINUS, AND, IOR, XOR}}, \
{"minmax_operator", {SMIN, SMAX, UMIN, UMAX}}, \ {"minmax_operator", {SMIN, SMAX, UMIN, UMAX}}, \
{"shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT, ROTATERT, MULT}}, \ {"shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT, ROTATERT, MULT}}, \
......
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