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

📄 arm.md

📁 GUN开源阻止下的编译器GCC
💻 MD
📖 第 1 页 / 共 5 页
字号:
		(match_operand:DI 2 "s_register_operand" "r,0")))]  ""  "and%?\\t%0, %1, %2\;and%?\\t%R0, %R1, %R2"[(set_attr "length" "8")])(define_insn ""  [(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%0, %1, %2\;mov%?\\t%R0, #0"[(set_attr "length" "8")])(define_insn ""  [(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%0, %1, %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 ""  [(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 ""  [(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 ""  [(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 ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (zero_extract:SI			  (match_operand:SI 0 "s_register_operand" "r")		 	  (match_operand:SI 1 "immediate_operand" "n")			  (match_operand:SI 2 "immediate_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"  "*{  unsigned int mask = 0;  int cnt = INTVAL (operands[1]);    while (cnt--)    mask = (mask << 1) | 1;  operands[1] = GEN_INT (mask << INTVAL (operands[2]));  output_asm_insn (\"tst%?\\t%0, %1\", operands);  return \"\";}"[(set_attr "conds" "set")])(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (zero_extract:SI			  (match_operand:QI 0 "memory_operand" "m")		 	  (match_operand 1 "immediate_operand" "n")			  (match_operand 2 "immediate_operand" "n"))			 (const_int 0)))   (clobber (match_scratch:QI 3 "=r"))]  "INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 8   && INTVAL (operands[1]) > 0 && INTVAL (operands[1]) <= 8"  "*{  unsigned int mask = 0;  int cnt = INTVAL (operands[1]);    while (cnt--)    mask = (mask << 1) | 1;  operands[1] = GEN_INT (mask << INTVAL (operands[2]));  output_asm_insn (\"ldr%?b\\t%3, %0\", operands);  output_asm_insn (\"tst%?\\t%3, %1\", operands);  return \"\";}"[(set_attr "conds" "set") (set_attr "length" "8")]);; constants for op 2 will never be given to these patterns.(define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (not:DI (match_operand:DI 2 "s_register_operand" "r,0"))		(match_operand:DI 1 "s_register_operand" "0,r")))]  ""  "bic%?\\t%0, %1, %2\;bic%?\\t%R0, %R1, %R2"[(set_attr "length" "8")])  (define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (not:DI (zero_extend:DI			 (match_operand:SI 2 "s_register_operand" "r,r")))		(match_operand:DI 1 "s_register_operand" "0,?r")))]  ""  "@   bic%?\\t%0, %1, %2   bic%?\\t%0, %1, %2\;mov%?\\t%R0, %R1"[(set_attr "length" "4,8")])  (define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(and:DI (not:DI (sign_extend:DI			 (match_operand:SI 2 "s_register_operand" "r,r")))		(match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "bic%?\\t%0, %1, %2\;bic%?\\t%R0, %R1, %2, asr #31"[(set_attr "length" "8")])  (define_insn ""  [(set (match_operand:SI 0 "s_register_operand" "=r")	(and:SI (not:SI (match_operand:SI 2 "s_register_operand" "r"))		(match_operand:SI 1 "s_register_operand" "r")))]  ""  "bic%?\\t%0, %1, %2")(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV	 (and:SI (not:SI (match_operand:SI 2 "s_register_operand" "r"))		 (match_operand:SI 1 "s_register_operand" "r"))	 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(and:SI (not:SI (match_dup 2)) (match_dup 1)))]  ""  "bic%?s\\t%0, %1, %2"[(set_attr "conds" "set")])(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV	 (and:SI (not:SI (match_operand:SI 2 "s_register_operand" "r"))		 (match_operand:SI 1 "s_register_operand" "r"))	 (const_int 0)))   (clobber (match_scratch:SI 0 "=r"))]  ""  "bic%?s\\t%0, %1, %2"[(set_attr "conds" "set")])(define_insn "iordi3"  [(set (match_operand:DI 0 "s_register_operand" "=&r")	(ior:DI (match_operand:DI 1 "s_register_operand" "%0")		(match_operand:DI 2 "s_register_operand" "r")))]  ""  "orr%?\\t%0, %1, %2\;orr%?\\t%R0, %R1, %R2"[(set_attr "length" "8")])(define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(ior:DI (zero_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "0,?r")))]  ""  "@   orr%?\\t%0, %1, %2   orr%?\\t%0, %1, %2\;mov%?\\t%R0, %R1"[(set_attr "length" "4,8")])(define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(ior:DI (sign_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "orr%?\\t%0, %1, %2\;orr%?\\t%R0, %R1, %2, asr #31"[(set_attr "length" "8")])(define_expand "iorsi3"  [(set (match_operand:SI 0 "s_register_operand" "")	(ior: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 (IOR, SImode, INTVAL (operands[2]), operands[0],			  operands[1],			  (reload_in_progress || reload_completed			   ? 0 : preserve_subexpressions_p ()));      DONE;    }")(define_insn ""  [(set (match_operand:SI 0 "s_register_operand" "=r,r")	(ior:SI (match_operand:SI 1 "s_register_operand" "r,r")		(match_operand:SI 2 "reg_or_int_operand" "rI,?n")))]  ""  "@   orr%?\\t%0, %1, %2   #"[(set_attr "length" "4,16")])(define_split  [(set (match_operand:SI 0 "s_register_operand" "")	(ior:SI (match_operand:SI 1 "s_register_operand" "")		(match_operand:SI 2 "const_int_operand" "")))]  "! const_ok_for_arm (INTVAL (operands[2]))"  [(clobber (const_int 0))]  "  arm_split_constant (IOR, SImode, INTVAL (operands[2]), operands[0],		      operands[1], 0);  DONE;")  (define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (ior:SI (match_operand:SI 1 "s_register_operand" "%r")				 (match_operand:SI 2 "arm_rhs_operand" "rI"))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(ior:SI (match_dup 1) (match_dup 2)))]  ""  "orr%?s\\t%0, %1, %2"[(set_attr "conds" "set")])(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (ior:SI (match_operand:SI 1 "s_register_operand" "%r")				 (match_operand:SI 2 "arm_rhs_operand" "rI"))			 (const_int 0)))   (clobber (match_scratch:SI 0 "=r"))]  ""  "orr%?s\\t%0, %1, %2"[(set_attr "conds" "set")])(define_insn "xordi3"  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(xor:DI (match_operand:DI 1 "s_register_operand" "%0,0")		(match_operand:DI 2 "s_register_operand" "r,0")))]  ""  "eor%?\\t%0, %1, %2\;eor%?\\t%R0, %R1, %R2"[(set_attr "length" "8")])(define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(xor:DI (zero_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "0,?r")))]  ""  "@   eor%?\\t%0, %1, %2   eor%?\\t%0, %1, %2\;mov%?\\t%R0, %R1"[(set_attr "length" "4,8")])(define_insn ""  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")	(xor:DI (sign_extend:DI		 (match_operand:SI 2 "s_register_operand" "r,r"))		(match_operand:DI 1 "s_register_operand" "?r,0")))]  ""  "eor%?\\t%0, %1, %2\;eor%?\\t%R0, %R1, %2, asr #31"[(set_attr "length" "8")])(define_insn "xorsi3"  [(set (match_operand:SI 0 "s_register_operand" "=r")	(xor:SI (match_operand:SI 1 "s_register_operand" "r")		(match_operand:SI 2 "arm_rhs_operand" "rI")))]  ""  "eor%?\\t%0, %1, %2")(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (xor:SI (match_operand:SI 1 "s_register_operand" "r")				 (match_operand:SI 2 "arm_rhs_operand" "rI"))			 (const_int 0)))   (set (match_operand:SI 0 "s_register_operand" "=r")	(xor:SI (match_dup 1) (match_dup 2)))]  ""  "eor%?s\\t%0, %1, %2"[(set_attr "conds" "set")])(define_insn ""  [(set (reg:CC_NOOV 24)	(compare:CC_NOOV (xor:SI (match_operand:SI 0 "s_register_operand" "r")				 (match_operand:SI 1 "arm_rhs_operand" "rI"))			 (const_int 0)))]  ""  "teq%?\\t%0, %1"[(set_attr "conds" "set")]);; by splitting (IOR (AND (NOT A) (NOT B)) C) as D = AND (IOR A B) (NOT C), ;; (NOT D) we can sometimes merge the final NOT into one of the following;; insns(define_split  [(set (match_operand:SI 0 "s_register_operand" "=r")	(ior:SI (and:SI (not:SI (match_operand:SI 1 "s_register_operand" "r"))			(not:SI (match_operand:SI 2 "arm_rhs_operand" "rI")))		(match_operand:SI 3 "arm_rhs_operand" "rI")))   (clobber (match_operand:SI 4 "s_register_operand" "=r"))]  ""  [(set (match_dup 4) (and:SI (ior:SI (match_dup 1) (match_dup 2))			      (not:SI (match_dup 3))))   (set (match_dup 0) (not:SI (match_dup 4)))]  "")(define_insn ""  [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r")	(and:SI (ior:SI (match_operand:SI 1 "s_register_operand" "r,r,0")			(match_operand:SI 2 "arm_rhs_operand" "rI,0,rI"))		(not:SI (match_operand:SI 3 "arm_rhs_operand" "rI,rI,rI"))))]  ""  "orr%?\\t%0, %1, %2\;bic%?\\t%0, %0, %3"[(set_attr "length" "8")]);; 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")])

⌨️ 快捷键说明

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