summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2014-02-20 19:42:53 +0000
committerPeter Maydell <peter.maydell@linaro.org>2014-02-21 10:39:10 +0000
commit774d566cdbebb916af9760dac629aa7c1adf9d3d (patch)
tree3b4f5fec2d8742be83f12052dfcbcdf52bf8614f
parent2ca92bb993991d6dcb8f68751aca9fc2ec2b8867 (diff)
downloadqemu-774d566cdbebb916af9760dac629aa7c1adf9d3d.tar.gz
qemu-774d566cdbebb916af9760dac629aa7c1adf9d3d.tar.bz2
qemu-774d566cdbebb916af9760dac629aa7c1adf9d3d.zip
tcg/i386: Fix build for systems without working cpuid.h (MacOSX, Win32)
Win32 doesn't have a cpuid.h, and MacOSX may have one but without the __cpuid() function we use, which means that commit 9d2eec20 broke the build for those platforms. Fix this by tightening up our configure cpuid.h check to test that the functions we need are present, and adding some missing #ifdef guards in tcg/i386/tcg-target.c. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net>
-rwxr-xr-xconfigure13
-rw-r--r--tcg/i386/tcg-target.c4
2 files changed, 15 insertions, 2 deletions
diff --git a/configure b/configure
index 4648117957..79eb54c3ef 100755
--- a/configure
+++ b/configure
@@ -3564,7 +3564,18 @@ cpuid_h=no
cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
- return 0;
+ unsigned a, b, c, d;
+ int max = __get_cpuid_max(0, 0);
+
+ if (max >= 1) {
+ __cpuid(1, a, b, c, d);
+ }
+
+ if (max >= 7) {
+ __cpuid_count(7, 0, a, b, c, d);
+ }
+
+ return 0;
}
EOF
if compile_prog "" "" ; then
diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
index fef1717418..f832282d1a 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -115,7 +115,7 @@ static const int tcg_target_call_oarg_regs[] = {
is available. */
#if TCG_TARGET_REG_BITS == 64
# define have_cmov 1
-#elif defined(CONFIG_CPUID_H)
+#elif defined(CONFIG_CPUID_H) && defined(bit_CMOV)
static bool have_cmov;
#else
# define have_cmov 0
@@ -2295,6 +2295,7 @@ static void tcg_target_qemu_prologue(TCGContext *s)
static void tcg_target_init(TCGContext *s)
{
+#ifdef CONFIG_CPUID_H
unsigned a, b, c, d;
int max = __get_cpuid_max(0, 0);
@@ -2323,6 +2324,7 @@ static void tcg_target_init(TCGContext *s)
have_bmi2 = (b & bit_BMI2) != 0;
#endif
}
+#endif
if (TCG_TARGET_REG_BITS == 64) {
tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffff);