Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/i386/npx.c
Show First 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | |||||
#ifdef DEV_ISA | #ifdef DEV_ISA | ||||
#include <isa/isavar.h> | #include <isa/isavar.h> | ||||
#endif | #endif | ||||
/* | /* | ||||
* 387 and 287 Numeric Coprocessor Extension (NPX) Driver. | * 387 and 287 Numeric Coprocessor Extension (NPX) Driver. | ||||
*/ | */ | ||||
#if defined(__GNUCLIKE_ASM) && !defined(lint) | |||||
#define fldcw(cw) __asm __volatile("fldcw %0" : : "m" (cw)) | #define fldcw(cw) __asm __volatile("fldcw %0" : : "m" (cw)) | ||||
#define fnclex() __asm __volatile("fnclex") | #define fnclex() __asm __volatile("fnclex") | ||||
#define fninit() __asm __volatile("fninit") | #define fninit() __asm __volatile("fninit") | ||||
#define fnsave(addr) __asm __volatile("fnsave %0" : "=m" (*(addr))) | #define fnsave(addr) __asm __volatile("fnsave %0" : "=m" (*(addr))) | ||||
#define fnstcw(addr) __asm __volatile("fnstcw %0" : "=m" (*(addr))) | #define fnstcw(addr) __asm __volatile("fnstcw %0" : "=m" (*(addr))) | ||||
#define fnstsw(addr) __asm __volatile("fnstsw %0" : "=am" (*(addr))) | #define fnstsw(addr) __asm __volatile("fnstsw %0" : "=am" (*(addr))) | ||||
#define fp_divide_by_0() __asm __volatile( \ | #define fp_divide_by_0() __asm __volatile( \ | ||||
"fldz; fld1; fdiv %st,%st(1); fnop") | "fldz; fld1; fdiv %st,%st(1); fnop") | ||||
Show All 29 Lines | |||||
{ | { | ||||
uint32_t low, hi; | uint32_t low, hi; | ||||
low = mask; | low = mask; | ||||
hi = mask >> 32; | hi = mask >> 32; | ||||
__asm __volatile("xsaveopt %0" : "=m" (*addr) : "a" (low), "d" (hi) : | __asm __volatile("xsaveopt %0" : "=m" (*addr) : "a" (low), "d" (hi) : | ||||
"memory"); | "memory"); | ||||
} | } | ||||
#else /* !(__GNUCLIKE_ASM && !lint) */ | |||||
void fldcw(u_short cw); | |||||
void fnclex(void); | |||||
void fninit(void); | |||||
void fnsave(caddr_t addr); | |||||
void fnstcw(caddr_t addr); | |||||
void fnstsw(caddr_t addr); | |||||
void fp_divide_by_0(void); | |||||
void frstor(caddr_t addr); | |||||
void fxsave(caddr_t addr); | |||||
void fxrstor(caddr_t addr); | |||||
void ldmxcsr(u_int csr); | |||||
void stmxcsr(u_int *csr); | |||||
void xrstor(char *addr, uint64_t mask); | |||||
void xsave(char *addr, uint64_t mask); | |||||
void xsaveopt(char *addr, uint64_t mask); | |||||
#endif /* __GNUCLIKE_ASM && !lint */ | |||||
#define start_emulating() load_cr0(rcr0() | CR0_TS) | #define start_emulating() load_cr0(rcr0() | CR0_TS) | ||||
#define stop_emulating() clts() | #define stop_emulating() clts() | ||||
#define GET_FPU_CW(thread) \ | #define GET_FPU_CW(thread) \ | ||||
(cpu_fxsr ? \ | (cpu_fxsr ? \ | ||||
(thread)->td_pcb->pcb_save->sv_xmm.sv_env.en_cw : \ | (thread)->td_pcb->pcb_save->sv_xmm.sv_env.en_cw : \ | ||||
(thread)->td_pcb->pcb_save->sv_87.sv_env.en_cw) | (thread)->td_pcb->pcb_save->sv_87.sv_env.en_cw) | ||||
▲ Show 20 Lines • Show All 1,414 Lines • Show Last 20 Lines |