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

📄 i386.md

📁 gcc库的原代码,对编程有很大帮助.
💻 MD
📖 第 1 页 / 共 5 页
字号:
  if (GET_CODE (operands[0]) == MEM)    {      if (stack_top_dies)	return AS1 (fstp%z0,%0);      else        return AS1 (fst%z0,%0);    }  else if (STACK_TOP_P (operands[0]))    {      output_asm_insn (AS1 (fstp%z2,%y2), operands);      return AS1 (fld%z2,%y2);    }  else    abort ();}")(define_insn "truncxfsf2"  [(set (match_operand:SF 0 "general_operand" "=m,!*r")	(float_truncate:SF	 (match_operand:XF 1 "register_operand" "f,f")))]  "TARGET_80387"  "*{  int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;  if (NON_STACK_REG_P (operands[0]))    {      if (stack_top_dies == 0)	{	  output_asm_insn (AS1 (fld,%y1), operands);	  stack_top_dies = 1;	}      output_to_reg (operands[0], stack_top_dies);      RET;    }  else if (GET_CODE (operands[0]) == MEM)    {      if (stack_top_dies)	return AS1 (fstp%z0,%0);      else	{	  output_asm_insn (AS1 (fld,%y1), operands);	  return AS1 (fstp%z0,%0);	}    }  else    abort ();}")(define_insn "truncxfdf2"  [(set (match_operand:DF 0 "general_operand" "=m,!*r")	(float_truncate:DF	 (match_operand:XF 1 "register_operand" "f,f")))]  "TARGET_80387"  "*{  int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;  if (NON_STACK_REG_P (operands[0]))    {      if (stack_top_dies == 0)	{	  output_asm_insn (AS1 (fld,%y1), operands);	  stack_top_dies = 1;	}      output_to_reg (operands[0], stack_top_dies);      RET;    }  else if (GET_CODE (operands[0]) == MEM)    {      if (stack_top_dies)	return AS1 (fstp%z0,%0);      else	{	  output_asm_insn (AS1 (fld,%y1), operands);	  return AS1 (fstp%z0,%0);	}    }  else    abort ();}");; The 387 requires that the stack top dies after converting to DImode.;; Represent an unsigned conversion from SImode to MODE_FLOAT by first;; doing a signed conversion to DImode, and then taking just the low;; part.(define_expand "fixuns_truncxfsi2"  [(set (match_dup 4)	(match_operand:XF 1 "register_operand" ""))   (parallel [(set (match_dup 2)		   (fix:DI (fix:XF (match_dup 4))))	      (clobber (match_dup 4))	      (clobber (match_dup 5))	      (clobber (match_dup 6))	      (clobber (match_scratch:SI 7 ""))])   (set (match_operand:SI 0 "general_operand" "")	(match_dup 3))]  "TARGET_80387"  "{  operands[2] = gen_reg_rtx (DImode);  operands[3] = gen_lowpart (SImode, operands[2]);  operands[4] = gen_reg_rtx (XFmode);  operands[5] = (rtx) assign_386_stack_local (SImode, 0);  operands[6] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fixuns_truncdfsi2"  [(set (match_dup 4)	(match_operand:DF 1 "register_operand" ""))   (parallel [(set (match_dup 2)		   (fix:DI (fix:DF (match_dup 4))))	      (clobber (match_dup 4))	      (clobber (match_dup 5))	      (clobber (match_dup 6))	      (clobber (match_scratch:SI 7 ""))])   (set (match_operand:SI 0 "general_operand" "")	(match_dup 3))]  "TARGET_80387"  "{  operands[2] = gen_reg_rtx (DImode);  operands[3] = gen_lowpart (SImode, operands[2]);  operands[4] = gen_reg_rtx (DFmode);  operands[5] = (rtx) assign_386_stack_local (SImode, 0);  operands[6] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fixuns_truncsfsi2"  [(set (match_dup 4)	(match_operand:SF 1 "register_operand" ""))   (parallel [(set (match_dup 2)		   (fix:DI (fix:SF (match_dup 4))))	      (clobber (match_dup 4))	      (clobber (match_dup 5))	      (clobber (match_dup 6))	      (clobber (match_scratch:SI 7 ""))])   (set (match_operand:SI 0 "general_operand" "")	(match_dup 3))]  "TARGET_80387"  "{  operands[2] = gen_reg_rtx (DImode);  operands[3] = gen_lowpart (SImode, operands[2]);  operands[4] = gen_reg_rtx (SFmode);  operands[5] = (rtx) assign_386_stack_local (SImode, 0);  operands[6] = (rtx) assign_386_stack_local (SImode, 1);}");; Signed conversion to DImode.(define_expand "fix_truncxfdi2"  [(set (match_dup 2)	(match_operand:XF 1 "register_operand" ""))   (parallel [(set (match_operand:DI 0 "general_operand" "")		   (fix:DI (fix:XF (match_dup 2))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_dup 4))	      (clobber (match_scratch:SI 5 ""))])]  "TARGET_80387"  "{  operands[1] = copy_to_mode_reg (XFmode, operands[1]);  operands[2] = gen_reg_rtx (XFmode);  operands[3] = (rtx) assign_386_stack_local (SImode, 0);  operands[4] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fix_truncdfdi2"  [(set (match_dup 2)	(match_operand:DF 1 "register_operand" ""))   (parallel [(set (match_operand:DI 0 "general_operand" "")		   (fix:DI (fix:DF (match_dup 2))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_dup 4))	      (clobber (match_scratch:SI 5 ""))])]  "TARGET_80387"  "{  operands[1] = copy_to_mode_reg (DFmode, operands[1]);  operands[2] = gen_reg_rtx (DFmode);  operands[3] = (rtx) assign_386_stack_local (SImode, 0);  operands[4] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fix_truncsfdi2"  [(set (match_dup 2)	(match_operand:SF 1 "register_operand" ""))   (parallel [(set (match_operand:DI 0 "general_operand" "")		   (fix:DI (fix:SF (match_dup 2))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_dup 4))	      (clobber (match_scratch:SI 5 ""))])]  "TARGET_80387"  "{  operands[1] = copy_to_mode_reg (SFmode, operands[1]);  operands[2] = gen_reg_rtx (SFmode);  operands[3] = (rtx) assign_386_stack_local (SImode, 0);  operands[4] = (rtx) assign_386_stack_local (SImode, 1);}");; These match a signed conversion of either DFmode or SFmode to DImode.(define_insn ""  [(set (match_operand:DI 0 "general_operand" "=rm")	(fix:DI (fix:XF (match_operand:XF 1 "register_operand" "f"))))   (clobber (match_dup 1))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);")(define_insn ""  [(set (match_operand:DI 0 "general_operand" "=rm")	(fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))   (clobber (match_dup 1))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);")(define_insn ""  [(set (match_operand:DI 0 "general_operand" "=rm")	(fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))   (clobber (match_dup 1))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);");; Signed MODE_FLOAT conversion to SImode.(define_expand "fix_truncxfsi2"  [(parallel [(set (match_operand:SI 0 "general_operand" "")		   (fix:SI		    (fix:XF (match_operand:XF 1 "register_operand" ""))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_scratch:SI 4 ""))])]  "TARGET_80387"  "{  operands[2] = (rtx) assign_386_stack_local (SImode, 0);  operands[3] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fix_truncdfsi2"  [(parallel [(set (match_operand:SI 0 "general_operand" "")		   (fix:SI		    (fix:DF (match_operand:DF 1 "register_operand" ""))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_scratch:SI 4 ""))])]  "TARGET_80387"  "{  operands[2] = (rtx) assign_386_stack_local (SImode, 0);  operands[3] = (rtx) assign_386_stack_local (SImode, 1);}")(define_expand "fix_truncsfsi2"  [(parallel [(set (match_operand:SI 0 "general_operand" "")		   (fix:SI		    (fix:SF (match_operand:SF 1 "register_operand" ""))))	      (clobber (match_dup 2))	      (clobber (match_dup 3))	      (clobber (match_scratch:SI 4 ""))])]  "TARGET_80387"  "{  operands[2] = (rtx) assign_386_stack_local (SImode, 0);  operands[3] = (rtx) assign_386_stack_local (SImode, 1);}")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=rm")	(fix:SI (fix:XF (match_operand:XF 1 "register_operand" "f"))))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=rm")	(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=rm")	(fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))   (clobber (match_operand:SI 2 "memory_operand" "m"))   (clobber (match_operand:SI 3 "memory_operand" "m"))   (clobber (match_scratch:SI 4 "=&q"))]  "TARGET_80387"  "* return output_fix_trunc (insn, operands);");; Conversion between fixed point and floating point.;; The actual pattern that matches these is at the end of this file.;; ??? Possibly represent floatunssidf2 here in gcc2.(define_expand "floatsisf2"  [(set (match_operand:SF 0 "register_operand" "")	(float:SF (match_operand:SI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "")(define_expand "floatdisf2"  [(set (match_operand:SF 0 "register_operand" "")	(float:SF (match_operand:DI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "")(define_expand "floatsidf2"  [(set (match_operand:DF 0 "register_operand" "")	(float:DF (match_operand:SI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "")(define_expand "floatdidf2"  [(set (match_operand:DF 0 "register_operand" "")	(float:DF (match_operand:DI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "")(define_expand "floatsixf2"  [(set (match_operand:XF 0 "register_operand" "")	(float:XF (match_operand:SI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "")(define_expand "floatdixf2"  [(set (match_operand:XF 0 "register_operand" "")	(float:XF (match_operand:DI 1 "nonimmediate_operand" "")))]  "TARGET_80387"  "");; This will convert from SImode or DImode to MODE_FLOAT.(define_insn ""  [(set (match_operand:XF 0 "register_operand" "=f")	(float:XF (match_operand:DI 1 "general_operand" "rm")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}")(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=f")	(float:DF (match_operand:DI 1 "nonimmediate_operand" "rm")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}")(define_insn ""  [(set (match_operand:SF 0 "register_operand" "=f")	(float:SF (match_operand:DI 1 "nonimmediate_operand" "rm")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}")(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=f")	(float:DF (match_operand:SI 1 "nonimmediate_operand" "rm")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}")(define_insn ""  [(set (match_operand:XF 0 "register_operand" "=f,f")	(float:XF (match_operand:SI 1 "general_operand" "m,!*r")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}")(define_insn ""  [(set (match_operand:SF 0 "register_operand" "=f")	(float:SF (match_operand:SI 1 "nonimmediate_operand" "rm")))]  "TARGET_80387"  "*{  if (NON_STACK_REG_P (operands[1]))    {      output_op_from_reg (operands[1], AS1 (fild%z0,%1));      RET;    }  else if (GET_CODE (operands[1]) == MEM)    return AS1 (fild%z1,%1);  else    abort ();}");;- add instructions(define_insn "adddi3"  [(set (match_operand:DI 0 "general_operand" "=&r,ro,o,&r,ro,o,&r,o,o,o")	(plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,o,riF,o,or,riF,riF,o")		 (match_operand:DI 2 "general_operand" "o,riF,o,0,0,0,oriF,riF,o,o")))   (clobber (match_scratch:SI 3 "=X,X,&r,X,&r,&r,X,&r,&r,&r"))]  ""  "*{  rtx low[3], high[3], xops[7], temp;  CC_STATUS_INIT;  if (rtx_equal_p (operands[0], operands[2]))    {      temp = operands[1];      operands[1] = operands[2];      operands[2] = temp;    }

⌨️ 快捷键说明

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