On 2/9/19, H.J. Lu <[email protected]> wrote:
> Emulate MMX sse_cvtps2pi/sse_cvttps2pi with SSE.
>
> PR target/89021
> * config/i386/mmx.md (sse_cvtps2pi): Add SSE emulation.
> (sse_cvttps2pi): Likewise.
> ---
> gcc/config/i386/sse.md | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index 7d2c0367911..4321c5c46db 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -4668,26 +4668,32 @@
> (set_attr "mode" "V4SF")])
>
> (define_insn "sse_cvtps2pi"
> - [(set (match_operand:V2SI 0 "register_operand" "=y")
> + [(set (match_operand:V2SI 0 "register_operand" "=y,Yy")
> (vec_select:V2SI
> - (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm")]
> + (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm,YyBm")]
> UNSPEC_FIX_NOTRUNC)
> (parallel [(const_int 0) (const_int 1)])))]
> "TARGET_SSE"
Patterns that use MMX registers should depend on
(TARGET_MMX || TARGET_MMX_WITH_SSE).
Since the above pattern depends on MMX registers, the condition should read:
(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE.
to disable the pattern for -msse -mno-mmx on 32bit target.
All patterns that use MMX registers (especially those in sse.md)
should be reviewed for the above change.
Uros.
> - "cvtps2pi\t{%1, %0|%0, %q1}"
> - [(set_attr "type" "ssecvt")
> - (set_attr "unit" "mmx")
> + "@
> + cvtps2pi\t{%1, %0|%0, %q1}
> + %vcvtps2dq\t{%1, %0|%0, %1}"
> + [(set_attr "mmx_isa" "native,x64")
> + (set_attr "type" "ssecvt")
> + (set_attr "unit" "mmx,*")
> (set_attr "mode" "DI")])
>
> (define_insn "sse_cvttps2pi"
> - [(set (match_operand:V2SI 0 "register_operand" "=y")
> + [(set (match_operand:V2SI 0 "register_operand" "=y,Yy")
> (vec_select:V2SI
> - (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm"))
> + (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm,YyBm"))
> (parallel [(const_int 0) (const_int 1)])))]
> "TARGET_SSE"
> - "cvttps2pi\t{%1, %0|%0, %q1}"
> - [(set_attr "type" "ssecvt")
> - (set_attr "unit" "mmx")
> + "@
> + cvttps2pi\t{%1, %0|%0, %q1}
> + %vcvttps2dq\t{%1, %0|%0, %1}"
> + [(set_attr "mmx_isa" "native,x64")
> + (set_attr "type" "ssecvt")
> + (set_attr "unit" "mmx,*")
> (set_attr "prefix_rep" "0")
> (set_attr "mode" "SF")])
>
> --
> 2.20.1
>
>