re PR bootstrap/49104 (bootstrap failure on AMD K6-2 with illegal instruction (cmove) in stage2)

PR target/49104
	* config/i386/cpuid.h (bit_MMXEXT): New define.

libcpp/ChangeLog:

2011-05-22  Uros Bizjak  <ubizjak@gmail.com>

	PR target/49104
	* lex.c (init_vectorized_lexer): Do not set "minimum" when __3dNOW_A__
	is defined.  Check bit_MMXEXT and bit_CMOV to use search_line_mmx.

From-SVN: r174032
This commit is contained in:
Uros Bizjak
2011-05-22 20:53:32 +02:00
parent 7a1db261de
commit ef230b3836
4 changed files with 17 additions and 7 deletions
+6
View File
@@ -1,3 +1,9 @@
2011-05-22 Uros Bizjak <ubizjak@gmail.com>
PR target/49104
* lex.c (init_vectorized_lexer): Do not set "minimum" when __3dNOW_A__
is defined. Check bit_MMXEXT and bit_CMOV to use search_line_mmx.
2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* system.h (ENUM_BITFIELD): Remove.
+3 -3
View File
@@ -294,7 +294,7 @@ static const char repl_chars[4][16] __attribute__((aligned(16))) = {
/* A version of the fast scanner using MMX vectorized byte compare insns.
This uses the PMOVMSKB instruction which was introduced with "MMX2",
which was packaged into SSE1; it is also present in the AMD 3dNOW-A
which was packaged into SSE1; it is also present in the AMD MMX
extension. Mark the function as using "sse" so that we emit a real
"emms" instruction, rather than the 3dNOW "femms" instruction. */
@@ -488,7 +488,7 @@ init_vectorized_lexer (void)
minimum = 3;
#elif defined(__SSE2__)
minimum = 2;
#elif defined(__SSE__) || defined(__3dNOW_A__)
#elif defined(__SSE__)
minimum = 1;
#endif
@@ -505,7 +505,7 @@ init_vectorized_lexer (void)
}
else if (__get_cpuid (0x80000001, &dummy, &dummy, &dummy, &edx))
{
if (minimum == 1 || edx & bit_3DNOWP)
if (minimum == 1 || (edx & (bit_MMXEXT | bit_CMOV)))
impl = search_line_mmx;
}