| 34 | }; |
| 35 | |
| 36 | static inline int64_t xgetbv() |
| 37 | { |
| 38 | int index = 0; |
| 39 | #if _MSC_VER |
| 40 | return _xgetbv(index); |
| 41 | #else |
| 42 | int eax = 0; |
| 43 | int edx = 0; |
| 44 | __asm__ volatile (".byte 0x0f, 0x01, 0xd0" : "=a"(eax), "=d"(edx) : "c" (index)); |
| 45 | return (int64_t)edx << 32 | (int64_t)eax; |
| 46 | #endif |
| 47 | } |
| 48 | |
| 49 | static inline void cpuid(int index, int *data) |
| 50 | { |