From: Avi Kivity <[EMAIL PROTECTED]> Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>
diff --git a/user/test/x86/emulator.c b/user/test/x86/emulator.c index 26c9aaa..c605518 100644 --- a/user/test/x86/emulator.c +++ b/user/test/x86/emulator.c @@ -128,14 +128,20 @@ void test_push(void *mem) report("push mem", stack_top[-3] == 0x123456789abcdeful); } +unsigned long read_cr0(void) +{ + unsigned long cr0; + + asm volatile ("mov %%cr0, %0" : "=r"(cr0)); + return cr0; +} + void test_smsw(void *mem) { unsigned short msw, msw_orig, *pmsw; - unsigned long cr0; int i, zero; - asm("mov %%cr0, %0" : "=r"(cr0)); - msw_orig = cr0; + msw_orig = read_cr0(); asm("smsw %0" : "=r"(msw)); report("smsw (1)", msw == msw_orig); @@ -150,6 +156,25 @@ void test_smsw(void *mem) report("smsw (2)", msw == pmsw[4] && zero); } +void test_lmsw(void *mem) +{ + unsigned short msw, *pmsw; + unsigned long cr0; + + cr0 = read_cr0(); + + msw = cr0 ^ 8; + asm("lmsw %0" : : "r"(msw)); + printf("before %lx after %lx\n", cr0, read_cr0()); + report("lmsw (1)", (cr0 ^ read_cr0()) == 8); + + pmsw = mem; + *pmsw = cr0; + asm("lmsw %0" : : "m"(*pmsw)); + printf("before %lx after %lx\n", cr0, read_cr0()); + report("lmsw (2)", cr0 == read_cr0()); +} + int main() { void *mem; @@ -174,6 +199,7 @@ int main() test_cr8(); test_smsw(mem); + test_lmsw(mem); printf("\nSUMMARY: %d tests, %d failures\n", tests, fails); return fails ? 1 : 0; ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ kvm-commits mailing list kvm-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-commits