diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-07-07 11:30:47 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-07-07 11:30:47 +0000 |
commit | 3c1cf9fa865927759a78d476a218a7759fb38fb4 (patch) | |
tree | 3685bb1a07b7db30483ecd3282adbb321866324a /helper-i386.c | |
parent | 1f47a9223ebe3d0c9c779f72341afc10c206d574 (diff) |
dummy rdmsr and wrmsr support - xor reg, reg optimization
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@311 c046a42c-6fe2-441c-8c8c-71466251a162
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; |