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

📄 h8300.md

📁 GUN开源阻止下的编译器GCC
💻 MD
📖 第 1 页 / 共 5 页
字号:
    return \"btst	#0,%0l\";  else    return \"mov.l	%S0,%S0\";}"  [(set_attr "type" "arith")   (set_attr "length" "4")   (set_attr "cc" "set")])(define_insn "cmpqi"  [(set (cc0)	(compare:QI (match_operand:QI 0 "register_operand" "ra")		    (match_operand:QI 1 "nonmemory_operand" "rai")))]  ""  "cmp.b	%X1,%X0"  [(set_attr "type" "arith")   (set_attr "length" "2")   (set_attr "cc" "compare")]);; ??? 300h can have an immediate operand here.(define_insn "cmphi"  [(set (cc0)	(compare:HI (match_operand:HI 0 "register_operand" "ra")		    (match_operand:HI 1 "register_operand" "ra")))]  ""  "cmp.w	%T1,%T0"  [(set_attr "type" "arith")   (set_attr "length" "2")   (set_attr "cc" "compare")]);; ??? 300h can have an immediate operand here.(define_insn "cmpsi"  [(set (cc0)	(compare:SI (match_operand:SI 0 "register_operand" "ra")		    (match_operand:SI 1 "register_operand" "ra")))]  "TARGET_H8300H"  "cmp.l	%S1,%S0"  [(set_attr "type" "arith")   (set_attr "length" "2")   (set_attr "cc" "compare")]);; ----------------------------------------------------------------------;; ADD INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "addqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(plus:QI (match_operand:QI 1 "register_operand" "%0")		 (match_operand:QI 2 "nonmemory_operand" "ri")))]  ""  "add.b	%X2,%X0"  [(set_attr "type" "arith")   (set_attr "length" "2")   (set_attr "cc" "set")]);; ??? adds operates on the 32bit register.  We can use it because we don't;; use the e0-7 registers.;; ??? 4 can be handled in one insn on the 300h.(define_insn "addhi3_internal"  [(set (match_operand:HI 0 "register_operand" "=ra,ra,ra,ra,r,ra")	(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0")		 (match_operand:HI 2 "nonmemory_operand" "K,M,L,N,n,ra")))]  ""  "@   adds	%T2,%A0   adds	#2,%A0\;adds	%C2,%A0   subs	%M2,%A0   subs	#2,%A0\;subs	%M2,%A0   add.b	%s2,%s0\;addx	%t2,%t0    add.w	%T2,%T0"  [(set_attr "type" "arith,multi,arith,multi,multi,arith")   (set_attr "length" "2,4,2,4,4,2")   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,clobber,set")]);; ??? Why is this here?(define_expand "addhi3"  [(set (match_operand:HI 0 "register_operand" "")	(plus:HI (match_operand:HI 1 "register_operand" "")		 (match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_expand "addsi3"  [(set (match_operand:SI 0 "register_operand" "")	(plus:SI (match_operand:SI 1 "register_operand" "")		 (match_operand:SI 2 "nonmemory_operand" "")))]  ""  "")(define_insn "addsi_h8300"  [(set (match_operand:SI 0 "register_operand" "=r,r,&r")	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,r")		 (match_operand:SI 2 "nonmemory_operand" "n,r,r")))]  "TARGET_H8300"  "@   add	%w2,%w0\;addx	%x2,%x0\;addx	%y2,%y0\;addx	%z2,%z0   add.w	%f2,%f0\;addx	%y2,%y0\;addx	%z2,%z0   mov	%f1,%f0\;mov	%e1,%e0\;add.w	%f2,%f0\;addx	%y2,%y0\;addx	%z2,%z0"  [(set_attr "type" "arith")   (set_attr "length" "8,6,20")   (set_attr "cc" "clobber")]);; ??? 4 can be handled in one insn on the 300h.;; ??? Should the 'n' constraint be 'i' here?;; ??? We don't handle (reg + symbol_ref) which the 300h can handle.(define_insn "addsi_h8300h"  [(set (match_operand:SI 0 "register_operand" "=ra,ra,ra,ra,r,ra")	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0")		 (match_operand:SI 2 "nonmemory_operand" "K,M,L,N,n,ra")))]  "TARGET_H8300H"  "@   adds	%S2,%S0   adds	#2,%S0\;adds	%C2,%S0   subs	%M2,%S0   subs	#2,%S0\;subs	%M2,%S0   add.l	%S2,%S0   add.l	%S2,%S0"  [(set_attr "type" "multi,multi,multi,multi,arith,arith")   (set_attr "length" "2,4,2,4,6,2")   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,clobber,clobber")]);; ----------------------------------------------------------------------;; SUBTRACT INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "subqi3"  [(set (match_operand:QI 0 "register_operand" "=r,r")	(minus:QI (match_operand:QI 1 "register_operand" "0,0")		  (match_operand:QI 2 "nonmemory_operand" "r,i")))]  ""  "@   sub.b	%X2,%X0   add.b	%G2,%X0"  [(set_attr "type" "arith")   (set_attr "length" "2")   (set_attr "cc" "set")]);; ??? subs operates on the 32bit register.  We can use it because we don't;; use the e0-7 registers.;; ??? 4 can be handled in one insn on the 300h.;; ??? The fourth alternative can use sub.w on the 300h.;; ??? Should the 'n' constraint be an 'i' here?(define_insn "subhi3_internal"  [(set (match_operand:HI 0 "register_operand" "=ra,ra,ra,r")	(minus:HI (match_operand:HI 1 "general_operand" "0,0,0,0")		  (match_operand:HI 2 "nonmemory_operand" "K,M,ra,n")))]  ""  "@   subs	%T2,%T0   subs	#2,%T0\;subs	%M2,%T0   sub.w	%T2,%T0   add.b	%E2,%s0\;addx	%F2,%t0 ; -%0"  [(set_attr "type" "multi")   (set_attr "length" "2,4,2,4")   (set_attr "cc" "none_0hit,none_0hit,set,clobber")]);; ??? Why is this here?(define_expand "subhi3"  [(set (match_operand:HI 0 "register_operand" "")	(minus:HI (match_operand:HI 1 "register_operand" "")		  (match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_expand "subsi3"  [(set (match_operand:SI 0 "register_operand" "")	(minus:SI (match_operand:SI 1 "register_operand" "")		  (match_operand:SI 2 "nonmemory_operand" "")))]  ""  "")(define_insn "subsi3_h8300"  [(set (match_operand:SI 0 "register_operand" "=r")	(minus:SI (match_operand:SI 1 "register_operand" "0")		  (match_operand:SI 2 "register_operand" "r")))]  "TARGET_H8300"  "sub.w	%f2,%f0\;subx	%y2,%y0\;subx	%z2,%z0"  [(set_attr "type" "arith")   (set_attr "length" "6")   (set_attr "cc" "clobber")]);; ??? 4 can be handled in one insn on the 300h.(define_insn "subsi3_h8300h"  [(set (match_operand:SI 0 "register_operand" "=ra,ra,ra,r")	(minus:SI (match_operand:SI 1 "general_operand" "0,0,0,0")		  (match_operand:SI 2 "nonmemory_operand" "K,M,ra,n")))]  "TARGET_H8300H"  "@   subs	%T2,%T0   subs	#2,%T0\;subs	%E2,%T0   sub.l	%S2,%S0   sub.l	%S2,%S0"  [(set_attr "type" "multi")   (set_attr "length" "2,4,2,6")   (set_attr "cc" "none_0hit,none_0hit,set,set")]);; ----------------------------------------------------------------------;; MULTIPLY INSTRUCTIONS;; ----------------------------------------------------------------------;; Note that the h8/300 can only handle umulqihi3.(define_insn "mulqihi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mult:HI (sign_extend:HI (match_operand:QI 1 "general_operand" "%0"))		 (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  "TARGET_H8300H"  "mulxs.b	%X2,%T0"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "set")])(define_insn "mulhisi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(mult:SI (sign_extend:SI (match_operand:HI 1 "general_operand" "%0"))		 (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]  "TARGET_H8300H"  "mulxs.w	%T2,%S0"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "set")])(define_insn "umulqihi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mult:HI (zero_extend:HI (match_operand:QI 1 "general_operand" "%0"))		 (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  ""  "mulxu	%X2,%T0"  [(set_attr "type" "multi")   (set_attr "length" "2")   (set_attr "cc" "none_0hit")])(define_insn "umulhisi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(mult:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "%0"))		 (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))]  "TARGET_H8300H"  "mulxu.w	%T2,%S0"  [(set_attr "type" "multi")   (set_attr "length" "2")   (set_attr "cc" "none_0hit")]);; ----------------------------------------------------------------------;; DIVIDE INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "udivqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(udiv:QI (match_operand:HI 1 "general_operand" "0")		 (match_operand:QI 2 "register_operand" "r")))]  ""  "divxu	%X2,%T0"  [(set_attr "type" "multi")   (set_attr "length" "2")   (set_attr "cc" "clobber")]);; ??? Will divxu always work here?(define_insn "divqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(div:QI (match_operand:HI 1 "general_operand" "0")		(match_operand:QI 2 "register_operand" "r")))]  ""  "divxu	%X2,%T0"  [(set_attr "type" "multi")   (set_attr "length" "2")   (set_attr "cc" "clobber")])(define_insn "udivhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(udiv:HI (match_operand:SI 1 "general_operand" "0")		 (match_operand:HI 2 "register_operand" "r")))]  "TARGET_H8300H"  "divxu.w	%T2,%S0"  [(set_attr "type" "multi")   (set_attr "length" "2")   (set_attr "cc" "clobber")])(define_insn "divhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(div:HI (match_operand:SI 1 "general_operand" "0")		(match_operand:HI 2 "register_operand" "r")))]  "TARGET_H8300H"  "divxs.w	%T2,%S0"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "clobber")]);; ----------------------------------------------------------------------;; MOD INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "umodqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(umod:QI (match_operand:HI 1 "general_operand" "0")		 (match_operand:QI 2 "register_operand" "r")))]  ""  "divxu	%X2,%T0\;mov %t0,%s0"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "clobber")])(define_insn "modqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(mod:QI (match_operand:HI 1 "general_operand" "0")		(match_operand:QI 2 "register_operand" "r")))]  "TARGET_H8300H"  "divxs.b	%X2,%T0\;mov %t0,%s0"  [(set_attr "type" "multi")   (set_attr "length" "6")   (set_attr "cc" "clobber")])(define_insn "umodhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(umod:HI (match_operand:SI 1 "general_operand" "0")		 (match_operand:HI 2 "register_operand" "r")))]  "TARGET_H8300H"  "divxu.w	%T2,%S0\;mov %e0,%f0"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "clobber")])(define_insn "modhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mod:HI (match_operand:SI 1 "general_operand" "0")		(match_operand:HI 2 "register_operand" "r")))]  "TARGET_H8300H"  "divxs.w	%T2,%S0\;mov %e0,%f0"  [(set_attr "type" "multi")   (set_attr "length" "6")   (set_attr "cc" "clobber")]);; ----------------------------------------------------------------------;; AND INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "andqi3_internal"  [(set (match_operand:QI 0 "bit_operand" "=r,U")	(and:QI (match_operand:QI 1 "bit_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "rn,O")))]  "register_operand (operands[0], QImode) || o_operand (operands[2], QImode)"  "@   and	%X2,%X0   bclr	%W2,%X0"  [(set_attr "type" "arith")   (set_attr "length" "2,4")   (set_attr "cc" "set,none_0hit")])(define_expand "andqi3"  [(set (match_operand:QI 0 "bit_operand" "=r,U")	(and:QI (match_operand:QI 1 "bit_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "rn,O")))]  ""  "{  if (fix_bit_operand (operands, 'O', AND))    DONE;}");; ??? Should have a bclr case here also.(define_insn "andhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(and:HI (match_operand:HI 1 "register_operand" "%0")		(match_operand:HI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT)    {      int i = INTVAL (operands[2]);      if ((i & 0x00ff) != 0x00ff) 	output_asm_insn (\"and	%s2,%s0\", operands);      if ((i & 0xff00) != 0xff00) 	output_asm_insn (\"and	%t2,%t0\", operands);      return \"\";    }  return \"and	%s2,%s0\;and	%t2,%t0;\";}"  [(set_attr "type" "multi")   (set_attr "length" "4")   (set_attr "cc" "clobber")]);; ??? There is an iorsi3 for TARGET_H8300.  Should we have andsi3?(define_insn "andsi3"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(and:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "r,i")))]  "TARGET_H8300H"  "@   and	%S2,%S0   and	%S2,%S0"  [(set_attr "type" "arith")   (set_attr "length" "4,6")   (set_attr "cc" "clobber")]);; ----------------------------------------------------------------------;; OR INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "iorqi3_internal"  [(set (match_operand:QI 0 "bit_operand" "=U,r")	(ior:QI (match_operand:QI 1 "bit_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "P,rn")))]  "register_operand (operands[0], QImode) || p_operand (operands[2], QImode)"  "@   bset	%V2,%X0   or	%X2,%X0"  [(set_attr "type" "arith")   (set_attr "length" "4,2")   (set_attr "cc" "none_0hit,set")])(define_expand "iorqi3"  [(set (match_operand:QI 0 "bit_operand" "=r,U")	(ior:QI (match_operand:QI 1 "bit_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "rn,P")))]  ""  "{  if (fix_bit_operand (operands, 'P', IOR))    DONE;}");; ??? Should have a bset case here also.(define_insn "iorhi3"  [(set (match_operand:HI 0 "general_operand" "=r,r")	(ior:HI (match_operand:HI 1 "general_operand" "%0,0")		(match_operand:HI 2 "general_operand" "J,rn")))]  ""  "*{  if (TARGET_H8300)    {      if (GET_CODE (operands[2]) == CONST_INT)	{

⌨️ 快捷键说明

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