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

📄 i960.md

📁 早期freebsd实现
💻 MD
📖 第 1 页 / 共 5 页
字号:
  [(set (reg:CC 36)	(compare:CC (match_operand:TF 0 "register_operand" "f")		    (match_operand:TF 1 "nonmemory_operand" "fG")))]  "TARGET_NUMERICS"  "cmpr	%0,%1"  [(set_attr "type" "fpcc")])(define_expand "movtf"  [(set (match_operand:TF 0 "general_operand" "")	(match_operand:TF 1 "fpmove_src_operand" ""))]  ""  "{  if (emit_move_sequence (operands, TFmode))    DONE;}")(define_insn ""  [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m,o")	(match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d,G"))]  "current_function_args_size == 0   && (register_operand (operands[0], TFmode)       || register_operand (operands[1], TFmode)       || operands[1] == CONST0_RTX (TFmode))"  "*{  switch (which_alternative)    {    case 0:      if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))	return \"movre	%1,%0\";      else	return \"movq	%1,%0\";    case 1:      return \"movre	%1,%0\";    case 2:      return i960_output_ldconst (operands[0], operands[1]);    case 3:      return \"ldq	%1,%0\";    case 4:      return \"stq	%1,%0\";    case 5:      operands[1] = adj_offsettable_operand (operands[0], 4);      operands[2] = adj_offsettable_operand (operands[0], 8);      operands[3] = adj_offsettable_operand (operands[0], 12);      return \"st	g14,%0\;st	g14,%1\;st	g14,%2\;st	g14,%3\";    }}"  [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")])(define_insn ""  [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m")	(match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d"))]  "current_function_args_size != 0   && (register_operand (operands[0], TFmode)       || register_operand (operands[1], TFmode))"  "*{  switch (which_alternative)    {    case 0:      if (FP_REG_P (operands[0]) || FP_REG_P (operands[1]))	return \"movre	%1,%0\";      else	return \"movq	%1,%0\";    case 1:      return \"movre	%1,%0\";    case 2:      return i960_output_ldconst (operands[0], operands[1]);    case 3:      return \"ldq	%1,%0\";    case 4:      return \"stq	%1,%0\";    }}"  [(set_attr "type" "move,move,load,fpload,fpstore")])(define_insn "extendsftf2"  [(set (match_operand:TF 0 "register_operand" "=*f,d")	(float_extend:TF	 (match_operand:SF 1 "register_operand" "d,f")))]  "TARGET_NUMERICS"  "@  movr	%1,%0  movre	%1,%0"  [(set_attr "type" "fpmove")])(define_insn "extenddftf2"  [(set (match_operand:TF 0 "register_operand" "=*f,d")	(float_extend:TF	 (match_operand:DF 1 "register_operand" "d,f")))]  "TARGET_NUMERICS"  "@  movrl	%1,%0  movre	%1,%0"  [(set_attr "type" "fpmove")])(define_insn "trunctfdf2"  [(set (match_operand:DF 0 "register_operand" "=d")	(float_truncate:DF	 (match_operand:TF 1 "register_operand" "f")))]  "TARGET_NUMERICS"  "movrl	%1,%0"  [(set_attr "type" "fpmove")])(define_insn "trunctfsf2"  [(set (match_operand:SF 0 "register_operand" "=d")	(float_truncate:SF	 (match_operand:TF 1 "register_operand" "f")))]  "TARGET_NUMERICS"  "movr	%1,%0"  [(set_attr "type" "fpmove")])(define_insn "floatsitf2"  [(set (match_operand:TF 0 "register_operand" "=f")	(float:TF (match_operand:SI 1 "register_operand" "d")))]  "TARGET_NUMERICS"  "cvtir	%1,%0"  [(set_attr "type" "fpcvt")])(define_insn "fix_trunctfsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]  "TARGET_NUMERICS"  "cvtzri	%1,%0"  [(set_attr "type" "fpcvt")])(define_insn "fixuns_trunctfsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(unsigned_fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]  "TARGET_NUMERICS"  "cvtzri	%1,%0"  [(set_attr "type" "fpcvt")])(define_insn "addtf3"  [(set (match_operand:TF 0 "register_operand" "=f")	(plus:TF (match_operand:TF 1 "nonmemory_operand" "%fG")		 (match_operand:TF 2 "nonmemory_operand" "fG")))]  "TARGET_NUMERICS"  "addr	%1,%2,%0"  [(set_attr "type" "fpadd")])(define_insn "subtf3"  [(set (match_operand:TF 0 "register_operand" "=f")	(minus:TF (match_operand:TF 1 "nonmemory_operand" "fG")		  (match_operand:TF 2 "nonmemory_operand" "fG")))]  "TARGET_NUMERICS"  "subr	%2,%1,%0"  [(set_attr "type" "fpadd")])(define_insn "multf3"  [(set (match_operand:TF 0 "register_operand" "=f")	(mult:TF (match_operand:TF 1 "nonmemory_operand" "fG")		 (match_operand:TF 2 "nonmemory_operand" "fG")))]  "TARGET_NUMERICS"  "mulr	%1,%2,%0"  [(set_attr "type" "fpmul")])(define_insn "divtf3"  [(set (match_operand:TF 0 "register_operand" "=f")	(div:TF (match_operand:TF 1 "nonmemory_operand" "fG")		(match_operand:TF 2 "nonmemory_operand" "fG")))]  "TARGET_NUMERICS"  "divr	%2,%1,%0"  [(set_attr "type" "fpdiv")])(define_insn "negtf2"  [(set (match_operand:TF 0 "register_operand" "=f")	(neg:TF (match_operand:TF 1 "register_operand" "f")))]  "TARGET_NUMERICS"  "subr	%1,0f0.0,%0"  [(set_attr "type" "fpadd")])(define_insn "abstf2"  [(set (match_operand:TF 0 "register_operand" "=f")	(abs:TF (match_operand:TF 1 "register_operand" "f")))]  "(TARGET_NUMERICS)"  "cpysre	%1,0f0.0,%0"  [(set_attr "type" "fpmove")]);; Arithmetic shift instructions.(define_insn "ashlsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(ashift:SI (match_operand:SI 1 "arith_operand" "dI")		   (match_operand:SI 2 "arith_operand" "dI")))]  ""  "shli	%2,%1,%0"  [(set_attr "type" "alu2")])(define_insn "ashrsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(ashiftrt:SI (match_operand:SI 1 "arith_operand" "dI")		     (match_operand:SI 2 "arith_operand" "dI")))]  ""  "shri	%2,%1,%0"  [(set_attr "type" "alu2")])(define_insn "lshrsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(lshiftrt:SI (match_operand:SI 1 "arith_operand" "dI")		   (match_operand:SI 2 "arith_operand" "dI")))]  ""  "shro	%2,%1,%0"  [(set_attr "type" "alu2")]);; Unconditional and other jump instructions.(define_insn "jump"  [(set (pc)	(label_ref (match_operand 0 "" "")))]  ""  "b	%l0"  [(set_attr "type" "branch")])(define_insn "indirect_jump"  [(set (pc) (match_operand:SI 0 "address_operand" "p"))]  ""  "bx	%a0"  [(set_attr "type" "branch")])(define_insn "tablejump"  [(set (pc) (match_operand:SI 0 "register_operand" "d"))   (use (label_ref (match_operand 1 "" "")))]  ""  "bx	(%0)"  [(set_attr "type" "branch")]);;- jump to subroutine(define_expand "call"  [(call (match_operand:SI 0 "general_operand" "g")	 (match_operand:SI 1 "immediate_operand" "i"))]  ""  "{  emit_insn (gen_call_internal (operands[0], operands[1],				virtual_outgoing_args_rtx));  DONE;}")(define_insn "call_internal"  [(call (match_operand:SI 0 "general_operand" "g")	 (match_operand:SI 1 "immediate_operand" "i"))   (use (match_operand:SI 2 "address_operand" "p"))   (clobber (match_scratch:SI 3 "=&d"))]  ""  "* return i960_output_call_insn (operands[0], operands[1], operands[2],				   operands[3], insn);"  [(set_attr "type" "call")])(define_expand "call_value"  [(set (match_operand 0 "register_operand" "=d")	(call (match_operand:SI 1 "general_operand" "g")	      (match_operand:SI 2 "immediate_operand" "i")))]  ""  "{  emit_insn (gen_call_value_internal (operands[0], operands[1], operands[2],				      virtual_outgoing_args_rtx));  DONE;}")(define_insn "call_value_internal"  [(set (match_operand 0 "register_operand" "=d")	(call (match_operand:SI 1 "general_operand" "g")	      (match_operand:SI 2 "immediate_operand" "i")))   (use (match_operand:SI 3 "address_operand" "p"))   (clobber (match_scratch:SI 4 "=&d"))]  ""  "* return i960_output_call_insn (operands[1], operands[2], operands[3],				   operands[4], insn);"  [(set_attr "type" "call")])(define_insn "return"  [(return)]  ""  "* return i960_output_ret_insn (insn);"  [(set_attr "type" "branch")])(define_insn "nop"  [(const_int 0)]  ""  "");; Various peephole optimizations for multiple-word moves, loads, and stores.;; Multiple register moves.;; Matched 5/28/91(define_peephole  [(set (match_operand:SI 0 "register_operand" "=r")	(match_operand:SI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))   (set (match_operand:SI 4 "register_operand" "=r")	(match_operand:SI 5 "register_operand" "r"))   (set (match_operand:SI 6 "register_operand" "=r")	(match_operand:SI 7 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 1 == REGNO (operands[2]))   && (REGNO (operands[1]) + 1 == REGNO (operands[3]))   && (REGNO (operands[0]) + 2 == REGNO (operands[4]))   && (REGNO (operands[1]) + 2 == REGNO (operands[5]))   && (REGNO (operands[0]) + 3 == REGNO (operands[6]))   && (REGNO (operands[1]) + 3 == REGNO (operands[7]))"  "movq	%1,%0");; Matched 4/17/92(define_peephole  [(set (match_operand:DI 0 "register_operand" "=r")	(match_operand:DI 1 "register_operand" "r"))   (set (match_operand:DI 2 "register_operand" "=r")	(match_operand:DI 3 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 2 == REGNO (operands[2]))   && (REGNO (operands[1]) + 2 == REGNO (operands[3]))"  "movq	%1,%0");; Matched 4/17/92(define_peephole  [(set (match_operand:DI 0 "register_operand" "=r")	(match_operand:DI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))   (set (match_operand:SI 4 "register_operand" "=r")	(match_operand:SI 5 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 2 == REGNO (operands[2]))   && (REGNO (operands[1]) + 2 == REGNO (operands[3]))   && (REGNO (operands[0]) + 3 == REGNO (operands[4]))   && (REGNO (operands[1]) + 3 == REGNO (operands[5]))"  "movq	%1,%0");; Matched 4/17/92(define_peephole  [(set (match_operand:SI 0 "register_operand" "=r")	(match_operand:SI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))   (set (match_operand:DI 4 "register_operand" "=r")	(match_operand:DI 5 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 1 == REGNO (operands[2]))   && (REGNO (operands[1]) + 1 == REGNO (operands[3]))   && (REGNO (operands[0]) + 2 == REGNO (operands[4]))   && (REGNO (operands[1]) + 2 == REGNO (operands[5]))"  "movq	%1,%0");; Matched 4/17/92(define_peephole  [(set (match_operand:DI 0 "register_operand" "=r")	(match_operand:DI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 2 == REGNO (operands[2]))   && (REGNO (operands[1]) + 2 == REGNO (operands[3]))"  "movt	%1,%0");; Matched 5/28/91(define_peephole  [(set (match_operand:SI 0 "register_operand" "=r")	(match_operand:SI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))   (set (match_operand:SI 4 "register_operand" "=r")	(match_operand:SI 5 "register_operand" "r"))]  "((REGNO (operands[0]) & 3) == 0)   && ((REGNO (operands[1]) & 3) == 0)   && (REGNO (operands[0]) + 1 == REGNO (operands[2]))   && (REGNO (operands[1]) + 1 == REGNO (operands[3]))   && (REGNO (operands[0]) + 2 == REGNO (operands[4]))   && (REGNO (operands[1]) + 2 == REGNO (operands[5]))"  "movt	%1,%0");; Matched 5/28/91(define_peephole  [(set (match_operand:SI 0 "register_operand" "=r")	(match_operand:SI 1 "register_operand" "r"))   (set (match_operand:SI 2 "register_operand" "=r")	(match_operand:SI 3 "register_operand" "r"))]  "((REGNO (operands[0]) & 1) == 0)   && ((REGNO (operands[1]) & 1) == 0)   && (REGNO (operands[0]) + 1 == REGNO (operands[2]))   && (REGNO (operands[1]) + 1 == REGNO (operands[3]))"  "movl	%1,%0"); Multiple register loads.;; Matched 6/15/91(define_peephole  [(set (match_operand:SI 0 "register_operand" "=r")	(mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r")			 (match_operand:SI 2 "immediate_operand" "n"))))   (set (match_operand:SI 3 "register_operand" "=r")	(mem:SI (plus:SI (match_dup 1)			 (match_operand:SI 4 "immediate_operand" "n"))))   (set (match_operand:SI 5 "register_operand" "=r")	(mem:SI (plus:SI (match_dup 1)			 (match_operand:SI 6 "immediate_operand" "n"))))   (set (match_operand:SI 7 "register_operand" "=r")	(mem:SI (plus:SI (match_dup 1)			 (match_operand:SI 8 "immediate_operand" "n"))))]  "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)   && (REGNO (operands[1]) != REGNO (operands[0]))   && (REGNO (operands[0]) + 1 == REGNO (operands[3]))   && (REGNO (operands[1]) != REGNO (operands[3]))   && (REGNO (operands[0]) + 2 == REGNO (operands[5]))   && (REGNO (operands[1]) != REGNO (operands[5]))   && (REGNO (operands[0]) + 3 == REGNO (operands[7]))   && (INTVAL (operands[2]) + 4 == INTVAL (operands[4]))   && (INTVAL (operands[2]) + 8 == INTVAL (operands[6]))   && (INTVAL (operands[2]) + 12 == INTVAL (operands[8])))"  "ldq	%2(%1),%0");; Matched 5/28/91(define_peephole  [(set (match_operand:DF 0 "register_operand" "=d")	(mem:DF (plus:SI (match_operand:SI 1 "register_operand" "d")			 (match_operand:SI 2 "immediate_operand" "n"))))   (set (match_operand:DF 3 "register_operand" "=d")	(mem:DF (plus:SI (match_dup 1)			 (match_operand:SI 4 "immediate_operand" "n"))))]  "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)   && (REGNO (operands[1]) != REGNO (operands[0]))   && (REGNO (operands[0]) + 2 == REGNO (operands[3]))   && (REGNO (operands[1]) != REGNO (operands[3]))   && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))"  "ldq	%2(%1),%0");; Matched 1/24/92(define_peephole  [(set (match_operand:DI 0 "register_operand" "=d")	(mem:DI (plus:SI (match_operand:SI 1 "register_operand" "d")			 (match_operand:SI 2 "immediate_operand" "n"))))   (set (match_operand:DI 3 "register_operand" "=d")	(mem:DI (plus:SI (match_dup 1)			 (match_operand:SI 4 "immediate_operand" "n"))))]  "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0)   && (REGNO (operands[1]) != REGNO (operands[0]))   && (REGNO (operands[0]) + 2 == REGNO (operands[3]))   && (REGNO (operands[1]) != REGNO (operands[3]))   && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))"  "ldq	%2(%1),%0");; Matched 4/17/92(define_peephole  [(set (match_operand:SI 0 "register_operand" "=d")	(mem:SI (match_operand:SI 1 "register_operand" "d")))   (set (match_operand:SI 2 "register_operand" "=d")	(mem:SI (plus:SI (match_dup 1)			 (match_operand:SI 3 "immediate_operand" "n"))))   (set (match_operand:SI 4 "register_operand" "=d")

⌨️ 快捷键说明

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