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

📄 convex.md

📁 gcc编译工具没有什么特别
💻 MD
📖 第 1 页 / 共 4 页
字号:
  [(set_attr "type" "cvts")])(define_insn "floatdisf2"  [(set (match_operand:SF 0 "register_operand" "=d")	(float:SF (match_operand:DI 1 "register_operand" "d")))]  ""  "cvtl.s %1,%0"  [(set_attr "type" "cvtd")])(define_insn "floatsidf2"  [(set (match_operand:DF 0 "register_operand" "=d")	(float:DF (match_operand:SI 1 "register_operand" "d")))]  "! TARGET_C1"  "cvtw.d %1,%0"  [(set_attr "type" "cvts")])(define_insn "floatdidf2"  [(set (match_operand:DF 0 "register_operand" "=d")	(float:DF (match_operand:DI 1 "register_operand" "d")))]  ""  "cvtl.d %1,%0"  [(set_attr "type" "cvtd")]);; These are a little slower than gcc's normal way of doing unsigned;; DI floats (if the DI number is "negative") but they avoid double;; rounding and they avoid explicit constants.(define_expand "floatunsdidf2"  [(set (match_operand:DF 0 "register_operand" "=d")	(float:DF (match_operand:DI 1 "register_operand" "d")))   (set (cc0) (compare:DI (match_dup 3) (match_dup 1)))   (set (pc)	(if_then_else (le (cc0) (const_int 0))		      (label_ref (match_dup 4))		      (pc)))   (set (match_dup 2) (lshiftrt:DI (match_dup 1) (const_int 1)))   (set (match_dup 0) (float:DF (match_dup 2)))   (set (match_dup 0) (plus:DF (match_dup 0) (match_dup 0)))   (match_dup 4)   (set (match_dup 0) (match_dup 0))]  ""  "{  operands[2] = gen_reg_rtx (DImode);  operands[3] = force_reg (DImode, const0_rtx);  operands[4] = gen_label_rtx ();}")(define_expand "floatunsdisf2"  [(set (match_operand:SF 0 "register_operand" "=d")	(float:SF (match_operand:DI 1 "register_operand" "d")))   (set (cc0) (compare:DI (match_dup 3) (match_dup 1)))   (set (pc)	(if_then_else (le (cc0) (const_int 0))		      (label_ref (match_dup 4))		      (pc)))   (set (match_dup 2) (lshiftrt:DI (match_dup 1) (const_int 1)))   (set (match_dup 0) (float:SF (match_dup 2)))   (set (match_dup 0) (plus:SF (match_dup 0) (match_dup 0)))   (match_dup 4)   (set (match_dup 0) (match_dup 0))]  ""  "{  operands[2] = gen_reg_rtx (DImode);  operands[3] = force_reg (DImode, const0_rtx);  operands[4] = gen_label_rtx ();}");; These patterns are identical to gcc's default action ;; if DI->DF and DI->SF are not present.  There are here;; only to prevent SI->*F from promoting to DI->*F.(define_expand "floatunssidf2"  [(set (match_dup 2)	(zero_extend:DI (match_operand:SI 1 "register_operand" "")))   (set (match_operand:DF 0 "register_operand" "")	(float:DF (match_dup 2)))]  ""  "operands[2] = gen_reg_rtx (DImode);")(define_expand "floatunssisf2"  [(set (match_dup 2)        (zero_extend:DI (match_operand:SI 1 "register_operand" "")))   (set (match_operand:SF 0 "register_operand" "")        (float:SF (match_dup 2)))]  ""  "operands[2] = gen_reg_rtx (DImode);");; Float-to-fix conversion insns.(define_insn "fix_truncsfsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(fix:SI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]  ""  "cvts.w %1,%0"  [(set_attr "type" "cvts")])(define_insn "fix_truncsfdi2"  [(set (match_operand:DI 0 "register_operand" "=d")	(fix:DI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]  ""  "cvts.l %1,%0"  [(set_attr "type" "cvts")])(define_insn "fix_truncdfsi2"  [(set (match_operand:SI 0 "register_operand" "=d")	(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]  ""  "cvtd.l %1,%0"  [(set_attr "type" "cvtd")])(define_insn "fix_truncdfdi2"  [(set (match_operand:DI 0 "register_operand" "=d")	(fix:DI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]  ""  "cvtd.l %1,%0"  [(set_attr "type" "cvtd")]);;- All kinds of add instructions.(define_insn "adddf3"  [(set (match_operand:DF 0 "register_operand" "=d")	(plus:DF (match_operand:DF 1 "register_operand" "%0")		 (match_operand:DF 2 "register_operand" "d")))]  ""  "add.d %2,%0"  [(set_attr "type" "addd")])(define_insn "addsf3"  [(set (match_operand:SF 0 "register_operand" "=d")	(plus:SF (match_operand:SF 1 "register_operand" "%0")		 (match_operand:SF 2 "nonmemory_operand" "dF")))]  ""  "add.s %2,%0"  [(set_attr "type" "adds")])(define_insn "adddi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(plus:DI (match_operand:DI 1 "register_operand" "%0")		 (match_operand:DI 2 "register_operand" "d")))]  ""  "add.l %2,%0")(define_expand "addsi3"  [(set (match_operand:SI 0 "register_operand" "")	(plus:SI (match_operand:SI 1 "register_operand" "")		 (match_operand:SI 2 "nonmemory_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=a")	(plus:SI (match_operand:SI 1 "register_operand" "%A")		 (match_operand:SI 2 "immediate_operand" "i")))]  "operands[1] == frame_pointer_rtx || operands[1] == arg_pointer_rtx"  "ldea %a2(%1),%0")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=a")	(plus:SI (match_operand:SI 1 "register_operand" "%a")		 (match_operand:SI 2 "nonmemory_operand" "ri")))]  "operands[1] == stack_pointer_rtx && operands[0] != stack_pointer_rtx"  "mov %1,%0\;add.w %2,%0")(define_insn ""  [(set (match_operand:SI 0 "push_operand" "=<")	(plus:SI (match_operand:SI 1 "register_operand" "A")		 (match_operand:SI 2 "immediate_operand" "i")))]  "operands[1] != stack_pointer_rtx"  "pshea %a2(%1)"  [(set_attr "type" "mst")])(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=d,a,a")	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,A")		 (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]  "TARGET_C1"  "@   add.w %2,%0   add.w %2,%0   ldea %a2(%1),%0")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=d,a,r")	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,A")		 (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]  ""  "@   add.w %2,%0   add.w %2,%0   ldea %a2(%1),%0")(define_insn "addhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(plus:HI (match_operand:HI 1 "register_operand" "%0,0")		 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "add.h %2,%0")(define_insn "addqi3"  [(set (match_operand:QI 0 "register_operand" "=d,d")	(plus:QI (match_operand:QI 1 "register_operand" "%0,0")		 (match_operand:QI 2 "nonmemory_operand" "d,i")))]  ""  "@   add.b %2,%0   add.w %2,%0");;- All kinds of subtract instructions.(define_insn "subdf3"  [(set (match_operand:DF 0 "register_operand" "=d")	(minus:DF (match_operand:DF 1 "register_operand" "0")		  (match_operand:DF 2 "register_operand" "d")))]  ""  "sub.d %2,%0"  [(set_attr "type" "addd")])(define_insn "subsf3"  [(set (match_operand:SF 0 "register_operand" "=d")	(minus:SF (match_operand:SF 1 "register_operand" "0")		  (match_operand:SF 2 "nonmemory_operand" "dF")))]  ""  "sub.s %2,%0"  [(set_attr "type" "adds")])(define_insn "subdi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(minus:DI (match_operand:DI 1 "register_operand" "0")		  (match_operand:DI 2 "register_operand" "d")))]  ""  "sub.l %2,%0")(define_insn "subsi3"  [(set (match_operand:SI 0 "register_operand" "=d,a,?d,?a")	(minus:SI (match_operand:SI 1 "nonmemory_operand" "0,0,di,ai")		  (match_operand:SI 2 "nonmemory_operand" "di,ai,0,0")))]  ""  "@  sub.w %2,%0  sub.w %2,%0  sub.w %1,%0\;neg.w %0,%0  sub.w %1,%0\;neg.w %0,%0")(define_insn "subhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(minus:HI (match_operand:HI 1 "register_operand" "0,0")		  (match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "sub.h %2,%0")(define_insn "subqi3"  [(set (match_operand:QI 0 "register_operand" "=d,d")	(minus:QI (match_operand:QI 1 "register_operand" "0,0")		  (match_operand:QI 2 "nonmemory_operand" "d,i")))]  ""  "@   sub.b %2,%0   sub.w %2,%0");;- Multiply instructions.(define_insn "muldf3"  [(set (match_operand:DF 0 "register_operand" "=d")	(mult:DF (match_operand:DF 1 "register_operand" "%0")		 (match_operand:DF 2 "register_operand" "d")))]  ""  "mul.d %2,%0"  [(set_attr "type" "muld")])(define_insn "mulsf3"  [(set (match_operand:SF 0 "register_operand" "=d")	(mult:SF (match_operand:SF 1 "register_operand" "%0")		 (match_operand:SF 2 "nonmemory_operand" "dF")))]  ""  "mul.s %2,%0"  [(set_attr "type" "muls")])(define_insn "muldi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(mult:DI (match_operand:DI 1 "register_operand" "%0")		 (match_operand:DI 2 "register_operand" "d")))]  ""  "mul.l %2,%0"  [(set_attr "type" "mull")])(define_insn "mulsi3"  [(set (match_operand:SI 0 "register_operand" "=d,a")	(mult:SI (match_operand:SI 1 "register_operand" "%0,0")		 (match_operand:SI 2 "nonmemory_operand" "di,ai")))]  ""  "mul.w %2,%0"  [(set_attr "type" "mulw")])(define_insn "mulhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(mult:HI (match_operand:HI 1 "register_operand" "%0,0")		 (match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "mul.h %2,%0"  [(set_attr "type" "mulw")])(define_insn "mulqi3"  [(set (match_operand:QI 0 "register_operand" "=d,d")	(mult:QI (match_operand:QI 1 "register_operand" "%0,0")		 (match_operand:QI 2 "nonmemory_operand" "d,i")))]  ""  "@   mul.b %2,%0   mul.w %2,%0"  [(set_attr "type" "mulw,mulw")]);;- Divide instructions.(define_insn "divdf3"  [(set (match_operand:DF 0 "register_operand" "=d")	(div:DF (match_operand:DF 1 "register_operand" "0")		(match_operand:DF 2 "register_operand" "d")))]  ""  "div.d %2,%0"  [(set_attr "type" "divd")])(define_insn "divsf3"  [(set (match_operand:SF 0 "register_operand" "=d")	(div:SF (match_operand:SF 1 "register_operand" "0")		(match_operand:SF 2 "nonmemory_operand" "dF")))]  ""  "div.s %2,%0"  [(set_attr "type" "divs")])(define_insn "divdi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(div:DI (match_operand:DI 1 "register_operand" "0")		(match_operand:DI 2 "register_operand" "d")))]  ""  "div.l %2,%0"  [(set_attr "type" "divl")])(define_expand "udivsi3"  [(set (match_dup 3)	(zero_extend:DI (match_operand:SI 1 "register_operand" "")))   (set (match_dup 4)	(zero_extend:DI (match_operand:SI 2 "register_operand" "")))   (set (match_dup 3)	(div:DI (match_dup 3) (match_dup 4)))   (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); ")(define_insn "udivdi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(udiv:DI (match_operand:DI 1 "register_operand" "d")		 (match_operand:DI 2 "register_operand" "d")))]  ""  "psh.l %2\;psh.l %1\;callq udiv64\;pop.l %0\;add.w #8,sp")(define_insn "divsi3"  [(set (match_operand:SI 0 "register_operand" "=d,a")	(div:SI (match_operand:SI 1 "register_operand" "0,0")		(match_operand:SI 2 "nonmemory_operand" "di,ai")))]  ""  "div.w %2,%0"  [(set_attr "type" "divw")])(define_insn "divhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(div:HI (match_operand:HI 1 "register_operand" "0,0")		(match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "div.h %2,%0"  [(set_attr "type" "divw")])(define_insn "divqi3"  [(set (match_operand:QI 0 "register_operand" "=d")	(div:QI (match_operand:QI 1 "register_operand" "0")		(match_operand:QI 2 "register_operand" "d")))]  ""  "div.b %2,%0"  [(set_attr "type" "divw")]);;- Bit clear instructions.(define_insn ""  [(set (match_operand:DI 0 "register_operand" "=d")	(and:DI (match_operand:DI 1 "register_operand" "%0")		(match_operand:DI 2 "" "")))]  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)   || (GET_CODE (operands[2]) == CONST_DOUBLE       && CONST_DOUBLE_HIGH (operands[2]) == -1)"  "and %2,%0")(define_insn "anddi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(and:DI (match_operand:DI 1 "register_operand" "%0")		(match_operand:DI 2 "register_operand" "d")))]  ""  "and %2,%0")(define_insn "andsi3"  [(set (match_operand:SI 0 "register_operand" "=d,a")	(and:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "di,ai")))]  ""  "and %2,%0")(define_insn "andhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(and:HI (match_operand:HI 1 "register_operand" "%0,0")		(match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "and %2,%0")(define_insn "andqi3"  [(set (match_operand:QI 0 "register_operand" "=d,a")	(and:QI (match_operand:QI 1 "register_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "di,ai")))]  ""  "and %2,%0");;- Bit set instructions.(define_insn ""  [(set (match_operand:DI 0 "register_operand" "=d")	(ior:DI (match_operand:DI 1 "register_operand" "%0")		(match_operand:DI 2 "" "")))]  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)   || (GET_CODE (operands[2]) == CONST_DOUBLE       && CONST_DOUBLE_HIGH (operands[2]) == 0)"  "or %2,%0")(define_insn "iordi3"  [(set (match_operand:DI 0 "register_operand" "=d")	(ior:DI (match_operand:DI 1 "register_operand" "%0")		(match_operand:DI 2 "register_operand" "d")))]  ""  "or %2,%0")(define_insn "iorsi3"  [(set (match_operand:SI 0 "register_operand" "=d,a")	(ior:SI (match_operand:SI 1 "register_operand" "%0,0")		(match_operand:SI 2 "nonmemory_operand" "di,ai")))]  ""  "or %2,%0")(define_insn "iorhi3"  [(set (match_operand:HI 0 "register_operand" "=d,a")	(ior:HI (match_operand:HI 1 "register_operand" "%0,0")		(match_operand:HI 2 "nonmemory_operand" "di,ai")))]  ""  "or %2,%0")(define_insn "iorqi3"  [(set (match_operand:QI 0 "register_operand" "=d,a")	(ior:QI (match_operand:QI 1 "register_operand" "%0,0")		(match_operand:QI 2 "nonmemory_operand" "di,ai")))]  ""  "or %2,%0");;- xor instructions.(define_insn ""  [(set (match_operand:DI 0 "register_operand" "=d")	(xor:DI (match_operand:DI 1 "register_operand" "%0")		(match_operand:DI 2 "" "")))]  "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)   || (GET_CODE (operands[2]) == CONST_DOUBLE       && CONST_DOUBLE_HIGH (operands[2]) == 0)"  "xor %2,%0")

⌨️ 快捷键说明

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