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

📄 arm.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn "*mulsi3addsi_compare0"  [(set (reg:CC_NOOV CC_REGNUM)	(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)))]  "TARGET_ARM"  "mla%?s\\t%0, %2, %1, %3"  [(set_attr "conds" "set")   (set_attr "insn" "mlas")])(define_insn "*mulsi3addsi_compare0_scratch"  [(set (reg:CC_NOOV CC_REGNUM)	(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"))]  "TARGET_ARM"  "mla%?s\\t%0, %2, %1, %3"  [(set_attr "conds" "set")   (set_attr "insn" "mlas")]);; Unnamed template to match long long multiply-accumulate (smlal)(define_insn "*mulsidi3adddi"  [(set (match_operand:DI 0 "s_register_operand" "=&r")	(plus:DI	 (mult:DI	  (sign_extend:DI (match_operand:SI 2 "s_register_operand" "%r"))	  (sign_extend:DI (match_operand:SI 3 "s_register_operand" "r")))	 (match_operand:DI 1 "s_register_operand" "0")))]  "TARGET_ARM && arm_arch3m"  "smlal%?\\t%Q0, %R0, %3, %2"  [(set_attr "insn" "smlal")   (set_attr "predicable" "yes")])(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"))))]  "TARGET_ARM && arm_arch3m"  "smull%?\\t%Q0, %R0, %1, %2"  [(set_attr "insn" "smull")   (set_attr "predicable" "yes")])(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"))))]  "TARGET_ARM && arm_arch3m"  "umull%?\\t%Q0, %R0, %1, %2"  [(set_attr "insn" "umull")   (set_attr "predicable" "yes")]);; Unnamed template to match long long unsigned multiply-accumulate (umlal)(define_insn "*umulsidi3adddi"  [(set (match_operand:DI 0 "s_register_operand" "=&r")	(plus:DI	 (mult:DI	  (zero_extend:DI (match_operand:SI 2 "s_register_operand" "%r"))	  (zero_extend:DI (match_operand:SI 3 "s_register_operand" "r")))	 (match_operand:DI 1 "s_register_operand" "0")))]  "TARGET_ARM && arm_arch3m"  "umlal%?\\t%Q0, %R0, %3, %2"  [(set_attr "insn" "umlal")   (set_attr "predicable" "yes")])(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"))]  "TARGET_ARM && arm_arch3m"  "smull%?\\t%3, %0, %2, %1"  [(set_attr "insn" "smull")   (set_attr "predicable" "yes")])(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"))]  "TARGET_ARM && arm_arch3m"  "umull%?\\t%3, %0, %2, %1"  [(set_attr "insn" "umull")   (set_attr "predicable" "yes")])(define_insn "mulhisi3"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(mult:SI (sign_extend:SI		  (match_operand:HI 1 "s_register_operand" "%r"))		 (sign_extend:SI		  (match_operand:HI 2 "s_register_operand" "r"))))]  "TARGET_ARM && arm_arch5e"  "smulbb%?\\t%0, %1, %2"  [(set_attr "insn" "smulxy")   (set_attr "predicable" "yes")])(define_insn "*mulhisi3tb"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(mult:SI (ashiftrt:SI		  (match_operand:SI 1 "s_register_operand" "r")		  (const_int 16))		 (sign_extend:SI		  (match_operand:HI 2 "s_register_operand" "r"))))]  "TARGET_ARM && arm_arch5e"  "smultb%?\\t%0, %1, %2"  [(set_attr "insn" "smulxy")   (set_attr "predicable" "yes")])(define_insn "*mulhisi3bt"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(mult:SI (sign_extend:SI		  (match_operand:HI 1 "s_register_operand" "r"))		 (ashiftrt:SI		  (match_operand:SI 2 "s_register_operand" "r")		  (const_int 16))))]  "TARGET_ARM && arm_arch5e"  "smulbt%?\\t%0, %1, %2"  [(set_attr "insn" "smulxy")   (set_attr "predicable" "yes")])(define_insn "*mulhisi3tt"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(mult:SI (ashiftrt:SI		  (match_operand:SI 1 "s_register_operand" "r")		  (const_int 16))		 (ashiftrt:SI		  (match_operand:SI 2 "s_register_operand" "r")		  (const_int 16))))]  "TARGET_ARM && arm_arch5e"  "smultt%?\\t%0, %1, %2"  [(set_attr "insn" "smulxy")   (set_attr "predicable" "yes")])(define_insn "*mulhisi3addsi"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(plus:SI (match_operand:SI 1 "s_register_operand" "r")		 (mult:SI (sign_extend:SI			   (match_operand:HI 2 "s_register_operand" "%r"))			  (sign_extend:SI			   (match_operand:HI 3 "s_register_operand" "r")))))]  "TARGET_ARM && arm_arch5e"  "smlabb%?\\t%0, %2, %3, %1"  [(set_attr "insn" "smlaxy")   (set_attr "predicable" "yes")])(define_insn "*mulhidi3adddi"  [(set (match_operand:DI 0 "s_register_operand" "=r")	(plus:DI	  (match_operand:DI 1 "s_register_operand" "0")	  (mult:DI (sign_extend:DI	 	    (match_operand:HI 2 "s_register_operand" "%r"))		   (sign_extend:DI		    (match_operand:HI 3 "s_register_operand" "r")))))]  "TARGET_ARM && arm_arch5e"  "smlalbb%?\\t%Q0, %R0, %2, %3"  [(set_attr "insn" "smlalxy")   (set_attr "predicable" "yes")])(define_expand "mulsf3"  [(set (match_operand:SF          0 "s_register_operand" "")	(mult:SF (match_operand:SF 1 "s_register_operand" "")		 (match_operand:SF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT"  "  if (TARGET_MAVERICK      && !cirrus_fp_register (operands[2], SFmode))    operands[2] = force_reg (SFmode, operands[2]);")(define_expand "muldf3"  [(set (match_operand:DF          0 "s_register_operand" "")	(mult:DF (match_operand:DF 1 "s_register_operand" "")		 (match_operand:DF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT"  "  if (TARGET_MAVERICK      && !cirrus_fp_register (operands[2], DFmode))    operands[2] = force_reg (DFmode, operands[2]);");; Division insns(define_expand "divsf3"  [(set (match_operand:SF 0 "s_register_operand" "")	(div:SF (match_operand:SF 1 "arm_float_rhs_operand" "")		(match_operand:SF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"  "")(define_expand "divdf3"  [(set (match_operand:DF 0 "s_register_operand" "")	(div:DF (match_operand:DF 1 "arm_float_rhs_operand" "")		(match_operand:DF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"  "");; Modulo insns(define_expand "modsf3"  [(set (match_operand:SF 0 "s_register_operand" "")	(mod:SF (match_operand:SF 1 "s_register_operand" "")		(match_operand:SF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_FPA"  "")(define_expand "moddf3"  [(set (match_operand:DF 0 "s_register_operand" "")	(mod:DF (match_operand:DF 1 "s_register_operand" "")		(match_operand:DF 2 "arm_float_rhs_operand" "")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_FPA"  "");; Boolean and,ior,xor insns;; Split up double word logical operations;; Split up simple DImode logical operations.  Simply perform the logical;; operation on the upper and lower halves of the registers.(define_split  [(set (match_operand:DI 0 "s_register_operand" "")	(match_operator:DI 6 "logical_binary_operator"	  [(match_operand:DI 1 "s_register_operand" "")	   (match_operand:DI 2 "s_register_operand" "")]))]  "TARGET_ARM && reload_completed && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"  [(set (match_dup 0) (match_op_dup:SI 6 [(match_dup 1) (match_dup 2)]))   (set (match_dup 3) (match_op_dup:SI 6 [(match_dup 4) (match_dup 5)]))]  "  {    operands[3] = gen_highpart (SImode, operands[0]);    operands[0] = gen_lowpart (SImode, operands[0]);    operands[4] = gen_highpart (SImode, operands[1]);    operands[1] = gen_lowpart (SImode, operands[1]);    operands[5] = gen_highpart (SImode, operands[2]);    operands[2] = gen_lowpart (SImode, operands[2]);  }")(define_split  [(set (match_operand:DI 0 "s_register_operand" "")	(match_operator:DI 6 "logical_binary_operator"	  [(sign_extend:DI (match_operand:SI 2 "s_register_operand" ""))	   (match_operand:DI 1 "s_register_operand" "")]))]  "TARGET_ARM && reload_completed"  [(set (match_dup 0) (match_op_dup:SI 6 [(match_dup 1) (match_dup 2)]))   (set (match_dup 3) (match_op_dup:SI 6			[(ashiftrt:SI (match_dup 2) (const_int 31))			 (match_dup 4)]))]  "  {    operands[3] = gen_highpart (SImode, operands[0]);    operands[0] = gen_lowpart (SImode, operands[0]);    operands[4] = gen_highpart (SImode, operands[1]);    operands[1] = gen_lowpart (SImode, operands[1]);    operands[5] = gen_highpart (SImode, operands[2]);    operands[2] = gen_lowpart (SImode, operands[2]);  }");; The zero extend of operand 2 means we can just copy the high part of;; operand1 into operand0.(define_split  [(set (match_operand:DI 0 "s_register_operand" "")	(ior:DI	  (zero_extend:DI (match_operand:SI 2 "s_register_operand" ""))	  (match_operand:DI 1 "s_register_operand" "")))]  "TARGET_ARM && operands[0] != operands[1] && reload_completed"  [(set (match_dup 0) (ior:SI (match_dup 1) (match_dup 2)))   (set (match_dup 3) (match_dup 4))]  "  {    operands[4] = gen_highpart (SImode, operands[1]);    operands[3] = gen_highpart (SImode, operands[0]);    operands[0] = gen_lowpart (SImode, operands[0]);    operands[1] = gen_lowpart (SImode, operands[1]);  }");; The zero extend of operand 2 means we can just copy the high part of;; operand1 into operand0.(define_split  [(set (match_operand:DI 0 "s_register_operand" "")	(xor:DI	  (zero_extend:DI (match_operand:SI 2 "s_register_operand" ""))	  (match_operand:DI 1 "s_register_operand" "")))]  "TARGET_ARM && operands[0] != operands[1] && reload_completed"  [(set (match_dup 0) (xor:SI (match_dup 1) (match_dup 2)))   (set (match_dup 3) (match_dup 4))]  "  {    operands[4] = gen_highpart (SImode, operands[1]);    operands[3] = gen_highpart (SImode, operands[0]);    operands[0] = gen_lowpart (SImode, operands[0]);    operands[1] = gen_lowpart (SImode, operands[1]);  }")(define_insn "anddi3"  [(set (match_operand:DI         0 "s_register_operand" "=&r,&r")	(and:DI (match_operand:DI 1 "s_register_operand"  "%0,r")		(match_operand:DI 2 "s_register_operand"   "r,r")))]  "TARGET_ARM && ! TARGET_IWMMXT"  "#"  [(set_attr "length" "8")])(define_insn_and_split "*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")))]  "TARGET_ARM"  "#"  "TARGET_ARM && reload_completed"  ; The zero extend of operand 2 clears the high word of the output  ; operand.  [(set (match_dup 0) (and:SI (match_dup 1) (match_dup 2)))   (set (match_dup 3) (const_int 0))]  "  {    operands[3] = gen_highpart (SImode, operands[0]);    operands[0] = gen_lowpart (SImode, operands[0]);    operands[1] = gen_lowpart (SImode, operands[1]);  }"  [(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")))]  "TARGET_ARM"  "#"  [(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" "")))]  "TARGET_EITHER"  "  if (TARGET_ARM)    {      if (GET_CODE (operands[2]) == CONST_INT)        {          arm_split_constant (AND, SImode, NULL_RTX,

⌨️ 快捷键说明

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