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

📄 vax.md

📁 这是完整的gcc源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
      if (operands[2] == const1_rtx)	return \"incw %0\";      if (GET_CODE (operands[1]) == CONST_INT	  && INTVAL (operands[1]) == -1)	return \"decw %0\";      if (GET_CODE (operands[2]) == CONST_INT	  && (unsigned) (- INTVAL (operands[2])) < 64)	return \"subw2 $%n2,%0\";      return \"addw2 %2,%0\";    }  if (rtx_equal_p (operands[0], operands[2]))    return \"addw2 %1,%0\";  if (GET_CODE (operands[2]) == CONST_INT      && (unsigned) (- INTVAL (operands[2])) < 64)    return \"subw3 $%n2,%1,%0\";  return \"addw3 %1,%2,%0\";}")(define_insn "addqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(plus:QI (match_operand:QI 1 "general_operand" "g")		 (match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    {      if (operands[2] == const1_rtx)	return \"incb %0\";      if (GET_CODE (operands[1]) == CONST_INT	  && INTVAL (operands[1]) == -1)	return \"decb %0\";      if (GET_CODE (operands[2]) == CONST_INT	  && (unsigned) (- INTVAL (operands[2])) < 64)	return \"subb2 $%n2,%0\";      return \"addb2 %2,%0\";    }  if (rtx_equal_p (operands[0], operands[2]))    return \"addb2 %1,%0\";  if (GET_CODE (operands[2]) == CONST_INT      && (unsigned) (- INTVAL (operands[2])) < 64)    return \"subb3 $%n2,%1,%0\";  return \"addb3 %1,%2,%0\";}");;- All kinds of subtract instructions.(define_insn "subdf3"  [(set (match_operand:DF 0 "general_operand" "=g")	(minus:DF (match_operand:DF 1 "general_operand" "gF")		  (match_operand:DF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"sub%#2 %2,%0\";  return \"sub%#3 %2,%1,%0\";}")(define_insn "subsf3"  [(set (match_operand:SF 0 "general_operand" "=g")	(minus:SF (match_operand:SF 1 "general_operand" "gF")		  (match_operand:SF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"subf2 %2,%0\";  return \"subf3 %2,%1,%0\";}")(define_insn "subsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(minus:SI (match_operand:SI 1 "general_operand" "g")		  (match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    {      if (operands[2] == const1_rtx)	return \"decl %0\";      return \"subl2 %2,%0\";    }  return \"subl3 %2,%1,%0\";}")(define_insn "subhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(minus:HI (match_operand:HI 1 "general_operand" "g")		  (match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    {      if (operands[2] == const1_rtx)	return \"decw %0\";      return \"subw2 %2,%0\";    }  return \"subw3 %2,%1,%0\";}")(define_insn "subqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(minus:QI (match_operand:QI 1 "general_operand" "g")		  (match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    {      if (operands[2] == const1_rtx)	return \"decb %0\";      return \"subb2 %2,%0\";    }  return \"subb3 %2,%1,%0\";}");;- Multiply instructions.(define_insn "muldf3"  [(set (match_operand:DF 0 "general_operand" "=g")	(mult:DF (match_operand:DF 1 "general_operand" "gF")		 (match_operand:DF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"mul%#2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"mul%#2 %1,%0\";  return \"mul%#3 %1,%2,%0\";}")(define_insn "mulsf3"  [(set (match_operand:SF 0 "general_operand" "=g")	(mult:SF (match_operand:SF 1 "general_operand" "gF")		 (match_operand:SF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"mulf2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"mulf2 %1,%0\";  return \"mulf3 %1,%2,%0\";}")(define_insn "mulsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(mult:SI (match_operand:SI 1 "general_operand" "g")		 (match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"mull2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"mull2 %1,%0\";  return \"mull3 %1,%2,%0\";}")(define_insn "mulhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(mult:HI (match_operand:HI 1 "general_operand" "g")		 (match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"mulw2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"mulw2 %1,%0\";  return \"mulw3 %1,%2,%0\";}")(define_insn "mulqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(mult:QI (match_operand:QI 1 "general_operand" "g")		 (match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"mulb2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"mulb2 %1,%0\";  return \"mulb3 %1,%2,%0\";}");;- Divide instructions.(define_insn "divdf3"  [(set (match_operand:DF 0 "general_operand" "=g")	(div:DF (match_operand:DF 1 "general_operand" "gF")		(match_operand:DF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"div%#2 %2,%0\";  return \"div%#3 %2,%1,%0\";}")(define_insn "divsf3"  [(set (match_operand:SF 0 "general_operand" "=g")	(div:SF (match_operand:SF 1 "general_operand" "gF")		(match_operand:SF 2 "general_operand" "gF")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"divf2 %2,%0\";  return \"divf3 %2,%1,%0\";}")(define_insn "divsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(div:SI (match_operand:SI 1 "general_operand" "g")		(match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"divl2 %2,%0\";  return \"divl3 %2,%1,%0\";}")(define_insn "divhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(div:HI (match_operand:HI 1 "general_operand" "g")		(match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"divw2 %2,%0\";  return \"divw3 %2,%1,%0\";}")(define_insn "divqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(div:QI (match_operand:QI 1 "general_operand" "g")		(match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"divb2 %2,%0\";  return \"divb3 %2,%1,%0\";}");This is left out because it is very slow;;we are better off programming around the "lack" of this insn.;(define_insn "divmoddisi4";  [(set (match_operand:SI 0 "general_operand" "=g");	(div:SI (match_operand:DI 1 "general_operand" "g");		(match_operand:SI 2 "general_operand" "g")));   (set (match_operand:SI 3 "general_operand" "=g");	(mod:SI (match_operand:DI 1 "general_operand" "g");		(match_operand:SI 2 "general_operand" "g")))];  "";  "ediv %2,%1,%0,%3");; Bit-and on the vax is done with a clear-bits insn.(define_expand "andsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(and:SI (match_operand:SI 1 "general_operand" "g")		(not:SI (match_operand:SI 2 "general_operand" "g"))))]  ""  "{  extern rtx expand_unop ();  if (GET_CODE (operands[2]) == CONST_INT)    operands[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));  else    operands[2] = expand_unop (SImode, one_cmpl_optab, operands[2], 0, 1);}")(define_expand "andhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(and:HI (match_operand:HI 1 "general_operand" "g")		(not:HI (match_operand:HI 2 "general_operand" "g"))))]  ""  "{  extern rtx expand_unop ();  rtx op = operands[2];  if (GET_CODE (op) == CONST_INT)    operands[2] = gen_rtx (CONST_INT, VOIDmode,			   ((1 << 16) - 1) & ~INTVAL (op));  else    operands[2] = expand_unop (HImode, one_cmpl_optab, op, 0, 1);}")(define_expand "andqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(and:QI (match_operand:QI 1 "general_operand" "g")		(not:QI (match_operand:QI 2 "general_operand" "g"))))]  ""  "{  extern rtx expand_unop ();  rtx op = operands[2];  if (GET_CODE (op) == CONST_INT)    operands[2] = gen_rtx (CONST_INT, VOIDmode,			   ((1 << 8) - 1) & ~INTVAL (op));  else    operands[2] = expand_unop (QImode, one_cmpl_optab, op, 0, 1);}")(define_insn "andcbsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(and:SI (match_operand:SI 1 "general_operand" "g")		(not:SI (match_operand:SI 2 "general_operand" "g"))))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bicl2 %2,%0\";  return \"bicl3 %2,%1,%0\";}")(define_insn "andcbhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(and:HI (match_operand:HI 1 "general_operand" "g")		(not:HI (match_operand:HI 2 "general_operand" "g"))))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bicw2 %2,%0\";  return \"bicw3 %2,%1,%0\";}")(define_insn "andcbqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(and:QI (match_operand:QI 1 "general_operand" "g")		(not:QI (match_operand:QI 2 "general_operand" "g"))))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bicb2 %2,%0\";  return \"bicb3 %2,%1,%0\";}");; The following are needed because constant propagation can;; create them starting from the bic insn patterns above.(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=g")	(and:SI (match_operand:SI 1 "general_operand" "g")		(match_operand:SI 2 "general_operand" "g")))]  "GET_CODE (operands[2]) == CONST_INT"  "*{ operands[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));  if (rtx_equal_p (operands[1], operands[0]))    return \"bicl2 %2,%0\";  return \"bicl3 %2,%1,%0\";}")(define_insn ""  [(set (match_operand:HI 0 "general_operand" "=g")	(and:HI (match_operand:HI 1 "general_operand" "g")		(match_operand:HI 2 "general_operand" "g")))]  "GET_CODE (operands[2]) == CONST_INT"  "*{ operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xffff & ~INTVAL (operands[2]));  if (rtx_equal_p (operands[1], operands[0]))    return \"bicw2 %2,%0\";  return \"bicw3 %2,%1,%0\";}")(define_insn ""  [(set (match_operand:QI 0 "general_operand" "=g")	(and:QI (match_operand:QI 1 "general_operand" "g")		(match_operand:QI 2 "general_operand" "g")))]  "GET_CODE (operands[2]) == CONST_INT"  "*{ operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xff & ~INTVAL (operands[2]));  if (rtx_equal_p (operands[1], operands[0]))    return \"bicb2 %2,%0\";  return \"bicb3 %2,%1,%0\";}");;- Bit set instructions.(define_insn "iorsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(ior:SI (match_operand:SI 1 "general_operand" "g")		(match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bisl2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"bisl2 %1,%0\";  return \"bisl3 %2,%1,%0\";}")(define_insn "iorhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(ior:HI (match_operand:HI 1 "general_operand" "g")		(match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bisw2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"bisw2 %1,%0\";  return \"bisw3 %2,%1,%0\";}")(define_insn "iorqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(ior:QI (match_operand:QI 1 "general_operand" "g")		(match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"bisb2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"bisb2 %1,%0\";  return \"bisb3 %2,%1,%0\";}");;- xor instructions.(define_insn "xorsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(xor:SI (match_operand:SI 1 "general_operand" "g")		(match_operand:SI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"xorl2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"xorl2 %1,%0\";  return \"xorl3 %2,%1,%0\";}")(define_insn "xorhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(xor:HI (match_operand:HI 1 "general_operand" "g")		(match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"xorw2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"xorw2 %1,%0\";  return \"xorw3 %2,%1,%0\";}")(define_insn "xorqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(xor:QI (match_operand:QI 1 "general_operand" "g")		(match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (rtx_equal_p (operands[0], operands[1]))    return \"xorb2 %2,%0\";  if (rtx_equal_p (operands[0], operands[2]))    return \"xorb2 %1,%0\";  return \"xorb3 %2,%1,%0\";}")(define_insn "negdf2"  [(set (match_operand:DF 0 "general_operand" "=g")	(neg:DF (match_operand:DF 1 "general_operand" "gF")))]  ""  "mneg%# %1,%0")(define_insn "negsf2"  [(set (match_operand:SF 0 "general_operand" "=g")	(neg:SF (match_operand:SF 1 "general_operand" "gF")))]  ""  "mnegf %1,%0")(define_insn "negsi2"  [(set (match_operand:SI 0 "general_operand" "=g")	(neg:SI (match_operand:SI 1 "general_operand" "g")))]  ""  "mnegl %1,%0")(define_insn "neghi2"  [(set (match_operand:HI 0 "general_operand" "=g")	(neg:HI (match_operand:HI 1 "general_operand" "g")))]  ""  "mnegw %1,%0")(define_insn "negqi2"  [(set (match_operand:QI 0 "general_operand" "=g")	(neg:QI (match_operand:QI 1 "general_operand" "g")))]  ""  "mnegb %1,%0")(define_insn "one_cmplsi2"  [(set (match_operand:SI 0 "general_operand" "=g")	(not:SI (match_operand:SI 1 "general_operand" "g")))]  ""  "mcoml %1,%0")(define_insn "one_cmplhi2"  [(set (match_operand:HI 0 "general_operand" "=g")	(not:HI (match_operand:HI 1 "general_operand" "g")))]  ""  "mcomw %1,%0")(define_insn "one_cmplqi2"  [(set (match_operand:QI 0 "general_operand" "=g")	(not:QI (match_operand:QI 1 "general_operand" "g")))]  ""  "mcomb %1,%0");; Arithmetic right shift on the vax works by negating the shift count.(define_expand "ashrsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(ashift:SI (match_operand:SI 1 "general_operand" "g")		   (match_operand:QI 2 "general_operand" "g")))]  ""  "{  operands[2] = negate_rtx (QImode, operands[2]);}")(define_insn "ashlsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(ashift:SI (match_operand:SI 1 "general_operand" "g")		   (match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (operands[2] == const1_rtx && rtx_equal_p (operands[0], operands[1]))

⌨️ 快捷键说明

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