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

📄 arm.md

📁 GUN开源阻止下的编译器GCC
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn ""  [(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")])(define_insn ""  [(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))]  ""  "*{  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 ""  [(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 ""  [(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 ""  [(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 ""  [(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 ""  [(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 ""  [(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")))]  ""  "rsbs\\t%0, %1, #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 ""  [(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 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 ""  [(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 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 ""  [(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 ""  [(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")])(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 ""  [(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 0 "s_register_operand" "=f")	(unspec:SF [(match_operand:SF 1 "s_register_operand" "f")] 1))]  "TARGET_HARD_FLOAT"  "cos%?s\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "cosdf2"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(unspec:DF [(match_operand:DF 1 "s_register_operand" "f")] 1))]  "TARGET_HARD_FLOAT"  "cos%?d\\t%0, %1"[(set_attr "type" "float_em")])(define_insn ""  [(set (match_operand:DF 0 "s_register_operand" "=f")	(unspec:DF [(float_extend:DF		     (match_operand:SF 1 "s_register_operand" "f"))] 1))]  "TARGET_HARD_FLOAT"  "cos%?d\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "cosxf2"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(unspec:XF [(match_operand:XF 1 "s_register_operand" "f")] 1))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "cos%?e\\t%0, %1"[(set_attr "type" "float_em")])(define_insn "one_cmpldi2"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(not:DI (match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "mvn%?\\t%0, %1\;mvn%?\\t%R0, %R1"[(set_attr "length" "8")])(define_insn "one_cmplsi2"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(not:SI (match_operand:SI 1 "s_register_operand" "r")))]  ""  "mvn%?\\t%0, %1")(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (not:SI (match_operand:SI 1 "s_register_operand" "r"))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(not:SI (match_dup 1)))]  ""  "mvn%?s\\t%0, %1"[(set_attr "conds" "set")])(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (not:SI (match_operand:SI 1 "s_register_operand" "r"))			 (const_int 0)))   (clobber (match_scratch:SI 0 "=r"))]  ""  "mvn%?s\\t%0, %1"[(set_attr "conds" "set")]);; Fixed <--> Floating conversion insns(define_insn "floatsisf2"  [(set (match_operand:SF 0 "s_register_operand" "=f")	(float:SF (match_operand:SI 1 "s_register_operand" "r")))]  "TARGET_HARD_FLOAT"  "flt%?s\\t%0, %1"[(set_attr "type" "r_2_f")])(define_insn "floatsidf2"  [(set (match_operand:DF 0 "s_register_operand" "=f")	(float:DF (match_operand:SI 1 "s_register_operand" "r")))]  "TARGET_HARD_FLOAT"  "flt%?d\\t%0, %1"[(set_attr "type" "r_2_f")])(define_insn "floatsixf2"  [(set (match_operand:XF 0 "s_register_operand" "=f")	(float:XF (match_operand:SI 1 "s_register_operand" "r")))]  "ENABLE_XF_PATTERNS && TARGET_HARD_FLOAT"  "flt%?e\\t%0, %1"[(set_attr "type" "r_2_f")])(define_insn "fix_truncsfsi2"  [(set (match_operand:SI 0 "s_register_operand" "=r")

⌨️ 快捷键说明

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