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

📄 vect.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 3 页
字号:
    "%,movl %0 = %v1",    "%,ld8%O1 %0 = %1%P1",    "%,st8%Q0 %0 = %r1%P0",    "%,setf.sig %0 = %1",    "%,getf.sig %0 = %1"  };  if (which_alternative == 1)    {      operands[2] = XVECEXP (operands[1], 0, 1);      operands[1] = XVECEXP (operands[1], 0, 0);    }  return alt[which_alternative];}  [(set_attr "itanium_class" "fmisc,fmisc,fld,stf,ialu,ialu,long_i,ld,st,tofr,frfr")])(define_insn "absv2sf2"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(abs:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")))]  ""  "fpabs %0 = %1"  [(set_attr "itanium_class" "fmisc")])(define_insn "negv2sf2"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(neg:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")))]  ""  "fpneg %0 = %1"  [(set_attr "itanium_class" "fmisc")])(define_insn "*negabsv2sf2"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(neg:V2SF	  (abs:V2SF (match_operand:V2SF 1 "fr_register_operand" "f"))))]  ""  "fpnegabs %0 = %1"  [(set_attr "itanium_class" "fmisc")]);; In order to convince combine to merge plus and mult to a useful fpma,;; we need a couple of extra patterns.(define_expand "addv2sf3"  [(parallel    [(set (match_operand:V2SF 0 "fr_register_operand" "")	  (plus:V2SF (match_operand:V2SF 1 "fr_register_operand" "")		     (match_operand:V2SF 2 "fr_register_operand" "")))     (use (match_dup 3))])]  ""{  rtvec v = gen_rtvec (2, CONST1_RTX (SFmode), CONST1_RTX (SFmode));  operands[3] = force_reg (V2SFmode, gen_rtx_CONST_VECTOR (V2SFmode, v));});; The split condition here could be combine_completed, if we had such.(define_insn_and_split "*addv2sf3_1"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(plus:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		   (match_operand:V2SF 2 "fr_register_operand" "f")))   (use (match_operand:V2SF 3 "fr_register_operand" "f"))]  ""  "#"  "reload_completed"  [(set (match_dup 0)	(plus:V2SF	  (mult:V2SF (match_dup 1) (match_dup 3))	  (match_dup 2)))]  "")(define_insn_and_split "*addv2sf3_2"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(plus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		     (match_operand:V2SF 2 "fr_register_operand" "f"))	  (match_operand:V2SF 3 "fr_register_operand" "f")))    (use (match_operand:V2SF 4 "" "X"))]  ""  "#"  ""  [(set (match_dup 0)	(plus:V2SF	  (mult:V2SF (match_dup 1) (match_dup 2))	  (match_dup 3)))]  "");; In order to convince combine to merge minus and mult to a useful fpms,;; we need a couple of extra patterns.(define_expand "subv2sf3"  [(parallel    [(set (match_operand:V2SF 0 "fr_register_operand" "")	  (minus:V2SF (match_operand:V2SF 1 "fr_register_operand" "")		      (match_operand:V2SF 2 "fr_register_operand" "")))     (use (match_dup 3))])]  ""{  rtvec v = gen_rtvec (2, CONST1_RTX (SFmode), CONST1_RTX (SFmode));  operands[3] = force_reg (V2SFmode, gen_rtx_CONST_VECTOR (V2SFmode, v));});; The split condition here could be combine_completed, if we had such.(define_insn_and_split "*subv2sf3_1"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(minus:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		    (match_operand:V2SF 2 "fr_register_operand" "f")))   (use (match_operand:V2SF 3 "fr_register_operand" "f"))]  ""  "#"  "reload_completed"  [(set (match_dup 0)	(minus:V2SF	  (mult:V2SF (match_dup 1) (match_dup 3))	  (match_dup 2)))]  "")(define_insn_and_split "*subv2sf3_2"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(minus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		     (match_operand:V2SF 2 "fr_register_operand" "f"))	  (match_operand:V2SF 3 "fr_register_operand" "f")))    (use (match_operand:V2SF 4 "" "X"))]  ""  "#"  ""  [(set (match_dup 0)	(minus:V2SF	  (mult:V2SF (match_dup 1) (match_dup 2))	  (match_dup 3)))]  "")(define_insn "mulv2sf3"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		   (match_operand:V2SF 2 "fr_register_operand" "f")))]  ""  "fpmpy %0 = %1, %2"  [(set_attr "itanium_class" "fmac")])(define_insn "*fpma"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(plus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		     (match_operand:V2SF 2 "fr_register_operand" "f"))	  (match_operand:V2SF 3 "fr_register_operand" "f")))]  ""  "fpma %0 = %1, %2, %3"  [(set_attr "itanium_class" "fmac")])(define_insn "*fpms"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(minus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		     (match_operand:V2SF 2 "fr_register_operand" "f"))	  (match_operand:V2SF 3 "fr_register_operand" "f")))]  ""  "fpms %0 = %1, %2, %3"  [(set_attr "itanium_class" "fmac")])(define_insn "*fpnmpy"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(neg:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		     (match_operand:V2SF 2 "fr_register_operand" "f"))))]  ""  "fpnmpy %0 = %1, %2"  [(set_attr "itanium_class" "fmac")])(define_insn "*fpnma"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(plus:V2SF	  (neg:V2SF	    (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		       (match_operand:V2SF 2 "fr_register_operand" "f")))	  (match_operand:V2SF 3 "fr_register_operand" "f")))]  ""  "fpnma %0 = %1, %2, %3"  [(set_attr "itanium_class" "fmac")])(define_insn "smaxv2sf3"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(smax:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		   (match_operand:V2SF 2 "fr_register_operand" "f")))]  ""  "fpmax %0 = %1, %2"  [(set_attr "itanium_class" "fmisc")])(define_insn "sminv2sf3"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(smin:V2SF (match_operand:V2SF 1 "fr_register_operand" "f")		   (match_operand:V2SF 2 "fr_register_operand" "f")))]  ""  "fpmin %0 = %1, %2"  [(set_attr "itanium_class" "fmisc")])(define_expand "reduc_splus_v2sf"  [(match_operand:V2SF 0 "fr_register_operand" "")   (match_operand:V2SF 1 "fr_register_operand" "")]  ""{  rtx tmp = gen_reg_rtx (V2SFmode);  emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode)));  emit_insn (gen_addv2sf3 (operands[0], operands[1], tmp));  DONE;})(define_expand "reduc_smax_v2sf"  [(match_operand:V2SF 0 "fr_register_operand" "")   (match_operand:V2SF 1 "fr_register_operand" "")]  ""{  rtx tmp = gen_reg_rtx (V2SFmode);  emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode)));  emit_insn (gen_smaxv2sf3 (operands[0], operands[1], tmp));  DONE;})(define_expand "reduc_smin_v2sf"  [(match_operand:V2SF 0 "fr_register_operand" "")   (match_operand:V2SF 1 "fr_register_operand" "")]  ""{  rtx tmp = gen_reg_rtx (V2SFmode);  emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode)));  emit_insn (gen_sminv2sf3 (operands[0], operands[1], tmp));  DONE;})(define_expand "vcondv2sf"  [(set (match_operand:V2SF 0 "fr_register_operand" "")	(if_then_else:V2SF	  (match_operator 3 "" 	    [(match_operand:V2SF 4 "fr_reg_or_0_operand" "")	     (match_operand:V2SF 5 "fr_reg_or_0_operand" "")])	  (match_operand:V2SF 1 "fr_reg_or_0_operand" "")	  (match_operand:V2SF 2 "fr_reg_or_0_operand" "")))]  ""{  rtx x, cmp;  cmp = gen_reg_rtx (V2SFmode);  PUT_MODE (operands[3], V2SFmode);  emit_insn (gen_rtx_SET (VOIDmode, cmp, operands[3]));  x = gen_rtx_IF_THEN_ELSE (V2SFmode, cmp, operands[1], operands[2]);  emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));  DONE;})(define_insn "*fpcmp"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(match_operator:V2SF 3 "comparison_operator"	  [(match_operand:V2SF 1 "fr_reg_or_0_operand" "fU")	   (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU")]))]  ""  "fpcmp.%D3 %0 = %F1, %F2"  [(set_attr "itanium_class" "fmisc")])(define_insn "*fselect"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(if_then_else:V2SF	  (match_operand:V2SF 1 "fr_register_operand" "f")	  (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU")	  (match_operand:V2SF 3 "fr_reg_or_0_operand" "fU")))]  ""  "fselect %0 = %F2, %F3, %1"  [(set_attr "itanium_class" "fmisc")])(define_expand "vec_initv2sf"  [(match_operand:V2SF 0 "fr_register_operand" "")   (match_operand 1 "" "")]  ""{  rtx op1 = XVECEXP (operands[1], 0, 0);  rtx op2 = XVECEXP (operands[1], 0, 1);  rtx x;  if (GET_CODE (op1) == CONST_DOUBLE && GET_CODE (op2) == CONST_DOUBLE)    {      x = gen_rtx_CONST_VECTOR (V2SFmode, XVEC (operands[1], 0));      emit_move_insn (operands[0], x);      DONE;    }  if (!fr_reg_or_fp01_operand (op1, SFmode))    op1 = force_reg (SFmode, op1);  if (!fr_reg_or_fp01_operand (op2, SFmode))    op2 = force_reg (SFmode, op2);  if (TARGET_BIG_ENDIAN)    emit_insn (gen_fpack (operands[0], op2, op1));  else    emit_insn (gen_fpack (operands[0], op1, op2));  DONE;})(define_insn "fpack"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(vec_concat:V2SF	  (match_operand:SF 1 "fr_reg_or_fp01_operand" "fG")	  (match_operand:SF 2 "fr_reg_or_fp01_operand" "fG")))]  ""  "fpack %0 = %F2, %F1"  [(set_attr "itanium_class" "fmisc")])(define_insn "fswap"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(vec_select:V2SF	  (vec_concat:V4SF	    (match_operand:V2SF 1 "fr_reg_or_0_operand" "fU")	    (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU"))	  (parallel [(const_int 1) (const_int 2)])))]  ""  "fswap %0 = %F1, %F2"  [(set_attr "itanium_class" "fmisc")])(define_insn "*fmix_l"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(vec_select:V2SF	  (vec_concat:V4SF	    (match_operand:V2SF 1 "fr_reg_or_0_operand" "fU")	    (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU"))	  (parallel [(const_int 1) (const_int 3)])))]  ""  "fmix.l %0 = %F2, %F1"  [(set_attr "itanium_class" "fmisc")])(define_insn "fmix_r"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(vec_select:V2SF	  (vec_concat:V4SF	    (match_operand:V2SF 1 "fr_reg_or_0_operand" "fU")	    (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU"))	  (parallel [(const_int 0) (const_int 2)])))]  ""  "fmix.r %0 = %F2, %F1"  [(set_attr "itanium_class" "fmisc")])(define_insn "fmix_lr"  [(set (match_operand:V2SF 0 "fr_register_operand" "=f")	(vec_select:V2SF	  (vec_concat:V4SF	    (match_operand:V2SF 1 "fr_reg_or_0_operand" "fU")	    (match_operand:V2SF 2 "fr_reg_or_0_operand" "fU"))	  (parallel [(const_int 0) (const_int 3)])))]  ""  "fmix.lr %0 = %F2, %F1"  [(set_attr "itanium_class" "fmisc")])(define_expand "vec_setv2sf"  [(match_operand:V2SF 0 "fr_register_operand" "")   (match_operand:SF 1 "fr_register_operand" "")   (match_operand 2 "const_int_operand" "")]  ""{  rtx tmp = gen_reg_rtx (V2SFmode);  emit_insn (gen_fpack (tmp, operands[1], CONST0_RTX (SFmode)));  switch (INTVAL (operands[2]))    {    case 0:      emit_insn (gen_fmix_lr (operands[0], tmp, operands[0]));      break;    case 1:      emit_insn (gen_fmix_r (operands[0], operands[0], tmp));      break;    default:      gcc_unreachable ();    }  DONE;})(define_insn_and_split "*vec_extractv2sf_0_le"  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,f,m")	(unspec:SF [(match_operand:V2SF 1 "nonimmediate_operand" "rfm,rm,r")		    (const_int 0)]		   UNSPEC_VECT_EXTR))]  "!TARGET_BIG_ENDIAN"  "#"  "reload_completed"  [(set (match_dup 0) (match_dup 1))]{  if (REG_P (operands[1]) && FR_REGNO_P (REGNO (operands[1])))    operands[0] = gen_rtx_REG (V2SFmode, REGNO (operands[0]));  else if (MEM_P (operands[1]))    operands[1] = adjust_address (operands[1], SFmode, 0);  else    operands[1] = gen_rtx_REG (SFmode, REGNO (operands[1]));})(define_insn_and_split "*vec_extractv2sf_0_be"  [(set (match_operand:SF 0 "register_operand" "=r,f")	(unspec:SF [(match_operand:V2SF 1 "register_operand" "rf,r")		    (const_int 0)]		   UNSPEC_VECT_EXTR))]  "TARGET_BIG_ENDIAN"  "#"  "reload_completed"  [(set (match_dup 0) (match_dup 1))]{  if (REG_P (operands[1]) && FR_REGNO_P (REGNO (operands[1])))    operands[0] = gen_rtx_REG (V2SFmode, REGNO (operands[0]));  else    operands[1] = gen_rtx_REG (SFmode, REGNO (operands[1]));})(define_insn_and_split "*vec_extractv2sf_1"  [(set (match_operand:SF 0 "register_operand" "=r")	(unspec:SF [(match_operand:V2SF 1 "register_operand" "r")		    (const_int 1)]		   UNSPEC_VECT_EXTR))]  ""  "#"  "reload_completed"  [(const_int 0)]{  operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));  operands[1] = gen_rtx_REG (DImode, REGNO (operands[1]));  if (TARGET_BIG_ENDIAN)    emit_move_insn (operands[0], operands[1]);  else    emit_insn (gen_lshrdi3 (operands[0], operands[1], GEN_INT (32)));  DONE;})(define_expand "vec_extractv2sf"  [(set (match_operand:SF 0 "register_operand" "")	(unspec:SF [(match_operand:V2SF 1 "register_operand" "")		    (match_operand:DI 2 "const_int_operand" "")]		   UNSPEC_VECT_EXTR))]  ""  "");; Missing operations;; fprcpa;; fpsqrta

⌨️ 快捷键说明

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