📄 vect.md
字号:
l = gen_reg_rtx (V2SImode); t = gen_reg_rtx (V2SImode); emit_insn (gen_pmpy2_r (r, operands[1], operands[2])); emit_insn (gen_pmpy2_l (l, operands[1], operands[2])); emit_insn (gen_addv2si3 (t, r, operands[3])); emit_insn (gen_addv2si3 (operands[0], t, l)); DONE;})(define_expand "vcond<mode>" [(set (match_operand:VECINT 0 "gr_register_operand" "") (if_then_else:VECINT (match_operator 3 "" [(match_operand:VECINT 4 "gr_reg_or_0_operand" "") (match_operand:VECINT 5 "gr_reg_or_0_operand" "")]) (match_operand:VECINT 1 "gr_reg_or_0_operand" "") (match_operand:VECINT 2 "gr_reg_or_0_operand" "")))] ""{ ia64_expand_vecint_cmov (operands); DONE;})(define_expand "vcondu<mode>" [(set (match_operand:VECINT 0 "gr_register_operand" "") (if_then_else:VECINT (match_operator 3 "" [(match_operand:VECINT 4 "gr_reg_or_0_operand" "") (match_operand:VECINT 5 "gr_reg_or_0_operand" "")]) (match_operand:VECINT 1 "gr_reg_or_0_operand" "") (match_operand:VECINT 2 "gr_reg_or_0_operand" "")))] ""{ ia64_expand_vecint_cmov (operands); DONE;})(define_insn "*cmpeq_<mode>" [(set (match_operand:VECINT 0 "gr_register_operand" "=r") (eq:VECINT (match_operand:VECINT 1 "gr_reg_or_0_operand" "rU") (match_operand:VECINT 2 "gr_reg_or_0_operand" "rU")))] "" "pcmp<vecsize>.eq %0 = %r1, %r2" [(set_attr "itanium_class" "mmalua")])(define_insn "*cmpgt_<mode>" [(set (match_operand:VECINT 0 "gr_register_operand" "=r") (gt:VECINT (match_operand:VECINT 1 "gr_reg_or_0_operand" "rU") (match_operand:VECINT 2 "gr_reg_or_0_operand" "rU")))] "" "pcmp<vecsize>.gt %0 = %r1, %r2" [(set_attr "itanium_class" "mmalua")])(define_insn "pack2_sss" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_concat:V8QI (ss_truncate:V4QI (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")) (ss_truncate:V4QI (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))))] "" "pack2.sss %0 = %r1, %r2" [(set_attr "itanium_class" "mmshf")])(define_insn "*pack2_uss" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_concat:V8QI (us_truncate:V4QI (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")) (us_truncate:V4QI (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU"))))] "" "pack2.uss %0 = %r1, %r2" [(set_attr "itanium_class" "mmshf")])(define_insn "pack4_sss" [(set (match_operand:V4HI 0 "gr_register_operand" "=r") (vec_concat:V4HI (ss_truncate:V2HI (match_operand:V2SI 1 "gr_reg_or_0_operand" "rU")) (ss_truncate:V2HI (match_operand:V2SI 2 "gr_reg_or_0_operand" "rU"))))] "" "pack4.sss %0 = %r1, %r2" [(set_attr "itanium_class" "mmshf")])(define_insn "unpack1_l" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_select:V8QI (vec_concat:V16QI (match_operand:V8QI 1 "gr_reg_or_0_operand" "rU") (match_operand:V8QI 2 "gr_reg_or_0_operand" "rU")) (parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3) (const_int 8) (const_int 9) (const_int 10) (const_int 11)])))] "" "unpack1.l %0 = %r2, %r1" [(set_attr "itanium_class" "mmshf")])(define_insn "unpack1_h" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_select:V8QI (vec_concat:V16QI (match_operand:V8QI 1 "gr_reg_or_0_operand" "rU") (match_operand:V8QI 2 "gr_reg_or_0_operand" "rU")) (parallel [(const_int 4) (const_int 5) (const_int 6) (const_int 7) (const_int 12) (const_int 13) (const_int 14) (const_int 15)])))] "" "unpack1.h %0 = %r2, %r1" [(set_attr "itanium_class" "mmshf")])(define_insn "mix1_r" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_select:V8QI (vec_concat:V16QI (match_operand:V8QI 1 "gr_reg_or_0_operand" "rU") (match_operand:V8QI 2 "gr_reg_or_0_operand" "rU")) (parallel [(const_int 0) (const_int 8) (const_int 2) (const_int 10) (const_int 4) (const_int 12) (const_int 6) (const_int 14)])))] "" "mix1.r %0 = %r2, %r1" [(set_attr "itanium_class" "mmshf")])(define_insn "mix1_l" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_select:V8QI (vec_concat:V16QI (match_operand:V8QI 1 "gr_reg_or_0_operand" "rU") (match_operand:V8QI 2 "gr_reg_or_0_operand" "rU")) (parallel [(const_int 1) (const_int 9) (const_int 3) (const_int 11) (const_int 5) (const_int 13) (const_int 7) (const_int 15)])))] "" "mix1.l %0 = %r2, %r1" [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_rev" [(set (match_operand:V8QI 0 "gr_register_operand" "=r") (vec_select:V8QI (match_operand:V8QI 1 "gr_register_operand" "r") (parallel [(const_int 7) (const_int 6) (const_int 5) (const_int 4) (const_int 3) (const_int 2) (const_int 1) (const_int 0)])))] "" "mux1 %0 = %1, @rev" [(set_attr "itanium_class" "mmshf")])(define_insn "*mux1_mix" [(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:V2SI 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) { rtvec v = rtvec_alloc (2); RTVEC_ELT (v, 0) = TARGET_BIG_ENDIAN ? op2 : op1; RTVEC_ELT (v, 1) = TARGET_BIG_ENDIAN ? op1 : op2;; x = gen_rtx_CONST_VECTOR (V2SImode, v); 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); if (TARGET_BIG_ENDIAN) x = gen_rtx_VEC_CONCAT (V2SImode, op2, op1); else 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;; pmpyshr, general form;; psad;; pshladd;; pshradd;; psub.uus;; 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",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -