i386: Emulate MMX abs<mode>2 with SSE
authorH.J. Lu <hongjiu.lu@intel.com>
Wed, 15 May 2019 15:28:04 +0000 (15:28 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 15 May 2019 15:28:04 +0000 (08:28 -0700)
Emulate MMX abs<mode>2 with SSE.  Only SSE register source operand is
allowed.

PR target/89021
* config/i386/sse.md (abs<mode>2): Add SSE emulation.

From-SVN: r271248

gcc/ChangeLog
gcc/config/i386/sse.md

index f773f24d623c1c070a61da5709b4c416de034386..24babbce66cb1014cf9a40f07dd3e0e64231de9f 100644 (file)
@@ -1,3 +1,8 @@
+2019-05-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/89021
+       * config/i386/sse.md (abs<mode>2): Add SSE emulation.
+
 2019-05-15  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/89021
index b68da8ad285e2517d0ea88c488d9bd2be0b83528..11875adb7810fae75fe1d7f0b4c07936ce0cb888 100644 (file)
 })
 
 (define_insn "abs<mode>2"
-  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")
+  [(set (match_operand:MMXMODEI 0 "register_operand" "=y,Yv")
        (abs:MMXMODEI
-         (match_operand:MMXMODEI 1 "nonimmediate_operand" "ym")))]
-  "TARGET_SSSE3"
-  "pabs<mmxvecsize>\t{%1, %0|%0, %1}";
-  [(set_attr "type" "sselog1")
+         (match_operand:MMXMODEI 1 "register_mmxmem_operand" "ym,Yv")))]
+  "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSSE3"
+  "@
+   pabs<mmxvecsize>\t{%1, %0|%0, %1}
+   %vpabs<mmxvecsize>\t{%1, %0|%0, %1}"
+  [(set_attr "mmx_isa" "native,x64")
+   (set_attr "type" "sselog1")
    (set_attr "prefix_rep" "0")
    (set_attr "prefix_extra" "1")
    (set (attr "prefix_rex") (symbol_ref "x86_extended_reg_mentioned_p (insn)"))
-   (set_attr "mode" "DI")])
+   (set_attr "mode" "DI,TI")])
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;