⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr.md

📁 linux下的gcc编译器
💻 MD
📖 第 1 页 / 共 5 页
字号:
	       AS1 (brne,.-8));     else       return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB	       AS2 (st,%a0+,__tmp_reg__)  CR_TAB	       AS2 (subi,%A2,1) CR_TAB	       AS2 (sbci,%B2,0) CR_TAB	       AS1 (brne,.-10));}"  [(set_attr "length" "4,5")   (set_attr "cc" "clobber,clobber")]);; =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0;; memset (%0, 0, %1)(define_expand "clrstrhi"  [(parallel [(set (match_operand:BLK 0 "memory_operand" "")		   (const_int 0))	      (use (match_operand:HI 1 "const_int_operand" ""))	      (use (match_operand:HI 2 "const_int_operand" "n"))	      (clobber (match_dup 3))	      (clobber (match_dup 4))])]  ""  "{  rtx addr0;  int cnt8;  enum machine_mode mode;  if (GET_CODE (operands[1]) != CONST_INT)    FAIL;  cnt8 = byte_immediate_operand (operands[1], GET_MODE (operands[1]));  mode = cnt8 ? QImode : HImode;  operands[1] = copy_to_mode_reg (mode,                                  gen_int_mode (INTVAL (operands[1]), mode));  operands[3] = operands[1];  addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));  operands[4] = addr0;    operands[0] = gen_rtx (MEM, BLKmode, addr0);}")(define_insn "*clrstrqi"  [(set (mem:BLK (match_operand:HI 0 "register_operand" "e"))	(const_int 0))   (use (match_operand:QI 1 "register_operand" "r"))   (use (match_operand:QI 2 "const_int_operand" "n"))   (clobber (match_dup 1))   (clobber (match_dup 0))]  ""  "st %a0+,__zero_reg__        dec %1	brne .-6"  [(set_attr "length" "3")   (set_attr "cc" "clobber")])(define_insn "*clrstrhi"  [(set (mem:BLK (match_operand:HI 0 "register_operand" "e,e"))	(const_int 0))   (use (match_operand:HI 1 "register_operand" "!w,d"))   (use (match_operand:HI 2 "const_int_operand" "n,n"))   (clobber (match_dup 1))   (clobber (match_dup 0))]  ""  "*{     if (which_alternative==0)       return (AS2 (st,%a0+,__zero_reg__) CR_TAB	       AS2 (sbiw,%A1,1) CR_TAB	       AS1 (brne,.-6));     else       return (AS2 (st,%a0+,__zero_reg__) CR_TAB	       AS2 (subi,%A1,1) CR_TAB	       AS2 (sbci,%B1,0) CR_TAB	       AS1 (brne,.-8));}"  [(set_attr "length" "3,4")   (set_attr "cc" "clobber,clobber")])(define_expand "strlenhi"    [(set (match_dup 4)	  (unspec:HI [(match_operand:BLK 1 "memory_operand" "")		      (match_operand:QI 2 "const_int_operand" "")		      (match_operand:HI 3 "immediate_operand" "")] 0))     (set (match_dup 4) (plus:HI (match_dup 4)				 (const_int -1)))     (set (match_operand:HI 0 "register_operand" "")	  (minus:HI (match_dup 4)		    (match_dup 5)))]   ""   "{  rtx addr;  if (! (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0))    FAIL;  addr = copy_to_mode_reg (Pmode, XEXP (operands[1],0));  operands[1] = gen_rtx (MEM, BLKmode, addr);   operands[5] = addr;  operands[4] = gen_reg_rtx (HImode);}")(define_insn "*strlenhi"  [(set (match_operand:HI 0 "register_operand" "=e")	(unspec:HI [(mem:BLK (match_operand:HI 1 "register_operand" "%0"))		    (const_int 0)		    (match_operand:HI 2 "immediate_operand" "i")] 0))]  ""  "ld __tmp_reg__,%a0+	tst __tmp_reg__	brne .-6"  [(set_attr "length" "3")   (set_attr "cc" "clobber")]);+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; add bytes(define_insn "addqi3"  [(set (match_operand:QI 0 "register_operand" "=r,d,r,r")        (plus:QI (match_operand:QI 1 "register_operand" "%0,0,0,0")                 (match_operand:QI 2 "nonmemory_operand" "r,i,P,N")))]  ""  "@	add %0,%2	subi %0,lo8(-(%2))	inc %0	dec %0"  [(set_attr "length" "1,1,1,1")   (set_attr "cc" "set_czn,set_czn,set_zn,set_zn")])(define_expand "addhi3"  [(set (match_operand:HI 0 "register_operand" "")	(plus:HI (match_operand:HI 1 "register_operand" "")		 (match_operand:HI 2 "nonmemory_operand" "")))]  ""  "{  if (GET_CODE (operands[2]) == CONST_INT)    {      short tmp = INTVAL (operands[2]);      operands[2] = GEN_INT(tmp);    }}")(define_insn "*addhi3_zero_extend"  [(set (match_operand:HI 0 "register_operand" "=r")	(plus:HI (zero_extend:HI		  (match_operand:QI 1 "register_operand" "r"))		 (match_operand:HI 2 "register_operand" "0")))]  ""  "add %A0,%1	adc %B0,__zero_reg__"  [(set_attr "length" "2")   (set_attr "cc" "set_n")])(define_insn "*addhi3_zero_extend1"  [(set (match_operand:HI 0 "register_operand" "=r")	(plus:HI (match_operand:HI 1 "register_operand" "%0")		 (zero_extend:HI		  (match_operand:QI 2 "register_operand" "r"))))]  ""  "add %A0,%2	adc %B0,__zero_reg__"  [(set_attr "length" "2")   (set_attr "cc" "set_n")])(define_insn "*addhi3_zero_extend2"  [(set (match_operand:HI 0 "register_operand" "=r")	(plus:HI	 (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))	 (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  ""  "add %0,%2	mov %B0,__zero_reg__	adc %B0,__zero_reg__"  [(set_attr "length" "3")   (set_attr "cc" "set_n")])(define_insn "*addhi3"  [(set (match_operand:HI 0 "register_operand" "=r,!w,!w,d,r,r") 	(plus:HI 	 (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0") 	 (match_operand:HI 2 "nonmemory_operand" "r,I,J,i,P,N")))]  ""  "@ 	add %A0,%A2\;adc %B0,%B2 	adiw %A0,%2 	sbiw %A0,%n2 	subi %A0,lo8(-(%2))\;sbci %B0,hi8(-(%2)) 	sec\;adc %A0,__zero_reg__\;adc %B0,__zero_reg__ 	sec\;sbc %A0,__zero_reg__\;sbc %B0,__zero_reg__"  [(set_attr "length" "2,1,1,2,3,3")   (set_attr "cc" "set_n,set_czn,set_czn,set_czn,set_n,set_n")])(define_insn "addsi3"  [(set (match_operand:SI 0 "register_operand" "=r,!w,!w,d,r,r")	  (plus:SI	   (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0")	   (match_operand:SI 2 "nonmemory_operand" "r,I,J,i,P,N")))]  ""  "@	add %A0,%A2\;adc %B0,%B2\;adc %C0,%C2\;adc %D0,%D2	adiw %0,%2\;adc %C0,__zero_reg__\;adc %D0,__zero_reg__	sbiw %0,%n2\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__	subi %0,lo8(-(%2))\;sbci %B0,hi8(-(%2))\;sbci %C0,hlo8(-(%2))\;sbci %D0,hhi8(-(%2))	sec\;adc %A0,__zero_reg__\;adc %B0,__zero_reg__\;adc %C0,__zero_reg__\;adc %D0,__zero_reg__	sec\;sbc %A0,__zero_reg__\;sbc %B0,__zero_reg__\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__"  [(set_attr "length" "4,3,3,4,5,5")   (set_attr "cc" "set_n,set_n,set_czn,set_czn,set_n,set_n")])(define_insn "*addsi3_zero_extend"  [(set (match_operand:SI 0 "register_operand" "=r")	(plus:SI (zero_extend:SI		  (match_operand:QI 1 "register_operand" "r"))		 (match_operand:SI 2 "register_operand" "0")))]  ""  "add %A0,%1	adc %B0,__zero_reg__	adc %C0,__zero_reg__	adc %D0,__zero_reg__"  [(set_attr "length" "4")   (set_attr "cc" "set_n")]);-----------------------------------------------------------------------------; sub bytes(define_insn "subqi3"  [(set (match_operand:QI 0 "register_operand" "=r,d")        (minus:QI (match_operand:QI 1 "register_operand" "0,0")                  (match_operand:QI 2 "nonmemory_operand" "r,i")))]  ""  "@	sub %0,%2	subi %0,lo8(%2)"  [(set_attr "length" "1,1")   (set_attr "cc" "set_czn,set_czn")])(define_insn "subhi3"  [(set (match_operand:HI 0 "register_operand" "=r,d")        (minus:HI (match_operand:HI 1 "register_operand" "0,0")		  (match_operand:HI 2 "nonmemory_operand" "r,i")))]  ""  "@	sub %A0,%A2\;sbc %B0,%B2	subi %A0,lo8(%2)\;sbci %B0,hi8(%2)"  [(set_attr "length" "2,2")   (set_attr "cc" "set_czn,set_czn")])(define_insn "*subhi3_zero_extend1"  [(set (match_operand:HI 0 "register_operand" "=r")	(minus:HI (match_operand:HI 1 "register_operand" "0")		  (zero_extend:HI		   (match_operand:QI 2 "register_operand" "r"))))]  ""  "sub %A0,%2	sbc %B0,__zero_reg__"  [(set_attr "length" "2")   (set_attr "cc" "set_n")])(define_insn "subsi3"  [(set (match_operand:SI 0 "register_operand" "=r,d")        (minus:SI (match_operand:SI 1 "register_operand" "0,0")                 (match_operand:SI 2 "nonmemory_operand" "r,i")))]  ""  "@	sub %0,%2\;sbc %B0,%B2\;sbc %C0,%C2\;sbc %D0,%D2	subi %A0,lo8(%2)\;sbci %B0,hi8(%2)\;sbci %C0,hlo8(%2)\;sbci %D0,hhi8(%2)"  [(set_attr "length" "4,4")   (set_attr "cc" "set_czn,set_czn")])(define_insn "*subsi3_zero_extend"  [(set (match_operand:SI 0 "register_operand" "=r")	(minus:SI (match_operand:SI 1 "register_operand" "0")		  (zero_extend:SI		   (match_operand:QI 2 "register_operand" "r"))))]  ""  "sub %A0,%2	sbc %B0,__zero_reg__	sbc %C0,__zero_reg__	sbc %D0,__zero_reg__"  [(set_attr "length" "4")   (set_attr "cc" "set_n")]);******************************************************************************; mul(define_expand "mulqi3"  [(set (match_operand:QI 0 "register_operand" "")	(mult:QI (match_operand:QI 1 "register_operand" "")		 (match_operand:QI 2 "register_operand" "")))]  ""  "{  if (!AVR_ENHANCED)    {      emit_insn (gen_mulqi3_call (operands[0], operands[1], operands[2]));      DONE;    }}")(define_insn "*mulqi3_enh"  [(set (match_operand:QI 0 "register_operand" "=r")	(mult:QI (match_operand:QI 1 "register_operand" "r")		 (match_operand:QI 2 "register_operand" "r")))]  "AVR_ENHANCED"  "mul %1,%2	mov %0,r0	clr r1"  [(set_attr "length" "3")   (set_attr "cc" "clobber")])(define_expand "mulqi3_call"  [(set (reg:QI 24) (match_operand:QI 1 "register_operand" ""))   (set (reg:QI 22) (match_operand:QI 2 "register_operand" ""))   (parallel [(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22)))	      (clobber (reg:QI 22))])   (set (match_operand:QI 0 "register_operand" "") (reg:QI 24))]  ""  "")(define_insn "*mulqi3_call"  [(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22)))   (clobber (reg:QI 22))]  "!AVR_ENHANCED"  "%~call __mulqi3"  [(set_attr "type" "xcall")   (set_attr "cc" "clobber")])(define_insn "mulqihi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "d"))		 (sign_extend:HI (match_operand:QI 2 "register_operand" "d"))))]  "AVR_ENHANCED"  "muls %1,%2	movw %0,r0	clr r1"  [(set_attr "length" "3")   (set_attr "cc" "clobber")])(define_insn "umulqihi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r"))		 (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  "AVR_ENHANCED"  "mul %1,%2	movw %0,r0	clr r1"  [(set_attr "length" "3")   (set_attr "cc" "clobber")])(define_expand "mulhi3"  [(set (match_operand:HI 0 "register_operand" "")	(mult:HI (match_operand:HI 1 "register_operand" "")		 (match_operand:HI 2 "register_operand" "")))]  ""  "{  if (!AVR_ENHANCED)    {      emit_insn (gen_mulhi3_call (operands[0], operands[1], operands[2]));      DONE;    }}")(define_insn "*mulhi3_enh"  [(set (match_operand:HI 0 "register_operand" "=&r")	(mult:HI (match_operand:HI 1 "register_operand" "r")		 (match_operand:HI 2 "register_operand" "r")))]  "AVR_ENHANCED"  "mul %A1,%A2	movw %0,r0	mul %A1,%B2	add %B0,r0	mul %B1,%A2	add %B0,r0	clr r1"  [(set_attr "length" "7")   (set_attr "cc" "clobber")])(define_expand "mulhi3_call"  [(set (reg:HI 24) (match_operand:HI 1 "register_operand" ""))   (set (reg:HI 22) (match_operand:HI 2 "register_operand" ""))   (parallel [(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22)))	      (clobber (reg:HI 22))	      (clobber (reg:QI 21))])   (set (match_operand:HI 0 "register_operand" "") (reg:HI 24))]  ""  "")(define_insn "*mulhi3_call"  [(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22)))   (clobber (reg:HI 22))   (clobber (reg:QI 21))]  "!AVR_ENHANCED"  "%~call __mulhi3"  [(set_attr "type" "xcall")   (set_attr "cc" "clobber")]);; Operand 2 (reg:SI 18) not clobbered on the enhanced core.;; All call-used registers clobbered otherwise - normal library call.(define_expand "mulsi3"  [(set (reg:SI 22) (match_operand:SI 1 "register_operand" ""))   (set (reg:SI 18) (match_operand:SI 2 "register_operand" ""))   (parallel [(set (reg:SI 22) (mult:SI (reg:SI 22) (reg:SI 18)))	      (clobber (reg:HI 26))	      (clobber (reg:HI 30))])   (set (match_operand:SI 0 "register_operand" "") (reg:SI 22))]  "AVR_ENHANCED"  "")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -