[patch] avr port: various small fixes
Marek Michalkiewicz
marekm@t19.ds.pwr.wroc.pl
Mon Oct 9 07:52:00 GMT 2000
Some small bug fixes which I think I should send first, before any
larger changes...
2000-10-09 Marek Michalkiewicz <marekm@linux.org.pl>
* config/avr/avr.c (out_shift_with_cnt): Use AS2 macro.
Correct insn length if shift count is a memory operand.
* config/avr/avr.md: New define_peephole2 to use *reload_inqi.
(*iorhi3_clobber): Change lo8 to hi8.
(zero_extendhisi2): Change %B0 to %A1.
(ashlhi3, ashrhi3): Correct insn length.
(andhi3, abssf2, extendqisi2, extendhisi2): Change "cc"
from "clobber" to "set_n" in some alternatives.
diff -rc3p orig/egcs/gcc/config/avr/avr.c egcs/gcc/config/avr/avr.c
*** orig/egcs/gcc/config/avr/avr.c Tue Oct 3 17:45:38 2000
--- egcs/gcc/config/avr/avr.c Mon Oct 9 16:23:10 2000
*************** out_shift_with_cnt (template, insn, oper
*** 2699,2705 ****
if (len)
++*len;
else
! strcat (str, "ldi %3,lo8((%2)-1)");
second_label = 0;
}
else if (GET_CODE (operands[2]) == MEM)
--- 2699,2705 ----
if (len)
++*len;
else
! strcat (str, AS2 (ldi,%3,lo8((%2)-1)));
second_label = 0;
}
else if (GET_CODE (operands[2]) == MEM)
*************** out_shift_with_cnt (template, insn, oper
*** 2718,2724 ****
else
{
out_movqi_r_mr (insn, op_mov, &mov_len);
! *len = mov_len + 1;
}
}
else if (register_operand (operands[2], QImode))
--- 2718,2724 ----
else
{
out_movqi_r_mr (insn, op_mov, &mov_len);
! *len += mov_len + 1;
}
}
else if (register_operand (operands[2], QImode))
*************** out_shift_with_cnt (template, insn, oper
*** 2731,2737 ****
if (len)
++*len;
else
! strcat (str, "mov %3,%2" CR_TAB);
}
if (len)
--- 2731,2737 ----
if (len)
++*len;
else
! strcat (str, AS2 (mov,%3,%2) CR_TAB);
}
if (len)
*************** out_shift_with_cnt (template, insn, oper
*** 2742,2748 ****
}
if (!len)
{
! strcat (str,"\n1:\t");
strcat (str, template);
strcat (str, second_label ? "\n2:\t" : "\n\t");
strcat (str,
--- 2742,2748 ----
}
if (!len)
{
! strcat (str, "\n1:\t");
strcat (str, template);
strcat (str, second_label ? "\n2:\t" : "\n\t");
strcat (str,
diff -rc3p orig/egcs/gcc/config/avr/avr.md egcs/gcc/config/avr/avr.md
*** orig/egcs/gcc/config/avr/avr.md Sun Oct 1 17:28:23 2000
--- egcs/gcc/config/avr/avr.md Mon Oct 9 16:41:15 2000
***************
*** 188,193 ****
--- 188,203 ----
[(set_attr "length" "2")
(set_attr "cc" "none")])
+ (define_peephole2
+ [(match_scratch:QI 2 "d")
+ (set (match_operand:QI 0 "register_operand" "")
+ (match_operand:QI 1 "immediate_operand" ""))]
+ "(operands[1] != const0_rtx
+ && test_hard_reg_class (NO_LD_REGS, operands[0]))"
+ [(parallel [(set (match_dup 0) (match_dup 1))
+ (clobber (match_dup 2))])]
+ "")
+
;;============================================================================
;; move word (16 bit)
***************
*** 709,715 ****
AS1 (clr,%B0));
}"
[(set_attr "length" "2,2,3")
! (set_attr "cc" "set_n,clobber,clobber")])
(define_insn "andsi3"
[(set (match_operand:SI 0 "register_operand" "=r,d")
--- 719,725 ----
AS1 (clr,%B0));
}"
[(set_attr "length" "2,2,3")
! (set_attr "cc" "set_n,clobber,set_n")])
(define_insn "andsi3"
[(set (match_operand:SI 0 "register_operand" "=r,d")
***************
*** 793,799 ****
""
"@
ldi %3,lo8(%2)\;or %A0,%3
! ldi %3,lo8(%2)\;or %A0,%3\;ldi %3,lo8(%2)\;or %B0,%3"
[(set_attr "length" "2,4")
(set_attr "cc" "clobber,set_n")])
--- 803,809 ----
""
"@
ldi %3,lo8(%2)\;or %A0,%3
! ldi %3,lo8(%2)\;or %A0,%3\;ldi %3,hi8(%2)\;or %B0,%3"
[(set_attr "length" "2,4")
(set_attr "cc" "clobber,set_n")])
***************
*** 894,900 ****
(clobber (match_scratch:QI 3 "=X,X,X,X,&d,X"))]
""
"* return ashlhi3_out (insn, operands, NULL);"
! [(set_attr "length" "7,2,4,2,5,8")
(set_attr "cc" "clobber,set_n,clobber,set_n,clobber,clobber")])
(define_insn "ashlsi3"
--- 904,910 ----
(clobber (match_scratch:QI 3 "=X,X,X,X,&d,X"))]
""
"* return ashlhi3_out (insn, operands, NULL);"
! [(set_attr "length" "7,2,2,4,5,8")
(set_attr "cc" "clobber,set_n,clobber,set_n,clobber,clobber")])
(define_insn "ashlsi3"
***************
*** 926,932 ****
(clobber (match_scratch:QI 3 "=X,X,X,X,&d,X"))]
""
"* return ashrhi3_out (insn, operands, NULL);"
! [(set_attr "length" "7,2,4,2,5,8")
(set_attr "cc" "clobber,clobber,clobber,clobber,clobber,clobber")])
(define_insn "ashrsi3"
--- 936,942 ----
(clobber (match_scratch:QI 3 "=X,X,X,X,&d,X"))]
""
"* return ashrhi3_out (insn, operands, NULL);"
! [(set_attr "length" "7,2,4,4,5,8")
(set_attr "cc" "clobber,clobber,clobber,clobber,clobber,clobber")])
(define_insn "ashrsi3"
***************
*** 992,998 ****
andi %D0,0x7f
clt\;bld %D0,7"
[(set_attr "length" "1,2")
! (set_attr "cc" "clobber,clobber")])
;; 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x
;; neg
--- 1002,1008 ----
andi %D0,0x7f
clt\;bld %D0,7"
[(set_attr "length" "1,2")
! (set_attr "cc" "set_n,clobber")])
;; 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x 0 - x
;; neg
***************
*** 1094,1100 ****
clr %B0\;sbrc %A0,7\;com %B0\;mov %C0,%B0\;mov %D0,%B0
mov %A0,%A1\;clr %B0\;sbrc %A0,7\;com %B0\;mov %C0,%B0\;mov %D0,%B0"
[(set_attr "length" "5,6")
! (set_attr "cc" "clobber,clobber")])
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "register_operand" "=r,&r")
--- 1104,1110 ----
clr %B0\;sbrc %A0,7\;com %B0\;mov %C0,%B0\;mov %D0,%B0
mov %A0,%A1\;clr %B0\;sbrc %A0,7\;com %B0\;mov %C0,%B0\;mov %D0,%B0"
[(set_attr "length" "5,6")
! (set_attr "cc" "set_n,set_n")])
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "register_operand" "=r,&r")
***************
*** 1108,1114 ****
(if_then_else (eq_attr "mcu_enhanced" "yes")
(const_int 5)
(const_int 6))])
! (set_attr "cc" "clobber,clobber")])
;; xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x
;; zero extend
--- 1118,1124 ----
(if_then_else (eq_attr "mcu_enhanced" "yes")
(const_int 5)
(const_int 6))])
! (set_attr "cc" "set_n,set_n")])
;; xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x
;; zero extend
***************
*** 1139,1145 ****
""
"@
clr %C0\;clr %D0
! {mov %A0,%A1\;mov %B0,%B1|movw %A0,%B0}\;clr %C0\;clr %D0"
[(set_attr_alternative "length"
[(const_int 2)
(if_then_else (eq_attr "mcu_enhanced" "yes")
--- 1149,1155 ----
""
"@
clr %C0\;clr %D0
! {mov %A0,%A1\;mov %B0,%B1|movw %A0,%A1}\;clr %C0\;clr %D0"
[(set_attr_alternative "length"
[(const_int 2)
(if_then_else (eq_attr "mcu_enhanced" "yes")
More information about the Gcc-patches
mailing list