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
This commit is contained in:
H.J. Lu 2015-07-03 12:25:10 +00:00 committed by H.J. Lu
parent 07cdc2b892
commit 2fd98c0acf
4 changed files with 39 additions and 1 deletions

View 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> 2015-07-03 Richard Biener <rguenther@suse.de>
* fold-const.c (fold_mathfn_compare): Remove. * fold-const.c (fold_mathfn_compare): Remove.

View File

@ -49,6 +49,8 @@ __bswapd (int __X)
return __builtin_bswap32 (__X); return __builtin_bswap32 (__X);
} }
#ifndef __iamcu__
#ifndef __SSE4_2__ #ifndef __SSE4_2__
#pragma GCC push_options #pragma GCC push_options
#pragma GCC target("sse4.2") #pragma GCC target("sse4.2")
@ -82,6 +84,8 @@ __crc32d (unsigned int __C, unsigned int __V)
#pragma GCC pop_options #pragma GCC pop_options
#endif /* __DISABLE_SSE4_2__ */ #endif /* __DISABLE_SSE4_2__ */
#endif /* __iamcu__ */
/* 32bit popcnt */ /* 32bit popcnt */
extern __inline int extern __inline int
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@ -90,6 +94,8 @@ __popcntd (unsigned int __X)
return __builtin_popcount (__X); return __builtin_popcount (__X);
} }
#ifndef __iamcu__
/* rdpmc */ /* rdpmc */
extern __inline unsigned long long extern __inline unsigned long long
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@ -98,6 +104,8 @@ __rdpmc (int __S)
return __builtin_ia32_rdpmc (__S); return __builtin_ia32_rdpmc (__S);
} }
#endif /* __iamcu__ */
/* rdtsc */ /* rdtsc */
extern __inline unsigned long long extern __inline unsigned long long
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@ -106,6 +114,8 @@ __rdtsc (void)
return __builtin_ia32_rdtsc (); return __builtin_ia32_rdtsc ();
} }
#ifndef __iamcu__
/* rdtscp */ /* rdtscp */
extern __inline unsigned long long extern __inline unsigned long long
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@ -114,6 +124,8 @@ __rdtscp (unsigned int *__A)
return __builtin_ia32_rdtscp (__A); return __builtin_ia32_rdtscp (__A);
} }
#endif /* __iamcu__ */
/* 8bit rol */ /* 8bit rol */
extern __inline unsigned char extern __inline unsigned char
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@ -290,9 +302,11 @@ __writeeflags (unsigned int X)
#define _bit_scan_reverse(a) __bsrd(a) #define _bit_scan_reverse(a) __bsrd(a)
#define _bswap(a) __bswapd(a) #define _bswap(a) __bswapd(a)
#define _popcnt32(a) __popcntd(a) #define _popcnt32(a) __popcntd(a)
#ifndef __iamcu__
#define _rdpmc(a) __rdpmc(a) #define _rdpmc(a) __rdpmc(a)
#define _rdtsc() __rdtsc()
#define _rdtscp(a) __rdtscp(a) #define _rdtscp(a) __rdtscp(a)
#endif /* __iamcu__ */
#define _rdtsc() __rdtsc()
#define _rotwl(a,b) __rolw((a), (b)) #define _rotwl(a,b) __rolw((a), (b))
#define _rotwr(a,b) __rorw((a), (b)) #define _rotwr(a,b) __rorw((a), (b))
#define _rotl(a,b) __rold((a), (b)) #define _rotl(a,b) __rold((a), (b))

View File

@ -26,6 +26,8 @@
#include <ia32intrin.h> #include <ia32intrin.h>
#ifndef __iamcu__
#include <mmintrin.h> #include <mmintrin.h>
#include <xmmintrin.h> #include <xmmintrin.h>
@ -86,4 +88,7 @@
#include <xsavecintrin.h> #include <xsavecintrin.h>
#include <mwaitxintrin.h> #include <mwaitxintrin.h>
#endif /* __iamcu__ */
#endif /* _X86INTRIN_H_INCLUDED */ #endif /* _X86INTRIN_H_INCLUDED */

View 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> 2015-07-03 Christophe Lyon <christophe.lyon@linaro.org>
* gcc.target/aarch64/advsimd-intrinsics/vget_lane.c: New testcase. * gcc.target/aarch64/advsimd-intrinsics/vget_lane.c: New testcase.