Skip to content

Commit

Permalink
target-i386: Enable CR4/XCR0 features for user-mode
Browse files Browse the repository at this point in the history
Signed-off-by: Richard Henderson <rth@twiddle.net>
  • Loading branch information
rth7680 committed Feb 15, 2016
1 parent 7d117ce commit a114d25
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions target-i386/cpu.c
Expand Up @@ -2643,6 +2643,8 @@ static void x86_cpu_reset(CPUState *s)
X86CPU *cpu = X86_CPU(s);
X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
CPUX86State *env = &cpu->env;
target_ulong cr4;
uint64_t xcr0;
int i;

xcc->parent_reset(s);
Expand Down Expand Up @@ -2702,7 +2704,8 @@ static void x86_cpu_reset(CPUState *s)
cpu_set_fpuc(env, 0x37f);

env->mxcsr = 0x1f80;
env->xstate_bv = XSTATE_FP | XSTATE_SSE;
/* All units are in INIT state. */
env->xstate_bv = 0;

env->pat = 0x0007040600070406ULL;
env->msr_ia32_misc_enable = MSR_IA32_MISC_ENABLE_DEFAULT;
Expand All @@ -2713,7 +2716,24 @@ static void x86_cpu_reset(CPUState *s)
cpu_breakpoint_remove_all(s, BP_CPU);
cpu_watchpoint_remove_all(s, BP_CPU);

env->xcr0 = 1;
cr4 = 0;
xcr0 = XSTATE_FP;

#ifdef CONFIG_USER_ONLY
/* Enable all the features for user-mode. */
if (env->features[FEAT_1_EDX] & CPUID_SSE) {
xcr0 |= XSTATE_SSE;
}
if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_MPX) {
xcr0 |= XSTATE_BNDREGS | XSTATE_BNDCSR;
}
if (env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE) {
cr4 |= CR4_OSFXSR_MASK | CR4_OSXSAVE_MASK;
}
#endif

env->xcr0 = xcr0;
cpu_x86_update_cr4(env, cr4);

/*
* SDM 11.11.5 requires:
Expand Down

0 comments on commit a114d25

Please sign in to comment.