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

📄 altivec.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
  "TARGET_ALTIVEC"  "vcmpeqfp %0,%1,%2"  [(set_attr "type" "veccmp")])(define_insn "altivec_vcmpgefp"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")                      (match_operand:V4SF 2 "register_operand" "v")] 	               UNSPEC_VCMPGEFP))]  "TARGET_ALTIVEC"  "vcmpgefp %0,%1,%2"  [(set_attr "type" "veccmp")])(define_insn "altivec_vcmpgtub"  [(set (match_operand:V16QI 0 "register_operand" "=v")        (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")                       (match_operand:V16QI 2 "register_operand" "v")]                        UNSPEC_VCMPGTUB))]  "TARGET_ALTIVEC"  "vcmpgtub %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtsb"  [(set (match_operand:V16QI 0 "register_operand" "=v")        (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")                       (match_operand:V16QI 2 "register_operand" "v")]                        UNSPEC_VCMPGTSB))]  "TARGET_ALTIVEC"  "vcmpgtsb %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtuh"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")                      (match_operand:V8HI 2 "register_operand" "v")]                       UNSPEC_VCMPGTUH))]  "TARGET_ALTIVEC"  "vcmpgtuh %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtsh"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")                      (match_operand:V8HI 2 "register_operand" "v")]                       UNSPEC_VCMPGTSH))]  "TARGET_ALTIVEC"  "vcmpgtsh %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtuw"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")                      (match_operand:V4SI 2 "register_operand" "v")] 	              UNSPEC_VCMPGTUW))]  "TARGET_ALTIVEC"  "vcmpgtuw %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtsw"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")                      (match_operand:V4SI 2 "register_operand" "v")] 	              UNSPEC_VCMPGTSW))]  "TARGET_ALTIVEC"  "vcmpgtsw %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "altivec_vcmpgtfp"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "v")                      (match_operand:V4SF 2 "register_operand" "v")] 	              UNSPEC_VCMPGTFP))]  "TARGET_ALTIVEC"  "vcmpgtfp %0,%1,%2"  [(set_attr "type" "veccmp")]);; Fused multiply add(define_insn "altivec_vmaddfp"  [(set (match_operand:V4SF 0 "register_operand" "=v")	(plus:V4SF (mult:V4SF (match_operand:V4SF 1 "register_operand" "v")			      (match_operand:V4SF 2 "register_operand" "v"))	  	   (match_operand:V4SF 3 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vmaddfp %0,%1,%2,%3"  [(set_attr "type" "vecfloat")]);; We do multiply as a fused multiply-add with an add of a -0.0 vector.(define_expand "mulv4sf3"  [(use (match_operand:V4SF 0 "register_operand" ""))   (use (match_operand:V4SF 1 "register_operand" ""))   (use (match_operand:V4SF 2 "register_operand" ""))]  "TARGET_ALTIVEC && TARGET_FUSED_MADD"  "{  rtx neg0;  /* Generate [-0.0, -0.0, -0.0, -0.0].  */  neg0 = gen_reg_rtx (V4SFmode);  emit_insn (gen_altivec_vspltisw_v4sf (neg0, constm1_rtx));  emit_insn (gen_altivec_vslw_v4sf (neg0, neg0, neg0));  /* Use the multiply-add.  */  emit_insn (gen_altivec_vmaddfp (operands[0], operands[1], operands[2],				  neg0));  DONE;}");; APPLE LOCAL begin 3972875 mainline 2005-04-18 ;; 32 bit integer multiplication;; A_high = Operand_0 & 0xFFFF0000 >> 16;; A_low = Operand_0 & 0xFFFF;; B_high = Operand_1 & 0xFFFF0000 >> 16;; B_low = Operand_1 & 0xFFFF;; result = A_low * B_low + (A_high * B_low + B_high * A_low) << 16;; (define_insn "mulv4si3";;   [(set (match_operand:V4SI 0 "register_operand" "=v");;         (mult:V4SI (match_operand:V4SI 1 "register_operand" "v");;                    (match_operand:V4SI 2 "register_operand" "v")))](define_expand "mulv4si3"  [(use (match_operand:V4SI 0 "register_operand" ""))   (use (match_operand:V4SI 1 "register_operand" ""))   (use (match_operand:V4SI 2 "register_operand" ""))]   "TARGET_ALTIVEC"   " {   rtx zero;   rtx swap;   rtx small_swap;   rtx sixteen;   rtx one;   rtx two;   rtx low_product;   rtx high_product;          zero = gen_reg_rtx (V4SImode);   emit_insn (gen_altivec_vspltisw (zero, const0_rtx));    sixteen = gen_reg_rtx (V4SImode);      emit_insn (gen_altivec_vspltisw (sixteen,  gen_rtx_CONST_INT (V4SImode, -16)));    swap = gen_reg_rtx (V4SImode);   emit_insn (gen_altivec_vrlw (swap, operands[2], sixteen));    one = gen_reg_rtx (V8HImode);   convert_move (one, operands[1], 0);    two = gen_reg_rtx (V8HImode);   convert_move (two, operands[2], 0);    small_swap = gen_reg_rtx (V8HImode);   convert_move (small_swap, swap, 0);    low_product = gen_reg_rtx (V4SImode);   emit_insn (gen_altivec_vmulouh (low_product, one, two));    high_product = gen_reg_rtx (V4SImode);   emit_insn (gen_altivec_vmsumuhm (high_product, one, small_swap, zero));    emit_insn (gen_altivec_vslw (high_product, high_product, sixteen));    emit_insn (gen_addv4si3 (operands[0], high_product, low_product));      DONE; }");; APPLE LOCAL end 3972875 mainline 2005-04-18;; Fused multiply subtract (define_insn "altivec_vnmsubfp"  [(set (match_operand:V4SF 0 "register_operand" "=v")	(neg:V4SF (minus:V4SF (mult:V4SF (match_operand:V4SF 1 "register_operand" "v")			       (match_operand:V4SF 2 "register_operand" "v"))	  	    (match_operand:V4SF 3 "register_operand" "v"))))]  "TARGET_ALTIVEC"  "vnmsubfp %0,%1,%2,%3"  [(set_attr "type" "vecfloat")])(define_insn "altivec_vmsumu<VI_char>m"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:VIshort 1 "register_operand" "v")		      (match_operand:VIshort 2 "register_operand" "v")                      (match_operand:V4SI 3 "register_operand" "v")] 65))]  "TARGET_ALTIVEC"  "vmsumu<VI_char>m %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmsumm<VI_char>m"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:VIshort 1 "register_operand" "v")		      (match_operand:VIshort 2 "register_operand" "v")                      (match_operand:V4SI 3 "register_operand" "v")] 66))]  "TARGET_ALTIVEC"  "vmsumm<VI_char>m %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmsumshm"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V4SI 3 "register_operand" "v")] 68))]  "TARGET_ALTIVEC"  "vmsumshm %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmsumuhs"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V4SI 3 "register_operand" "v")] 69))   (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))]  "TARGET_ALTIVEC"  "vmsumuhs %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmsumshs"  [(set (match_operand:V4SI 0 "register_operand" "=v")        (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V4SI 3 "register_operand" "v")] 70))   (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))]  "TARGET_ALTIVEC"  "vmsumshs %0,%1,%2,%3"  [(set_attr "type" "veccomplex")]);; max(define_insn "umax<mode>3"  [(set (match_operand:VI 0 "register_operand" "=v")        (umax:VI (match_operand:VI 1 "register_operand" "v")                 (match_operand:VI 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vmaxu<VI_char> %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "smax<mode>3"  [(set (match_operand:VI 0 "register_operand" "=v")        (smax:VI (match_operand:VI 1 "register_operand" "v")                 (match_operand:VI 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vmaxs<VI_char> %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "smaxv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=v")        (smax:V4SF (match_operand:V4SF 1 "register_operand" "v")                   (match_operand:V4SF 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vmaxfp %0,%1,%2"  [(set_attr "type" "veccmp")])(define_insn "umin<mode>3"  [(set (match_operand:VI 0 "register_operand" "=v")        (umin:VI (match_operand:VI 1 "register_operand" "v")                 (match_operand:VI 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vminu<VI_char> %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "smin<mode>3"  [(set (match_operand:VI 0 "register_operand" "=v")        (smin:VI (match_operand:VI 1 "register_operand" "v")                 (match_operand:VI 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vmins<VI_char> %0,%1,%2"  [(set_attr "type" "vecsimple")])(define_insn "sminv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=v")        (smin:V4SF (match_operand:V4SF 1 "register_operand" "v")                   (match_operand:V4SF 2 "register_operand" "v")))]  "TARGET_ALTIVEC"  "vminfp %0,%1,%2"  [(set_attr "type" "veccmp")])(define_insn "altivec_vmhaddshs"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V8HI 3 "register_operand" "v")] 71))   (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))]  "TARGET_ALTIVEC"  "vmhaddshs %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmhraddshs"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V8HI 3 "register_operand" "v")] 72))   (set (reg:SI 110) (unspec:SI [(const_int 0)] 213))]  "TARGET_ALTIVEC"  "vmhraddshs %0,%1,%2,%3"  [(set_attr "type" "veccomplex")])(define_insn "altivec_vmladduhm"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v")		      (match_operand:V8HI 2 "register_operand" "v")                      (match_operand:V8HI 3 "register_operand" "v")] 73))]  "TARGET_ALTIVEC"  "vmladduhm %0,%1,%2,%3"  [(set_attr "type" "veccomplex")]);; APPLE LOCAL begin radar 4110116(define_insn "altivec_vmrghb"  [(set (match_operand:V16QI 0 "register_operand" "=v")        (vec_merge:V16QI (vec_select:V16QI (match_operand:V16QI 1 "register_operand" "v")					   (parallel [(const_int 0)					   	      (const_int 8)					   	      (const_int 1)					   	      (const_int 9)					   	      (const_int 2)					   	      (const_int 10)						      (const_int 3)						      (const_int 11)					   	      (const_int 4)					   	      (const_int 12)					   	      (const_int 5)					   	      (const_int 13)					   	      (const_int 6)					   	      (const_int 14)					   	      (const_int 7)						      (const_int 15)]))                        (vec_select:V16QI (match_operand:V16QI 2 "register_operand" "v")					   (parallel [(const_int 8)					   	      (const_int 0)					   	      (const_int 9)					   	      (const_int 1)					   	      (const_int 10)					   	      (const_int 2)						      (const_int 11)						      (const_int 3)					   	      (const_int 12)					   	      (const_int 4)					   	      (const_int 13)					   	      (const_int 5)					   	      (const_int 14)					   	      (const_int 6)					   	      (const_int 15)						      (const_int 7)]))		      (const_int 21845)))]  "TARGET_ALTIVEC"  "vmrghb %0,%1,%2"  [(set_attr "type" "vecperm")])(define_insn "altivec_vmrghh"  [(set (match_operand:V8HI 0 "register_operand" "=v")        (vec_merge:V8HI (vec_select:V8HI (match_operand:V8HI 1 "register_operand" "v")					   (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)]))                        (vec_select:V8HI (match_operand:V8HI 2 "register_operand" "v")					   (parallel [(const_int 4)					   	      (const_int 0)					   	      (const_int 5)					   	      (const_int 1)					   	      (const_int 6)					   	      (const_int 2)					   	      (const_int 7)					   	      (const_int 3)]))		      (const_int 85)))]  "TARGET_ALTIVEC"  "vmrghh %0,%1,%2"  [(set_attr "type" "vecperm")])

⌨️ 快捷键说明

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