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

📄 i860.md

📁 这是完整的gcc源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
  [(set (match_operand:SI 0 "register_operand" "=r,r,*f")	(minus:SI (match_operand:SI 1 "register_operand" "r,I,*f")		  (match_operand:SI 2 "nonmemory_operand" "rn,r,*f")))]  ""  "*{  if (which_alternative == 2)    return \"fisub.ss %1,%2,%0\";  if (REG_P (operands[2]))    return \"subu %1,%2,%0\";  if (SMALL_INT (operands[2]) && INTVAL (operands[2]) != -0x10000)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[2]));      return \"addu %2,%1,%0\";    }  cc_status.flags &= ~CC_KNOW_HI_R31;  return \"orh h%%%2,r0,r31\;or l%%%2,r31,r31\;sub %1,r31,%0\";}")(define_insn "subdi3"  [(set (match_operand:DI 0 "register_operand" "=f")	(minus:DI (match_operand:DI 1 "register_operand" "%f")		  (match_operand:DI 2 "register_operand" "f")))]  ""  "fisub.dd %1,%2,%0")(define_expand "mulsi3"  [(set (subreg:SI (match_dup 4) 0) (match_operand:SI 1 "general_operand" ""))   (set (subreg:SI (match_dup 5) 0) (match_operand:SI 2 "general_operand" ""))   (clobber (match_dup 3))   (set (subreg:SI (match_dup 3) 0)	(mult:SI (subreg:SI (match_dup 4) 0) (subreg:SI (match_dup 5) 0)))   (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 0))]  ""  "{  operands[3] = gen_reg_rtx (DImode);  operands[4] = gen_reg_rtx (DImode);  operands[5] = gen_reg_rtx (DImode);}")(define_insn ""  [(set (subreg:SI (match_operand:DI 0 "register_operand" "=f") 0)	(mult:SI (subreg:SI (match_operand:DI 1 "register_operand" "f") 0)		 (subreg:SI (match_operand:DI 2 "register_operand" "f") 0)))]  ""  "fmlow.dd %2,%1,%0");;- and instructions (with complement also)			   (define_insn "andsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(and:SI (match_operand:SI 1 "nonmemory_operand" "%r")		(match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  rtx xop[3];  if (REG_P (operands[2]) || LOGIC_INT (operands[2]))    return \"and %2,%1,%0\";  if ((INTVAL (operands[2]) & 0xffff) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, 			     (unsigned) INTVAL (operands[2]) >> 16);      return \"andh %2,%1,%0\";    }  xop[0] = operands[0];  xop[1] = operands[1];  xop[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]) & 0xffff);  output_asm_insn (\"andnot %2,%1,%0\", xop);  operands[2] = gen_rtx (CONST_INT, VOIDmode, 			 ~(unsigned) INTVAL (operands[2]) >> 16);  return \"andnoth %2,%0,%0\";}")(define_insn "andcbsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(and:SI (match_operand:SI 1 "register_operand" "r")		(not:SI (match_operand:SI 2 "register_operand" "rn"))))]  ""  "*{  rtx xop[3];  if (REG_P (operands[2]) || LOGIC_INT (operands[2]))    return \"andnot %2,%1,%0\";  if ((INTVAL (operands[2]) & 0xffff) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, 			     (unsigned) INTVAL (operands[2]) >> 16);      return \"andnoth %2,%1,%0\";    }  xop[0] = operands[0];  xop[1] = operands[1];  xop[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) & 0xffff));  output_asm_insn (\"andnot %2,%1,%0\", xop);  operands[2] = gen_rtx (CONST_INT, VOIDmode, 			 (unsigned) INTVAL (operands[2]) >> 16);  return \"andnoth %2,%0,%0\";}")(define_insn "iorsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(ior:SI (match_operand:SI 1 "nonmemory_operand" "%r")		(match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  rtx xop[3];  if (REG_P (operands[2]) || LOGIC_INT (operands[2]))    return \"or %2,%1,%0\";  if ((INTVAL (operands[2]) & 0xffff) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, 			     (unsigned) INTVAL (operands[2]) >> 16);      return \"orh %2,%1,%0\";    }  xop[0] = operands[0];  xop[1] = operands[1];  xop[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) & 0xffff));  output_asm_insn (\"or %2,%1,%0\", xop);  operands[2] = gen_rtx (CONST_INT, VOIDmode, 			 (unsigned) INTVAL (operands[2]) >> 16);  return \"orh %2,%0,%0\";}")(define_insn "xorsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(xor:SI (match_operand:SI 1 "nonmemory_operand" "%r")		(match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  rtx xop[3];  if (REG_P (operands[2]) || LOGIC_INT (operands[2]))    return \"xor %2,%1,%0\";  if ((INTVAL (operands[2]) & 0xffff) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, 			     (unsigned) INTVAL (operands[2]) >> 16);      return \"xorh %2,%1,%0\";    }  xop[0] = operands[0];  xop[1] = operands[1];  xop[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) & 0xffff));  output_asm_insn (\"xor %2,%1,%0\", xop);  operands[2] = gen_rtx (CONST_INT, VOIDmode, 			 (unsigned) INTVAL (operands[2]) >> 16);  return \"xorh %2,%0,%0\";}")(define_insn "negsi2"  [(set (match_operand:SI 0 "general_operand" "=r")	(neg:SI (match_operand:SI 1 "arith_operand" "rI")))]  ""  "subu r0,%1,%0")(define_insn "one_cmplsi2"  [(set (match_operand:SI 0 "general_operand" "=r")	(not:SI (match_operand:SI 1 "arith_operand" "r")))]  ""  "subu -1,%1,%0");; Floating point arithmetic instructions.(define_insn "adddf3"  [(set (match_operand:DF 0 "register_operand" "=f")	(plus:DF (match_operand:DF 1 "register_operand" "f")		 (match_operand:DF 2 "register_operand" "f")))]  ""  "fadd.dd %1,%2,%0")(define_insn "addsf3"  [(set (match_operand:SF 0 "register_operand" "=f")	(plus:SF (match_operand:SF 1 "register_operand" "f")		 (match_operand:SF 2 "register_operand" "f")))]  ""  "fadd.ss %1,%2,%0")(define_insn "subdf3"  [(set (match_operand:DF 0 "register_operand" "=f")	(minus:DF (match_operand:DF 1 "register_operand" "f")		  (match_operand:DF 2 "register_operand" "f")))]  ""  "fsub.dd %1,%2,%0")(define_insn "subsf3"  [(set (match_operand:SF 0 "register_operand" "=f")	(minus:SF (match_operand:SF 1 "register_operand" "f")		  (match_operand:SF 2 "register_operand" "f")))]  ""  "fsub.ss %1,%2,%0")(define_insn "muldf3"  [(set (match_operand:DF 0 "register_operand" "=f")	(mult:DF (match_operand:DF 1 "register_operand" "f")		 (match_operand:DF 2 "register_operand" "f")))]  ""  "fmul.dd %1,%2,%0")(define_insn "mulsf3"  [(set (match_operand:SF 0 "register_operand" "=f")	(mult:SF (match_operand:SF 1 "register_operand" "f")		 (match_operand:SF 2 "register_operand" "f")))]  ""  "fmul.ss %1,%2,%0")(define_insn "negdf2"  [(set (match_operand:DF 0 "register_operand" "=f")	(neg:DF (match_operand:DF 1 "register_operand" "f")))]  ""  "fsub.dd f0,%1,%0")(define_insn "negsf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(neg:SF (match_operand:SF 1 "register_operand" "f")))]  ""  "fsub.ss f0,%1,%0");; Shift instructions;; Optimized special case of shifting.;; Must precede the general case.(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r")	(ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")		     (const_int 24)))]  ""  "*{  if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))    {      cc_status.flags |= CC_KNOW_HI_R31 | CC_HI_R31_ADJ;      cc_status.mdep = XEXP (operands[1], 0);      return \"orh ha%%%m1,r0,r31\;ld.b l%%%m1(r31),%0\";    }  return \"ld.b %1,%0\";}");;- arithmetic shift instructions(define_insn "ashlsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(ashift:SI (match_operand:SI 1 "register_operand" "r")		   (match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) >= 32)    return \"mov r0,%0\";  return \"shl %2,%1,%0\";}")(define_insn "ashlhi3"  [(set (match_operand:HI 0 "register_operand" "=r")	(ashift:HI (match_operand:HI 1 "register_operand" "r")		   (match_operand:HI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) >= 16)    return \"mov r0,%0\";  return \"shl %2,%1,%0\";}")(define_insn "ashlqi3"  [(set (match_operand:QI 0 "register_operand" "=r")	(ashift:QI (match_operand:QI 1 "register_operand" "r")		   (match_operand:QI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) >= 8)    return \"mov r0,%0\";  return \"shl %2,%1,%0\";}")(define_insn "ashrsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(ashiftrt:SI (match_operand:SI 1 "register_operand" "r")		     (match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) >= 32)    return \"shra 31,%1,%0\";  return \"shra %2,%1,%0\";}")(define_insn "lshrsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(lshiftrt:SI (match_operand:SI 1 "register_operand" "r")		     (match_operand:SI 2 "nonmemory_operand" "rn")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) >= 32)    return \"mov r0,%0\";  return \"shr %2,%1,%0\";}");; Unconditional and other jump instructions(define_insn "jump"  [(set (pc) (label_ref (match_operand 0 "" "")))]  ""  "*{  return \"br %l0\;nop\";}");; Here are two simple peepholes which fill the delay slot of;; an unconditional branch.(define_peephole  [(set (match_operand:SI 0 "register_operand" "=rf")	(match_operand:SI 1 "single_insn_src_p" "p"))   (set (pc) (label_ref (match_operand 2 "" "")))]  ""  "* return output_delayed_branch (\"br %l2\", operands, insn);")(define_peephole  [(set (match_operand:SI 0 "memory_operand" "=m")	(match_operand:SI 1 "reg_or_0_operand" "rfJ"))   (set (pc) (label_ref (match_operand 2 "" "")))]  ""  "* return output_delayed_branch (\"br %l2\", operands, insn);")(define_insn "tablejump"  [(set (pc) (match_operand:SI 0 "register_operand" "r"))   (use (label_ref (match_operand 1 "" "")))]  ""  "bri %0\;nop")(define_peephole  [(set (match_operand:SI 0 "memory_operand" "=m")	(match_operand:SI 1 "reg_or_0_operand" "rfJ"))   (set (pc) (match_operand:SI 2 "register_operand" "r"))   (use (label_ref (match_operand 3 "" "")))]  ""  "* return output_delayed_branch (\"bri %2\", operands, insn);");;- jump to subroutine(define_expand "call"  [(call (match_operand:SI 0 "memory_operand" "m")	 (match_operand 1 "" "i"))]  ;; operand[2] is next_arg_register  ""  "{  if (INTVAL (operands[1]) > 0)    {      emit_move_insn (arg_pointer_rtx, stack_pointer_rtx);      emit_insn (gen_rtx (USE, VOIDmode, arg_pointer_rtx));    }}");;- jump to subroutine(define_insn ""  [(call (match_operand:SI 0 "memory_operand" "m")	 (match_operand 1 "" "i"))]  ;; operand[2] is next_arg_register  ""  "*{  /* strip the MEM.  */  operands[0] = XEXP (operands[0], 0);  CC_STATUS_INIT;  if (GET_CODE (operands[0]) == REG)    return \"calli %0\;nop\";  return \"call %0\;nop\";}")(define_peephole  [(set (match_operand:SI 0 "register_operand" "=rf")	(match_operand:SI 1 "single_insn_src_p" "p"))   (call (match_operand:SI 2 "memory_operand" "m")	 (match_operand 3 "" "i"))]  ;;- Don't use operand 1 for most machines.  "! reg_mentioned_p (operands[0], operands[2])"  "*{  /* strip the MEM.  */  operands[2] = XEXP (operands[2], 0);  if (GET_CODE (operands[2]) == REG)    return output_delayed_branch (\"calli %2\", operands, insn);  return output_delayed_branch (\"call %2\", operands, insn);}")(define_peephole  [(set (match_operand:SI 0 "memory_operand" "=m")	(match_operand:SI 1 "reg_or_0_operand" "rfJ"))   (call (match_operand:SI 2 "memory_operand" "m")	 (match_operand 3 "" "i"))]  ;;- Don't use operand 1 for most machines.  ""  "*{  /* strip the MEM.  */  operands[2] = XEXP (operands[2], 0);  if (GET_CODE (operands[2]) == REG)    return output_delayed_branch (\"calli %2\", operands, insn);  return output_delayed_branch (\"call %2\", operands, insn);}")(define_expand "call_value"  [(set (match_operand 0 "register_operand" "=rf")	(call (match_operand:SI 1 "memory_operand" "m")	      (match_operand 2 "" "i")))]  ;; operand 3 is next_arg_register  ""  "{  if (INTVAL (operands[2]) > 0)    {      emit_move_insn (arg_pointer_rtx, stack_pointer_rtx);      emit_insn (gen_rtx (USE, VOIDmode, arg_pointer_rtx));    }}")(define_insn ""  [(set (match_operand 0 "register_operand" "=rf")	(call (match_operand:SI 1 "memory_operand" "m")	      (match_operand 2 "" "i")))]  ;; operand 3 is next_arg_register  ""  "*{  /* strip the MEM.  */  operands[1] = XEXP (operands[1], 0);  CC_STATUS_INIT;  if (GET_CODE (operands[1]) == REG)    return \"calli %1\;nop\";  return \"call %1\;nop\";}")(define_peephole  [(set (match_operand:SI 0 "register_operand" "=rf")	(match_operand:SI 1 "single_insn_src_p" "p"))   (set (match_operand 2 "" "=rf")	(call (match_operand:SI 3 "memory_operand" "m")	      (match_operand 4 "" "i")))]  ;;- Don't use operand 4 for most machines.  "! reg_mentioned_p (operands[0], operands[3])"  "*{  /* strip the MEM.  */  operands[3] = XEXP (operands[3], 0);  if (GET_CODE (operands[3]) == REG)    return output_delayed_branch (\"calli %3\", operands, insn);  return output_delayed_branch (\"call %3\", operands, insn);}")(define_peephole  [(set (match_operand:SI 0 "memory_operand" "=m")	(match_operand:SI 1 "reg_or_0_operand" "rJf"))   (set (match_operand 2 "" "=rf")	(call (match_operand:SI 3 "memory_operand" "m")	      (match_operand 4 "" "i")))]  ;;- Don't use operand 4 for most machines.  ""  "*{  /* strip the MEM.  */  operands[3] = XEXP (operands[3], 0);  if (GET_CODE (operands[3]) == REG)    return output_delayed_branch (\"calli %3\", operands, insn);  return output_delayed_branch (\"call %3\", operands, insn);}")(define_insn "nop"  [(const_int 0)]  ""  "nop")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r")	(mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r")			 (label_ref (match_operand 2 "" "")))))]  ""  "*{  cc_status.flags = 0;  return \"mov %l2,r31\;ld.l r31(%1),%0\";}")  (define_peephole  [(set (match_operand:SI 0 "register_operand" "=rf")	(match_operand:SI 1 "single_insn_src_p" "p"))   (set (pc) (match_operand:SI 2 "register_operand" "r"))   (use (label_ref (match_operand 3 "" "")))]  "REGNO (operands[0]) != REGNO (operands[2])"  "* return output_delayed_branch (\"bri %2\", operands, insn);");;- Local variables:;;- mode:emacs-lisp;;- comment-start: ";;- ";;- eval: (set-syntax-table (copy-sequence (syntax-table)));;- eval: (modify-syntax-entry ?[ "(]");;- eval: (modify-syntax-entry ?] ")[");;- eval: (modify-syntax-entry ?{ "(}");;- eval: (modify-syntax-entry ?} "){");;- End:

⌨️ 快捷键说明

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