Add _mm_stream_si64.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 18 Nov 2011 19:02:45 +0000 (19:02 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 18 Nov 2011 19:02:45 +0000 (11:02 -0800)
2011-11-18  H.J. Lu  <hongjiu.lu@intel.com>

PR target/33944
* doc/extend.texi: Document __builtin_ia32_movnti64.

* config/i386/emmintrin.h (_mm_stream_si64): New.

* config/i386/i386-builtin-types.def: Add VOID_FTYPE_PLONGLONG_LONGLONG.

* config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_MOVNTI64.
(bdesc_special_args): Update __builtin_ia32_movnti.  Add
__builtin_ia32_movnti64.
(ix86_expand_special_args_builtin): Handle
VOID_FTYPE_PLONGLONG_LONGLONG.

* config/i386/i386.md (UNSPEC_MOVNTI): New.

* config/i386/sse.md (sse2_movntsi): Renamed to ...
(sse2_movnti<mode>): This.

From-SVN: r181491

gcc/ChangeLog
gcc/config/i386/emmintrin.h
gcc/config/i386/i386-builtin-types.def
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/sse.md
gcc/doc/extend.texi

index 57bba242ad32f7430fe990454f7cae29d42dd16a..2d5091df6fb6242d95d96e522896247cef5af0da 100644 (file)
@@ -1,3 +1,23 @@
+2011-11-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/33944
+       * doc/extend.texi: Document __builtin_ia32_movnti64.
+
+       * config/i386/emmintrin.h (_mm_stream_si64): New.
+
+       * config/i386/i386-builtin-types.def: Add VOID_FTYPE_PLONGLONG_LONGLONG.
+
+       * config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_MOVNTI64.
+       (bdesc_special_args): Update __builtin_ia32_movnti.  Add
+       __builtin_ia32_movnti64.
+       (ix86_expand_special_args_builtin): Handle
+       VOID_FTYPE_PLONGLONG_LONGLONG.
+
+       * config/i386/i386.md (UNSPEC_MOVNTI): New.
+
+       * config/i386/sse.md (sse2_movntsi): Renamed to ...
+       (sse2_movnti<mode>): This.
+
 2011-11-18  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/49868
index fe4cd6abaeaec16a5fc9d90c888e825a189dfa6b..07ac9f3d8aed64af33efc50c51249f9a1d5face0 100644 (file)
@@ -1418,6 +1418,14 @@ _mm_stream_si32 (int *__A, int __B)
   __builtin_ia32_movnti (__A, __B);
 }
 
+#ifdef __x86_64__
+extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_stream_si64 (long long int *__A, long long int __B)
+{
+  __builtin_ia32_movnti64 (__A, __B);
+}
+#endif
+
 extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_stream_si128 (__m128i *__A, __m128i __B)
 {
index 79fb1427787e253eb5f0cc387eeb02c79de46978..d00b05341b9a33d75ea5731d96a802058bd36b49 100644 (file)
@@ -111,6 +111,7 @@ DEF_POINTER_TYPE (PDOUBLE, DOUBLE)
 DEF_POINTER_TYPE (PFLOAT, FLOAT)
 DEF_POINTER_TYPE (PUSHORT, USHORT)
 DEF_POINTER_TYPE (PINT, INT)
+DEF_POINTER_TYPE (PLONGLONG, LONGLONG)
 DEF_POINTER_TYPE (PULONGLONG, ULONGLONG)
 DEF_POINTER_TYPE (PUNSIGNED, UNSIGNED)
 
@@ -357,6 +358,7 @@ DEF_FUNCTION_TYPE (VOID, PDOUBLE, V4DF)
 DEF_FUNCTION_TYPE (VOID, PFLOAT, V4SF)
 DEF_FUNCTION_TYPE (VOID, PFLOAT, V8SF)
 DEF_FUNCTION_TYPE (VOID, PINT, INT)
+DEF_FUNCTION_TYPE (VOID, PLONGLONG, LONGLONG)
 DEF_FUNCTION_TYPE (VOID, PULONGLONG, ULONGLONG)
 DEF_FUNCTION_TYPE (VOID, PV2SI, V2SI)
 DEF_FUNCTION_TYPE (VOID, PV2DI, V2DI)
index 993b767ee0bb31c56d5dfee2e26c29ba648cffd0..7e8f1a4225b80b8df903138810a737d872bcd39b 100644 (file)
@@ -25341,6 +25341,7 @@ enum ix86_builtins
   IX86_BUILTIN_CVTTPS2DQ,
 
   IX86_BUILTIN_MOVNTI,
+  IX86_BUILTIN_MOVNTI64,
   IX86_BUILTIN_MOVNTPD,
   IX86_BUILTIN_MOVNTDQ,
 
@@ -26423,7 +26424,8 @@ static const struct builtin_description bdesc_special_args[] =
   { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movdqu, "__builtin_ia32_storedqu", IX86_BUILTIN_STOREDQU, UNKNOWN, (int) VOID_FTYPE_PCHAR_V16QI },
   { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movntv2df, "__builtin_ia32_movntpd", IX86_BUILTIN_MOVNTPD, UNKNOWN, (int) VOID_FTYPE_PDOUBLE_V2DF },
   { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movntv2di, "__builtin_ia32_movntdq", IX86_BUILTIN_MOVNTDQ, UNKNOWN, (int) VOID_FTYPE_PV2DI_V2DI },
-  { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movntsi, "__builtin_ia32_movnti", IX86_BUILTIN_MOVNTI, UNKNOWN, (int) VOID_FTYPE_PINT_INT },
+  { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movntisi, "__builtin_ia32_movnti", IX86_BUILTIN_MOVNTI, UNKNOWN, (int) VOID_FTYPE_PINT_INT },
+  { OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_64BIT, CODE_FOR_sse2_movntidi, "__builtin_ia32_movnti64", IX86_BUILTIN_MOVNTI64, UNKNOWN, (int) VOID_FTYPE_PLONGLONG_LONGLONG },
   { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movupd, "__builtin_ia32_loadupd", IX86_BUILTIN_LOADUPD, UNKNOWN, (int) V2DF_FTYPE_PCDOUBLE },
   { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_movdqu, "__builtin_ia32_loaddqu", IX86_BUILTIN_LOADDQU, UNKNOWN, (int) V16QI_FTYPE_PCCHAR },
 
@@ -29409,6 +29411,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
     case VOID_FTYPE_PFLOAT_V4SF:
     case VOID_FTYPE_PDOUBLE_V4DF:
     case VOID_FTYPE_PDOUBLE_V2DF:
+    case VOID_FTYPE_PLONGLONG_LONGLONG:
     case VOID_FTYPE_PULONGLONG_ULONGLONG:
     case VOID_FTYPE_PINT_INT:
       nargs = 1;
index bc6025323047a54936931528c09d55f4288010f6..daf1387edfe3599263d139a1e6df43907d44e946 100644 (file)
   UNSPEC_MASKMOV
   UNSPEC_MOVMSK
   UNSPEC_MOVNT
+  UNSPEC_MOVNTI
   UNSPEC_MOVU
   UNSPEC_RCP
   UNSPEC_RSQRT
index d04902b67598fafe655404731c2ae484c67936b3..e64864aa6da9ee578deb1ef3a1edb55895d7db54 100644 (file)
    (set_attr "prefix" "maybe_vex")
    (set_attr "mode" "<sseinsnmode>")])
 
-(define_insn "sse2_movntsi"
-  [(set (match_operand:SI 0 "memory_operand" "=m")
-       (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
-                  UNSPEC_MOVNT))]
+(define_insn "sse2_movnti<mode>"
+  [(set (match_operand:SWI48 0 "memory_operand" "=m")
+       (unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r")]
+                     UNSPEC_MOVNTI))]
   "TARGET_SSE2"
   "movnti\t{%1, %0|%0, %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix_data16" "0")
-   (set_attr "mode" "V2DF")])
+   (set_attr "mode" "<MODE>")])
 
 (define_insn "<sse>_movnt<mode>"
   [(set (match_operand:VF 0 "memory_operand" "=m")
index 15238c1b39ef8900aa5ccc080d1168db48d05e2b..de483a3d354d7db810baa7b14a219644f7cd7fc1 100644 (file)
@@ -9384,6 +9384,7 @@ v2df __builtin_ia32_loadlpd (v2df, double const *)
 int __builtin_ia32_movmskpd (v2df)
 int __builtin_ia32_pmovmskb128 (v16qi)
 void __builtin_ia32_movnti (int *, int)
+void __builtin_ia32_movnti64 (long long int *, long long int)
 void __builtin_ia32_movntpd (double *, v2df)
 void __builtin_ia32_movntdq (v2df *, v2df)
 v4si __builtin_ia32_pshufd (v4si, int)