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

📄 i370.md

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn ""  [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))	(match_operand:HI 1 "r_or_s_operand" "g"))]  ""  "*{  check_label_emit ();  if (REG_P (operands[1]))    {      mvs_check_page (0, 8, 0);      return \"STH	%1,140(,13)\;ICM	%0,3,140(13)\";    }  else if (GET_CODE (operands[1]) == CONST_INT)    {      mvs_check_page (0, 4, 0);      return \"ICM	%0,3,%H1\";    }  mvs_check_page (0, 4, 0);  return \"ICM	%0,3,%1\";}"   [(set_attr "length" "8")])(define_insn "movstricthi"  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))	(match_operand:HI 1 "general_operand" "d"))]  ""  "*{  check_label_emit ();  if (REG_P (operands[0]))    {      mvs_check_page (0, 8, 0);      return \"STH	%1,140(,13)\;ICM	%0,3,140(13)\";    }  mvs_check_page (0, 4, 0);  return \"STH	%1,%0\";}"   [(set_attr "length" "8")]);; movdf instruction pattern(s).;(define_insn "";;  [(set (match_operand:DF 0 "r_or_s_operand" "=fm,fm,*dm");;        (match_operand:DF 1 "r_or_s_operand" "fmF,*dm,fmF"))]  [(set (match_operand:DF 0 "general_operand" "=f,m,fS,*dS,???d")      (match_operand:DF 1 "general_operand" "fmF,fF,*dS,fSF,???d"))]  "TARGET_CHAR_INSTRUCTIONS"  "*{  check_label_emit ();  if (FP_REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 2, 0);	  return \"LDR	%0,%1\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"STM	%1,%N1,140(13)\;LD	%0,140(,13)\";	}      if (operands[1] == const0_rtx)	{	  CC_STATUS_SET (operands[0], operands[1]);	  mvs_check_page (0, 2, 0);	  return \"SDR	%0,%0\";	}      mvs_check_page (0, 4, 0);      return \"LD	%0,%1\";    }  if (REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 12, 0);	  return \"STD	%1,140(,13)\;LM	%0,%N0,140(13)\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 4, 0);	  return \"LR	%0,%1\;LR	%N0,%N1\";	}      mvs_check_page (0, 4, 0);      return \"LM	%0,%N0,%1\";    }  else if (FP_REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"STD	%1,%0\";    }  else if (REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"STM	%1,%N1,%0\";    }  mvs_check_page (0, 6, 0);  return \"MVC	%O0(8,%R0),%1\";}"   [(set_attr "length" "12")])(define_insn "movdf";;  [(set (match_operand:DF 0 "general_operand" "=f,fm,m,*d");;	(match_operand:DF 1 "general_operand" "fmF,*d,f,fmF"))]  [(set (match_operand:DF 0 "general_operand" "=f,m,fS,*d,???d")      (match_operand:DF 1 "general_operand" "fmF,f,*d,SfF,???d"))]  ""  "*{  check_label_emit ();  if (FP_REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 2, 0);	  return \"LDR	%0,%1\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"STM	%1,%N1,140(13)\;LD	%0,140(,13)\";	}      if (operands[1] == const0_rtx)	{	  CC_STATUS_SET (operands[0], operands[1]);	  mvs_check_page (0, 2, 0);	  return \"SDR	%0,%0\";	}      mvs_check_page (0, 4, 0);      return \"LD	%0,%1\";    }  else if (REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 12, 0);	  return \"STD	%1,140(,13)\;LM	%0,%N0,140(13)\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 4, 0);	  return \"LR	%0,%1\;LR	%N0,%N1\";	}      mvs_check_page (0, 4, 0);      return \"LM	%0,%N0,%1\";    }  else if (FP_REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"STD	%1,%0\";    }  mvs_check_page (0, 4, 0);  return \"STM	%1,%N1,%0\";}"   [(set_attr "length" "12")]);; movsf instruction pattern(s).;(define_insn "";;  [(set (match_operand:SF 0 "r_or_s_operand" "=fm,fm,*dm");;        (match_operand:SF 1 "r_or_s_operand" "fmF,*dm,fmF"))];;  [(set (match_operand:SF 0 "general_operand" "=f,m,fm,*d,S");;         (match_operand:SF 1 "general_operand" "fmF,fF,*d,fmF,S"))]  [(set (match_operand:SF 0 "general_operand" "=f*d,fm,S,???d")        (match_operand:SF 1 "general_operand" "fmF,fF*d,S,???d"))]  "TARGET_CHAR_INSTRUCTIONS"  "*{  check_label_emit ();  if (FP_REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 2, 0);	  return \"LER	%0,%1\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"ST	%1,140(,13)\;LE	%0,140(,13)\";	}      if (operands[1] == const0_rtx)	{	  CC_STATUS_SET (operands[0], operands[1]);	  mvs_check_page (0, 2, 0);	  return \"SER	%0,%0\";	}      mvs_check_page (0, 4, 0);      return \"LE	%0,%1\";    }  else if (REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"STE	%1,140(,13)\;L	%0,140(,13)\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 2, 0);	  return \"LR	%0,%1\";	}      mvs_check_page (0, 4, 0);      return \"L	%0,%1\";    }  else if (FP_REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"STE	%1,%0\";    }  else if (REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"ST	%1,%0\";    }  mvs_check_page (0, 6, 0);  return \"MVC	%O0(4,%R0),%1\";}"   [(set_attr "length" "8")])(define_insn "movsf"  [(set (match_operand:SF 0 "general_operand" "=f,fm,m,*d")	(match_operand:SF 1 "general_operand" "fmF,*d,f,fmF"))]  ""  "*{  check_label_emit ();  if (FP_REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 2, 0);	  return \"LER	%0,%1\";	}      if (REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"ST	%1,140(,13)\;LE	%0,140(,13)\";	}      if (operands[1] == const0_rtx)	{	  CC_STATUS_SET (operands[0], operands[1]);	  mvs_check_page (0, 2, 0);	  return \"SER	%0,%0\";	}      mvs_check_page (0, 4, 0);      return \"LE	%0,%1\";    }  else if (REG_P (operands[0]))    {      if (FP_REG_P (operands[1]))	{	  mvs_check_page (0, 8, 0);	  return \"STE	%1,140(,13)\;L	%0,140(,13)\";	}      mvs_check_page (0, 4, 0);      return \"L	%0,%1\";    }  else if (FP_REG_P (operands[1]))    {      mvs_check_page (0, 4, 0);      return \"STE	%1,%0\";    }  mvs_check_page (0, 4, 0);  return \"ST	%1,%0\";}"   [(set_attr "length" "8")]);; clrstrsi instruction pattern(s).; memset a block of bytes to zero.; block must be less than 16M (24 bits) in length;(define_expand "clrstrsi"  [(set (match_operand:BLK 0 "general_operand" "g")        (const_int 0))    (use (match_operand:SI  1 "general_operand" ""))   (match_operand 2 "" "")]   ""   "{  {        /* implementation suggested by  Richard Henderson <rth@cygnus.com> */        rtx reg1 = gen_reg_rtx (DImode);        rtx reg2 = gen_reg_rtx (DImode);        rtx mem1 = operands[0];        rtx zippo = gen_rtx_CONST_INT (SImode, 0);        rtx len = operands[1];        if (!CONSTANT_P (len))          len = force_reg (SImode, len);        /* Load up the address+length pairs.  */        emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1));        emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0),                        force_operand (XEXP (mem1, 0), NULL_RTX));        emit_move_insn (gen_rtx_SUBREG (SImode, reg1, GET_MODE_SIZE (SImode)), len);        emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2));        emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), zippo);        emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), zippo);        /* Copy! */        emit_insn (gen_movstrsi_1 (reg1, reg2));  }  DONE;}");; movstrsi instruction pattern(s).; block must be less than 16M (24 bits) in length(define_expand "movstrsi"  [(set (match_operand:BLK 0 "general_operand" "")        (match_operand:BLK 1 "general_operand" ""))   (use (match_operand:SI  2 "general_operand" ""))   (match_operand 3 "" "")]   ""   "{  rtx op0, op1;  op0 = XEXP (operands[0], 0);  if (GET_CODE (op0) == REG      || (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 0)) == REG	  && GET_CODE (XEXP (op0, 1)) == CONST_INT	  && (unsigned) INTVAL (XEXP (op0, 1)) < 4096))    op0 = operands[0];  else    op0 = replace_equiv_address (operands[0], copy_to_mode_reg (SImode, op0));  op1 = XEXP (operands[1], 0);  if (GET_CODE (op1) == REG      || (GET_CODE (op1) == PLUS && GET_CODE (XEXP (op1, 0)) == REG	  && GET_CODE (XEXP (op1, 1)) == CONST_INT	  && (unsigned) INTVAL (XEXP (op1, 1)) < 4096))    op1 = operands[1];  else    op1 = replace_equiv_address (operands[1], copy_to_mode_reg (SImode, op1));  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 256)    emit_insn (gen_rtx_PARALLEL (VOIDmode,			gen_rtvec (2,				   gen_rtx_SET (VOIDmode, op0, op1),				   gen_rtx_USE (VOIDmode, operands[2]))));  else    {        /* implementation provided by  Richard Henderson <rth@cygnus.com> */        rtx reg1 = gen_reg_rtx (DImode);        rtx reg2 = gen_reg_rtx (DImode);        rtx mem1 = operands[0];        rtx mem2 = operands[1];        rtx len = operands[2];        if (!CONSTANT_P (len))          len = force_reg (SImode, len);        /* Load up the address+length pairs.  */        emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1));        emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0),                        force_operand (XEXP (mem1, 0), NULL_RTX));        emit_move_insn (gen_rtx_SUBREG (SImode, reg1, GET_MODE_SIZE (SImode)), len);        emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2));        emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0),                        force_operand (XEXP (mem2, 0), NULL_RTX));        emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len);        /* Copy! */        emit_insn (gen_movstrsi_1 (reg1, reg2));    }  DONE;}"); Move a block that is less than 256 bytes in length.(define_insn ""  [(set (match_operand:BLK 0 "s_operand" "=m")	(match_operand:BLK 1 "s_operand" "m"))   (use (match_operand 2 "immediate_operand" "I"))]  "((unsigned) INTVAL (operands[2]) < 256)"  "*{  check_label_emit ();  mvs_check_page (0, 6, 0);  return \"MVC	%O0(%c2,%R0),%1\";}"   [(set_attr "length" "6")]); Move a block that is larger than 255 bytes in length.(define_insn "movstrsi_1"  [(set (mem:BLK (subreg:SI (match_operand:DI 0 "register_operand" "+d") 0))        (mem:BLK (subreg:SI (match_operand:DI 1 "register_operand" "+d") 0)))   (use (match_dup 0))   (use (match_dup 1))   (clobber (match_dup 0))   (clobber (match_dup 1))]  ""  "*{  check_label_emit ();  mvs_check_page (0, 2, 0);  return \"MVCL	%0,%1\";}"   [(set_attr "length" "2")]);;;;- Conversion instructions.;;;; extendsidi2 instruction pattern(s).;(define_expand "extendsidi2"  [(set (match_operand:DI 0 "register_operand" "=d")        (sign_extend:DI (match_operand:SI 1 "general_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) != CONST_INT)    {      emit_insn (gen_rtx_SET (VOIDmode,		  operand_subword (operands[0], 0, 1, DImode), operands[1]));      emit_insn (gen_rtx_SET (VOIDmode, operands[0],			gen_rtx_ASHIFTRT (DImode, operands[0],				gen_rtx_CONST_INT (SImode, 32))));    }  else    {      if (INTVAL (operands[1]) < 0)	{	  emit_insn (gen_rtx_SET (VOIDmode,				  operand_subword (operands[0], 0, 1, DImode),			       gen_rtx_CONST_INT (SImode, -1)));        }      else	{	  emit_insn (gen_rtx_SET (VOIDmode,				operand_subword (operands[0], 0, 1, DImode),			       gen_rtx_CONST_INT (SImode, 0)));        }      emit_insn (gen_rtx_SET (VOIDmode, gen_lowpart (SImode, operands[0]),			   operands[1]));    }  DONE;}");; extendhisi2 instruction pattern(s).;(define_insn "extendhisi2"  [(set (match_operand:SI 0 "general_operand" "=d,m")	(sign_extend:SI (match_operand:HI 1 "general_operand" "g,d")))]  ""  "*{  check_label_emit ();  if (REG_P (operands[0]))    {      if (REG_P (operands[1]))      {        if (REGNO (operands[0]) != REGNO (operands[1]))	  {	    mvs_check_page (0, 10, 0);            return \"LR	%0,%1\;SLL	%0,16\;SRA	%0,16\";	  }        else          return \"\"; /* Should be empty.  16-bits regs are always 32-bits.  */      }      if (operands[1] == const0_rtx)	{	  CC_STATUS_INIT;	  mvs_check_page (0, 2, 0);	  return \"SLR	%0,%0\";	}      if (GET_CODE (operands[1]) == CONST_INT 	  && (unsigned) INTVAL (operands[1]) < 4096)	{	  mvs_check_page (0, 4, 0);	  return \"LA	%0,%c1(0,0)\";	}      if (GET_CODE (operands[1]) == CONST_INT)	{	  mvs_check_page (0, 4, 0);	  return \"LH	%0,%H1\";	}      mvs_check_page (0, 4, 0);      return \"LH	%0,%1\";    }  mvs_check_page (0, 12, 0);  return \"SLL	%1,16\;SRA	%1,16\;ST	%1,%0\";}"   [(set_attr "length" "12")]);; extendqisi2 instruction pattern(s).;(define_insn "extendqisi2"  [(set (match_operand:SI 0 "general_operand" "=d")	(sign_extend:SI (match_operand:QI 1 "general_operand" "0mi")))]  ""  "*{  check_label_emit ();  CC_STATUS_SET (operands[0], operands[1]);  if (REG_P (operands[1]))    {      mvs_check_page (0, 8, 0);      return \"SLL	%0,24\;SRA	%0,24\";    }  if (s_operand (operands[1], GET_MODE (operands[1])))    {      mvs_check_page (0, 8, 0);      return \"ICM	%0,8,%1\;SRA	%0,24\";    }  mvs_check_page (0, 12, 0);  return \"IC	%0,%1\;SLL	%0,24\;SRA	%0,24\";}"   [(set_attr "length" "12")]);; extendqihi2 instruction pattern(s).;

⌨️ 快捷键说明

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