📄 vect.md
字号:
[(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 + -