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

📄 mips.md

📁 GCC编译器源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
  [(set (match_operand:DI 0 "register_operand" "=d")	(div:DI (match_operand:DI 1 "se_register_operand" "d")		(match_operand:DI 2 "se_nonmemory_operand" "di")))   (clobber (match_scratch:DI 3 "=l"))   (clobber (match_scratch:DI 4 "=h"))   (clobber (match_scratch:DI 6 "=a"))]  "TARGET_64BIT && !optimize"  "ddiv\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"DI")   (set_attr "length"	"14")])		;; various tests for dividing by 0 and such(define_insn "modsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(mod:SI (match_operand:SI 1 "register_operand" "d")		(match_operand:SI 2 "nonmemory_operand" "di")))   (clobber (match_scratch:SI 3 "=l"))   (clobber (match_scratch:SI 4 "=h"))   (clobber (match_scratch:SI 6 "=a"))]  "!optimize"  "rem\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"SI")   (set_attr "length"	"13")])		;; various tests for dividing by 0 and such(define_insn "moddi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(mod:DI (match_operand:DI 1 "se_register_operand" "d")		(match_operand:DI 2 "se_nonmemory_operand" "di")))   (clobber (match_scratch:DI 3 "=l"))   (clobber (match_scratch:DI 4 "=h"))   (clobber (match_scratch:DI 6 "=a"))]  "TARGET_64BIT && !optimize"  "drem\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"DI")   (set_attr "length"	"14")])		;; various tests for dividing by 0 and such(define_insn "udivsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(udiv:SI (match_operand:SI 1 "register_operand" "d")		 (match_operand:SI 2 "nonmemory_operand" "di")))   (clobber (match_scratch:SI 3 "=l"))   (clobber (match_scratch:SI 4 "=h"))   (clobber (match_scratch:SI 6 "=a"))]  "!optimize"  "divu\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"SI")   (set_attr "length"	"7")])		;; various tests for dividing by 0 and such(define_insn "udivdi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(udiv:DI (match_operand:DI 1 "se_register_operand" "d")		 (match_operand:DI 2 "se_nonmemory_operand" "di")))   (clobber (match_scratch:DI 3 "=l"))   (clobber (match_scratch:DI 4 "=h"))   (clobber (match_scratch:DI 6 "=a"))]  "TARGET_64BIT && !optimize"  "ddivu\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"DI")   (set_attr "length"	"7")])		;; various tests for dividing by 0 and such(define_insn "umodsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(umod:SI (match_operand:SI 1 "register_operand" "d")		 (match_operand:SI 2 "nonmemory_operand" "di")))   (clobber (match_scratch:SI 3 "=l"))   (clobber (match_scratch:SI 4 "=h"))   (clobber (match_scratch:SI 6 "=a"))]  "!optimize"  "remu\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"SI")   (set_attr "length"	"7")])		;; various tests for dividing by 0 and such(define_insn "umoddi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(umod:DI (match_operand:DI 1 "se_register_operand" "d")		 (match_operand:DI 2 "se_nonmemory_operand" "di")))   (clobber (match_scratch:DI 3 "=l"))   (clobber (match_scratch:DI 4 "=h"))   (clobber (match_scratch:DI 6 "=a"))]  "TARGET_64BIT && !optimize"  "dremu\\t%0,%1,%2"  [(set_attr "type"	"idiv")   (set_attr "mode"	"DI")   (set_attr "length"	"7")])		;; various tests for dividing by 0 and such;;;;  ....................;;;;	SQUARE ROOT;;;;  ....................(define_insn "sqrtdf2"  [(set (match_operand:DF 0 "register_operand" "=f")	(sqrt:DF (match_operand:DF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT && HAVE_SQRT_P() && TARGET_DOUBLE_FLOAT"  "sqrt.d\\t%0,%1"  [(set_attr "type"	"fsqrt")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn "sqrtsf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT && HAVE_SQRT_P()"  "sqrt.s\\t%0,%1"  [(set_attr "type"	"fsqrt")   (set_attr "mode"	"SF")   (set_attr "length"	"1")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=f")	(div:DF (match_operand:DF 1 "const_float_1_operand" "")		(sqrt:DF (match_operand:DF 2 "register_operand" "f"))))]  "mips_isa >= 4 && TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && flag_fast_math"  "rsqrt.d\\t%0,%2"  [(set_attr "type"	"fsqrt")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn ""  [(set (match_operand:SF 0 "register_operand" "=f")	(div:SF (match_operand:SF 1 "const_float_1_operand" "")		(sqrt:SF (match_operand:SF 2 "register_operand" "f"))))]  "mips_isa >= 4 && TARGET_HARD_FLOAT && flag_fast_math"  "rsqrt.s\\t%0,%2"  [(set_attr "type"	"fsqrt")   (set_attr "mode"	"SF")   (set_attr "length"	"1")]);;;;  ....................;;;;	ABSOLUTE VALUE;;;;  ....................;; Do not use the integer abs macro instruction, since that signals an;; exception on -2147483648 (sigh).(define_insn "abssi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(abs:SI (match_operand:SI 1 "register_operand" "d")))]  ""  "*{  dslots_jump_total++;  dslots_jump_filled++;  operands[2] = const0_rtx;  if (REGNO (operands[0]) == REGNO (operands[1]))    {      if (GENERATE_BRANCHLIKELY)	return \"%(bltzl\\t%1,1f\\n\\tsubu\\t%0,%z2,%0\\n1:%)\";      else	return \"bgez\\t%1,1f%#\\n\\tsubu\\t%0,%z2,%0\\n1:\";    }	    else    return \"%(bgez\\t%1,1f\\n\\tmove\\t%0,%1\\n\\tsubu\\t%0,%z2,%0\\n1:%)\";}"  [(set_attr "type"	"multi")   (set_attr "mode"	"SI")   (set_attr "length"	"3")])(define_insn "absdi2"  [(set (match_operand:DI 0 "register_operand" "=d")	(abs:DI (match_operand:DI 1 "se_register_operand" "d")))]  "TARGET_64BIT"  "*{  dslots_jump_total++;  dslots_jump_filled++;  operands[2] = const0_rtx;  if (REGNO (operands[0]) == REGNO (operands[1]))    return \"%(bltzl\\t%1,1f\\n\\tdsubu\\t%0,%z2,%0\\n1:%)\";  else    return \"%(bgez\\t%1,1f\\n\\tmove\\t%0,%1\\n\\tdsubu\\t%0,%z2,%0\\n1:%)\";}"  [(set_attr "type"	"multi")   (set_attr "mode"	"DI")   (set_attr "length"	"3")])(define_insn "absdf2"  [(set (match_operand:DF 0 "register_operand" "=f")	(abs:DF (match_operand:DF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"  "abs.d\\t%0,%1"  [(set_attr "type"	"fabs")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn "abssf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(abs:SF (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "abs.s\\t%0,%1"  [(set_attr "type"	"fabs")   (set_attr "mode"	"SF")   (set_attr "length"	"1")]);;;;  ....................;;;;	FIND FIRST BIT INSTRUCTION;;;;  ....................;;(define_insn "ffssi2"  [(set (match_operand:SI 0 "register_operand" "=&d")	(ffs:SI (match_operand:SI 1 "register_operand" "d")))   (clobber (match_scratch:SI 2 "=&d"))   (clobber (match_scratch:SI 3 "=&d"))]  ""  "*{  dslots_jump_total += 2;  dslots_jump_filled += 2;  operands[4] = const0_rtx;  if (optimize && find_reg_note (insn, REG_DEAD, operands[1]))    return \"%(\\move\\t%0,%z4\\n\\\\tbeq\\t%1,%z4,2f\\n\\1:\\tand\\t%2,%1,0x0001\\n\\\\taddu\\t%0,%0,1\\n\\\\tbeq\\t%2,%z4,1b\\n\\\\tsrl\\t%1,%1,1\\n\\2:%)\";  return \"%(\\move\\t%0,%z4\\n\\\\tmove\\t%3,%1\\n\\\\tbeq\\t%3,%z4,2f\\n\\1:\\tand\\t%2,%3,0x0001\\n\\\\taddu\\t%0,%0,1\\n\\\\tbeq\\t%2,%z4,1b\\n\\\\tsrl\\t%3,%3,1\\n\\2:%)\";}"  [(set_attr "type"	"multi")   (set_attr "mode"	"SI")   (set_attr "length"	"6")])(define_insn "ffsdi2"  [(set (match_operand:DI 0 "register_operand" "=&d")	(ffs:DI (match_operand:DI 1 "se_register_operand" "d")))   (clobber (match_scratch:DI 2 "=&d"))   (clobber (match_scratch:DI 3 "=&d"))]  "TARGET_64BIT"  "*{  dslots_jump_total += 2;  dslots_jump_filled += 2;  operands[4] = const0_rtx;  if (optimize && find_reg_note (insn, REG_DEAD, operands[1]))    return \"%(\\move\\t%0,%z4\\n\\\\tbeq\\t%1,%z4,2f\\n\\1:\\tand\\t%2,%1,0x0001\\n\\\\tdaddu\\t%0,%0,1\\n\\\\tbeq\\t%2,%z4,1b\\n\\\\tdsrl\\t%1,%1,1\\n\\2:%)\";  return \"%(\\move\\t%0,%z4\\n\\\\tmove\\t%3,%1\\n\\\\tbeq\\t%3,%z4,2f\\n\\1:\\tand\\t%2,%3,0x0001\\n\\\\tdaddu\\t%0,%0,1\\n\\\\tbeq\\t%2,%z4,1b\\n\\\\tdsrl\\t%3,%3,1\\n\\2:%)\";}"  [(set_attr "type"	"multi")   (set_attr "mode"	"DI")   (set_attr "length"	"6")]);;;;  ....................;;;;	NEGATION and ONE'S COMPLEMENT;;;;  ....................(define_insn "negsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(neg:SI (match_operand:SI 1 "register_operand" "d")))]  ""  "*{  operands[2] = const0_rtx;  return \"subu\\t%0,%z2,%1\";}"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"1")])(define_expand "negdi2"  [(parallel [(set (match_operand:DI 0 "register_operand" "=d")		   (neg:DI (match_operand:DI 1 "se_register_operand" "d")))	      (clobber (match_dup 2))])]  "TARGET_64BIT || !TARGET_DEBUG_G_MODE"  "{  if (TARGET_64BIT)    {      emit_insn (gen_negdi2_internal_2 (operands[0], operands[1]));      DONE;    }  operands[2] = gen_reg_rtx (SImode);}")(define_insn "negdi2_internal"  [(set (match_operand:DI 0 "register_operand" "=d")	(neg:DI (match_operand:DI 1 "register_operand" "d")))   (clobber (match_operand:SI 2 "register_operand" "=d"))]  "! TARGET_64BIT && !TARGET_DEBUG_G_MODE"  "*{  operands[3] = const0_rtx;  return \"subu\\t%L0,%z3,%L1\;subu\\t%M0,%z3,%M1\;sltu\\t%2,%z3,%L0\;subu\\t%M0,%M0,%2\";}"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set_attr "length"	"4")])(define_insn "negdi2_internal_2"  [(set (match_operand:DI 0 "register_operand" "=d")	(neg:DI (match_operand:DI 1 "se_register_operand" "d")))]  "TARGET_64BIT"  "*{  operands[2] = const0_rtx;  return \"dsubu\\t%0,%z2,%1\";}"  [(set_attr "type"	"arith")   (set_attr "mode"	"DI")   (set_attr "length"	"1")])(define_insn "negdf2"  [(set (match_operand:DF 0 "register_operand" "=f")	(neg:DF (match_operand:DF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"  "neg.d\\t%0,%1"  [(set_attr "type"	"fneg")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn "negsf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(neg:SF (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "neg.s\\t%0,%1"  [(set_attr "type"	"fneg")   (set_attr "mode"	"SF")   (set_attr "length"	"1")])(define_insn "one_cmplsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(not:SI (match_operand:SI 1 "register_operand" "d")))]  ""  "*{  operands[2] = const0_rtx;  return \"nor\\t%0,%z2,%1\";}"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"1")])(define_insn "one_cmpldi2"  [(set (match_operand:DI 0 "register_operand" "=d")	(not:DI (match_operand:DI 1 "se_register_operand" "d")))]  ""  "*{  operands[2] = const0_rtx;  if (TARGET_64BIT)    return \"nor\\t%0,%z2,%1\";  return \"nor\\t%M0,%z2,%M1\;nor\\t%L0,%z2,%L1\";}"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set (attr "length")	(if_then_else (ge (symbol_ref "mips_isa") (const_int 3))		       (const_int 1)		       (const_int 2)))])(define_split  [(set (match_operand:DI 0 "register_operand" "")	(not:DI (match_operand:DI 1 "register_operand" "")))]  "reload_completed && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))"  [(set (subreg:SI (match_dup 0) 0) (not:SI (subreg:SI (match_dup 1) 0)))   (set (subreg:SI (match_dup 0) 1) (not:SI (subreg:SI

⌨️ 快捷键说明

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