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

📄 sse.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
  "TARGET_SSE"  "ix86_fixup_binary_operands_no_copy (MULT, V4SFmode, operands);")(define_insn "*mulv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(mult:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		   (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE && ix86_binary_operator_ok (MULT, V4SFmode, operands)"  "mulps\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemul")   (set_attr "mode" "V4SF")])(define_insn "sse_vmmulv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (mult:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		     (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE && ix86_binary_operator_ok (MULT, V4SFmode, operands)"  "mulss\t{%2, %0|%0, %2}"  [(set_attr "type" "ssemul")   (set_attr "mode" "SF")])(define_expand "divv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "")	(div:V4SF (match_operand:V4SF 1 "register_operand" "")		  (match_operand:V4SF 2 "nonimmediate_operand" "")))]  "TARGET_SSE"  "ix86_fixup_binary_operands_no_copy (DIV, V4SFmode, operands);")(define_insn "*divv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(div:V4SF (match_operand:V4SF 1 "register_operand" "0")		  (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE"  "divps\t{%2, %0|%0, %2}"  [(set_attr "type" "ssediv")   (set_attr "mode" "V4SF")])(define_insn "sse_vmdivv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (div:V4SF (match_operand:V4SF 1 "register_operand" "0")		    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE"  "divss\t{%2, %0|%0, %2}"  [(set_attr "type" "ssediv")   (set_attr "mode" "SF")])(define_insn "sse_rcpv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(unspec:V4SF	 [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] UNSPEC_RCP))]  "TARGET_SSE"  "rcpps\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "sse_vmrcpv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm")]		       UNSPEC_RCP)	  (match_operand:V4SF 2 "register_operand" "0")	  (const_int 1)))]  "TARGET_SSE"  "rcpss\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_insn "sse_rsqrtv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(unspec:V4SF	  [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] UNSPEC_RSQRT))]  "TARGET_SSE"  "rsqrtps\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "sse_vmrsqrtv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm")]		       UNSPEC_RSQRT)	  (match_operand:V4SF 2 "register_operand" "0")	  (const_int 1)))]  "TARGET_SSE"  "rsqrtss\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_insn "sqrtv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(sqrt:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "xm")))]  "TARGET_SSE"  "sqrtps\t{%1, %0|%0, %1}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "sse_vmsqrtv4sf2"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (sqrt:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "xm"))	  (match_operand:V4SF 2 "register_operand" "0")	  (const_int 1)))]  "TARGET_SSE"  "sqrtss\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 "smaxv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "")	(smax:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "")		   (match_operand:V4SF 2 "nonimmediate_operand" "")))]  "TARGET_SSE"{  if (!flag_finite_math_only)    operands[1] = force_reg (V4SFmode, operands[1]);  ix86_fixup_binary_operands_no_copy (SMAX, V4SFmode, operands);})(define_insn "*smaxv4sf3_finite"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(smax:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		   (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE && flag_finite_math_only   && ix86_binary_operator_ok (SMAX, V4SFmode, operands)"  "maxps\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "*smaxv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(smax:V4SF (match_operand:V4SF 1 "register_operand" "0")		   (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE"  "maxps\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "*sse_vmsmaxv4sf3_finite"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	 (smax:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	 (match_dup 1)	 (const_int 1)))]  "TARGET_SSE && flag_finite_math_only   && ix86_binary_operator_ok (SMAX, V4SFmode, operands)"  "maxss\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_insn "sse_vmsmaxv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	 (smax:V4SF (match_operand:V4SF 1 "register_operand" "0")		    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	 (match_dup 1)	 (const_int 1)))]  "TARGET_SSE"  "maxss\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_expand "sminv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "")	(smin:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "")		   (match_operand:V4SF 2 "nonimmediate_operand" "")))]  "TARGET_SSE"{  if (!flag_finite_math_only)    operands[1] = force_reg (V4SFmode, operands[1]);  ix86_fixup_binary_operands_no_copy (SMIN, V4SFmode, operands);})(define_insn "*sminv4sf3_finite"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(smin:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		   (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE && flag_finite_math_only   && ix86_binary_operator_ok (SMIN, V4SFmode, operands)"  "minps\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "*sminv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(smin:V4SF (match_operand:V4SF 1 "register_operand" "0")		   (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE"  "minps\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "V4SF")])(define_insn "*sse_vmsminv4sf3_finite"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	 (smin:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	 (match_dup 1)	 (const_int 1)))]  "TARGET_SSE && flag_finite_math_only   && ix86_binary_operator_ok (SMIN, V4SFmode, operands)"  "minss\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_insn "sse_vmsminv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	 (smin:V4SF (match_operand:V4SF 1 "register_operand" "0")		    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	 (match_dup 1)	 (const_int 1)))]  "TARGET_SSE"  "minss\t{%2, %0|%0, %2}"  [(set_attr "type" "sse")   (set_attr "mode" "SF")])(define_insn "sse3_addsubv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	  (plus:V4SF	    (match_operand:V4SF 1 "register_operand" "0")	    (match_operand:V4SF 2 "nonimmediate_operand" "xm"))	  (minus:V4SF (match_dup 1) (match_dup 2))	  (const_int 5)))]  "TARGET_SSE3"  "addsubps\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V4SF")])(define_insn "sse3_haddv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_concat:V4SF	  (vec_concat:V2SF	    (plus:SF	      (vec_select:SF 		(match_operand:V4SF 1 "register_operand" "0")		(parallel [(const_int 0)]))	      (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))	    (plus:SF	      (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))	      (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))	  (vec_concat:V2SF	    (plus:SF	      (vec_select:SF		(match_operand:V4SF 2 "nonimmediate_operand" "xm")		(parallel [(const_int 0)]))	      (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))	    (plus:SF	      (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))	      (vec_select:SF (match_dup 2) (parallel [(const_int 3)]))))))]  "TARGET_SSE3"  "haddps\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V4SF")])(define_insn "sse3_hsubv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_concat:V4SF	  (vec_concat:V2SF	    (minus:SF	      (vec_select:SF 		(match_operand:V4SF 1 "register_operand" "0")		(parallel [(const_int 0)]))	      (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))	    (minus:SF	      (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))	      (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))	  (vec_concat:V2SF	    (minus:SF	      (vec_select:SF		(match_operand:V4SF 2 "nonimmediate_operand" "xm")		(parallel [(const_int 0)]))	      (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))	    (minus:SF	      (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))	      (vec_select:SF (match_dup 2) (parallel [(const_int 3)]))))))]  "TARGET_SSE3"  "hsubps\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V4SF")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel single-precision floating point comparisons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "sse_maskcmpv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(match_operator:V4SF 3 "sse_comparison_operator"		[(match_operand:V4SF 1 "register_operand" "0")		 (match_operand:V4SF 2 "nonimmediate_operand" "xm")]))]  "TARGET_SSE"  "cmp%D3ps\t{%2, %0|%0, %2}"  [(set_attr "type" "ssecmp")   (set_attr "mode" "V4SF")])(define_insn "sse_vmmaskcmpv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(vec_merge:V4SF	 (match_operator:V4SF 3 "sse_comparison_operator"		[(match_operand:V4SF 1 "register_operand" "0")		 (match_operand:V4SF 2 "register_operand" "x")])	 (match_dup 1)	 (const_int 1)))]  "TARGET_SSE"  "cmp%D3ss\t{%2, %0|%0, %2}"  [(set_attr "type" "ssecmp")   (set_attr "mode" "SF")])(define_insn "sse_comi"  [(set (reg:CCFP FLAGS_REG)	(compare:CCFP	  (vec_select:SF	    (match_operand:V4SF 0 "register_operand" "x")	    (parallel [(const_int 0)]))	  (vec_select:SF	    (match_operand:V4SF 1 "nonimmediate_operand" "xm")	    (parallel [(const_int 0)]))))]  "TARGET_SSE"  "comiss\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecomi")   (set_attr "mode" "SF")])(define_insn "sse_ucomi"  [(set (reg:CCFPU FLAGS_REG)	(compare:CCFPU	  (vec_select:SF	    (match_operand:V4SF 0 "register_operand" "x")	    (parallel [(const_int 0)]))	  (vec_select:SF	    (match_operand:V4SF 1 "nonimmediate_operand" "xm")	    (parallel [(const_int 0)]))))]  "TARGET_SSE"  "ucomiss\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecomi")   (set_attr "mode" "SF")]);; APPLE LOCAL begin mainline April 14, 2005  Radar 4053179(define_expand "vcondv4sf"  [(set (match_operand:V4SF 0 "register_operand" "")        (if_then_else:V4SF          (match_operator 3 ""            [(match_operand:V4SF 4 "nonimmediate_operand" "")             (match_operand:V4SF 5 "nonimmediate_operand" "")])          (match_operand:V4SF 1 "general_operand" "")          (match_operand:V4SF 2 "general_operand" "")))]  "TARGET_SSE"{  if (ix86_expand_fp_vcond (operands))    DONE;  else    FAIL;});; APPLE LOCAL end mainline April 14, 2005 Radar 4053179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel single-precision floating point logical operations;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_expand "andv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "")	(and:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "")		  (match_operand:V4SF 2 "nonimmediate_operand" "")))]  "TARGET_SSE"  "ix86_fixup_binary_operands_no_copy (AND, V4SFmode, operands);")(define_insn "*andv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(and:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "%0")		  (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE && ix86_binary_operator_ok (AND, V4SFmode, operands)"  "andps\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V4SF")])(define_insn "sse_nandv4sf3"  [(set (match_operand:V4SF 0 "register_operand" "=x")	(and:V4SF (not:V4SF (match_operand:V4SF 1 "register_operand" "0"))		  (match_operand:V4SF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE"  "andnps\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V4SF")])(define_expand "iorv4sf3"

⌨️ 快捷键说明

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