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

📄 pa.md

📁 gcc库的原代码,对编程有很大帮助.
💻 MD
📖 第 1 页 / 共 5 页
字号:
    }  /* set up operands from compare.  */  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;  /* fall through and generate default code */}")(define_expand "bne"  [(set (pc)	(if_then_else (ne (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    {      emit_insn (gen_cmp_fp (NE, hppa_compare_op0, hppa_compare_op1));      emit_bcond_fp (NE, operands[0]);      DONE;    }  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bgt"  [(set (pc)	(if_then_else (gt (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    {      emit_insn (gen_cmp_fp (GT, hppa_compare_op0, hppa_compare_op1));      emit_bcond_fp (NE, operands[0]);      DONE;    }  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "blt"  [(set (pc)	(if_then_else (lt (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    {      emit_insn (gen_cmp_fp (LT, hppa_compare_op0, hppa_compare_op1));      emit_bcond_fp (NE, operands[0]);      DONE;    }  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bge"  [(set (pc)	(if_then_else (ge (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    {      emit_insn (gen_cmp_fp (GE, hppa_compare_op0, hppa_compare_op1));      emit_bcond_fp (NE, operands[0]);      DONE;    }  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "ble"  [(set (pc)	(if_then_else (le (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    {      emit_insn (gen_cmp_fp (LE, hppa_compare_op0, hppa_compare_op1));      emit_bcond_fp (NE, operands[0]);      DONE;    }  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bgtu"  [(set (pc)	(if_then_else (gtu (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    FAIL;  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bltu"  [(set (pc)	(if_then_else (ltu (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    FAIL;  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bgeu"  [(set (pc)	(if_then_else (geu (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    FAIL;  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}")(define_expand "bleu"  [(set (pc)	(if_then_else (leu (match_dup 1) (match_dup 2))		      (label_ref (match_operand 0 "" ""))		      (pc)))]  ""  "{  if (hppa_branch_type != CMP_SI)    FAIL;  operands[1] = hppa_compare_op0;  operands[2] = hppa_compare_op1;}");; Match the branch patterns.;; Note a long backward conditional branch with an annulled delay slot;; has a length of 12.(define_insn ""  [(set (pc)	(if_then_else	 (match_operator 3 "comparison_operator"			 [(match_operand:SI 1 "register_operand" "r")			  (match_operand:SI 2 "arith5_operand" "rL")])	 (label_ref (match_operand 0 "" ""))	 (pc)))]  ""  "*{  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 0, insn);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))]);; Match the negated branch.(define_insn ""  [(set (pc)	(if_then_else	 (match_operator 3 "comparison_operator"			 [(match_operand:SI 1 "register_operand" "r")			  (match_operand:SI 2 "arith5_operand" "rL")])	 (pc)	 (label_ref (match_operand 0 "" ""))))]  ""  "*{  return output_cbranch (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 1, insn);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 0) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))]);; Branch on Bit patterns.(define_insn ""  [(set (pc)	(if_then_else	 (ne (zero_extract:SI (match_operand:SI 0 "register_operand" "r")			      (const_int 1)			      (match_operand:SI 1 "uint5_operand" ""))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "*{  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 0, insn, 0);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))])(define_insn ""  [(set (pc)	(if_then_else	 (ne (zero_extract:SI (match_operand:SI 0 "register_operand" "r")			      (const_int 1)			      (match_operand:SI 1 "uint5_operand" ""))	     (const_int 0))	 (pc)	 (label_ref (match_operand 2 "" ""))))]  ""  "*{  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 1, insn, 0);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))])(define_insn ""  [(set (pc)	(if_then_else	 (eq (zero_extract:SI (match_operand:SI 0 "register_operand" "r")			      (const_int 1)			      (match_operand:SI 1 "uint5_operand" ""))	     (const_int 0))	 (label_ref (match_operand 2 "" ""))	 (pc)))]  ""  "*{  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 0, insn, 1);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))])(define_insn ""  [(set (pc)	(if_then_else	 (eq (zero_extract:SI (match_operand:SI 0 "register_operand" "r")			      (const_int 1)			      (match_operand:SI 1 "uint5_operand" ""))	     (const_int 0))	 (pc)	 (label_ref (match_operand 2 "" ""))))]  ""  "*{  return output_bb (operands, INSN_ANNULLED_BRANCH_P (insn),			 get_attr_length (insn), 1, insn, 1);}"[(set_attr "type" "cbranch") (set (attr "length")    (if_then_else (lt (abs (minus (match_dup 2) (plus (pc) (const_int 8))))		      (const_int 8188))           (const_int 4)	   (const_int 8)))]);; Floating point branches(define_insn ""  [(set (pc) (if_then_else (ne (reg:CCFP 0) (const_int 0))			   (label_ref (match_operand 0 "" ""))			   (pc)))]  "! TARGET_SOFT_FLOAT"  "*{  if (INSN_ANNULLED_BRANCH_P (insn))    return \"ftest\;bl,n %0,0\";  else    return \"ftest\;bl%* %0,0\";}"  [(set_attr "type" "fbranch")   (set_attr "length" "8")])(define_insn ""  [(set (pc) (if_then_else (ne (reg:CCFP 0) (const_int 0))			   (pc)			   (label_ref (match_operand 0 "" ""))))]  "! TARGET_SOFT_FLOAT"  "*{  if (INSN_ANNULLED_BRANCH_P (insn))    return \"ftest\;add,tr 0,0,0\;bl,n %0,0\";  else    return \"ftest\;add,tr 0,0,0\;bl%* %0,0\";}"  [(set_attr "type" "fbranch")   (set_attr "length" "12")]);; Move instructions(define_expand "movsi"  [(set (match_operand:SI 0 "general_operand" "")	(match_operand:SI 1 "general_operand" ""))]  ""  "{  if (emit_move_sequence (operands, SImode, 0))    DONE;}");; Reloading an SImode or DImode value requires a scratch register if;; going in to or out of float point registers.(define_expand "reload_insi"  [(set (match_operand:SI 0 "register_operand" "=Z")	(match_operand:SI 1 "non_hard_reg_operand" ""))   (clobber (match_operand:SI 2 "register_operand" "=&r"))]  ""  "{  if (emit_move_sequence (operands, SImode, operands[2]))    DONE;  /* We don't want the clobber emitted, so handle this ourselves.  */  emit_insn (gen_rtx (SET, VOIDmode, operands[0], operands[1]));  DONE;}")(define_expand "reload_outsi"  [(set (match_operand:SI 0 "non_hard_reg_operand" "")	(match_operand:SI 1  "register_operand" "Z"))   (clobber (match_operand:SI 2 "register_operand" "=&r"))]  ""  "{  if (emit_move_sequence (operands, SImode, operands[2]))    DONE;  /* We don't want the clobber emitted, so handle this ourselves.  */  emit_insn (gen_rtx (SET, VOIDmode, operands[0], operands[1]));  DONE;}");;; pic symbol references(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r")	(mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r")			 (match_operand:SI 2 "symbolic_operand" ""))))]  "flag_pic && operands[1] == pic_offset_table_rtx"  "ldw T'%2(%1),%0"  [(set_attr "type" "load")   (set_attr "length" "4")])(define_insn ""  [(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"				"=r,r,r,r,r,Q,*q,!f,f,*T")	(match_operand:SI 1 "move_operand"				"r,J,N,K,Q,rM,rM,!fM,*T,f"))]  "(register_operand (operands[0], SImode)    || reg_or_0_operand (operands[1], SImode))   && ! TARGET_SOFT_FLOAT"  "@   copy %1,%0   ldi %1,%0   ldil L'%1,%0   zdepi %Z1,%0   ldw%M1 %1,%0   stw%M0 %r1,%0   mtsar %r1   fcpy,sgl %r1,%0   fldws%F1 %1,%0   fstws%F0 %1,%0"  [(set_attr "type" "move,move,move,shift,load,store,move,fpalu,fpload,fpstore")   (set_attr "length" "4,4,4,4,4,4,4,4,4,4")])(define_insn ""  [(set (match_operand:SI 0 "reg_or_nonsymb_mem_operand"				"=r,r,r,r,r,Q,*q")	(match_operand:SI 1 "move_operand"				"r,J,N,K,Q,rM,rM"))]  "(register_operand (operands[0], SImode)    || reg_or_0_operand (operands[1], SImode))   && TARGET_SOFT_FLOAT"  "@   copy %1,%0   ldi %1,%0   ldil L'%1,%0   zdepi %Z1,%0   ldw%M1 %1,%0   stw%M0 %r1,%0   mtsar %r1"  [(set_attr "type" "move,move,move,move,load,store,move")   (set_attr "length" "4,4,4,4,4,4,4")]);; Load indexed.  We don't use unscaled modes since they can't be used;; unless we can tell which of the registers is the base and which is;; the index, due to PA's idea of segment selection using the top bits

⌨️ 快捷键说明

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