]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
xmmintrin.h (enum _mm_hint): Correct hint value.
authorUros Bizjak <uros@gcc.gnu.org>
Mon, 3 Mar 2014 23:24:12 +0000 (00:24 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 3 Mar 2014 23:24:12 +0000 (00:24 +0100)
* config/i386/xmmintrin.h (enum _mm_hint) <_MM_HINT_ET0>: Correct
hint value.
(_mm_prefetch): Move out of GCC target("sse") pragma.
* config/i386/prfchwintrin.h (_m_prefetchw): Move out of
GCC target("prfchw") pragma.
* config/i386/i386.md (prefetch): Emit prefetchwt1 only
for locality <= 2.
* config/i386/i386.c (ix86_option_override_internal): Enable
-mprfchw with -mprefetchwt1.

From-SVN: r208296

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/prfchwintrin.h
gcc/config/i386/xmmintrin.h

index 77b1e0358c3f43b3de5bf7fbeceecee2b4f7a526..6f5bd57bef0b72e7b9002b6f0bd4dbd0444d858a 100644 (file)
@@ -1,3 +1,15 @@
+2014-03-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/xmmintrin.h (enum _mm_hint) <_MM_HINT_ET0>: Correct
+       hint value.
+       (_mm_prefetch): Move out of GCC target("sse") pragma.
+       * config/i386/prfchwintrin.h (_m_prefetchw): Move out of
+       GCC target("prfchw") pragma.
+       * config/i386/i386.md (prefetch): Emit prefetchwt1 only
+       for locality <= 2.
+       * config/i386/i386.c (ix86_option_override_internal): Enable
+       -mprfchw with -mprefetchwt1.
+
 2014-03-03  Joern Rennecke  <joern.rennecke@embecosm.com>
 
        * config/arc/arc.md (casesi_load) <length attribute alternative 0>:
@@ -35,7 +47,7 @@
        * doc/avr-mmcu.texi: Regenerate.
 
 2014-03-03  Tobias Grosser  <tobias@grosser.es>
-       Mircea Namolaru  <mircea.namolaru@inria.fr>
+           Mircea Namolaru  <mircea.namolaru@inria.fr>
 
        PR tree-optimization/58028
        * graphite-clast-to-gimple.c (set_cloog_options): Don't remove
index 4e6761b27689b07a57bca367a04dd80afa513f02..13e873a2886c4203f0fe1c94f9800e4b81eb47e8 100644 (file)
@@ -3874,8 +3874,9 @@ ix86_option_override_internal (bool main_args_p,
       || (TARGET_PRFCHW && !TARGET_3DNOW_P (opts->x_ix86_isa_flags)))
     x86_prefetch_sse = true;
 
-  /* Enable prefetch{,w} instructions for -m3dnow.  */
-  if (TARGET_3DNOW_P (opts->x_ix86_isa_flags))
+  /* Enable prefetch{,w} instructions for -m3dnow and -mprefetchwt1.  */
+  if (TARGET_3DNOW_P (opts->x_ix86_isa_flags)
+      || TARGET_PREFETCHWT1_P (opts->x_ix86_isa_flags))
     opts->x_ix86_isa_flags
       |= OPTION_MASK_ISA_PRFCHW & ~opts->x_ix86_isa_flags_explicit;
 
index b9f13206553c65c9236a906d94d5343574046352..4ccb3a5e6feccca662845dc55db77a7916e64f93 100644 (file)
      supported by SSE counterpart or the SSE prefetch is not available
      (K6 machines).  Otherwise use SSE prefetch as it allows specifying
      of locality.  */
-  if (TARGET_PREFETCHWT1 && write)
+  if (TARGET_PREFETCHWT1 && write && locality <= 2)
     operands[2] = const2_rtx;
   else if (TARGET_PRFCHW && (write || !TARGET_PREFETCH_SSE))
     operands[2] = GEN_INT (3);
index 5c07c8606b585195906f1f5bf2535f9d2bce44a2..b2f5772ec2212067bbc0364b213165483155af25 100644 (file)
 # error "Never use <prfchwintrin.h> directly; include <x86intrin.h> or <mm3dnow.h> instead."
 #endif
 
-
 #ifndef _PRFCHWINTRIN_H_INCLUDED
 #define _PRFCHWINTRIN_H_INCLUDED
 
-#ifndef __PRFCHW__
-#pragma GCC push_options
-#pragma GCC target("prfchw")
-#define __DISABLE_PRFCHW__
-#endif /* __PRFCHW__ */
-
 extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _m_prefetchw (void *__P)
 {
   __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */);
 }
 
-#ifdef __DISABLE_PRFCHW__
-#undef __DISABLE_PRFCHW__
-#pragma GCC pop_options
-#endif /* __DISABLE_PRFCHW__ */
-
 #endif /* _PRFCHWINTRIN_H_INCLUDED */
index 5967d7ed1e61f0511bfac984f6891e3abf1c16c3..023843904aebd304d3d71f0d7bceb19e392935d0 100644 (file)
 /* Get _mm_malloc () and _mm_free ().  */
 #include <mm_malloc.h>
 
+/* Constants for use with _mm_prefetch.  */
+enum _mm_hint
+{
+  /* _MM_HINT_ET is _MM_HINT_T with set 3rd bit.  */
+  _MM_HINT_ET0 = 7,
+  _MM_HINT_ET1 = 6,
+  _MM_HINT_T0 = 3,
+  _MM_HINT_T1 = 2,
+  _MM_HINT_T2 = 1,
+  _MM_HINT_NTA = 0
+};
+
+/* Loads one cache line from address P to a location "closer" to the
+   processor.  The selector I specifies the type of prefetch operation.  */
+#ifdef __OPTIMIZE__
+extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_prefetch (const void *__P, enum _mm_hint __I)
+{
+  __builtin_prefetch (__P, (__I & 0x4) >> 2, __I & 0x3);
+}
+#else
+#define _mm_prefetch(P, I) \
+  __builtin_prefetch ((P), ((I & 0x4) >> 2), (I & 0x3))
+#endif
+
 #ifndef __SSE__
 #pragma GCC push_options
 #pragma GCC target("sse")
@@ -50,18 +75,6 @@ typedef float __v4sf __attribute__ ((__vector_size__ (16)));
 #define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
  (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
 
-/* Constants for use with _mm_prefetch.  */
-enum _mm_hint
-{
-  /* _MM_HINT_ET is _MM_HINT_T with set 3rd bit.  */
-  _MM_HINT_ET0 = 5,
-  _MM_HINT_ET1 = 6,
-  _MM_HINT_T0 = 3,
-  _MM_HINT_T1 = 2,
-  _MM_HINT_T2 = 1,
-  _MM_HINT_NTA = 0
-};
-
 /* Bits in the MXCSR.  */
 #define _MM_EXCEPT_MASK       0x003f
 #define _MM_EXCEPT_INVALID    0x0001
@@ -1188,19 +1201,6 @@ _m_psadbw (__m64 __A, __m64 __B)
   return _mm_sad_pu8 (__A, __B);
 }
 
-/* Loads one cache line from address P to a location "closer" to the
-   processor.  The selector I specifies the type of prefetch operation.  */
-#ifdef __OPTIMIZE__
-extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_prefetch (const void *__P, enum _mm_hint __I)
-{
-  __builtin_prefetch (__P, (__I & 0x4) >> 2, __I & 0x3);
-}
-#else
-#define _mm_prefetch(P, I) \
-  __builtin_prefetch ((P), ((I & 0x4) >> 2), (I & 0x3))
-#endif
-
 /* Stores the data in A to the address P without polluting the caches.  */
 extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_stream_pi (__m64 *__P, __m64 __A)