diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2012-03-08 16:36:49 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2012-03-08 16:36:49 +0000 |
commit | e04d063b1d5a66a2e58cbc996c636a050f6a2548 (patch) | |
tree | 3759c44f4c9f8c35e9eac298d48a3a3b1d5a3a75 | |
parent | ce19a3f8b0357b2ae36975b47d9ae05ff5fa75eb (diff) | |
download | gcc-e04d063b1d5a66a2e58cbc996c636a050f6a2548.zip gcc-e04d063b1d5a66a2e58cbc996c636a050f6a2548.tar.gz gcc-e04d063b1d5a66a2e58cbc996c636a050f6a2548.tar.bz2 |
avr.md (*addhi3, [...]): Add "w" alternative for constants in [-63,63].
* config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative
for constants in [-63,63].
From-SVN: r185105
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/avr/avr.md | 21 |
2 files changed, 16 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08ab3c9..0d9c469 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-03-08 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative + for constants in [-63,63]. + 2012-03-08 Uros Bizjak <ubizjak@gmail.com> PR target/52530 diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 33a871e..3d1adf8 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -1098,15 +1098,16 @@ (set_attr "adjust_len" "addto_sp")]) (define_insn "*addhi3" - [(set (match_operand:HI 0 "register_operand" "=r,d,d") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0") - (match_operand:HI 2 "nonmemory_operand" "r,s,n")))] + [(set (match_operand:HI 0 "register_operand" "=r,d,!w,d") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0 ,0") + (match_operand:HI 2 "nonmemory_operand" "r,s,IJ,n")))] "" { static const char * const asm_code[] = { "add %A0,%A2\;adc %B0,%B2", "subi %A0,lo8(-(%2))\;sbci %B0,hi8(-(%2))", + "", "" }; @@ -1115,9 +1116,9 @@ return avr_out_plus_noclobber (operands, NULL, NULL); } - [(set_attr "length" "2,2,2") - (set_attr "adjust_len" "*,*,out_plus_noclobber") - (set_attr "cc" "set_n,set_czn,out_plus_noclobber")]) + [(set_attr "length" "2,2,2,2") + (set_attr "adjust_len" "*,*,out_plus_noclobber,out_plus_noclobber") + (set_attr "cc" "set_n,set_czn,out_plus_noclobber,out_plus_noclobber")]) ;; Adding a constant to NO_LD_REGS might have lead to a reload of ;; that constant to LD_REGS. We don't add a scratch to *addhi3 @@ -1155,10 +1156,10 @@ (clobber (match_dup 2))])]) (define_insn "addhi3_clobber" - [(set (match_operand:HI 0 "register_operand" "=d,l") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0") - (match_operand:HI 2 "const_int_operand" "n,n"))) - (clobber (match_scratch:QI 3 "=X,&d"))] + [(set (match_operand:HI 0 "register_operand" "=!w,d,r") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0") + (match_operand:HI 2 "const_int_operand" "IJ,n,n"))) + (clobber (match_scratch:QI 3 "=X,X,&d"))] "" { gcc_assert (REGNO (operands[0]) == REGNO (operands[1])); |