10b8c3946SPaolo Bonzini #include "ioram.h" 20b8c3946SPaolo Bonzini #include "vm.h" 30b8c3946SPaolo Bonzini #include "libcflat.h" 40b8c3946SPaolo Bonzini #include "desc.h" 50b8c3946SPaolo Bonzini #include "processor.h" 60b8c3946SPaolo Bonzini test_cmpxchg8b(u32 * mem)70b8c3946SPaolo Bonzinistatic void test_cmpxchg8b(u32 *mem) 80b8c3946SPaolo Bonzini { 90b8c3946SPaolo Bonzini mem[1] = 2; 100b8c3946SPaolo Bonzini mem[0] = 1; 110b8c3946SPaolo Bonzini asm("push %%ebx\n" 120b8c3946SPaolo Bonzini "mov %[ebx_val], %%ebx\n" 130b8c3946SPaolo Bonzini "lock cmpxchg8b (%0)\n" 140b8c3946SPaolo Bonzini "pop %%ebx" : : "D" (mem), 150b8c3946SPaolo Bonzini "d" (2), "a" (1), "c" (4), [ebx_val] "i" (3) : "memory"); 16*a299895bSThomas Huth report(mem[0] == 3 && mem[1] == 4, "cmpxchg8b"); 170b8c3946SPaolo Bonzini } 180b8c3946SPaolo Bonzini main(void)19b29804b8SThomas Huthint main(void) 200b8c3946SPaolo Bonzini { 210b8c3946SPaolo Bonzini setup_vm(); 220b8c3946SPaolo Bonzini 230b8c3946SPaolo Bonzini test_cmpxchg8b(phys_to_virt(read_cr3()) + 4088); 240b8c3946SPaolo Bonzini return report_summary(); 250b8c3946SPaolo Bonzini } 26