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

📄 i370.md

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 MD
📖 第 1 页 / 共 5 页
字号:
      mvs_check_page (0, 4, 0);      return \"ST	%1,%0\";    }  mvs_check_page (0, 6, 0);  return \"MVC	%O0(4,%R0),%1\";}")(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\";}");; movstrsi instruction pattern(s).;(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 = change_address (operands[0], VOIDmode,			  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 = change_address (operands[1], VOIDmode,			  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    {      rtx reg1 = gen_reg_rtx (DImode);      rtx reg2 = gen_reg_rtx (DImode);      rtx subreg = gen_rtx (SUBREG, SImode, reg1, 1);      emit_insn (gen_rtx (SET, VOIDmode, subreg, operands[2]));      emit_insn (gen_rtx (SET, VOIDmode, gen_rtx (SUBREG, SImode, reg2, 1),			  subreg));      emit_insn (gen_rtx (PARALLEL, VOIDmode,			  gen_rtvec (5,				     gen_rtx (SET, VOIDmode, op0, op1),				     gen_rtx (USE, VOIDmode, reg1),				     gen_rtx (USE, VOIDmode, reg2),				     gen_rtx (CLOBBER, VOIDmode, reg1),				     gen_rtx (CLOBBER, VOIDmode, 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\";}"); Move a block that is larger than 255 bytes in length.(define_insn ""  [(set (match_operand:BLK 0 "general_operand" "=m")        (match_operand:BLK 1 "general_operand" "m"))   (use (match_operand:DI 2 "register_operand" "d"))   (use (match_operand:DI 3 "register_operand" "d"))   (clobber (match_dup 2))   (clobber (match_dup 3))]  ""  "*{  check_label_emit ();  mvs_check_page (0, 10, 0);  return \"LA	%2,%0\;LA	%3,%1\;MVCL	%2,%3\";}");;;;- Conversion instructions.;;;; extendsidi2 instruction pattern(s).;(define_expand "extendsidi2"  [(set (match_operand:DI 0 "general_operand" "")        (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_INT (32))));    }  else    {      if (INTVAL (operands[1]) < 0)	{	  emit_insn (gen_rtx (SET, VOIDmode,				  operand_subword (operands[0], 0, 1, DImode),			       GEN_INT (-1)));        }      else	{	  emit_insn (gen_rtx (SET, VOIDmode,				operand_subword (operands[0], 0, 1, DImode),			       GEN_INT (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, 2, 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\";	}      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, 4, 0);  return \"SLL	%1,16\;SRA	%1,16\;ST	%1,%0\";}");; 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]))    {      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\";}");; extendqihi2 instruction pattern(s).;(define_insn "extendqihi2"  [(set (match_operand:HI 0 "general_operand" "=d")	(sign_extend:HI (match_operand:QI 1 "general_operand" "0m")))]  ""  "*{  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]))    {      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\";}");; zero_extendsidi2 instruction pattern(s).;(define_expand "zero_extendsidi2"  [(set (match_operand:DI 0 "general_operand" "")        (zero_extend:DI (match_operand:SI 1 "general_operand" "")))]  ""  "{      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 (LSHIFTRT, DImode, operands[0],				GEN_INT (32))));  DONE;}");; zero_extendhisi2 instruction pattern(s).;(define_insn "zero_extendhisi2"  [(set (match_operand:SI 0 "general_operand" "=d")	(zero_extend:SI (match_operand:HI 1 "general_operand" "0")))]  ""  "*{  check_label_emit ();  CC_STATUS_SET (operands[0], operands[1]);  mvs_check_page (0, 4, 4);  return \"N	%1,=X'0000FFFF'\";}");; zero_extendqisi2 instruction pattern(s).;(define_insn "zero_extendqisi2"  [(set (match_operand:SI 0 "general_operand" "=d,&d")	(zero_extend:SI (match_operand:QI 1 "general_operand" "0i,m")))]  ""  "*{  check_label_emit ();  if (REG_P (operands[1]))    {      CC_STATUS_SET (operands[0], operands[1]);      mvs_check_page (0, 4, 4);      return \"N	%0,=X'000000FF'\";    }  if (GET_CODE (operands[1]) == CONST_INT)    {      mvs_check_page (0, 4, 0);      return \"LA	%0,%c1\";    }  CC_STATUS_INIT;  mvs_check_page (0, 8, 0);  return \"SLR	%0,%0\;IC	%0,%1\";}");; zero_extendqihi2 instruction pattern(s).;(define_insn "zero_extendqihi2"  [(set (match_operand:HI 0 "general_operand" "=d,&d")	(zero_extend:HI (match_operand:QI 1 "general_operand" "0i,m")))]  ""  "*{  check_label_emit ();  if (REG_P (operands[1]))    {      CC_STATUS_SET (operands[0], operands[1]);      mvs_check_page (0, 4, 4);      return \"N	%0,=X'000000FF'\";    }  if (GET_CODE (operands[1]) == CONST_INT)    {      mvs_check_page (0, 4, 0);      return \"LA	%0,%c1\";    }  CC_STATUS_INIT;  mvs_check_page (0, 8, 0);  return \"SLR	%0,%0\;IC	%0,%1\";}");; truncsihi2 instruction pattern(s).;(define_insn "truncsihi2"  [(set (match_operand:HI 0 "general_operand" "=d,m")	(truncate:HI (match_operand:SI 1 "general_operand" "0,d")))]  ""  "*{  check_label_emit ();  if (REG_P (operands[0]))    {      CC_STATUS_SET (operands[0], operands[1]);      mvs_check_page (0, 8, 0);      return \"SLL	%0,16\;SRA	%0,16\";    }  mvs_check_page (0, 4, 0);  return \"STH	%1,%0\";}");; fix_truncdfsi2 instruction pattern(s).;(define_insn "fix_truncdfsi2"  [(set (match_operand:SI 0 "general_operand" "=d")        (fix:SI (truncate:DF (match_operand:DF 1 "general_operand" "f"))))	(clobber (reg:DF 16))]  ""  "*{  check_label_emit ();  CC_STATUS_INIT;  if (REGNO (operands[1]) == 16)    {      mvs_check_page (0, 12, 8);      return \"AD	0,=XL8'4F08000000000000'\;STD	0,140(,13)\;L	%0,144(,13)\";    }  mvs_check_page (0, 14, 8);  return \"LDR	0,%1\;AD	0,=XL8'4F08000000000000'\;STD	0,140(,13)\;L	%0,144(,13)\";}");; floatsidf2 instruction pattern(s).;; Uses the float field of the TCA.;(define_insn "floatsidf2"  [(set (match_operand:DF 0 "general_operand" "=f")        (float:DF (match_operand:SI 1 "general_operand" "d")))]  ""  "*{  check_label_emit ();  CC_STATUS_INIT;  mvs_check_page (0, 16, 8);  return \"ST	%1,508(,12)\;XI	508(12),128\;LD	%0,504(,12)\;SD	%0,=XL8'4E00000080000000'\";}");; truncdfsf2 instruction pattern(s).;(define_insn "truncdfsf2"  [(set (match_operand:SF 0 "general_operand" "=f")        (float_truncate:SF (match_operand:DF 1 "general_operand" "f")))]  ""  "*{  check_label_emit ();  mvs_check_page (0, 2, 0);  return \"LRER	%0,%1\";}");; extendsfdf2 instruction pattern(s).;(define_insn "extendsfdf2"  [(set (match_operand:DF 0 "general_operand" "=f")        (float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))]  ""  "*{  check_label_emit ();  CC_STATUS_SET (0, const0_rtx);  if (FP_REG_P (operands[1]))    {      if (REGNO (operands[0]) == REGNO (operands[1]))	{	  mvs_check_page (0, 10, 0);	  return \"STE	%1,140(,13)\;SDR	%0,%0\;LE	%0,140(,13)\";	}      mvs_check_page (0, 4, 0);      return \"SDR	%0,%0\;LER	%0,%1\";    }  mvs_check_page (0, 6, 0);  return \"SDR	%0,%0\;LE	%0,%1\";}");;;;- Add instructions.;;;; adddi3 instruction pattern(s).;(define_expand "adddi3"  [(set (match_operand:DI 0 "general_operand" "")	(plus:DI (match_operand:DI 1 "general_operand" "")		 (match_operand:DI 2 "general_operand" "")))]  ""  "{  rtx label = gen_label_rtx ();  rtx op0_high = operand_subword (operands[0], 0, 1, DImode);  rtx op0_low = gen_lowpart (SImode, operands[0]);	  emit_insn (gen_rtx (SET, VOIDmode, op0_high,		    gen_rtx (PLUS, SImode,			    operand_subword (operands[1], 0, 1, DImode),			    operand_subword (operands[2], 0, 1, DImode))));  emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,	      gen_rtx (SET, VOIDmode, op0_low,		      gen_rtx (PLUS, SImode, gen_lowpart (SImode, operands[1]),			      gen_lowpart (SImode, operands[2]))),	      gen_rtx (USE, VOIDmode, gen_rtx (LABEL_REF, VOIDmode, label)))));  emit_insn (gen_rtx (SET, VOIDmode, op0_high,		    gen_rtx (PLUS, SImode, op0_high,			    GEN_INT (1))));  emit_label (label);  DONE;}")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=d")	(plus:SI (match_operand:SI 1 "general_operand" "%0")		 (match_operand:SI 2 "general_operand" "g")))   (use (label_ref (match_operand 3 "" "")))]  ""  "*{  int onpage;  check_label_emit ();  onpage = mvs_check_label (CODE_LABEL_NUMBER (operands[3]));  if (REG_P (operands[2]))    {      if (!onpage)	{	  mvs_check_page (0, 8, 4);	  return \"ALR	%0,%2\;L	14,=A(%l3)\;BCR	12,14\";	}      if (mvs_check_page (0, 6, 0))	{	  mvs_check_page (0, 2, 4);	  return \"ALR	%0,%2\;L	14,=A(%l3)\;BCR	12,14\";	}      return \"ALR	%0,%2\;BC	12,%l3\";    }  if (!onpage)    {      mvs_check_page (0, 10, 4);      return \"AL	%0,%2\;L	14,=A(%l3)\;BCR	12,14\";    }  if (mvs_check_page (0, 8 ,0))    {      mvs_check_page (0, 2, 4);      return \"AL	%0,%2\;L	14,=A(%l3)\;BCR	12,14\";    }  return \"AL	%0,%2\;BC	12,%l3\";}");; addsi3 instruction pattern(s).;; The following insn is used when it is known that operand one is an address,; frame, stack or argument pointer, and operand two is a constant that is; small enough to fit in the displacement field.; Notice that we can't allow the frame pointer to used as a normal register; because of this insn.;(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=d")	(plus:SI (match_operand:SI 1 "general_operand" "%a")		 (match_operand:SI 2 "immediate_operand" "J")))]  "((REGNO (operands[1]) == FRAME_POINTER_REGNUM || REGNO (operands[1]) == ARG_POINTER_REGNUM || REGNO (operands[1]) == STACK_POINTER_REGNUM) && (unsigned) INTVAL (operands[2]) < 4096)"  "*{  check_label_emit ();  CC_STATUS_INIT;  mvs_check_page (0, 4, 0);  return \"LA	%0,%c2(,%1)\";}")

⌨️ 快捷键说明

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