Add IA MCU support to x86intrin.h
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 3 Jul 2015 12:25:10 +0000 (12:25 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 3 Jul 2015 12:25:10 +0000 (05:25 -0700)
x86intrin.h has useful intrinsics for instructions for IA MCU.  This
patch adds __iamcu__ check to x86intrin.h and ia32intrin.h.

gcc/

PR target/66746.
* config/i386/ia32intrin.h (__crc32b): Don't define if __iamcu__
is defined.
(__crc32w): Likewise.
(__crc32d): Likewise.
(__rdpmc): Likewise.
(__rdtscp): Likewise.
(_rdpmc): Likewise.
(_rdtscp): Likewise.
* config/i386/x86intrin.h: Only include ia32intrin.h if __iamcu__
is defined.

gcc/testsuite/

PR target/66746.
* gcc.target/i386/pr66746.c: New file.

From-SVN: r225376

gcc/ChangeLog
gcc/config/i386/ia32intrin.h
gcc/config/i386/x86intrin.h
gcc/testsuite/ChangeLog

index 821ffbc..0335921 100644 (file)
@@ -1,3 +1,17 @@
+2015-07-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/66746.
+       * config/i386/ia32intrin.h (__crc32b): Don't define if __iamcu__
+       is defined.
+       (__crc32w): Likewise.
+       (__crc32d): Likewise.
+       (__rdpmc): Likewise.
+       (__rdtscp): Likewise.
+       (_rdpmc): Likewise.
+       (_rdtscp): Likewise.
+       * config/i386/x86intrin.h: Only include ia32intrin.h if __iamcu__
+       is defined.
+
 2015-07-03  Richard Biener  <rguenther@suse.de>
 
        * fold-const.c (fold_mathfn_compare): Remove.
index 1f728c8..b8d1c31 100644 (file)
@@ -49,6 +49,8 @@ __bswapd (int __X)
   return __builtin_bswap32 (__X);
 }
 
+#ifndef __iamcu__
+
 #ifndef __SSE4_2__
 #pragma GCC push_options
 #pragma GCC target("sse4.2")
@@ -82,6 +84,8 @@ __crc32d (unsigned int __C, unsigned int __V)
 #pragma GCC pop_options
 #endif /* __DISABLE_SSE4_2__ */
 
+#endif /* __iamcu__ */
+
 /* 32bit popcnt */
 extern __inline int
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -90,6 +94,8 @@ __popcntd (unsigned int __X)
   return __builtin_popcount (__X);
 }
 
+#ifndef __iamcu__
+
 /* rdpmc */
 extern __inline unsigned long long
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -98,6 +104,8 @@ __rdpmc (int __S)
   return __builtin_ia32_rdpmc (__S);
 }
 
+#endif /* __iamcu__ */
+
 /* rdtsc */
 extern __inline unsigned long long
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -106,6 +114,8 @@ __rdtsc (void)
   return __builtin_ia32_rdtsc ();
 }
 
+#ifndef __iamcu__
+
 /* rdtscp */
 extern __inline unsigned long long
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -114,6 +124,8 @@ __rdtscp (unsigned int *__A)
   return __builtin_ia32_rdtscp (__A);
 }
 
+#endif /* __iamcu__ */
+
 /* 8bit rol */
 extern __inline unsigned char
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -290,9 +302,11 @@ __writeeflags (unsigned int X)
 #define _bit_scan_reverse(a)   __bsrd(a)
 #define _bswap(a)              __bswapd(a)
 #define _popcnt32(a)           __popcntd(a)
+#ifndef __iamcu__
 #define _rdpmc(a)              __rdpmc(a)
-#define _rdtsc()               __rdtsc()
 #define _rdtscp(a)             __rdtscp(a)
+#endif /* __iamcu__ */
+#define _rdtsc()               __rdtsc()
 #define _rotwl(a,b)            __rolw((a), (b))
 #define _rotwr(a,b)            __rorw((a), (b))
 #define _rotl(a,b)             __rold((a), (b))
index 6f7b1f6..be0a1a1 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <ia32intrin.h>
 
+#ifndef __iamcu__
+
 #include <mmintrin.h>
 
 #include <xmmintrin.h>
@@ -86,4 +88,7 @@
 #include <xsavecintrin.h>
 
 #include <mwaitxintrin.h>
+
+#endif /* __iamcu__ */
+
 #endif /* _X86INTRIN_H_INCLUDED */
index aede20a..0534497 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/66746.
+       * gcc.target/i386/pr66746.c: New file.
+
 2015-07-03  Christophe Lyon  <christophe.lyon@linaro.org>
 
        * gcc.target/aarch64/advsimd-intrinsics/vget_lane.c: New testcase.