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

📄 mn10300.md

📁 linux下的gcc编译器
💻 MD
📖 第 1 页 / 共 5 页
字号:
      return \"add %2,%0\";    case 5:      /* I'm not sure if this can happen or not.  Might as well be prepared	 and generate the best possible code if it does happen.  */      if (true_regnum (operands[0]) == true_regnum (operands[1]))	return \"add %2,%0\";      if (true_regnum (operands[0]) == true_regnum (operands[2]))	return \"add %1,%0\";      /* We have to copy one of the sources into the destination, then add	 the other source to the destination.	 Carefully select which source to copy to the destination; a naive	 implementation will waste a byte when the source classes are different	 and the destination is an address register.  Selecting the lowest	 cost register copy will optimize this sequence.  */      if (REGNO_REG_CLASS (true_regnum (operands[1]))	  == REGNO_REG_CLASS (true_regnum (operands[0])))	return \"mov %1,%0\;add %2,%0\";      return \"mov %2,%0\;add %1,%0\";    default:      abort ();    }}"  [(set_attr "cc" "set_zn,none_0hit,none_0hit,set_zn,none_0hit,set_zn")]);; ----------------------------------------------------------------------;; SUBTRACT INSTRUCTIONS;; ----------------------------------------------------------------------(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 ""  [(set (match_operand:SI 0 "register_operand" "=dax,!dax")	(minus:SI (match_operand:SI 1 "register_operand" "0,dax")		  (match_operand:SI 2 "nonmemory_operand" "daxi,dax")))]  "TARGET_AM33"  "*{  if (true_regnum (operands[0]) == true_regnum (operands[1]))    return \"sub %2,%0\";  else    {      enum reg_class src1_class, src2_class, dst_class;      src1_class = REGNO_REG_CLASS (true_regnum (operands[1]));      src2_class = REGNO_REG_CLASS (true_regnum (operands[2]));      dst_class = REGNO_REG_CLASS (true_regnum (operands[0]));      /* If no extended registers are used, then the best way to handle	 this is to copy the first source operand into the destination	 and emit a two address subtraction.  */      if (src1_class != EXTENDED_REGS	  && src2_class != EXTENDED_REGS	  && dst_class != EXTENDED_REGS	  && true_regnum (operands[0]) != true_regnum (operands[2]))	return \"mov %1,%0\;sub %2,%0\";      return \"sub %2,%1,%0\";    }}"  [(set_attr "cc" "set_zn")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dax")	(minus:SI (match_operand:SI 1 "register_operand" "0")		  (match_operand:SI 2 "nonmemory_operand" "daxi")))]  ""  "sub %2,%0"  [(set_attr "cc" "set_zn")])(define_expand "negsi2"  [(set (match_operand:SI 0 "register_operand" "")        (neg:SI (match_operand:SI 1 "register_operand" "")))]  ""  "{  rtx target = gen_reg_rtx (SImode);  emit_move_insn (target, GEN_INT (0));  emit_insn (gen_subsi3 (target, target, operands[1]));  emit_move_insn (operands[0], target);  DONE;}");; ----------------------------------------------------------------------;; MULTIPLY INSTRUCTIONS;; ----------------------------------------------------------------------(define_insn "mulsidi3"  [(set (match_operand:DI 0 "register_operand" "=dax")        (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "dax"))                 (sign_extend:DI (match_operand:SI 2 "register_operand" "dax"))))]  "TARGET_AM33"  "mul %1,%2,%H0,%L0"  [(set_attr "cc" "set_zn")])(define_insn "umulsidi3"  [(set (match_operand:DI 0 "register_operand" "=dax")        (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "dax"))                 (zero_extend:DI (match_operand:SI 2 "register_operand" "dax"))))]  "TARGET_AM33"  "mulu %1,%2,%H0,%L0"  [(set_attr "cc" "set_zn")])(define_expand "mulsi3"  [(set (match_operand:SI 0 "register_operand" "")	(mult:SI (match_operand:SI 1 "register_operand" "")		 (match_operand:SI 2 "register_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx,!dax")	(mult:SI (match_operand:SI 1 "register_operand" "%0,0")		 (match_operand:SI 2 "nonmemory_operand" "dx,daxi")))]  "TARGET_AM33"  "*{  if (TARGET_MULT_BUG)    return \"nop\;nop\;mul %2,%0\";  else    return \"mul %2,%0\";}"  [(set_attr "cc" "set_zn")])  (define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(mult:SI (match_operand:SI 1 "register_operand" "%0")		 (match_operand:SI 2 "register_operand" "dx")))]  ""  "*{  if (TARGET_MULT_BUG)    return \"nop\;nop\;mul %2,%0\";  else    return \"mul %2,%0\";}"  [(set_attr "cc" "set_zn")])(define_insn "udivmodsi4"  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx")	(udiv:SI (match_operand:SI 1 "general_operand" "0")		 (match_operand:SI 2 "general_operand" "dx")))   (set (match_operand:SI 3 "nonimmediate_operand" "=&d")	(umod:SI (match_dup 1) (match_dup 2)))]  ""  "*{  output_asm_insn (\"sub %3,%3\;mov %3,mdr\", operands);  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"divu %2,%0\";  else    return \"divu %2,%0\;mov mdr,%3\";}"  [(set_attr "cc" "set_zn")])(define_insn "divmodsi4"  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx")	(div:SI (match_operand:SI 1 "general_operand" "0")		 (match_operand:SI 2 "general_operand" "dx")))   (set (match_operand:SI 3 "nonimmediate_operand" "=d")	(mod:SI (match_dup 1) (match_dup 2)))]  ""  "*{  if (find_reg_note (insn, REG_UNUSED, operands[3]))    return \"ext %0\;div %2,%0\";  else    return \"ext %0\;div %2,%0\;mov mdr,%3\";}"  [(set_attr "cc" "set_zn")]);; ----------------------------------------------------------------------;; AND INSTRUCTIONS;; ----------------------------------------------------------------------(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" "=dx,dx,!dax")	(and:SI (match_operand:SI 1 "register_operand" "%0,0,dax")		(match_operand:SI 2 "nonmemory_operand" "N,dxi,dax")))]  "TARGET_AM33"  "*{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xff)    return \"extbu %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xffff)    return \"exthu %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x7fffffff)    return \"add %0,%0\;lsr 1,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x3fffffff)    return \"asl2 %0\;lsr 2,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x1fffffff)    return \"add %0,%0\;asl2 %0\;lsr 3,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x0fffffff)    return \"asl2 %0\;asl2 %0\;lsr 4,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffffe)    return \"lsr 1,%0\;add %0,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffffc)    return \"lsr 2,%0\;asl2 %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffff8)    return \"lsr 3,%0\;add %0,%0\;asl2 %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffff0)    return \"lsr 4,%0\;asl2 %0\;asl2 %0\";  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2])      && REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[2])) == DATA_REGS)    return \"mov %1,%0\;and %2,%0\";  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"and %1,%2,%0\";  if (REG_P (operands[2]) && REG_P (operands[0])      && true_regnum (operands[2]) == true_regnum (operands[0]))    return \"and %1,%0\";  return \"and %2,%0\";}"  [(set_attr "cc" "none_0hit,set_znv,set_znv")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx,dx")	(and:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "N,dxi")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xff)    return \"extbu %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xffff)    return \"exthu %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x7fffffff)    return \"add %0,%0\;lsr 1,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x3fffffff)    return \"asl2 %0\;lsr 2,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x1fffffff)    return \"add %0,%0\;asl2 %0\;lsr 3,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0x0fffffff)    return \"asl2 %0\;asl2 %0\;lsr 4,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffffe)    return \"lsr 1,%0\;add %0,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffffc)    return \"lsr 2,%0\;asl2 %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffff8)    return \"lsr 3,%0\;add %0,%0\;asl2 %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 0xfffffff0)    return \"lsr 4,%0\;asl2 %0\;asl2 %0\";  return \"and %2,%0\";}"  [(set_attr "cc" "none_0hit,set_znv")]);; ----------------------------------------------------------------------;; OR INSTRUCTIONS;; ----------------------------------------------------------------------(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" "=dx,!dax")	(ior:SI (match_operand:SI 1 "register_operand" "%0,dax")		(match_operand:SI 2 "nonmemory_operand" "dxi,dax")))]  "TARGET_AM33"  "*{  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2])      && REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[2])) == DATA_REGS)    return \"mov %1,%0\;or %2,%0\";  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"or %1,%2,%0\";  if (REG_P (operands[2]) && REG_P (operands[0])      && true_regnum (operands[2]) == true_regnum (operands[0]))    return \"or %1,%0\";  return \"or %2,%0\";}"  [(set_attr "cc" "set_znv")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(ior:SI (match_operand:SI 1 "register_operand" "%0")		(match_operand:SI 2 "nonmemory_operand" "dxi")))]  ""  "or %2,%0"  [(set_attr "cc" "set_znv")]);; ----------------------------------------------------------------------;; XOR INSTRUCTIONS;; ----------------------------------------------------------------------(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" "=dx,!dax")	(xor:SI (match_operand:SI 1 "register_operand" "%0,dax")		(match_operand:SI 2 "nonmemory_operand" "dxi,dax")))]  "TARGET_AM33"  "*{  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2])      && REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[2])) == DATA_REGS)    return \"mov %1,%0\;xor %2,%0\";  if (REG_P (operands[2]) && REG_P (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[1])      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"xor %1,%2,%0\";  if (REG_P (operands[2]) && REG_P (operands[0])      && true_regnum (operands[2]) == true_regnum (operands[0]))    return \"xor %1,%0\";  return \"xor %2,%0\";}"  [(set_attr "cc" "set_znv")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(xor:SI (match_operand:SI 1 "register_operand" "%0")		(match_operand:SI 2 "nonmemory_operand" "dxi")))]  ""  "xor %2,%0"  [(set_attr "cc" "set_znv")]);; ----------------------------------------------------------------------;; NOT INSTRUCTIONS;; ----------------------------------------------------------------------(define_expand "one_cmplsi2"  [(set (match_operand:SI 0 "register_operand" "")	(not:SI (match_operand:SI 1 "register_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx,!dax")	(not:SI (match_operand:SI 1 "register_operand" "0,0")))]  "TARGET_AM33"  "not %0"  [(set_attr "cc" "set_znv")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(not:SI (match_operand:SI 1 "register_operand" "0")))]  ""  "not %0"  [(set_attr "cc" "set_znv")]);; -----------------------------------------------------------------;; BIT FIELDS;; -----------------------------------------------------------------;; These set/clear memory in byte sized chunks.;;;; They are no smaller/faster than loading the value into a register;; and storing the register, but they don't need a scratch register;; which may allow for better code generation.(define_insn ""  [(set (match_operand:QI 0 "nonimmediate_operand" "=R,d") (const_int 0))]  ""  "@  bclr 255,%A0  clr %0"  [(set_attr "cc" "clobber")])(define_insn ""  [(set (match_operand:QI 0 "nonimmediate_operand" "=R,d") (const_int -1))]  ""  "@  bset 255,%A0  mov -1,%0"  [(set_attr "cc" "clobber,none_0hit")])(define_insn ""  [(set (match_operand:QI 0 "nonimmediate_operand" "+R,d")	(subreg:QI	  (and:SI (subreg:SI (match_dup 0) 0)		  (match_operand:SI 1 "const_int_operand" "i,i")) 0))]  ""  "@  bclr %N1,%A0  and %1,%0"  [(set_attr "cc" "clobber,set_znv")])(define_insn ""  [(set (match_operand:QI 0 "memory_operand" "=R,T")	(and:QI	 (match_dup 0)	 (not:QI (match_operand:QI 1 "nonmemory_operand" "i,d"))))]  ""  "@  bclr %U1,%A0  bclr %1,%0"  [(set_attr "cc" "clobber,clobber")])(define_insn ""  [(set (match_operand:QI 0 "nonimmediate_operand" "+R,d")	(subreg:QI	  (ior:SI (subreg:SI (match_dup 0) 0)		  (match_operand:SI 1 "const_int_operand" "i,i")) 0))]  ""  "@  bset %U1,%A0  or %1,%0"  [(set_attr "cc" "clobber,set_znv")])(define_expand "iorqi3"  [(set (match_operand:QI 0 "nonimmediate_operand" "")	(ior:QI (match_operand:QI 1 "nonimmediate_operand" "")		(match_operand:QI 2 "nonmemory_operand" "")))]

⌨️ 快捷键说明

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