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

📄 h8300.md

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn "subqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(minus:QI (match_operand:QI 1 "register_operand" "0")		  (match_operand:QI 2 "register_operand" "r")))]  ""  "sub.b	%X2,%X0"  [(set_attr "length" "2")   (set_attr "cc" "set_zn")])(define_expand "subhi3"  [(set (match_operand:HI 0 "register_operand" "")	(minus:HI (match_operand:HI 1 "general_operand" "")		  (match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,&r")	(minus:HI (match_operand:HI 1 "general_operand" "0,0")		  (match_operand:HI 2 "nonmemory_operand" "r,n")))]  "TARGET_H8300"  "@   sub.w	%T2,%T0   add.b	%E2,%s0\;addx	%F2,%t0"  [(set_attr "length" "2,4")   (set_attr "cc" "set_zn,clobber")])(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,&r")	(minus:HI (match_operand:HI 1 "general_operand" "0,0")		  (match_operand:HI 2 "nonmemory_operand" "r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "@   sub.w	%T2,%T0   sub.w	%T2,%T0"  [(set_attr "length" "2,4")   (set_attr "cc" "set_zn,set_zn")])(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 "length" "6")   (set_attr "cc" "clobber")])(define_insn "subsi3_h8300h"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(minus:SI (match_operand:SI 1 "general_operand" "0,0")		  (match_operand:SI 2 "nonmemory_operand" "r,i")))]  "TARGET_H8300H || TARGET_H8300S"  "@   sub.l	%S2,%S0   sub.l	%S2,%S0"  [(set_attr "length" "2,6")   (set_attr "cc" "set_zn,set_zn")]);; ----------------------------------------------------------------------;; 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 "register_operand" "%0"))		 (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  "TARGET_H8300H || TARGET_H8300S"  "mulxs.b	%X2,%T0"  [(set_attr "length" "4")   (set_attr "cc" "set_zn")])(define_insn "mulhisi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))		 (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]  "TARGET_H8300H || TARGET_H8300S"  "mulxs.w	%T2,%S0"  [(set_attr "length" "4")   (set_attr "cc" "set_zn")])(define_insn "umulqihi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))		 (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]  ""  "mulxu	%X2,%T0"  [(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 "register_operand" "%0"))		 (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))]  "TARGET_H8300H || TARGET_H8300S"  "mulxu.w	%T2,%S0"  [(set_attr "length" "2")   (set_attr "cc" "none_0hit")]);; This is a "bridge" instruction.  Combine can't cram enough insns;; together to crate a MAC instruction directly, but it can create;; this instruction, which then allows combine to create the real;; MAC insn.;;;; Unfortunately, if combine doesn't create a MAC instruction, this;; insn must generate reasonably correct code.  Egad.(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=a")	(mult:SI	  (sign_extend:SI	    (mem:HI (post_inc:SI (match_operand:SI 1 "register_operand" "r"))))	  (sign_extend:SI	    (mem:HI (post_inc:SI (match_operand:SI 2 "register_operand" "r"))))))]  "TARGET_MAC"  "clrmac\;mac	@%2+,@%1+"  [(set_attr "length" "6")   (set_attr "cc" "none_0hit")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=a")	(plus:SI (mult:SI	  (sign_extend:SI (mem:HI	    (post_inc:SI (match_operand:SI 1 "register_operand" "r"))))	  (sign_extend:SI (mem:HI	    (post_inc:SI (match_operand:SI 2 "register_operand" "r")))))	      (match_operand:SI 3 "register_operand" "0")))]  "TARGET_MAC"  "mac	@%2+,@%1+"  [(set_attr "length" "4")   (set_attr "cc" "none_0hit")]);; ----------------------------------------------------------------------;; DIVIDE/MOD INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "udivmodqi4"  [(set (match_operand:QI 0 "register_operand" "=r")	(truncate:QI	  (udiv:HI	    (match_operand:HI 1 "register_operand" "0")	    (zero_extend:HI (match_operand:QI 2 "register_operand" "r")))))   (set (match_operand:QI 3 "register_operand" "=r")	(truncate:QI	  (umod:HI	    (match_dup 1)	    (zero_extend:HI (match_dup 2)))))]  ""  "*{  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"divxu.b\\t%X2,%T0\";  else    return \"divxu.b\\t%X2,%T0\;mov.b\\t%t0,%s3\";}"  [(set_attr "length" "4")   (set_attr "cc" "clobber")])(define_insn "divmodqi4"  [(set (match_operand:QI 0 "register_operand" "=r")	(truncate:QI	  (div:HI	    (match_operand:HI 1 "register_operand" "0")	    (sign_extend:HI (match_operand:QI 2 "register_operand" "r")))))   (set (match_operand:QI 3 "register_operand" "=r")	(truncate:QI	  (mod:HI	    (match_dup 1)	    (sign_extend:HI (match_dup 2)))))]  "TARGET_H8300H || TARGET_H8300S"  "*{  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"divxs.b\\t%X2,%T0\";  else    return \"divxs.b\\t%X2,%T0\;mov.b\\t%t0,%s3\";}"  [(set_attr "length" "6")   (set_attr "cc" "clobber")])(define_insn "udivmodhi4"  [(set (match_operand:HI 0 "register_operand" "=r")	(truncate:HI	  (udiv:SI	    (match_operand:SI 1 "register_operand" "0")	    (zero_extend:SI (match_operand:HI 2 "register_operand" "r")))))   (set (match_operand:HI 3 "register_operand" "=r")	(truncate:HI	  (umod:SI	    (match_dup 1)	    (zero_extend:SI (match_dup 2)))))]  "TARGET_H8300H || TARGET_H8300S"  "*{  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"divxu.w\\t%T2,%S0\";  else    return \"divxu.w\\t%T2,%S0\;mov.w\\t%e0,%f3\";}"  [(set_attr "length" "4")   (set_attr "cc" "clobber")])(define_insn "divmodhi4"  [(set (match_operand:HI 0 "register_operand" "=r")	(truncate:HI	  (div:SI	    (match_operand:SI 1 "register_operand" "0")	    (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))))   (set (match_operand:HI 3 "register_operand" "=r")	(truncate:HI	  (mod:SI	    (match_dup 1)	    (sign_extend:SI (match_dup 2)))))]  "TARGET_H8300H || TARGET_H8300S"  "*{  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"divxs.w\\t%T2,%S0\";  else    return \"divxs.w\\t%T2,%S0\;mov.w\\t%e0,%f3\";}"  [(set_attr "length" "6")   (set_attr "cc" "clobber")]);; ----------------------------------------------------------------------;; AND INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn ""  [(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,n")))]  "register_operand (operands[0], QImode)   || single_zero_operand (operands[2], QImode)"  "@   and	%X2,%X0   bclr	%W2,%R0"  [(set_attr "length" "2,8")   (set_attr "adjust_length" "no")   (set_attr "cc" "set_znv,none_0hit")])(define_expand "andqi3"  [(set (match_operand:QI 0 "bit_operand" "")	(and:QI (match_operand:QI 1 "bit_operand" "")		(match_operand:QI 2 "nonmemory_operand" "")))]  ""  "{  if (fix_bit_operand (operands, 0, AND))    DONE;}")(define_expand "andhi3"  [(set (match_operand:HI 0 "register_operand" "")	(and:HI (match_operand:HI 1 "register_operand" "")		(match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_insn "*andorqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(ior:QI (and:QI (match_operand:QI 2 "register_operand" "r")			(match_operand:QI 3 "single_one_operand" "n"))		(match_operand:QI 1 "register_operand" "0")))]  ""  "bld\\t%V3,%X2\;bor\\t%V3,%X0\;bst\\t%V3,%X0"  [(set_attr "length" "6")   (set_attr "cc" "clobber")])(define_insn "*andorhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(ior:HI (and:HI (match_operand:HI 2 "register_operand" "r")			(match_operand:HI 3 "single_one_operand" "n"))		(match_operand:HI 1 "register_operand" "0")))]  ""  "*{  operands[3] = GEN_INT (INTVAL (operands[3]) & 0xffff);  if (INTVAL (operands[3]) > 128)    {      operands[3] = GEN_INT (INTVAL (operands[3]) >> 8);      return \"bld\\t%V3,%t2\;bor\\t%V3,%t0\;bst\\t%V3,%t0\";    }  return \"bld\\t%V3,%s2\;bor\\t%V3,%s0\;bst\\t%V3,%s0\";}"  [(set_attr "length" "6")   (set_attr "cc" "clobber")])(define_insn "*andorsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(ior:SI (and:SI (match_operand:SI 2 "register_operand" "r")			(match_operand:SI 3 "single_one_operand" "n"))		(match_operand:SI 1 "register_operand" "0")))]  "(INTVAL (operands[3]) & 0xffff) != 0"  "*{  operands[3] = GEN_INT (INTVAL (operands[3]) & 0xffff);  if (INTVAL (operands[3]) > 128)    {      operands[3] = GEN_INT (INTVAL (operands[3]) >> 8);      return \"bld\\t%V3,%x2\;bor\\t%V3,%x0\;bst\\t%V3,%x0\";    }  return \"bld\\t%V3,%w2\;bor\\t%V3,%w0\;bst\\t%V3,%w0\";}"  [(set_attr "length" "6")   (set_attr "cc" "clobber")])(define_insn "*andorsi3_shift_8"  [(set (match_operand:SI 0 "register_operand" "=r")	(ior:SI (and:SI (ashift:SI (match_operand:SI 2 "register_operand" "r")				   (const_int 8))			(const_int 65280))		(match_operand:SI 1 "register_operand" "0")))]  ""  "or.b\\t%w2,%x0"  [(set_attr "length" "2")   (set_attr "cc" "clobber")])(define_expand "andsi3"  [(set (match_operand:SI 0 "register_operand" "")	(and:SI (match_operand:SI 1 "register_operand" "")		(match_operand:SI 2 "nonmemory_operand" "")))]  ""  "");; ----------------------------------------------------------------------;; OR INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn ""  [(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,n")))]  "register_operand (operands[0], QImode)   || single_one_operand (operands[2], QImode)"  "@   or\\t%X2,%X0   bset\\t%V2,%R0"  [(set_attr "length" "2,8")   (set_attr "adjust_length" "no")   (set_attr "cc" "set_znv,none_0hit")])(define_expand "iorqi3"  [(set (match_operand:QI 0 "bit_operand" "")	(ior:QI (match_operand:QI 1 "bit_operand" "")		(match_operand:QI 2 "nonmemory_operand" "")))]  ""  "{  if (fix_bit_operand (operands, 1, IOR))    DONE;}")(define_expand "iorhi3"  [(set (match_operand:HI 0 "register_operand" "")	(ior:HI (match_operand:HI 1 "register_operand" "")		(match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_expand "iorsi3"  [(set (match_operand:SI 0 "register_operand" "")	(ior:SI (match_operand:SI 1 "register_operand" "")		(match_operand:SI 2 "nonmemory_operand" "")))]  ""  "");; ----------------------------------------------------------------------;; XOR INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn ""  [(set (match_operand:QI 0 "bit_operand" "=r,U")	(xor:QI (match_operand:QI 1 "bit_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "rn,n")))]  "register_operand (operands[0], QImode)   || single_one_operand (operands[2], QImode)"  "@   xor\\t%X2,%X0   bnot\\t%V2,%R0"  [(set_attr "length" "2,8")   (set_attr "adjust_length" "no")   (set_attr "cc" "set_znv,none_0hit")])(define_expand "xorqi3"  [(set (match_operand:QI 0 "bit_operand" "")	(xor:QI (match_operand:QI 1 "bit_operand" "")		(match_operand:QI 2 "nonmemory_operand" "")))]  ""  "{  if (fix_bit_operand (operands, 1, XOR))    DONE;}")(define_expand "xorhi3"  [(set (match_operand:HI 0 "register_operand" "")	(xor:HI (match_operand:HI 1 "register_operand" "")		(match_operand:HI 2 "nonmemory_operand" "")))]  ""  "")(define_expand "xorsi3"  [(set (match_operand:SI 0 "register_operand" "")	(xor:SI (match_operand:SI 1 "register_operand" "")		(match_operand:SI 2 "nonmemory_operand" "")))]  ""  "");; ----------------------------------------------------------------------;; {AND,IOR,XOR}{HI3,SI3} PATTERNS;; ----------------------------------------------------------------------(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r")	(match_operator:HI 3 "bit_operator"	  [(match_operand:HI 1 "register_operand" "%0")	   (match_operand:HI 2 "nonmemory_operand" "rn")]))]  ""  "* return output_logical_op (HImode, operands);"  [(set (attr "length")	(symbol_ref "compute_logical_op_length (HImode, operands)"))   (set (attr "cc")	(symbol_ref "compute_logical_op_cc (HImode, operands)"))])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r")	(match_operator:SI 3 "bit_operator"	  [(match_operand:SI 1 "register_operand" "%0")	   (match_operand:SI 2 "nonmemory_operand" "rn")]))]

⌨️ 快捷键说明

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