25 lines
1.5 KiB
C
25 lines
1.5 KiB
C
#ifndef _KERNEL_AMD64_FX_H
|
|
#define _KERNEL_AMD64_FX_H
|
|
|
|
#define fx_save(buf) \
|
|
do { \
|
|
__asm__ volatile ("fxsave64 %0" : "=m"(*(buf))::"memory"); \
|
|
} while (0)
|
|
|
|
#define fx_restore(buf) \
|
|
do { \
|
|
__asm__ volatile ("fxrstor64 %0" ::"m"(*(buf)) : "memory"); \
|
|
} while (0)
|
|
|
|
#define fx_init(buf) \
|
|
do { \
|
|
memset ((buf), 0, sizeof ((buf))); \
|
|
__asm__ volatile ("fninit; fxsave64 %0" : "=m"(*(buf))::"memory"); \
|
|
uint32_t* __mxcsr = (uint32_t*)&(buf)[24]; \
|
|
*__mxcsr = 0x1F80; \
|
|
uint16_t* __fcw = (uint16_t*)&(buf)[0]; \
|
|
*__fcw = 0x037F; \
|
|
} while (0)
|
|
|
|
#endif // _KERNEL_AMD64_FX_H
|