📄 sse.md
字号:
(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 + -