diff options
Diffstat (limited to 'helper-i386.c')
-rw-r--r-- | helper-i386.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/helper-i386.c b/helper-i386.c index fef7c351e6..72b75a5c21 100644 --- a/helper-i386.c +++ b/helper-i386.c @@ -947,6 +947,45 @@ void helper_rdtsc(void) EDX = val >> 32; } +void helper_wrmsr(void) +{ + switch(ECX) { + case MSR_IA32_SYSENTER_CS: + env->sysenter_cs = EAX & 0xffff; + break; + case MSR_IA32_SYSENTER_ESP: + env->sysenter_esp = EAX; + break; + case MSR_IA32_SYSENTER_EIP: + env->sysenter_eip = EAX; + break; + default: + /* XXX: exception ? */ + break; + } +} + +void helper_rdmsr(void) +{ + switch(ECX) { + case MSR_IA32_SYSENTER_CS: + EAX = env->sysenter_cs; + EDX = 0; + break; + case MSR_IA32_SYSENTER_ESP: + EAX = env->sysenter_esp; + EDX = 0; + break; + case MSR_IA32_SYSENTER_EIP: + EAX = env->sysenter_eip; + EDX = 0; + break; + default: + /* XXX: exception ? */ + break; + } +} + void helper_lsl(void) { unsigned int selector, limit; |