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

📄 sse.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn "sse2_vmsminv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (smin:V2DF (match_operand:V2DF 1 "register_operand" "0")		     (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2"  "minsd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "DF")])(define_insn "sse3_addsubv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (plus:V2DF	    (match_operand:V2DF 1 "register_operand" "0")	    (match_operand:V2DF 2 "nonimmediate_operand" "xm"))	  (minus:V2DF (match_dup 1) (match_dup 2))	  (const_int 1)))]  "TARGET_SSE3"  "addsubpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "sse3_haddv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_concat:V2DF	  (plus:DF	    (vec_select:DF	      (match_operand:V2DF 1 "register_operand" "0")	      (parallel [(const_int 0)]))	    (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))	  (plus:DF	    (vec_select:DF	      (match_operand:V2DF 2 "nonimmediate_operand" "xm")	      (parallel [(const_int 0)]))	    (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]  "TARGET_SSE3"  "haddpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")])(define_insn "sse3_hsubv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_concat:V2DF	  (minus:DF	    (vec_select:DF	      (match_operand:V2DF 1 "register_operand" "0")	      (parallel [(const_int 0)]))	    (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))	  (minus:DF	    (vec_select:DF	      (match_operand:V2DF 2 "nonimmediate_operand" "xm")	      (parallel [(const_int 0)]))	    (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]  "TARGET_SSE3"  "hsubpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseadd")   (set_attr "mode" "V2DF")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel double-precision floating point comparisons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "sse2_maskcmpv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(match_operator:V2DF 3 "sse_comparison_operator"		[(match_operand:V2DF 1 "register_operand" "0")		 (match_operand:V2DF 2 "nonimmediate_operand" "xm")]))]  "TARGET_SSE2"  "cmp%D3pd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssecmp")   (set_attr "mode" "V2DF")])(define_insn "sse2_vmmaskcmpv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(vec_merge:V2DF	  (match_operator:V2DF 3 "sse_comparison_operator"		[(match_operand:V2DF 1 "register_operand" "0")		 (match_operand:V2DF 2 "nonimmediate_operand" "xm")])	  (match_dup 1)	  (const_int 1)))]  "TARGET_SSE2"  "cmp%D3sd\t{%2, %0|%0, %2}"  [(set_attr "type" "ssecmp")   (set_attr "mode" "DF")])(define_insn "sse2_comi"  [(set (reg:CCFP FLAGS_REG)	(compare:CCFP	  (vec_select:DF	    (match_operand:V2DF 0 "register_operand" "x")	    (parallel [(const_int 0)]))	  (vec_select:DF	    (match_operand:V2DF 1 "nonimmediate_operand" "xm")	    (parallel [(const_int 0)]))))]  "TARGET_SSE2"  "comisd\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecomi")   (set_attr "mode" "DF")])(define_insn "sse2_ucomi"  [(set (reg:CCFPU FLAGS_REG)	(compare:CCFPU	  (vec_select:DF	    (match_operand:V2DF 0 "register_operand" "x")	    (parallel [(const_int 0)]))	  (vec_select:DF	    (match_operand:V2DF 1 "nonimmediate_operand" "xm")	    (parallel [(const_int 0)]))))]  "TARGET_SSE2"  "ucomisd\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecomi")   (set_attr "mode" "DF")]);; APPLE LOCAL begin mainline April 14, 2005 Radar 4053179(define_expand "vcondv2df"  [(set (match_operand:V2DF 0 "register_operand" "")        (if_then_else:V2DF          (match_operator 3 ""            [(match_operand:V2DF 4 "nonimmediate_operand" "")             (match_operand:V2DF 5 "nonimmediate_operand" "")])          (match_operand:V2DF 1 "general_operand" "")          (match_operand:V2DF 2 "general_operand" "")))]  "TARGET_SSE2"{  if (ix86_expand_fp_vcond (operands))    DONE;  else    FAIL;});; APPLE LOCAL end mainline April 14, 2005 Radar 4053179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel double-precision floating point logical operations;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_expand "andv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(and:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		  (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (AND, V2DFmode, operands);")(define_insn "*andv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(and:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		  (match_operand:V2DF 2 "nonimmediate_operand" "xm")))];; APPLE LOCAL  mainline April 14, 2005 Radar 4053179  "TARGET_SSE2 && ix86_binary_operator_ok (AND, V2DFmode, operands)"  "andpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_insn "sse2_nandv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(and:V2DF (not:V2DF (match_operand:V2DF 1 "register_operand" "0"))		  (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "andnpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_expand "iorv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(ior:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		  (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (IOR, V2DFmode, operands);")(define_insn "*iorv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(ior:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		  (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && ix86_binary_operator_ok (IOR, V2DFmode, operands)"  "orpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_expand "xorv2df3"  [(set (match_operand:V2DF 0 "register_operand" "")	(xor:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "")		  (match_operand:V2DF 2 "nonimmediate_operand" "")))]  "TARGET_SSE2"  "ix86_fixup_binary_operands_no_copy (XOR, V2DFmode, operands);")(define_insn "*xorv2df3"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(xor:V2DF (match_operand:V2DF 1 "nonimmediate_operand" "%0")		  (match_operand:V2DF 2 "nonimmediate_operand" "xm")))]  "TARGET_SSE2 && ix86_binary_operator_ok (XOR, V2DFmode, operands)"  "xorpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")]);; APPLE LOCAL begin mainline April 14, 2005 Radar 4053179;; Also define scalar versions.  These are used for abs, neg, and;; conditional move.  Using subregs into vector modes causes regiser;; allocation lossage.  These patterns do not allow memory operands;; because the native instructions read the full 128-bits.(define_insn "*anddf3"  [(set (match_operand:DF 0 "register_operand" "=x")       (and:DF (match_operand:DF 1 "register_operand" "0")               (match_operand:DF 2 "register_operand" "x")))]  "TARGET_SSE2"  "andpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_insn "*nanddf3"  [(set (match_operand:DF 0 "register_operand" "=x")       (and:DF (not:DF (match_operand:DF 1 "register_operand" "0"))               (match_operand:DF 2 "register_operand" "x")))]  "TARGET_SSE2"  "andnpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_insn "*iordf3"  [(set (match_operand:DF 0 "register_operand" "=x")       (ior:DF (match_operand:DF 1 "register_operand" "0")               (match_operand:DF 2 "register_operand" "x")))]  "TARGET_SSE2"  "orpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")])(define_insn "*xordf3"  [(set (match_operand:DF 0 "register_operand" "=x")       (xor:DF (match_operand:DF 1 "register_operand" "0")               (match_operand:DF 2 "register_operand" "x")))]  "TARGET_SSE2"  "xorpd\t{%2, %0|%0, %2}"  [(set_attr "type" "sselog")   (set_attr "mode" "V2DF")]);; APPLE LOCAL end mainline April 14, 2005 Radar 4053179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel double-precision floating point conversion operations;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "sse2_cvtpi2pd"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(float:V2DF (match_operand:V2SI 1 "nonimmediate_operand" "ym")))]  "TARGET_SSE2"  "cvtpi2pd\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "V2DF")])(define_insn "sse2_cvtpd2pi"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(unspec:V2SI [(match_operand:V2DF 1 "nonimmediate_operand" "xm")]		     UNSPEC_FIX_NOTRUNC))]  "TARGET_SSE2"  "cvtpd2pi\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "DI")])(define_insn "sse2_cvttpd2pi"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "xm")))]  "TARGET_SSE2"  "cvttpd2pi\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "TI")])(define_insn "sse2_cvtsi2sd"  [(set (match_operand:V2DF 0 "register_operand" "=x,x")	(vec_merge:V2DF	  (vec_duplicate:V2DF	    (float:DF (match_operand:SI 2 "nonimmediate_operand" "r,m")))	  (match_operand:V2DF 1 "register_operand" "0,0")	  (const_int 1)))]  "TARGET_SSE2"  "cvtsi2sd\t{%2, %0|%0, %2}"  [(set_attr "type" "sseicvt")   (set_attr "mode" "DF")   (set_attr "athlon_decode" "double,direct")])(define_insn "sse2_cvtsi2sdq"  [(set (match_operand:V2DF 0 "register_operand" "=x,x")	(vec_merge:V2DF	  (vec_duplicate:V2DF	    (float:DF (match_operand:DI 2 "nonimmediate_operand" "r,m")))	  (match_operand:V2DF 1 "register_operand" "0,0")	  (const_int 1)))]  "TARGET_SSE2 && TARGET_64BIT"  "cvtsi2sdq\t{%2, %0|%0, %2}"  [(set_attr "type" "sseicvt")   (set_attr "mode" "DF")   (set_attr "athlon_decode" "double,direct")])(define_insn "sse2_cvtsd2si"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(unspec:SI	  [(vec_select:DF	     (match_operand:V2DF 1 "nonimmediate_operand" "x,m")	     (parallel [(const_int 0)]))]	  UNSPEC_FIX_NOTRUNC))]  "TARGET_SSE2"  "cvtsd2si\t{%1, %0|%0, %1}"  [(set_attr "type" "sseicvt")   (set_attr "athlon_decode" "double,vector")   (set_attr "mode" "SI")])(define_insn "sse2_cvtsd2siq"  [(set (match_operand:DI 0 "register_operand" "=r,r")	(unspec:DI	  [(vec_select:DF	     (match_operand:V2DF 1 "nonimmediate_operand" "x,m")	     (parallel [(const_int 0)]))]	  UNSPEC_FIX_NOTRUNC))]  "TARGET_SSE2 && TARGET_64BIT"  "cvtsd2siq\t{%1, %0|%0, %1}"  [(set_attr "type" "sseicvt")   (set_attr "athlon_decode" "double,vector")   (set_attr "mode" "DI")])(define_insn "sse2_cvttsd2si"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(fix:SI	  (vec_select:DF	    (match_operand:V2DF 1 "nonimmediate_operand" "x,m")	    (parallel [(const_int 0)]))))]  "TARGET_SSE2"  "cvttsd2si\t{%1, %0|%0, %1}"  [(set_attr "type" "sseicvt")   (set_attr "mode" "SI")   (set_attr "athlon_decode" "double,vector")])(define_insn "sse2_cvttsd2siq"  [(set (match_operand:DI 0 "register_operand" "=r,r")	(fix:DI	  (vec_select:DF	    (match_operand:V2DF 1 "nonimmediate_operand" "x,m")	    (parallel [(const_int 0)]))))]  "TARGET_SSE2 && TARGET_64BIT"  "cvttsd2siq\t{%1, %0|%0, %1}"  [(set_attr "type" "sseicvt")   (set_attr "mode" "DI")   (set_attr "athlon_decode" "double,vector")])(define_insn "sse2_cvtdq2pd"  [(set (match_operand:V2DF 0 "register_operand" "=x")	(float:V2DF	  (vec_select:V2SI	    (match_operand:V4SI 1 "nonimmediate_operand" "xm")	    (parallel [(const_int 0) (const_int 1)]))))]  "TARGET_SSE2"  "cvtdq2pd\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "V2DF")])(define_expand "sse2_cvtpd2dq"  [(set (match_operand:V4SI 0 "register_operand" "")	(vec_concat:V4SI	  (unspec:V2SI [(match_operand:V2DF 1 "nonimmediate_operand" "")]		       UNSPEC_FIX_NOTRUNC)	  (match_dup 2)))]  "TARGET_SSE2"  "operands[2] = CONST0_RTX (V2SImode);")(define_insn "*sse2_cvtpd2dq"  [(set (match_operand:V4SI 0 "register_operand" "=x")	(vec_concat:V4SI	  (unspec:V2SI [(match_operand:V2DF 1 "nonimmediate_operand" "xm")]		       UNSPEC_FIX_NOTRUNC)	  (match_operand:V2SI 2 "const0_operand" "")))]  "TARGET_SSE2"  "cvtpd2dq\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "TI")])(define_expand "sse2_cvttpd2dq"  [(set (match_operand:V4SI 0 "register_operand" "")	(vec_concat:V4SI	  (fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" ""))	  (match_dup 2)))]  "TARGET_SSE2"  "operands[2] = CONST0_RTX (V2SImode);")(define_insn "*sse2_cvttpd2dq"  [(set (match_operand:V4SI 0 "register_operand" "=x")	(vec_concat:V4SI	  (fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "xm"))	  (match_operand:V2SI 2 "const0_operand" "")))]  "TARGET_SSE2"  "cvttpd2dq\t{%1, %0|%0, %1}"  [(set_attr "typ

⌨️ 快捷键说明

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