[PATCH, ARM]: Improve handling of DImode comparisons
Richard Earnshaw
rearnsha@arm.com
Wed Jun 30 18:33:00 GMT 2010
On Mon, 2010-06-21 at 21:49 -0400, Sandra Loosemore wrote:
> 2010-06-21 Daniel Jacobowitz <dan@codesourcery.com>
> Julian Brown <julian@codesourcery.com>
> Sandra Loosemore <sandra@codesourcery.com>
>
> gcc/
> * config/arm/arm.c (arm_canonicalize_comparison): Canonicalize DImode
> comparisons. Adjust to take both operands.
> (arm_select_cc_mode): Handle DImode comparisons.
> (arm_gen_compare_reg): Generate a scratch register for DImode
> comparisons which require one. Use xor for Thumb equality checks.
> (arm_const_double_by_immediates): New.
> (arm_print_operand): Allow 'Q' and 'R' for constants.
> (get_arm_condition_code): Handle new CC_CZmode and CC_NCVmode.
> * config/arm/arm.h (CANONICALIZE_COMPARISON): Always use
> arm_canonicalize_comparison.
> * config/arm/arm-modes.def: Add CC_CZmode and CC_NCVmode.
> * config/arm/arm-protos.h (arm_canonicalize_comparison): Update
> prototype.
> (arm_const_double_by_immediates): Declare.
> * config/arm/constraints.md (Di): New constraint.
> * config/arm/predicates.md (arm_immediate_di_operand)
> (arm_di_operand, cmpdi_operand): New.
> * config/arm/arm.md (cbranchdi4): Handle non-Cirrus also.
> (*arm_cmpdi_insn, *arm_cmpdi_unsigned)
> (*arm_cmpdi_zero, *thumb_cmpdi_zero): New insns.
> (cstoredi4): Handle non-Cirrus also.
>
> gcc/testsuite/
> * gcc.c-torture/execute/20100416-1.c: New test case.
>
OK
R.
More information about the Gcc-patches
mailing list