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

📄 vect.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 2 页
字号:
  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(vec_select:V8QI	  (match_operand:V8QI 1 "gr_register_operand" "r")	  (parallel [(const_int 0)		     (const_int 4)		     (const_int 2)		     (const_int 6)		     (const_int 1)		     (const_int 5)		     (const_int 3)		     (const_int 7)])))]  ""  "mux1 %0 = %1, @mix"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_shuf"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(vec_select:V8QI	  (match_operand:V8QI 1 "gr_register_operand" "r")	  (parallel [(const_int 0)		     (const_int 4)		     (const_int 1)		     (const_int 5)		     (const_int 2)		     (const_int 6)		     (const_int 3)		     (const_int 7)])))]  ""  "mux1 %0 = %1, @shuf"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_alt"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(vec_select:V8QI	  (match_operand:V8QI 1 "gr_register_operand" "r")	  (parallel [(const_int 0)		     (const_int 2)		     (const_int 4)		     (const_int 6)		     (const_int 1)		     (const_int 3)		     (const_int 5)		     (const_int 7)])))]  ""  "mux1 %0 = %1, @alt"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_brcst_v8qi"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(vec_select:V8QI	  (match_operand:V8QI 1 "gr_register_operand" "r")	  (parallel [(const_int 0)		     (const_int 0)		     (const_int 0)		     (const_int 0)		     (const_int 0)		     (const_int 0)		     (const_int 0)		     (const_int 0)])))]  ""  "mux1 %0 = %1, @brcst"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_brcst_qi"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(vec_duplicate:V8QI	  (match_operand:QI 1 "gr_register_operand" "r")))]  ""  "mux1 %0 = %1, @brcst"  [(set_attr "itanium_class" "mmshf")])(define_insn "unpack2_l"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 0)		     (const_int 4)		     (const_int 1)		     (const_int 5)])))]  ""  "unpack2.l %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")])(define_insn "unpack2_h"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 2)		     (const_int 6)		     (const_int 3)		     (const_int 7)])))]  ""  "unpack2.h %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mix2_r"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 0)		     (const_int 4)		     (const_int 2)		     (const_int 6)])))]  ""  "mix2.r %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mix2_l"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 1)		     (const_int 5)		     (const_int 3)		     (const_int 7)])))]  ""  "mix2.l %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux2"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_select:V4HI	  (match_operand:V4HI 1 "gr_register_operand" "r")	  (parallel [(match_operand 2 "const_int_2bit_operand" "")		     (match_operand 3 "const_int_2bit_operand" "")		     (match_operand 4 "const_int_2bit_operand" "")		     (match_operand 5 "const_int_2bit_operand" "")])))]  ""{  int mask;  mask  = INTVAL (operands[2]);  mask |= INTVAL (operands[3]) << 2;  mask |= INTVAL (operands[4]) << 4;  mask |= INTVAL (operands[5]) << 6;  operands[2] = GEN_INT (mask);  return "%,mux2 %0 = %1, %2";}  [(set_attr "itanium_class" "mmshf")])(define_insn "*mux2_brcst_hi"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(vec_duplicate:V4HI	  (match_operand:HI 1 "gr_register_operand" "r")))]  ""  "mux2 %0 = %1, 0"  [(set_attr "itanium_class" "mmshf")]);; Note that mix4.r performs the exact same operation.(define_insn "*unpack4_l"  [(set (match_operand:V2SI 0 "gr_register_operand" "=r")	(vec_select:V2SI	  (vec_concat:V4SI	    (match_operand:V2SI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V2SI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 0)		     (const_int 2)])))]  ""  "unpack4.l %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")]);; Note that mix4.l performs the exact same operation.(define_insn "*unpack4_h"  [(set (match_operand:V2SI 0 "gr_register_operand" "=r")	(vec_select:V2SI	  (vec_concat:V4SI	    (match_operand:V2SI 1 "gr_reg_or_0_operand" "rU")	    (match_operand:V2SI 2 "gr_reg_or_0_operand" "rU"))	  (parallel [(const_int 1)		     (const_int 3)])))]  ""  "unpack4.h %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")])(define_expand "vec_initv2si"  [(match_operand:V2SF 0 "gr_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_INT && GET_CODE (op2) == CONST_INT)    {      x = gen_rtx_CONST_VECTOR (V2SImode, XVEC (operands[1], 0));      emit_move_insn (operands[0], x);      DONE;    }  if (!gr_reg_or_0_operand (op1, SImode))    op1 = force_reg (SImode, op1);  if (!gr_reg_or_0_operand (op2, SImode))    op2 = force_reg (SImode, op2);  x = gen_rtx_VEC_CONCAT (V2SImode, op1, op2);  emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));  DONE;})(define_insn "*vecinit_v2si"  [(set (match_operand:V2SI 0 "gr_register_operand" "=r")	(vec_concat:V2SI	  (match_operand:SI 1 "gr_reg_or_0_operand" "rO")	  (match_operand:SI 2 "gr_reg_or_0_operand" "rO")))]  ""  "unpack4.l %0 = %r2, %r1"  [(set_attr "itanium_class" "mmshf")]);; Missing operations;; padd.uus;; pavg;; pavgsub;; pmpy;; pmpyshr, general form;; psad;; pshladd;; pshradd;; psub.uus;; vec_set<mode>;; vec_extract<mode>;; vec_init<mode>;; Floating point vector operations(define_expand "movv2sf"  [(set (match_operand:V2SF 0 "general_operand" "")        (match_operand:V2SF 1 "general_operand" ""))]  ""{  rtx op1 = ia64_expand_move (operands[0], operands[1]);  if (!op1)    DONE;  operands[1] = op1;})(define_insn "*movv2sf_internal"  [(set (match_operand:V2SF 0 "destination_operand"					"=f,f,f,Q,*r ,*r,*r,*r,m ,f ,*r")	(match_operand:V2SF 1 "move_operand"					"fU,Y,Q,f,U*r,W ,i ,m ,*r,*r,f "))]  "ia64_move_ok (operands[0], operands[1])"{  static const char * const alt[] = {    "%,mov %0 = %F1",    "%,fpack %0 = %F2, %F1",    "%,ldf8 %0 = %1%P1",    "%,stf8 %0 = %1%P0",    "%,mov %0 = %r1",    "%,addl %0 = %v1, r0",    "%,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")])(define_expand "addv2sf3"  [(set (match_operand:V2SF 0 "fr_register_operand" "")	(plus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "")		     (match_dup 3))	  (match_operand:V2SF 2 "fr_register_operand" "")))]  ""{  rtvec v = gen_rtvec (2, CONST1_RTX (SFmode), CONST1_RTX (SFmode));  operands[3] = force_reg (V2SFmode, gen_rtx_CONST_VECTOR (V2SFmode, v));})(define_expand "subv2sf3"  [(set (match_operand:V2SF 0 "fr_register_operand" "")	(minus:V2SF	  (mult:V2SF (match_operand:V2SF 1 "fr_register_operand" "")		     (match_dup 3))	  (match_operand:V2SF 2 "fr_register_operand" "")))]  ""{  rtvec v = gen_rtvec (2, CONST1_RTX (SFmode), CONST1_RTX (SFmode));  operands[3] = force_reg (V2SFmode, gen_rtx_CONST_VECTOR (V2SFmode, v));})(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 "smaxv2sf2"  [(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 "sminv2sf2"  [(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 "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;  PUT_MODE (operands[3], V2SFmode);  switch (GET_CODE (operands[3]))    {    case EQ:    case NE:    case LT:    case LE:    case UNORDERED:    case ORDERED:      break;    case GT:    case GE:      x = XEXP (operands[3], 0);      XEXP (operands[3], 0) = XEXP (operands[3], 1);      XEXP (operands[3], 1) = x;      PUT_CODE (operands[3], swap_condition (GET_CODE (operands[3])));      break;    default:      abort ();    }  cmp = gen_reg_rtx (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")	(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 = %2, %3, %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);  x = gen_rtx_VEC_CONCAT (V2SFmode, op1, op2);  emit_insn (gen_rtx_SET (VOIDmode, operands[0], x));  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")]);; Missing operations;; fprcpa;; fpsqrta;; vec_setv2sf;; vec_extractv2sf

⌨️ 快捷键说明

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