aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2015-07-03 12:25:10 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2015-07-03 05:25:10 -0700
commit2fd98c0acf6ab7725349d26a342003b1bd07e8a0 (patch)
tree147a61707a10286355e9bdd23ff95d246142337c /gcc
parent07cdc2b892ca3969fd5d8c6a281cf77f559cea43 (diff)
downloadgcc-2fd98c0acf6ab7725349d26a342003b1bd07e8a0.zip
gcc-2fd98c0acf6ab7725349d26a342003b1bd07e8a0.tar.gz
gcc-2fd98c0acf6ab7725349d26a342003b1bd07e8a0.tar.bz2
Add IA MCU support to x86intrin.h
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/config/i386/ia32intrin.h16
-rw-r--r--gcc/config/i386/x86intrin.h5
-rw-r--r--gcc/testsuite/ChangeLog5
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 821ffbc..0335921 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/ia32intrin.h b/gcc/config/i386/ia32intrin.h
index 1f728c8..b8d1c31 100644
--- a/gcc/config/i386/ia32intrin.h
+++ b/gcc/config/i386/ia32intrin.h
@@ -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))
diff --git a/gcc/config/i386/x86intrin.h b/gcc/config/i386/x86intrin.h
index 6f7b1f6..be0a1a1 100644
--- a/gcc/config/i386/x86intrin.h
+++ b/gcc/config/i386/x86intrin.h
@@ -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 */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aede20a..05344971 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.