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

📄 arm.md

📁 gcc编译工具没有什么特别
💻 MD
📖 第 1 页 / 共 5 页
字号:
;; Minimum and maximum insns(define_insn "smaxsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")	(smax:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%1, %2\;movlt\\t%0, %2   cmp\\t%1, %2\;movge\\t%0, %1   cmp\\t%1, %2\;movge\\t%0, %1\;movlt\\t%0, %2"[(set_attr "conds" "clob") (set_attr "length" "8,8,12")])(define_insn "sminsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")	(smin:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%1, %2\;movge\\t%0, %2   cmp\\t%1, %2\;movlt\\t%0, %1   cmp\\t%1, %2\;movlt\\t%0, %1\;movge\\t%0, %2"[(set_attr "conds" "clob") (set_attr "length" "8,8,12")])(define_insn "umaxsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")	(umax:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%1, %2\;movcc\\t%0, %2   cmp\\t%1, %2\;movcs\\t%0, %1   cmp\\t%1, %2\;movcs\\t%0, %1\;movcc\\t%0, %2"[(set_attr "conds" "clob") (set_attr "length" "8,8,12")])(define_insn "uminsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")	(umin:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%1, %2\;movcs\\t%0, %2   cmp\\t%1, %2\;movcc\\t%0, %1   cmp\\t%1, %2\;movcc\\t%0, %1\;movcs\\t%0, %2"[(set_attr "conds" "clob") (set_attr "length" "8,8,12")])(define_insn "*store_minmaxsi"  [(set (match_operand:SI 0 "memory_operand" "=m")	(match_operator:SI 3 "minmax_operator"	 [(match_operand:SI 1 "s_register_operand" "r")	  (match_operand:SI 2 "s_register_operand" "r")]))   (clobber (reg:CC 24))]  ""  "*  operands[3] = gen_rtx (minmax_code (operands[3]), SImode, operands[1],			 operands[2]);  output_asm_insn (\"cmp\\t%1, %2\", operands);  output_asm_insn (\"str%d3\\t%1, %0\", operands);  output_asm_insn (\"str%D3\\t%2, %0\", operands);  return \"\";"[(set_attr "conds" "clob") (set_attr "length" "12") (set_attr "type" "store1")]); Reject the frame pointer in operand[1], since reloading this after; it has been eliminated can cause carnage.(define_insn "*minmax_arithsi"  [(set (match_operand:SI 0 "s_register_operand" "=r,r")	(match_operator:SI 4 "shiftable_operator"	 [(match_operator:SI 5 "minmax_operator"	   [(match_operand:SI 2 "s_register_operand" "r,r")	    (match_operand:SI 3 "arm_rhs_operand" "rI,rI")])	  (match_operand:SI 1 "s_register_operand" "0,?r")]))   (clobber (reg:CC 24))]  "GET_CODE (operands[1]) != REG   || (REGNO(operands[1]) != FRAME_POINTER_REGNUM       && REGNO(operands[1]) != ARG_POINTER_REGNUM)"  "*{  enum rtx_code code = GET_CODE (operands[4]);  operands[5] = gen_rtx (minmax_code (operands[5]), SImode, operands[2],			 operands[3]);  output_asm_insn (\"cmp\\t%2, %3\", operands);  output_asm_insn (\"%i4%d5\\t%0, %1, %2\", operands);  if (which_alternative != 0 || operands[3] != const0_rtx      || (code != PLUS && code != MINUS && code != IOR && code != XOR))    output_asm_insn (\"%i4%D5\\t%0, %1, %3\", operands);  return \"\";}"[(set_attr "conds" "clob") (set_attr "length" "12")]);; Shift and rotation insns(define_expand "ashlsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(ashift:SI (match_operand:SI 1 "s_register_operand" "")		   (match_operand:SI 2 "arm_rhs_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT      && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)    {      emit_insn (gen_movsi (operands[0], const0_rtx));      DONE;    }")(define_expand "ashrsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(ashiftrt:SI (match_operand:SI 1 "s_register_operand" "")		     (match_operand:SI 2 "arm_rhs_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT      && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)    operands[2] = GEN_INT (31);")(define_expand "lshrsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(lshiftrt:SI (match_operand:SI 1 "s_register_operand" "")		     (match_operand:SI 2 "arm_rhs_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT      && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)    {      emit_insn (gen_movsi (operands[0], const0_rtx));      DONE;    }")(define_expand "rotlsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(rotatert:SI (match_operand:SI 1 "s_register_operand" "")		     (match_operand:SI 2 "reg_or_int_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT)    operands[2] = GEN_INT ((32 - INTVAL (operands[2])) % 32);  else    {      rtx reg = gen_reg_rtx (SImode);      emit_insn (gen_subsi3 (reg, GEN_INT (32), operands[2]));      operands[2] = reg;    }")(define_expand "rotrsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(rotatert:SI (match_operand:SI 1 "s_register_operand" "")		     (match_operand:SI 2 "arm_rhs_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT      && ((unsigned HOST_WIDE_INT) INTVAL (operands[2])) > 31)    operands[2] = GEN_INT (INTVAL (operands[2]) % 32);")(define_insn "*shiftsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(match_operator:SI 3 "shift_operator"	 [(match_operand:SI 1 "s_register_operand" "r")	  (match_operand:SI 2 "reg_or_int_operand" "rM")]))]  ""  "mov%?\\t%0, %1%S3")(define_insn "*shiftsi3_compare0"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (match_operator:SI 3 "shift_operator"			  [(match_operand:SI 1 "s_register_operand" "r")			   (match_operand:SI 2 "arm_rhs_operand" "rM")])			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(match_op_dup 3 [(match_dup 1) (match_dup 2)]))]  ""  "mov%?s\\t%0, %1%S3"[(set_attr "conds" "set")])(define_insn "*shiftsi3_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (match_operator:SI 3 "shift_operator"			  [(match_operand:SI 1 "s_register_operand" "r")			   (match_operand:SI 2 "arm_rhs_operand" "rM")])			 (const_int 0)))   (clobber (match_scratch:SI 0 "=r"))]  ""  "mov%?s\\t%0, %1%S3"[(set_attr "conds" "set")])(define_insn "*notsi_shiftsi"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(not:SI (match_operator:SI 3 "shift_operator"		 [(match_operand:SI 1 "s_register_operand" "r")		  (match_operand:SI 2 "arm_rhs_operand" "rM")])))]  ""  "mvn%?\\t%0, %1%S3")(define_insn "*notsi_shiftsi_compare0"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (not:SI (match_operator:SI 3 "shift_operator"			  [(match_operand:SI 1 "s_register_operand" "r")			   (match_operand:SI 2 "arm_rhs_operand" "rM")]))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(not:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)])))]  ""  "mvn%?s\\t%0, %1%S3"[(set_attr "conds" "set")])(define_insn "*not_shiftsi_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (not:SI (match_operator:SI 3 "shift_operator"			  [(match_operand:SI 1 "s_register_operand" "r")			   (match_operand:SI 2 "arm_rhs_operand" "rM")]))			 (const_int 0)))   (clobber (match_scratch:SI 0 "=r"))]  ""  "mvn%?s\\t%0, %1%S3"[(set_attr "conds" "set")]);; Unary arithmetic insns(define_insn "negdi2"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(neg:DI (match_operand:DI 1 "s_register_operand" "?r,0")))   (clobber (reg:CC 24))]  ""  "rsbs\\t%Q0, %Q1, #0\;rsc\\t%R0, %R1, #0"[(set_attr "conds" "clob") (set_attr "length" "8")])(define_insn "negsi2"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(neg:SI (match_operand:SI 1 "s_register_operand" "r")))]  ""  "rsb%?\\t%0, %1, #0")(define_insn "negsf2"  [(set (match_operand:SF 0 "s_register_operand" "=f")	(neg:SF (match_operand:SF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "mnf%?s\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "negdf2"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(neg:DF (match_operand:DF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "mnf%?d\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "*negdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(neg:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "mnf%?d\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "negxf2"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(neg:XF (match_operand:XF 1 "s_register_operand" "f")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "mnf%?e\\t%0, %1"[(set_attr "type" "ffarith")]);; abssi2 doesn't really clobber the condition codes if a different register;; is being set.  To keep things simple, assume during rtl manipulations that;; it does, but tell the final scan operator the truth.  Similarly for;; (neg (abs...))(define_insn "abssi2"  [(set (match_operand:SI 0 "s_register_operand" "=r,&r")	(abs:SI (match_operand:SI 1 "s_register_operand" "0,r")))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%0, #0\;rsblt\\t%0, %0, #0   eor%?\\t%0, %1, %1, asr #31\;sub%?\\t%0, %0, %1, asr #31"[(set_attr "conds" "clob,*") (set_attr "length" "8")])(define_insn "*neg_abssi2"  [(set (match_operand:SI 0 "s_register_operand" "=r,&r")	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "0,r"))))   (clobber (reg:CC 24))]  ""  "@   cmp\\t%0, #0\;rsbgt\\t%0, %0, #0   eor%?\\t%0, %1, %1, asr #31\;rsb%?\\t%0, %0, %1, asr #31"[(set_attr "conds" "clob,*") (set_attr "length" "8")])(define_insn "abssf2"  [(set (match_operand:SF 0 "s_register_operand" "=f")	 (abs:SF (match_operand:SF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "abs%?s\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "absdf2"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(abs:DF (match_operand:DF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "abs%?d\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "*absdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(abs:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "abs%?d\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "absxf2"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(abs:XF (match_operand:XF 1 "s_register_operand" "f")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "abs%?e\\t%0, %1"[(set_attr "type" "ffarith")])(define_insn "sqrtsf2"  [(set (match_operand:SF 0 "s_register_operand" "=f")	(sqrt:SF (match_operand:SF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "sqt%?s\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "sqrtdf2"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(sqrt:DF (match_operand:DF 1 "s_register_operand" "f")))]  "TARGET_HARD_FLOAT"  "sqt%?d\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "*sqrtdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(sqrt:DF (float_extend:DF		  (match_operand:SF 1 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "sqt%?d\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "sqrtxf2"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(sqrt:XF (match_operand:XF 1 "s_register_operand" "f")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "sqt%?e\\t%0, %1"[(set_attr "type" "float_em")]);; SIN COS TAN and family are always emulated, so it's probably better;; to always call a library function.;(define_insn "sinsf2";  [(set (match_operand:SF 0 "s_register_operand" "=f");	(unspec:SF [(match_operand:SF 1 "s_register_operand" "f")] 0))];  "TARGET_HARD_FLOAT";  "sin%?s\\t%0, %1";[(set_attr "type" "float_em")]);;(define_insn "sindf2";  [(set (match_operand:DF 0 "s_register_operand" "=f");	(unspec:DF [(match_operand:DF 1 "s_register_operand" "f")] 0))];  "TARGET_HARD_FLOAT";  "sin%?d\\t%0, %1";[(set_attr "type" "float_em")]);;(define_insn "*sindf_esfdf";  [(set (match_operand:DF 0 "s_register_operand" "=f");	(unspec:DF [(float_extend:DF;		     (match_operand:SF 1 "s_register_operand" "f"))] 0))];  "TARGET_HARD_FLOAT";  "sin%?d\\t%0, %1";[(set_attr "type" "float_em")]);;(define_insn "sinxf2";  [(set (match_operand:XF 0 "s_register_operand" "=f");	(unspec:XF [(match_operand:XF 1 "s_register_operand" "f")] 0))];  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT";  "sin%?e\\t%0, %1";[(set_attr "type" "float_em")]);;(define_insn "cossf2";  [(set (match_operand:SF

⌨️ 快捷键说明

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