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

📄 sh.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 5 页
字号:
  "TARGET_SHMEDIA && reload_completed"  [(pc)]  "{  emit_insn (gen_movsicc_false (operands[0], operands[1], operands[2],				operands[3]));  emit_insn (gen_cmpsigtusi_media (operands[5], operands[4], operands[0]));  emit_insn (gen_movsicc_false (operands[0], operands[5], operands[4],				operands[0]));  DONE;}")(define_expand "movsicc"  [(set (match_operand:SI 0 "register_operand" "")	(if_then_else:SI (match_operand 1 "comparison_operator" "")			 (match_operand:SI 2 "register_operand" "")			 (match_operand:SI 3 "register_operand" "")))]  "TARGET_SHMEDIA"  "{  if ((GET_CODE (operands[1]) == EQ || GET_CODE (operands[1]) == NE)      && GET_MODE (sh_compare_op0) == SImode      && sh_compare_op1 == const0_rtx)    operands[1] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode,				  sh_compare_op0, sh_compare_op1);  else    {      rtx tmp;      if (no_new_pseudos)	FAIL;      tmp = gen_reg_rtx (SImode);      switch (GET_CODE (operands[1]))	{	case EQ:	  emit_insn (gen_seq (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case NE:	  emit_insn (gen_seq (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case GT:	  emit_insn (gen_sgt (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case LT:	  emit_insn (gen_slt (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case GE:	  emit_insn (gen_slt (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case LE:	  emit_insn (gen_sgt (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case GTU:	  emit_insn (gen_sgtu (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case LTU:	  emit_insn (gen_sltu (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case GEU:	  emit_insn (gen_sltu (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case LEU:	  emit_insn (gen_sgtu (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case UNORDERED:	  emit_insn (gen_sunordered (tmp));	  operands[1] = gen_rtx_NE (VOIDmode, tmp, const0_rtx);	  break;	case ORDERED:	  emit_insn (gen_sunordered (tmp));	  operands[1] = gen_rtx_EQ (VOIDmode, tmp, const0_rtx);	  break;	case UNEQ:	case UNGE:	case UNGT:	case UNLE:	case UNLT:	case LTGT:	  FAIL;	default:	  abort ();	}    }}")(define_expand "movqicc"  [(set (match_operand:QI 0 "register_operand" "")	(if_then_else:QI (match_operand 1 "comparison_operator" "")			 (match_operand:QI 2 "register_operand" "")			 (match_operand:QI 3 "register_operand" "")))]  "TARGET_SHMEDIA"  "{  operands[0] = simplify_gen_subreg (SImode, operands[0], QImode, 0);  operands[2] = simplify_gen_subreg (SImode, operands[2], QImode, 0);  operands[3] = simplify_gen_subreg (SImode, operands[3], QImode, 0);  emit (gen_movsicc (operands[0], operands[1], operands[2], operands[3]));  DONE;}");; -------------------------------------------------------------------------;; Addition instructions;; -------------------------------------------------------------------------(define_expand "adddi3"  [(set (match_operand:DI 0 "arith_reg_operand" "")	(plus:DI (match_operand:DI 1 "arith_reg_operand" "")		 (match_operand:DI 2 "arith_operand" "")))]  ""  "{  if (TARGET_SH1)    {      if (no_new_pseudos && ! arith_reg_operand (operands[2], DImode))        FAIL;      operands[2] = force_reg (DImode, operands[2]);      emit_insn (gen_adddi3_compact (operands[0], operands[1], operands[2]));      DONE;    }}")(define_insn "*adddi3_media"  [(set (match_operand:DI 0 "arith_reg_dest" "=r,r")	(plus:DI (match_operand:DI 1 "arith_reg_operand" "%r,r")		 (match_operand:DI 2 "arith_operand" "r,I10")))]  "TARGET_SHMEDIA"  "@	add	%1, %2, %0	addi	%1, %2, %0"  [(set_attr "type" "arith_media")])(define_insn "*adddisi3_media"  [(set (subreg:DI (match_operand:SI 0 "arith_reg_operand" "=r,r") 0)	(plus:DI (match_operand:DI 1 "arith_reg_operand" "%r,r")		 (match_operand:DI 2 "arith_operand" "r,I10")))]  "TARGET_SHMEDIA"  "@	add.l	%1, %2, %0	addi.l	%1, %2, %0"  [(set_attr "type" "arith_media")   (set_attr "highpart" "ignore")])(define_insn "adddi3z_media"  [(set (match_operand:DI 0 "arith_reg_dest" "=r")	(zero_extend:DI	 (plus:SI (match_operand:SI 1 "extend_reg_operand" "r")		  (match_operand:SI 2 "extend_reg_or_0_operand" "rN"))))]  "TARGET_SHMEDIA"  "addz.l	%1, %N2, %0"  [(set_attr "type" "arith_media")   (set_attr "highpart" "ignore")])(define_insn "adddi3_compact"  [(set (match_operand:DI 0 "arith_reg_dest" "=&r")	(plus:DI (match_operand:DI 1 "arith_reg_operand" "%0")		 (match_operand:DI 2 "arith_reg_operand" "r")))   (clobber (reg:SI T_REG))]  "TARGET_SH1"  "#"  [(set_attr "length" "6")])(define_split  [(set (match_operand:DI 0 "arith_reg_dest" "")	(plus:DI (match_operand:DI 1 "arith_reg_operand" "")		 (match_operand:DI 2 "arith_reg_operand" "")))   (clobber (reg:SI T_REG))]  "TARGET_SH1 && reload_completed"  [(const_int 0)]  "{  rtx high0, high2, low0 = gen_lowpart (SImode, operands[0]);  high0 = gen_rtx_REG (SImode,		       true_regnum (operands[0])		       + (TARGET_LITTLE_ENDIAN ? 1 : 0));  high2 = gen_rtx_REG (SImode,		       true_regnum (operands[2])		       + (TARGET_LITTLE_ENDIAN ? 1 : 0));  emit_insn (gen_clrt ());  emit_insn (gen_addc (low0, low0, gen_lowpart (SImode, operands[2])));  emit_insn (gen_addc1 (high0, high0, high2));  DONE;}")(define_insn "addc"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(plus:SI (plus:SI (match_operand:SI 1 "arith_reg_operand" "0")			  (match_operand:SI 2 "arith_reg_operand" "r"))		 (reg:SI T_REG)))   (set (reg:SI T_REG)	(ltu:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))]  "TARGET_SH1"  "addc	%2,%0"  [(set_attr "type" "arith")])(define_insn "addc1"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(plus:SI (plus:SI (match_operand:SI 1 "arith_reg_operand" "0")			  (match_operand:SI 2 "arith_reg_operand" "r"))		 (reg:SI T_REG)))   (clobber (reg:SI T_REG))]  "TARGET_SH1"  "addc	%2,%0"  [(set_attr "type" "arith")])(define_expand "addsi3"  [(set (match_operand:SI 0 "arith_reg_operand" "")	(plus:SI (match_operand:SI 1 "arith_operand" "")		 (match_operand:SI 2 "arith_operand" "")))]  ""  "{  if (TARGET_SHMEDIA)    operands[1] = force_reg (SImode, operands[1]);}")(define_insn "addsi3_media"  [(set (match_operand:SI 0 "arith_reg_dest" "=r,r")	(plus:SI (match_operand:SI 1 "extend_reg_operand" "%r,r")		 (match_operand:SI 2 "arith_operand" "r,I10")))]  "TARGET_SHMEDIA"  "@	add.l	%1, %2, %0	addi.l	%1, %2, %0"  [(set_attr "type" "arith_media")   (set_attr "highpart" "ignore")])(define_insn "addsidi3_media"  [(set (match_operand:DI 0 "arith_reg_dest" "=r,r")	(sign_extend:DI (plus:SI (match_operand:SI 1 "extend_reg_operand"				  "%r,r")				 (match_operand:SI 2 "arith_operand"				  "r,I10"))))]  "TARGET_SHMEDIA"  "@	add.l	%1, %2, %0	addi.l	%1, %2, %0"  [(set_attr "type" "arith_media")   (set_attr "highpart" "ignore")])(define_insn "*addsi3_compact"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(plus:SI (match_operand:SI 1 "arith_operand" "%0")		 (match_operand:SI 2 "arith_operand" "rI08")))]  "TARGET_SH1"  "add	%2,%0"  [(set_attr "type" "arith")]);; -------------------------------------------------------------------------;; Subtraction instructions;; -------------------------------------------------------------------------(define_expand "subdi3"  [(set (match_operand:DI 0 "arith_reg_operand" "")	(minus:DI (match_operand:DI 1 "arith_reg_or_0_operand" "")		  (match_operand:DI 2 "arith_reg_operand" "")))]  ""  "{  if (TARGET_SH1)    {      operands[1] = force_reg (DImode, operands[1]);      emit_insn (gen_subdi3_compact (operands[0], operands[1], operands[2]));      DONE;    }}")(define_insn "*subdi3_media"  [(set (match_operand:DI 0 "arith_reg_dest" "=r")	(minus:DI (match_operand:DI 1 "arith_reg_or_0_operand" "rN")		  (match_operand:DI 2 "arith_reg_operand" "r")))]  "TARGET_SHMEDIA"  "sub	%N1, %2, %0"  [(set_attr "type" "arith_media")])  (define_insn "subdisi3_media"  [(set (subreg:DI (match_operand:SI 0 "arith_reg_operand" "=r") 0)	(minus:DI (match_operand:DI 1 "arith_reg_or_0_operand" "rN")		  (match_operand:DI 2 "arith_reg_operand" "r")))]  "TARGET_SHMEDIA"  "sub.l	%N1, %2, %0"  [(set_attr "type" "arith_media")   (set_attr "highpart" "ignore")])(define_insn "subdi3_compact"  [(set (match_operand:DI 0 "arith_reg_dest" "=&r")	(minus:DI (match_operand:DI 1 "arith_reg_operand" "0")		 (match_operand:DI 2 "arith_reg_operand" "r")))   (clobber (reg:SI T_REG))]  "TARGET_SH1"  "#"  [(set_attr "length" "6")])(define_split  [(set (match_operand:DI 0 "arith_reg_dest" "")	(minus:DI (match_operand:DI 1 "arith_reg_operand" "")		  (match_operand:DI 2 "arith_reg_operand" "")))   (clobber (reg:SI T_REG))]  "TARGET_SH1 && reload_completed"  [(const_int 0)]  "{  rtx high0, high2, low0 = gen_lowpart (SImode, operands[0]);  high0 = gen_rtx_REG (SImode,		       true_regnum (operands[0])		       + (TARGET_LITTLE_ENDIAN ? 1 : 0));  high2 = gen_rtx_REG (SImode,		       true_regnum (operands[2])		       + (TARGET_LITTLE_ENDIAN ? 1 : 0));  emit_insn (gen_clrt ());  emit_insn (gen_subc (low0, low0, gen_lowpart (SImode, operands[2])));  emit_insn (gen_subc1 (high0, high0, high2));  DONE;}")(define_insn "subc"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(minus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "0")			    (match_operand:SI 2 "arith_reg_operand" "r"))		  (reg:SI T_REG)))   (set (reg:SI T_REG)	(gtu:SI (minus:SI (minus:SI (match_dup 1) (match_dup 2))			  (reg:SI T_REG))		(match_dup 1)))]  "TARGET_SH1"  "subc	%2,%0"  [(set_attr "type" "arith")])(define_insn "subc1"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(minus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "0")			    (match_operand:SI 2 "arith_reg_operand" "r"))		  (reg:SI T_REG)))   (clobber (reg:SI T_REG))]  "TARGET_SH1"  "subc	%2,%0"  [(set_attr "type" "arith")]);; life_analysis thinks rn is live before subc rn,rn, so make a special;; pattern for this case.  This helps multimedia applications that compute;; the sum of absolute differences.(define_insn "mov_neg_si_t"  [(set (match_operand:SI 0 "arith_reg_dest" "=r") (neg:SI (reg:SI T_REG)))]  "TARGET_SH1"  "subc	%0,%0"  [(set_attr "type" "arith")])(define_insn "*subsi3_internal"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(minus:SI (match_operand:SI 1 "arith_reg_operand" "0")		  (match_operand:SI 2 "arith_reg_operand" "r")))]  "TARGET_SH1"  "sub	%2,%0"  [(set_attr "type" "arith")])(define_insn_and_split "*subsi3_media"  [(set (match_operand:SI 0 "arith_reg_dest" "=r")	(minus:SI (match_operand:SI 1 "minuend_operand" "rN")		  (match_operand:SI 2 "extend_reg_operand" "r")))]  "TARGET_SHMEDIA   && (operands[1] != constm1_rtx       || (GET_CODE (operands[2]) != TRUNCATE	   && GET_CODE (operands[2]) != SUBREG))"  "sub.l	%N1, %2, %0"  "operands[1] == constm1_rtx"  [(set (match_dup 0) (xor:SI (match_dup 2) (match_dup 1)))]

⌨️ 快捷键说明

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