h8300.md

来自「gcc3.2.1源代码」· Markdown 代码 · 共 2,182 行 · 第 1/5 页

MD
2,182
字号
  [(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)))))]  "TARGET_H8300H || TARGET_H8300S"  "*{  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,O")))]  "register_operand (operands[0], QImode) || o_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, 'O', 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 ""  [(set (match_operand:HI 0 "register_operand" "=r")	(and:HI (match_operand:HI 1 "register_operand" "%0")		(match_operand:HI 2 "nonmemory_operand" "rn")))]  "TARGET_H8300"  "* return output_logical_op (HImode, AND, operands);"  [(set_attr "length" "4")   (set_attr "cc" "clobber")])(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,r")	(and:HI (match_operand:HI 1 "register_operand" "%0,0")		(match_operand:HI 2 "nonmemory_operand" "r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (HImode, AND, operands);"  [(set_attr "length" "2,4")   (set_attr "cc" "set_znv,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 "const_int_operand" "n"))	(match_operand:HI 1 "register_operand" "0")))]  "exact_log2 (INTVAL (operands[3]) & 0xffff) != -1"  "*{  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\;bst\\t%V3,%t0\";    }  return \"bld\\t%V3,%s2\;bst\\t%V3,%s0\";}"  [(set_attr "length" "4")   (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" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r")	(and:SI (match_operand:SI 1 "register_operand" "%0")		(match_operand:SI 2 "nonmemory_operand" "rn")))]  "TARGET_H8300"  "* return output_logical_op (SImode, AND, operands);"  [(set_attr "length" "8")   (set_attr "cc" "clobber")])(define_insn ""  [(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,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (SImode, AND, operands);"  [(set_attr "length" "4,6")   (set_attr "cc" "set_znv,clobber")]);; ----------------------------------------------------------------------;; 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)   || (GET_CODE (operands[2]) == CONST_INT       && exact_log2 (INTVAL (operands[2]) & 0xff) != -1)"  "*{  switch (which_alternative)    {    case 0:      return \"or\t%X2,%X0\";    case 1:      operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff);      return \"bset\t%V2,%R0\";    default:      abort ();    }}"  [(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, 'P', 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_insn ""  [(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")))]  "TARGET_H8300"  "* return output_logical_op (HImode, IOR, operands);"  [(set_attr "length" "2,4")   (set_attr "cc" "clobber,clobber")])(define_insn ""  [(set (match_operand:HI 0 "general_operand" "=r,r,r")	(ior:HI (match_operand:HI 1 "general_operand" "%0,0,0")		(match_operand:HI 2 "general_operand" "J,r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (HImode, IOR, operands);"  [(set_attr "length" "2,2,4")   (set_attr "cc" "clobber,set_znv,clobber")])(define_expand "iorsi3"  [(set (match_operand:SI 0 "register_operand" "")	(ior:SI (match_operand:SI 1 "register_operand" "")		(match_operand:SI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r")	(ior:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "J,rn")))]  "TARGET_H8300"  "* return output_logical_op (SImode, IOR, operands);"  [(set_attr "length" "2,8")   (set_attr "cc" "clobber,clobber")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r")	(ior:SI (match_operand:SI 1 "register_operand" "%0,0,0")		(match_operand:SI 2 "nonmemory_operand" "J,r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (SImode, IOR, operands);"  [(set_attr "length" "2,4,6")   (set_attr "cc" "clobber,set_znv,clobber")]);; ----------------------------------------------------------------------;; 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)   || (GET_CODE (operands[2]) == CONST_INT       && exact_log2 (INTVAL (operands[2]) & 0xff) != -1)"  "*{  switch (which_alternative)    {    case 0:      return \"xor\t%X2,%X0\";    case 1:      operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff);      return \"bnot\t%V2,%R0\";    default:      abort ();    }}"  [(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, 'O', 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_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,r")	(xor:HI (match_operand:HI 1 "register_operand" "%0,0")		(match_operand:HI 2 "nonmemory_operand" "J,rn")))]  "TARGET_H8300"  "* return output_logical_op (HImode, XOR, operands);"  [(set_attr "length" "2,4")   (set_attr "cc" "clobber,clobber")])(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,r,r")	(xor:HI (match_operand:HI 1 "register_operand" "%0,0,0")		(match_operand:HI 2 "nonmemory_operand" "J,r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (HImode, XOR, operands);"  [(set_attr "length" "2,2,4")   (set_attr "cc" "clobber,set_znv,clobber")])(define_expand "xorsi3"  [(set (match_operand:SI 0 "register_operand" "")	(xor:SI (match_operand:SI 1 "register_operand" "")		(match_operand:SI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r")	(xor:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "J,rn")))]  "TARGET_H8300"  "* return output_logical_op (SImode, XOR, operands);"  [(set_attr "length" "2,8")   (set_attr "cc" "clobber,clobber")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r")	(xor:SI (match_operand:SI 1 "register_operand" "%0,0,0")		(match_operand:SI 2 "nonmemory_operand" "J,r,n")))]  "TARGET_H8300H || TARGET_H8300S"  "* return output_logical_op (SImode, XOR, operands);"  [(set_attr "length" "2,4,6")   (set_attr "cc" "clobber,set_znv,clobber")]);; ----------------------------------------------------------------------;; NEGATION INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "negqi2"  [(set (match_operand:QI 0 "register_operand" "=r")	(neg:QI (match_operand:QI 1 "register_operand" "0")))]  ""  "neg	%X0"  [(set_attr "length" "2")   (set_attr "cc" "set_zn")])(define_expand "neghi2"  [(set (match_operand:HI 0 "register_operand" "")	(neg:HI (match_operand:HI 1 "register_operand" "")))]  ""  "{  if (TARGET_H8300)    {      emit_insn (gen_neghi2_h8300 (operands[0], operands[1]));      DONE;    }}")(define_expand "neghi2_h8300"  [(set (match_dup 2)	(not:HI (match_operand:HI 1 "register_operand" "")))   (set (match_dup 2) (plus:HI (match_dup 2) (const_int 1)))   (set (match_operand:HI 0 "register_operand" "")	(match_dup 2))]  ""  "operands[2] = gen_reg_rtx (HImode);")(define_insn "neghi2_h8300h"  [(set (match_operand:HI 0 "register_operand" "=r")

⌨️ 快捷键说明

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