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

📄 mn10300.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
  "{  if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)    {      if (MN10300_GLOBAL_P (XEXP (operands[0], 0)))	{	  /* The PLT code won't run on AM30, but then, there's no	     shared library support for AM30 either, so we just assume	     the linker is going to adjust all @PLT relocs to the	     actual symbols.  */	  emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));	  XEXP (operands[0], 0) = gen_sym2PLT (XEXP (operands[0], 0));	}      else	XEXP (operands[0], 0) = gen_sym2PIC (XEXP (operands[0], 0));    }  if (! call_address_operand (XEXP (operands[0], 0), VOIDmode))    XEXP (operands[0], 0) = force_reg (SImode, XEXP (operands[0], 0));  emit_call_insn (gen_call_internal (XEXP (operands[0], 0), operands[1]));  DONE;}")(define_insn "call_internal"  [(call (mem:QI (match_operand:SI 0 "call_address_operand" "aS"))	 (match_operand:SI 1 "general_operand" "g"))]  ""  "*{  if (REG_P (operands[0]))    return \"calls %C0\";  else    return \"call %C0,[],0\";}"  [(set_attr "cc" "clobber")]);; Call subroutine, returning value in operand 0;; (which must be a hard register).(define_expand "call_value"  [(set (match_operand 0 "" "")	(call (match_operand:QI 1 "general_operand" "")	      (match_operand:SI 2 "general_operand" "")))]  ""  "{  if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)    {      if (MN10300_GLOBAL_P (XEXP (operands[1], 0)))	{	  /* The PLT code won't run on AM30, but then, there's no	     shared library support for AM30 either, so we just assume	     the linker is going to adjust all @PLT relocs to the	     actual symbols.  */	  emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));	  XEXP (operands[1], 0) = gen_sym2PLT (XEXP (operands[1], 0));	}      else	XEXP (operands[1], 0) = gen_sym2PIC (XEXP (operands[1], 0));    }  if (! call_address_operand (XEXP (operands[1], 0), VOIDmode))    XEXP (operands[1], 0) = force_reg (SImode, XEXP (operands[1], 0));  emit_call_insn (gen_call_value_internal (operands[0],					   XEXP (operands[1], 0),					   operands[2]));  DONE;}")(define_insn "call_value_internal"  [(set (match_operand 0 "" "=dax")	(call (mem:QI (match_operand:SI 1 "call_address_operand" "aS"))	      (match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (REG_P (operands[1]))    return \"calls %C1\";  else    return \"call %C1,[],0\";}"  [(set_attr "cc" "clobber")])(define_expand "untyped_call"  [(parallel [(call (match_operand 0 "" "")                    (const_int 0))              (match_operand 1 "" "")              (match_operand 2 "" "")])]  ""  "{  int i;  emit_call_insn (gen_call (operands[0], const0_rtx));  for (i = 0; i < XVECLEN (operands[2], 0); i++)    {      rtx set = XVECEXP (operands[2], 0, i);      emit_move_insn (SET_DEST (set), SET_SRC (set));    }  DONE;}")(define_insn "nop"  [(const_int 0)]  ""  "nop"  [(set_attr "cc" "none")]);; ----------------------------------------------------------------------;; EXTEND INSTRUCTIONS;; ----------------------------------------------------------------------(define_expand "zero_extendqisi2"  [(set (match_operand:SI 0 "general_operand" "")	(zero_extend:SI	 (match_operand:QI 1 "general_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,dx,!dax,!dax,!dax")	(zero_extend:SI	 (match_operand:QI 1 "general_operand" "0,dax,m,0,dax,m")))]  "TARGET_AM33"  "@  extbu %0  mov %1,%0\;extbu %0  movbu %1,%0  extbu %0  mov %1,%0\;extbu %0  movbu %1,%0"  [(set_attr "cc" "none_0hit")])(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,dx")	(zero_extend:SI	 (match_operand:QI 1 "general_operand" "0,d,m")))]  ""  "@  extbu %0  mov %1,%0\;extbu %0  movbu %1,%0"  [(set_attr "cc" "none_0hit")])(define_expand "zero_extendhisi2"  [(set (match_operand:SI 0 "general_operand" "")	(zero_extend:SI	 (match_operand:HI 1 "general_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,dx,!dax,!dax,!dax")	(zero_extend:SI	 (match_operand:HI 1 "general_operand" "0,dax,m,0,dax,m")))]  "TARGET_AM33"  "@  exthu %0  mov %1,%0\;exthu %0  movhu %1,%0  exthu %0  mov %1,%0\;exthu %0  movhu %1,%0"  [(set_attr "cc" "none_0hit")])(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,dx")	(zero_extend:SI	 (match_operand:HI 1 "general_operand" "0,dx,m")))]  ""  "@  exthu %0  mov %1,%0\;exthu %0  movhu %1,%0"  [(set_attr "cc" "none_0hit")]);;- sign extension instructions(define_expand "extendqisi2"  [(set (match_operand:SI 0 "general_operand" "")	(sign_extend:SI	 (match_operand:QI 1 "general_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,!dax,!dax")	(sign_extend:SI	 (match_operand:QI 1 "general_operand" "0,dx,0,dax")))]  "TARGET_AM33"  "@  extb %0  mov %1,%0\;extb %0  extb %0  mov %1,%0\;extb %0"  [(set_attr "cc" "none_0hit")])(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx")	(sign_extend:SI	 (match_operand:QI 1 "general_operand" "0,dx")))]  ""  "@  extb %0  mov %1,%0\;extb %0"  [(set_attr "cc" "none_0hit")])(define_expand "extendhisi2"  [(set (match_operand:SI 0 "general_operand" "")	(sign_extend:SI	 (match_operand:HI 1 "general_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx,!dax,!dax")	(sign_extend:SI	 (match_operand:HI 1 "general_operand" "0,dax,0,dax")))]  "TARGET_AM33"  "@  exth %0  mov %1,%0\;exth %0  exth %0  mov %1,%0\;exth %0"  [(set_attr "cc" "none_0hit")])(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=dx,dx")	(sign_extend:SI	 (match_operand:HI 1 "general_operand" "0,dx")))]  ""  "@  exth %0  mov %1,%0\;exth %0"  [(set_attr "cc" "none_0hit")]);; ----------------------------------------------------------------------;; SHIFTS;; ----------------------------------------------------------------------(define_expand "ashlsi3"  [(set (match_operand:SI 0 "register_operand" "")	(ashift:SI	 (match_operand:SI 1 "register_operand" "")	 (match_operand:QI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dax,dx,!dax")	(ashift:SI	 (match_operand:SI 1 "register_operand" "0,0,dax")	 (match_operand:QI 2 "nonmemory_operand" "J,dxi,dax")))]  "TARGET_AM33"  "*{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1)    return \"add %0,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 2)    return \"asl2 %0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 3      && REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS)    return \"asl2 %0\;add %0,%0\";  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 4      && REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS)    return \"asl2 %0\;asl2 %0\";  if (true_regnum (operands[1]) == true_regnum (operands[0]))    return \"asl %S2,%0\";  if (REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"mov %1,%0\;asl %S2,%0\";  return \"asl %2,%1,%0\";}"  [(set_attr "cc" "set_zn")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dax,dx,dx,dx,dx")	(ashift:SI	 (match_operand:SI 1 "register_operand" "0,0,0,0,0")	 (match_operand:QI 2 "nonmemory_operand" "J,K,M,L,dxi")))]  ""  "@  add %0,%0  asl2 %0  asl2 %0\;add %0,%0  asl2 %0\;asl2 %0  asl %S2,%0"  [(set_attr "cc" "set_zn")])(define_expand "lshrsi3"  [(set (match_operand:SI 0 "register_operand" "")	(lshiftrt:SI	 (match_operand:SI 1 "register_operand" "")	 (match_operand:QI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx,!dax")	(lshiftrt:SI	 (match_operand:SI 1 "register_operand" "0,dax")	 (match_operand:QI 2 "nonmemory_operand" "dxi,dax")))]  "TARGET_AM33"  "*{  if (true_regnum (operands[1]) == true_regnum (operands[0]))    return \"lsr %S2,%0\";  if (REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"mov %1,%0\;lsr %S2,%0\";  return \"lsr %2,%1,%0\";}"  [(set_attr "cc" "set_zn")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(lshiftrt:SI	 (match_operand:SI 1 "register_operand" "0")	 (match_operand:QI 2 "nonmemory_operand" "dxi")))]  ""  "lsr %S2,%0"  [(set_attr "cc" "set_zn")])(define_expand "ashrsi3"  [(set (match_operand:SI 0 "register_operand" "")	(ashiftrt:SI	 (match_operand:SI 1 "register_operand" "")	 (match_operand:QI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx,!dax")	(ashiftrt:SI	 (match_operand:SI 1 "register_operand" "0,dax")	 (match_operand:QI 2 "nonmemory_operand" "dxi,dax")))]  "TARGET_AM33"  "*{  if (true_regnum (operands[1]) == true_regnum (operands[0]))    return \"asr %S2,%0\";  if (REGNO_REG_CLASS (true_regnum (operands[0])) == DATA_REGS      && REGNO_REG_CLASS (true_regnum (operands[1])) == DATA_REGS      && true_regnum (operands[0]) != true_regnum (operands[2]))    return \"mov %1,%0\;asr %S2,%0\";  return \"asr %2,%1,%0\";}"  [(set_attr "cc" "set_zn")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=dx")	(ashiftrt:SI	 (match_operand:SI 1 "register_operand" "0")	 (match_operand:QI 2 "nonmemory_operand" "dxi")))]  ""  "asr %S2,%0"  [(set_attr "cc" "set_zn")]);; ----------------------------------------------------------------------;; FP INSTRUCTIONS;; ----------------------------------------------------------------------;;;; The mn103 series does not have floating point instructions, but since;; FP values are held in integer regs, we can clear the high bit easily;; which gives us an efficient inline floating point absolute value.;;;; Similarly for negation of a FP value.;;(define_expand "absdf2"  [(set (match_operand:DF 0 "register_operand" "")        (abs:DF (match_operand:DF 1 "register_operand" "")))]  ""  "{  rtx target, result, insns;  start_sequence ();  target = operand_subword (operands[0], 1, 1, DFmode);  result = expand_binop (SImode, and_optab,			 operand_subword_force (operands[1], 1, DFmode),			 GEN_INT (0x7fffffff), target, 0, OPTAB_WIDEN);  if (result == 0)    abort ();  if (result != target)    emit_move_insn (result, target);  emit_move_insn (operand_subword (operands[0], 0, 1, DFmode),		  operand_subword_force (operands[1], 0, DFmode));  insns = get_insns ();  end_sequence ();  emit_no_conflict_block (insns, operands[0], operands[1], 0, 0);  DONE;}")(define_expand "abssf2"  [(set (match_operand:SF 0 "register_operand" "")        (abs:SF (match_operand:SF 1 "register_operand" "")))]  ""  "{  rtx result;  rtx target;  if (TARGET_AM33_2)    {      emit_insn (gen_abssf2_am33_2 (operands[0], operands[1]));      DONE;    }  target = operand_subword_force (operands[0], 0, SFmode);  result = expand_binop (SImode, and_optab,			 operand_subword_force (operands[1], 0, SFmode),			 GEN_INT (0x7fffffff), target, 0, OPTAB_WIDEN);  if (result == 0)    abort ();  if (result != target)    emit_move_insn (result, target);  /* Make a place for REG_EQUAL.  */  emit_move_insn (operands[0], operands[0]);  DONE;}")(define_insn "abssf2_am33_2"  [(set (match_operand:SF 0 "register_operand" "=f,f")	(abs:SF (match_operand:SF 1 "register_operand" "0,?f")))]  "TARGET_AM33_2"  "@   fabs %0   fabs %1, %0"  [(set_attr "cc" "none_0hit")])(define_expand "negdf2"  [(set (match_operand:DF 0 "regi

⌨️ 快捷键说明

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