From 956a617049d0537c1549bf09a58356b63de28ffa Mon Sep 17 00:00:00 2001 From: bernds Date: Fri, 16 Apr 2010 09:47:17 +0000 Subject: * config/arm/arm.md (addsi3_cbranch): If destination is a high register, inputs must be low registers and we need a low register scratch. Handle alternative 2 like alternative 3. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158405 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 ++++ gcc/config/arm/arm.md | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e384b57376..a3bb0b08427 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -13,6 +13,10 @@ If the previous insn is a cbranchsi4_insn with the same arguments, omit the compare instruction. + * config/arm/arm.md (addsi3_cbranch): If destination is a high + register, inputs must be low registers and we need a low register + scratch. Handle alternative 2 like alternative 3. + 2010-04-16 Jakub Jelinek * alias.c (memrefs_conflict_p): If x and y are the same VALUE, diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 1a07f36ef6c..4604e139898 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -7543,15 +7543,15 @@ (if_then_else (match_operator 4 "arm_comparison_operator" [(plus:SI - (match_operand:SI 2 "s_register_operand" "%l,0,*0,1,1,1") - (match_operand:SI 3 "reg_or_int_operand" "lL,IJ,*r,lIJ,lIJ,lIJ")) + (match_operand:SI 2 "s_register_operand" "%l,0,*l,1,1,1") + (match_operand:SI 3 "reg_or_int_operand" "lL,IJ,*l,lIJ,lIJ,lIJ")) (const_int 0)]) (label_ref (match_operand 5 "" "")) (pc))) (set (match_operand:SI 0 "thumb_cbrch_target_operand" "=l,l,*!h,*?h,*?m,*?m") (plus:SI (match_dup 2) (match_dup 3))) - (clobber (match_scratch:SI 1 "=X,X,X,l,&l,&l"))] + (clobber (match_scratch:SI 1 "=X,X,l,l,&l,&l"))] "TARGET_THUMB1 && (GET_CODE (operands[4]) == EQ || GET_CODE (operands[4]) == NE @@ -7561,8 +7561,7 @@ { rtx cond[3]; - - cond[0] = (which_alternative < 3) ? operands[0] : operands[1]; + cond[0] = (which_alternative < 2) ? operands[0] : operands[1]; cond[1] = operands[2]; cond[2] = operands[3]; @@ -7571,7 +7570,7 @@ else output_asm_insn (\"add\\t%0, %1, %2\", cond); - if (which_alternative >= 3 + if (which_alternative >= 2 && which_alternative < 4) output_asm_insn (\"mov\\t%0, %1\", operands); else if (which_alternative >= 4) -- cgit v1.2.3