Reviewers: rossberg,
Message:
Hey Andreas,
Small bugfix, PTAL.
-- Benedikt
Description:
Fix accidential inclusion of <intrin.h> into namespace v8::internal.
Also cleanup the fallback __cpuid() implementation, and add
a comment about preserving the GOT pointer in case of PIC.
Please review this at https://codereview.chromium.org/23464014/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/cpu.cc
Index: src/cpu.cc
diff --git a/src/cpu.cc b/src/cpu.cc
index
1bae0016d63aecc2b000f48d58006577d072e608..06a03115bbe8692d4d56e8298d423f8b3b647b44
100644
--- a/src/cpu.cc
+++ b/src/cpu.cc
@@ -27,6 +27,10 @@
#include "cpu.h"
+#if V8_CC_MSVC
+#include <intrin.h> // __cpuid()
+#endif
+
#include <algorithm>
#include <cctype>
#include <cstdio>
@@ -40,33 +44,30 @@ namespace internal {
#if V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64
-#if V8_CC_MSVC
-
-#include <intrin.h> // NOLINT
-
-#elif defined(__i386__) && defined(__pic__)
+// Define __cpuid() for non-MSVC compilers.
+#if !V8_CC_MSVC
static V8_INLINE(void __cpuid(int cpu_info[4], int info_type)) {
+#if defined(__i386__) && defined(__pic__)
+ // Make sure to preserve ebx, which contains the pointer
+ // to the GOT in case we're generating PIC.
__asm__ volatile (
- "mov %%ebx, %%edi\n"
- "cpuid\n"
- "xchg %%edi, %%ebx\n"
+ "mov %%ebx, %%edi\n\t"
+ "cpuid\n\t"
+ "xchg %%edi, %%ebx\n\t"
: "=a"(cpu_info[0]), "=D"(cpu_info[1]), "=c"(cpu_info[2]),
"=d"(cpu_info[3])
: "a"(info_type)
);
-}
-
-#else // !V8_CC_MSVC || (!defined(__i386__) && !defined(__pic__))
-
-static V8_INLINE(void __cpuid(int cpu_info[4], int info_type)) {
+#else
__asm__ volatile (
"cpuid \n\t"
: "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]),
"=d"(cpu_info[3])
: "a"(info_type)
);
+#endif // defined(__i386__) && defined(__pic__)
}
-#endif
+#endif // !V8_CC_MSVC
#elif V8_HOST_ARCH_ARM || V8_HOST_ARCH_MIPS
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.