[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