1 | /* $NetBSD: fpu.h,v 1.6 2014/02/25 22:16:52 dsl Exp $ */ |
2 | |
3 | #ifndef _X86_FPU_H_ |
4 | #define _X86_FPU_H_ |
5 | |
6 | #include <x86/cpu_extended_state.h> |
7 | |
8 | #ifdef _KERNEL |
9 | |
10 | struct cpu_info; |
11 | struct lwp; |
12 | struct trapframe; |
13 | |
14 | void fpuinit(struct cpu_info *); |
15 | void fpusave_lwp(struct lwp *, bool); |
16 | void fpusave_cpu(bool); |
17 | |
18 | void fpu_set_default_cw(struct lwp *, unsigned int); |
19 | |
20 | void fputrap(struct trapframe *); |
21 | void fpudna(struct trapframe *); |
22 | |
23 | void process_xmm_to_s87(const struct fxsave *, struct save87 *); |
24 | void process_s87_to_xmm(const struct save87 *, struct fxsave *); |
25 | |
26 | /* Set all to defaults (eg during exec) */ |
27 | void fpu_save_area_clear(struct lwp *, unsigned int); |
28 | /* Reset control words only - for signal handlers */ |
29 | void fpu_save_area_reset(struct lwp *); |
30 | |
31 | /* Copy data outside pcb during fork */ |
32 | void fpu_save_area_fork(struct pcb *, const struct pcb *); |
33 | |
34 | /* Load FP registers with user-supplied values */ |
35 | void process_write_fpregs_xmm(struct lwp *lwp, const struct fxsave *fpregs); |
36 | void process_write_fpregs_s87(struct lwp *lwp, const struct save87 *fpregs); |
37 | |
38 | /* Save FP registers for copy to userspace */ |
39 | void process_read_fpregs_xmm(struct lwp *lwp, struct fxsave *fpregs); |
40 | void process_read_fpregs_s87(struct lwp *lwp, struct save87 *fpregs); |
41 | |
42 | #endif |
43 | |
44 | #endif /* _X86_FPU_H_ */ |
45 | |