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

📄 vect.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 3 页
字号:
;; IA-64 machine description for vector operations.;; Copyright (C) 2004, 2005;;;; This file is part of GCC.;;;; GCC is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 2, or (at your option);; any later version.;;;; GCC is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.;;;; You should have received a copy of the GNU General Public License;; along with GCC; see the file COPYING.  If not, write to;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,;; Boston, MA 02110-1301, USA.;; Integer vector operations(define_mode_macro VECINT [V8QI V4HI V2SI])(define_mode_macro VECINT12 [V8QI V4HI])(define_mode_macro VECINT24 [V4HI V2SI])(define_mode_attr vecsize [(V8QI "1") (V4HI "2") (V2SI "4")])(define_expand "mov<mode>"  [(set (match_operand:VECINT 0 "general_operand" "")        (match_operand:VECINT 1 "general_operand" ""))]  ""{  rtx op1 = ia64_expand_move (operands[0], operands[1]);  if (!op1)    DONE;  operands[1] = op1;})(define_insn "*mov<mode>_internal"  [(set (match_operand:VECINT 0 "destination_operand"					"=r,r,r,r,m ,*f ,*f,Q ,r ,*f")	(match_operand:VECINT 1 "move_operand"					"rU,W,i,m,rU,U*f,Q ,*f,*f,r "))]  "ia64_move_ok (operands[0], operands[1])"  "@   mov %0 = %r1   addl %0 = %v1, r0   movl %0 = %v1   ld8%O1 %0 = %1%P1   st8%Q0 %0 = %r1%P0   mov %0 = %F1   ldf8 %0 = %1%P1   stf8 %0 = %1%P0   getf.sig %0 = %1   setf.sig %0 = %1"  [(set_attr "itanium_class" "ialu,ialu,long_i,ld,st,fmisc,fld,stf,frfr,tofr")])(define_insn "one_cmpl<mode>2"  [(set (match_operand:VECINT 0 "gr_register_operand" "=r")	(not:VECINT (match_operand:VECINT 1 "gr_register_operand" "r")))]  ""  "andcm %0 = -1, %1"  [(set_attr "itanium_class" "ilog")])(define_insn "and<mode>3"  [(set (match_operand:VECINT 0 "grfr_register_operand" "=r,*f")	(and:VECINT	  (match_operand:VECINT 1 "grfr_register_operand" "r,*f")	  (match_operand:VECINT 2 "grfr_reg_or_8bit_operand" "r,*f")))]  ""  "@   and %0 = %2, %1   fand %0 = %2, %1"  [(set_attr "itanium_class" "ilog,fmisc")])(define_insn "*andnot<mode>"  [(set (match_operand:VECINT 0 "grfr_register_operand" "=r,*f")	(and:VECINT	  (not:VECINT (match_operand:VECINT 1 "grfr_register_operand" "r,*f"))	  (match_operand:VECINT 2 "grfr_reg_or_8bit_operand" "r,*f")))]  ""  "@   andcm %0 = %2, %1   fandcm %0 = %2, %1"  [(set_attr "itanium_class" "ilog,fmisc")])(define_insn "ior<mode>3"  [(set (match_operand:VECINT 0 "grfr_register_operand" "=r,*f")	(ior:VECINT	  (match_operand:VECINT 1 "grfr_register_operand" "r,*f")	  (match_operand:VECINT 2 "grfr_reg_or_8bit_operand" "r,*f")))]  ""  "@   or %0 = %2, %1   for %0 = %2, %1"  [(set_attr "itanium_class" "ilog,fmisc")])(define_insn "xor<mode>3"  [(set (match_operand:VECINT 0 "grfr_register_operand" "=r,*f")	(xor:VECINT	  (match_operand:VECINT 1 "grfr_register_operand" "r,*f")	  (match_operand:VECINT 2 "grfr_reg_or_8bit_operand" "r,*f")))]  ""  "@   xor %0 = %2, %1   fxor %0 = %2, %1"  [(set_attr "itanium_class" "ilog,fmisc")])(define_insn "neg<mode>2"  [(set (match_operand:VECINT 0 "gr_register_operand" "=r")	(neg:VECINT (match_operand:VECINT 1 "gr_register_operand" "r")))]  ""  "psub<vecsize> %0 = r0, %1"  [(set_attr "itanium_class" "mmalua")])(define_insn "add<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "=r")	(plus:VECINT (match_operand:VECINT 1 "gr_register_operand" "r")		     (match_operand:VECINT 2 "gr_register_operand" "r")))]  ""  "padd<vecsize> %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_insn "*ssadd<mode>3"  [(set (match_operand:VECINT12 0 "gr_register_operand" "=r")	(ss_plus:VECINT12	  (match_operand:VECINT12 1 "gr_register_operand" "r")	  (match_operand:VECINT12 2 "gr_register_operand" "r")))]  ""  "padd<vecsize>.sss %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_insn "*usadd<mode>3"  [(set (match_operand:VECINT12 0 "gr_register_operand" "=r")	(us_plus:VECINT12	  (match_operand:VECINT12 1 "gr_register_operand" "r")	  (match_operand:VECINT12 2 "gr_register_operand" "r")))]  ""  "padd<vecsize>.uuu %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_insn "sub<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "=r")	(minus:VECINT (match_operand:VECINT 1 "gr_register_operand" "r")		      (match_operand:VECINT 2 "gr_register_operand" "r")))]  ""  "psub<vecsize> %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_insn "*sssub<mode>3"  [(set (match_operand:VECINT12 0 "gr_register_operand" "=r")	(ss_minus:VECINT12	  (match_operand:VECINT12 1 "gr_register_operand" "r")	  (match_operand:VECINT12 2 "gr_register_operand" "r")))]  ""  "psub<vecsize>.sss %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_insn "*ussub<mode>3"  [(set (match_operand:VECINT12 0 "gr_register_operand" "=r")	(us_minus:VECINT12	  (match_operand:VECINT12 1 "gr_register_operand" "r")	  (match_operand:VECINT12 2 "gr_register_operand" "r")))]  ""  "psub<vecsize>.uuu %0 = %1, %2"  [(set_attr "itanium_class" "mmalua")])(define_expand "mulv8qi3"  [(set (match_operand:V8QI 0 "gr_register_operand" "")	(mult:V8QI (match_operand:V8QI 1 "gr_register_operand" "r")		   (match_operand:V8QI 2 "gr_register_operand" "r")))]  ""{  rtx r1, l1, r2, l2, rm, lm;  r1 = gen_reg_rtx (V4HImode);  l1 = gen_reg_rtx (V4HImode);  r2 = gen_reg_rtx (V4HImode);  l2 = gen_reg_rtx (V4HImode);  /* Zero-extend the QImode elements into two words of HImode elements     by interleaving them with zero bytes.  */  emit_insn (gen_mix1_r (gen_lowpart (V8QImode, r1),                         operands[1], CONST0_RTX (V8QImode)));  emit_insn (gen_mix1_r (gen_lowpart (V8QImode, r2),                         operands[2], CONST0_RTX (V8QImode)));  emit_insn (gen_mix1_l (gen_lowpart (V8QImode, l1),                         operands[1], CONST0_RTX (V8QImode)));  emit_insn (gen_mix1_l (gen_lowpart (V8QImode, l2),                         operands[2], CONST0_RTX (V8QImode)));  /* Multiply.  */  rm = gen_reg_rtx (V4HImode);  lm = gen_reg_rtx (V4HImode);  emit_insn (gen_mulv4hi3 (rm, r1, r2));  emit_insn (gen_mulv4hi3 (lm, l1, l2));  /* Zap the high order bytes of the HImode elements by overwriting those     in one part with the low order bytes of the other.  */  emit_insn (gen_mix1_r (operands[0],                         gen_lowpart (V8QImode, rm),                         gen_lowpart (V8QImode, lm)));  DONE;})(define_insn "mulv4hi3"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(mult:V4HI (match_operand:V4HI 1 "gr_register_operand" "r")		   (match_operand:V4HI 2 "gr_register_operand" "r")))]  ""  "pmpyshr2 %0 = %1, %2, 0"  [(set_attr "itanium_class" "mmmul")])(define_insn "pmpy2_r"  [(set (match_operand:V2SI 0 "gr_register_operand" "=r")	(mult:V2SI	  (vec_select:V2SI	    (sign_extend:V4SI	      (match_operand:V4HI 1 "gr_register_operand" "r"))	    (parallel [(const_int 0) (const_int 2)]))	  (vec_select:V2SI	    (sign_extend:V4SI	      (match_operand:V4HI 2 "gr_register_operand" "r"))	    (parallel [(const_int 0) (const_int 2)]))))]  ""  "pmpy2.r %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_insn "pmpy2_l"  [(set (match_operand:V2SI 0 "gr_register_operand" "=r")	(mult:V2SI	  (vec_select:V2SI	    (sign_extend:V4SI	      (match_operand:V4HI 1 "gr_register_operand" "r"))	    (parallel [(const_int 1) (const_int 3)]))	  (vec_select:V2SI	    (sign_extend:V4SI	      (match_operand:V4HI 2 "gr_register_operand" "r"))	    (parallel [(const_int 1) (const_int 3)]))))]  ""  "pmpy2.l %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_expand "umax<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "")	(umax:VECINT (match_operand:VECINT 1 "gr_register_operand" "")		     (match_operand:VECINT 2 "gr_register_operand" "")))]  ""{  if (ia64_expand_vecint_minmax (UMAX, <MODE>mode, operands))    DONE;})(define_expand "smax<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "")	(smax:VECINT (match_operand:VECINT 1 "gr_reg_or_0_operand" "")		     (match_operand:VECINT 2 "gr_reg_or_0_operand" "")))]  ""{  if (ia64_expand_vecint_minmax (SMAX, <MODE>mode, operands))    DONE;})(define_expand "umin<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "")	(umin:VECINT (match_operand:VECINT 1 "gr_register_operand" "")		     (match_operand:VECINT 2 "gr_register_operand" "")))]  ""{  if (ia64_expand_vecint_minmax (UMIN, <MODE>mode, operands))    DONE;})(define_expand "smin<mode>3"  [(set (match_operand:VECINT 0 "gr_register_operand" "")	(smin:VECINT (match_operand:VECINT 1 "gr_reg_or_0_operand" "")		     (match_operand:VECINT 2 "gr_reg_or_0_operand" "")))]  ""{  if (ia64_expand_vecint_minmax (SMIN, <MODE>mode, operands))    DONE;})(define_insn "*umaxv8qi3"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(umax:V8QI (match_operand:V8QI 1 "gr_register_operand" "r")		   (match_operand:V8QI 2 "gr_register_operand" "r")))]  ""  "pmax1.u %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_insn "*smaxv4hi3"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(smax:V4HI (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")		   (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU")))]  ""  "pmax2 %0 = %r1, %r2"  [(set_attr "itanium_class" "mmshf")])(define_insn "*uminv8qi3"  [(set (match_operand:V8QI 0 "gr_register_operand" "=r")	(umin:V8QI (match_operand:V8QI 1 "gr_register_operand" "r")		   (match_operand:V8QI 2 "gr_register_operand" "r")))]  ""  "pmin1.u %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_insn "*sminv4hi3"  [(set (match_operand:V4HI 0 "gr_register_operand" "=r")	(smin:V4HI (match_operand:V4HI 1 "gr_reg_or_0_operand" "rU")		   (match_operand:V4HI 2 "gr_reg_or_0_operand" "rU")))]  ""  "pmin2 %0 = %r1, %r2"  [(set_attr "itanium_class" "mmshf")])(define_insn "ashl<mode>3"  [(set (match_operand:VECINT24 0 "gr_register_operand" "=r")	(ashift:VECINT24	  (match_operand:VECINT24 1 "gr_register_operand" "r")	  (match_operand:DI 2 "gr_reg_or_5bit_operand" "rn")))]  ""  "pshl<vecsize> %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_insn "ashr<mode>3"  [(set (match_operand:VECINT24 0 "gr_register_operand" "=r")	(ashiftrt:VECINT24	  (match_operand:VECINT24 1 "gr_register_operand" "r")	  (match_operand:DI 2 "gr_reg_or_5bit_operand" "rn")))]  ""  "pshr<vecsize> %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_insn "lshr<mode>3"  [(set (match_operand:VECINT24 0 "gr_register_operand" "=r")	(lshiftrt:VECINT24	  (match_operand:VECINT24 1 "gr_register_operand" "r")	  (match_operand:DI 2 "gr_reg_or_5bit_operand" "rn")))]  ""  "pshr<vecsize>.u %0 = %1, %2"  [(set_attr "itanium_class" "mmshf")])(define_expand "vec_shl_<mode>"  [(set (match_operand:VECINT 0 "gr_register_operand" "")	(ashift:DI (match_operand:VECINT 1 "gr_register_operand" "")		   (match_operand:DI 2 "gr_reg_or_6bit_operand" "")))]  ""{  operands[0] = gen_lowpart (DImode, operands[0]);  operands[1] = gen_lowpart (DImode, operands[1]);})(define_expand "vec_shr_<mode>"  [(set (match_operand:VECINT 0 "gr_register_operand" "")        (lshiftrt:DI (match_operand:VECINT 1 "gr_register_operand" "")                     (match_operand:DI 2 "gr_reg_or_6bit_operand" "")))]  ""{  operands[0] = gen_lowpart (DImode, operands[0]);  operands[1] = gen_lowpart (DImode, operands[1]);})(define_expand "widen_usumv8qi3"  [(match_operand:V4HI 0 "gr_register_operand" "")   (match_operand:V8QI 1 "gr_register_operand" "")   (match_operand:V4HI 2 "gr_register_operand" "")]  ""{  ia64_expand_widen_sum (operands, true);  DONE;})(define_expand "widen_usumv4hi3"  [(match_operand:V2SI 0 "gr_register_operand" "")   (match_operand:V4HI 1 "gr_register_operand" "")   (match_operand:V2SI 2 "gr_register_operand" "")]  ""{  ia64_expand_widen_sum (operands, true);  DONE;})(define_expand "widen_ssumv8qi3"  [(match_operand:V4HI 0 "gr_register_operand" "")   (match_operand:V8QI 1 "gr_register_operand" "")   (match_operand:V4HI 2 "gr_register_operand" "")]  ""{  ia64_expand_widen_sum (operands, false);  DONE;})(define_expand "widen_ssumv4hi3"  [(match_operand:V2SI 0 "gr_register_operand" "")   (match_operand:V4HI 1 "gr_register_operand" "")   (match_operand:V2SI 2 "gr_register_operand" "")]  ""{  ia64_expand_widen_sum (operands, false);  DONE;})(define_expand "udot_prodv8qi"  [(match_operand:V2SI 0 "gr_register_operand" "")   (match_operand:V8QI 1 "gr_register_operand" "")   (match_operand:V8QI 2 "gr_register_operand" "")   (match_operand:V2SI 3 "gr_register_operand" "")]  ""{  ia64_expand_dot_prod_v8qi (operands, true);  DONE;})(define_expand "sdot_prodv8qi"  [(match_operand:V2SI 0 "gr_register_operand" "")   (match_operand:V8QI 1 "gr_register_operand" "")   (match_operand:V8QI 2 "gr_register_operand" "")   (match_operand:V2SI 3 "gr_register_operand" "")]  ""{  ia64_expand_dot_prod_v8qi (operands, false);  DONE;})(define_expand "sdot_prodv4hi"  [(match_operand:V2SI 0 "gr_register_operand" "")   (match_operand:V4HI 1 "gr_register_operand" "")   (match_operand:V4HI 2 "gr_register_operand" "")   (match_operand:V2SI 3 "gr_register_operand" "")]  ""{  rtx l, r, t;  r = gen_reg_rtx (V2SImode);

⌨️ 快捷键说明

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