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

📄 sse.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
   (set_attr "mode" "V2SF,V4SF,V2SF")])(define_insn "sse_loadlps"  [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,x,m")	(vec_concat:V4SF	  (match_operand:V2SF 2 "nonimmediate_operand" "0,m,x")	  (vec_select:V2SF	    (match_operand:V4SF 1 "nonimmediate_operand" "x,0,0")	    (parallel [(const_int 2) (const_int 3)]))))]  "TARGET_SSE"  "@   shufps\t{$0xe4, %1, %0|%0, %1, 0xe4}   movlps\t{%2, %0|%0, %2}   movlps\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog,ssemov,ssemov")   (set_attr "mode" "V4SF,V2SF,V2SF")])(define_insn "sse_movss"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (match_operand:V4SF 2 "register_operand" "x")	  (match_operand:V4SF 1 "register_operand" "0")	  (const_int 1)))]  "TARGET_SSE"  "movss\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemov")   (set_attr "mode" "SF")])(define_insn "*vec_dupv4sf"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_duplicate:V4SF	  (match_operand:SF 1 "register_operand" "0")))]  "TARGET_SSE"  "shufps\t{$0, %0, %0|%0, %0, 0}"  [(set_attr "type" "sselog1")   (set_attr "mode" "V4SF")]);; ??? In theory we can match memory for the MMX alternative, but allowing;; nonimmediate_operand for operand 2 and *not* allowing memory for the SSE;; alternatives pretty much forces the MMX alternative to be chosen.(define_insn "*sse_concatv2sf"  [(set (match_operand:V2SF 0 "register_operand"     "=x,x,*y,*y")	(vec_concat:V2SF	  (match_operand:SF 1 "nonimmediate_operand" " 0,m, 0, m")          /* APPLE LOCAL mainline candidate 4283414 */	  (match_operand:SF 2 "nonimmediate_or_0_operand"  " x,C,*y, C")))]  "TARGET_SSE"  "@   unpcklps\t{%2, %0|%0, %2}   movss\t{%1, %0|%0, %1}   punpckldq\t{%2, %0|%0, %2}   movd\t{%1, %0|%0, %1}"  [(set_attr "type" "sselog,ssemov,mmxcvt,mmxmov")   (set_attr "mode" "V4SF,SF,DI,DI")])(define_insn "*sse_concatv4sf"  [(set (match_operand:V4SF 0 "register_operand"   "=x,x")	(vec_concat:V4SF	  (match_operand:V2SF 1 "register_operand" " 0,0")	  (match_operand:V2SF 2 "nonimmediate_operand" " x,m")))]  "TARGET_SSE"  "@   movlhps\t{%2, %0|%0, %2}   movhps\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemov")   (set_attr "mode" "V4SF,V2SF")])(define_expand "vec_initv4sf"  [(match_operand:V4SF 0 "register_operand" "")   (match_operand 1 "" "")]  "TARGET_SSE"{  ix86_expand_vector_init (false, operands[0], operands[1]);  DONE;})(define_insn "*vec_setv4sf_0"  [(set (match_operand:V4SF 0 "nonimmediate_operand"  "=x,x,Y ,m")	(vec_merge:V4SF	  (vec_duplicate:V4SF	    (match_operand:SF 2 "general_operand"     " x,m,*r,x*rfF"))          /* APPLE LOCAL mainline candidate 4283414 */	  (match_operand:V4SF 1 "nonimmediate_or_0_operand" " 0,C,C ,0")	  (const_int 1)))]  "TARGET_SSE"  "@   movss\t{%2, %0|%0, %2}   movss\t{%2, %0|%0, %2}   movd\t{%2, %0|%0, %2}   #"  [(set_attr "type" "ssemov")   (set_attr "mode" "SF")])(define_split  [(set (match_operand:V4SF 0 "memory_operand" "")	(vec_merge:V4SF	  (vec_duplicate:V4SF	    (match_operand:SF 1 "nonmemory_operand" ""))	  (match_dup 0)	  (const_int 1)))]  "TARGET_SSE && reload_completed"  [(const_int 0)]{  emit_move_insn (adjust_address (operands[0], SFmode, 0), operands[1]);  DONE;})(define_expand "vec_setv4sf"  [(match_operand:V4SF 0 "register_operand" "")   (match_operand:SF 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_SSE"{  ix86_expand_vector_set (false, operands[0], operands[1],			  INTVAL (operands[2]));  DONE;})(define_insn_and_split "*vec_extractv4sf_0"  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,m,fr")	(vec_select:SF	  (match_operand:V4SF 1 "nonimmediate_operand" "xm,x,m")	  (parallel [(const_int 0)])))]  "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))"  "#"  "&& reload_completed"  [(const_int 0)]{  rtx op1 = operands[1];  if (REG_P (op1))    op1 = gen_rtx_REG (SFmode, REGNO (op1));  else    op1 = gen_lowpart (SFmode, op1);  emit_move_insn (operands[0], op1);  DONE;})(define_expand "vec_extractv4sf"  [(match_operand:SF 0 "register_operand" "")   (match_operand:V4SF 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_SSE"{  ix86_expand_vector_extract (false, operands[0], operands[1],			      INTVAL (operands[2]));  DONE;});;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel double-precision floating point arithmetic;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_expand "negv2df2"  [(set (match_operand:V2DF 0 "register_operand" "")	(neg:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_expand_fp_absneg_operator (NEG, V2DFmode, operands); DONE;")(define_expand "absv2df2"  [(set (match_operand:V2DF 0 "register_operand" "")	(abs:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_expand_fp_absneg_operator (ABS, V2DFmode, operands); DONE;")(define_expand "addv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(plus:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		   (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (PLUS, V2DFmode, operands);")(define_insn "*addv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(plus:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && ix86_binary_operator_ok (PLUS, V2DFmode, operands)"  "addpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmaddv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (plus:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2 && ix86_binary_operator_ok (PLUS, V4SFmode, operands)"  "addsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])(define_expand "subv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(minus:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		    (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (MINUS, V2DFmode, operands);")(define_insn "*subv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(minus:V2DF (match_operand:V2DF 1 "register_operand" "0")		    (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "subpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmsubv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (minus:V2DF (match_operand:V2DF 1 "register_operand" "0")		      (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2"  "subsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])(define_expand "mulv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(mult:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		   (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (MULT, V2DFmode, operands);")(define_insn "*mulv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(mult:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && ix86_binary_operator_ok (MULT, V2DFmode, operands)"  "mulpd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemul")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmmulv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (mult:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2 && ix86_binary_operator_ok (MULT, V2DFmode, operands)"  "mulsd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemul")   (set_attr "mode" "DF")])(define_expand "divv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(div:V2DF (match_operand:V2DF 1 "register_operand" "")		  (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (DIV, V2DFmode, operands);")(define_insn "*divv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(div:V2DF (match_operand:V2DF 1 "register_operand" "0")		  (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "divpd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssediv")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmdivv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (div:V2DF (match_operand:V2DF 1 "register_operand" "0")		    (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2"  "divsd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssediv")   (set_attr "mode" "DF")])(define_insn "sqrtv2df2"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(sqrt:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "sqrtpd\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmsqrtv2df2"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (sqrt:V2DF (match_operand:V2DF 1 "register_operand" "xm"))	  (match_operand:V2DF 2 "register_operand" "0")	  (const_int 1)))]  "TARGET_SSE2"  "sqrtsd\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")]);; ??? For !flag_finite_math_only, the representation with SMIN/SMAX;; isn't really correct, as those rtl operators aren't defined when ;; applied to NaNs.  Hopefully the optimizers won't get too smart on us.(define_expand "smaxv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(smax:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		   (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"{  if (!flag_finite_math_only)    operands[1] = force_reg (V2DFmode, operands[1]);  ix86_fixup_binary_operands_no_copy (SMAX, V2DFmode, operands);})(define_insn "*smaxv2df3_finite"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(smax:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && flag_finite_math_only   && ix86_binary_operator_ok (SMAX, V2DFmode, operands)"  "maxpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "*smaxv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(smax:V2DF (match_operand:V2DF 1 "register_operand" "0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "maxpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "*sse2_vmsmaxv2df3_finite"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (smax:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2 && flag_finite_math_only   && ix86_binary_operator_ok (SMAX, V2DFmode, operands)"  "maxsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])(define_insn "sse2_vmsmaxv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (smax:V2DF (match_operand:V2DF 1 "register_operand" "0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2"  "maxsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])(define_expand "sminv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(smin:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		   (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"{  if (!flag_finite_math_only)    operands[1] = force_reg (V2DFmode, operands[1]);  ix86_fixup_binary_operands_no_copy (SMIN, V2DFmode, operands);})(define_insn "*sminv2df3_finite"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(smin:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && flag_finite_math_only   && ix86_binary_operator_ok (SMIN, V2DFmode, operands)"  "minpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "*sminv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(smin:V2DF (match_operand:V2DF 1 "register_operand" "0")		   (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "minpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "*sse2_vmsminv2df3_finite"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (smin:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2 && flag_finite_math_only   && ix86_binary_operator_ok (SMIN, V2DFmode, operands)"  "minsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])

⌨️ 快捷键说明

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