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