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

📄 pdp11.md

📁 gcc编译工具没有什么特别
💻 MD
📖 第 1 页 / 共 4 页
字号:
     {       rtx latehalf[2];       latehalf[0] = NULL;        latehalf[1] = gen_rtx(REG, HImode, REGNO (operands[0])+1);       output_asm_insn(\"mov %1, -(sp)\", latehalf);       output_asm_insn(\"mov %1, -(sp)\", operands);              output_asm_insn(\"setl\", operands);       output_asm_insn(\"{ldcld|movif} (sp)+, %0\", operands);       output_asm_insn(\"seti\", operands);       return \"\";     }     else if (which_alternative == 1)       return \"setl\;{ldcld|movif} %1, %0\;seti\";     else        return \"setl\;{ldcld|movif} %1, %0\;seti\";  "  [(set_attr "length" "5,3,4")])(define_insn "floathidf2"  [(set (match_operand:DF 0 "register_operand" "=a,a")	(float:DF (match_operand:HI 1 "general_operand" "rR,Qi")))]  "TARGET_FPU"  "{ldcid|movif} %1, %0"  [(set_attr "length" "1,2")])	;; cut float to int(define_insn "fix_truncdfsi2"  [(set (match_operand:SI 0 "general_operand" "=r,R,Q")	(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "a,a,a"))))]  "TARGET_FPU"  "* if (which_alternative ==0)     {       output_asm_insn(\"setl\", operands);       output_asm_insn(\"{stcdl|movfi} %1, -(sp)\", operands);       output_asm_insn(\"seti\", operands);       output_asm_insn(\"mov (sp)+, %0\", operands);       operands[0] = gen_rtx(REG, HImode, REGNO (operands[0])+1);       output_asm_insn(\"mov (sp)+, %0\", operands);       return \"\";     }     else if (which_alternative == 1)       return \"setl\;{stcdl|movfi} %1, %0\;seti\";     else        return \"setl\;{stcdl|movfi} %1, %0\;seti\";  "  [(set_attr "length" "5,3,4")])(define_insn "fix_truncdfhi2"  [(set (match_operand:HI 0 "general_operand" "=rR,Q")	(fix:HI (fix:DF (match_operand:DF 1 "register_operand" "a,a"))))]  "TARGET_FPU"  "{stcdi|movfi} %1, %0"  [(set_attr "length" "1,2")]);;- arithmetic instructions;;- add instructions(define_insn "adddf3"  [(set (match_operand:DF 0 "register_operand" "=a,a,a")	(plus:DF (match_operand:DF 1 "register_operand" "%0,0,0")		 (match_operand:DF 2 "general_operand" "fR,Q,F")))]  "TARGET_FPU"  "{addd|addf} %2, %0"  [(set_attr "length" "1,2,5")])(define_insn "addsi3"  [(set (match_operand:SI 0 "general_operand" "=r,r,o,o,r,r,r,o,o,o")	(plus:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")		 (match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K")))]  ""  "*{ /* Here we trust that operands don't overlap      or is lateoperands the low word?? - looks like it! */  unsigned int i;  rtx lateoperands[3];    lateoperands[0] = operands[0];  if (REG_P (operands[0]))    operands[0] = gen_rtx(REG, HImode, REGNO(operands[0]) + 1);  else    operands[0] = adj_offsettable_operand (operands[0], 2);    if (! CONSTANT_P(operands[2]))  {    lateoperands[2] = operands[2];    if (REG_P (operands[2]))      operands[2] = gen_rtx(REG, HImode, REGNO(operands[2]) + 1);    else      operands[2] = adj_offsettable_operand(operands[2], 2);    output_asm_insn (\"add %2, %0\", operands);    output_asm_insn (\"adc %0\", lateoperands);    output_asm_insn (\"add %2, %0\", lateoperands);    return \"\";  }  lateoperands[2] = GEN_INT ((INTVAL(operands[2]) >> 16) & 0xffff);  operands[2] = GEN_INT (INTVAL(operands[2]) & 0xffff);    if (INTVAL(operands[2]))  {     output_asm_insn (\"add %2, %0\", operands);    output_asm_insn (\"adc %0\", lateoperands);  }  if (INTVAL(lateoperands[2]))    output_asm_insn (\"add %2, %0\", lateoperands);  return \"\";}"  [(set_attr "length" "3,5,6,8,3,1,5,5,3,8")])(define_insn "addhi3"  [(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")	(plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0")		 (match_operand:HI 2 "general_operand" "rRLM,Qi,rRLM,Qi")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT)    {      if (INTVAL(operands[2]) == 1)	return \"inc %0\";      else if (INTVAL(operands[2]) == -1)        return \"dec %0\";    }  return \"add %2, %0\";}"  [(set_attr "length" "1,2,2,3")])(define_insn "addqi3"  [(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")	(plus:QI (match_operand:QI 1 "general_operand" "%0,0,0,0")		 (match_operand:QI 2 "general_operand" "rRLM,Qi,rRLM,Qi")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT)    {      if (INTVAL(operands[2]) == 1)	return \"incb %0\";      else if (INTVAL(operands[2]) == -1)	return \"decb %0\";    }  return \"addb %2, %0\";}"  [(set_attr "length" "1,2,2,3")]);;- subtract instructions;; we don't have to care for constant second ;; args, since they are canonical plus:xx now!;; also for minus:DF ??(define_insn "subdf3"  [(set (match_operand:DF 0 "register_operand" "=a,a")	(minus:DF (match_operand:DF 1 "register_operand" "0,0")		  (match_operand:DF 2 "general_operand" "fR,Q")))]  "TARGET_FPU"  "{subd|subf} %2, %0"  [(set_attr "length" "1,2")])(define_insn "subsi3"  [(set (match_operand:SI 0 "general_operand" "=r,r,o,o")        (minus:SI (match_operand:SI 1 "general_operand" "0,0,0,0")                  (match_operand:SI 2 "general_operand" "r,o,r,o")))]  ""  "*{ /* Here we trust that operands don't overlap      or is lateoperands the low word?? - looks like it! */  unsigned int i;  rtx lateoperands[3];    lateoperands[0] = operands[0];  if (REG_P (operands[0]))    operands[0] = gen_rtx(REG, HImode, REGNO(operands[0]) + 1);  else    operands[0] = adj_offsettable_operand (operands[0], 2);    lateoperands[2] = operands[2];  if (REG_P (operands[2]))    operands[2] = gen_rtx(REG, HImode, REGNO(operands[2]) + 1);  else    operands[2] = adj_offsettable_operand(operands[2], 2);  output_asm_insn (\"sub %2, %0\", operands);  output_asm_insn (\"sbc %0\", lateoperands);  output_asm_insn (\"sub %2, %0\", lateoperands);  return \"\";}";; offsettable memory addresses always are expensive!!!  [(set_attr "length" "3,5,6,8")])(define_insn "subhi3"  [(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")	(minus:HI (match_operand:HI 1 "general_operand" "0,0,0,0")		  (match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT)    abort();  return \"sub %2, %0\";}"  [(set_attr "length" "1,2,2,3")])(define_insn "subqi3"  [(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")	(minus:QI (match_operand:QI 1 "general_operand" "0,0,0,0")		  (match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi")))]  ""  "*{  if (GET_CODE (operands[2]) == CONST_INT)    abort();  return \"subb %2, %0\";}"  [(set_attr "length" "1,2,2,3")]);;;;- and instructions;; Bit-and on the pdp (like 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" "0")		(not:SI (match_operand:SI 2 "general_operand" "g"))))]  ""  "{  extern rtx expand_unop ();  if (GET_CODE (operands[2]) == CONST_INT)    operands[2] = GEN_INT (~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" "0")		(not:HI (match_operand:HI 2 "general_operand" "g"))))]  ""  "{  extern rtx expand_unop ();  if (GET_CODE (operands[2]) == CONST_INT)    operands[2] = GEN_INT (~INTVAL (operands[2]));  else    operands[2] = expand_unop (HImode, one_cmpl_optab, operands[2], 0, 1);}")(define_expand "andqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(and:QI (match_operand:QI 1 "general_operand" "0")		(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_INT (((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" "=r,r,o,o,r,r,r,o,o,o")        (and:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")                (not:SI (match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K"))))]  ""  "*{ /* Here we trust that operands don't overlap      or is lateoperands the low word?? - looks like it! */  unsigned int i;  rtx lateoperands[3];    lateoperands[0] = operands[0];  if (REG_P (operands[0]))    operands[0] = gen_rtx(REG, HImode, REGNO(operands[0]) + 1);  else    operands[0] = adj_offsettable_operand (operands[0], 2);    if (! CONSTANT_P(operands[2]))  {    lateoperands[2] = operands[2];    if (REG_P (operands[2]))      operands[2] = gen_rtx(REG, HImode, REGNO(operands[2]) + 1);    else      operands[2] = adj_offsettable_operand(operands[2], 2);    output_asm_insn (\"bic %2, %0\", operands);    output_asm_insn (\"bic %2, %0\", lateoperands);    return \"\";  }  lateoperands[2] = GEN_INT ((INTVAL(operands[2]) >> 16) & 0xffff);  operands[2] = GEN_INT (INTVAL(operands[2]) & 0xffff);    /* these have different lengths, so we should have      different constraints! */  if (INTVAL(operands[2]))    output_asm_insn (\"bic %2, %0\", operands);  if (INTVAL(lateoperands[2]))    output_asm_insn (\"bic %2, %0\", lateoperands);  return \"\";}"  [(set_attr "length" "2,4,4,6,2,2,4,3,3,6")])(define_insn "andcbhi3"  [(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")	(and:HI (match_operand:HI 1 "general_operand" "0,0,0,0")		(not:HI (match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi"))))]  ""  "bic %2, %0"  [(set_attr "length" "1,2,2,3")])(define_insn "andcbqi3"  [(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")	(and:QI (match_operand:QI 1 "general_operand" "0,0,0,0")		(not:QI (match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi"))))]  ""  "bicb %2, %0"  [(set_attr "length" "1,2,2,3")]);;- Bit set (inclusive or) instructions(define_insn "iorsi3"  [(set (match_operand:SI 0 "general_operand" "=r,r,o,o,r,r,r,o,o,o")        (ior:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")                  (match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K")))]  ""  "*{ /* Here we trust that operands don't overlap      or is lateoperands the low word?? - looks like it! */  unsigned int i;  rtx lateoperands[3];    lateoperands[0] = operands[0];  if (REG_P (operands[0]))    operands[0] = gen_rtx(REG, HImode, REGNO(operands[0]) + 1);  else    operands[0] = adj_offsettable_operand (operands[0], 2);    if (! CONSTANT_P(operands[2]))  {    lateoperands[2] = operands[2];    if (REG_P (operands[2]))      operands[2] = gen_rtx(REG, HImode, REGNO(operands[2]) + 1);    else      operands[2] = adj_offsettable_operand(operands[2], 2);    output_asm_insn (\"bis %2, %0\", operands);    output_asm_insn (\"bis %2, %0\", lateoperands);    return \"\";  }  lateoperands[2] = GEN_INT ((INTVAL(operands[2]) >> 16) & 0xffff);  operands[2] = GEN_INT (INTVAL(operands[2]) & 0xffff);    /* these have different lengths, so we should have      different constraints! */  if (INTVAL(operands[2]))    output_asm_insn (\"bis %2, %0\", operands);  if (INTVAL(lateoperands[2]))    output_asm_insn (\"bis %2, %0\", lateoperands);  return \"\";}"  [(set_attr "length" "2,4,4,6,2,2,4,3,3,6")])(define_insn "iorhi3"  [(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")	(ior:HI (match_operand:HI 1 "general_operand" "%0,0,0,0")		(match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi")))]  ""  "bis %2, %0"  [(set_attr "length" "1,2,2,3")])(define_insn "iorqi3"  [(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")	(ior:QI (match_operand:QI 1 "general_operand" "%0,0,0,0")		(match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi")))]  ""  "bisb %2, %0");;- xor instructions(define_insn "xorsi3"  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")        (xor:SI (match_operand:SI 1 "register_operand" "%0,0,0,0")                  (match_operand:SI 2 "arith_operand" "r,I,J,K")))]  "TARGET_40_PLUS"  "*{ /* Here we trust that operands don't overlap */  unsigned int i;  rtx lateoperands[3];  lateoperands[0] = operands[0];  operands[0] = gen_rtx(REG, HImode, REGNO(operands[0]) + 1);  if (REG_P(operands[2]))  {    lateoperands[2] = operands[2];    operands[2] = gen_rtx(REG, HImode, REGNO(operands[2]) + 1);        output_asm_insn (\"xor %2, %0\", operands);    output_asm_insn (\"xor %2, %0\", lateoperands);    return \"\";  }  lateoperands[2] = GEN_INT ((INTVAL(operands[2]) >> 16) & 0xffff);  operands[2] = GEN_INT (INTVAL(operands[2]) & 0xffff);    if (INTVAL(operands[2]))    output_asm_insn (\"xor %2, %0\", operands);  if (INTVAL(lateoperands[2]))    output_asm_insn (\"xor %2, %0\", lateoperands);  return \"\";}"  [(set_attr "length" "2,1,1,2")])(define_insn "xorhi3"  [(set (match_operand:HI 0 "general_operand" "=rR,Q")	(xor:HI (match_operand:HI 1 "general_operand" "%0,0")		(match_operand:HI 2 "register_operand" "r,r")))]  "TARGET_40_PLUS"  "xor %2, %0"  [(set_attr "length" "1,2")]);;- one complement instructions

⌨️ 快捷键说明

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