1*1eba4077SPaweł Dziepak /* 2*1eba4077SPaweł Dziepak * Copyright 2014, Paweł Dziepak, pdziepak@quarnos.org. 3*1eba4077SPaweł Dziepak * Copyright 2012, Alex Smith, alex@alex-smith.me.uk. 4*1eba4077SPaweł Dziepak * Distributed under the terms of the MIT License. 5*1eba4077SPaweł Dziepak */ 6*1eba4077SPaweł Dziepak 7*1eba4077SPaweł Dziepak 8*1eba4077SPaweł Dziepak #include <arch_system_info.h> 9*1eba4077SPaweł Dziepak 10*1eba4077SPaweł Dziepak 11*1eba4077SPaweł Dziepak status_t 12*1eba4077SPaweł Dziepak get_current_cpuid(cpuid_info* info, uint32 eax, uint32 ecx) 13*1eba4077SPaweł Dziepak { 14*1eba4077SPaweł Dziepak __asm__("cpuid" 15*1eba4077SPaweł Dziepak : "=a" (info->regs.eax), "=b" (info->regs.ebx), "=c" (info->regs.ecx), 16*1eba4077SPaweł Dziepak "=d" (info->regs.edx) 17*1eba4077SPaweł Dziepak : "a" (eax), "c" (ecx)); 18*1eba4077SPaweł Dziepak return B_OK; 19*1eba4077SPaweł Dziepak } 20*1eba4077SPaweł Dziepak 21*1eba4077SPaweł Dziepak 22*1eba4077SPaweł Dziepak uint32 23*1eba4077SPaweł Dziepak get_eflags() 24*1eba4077SPaweł Dziepak { 25*1eba4077SPaweł Dziepak uint64_t flags; 26*1eba4077SPaweł Dziepak __asm__("pushf; popq %0;" : "=r" (flags)); 27*1eba4077SPaweł Dziepak return flags; 28*1eba4077SPaweł Dziepak } 29*1eba4077SPaweł Dziepak 30*1eba4077SPaweł Dziepak 31*1eba4077SPaweł Dziepak void 32*1eba4077SPaweł Dziepak set_eflags(uint32 value) 33*1eba4077SPaweł Dziepak { 34*1eba4077SPaweł Dziepak uint64_t flags = value; 35*1eba4077SPaweł Dziepak __asm__("pushq %0; popf;" : : "r" (flags) : "cc"); 36*1eba4077SPaweł Dziepak } 37*1eba4077SPaweł Dziepak 38