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

📄 arm.md

📁 这是一个linux 嵌入式系统中很重要的GCC编译器程序
💻 MD
📖 第 1 页 / 共 5 页
字号:
[(set_attr "type" "mult")])(define_insn "*mulsi3_compare0"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (mult:SI			  (match_operand:SI 2 "s_register_operand" "r,r")			  (match_operand:SI 1 "s_register_operand" "%?r,0"))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=&r,&r")	(mult:SI (match_dup 2) (match_dup 1)))]  ""  "mul%?s\\t%0, %2, %1"[(set_attr "conds" "set") (set_attr "type" "mult")])(define_insn "*mulsi_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (mult:SI			  (match_operand:SI 2 "s_register_operand" "r,r")			  (match_operand:SI 1 "s_register_operand" "%?r,0"))			 (const_int 0)))   (clobber (match_scratch:SI 0 "=&r,&r"))]  ""  "mul%?s\\t%0, %2, %1"[(set_attr "conds" "set") (set_attr "type" "mult")]);; Unnamed templates to match MLA instruction.(define_insn "*mulsi3addsi"  [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")	(plus:SI	  (mult:SI (match_operand:SI 2 "s_register_operand" "r,r,r,r")		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))	  (match_operand:SI 3 "s_register_operand" "?r,r,0,0")))]  ""  "mla%?\\t%0, %2, %1, %3"[(set_attr "type" "mult")])(define_insn "*mulsi3addsi_compare0"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (plus:SI			  (mult:SI			   (match_operand:SI 2 "s_register_operand" "r,r,r,r")			   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))			  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")	(plus:SI (mult:SI (match_dup 2) (match_dup 1))		 (match_dup 3)))]  ""  "mla%?s\\t%0, %2, %1, %3"[(set_attr "conds" "set") (set_attr "type" "mult")])(define_insn "*mulsi3addsi_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (plus:SI			  (mult:SI			   (match_operand:SI 2 "s_register_operand" "r,r,r,r")			   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))			  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))			 (const_int 0)))   (clobber (match_scratch:SI 0 "=&r,&r,&r,&r"))]  ""  "mla%?s\\t%0, %2, %1, %3"[(set_attr "conds" "set") (set_attr "type" "mult")])(define_insn "mulsidi3"  [(set (match_operand:DI 0 "s_register_operand" "=&r")      (mult:DI (sign_extend:DI                (match_operand:SI 1 "s_register_operand" "%r"))               (sign_extend:DI               (match_operand:SI 2 "s_register_operand" "r"))))]  "arm_fast_multiply"  "smull%?\\t%Q0, %R0, %1, %2"[(set_attr "type" "mult")])(define_insn "umulsidi3"  [(set (match_operand:DI 0 "s_register_operand" "=&r")      (mult:DI (zero_extend:DI                (match_operand:SI 1 "s_register_operand" "%r"))               (zero_extend:DI                (match_operand:SI 2 "s_register_operand" "r"))))]  "arm_fast_multiply"  "umull%?\\t%Q0, %R0, %1, %2"[(set_attr "type" "mult")])(define_insn "smulsi3_highpart"  [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")	(truncate:SI	 (lshiftrt:DI	  (mult:DI (sign_extend:DI		    (match_operand:SI 1 "s_register_operand" "%r,0"))		   (sign_extend:DI		    (match_operand:SI 2 "s_register_operand" "r,r")))	  (const_int 32))))   (clobber (match_scratch:SI 3 "=&r,&r"))]  "arm_fast_multiply"  "smull%?\\t%3, %0, %2, %1"[(set_attr "type" "mult")])(define_insn "umulsi3_highpart"  [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")	(truncate:SI	 (lshiftrt:DI	  (mult:DI (zero_extend:DI		    (match_operand:SI 1 "s_register_operand" "%r,0"))		   (zero_extend:DI		    (match_operand:SI 2 "s_register_operand" "r,r")))	  (const_int 32))))   (clobber (match_scratch:SI 3 "=&r,&r"))]  "arm_fast_multiply"  "umull%?\\t%3, %0, %2, %1"[(set_attr "type" "mult")])(define_insn "mulsf3"  [(set (match_operand:SF 0 "s_register_operand" "=f")	(mult:SF (match_operand:SF 1 "s_register_operand" "f")		 (match_operand:SF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "fml%?s\\t%0, %1, %2"[(set_attr "type" "ffmul")])(define_insn "muldf3"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mult:DF (match_operand:DF 1 "s_register_operand" "f")		 (match_operand:DF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "muf%?d\\t%0, %1, %2"[(set_attr "type" "fmul")])(define_insn "*muldf_esfdf_df"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mult:DF (float_extend:DF		  (match_operand:SF 1 "s_register_operand" "f"))		 (match_operand:DF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "muf%?d\\t%0, %1, %2"[(set_attr "type" "fmul")])(define_insn "*muldf_df_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mult:DF (match_operand:DF 1 "s_register_operand" "f")		 (float_extend:DF		  (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "muf%?d\\t%0, %1, %2"[(set_attr "type" "fmul")])(define_insn "*muldf_esfdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mult:DF (float_extend:DF		  (match_operand:SF 1 "s_register_operand" "f"))		 (float_extend:DF		  (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "muf%?d\\t%0, %1, %2"[(set_attr "type" "fmul")])(define_insn "mulxf3"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(mult:XF (match_operand:XF 1 "s_register_operand" "f")		 (match_operand:XF 2 "fpu_rhs_operand" "fG")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "muf%?e\\t%0, %1, %2"[(set_attr "type" "fmul")]);; Division insns(define_insn "divsf3"  [(set (match_operand:SF 0 "s_register_operand" "=f,f")	(div:SF (match_operand:SF 1 "fpu_rhs_operand" "f,G")		(match_operand:SF 2 "fpu_rhs_operand" "fG,f")))]  "TARGET_HARD_FLOAT"  "@   fdv%?s\\t%0, %1, %2   frd%?s\\t%0, %2, %1"[(set_attr "type" "fdivs")])(define_insn "divdf3"  [(set (match_operand:DF 0 "s_register_operand" "=f,f")	(div:DF (match_operand:DF 1 "fpu_rhs_operand" "f,G")		(match_operand:DF 2 "fpu_rhs_operand" "fG,f")))]  "TARGET_HARD_FLOAT"  "@   dvf%?d\\t%0, %1, %2   rdf%?d\\t%0, %2, %1"[(set_attr "type" "fdivd")])(define_insn "*divdf_esfdf_df"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(div:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))		(match_operand:DF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "dvf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "*divdf_df_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(div:DF (match_operand:DF 1 "fpu_rhs_operand" "fG")		(float_extend:DF		 (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "rdf%?d\\t%0, %2, %1"[(set_attr "type" "fdivd")])(define_insn "*divdf_esfdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(div:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))		(float_extend:DF		 (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "dvf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "divxf3"  [(set (match_operand:XF 0 "s_register_operand" "=f,f")	(div:XF (match_operand:XF 1 "fpu_rhs_operand" "f,G")		(match_operand:XF 2 "fpu_rhs_operand" "fG,f")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "@   dvf%?e\\t%0, %1, %2   rdf%?e\\t%0, %2, %1"[(set_attr "type" "fdivx")]);; Modulo insns(define_insn "modsf3"  [(set (match_operand:SF 0 "s_register_operand" "=f")	(mod:SF (match_operand:SF 1 "s_register_operand" "f")		(match_operand:SF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "rmf%?s\\t%0, %1, %2"[(set_attr "type" "fdivs")])(define_insn "moddf3"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mod:DF (match_operand:DF 1 "s_register_operand" "f")		(match_operand:DF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "rmf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "*moddf_esfdf_df"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mod:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))		(match_operand:DF 2 "fpu_rhs_operand" "fG")))]  "TARGET_HARD_FLOAT"  "rmf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "*moddf_df_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mod:DF (match_operand:DF 1 "s_register_operand" "f")		(float_extend:DF		 (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "rmf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "*moddf_esfdf_esfdf"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(mod:DF (float_extend:DF		 (match_operand:SF 1 "s_register_operand" "f"))		(float_extend:DF		 (match_operand:SF 2 "s_register_operand" "f"))))]  "TARGET_HARD_FLOAT"  "rmf%?d\\t%0, %1, %2"[(set_attr "type" "fdivd")])(define_insn "modxf3"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(mod:XF (match_operand:XF 1 "s_register_operand" "f")		(match_operand:XF 2 "fpu_rhs_operand" "fG")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "rmf%?e\\t%0, %1, %2"[(set_attr "type" "fdivx")]);; Boolean and,ior,xor insns(define_insn "anddi3"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (match_operand:DI 1 "s_register_operand" "%0,0")		(match_operand:DI 2 "s_register_operand" "r,0")))]  ""  "and%?\\t%Q0, %Q1, %Q2\;and%?\\t%R0, %R1, %R2"[(set_attr "length" "8")])(define_insn "*anddi_zesidi_di"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (zero_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "and%?\\t%Q0, %Q1, %2\;mov%?\\t%R0, #0"[(set_attr "length" "8")])(define_insn "*anddi_sesdi_di"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (sign_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "and%?\\t%Q0, %Q1, %2\;and%?\\t%R0, %R1, %2, asr #31"[(set_attr "length" "8")])(define_expand "andsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(and:SI (match_operand:SI 1 "s_register_operand" "")		(match_operand:SI 2 "reg_or_int_operand" "")))]  ""  "  if (GET_CODE (operands[2]) == CONST_INT)    {      arm_split_constant (AND, SImode, INTVAL (operands[2]), operands[0],			  operands[1],			  (reload_in_progress || reload_completed			   ? 0 : preserve_subexpressions_p ()));      DONE;    }")(define_insn "*andsi3_insn"  [(set (match_operand:SI 0 "s_register_operand" "=r,r,r")	(and:SI (match_operand:SI 1 "s_register_operand" "r,r,r")		(match_operand:SI 2 "reg_or_int_operand" "rI,K,?n")))]  ""  "@   and%?\\t%0, %1, %2   bic%?\\t%0, %1, #%B2   #"[(set_attr "length" "4,4,16")])(define_split  [(set (match_operand:SI 0 "s_register_operand" "")	(and:SI (match_operand:SI 1 "s_register_operand" "")		(match_operand:SI 2 "const_int_operand" "")))]  "! (const_ok_for_arm (INTVAL (operands[2]))      || const_ok_for_arm (~ INTVAL (operands[2])))"  [(clobber (const_int 0))]  "  arm_split_constant  (AND, SImode, INTVAL (operands[2]), operands[0],		       operands[1], 0);  DONE;")(define_insn "*andsi3_compare0"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV	 (and:SI (match_operand:SI 1 "s_register_operand" "r,r")		 (match_operand:SI 2 "arm_not_operand" "rI,K"))	 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r,r")	(and:SI (match_dup 1) (match_dup 2)))]  ""  "@   and%?s\\t%0, %1, %2   bic%?s\\t%0, %1, #%B2"[(set_attr "conds" "set")])(define_insn "*andsi3_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV	 (and:SI (match_operand:SI 0 "s_register_operand" "r,r")		 (match_operand:SI 1 "arm_not_operand" "rI,K"))	 (const_int 0)))   (clobber (match_scratch:SI 3 "=X,r"))]  ""  "@   tst%?\\t%0, %1   bic%?s\\t%3, %0, #%B1"[(set_attr "conds" "set")])(define_insn "*zeroextractsi_compare0_scratch"  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (zero_extract:SI			  (match_operand:SI 0 "s_register_operand" "r")		 	  (match_operand 1 "const_int_operand" "n")			  (match_operand 2 "const_int_operand" "n"))			 (const_int 0)))]  "INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32   && INTVAL (operands[1]) > 0    && INTVAL (operands[1]) + (INTVAL (operands[2]) & 1) <= 8   && INTVAL (operands[1]) + INTVAL (operands[2]) <= 32"  "*  operands[1] = GEN_INT (((1 << INTVAL (operands[1])) - 1)			 << INTVAL (operands[2]));  output_asm_insn (\"tst%?\\t%0, %1\", operands);  return \"\";"[(set_attr "conds" "set")])(define_insn "*ne_zeroextractsi"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(ne:SI (zero_extract:SI

⌨️ 快捷键说明

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