+++ /dev/null
-/* $NetBSD: fpu.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */\r
-\r
-#ifndef _AMD64_FPU_H_\r
-#define _AMD64_FPU_H_\r
-\r
-/*\r
- * NetBSD/amd64 only uses the extended save/restore format used\r
- * by fxsave/fsrestore, to always deal with the SSE registers,\r
- * which are part of the ABI to pass floating point values.\r
- * Must be stored in memory on a 16-byte boundary.\r
- */\r
-\r
-struct fxsave64 {\r
- u_int16_t fx_fcw;\r
- u_int16_t fx_fsw;\r
- u_int8_t fx_ftw;\r
- u_int8_t fx_unused1;\r
- u_int16_t fx_fop;\r
- u_int64_t fx_rip;\r
- u_int64_t fx_rdp;\r
- u_int32_t fx_mxcsr;\r
- u_int32_t fx_mxcsr_mask;\r
- u_int64_t fx_st[8][2]; /* 8 normal FP regs */\r
- u_int64_t fx_xmm[16][2]; /* 16 SSE2 registers */\r
- u_int8_t fx_unused3[96];\r
-} __attribute__((packed));\r
-\r
-struct savefpu {\r
- struct fxsave64 fp_fxsave; /* see above */\r
- u_int16_t fp_ex_sw; /* saved status from last exception */\r
- u_int16_t fp_ex_tw; /* saved tag from last exception */\r
-};\r
-\r
-#ifdef _KERNEL\r
-\r
-/*\r
- * This one only used for backward compat coredumping.\r
- */\r
-struct oldfsave {\r
- u_int16_t fs_control;\r
- u_int16_t fs_unused0;\r
- u_int16_t fs_status;\r
- u_int16_t fs_unused1;\r
- u_int16_t fs_tag;\r
- u_int16_t fs_unused2;\r
- u_int32_t fs_ipoff;\r
- u_int16_t fs_ipsel;\r
- u_int16_t fs_op;\r
- u_int32_t fs_opoff;\r
- u_int16_t fs_opsel;\r
-} __attribute__ ((packed));\r
-\r
-#endif\r
-\r
-\r
-/*\r
- * The i387 defaults to Intel extended precision mode and round to nearest,\r
- * with all exceptions masked.\r
- */\r
-#define __INITIAL_NPXCW__ 0x037f\r
-#define __INITIAL_MXCSR__ 0x1f80\r
-#define __INITIAL_MXCSR_MASK__ 0xffbf\r
-\r
-/* NetBSD uses IEEE double precision. */\r
-#define __NetBSD_NPXCW__ 0x127f\r
-/* Linux just uses the default control word. */\r
-#define __Linux_NPXCW__ 0x037f\r
-\r
-/*\r
- * The standard control word from finit is 0x37F, giving:\r
- * round to nearest\r
- * 64-bit precision\r
- * all exceptions masked.\r
- *\r
- * Now we want:\r
- * affine mode (if we decide to support 287's)\r
- * round to nearest\r
- * 53-bit precision\r
- * all exceptions masked.\r
- *\r
- * 64-bit precision often gives bad results with high level languages\r
- * because it makes the results of calculations depend on whether\r
- * intermediate values are stored in memory or in FPU registers.\r
- */\r
-\r
-#ifdef _KERNEL\r
-/*\r
- * XXX\r
- */\r
-struct trapframe;\r
-struct cpu_info;\r
-\r
-void fpuinit(struct cpu_info *);\r
-void fpudrop(void);\r
-void fpusave(struct lwp *);\r
-void fpudiscard(struct lwp *);\r
-void fputrap(struct trapframe *);\r
-void fpusave_lwp(struct lwp *, int);\r
-void fpusave_cpu(struct cpu_info *, int);\r
-\r
-#endif\r
-\r
-#endif /* _AMD64_FPU_H_ */\r