On 2/10/19, H.J. Lu <hjl.to...@gmail.com> wrote:
> Emulate MMX mmx_pextrw with SSE.  Only SSE register source operand is
> allowed.
>
>       PR target/89021
>       * config/i386/mmx.md (mmx_pextrw): Add SSE emulation.
> ---
>  gcc/config/i386/mmx.md | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md
> index dc81d7f45df..57669018d0c 100644
> --- a/gcc/config/i386/mmx.md
> +++ b/gcc/config/i386/mmx.md
> @@ -1349,16 +1349,18 @@
>     (set_attr "mode" "DI")])
>
>  (define_insn "mmx_pextrw"
> -  [(set (match_operand:SI 0 "register_operand" "=r")
> +  [(set (match_operand:SI 0 "register_operand" "=r,r")
>          (zero_extend:SI
>         (vec_select:HI
> -         (match_operand:V4HI 1 "register_operand" "y")
> -         (parallel [(match_operand:SI 2 "const_0_to_3_operand" "n")]))))]
> -  "TARGET_SSE || TARGET_3DNOW_A"
> -  "pextrw\t{%2, %1, %0|%0, %1, %2}"
> -  [(set_attr "type" "mmxcvt")
> +         (match_operand:V4HI 1 "register_operand" "y,Yv")
> +         (parallel [(match_operand:SI 2 "const_0_to_3_operand" "n,n")]))))]
> +  "((TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE)
> +   || TARGET_3DNOW_A"

(TARGET_MMX  || TARGET_MMX_WITH_SSE) && (TARGET_SSE || TARGET_3DNOW_A)

Uros.

> +  "%vpextrw\t{%2, %1, %0|%0, %1, %2}"
> +  [(set_attr "mmx_isa" "native,x64")
> +   (set_attr "type" "mmxcvt,sselog1")
>     (set_attr "length_immediate" "1")
> -   (set_attr "mode" "DI")])
> +   (set_attr "mode" "DI,TI")])
>
>  (define_expand "mmx_pshufw"
>    [(match_operand:V4HI 0 "register_operand")
> --
> 2.20.1
>
>

Reply via email to