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

📄 vax.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 4 页
字号:
  CC_STATUS_INIT;  if (INTVAL (operands[1]) == 8)    return \"movb %3,%0\";  return \"movw %3,%0\";}")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=&g")	(zero_extract:SI (match_operand:SI 1 "register_operand" "ro")			 (match_operand:QI 2 "const_int_operand" "n")			 (match_operand:SI 3 "const_int_operand" "n")))]  "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)   && INTVAL (operands[3]) % INTVAL (operands[2]) == 0   && (GET_CODE (operands[1]) == REG       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"  "*{  if (REG_P (operands[1]))    {      if (INTVAL (operands[3]) != 0)	return \"extzv %3,%2,%1,%0\";    }  else    operands[1]      = adjust_address (operands[1],			INTVAL (operands[2]) == 8 ? QImode : HImode,			INTVAL (operands[3]) / 8);  if (INTVAL (operands[2]) == 8)    return \"movzbl %1,%0\";  return \"movzwl %1,%0\";}")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")	(sign_extract:SI (match_operand:SI 1 "register_operand" "ro")			 (match_operand:QI 2 "const_int_operand" "n")			 (match_operand:SI 3 "const_int_operand" "n")))]  "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)   && INTVAL (operands[3]) % INTVAL (operands[2]) == 0   && (GET_CODE (operands[1]) == REG       || ! mode_dependent_address_p (XEXP (operands[1], 0)))"  "*{  if (REG_P (operands[1]))    {      if (INTVAL (operands[3]) != 0)	return \"extv %3,%2,%1,%0\";    }  else    operands[1]      = adjust_address (operands[1],			INTVAL (operands[2]) == 8 ? QImode : HImode,			INTVAL (operands[3]) / 8);  if (INTVAL (operands[2]) == 8)    return \"cvtbl %1,%0\";  return \"cvtwl %1,%0\";}");; Register-only SImode cases of bit-field insns.(define_insn ""  [(set (cc0)	(compare	 (sign_extract:SI (match_operand:SI 0 "register_operand" "r")			  (match_operand:QI 1 "general_operand" "g")			  (match_operand:SI 2 "general_operand" "g"))	 (match_operand:SI 3 "general_operand" "g")))]  ""  "cmpv %2,%1,%0,%3")(define_insn ""  [(set (cc0)	(compare	 (zero_extract:SI (match_operand:SI 0 "register_operand" "r")			  (match_operand:QI 1 "general_operand" "g")			  (match_operand:SI 2 "general_operand" "g"))	 (match_operand:SI 3 "general_operand" "g")))]  ""  "cmpzv %2,%1,%0,%3");; When the field position and size are constant and the destination;; is a register, extv and extzv are much slower than a rotate followed;; by a bicl or sign extension.  Because we might end up choosing ext[z]v;; anyway, we can't allow immediate values for the primary source operand.(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")	(sign_extract:SI (match_operand:SI 1 "register_operand" "ro")			 (match_operand:QI 2 "general_operand" "g")			 (match_operand:SI 3 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[3]) != CONST_INT || GET_CODE (operands[2]) != CONST_INT      || GET_CODE (operands[0]) != REG      || (INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16))    return \"extv %3,%2,%1,%0\";  if (INTVAL (operands[2]) == 8)    return \"rotl %R3,%1,%0\;cvtbl %0,%0\";  return \"rotl %R3,%1,%0\;cvtwl %0,%0\";}")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")	(zero_extract:SI (match_operand:SI 1 "register_operand" "ro")			 (match_operand:QI 2 "general_operand" "g")			 (match_operand:SI 3 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[3]) != CONST_INT || GET_CODE (operands[2]) != CONST_INT      || GET_CODE (operands[0]) != REG)    return \"extzv %3,%2,%1,%0\";  if (INTVAL (operands[2]) == 8)    return \"rotl %R3,%1,%0\;movzbl %0,%0\";  if (INTVAL (operands[2]) == 16)    return \"rotl %R3,%1,%0\;movzwl %0,%0\";  if (INTVAL (operands[3]) & 31)    return \"rotl %R3,%1,%0\;bicl2 %M2,%0\";  if (rtx_equal_p (operands[0], operands[1]))    return \"bicl2 %M2,%0\";  return \"bicl3 %M2,%1,%0\";}");; Non-register cases.;; nonimmediate_operand is used to make sure that mode-ambiguous cases;; don't match these (and therefore match the cases above instead).(define_insn ""  [(set (cc0)	(compare	 (sign_extract:SI (match_operand:QI 0 "memory_operand" "m")			  (match_operand:QI 1 "general_operand" "g")			  (match_operand:SI 2 "general_operand" "g"))	 (match_operand:SI 3 "general_operand" "g")))]  ""  "cmpv %2,%1,%0,%3")(define_insn ""  [(set (cc0)	(compare	 (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "rm")			  (match_operand:QI 1 "general_operand" "g")			  (match_operand:SI 2 "general_operand" "g"))	 (match_operand:SI 3 "general_operand" "g")))]  ""  "cmpzv %2,%1,%0,%3")(define_insn "extv"  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")	(sign_extract:SI (match_operand:QI 1 "memory_operand" "m")			 (match_operand:QI 2 "general_operand" "g")			 (match_operand:SI 3 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[0]) != REG || GET_CODE (operands[2]) != CONST_INT      || GET_CODE (operands[3]) != CONST_INT      || (INTVAL (operands[2]) != 8 && INTVAL (operands[2]) != 16)      || INTVAL (operands[2]) + INTVAL (operands[3]) > 32      || side_effects_p (operands[1])      || (GET_CODE (operands[1]) == MEM	  && mode_dependent_address_p (XEXP (operands[1], 0))))    return \"extv %3,%2,%1,%0\";  if (INTVAL (operands[2]) == 8)    return \"rotl %R3,%1,%0\;cvtbl %0,%0\";  return \"rotl %R3,%1,%0\;cvtwl %0,%0\";}")(define_expand "extzv"  [(set (match_operand:SI 0 "general_operand" "")	(zero_extract:SI (match_operand:SI 1 "general_operand" "")			 (match_operand:QI 2 "general_operand" "")			 (match_operand:SI 3 "general_operand" "")))]  ""  "")(define_insn ""  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")	(zero_extract:SI (match_operand:QI 1 "memory_operand" "m")			 (match_operand:QI 2 "general_operand" "g")			 (match_operand:SI 3 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[0]) != REG || GET_CODE (operands[2]) != CONST_INT      || GET_CODE (operands[3]) != CONST_INT      || INTVAL (operands[2]) + INTVAL (operands[3]) > 32      || side_effects_p (operands[1])      || (GET_CODE (operands[1]) == MEM	  && mode_dependent_address_p (XEXP (operands[1], 0))))    return \"extzv %3,%2,%1,%0\";  if (INTVAL (operands[2]) == 8)    return \"rotl %R3,%1,%0\;movzbl %0,%0\";  if (INTVAL (operands[2]) == 16)    return \"rotl %R3,%1,%0\;movzwl %0,%0\";  return \"rotl %R3,%1,%0\;bicl2 %M2,%0\";}")(define_expand "insv"  [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "")			 (match_operand:QI 1 "general_operand" "")			 (match_operand:SI 2 "general_operand" ""))	(match_operand:SI 3 "general_operand" ""))]  ""  "")(define_insn ""  [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+g")			 (match_operand:QI 1 "general_operand" "g")			 (match_operand:SI 2 "general_operand" "g"))	(match_operand:SI 3 "general_operand" "g"))]  ""  "insv %3,%2,%1,%0")(define_insn ""  [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")			 (match_operand:QI 1 "general_operand" "g")			 (match_operand:SI 2 "general_operand" "g"))	(match_operand:SI 3 "general_operand" "g"))]  ""  "insv %3,%2,%1,%0");; Unconditional jump(define_insn "jump"  [(set (pc)	(label_ref (match_operand 0 "" "")))]  ""  "jbr %l0");; Conditional jumps(define_code_macro any_cond [eq ne gt lt gtu ltu ge le geu leu])(define_insn "b<code>"  [(set (pc)	(if_then_else (any_cond (cc0)				(const_int 0))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "* return vax_output_conditional_branch (<CODE>);");; Recognize reversed jumps.(define_insn ""  [(set (pc)	(if_then_else (match_operator 0 "comparison_operator"				      [(cc0)				       (const_int 0)])		      (pc)		      (label_ref (match_operand 1 "" ""))))]  ""  "j%C0 %l1") ; %C0 negates condition;; Recognize jbs, jlbs, jbc and jlbc instructions.  Note that the operand;; of jlbs and jlbc insns are SImode in the hardware.  However, if it is;; memory, we use QImode in the insn.  So we can't use those instructions;; for mode-dependent addresses.(define_insn ""  [(set (pc)	(if_then_else	 (ne (zero_extract:SI (match_operand:QI 0 "memory_operand" "Q,g")			      (const_int 1)			      (match_operand:SI 1 "general_operand" "I,g"))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "@   jlbs %0,%l2   jbs %1,%0,%l2")(define_insn ""  [(set (pc)	(if_then_else	 (eq (zero_extract:SI (match_operand:QI 0 "memory_operand" "Q,g")			      (const_int 1)			      (match_operand:SI 1 "general_operand" "I,g"))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "@   jlbc %0,%l2   jbc %1,%0,%l2")(define_insn ""  [(set (pc)	(if_then_else	 (ne (zero_extract:SI (match_operand:SI 0 "register_operand" "r,r")			      (const_int 1)			      (match_operand:SI 1 "general_operand" "I,g"))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "@   jlbs %0,%l2   jbs %1,%0,%l2")(define_insn ""  [(set (pc)	(if_then_else	 (eq (zero_extract:SI (match_operand:SI 0 "register_operand" "r,r")			      (const_int 1)			      (match_operand:SI 1 "general_operand" "I,g"))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "@   jlbc %0,%l2   jbc %1,%0,%l2");; Subtract-and-jump and Add-and-jump insns.;; These are not used when output is for the Unix assembler;; because it does not know how to modify them to reach far.;; Normal sob insns.(define_insn ""  [(set (pc)	(if_then_else	 (gt (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")		      (const_int -1))	     (const_int 0))	 (label_ref (match_operand 1 "" ""))	 (pc)))   (set (match_dup 0)	(plus:SI (match_dup 0)		 (const_int -1)))]  "!TARGET_UNIX_ASM"  "jsobgtr %0,%l1")(define_insn ""  [(set (pc)	(if_then_else	 (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")		      (const_int -1))	     (const_int 0))	 (label_ref (match_operand 1 "" ""))	 (pc)))   (set (match_dup 0)	(plus:SI (match_dup 0)		 (const_int -1)))]  "!TARGET_UNIX_ASM"  "jsobgeq %0,%l1");; Normal aob insns.  Define a version for when operands[1] is a constant.(define_insn ""  [(set (pc)	(if_then_else	 (lt (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")		      (const_int 1))	     (match_operand:SI 1 "general_operand" "g"))	 (label_ref (match_operand 2 "" ""))	 (pc)))   (set (match_dup 0)	(plus:SI (match_dup 0)		 (const_int 1)))]  "!TARGET_UNIX_ASM"  "jaoblss %1,%0,%l2")(define_insn ""  [(set (pc)	(if_then_else	 (lt (match_operand:SI 0 "nonimmediate_operand" "+g")	     (match_operand:SI 1 "general_operand" "g"))	 (label_ref (match_operand 2 "" ""))	 (pc)))   (set (match_dup 0)	(plus:SI (match_dup 0)		 (const_int 1)))]  "!TARGET_UNIX_ASM && GET_CODE (operands[1]) == CONST_INT"  "jaoblss %P1,%0,%l2")(define_insn ""  [(set (pc)	(if_then_else	 (le (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")		      (const_int 1))	     (match_operand:SI 1 "general_operand" "g"))	 (label_ref (match_operand 2 "" ""))	 (pc)))   (set (match_dup 0)	(plus:SI (match_dup 0)		 (const_int 1)))]

⌨️ 快捷键说明

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