123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #ifndef _X86_FPU_H_
- #define _X86_FPU_H_
- #include "types-compat.h"
- struct env87 {
- int32_t en_cw;
- int32_t en_sw;
- int32_t en_tw;
- int32_t en_fip;
- uint16_t en_fcs;
- uint16_t en_opcode;
- int32_t en_foo;
- int32_t en_fos;
- };
- struct fpacc87 {
- uint8_t fp_bytes[10];
- };
- struct save87 {
- struct env87 sv_env;
- struct fpacc87 sv_ac[8];
- uint8_t sv_pad0[4];
-
- uint8_t sv_pad[64];
- };
- struct xmmacc {
- uint8_t xmm_bytes[16];
- };
- struct ymmacc {
- uint8_t ymm_bytes[16];
- };
- #ifdef __i386__
- #define __envxmm32 envxmm
- #else
- #define __envxmm32 envxmm32
- #define __envxmm64 envxmm
- #endif
- struct __envxmm32 {
- uint16_t en_cw;
- uint16_t en_sw;
- uint16_t en_tw;
- uint16_t en_opcode;
- uint32_t en_fip;
- uint16_t en_fcs;
- uint16_t en_pad0;
- uint32_t en_foo;
- uint16_t en_fos;
- uint16_t en_pad1;
- uint32_t en_mxcsr;
- uint32_t en_mxcsr_mask;
- };
- struct __envxmm64 {
- uint16_t en_cw;
- uint16_t en_sw;
- uint8_t en_tw;
- uint8_t en_zero;
- uint16_t en_opcode;
- uint64_t en_rip;
- uint64_t en_rdp;
- uint32_t en_mxcsr;
- uint32_t en_mxcsr_mask;
- };
- struct savexmm {
- struct __envxmm32 sv_env;
- struct {
- struct fpacc87 fp_acc;
- uint8_t fp_pad[6];
- } sv_fp[8];
- struct xmmacc sv_xmm[8];
- uint8_t sv_pad[224];
- } __attribute__ ((aligned(16)));
- #ifdef __i386__
- union savefpu {
- struct save87 sv_87;
- struct savexmm sv_xmm;
- };
- #else
- struct savefpu {
- struct __envxmm64 sv_env;
- struct {
- struct fpacc87 fp_acc;
- uint8_t fp_pad[6];
- } sv_fp[8];
- struct xmmacc sv_xmm[16];
- uint8_t sv_pad[96];
- } __attribute__ ((aligned(16)));
- #endif
- struct xstate_hdr {
- uint64_t xstate_bv;
- uint8_t xstate_rsrv0[16];
- uint8_t xstate_rsrv[40];
- };
- struct savexmm_xstate {
- struct xstate_hdr sx_hd;
- struct ymmacc sx_ymm[16];
- };
- struct savexmm_ymm {
- struct __envxmm32 sv_env;
- struct {
- struct fpacc87 fp_acc;
- int8_t fp_pad[6];
- } sv_fp[8];
- struct xmmacc sv_xmm[16];
- uint8_t sv_pad[96];
- struct savexmm_xstate sv_xstate;
- } __attribute__ ((aligned(16)));
- struct savefpu_xstate {
- struct xstate_hdr sx_hd;
- struct ymmacc sx_ymm[16];
- };
- struct savefpu_ymm {
- struct __envxmm64 sv_env;
- struct {
- struct fpacc87 fp_acc;
- int8_t fp_pad[6];
- } sv_fp[8];
- struct xmmacc sv_xmm[16];
- uint8_t sv_pad[96];
- struct savefpu_xstate sv_xstate;
- } __attribute__ ((aligned(64)));
- #undef __envxmm32
- #undef __envxmm64
- #define __INITIAL_FPUCW__ 0x037F
- #define __INITIAL_FPUCW_I386__ 0x127F
- #define __INITIAL_NPXCW__ __INITIAL_FPUCW_I386__
- #define __INITIAL_MXCSR__ 0x1F80
- #define __INITIAL_MXCSR_MASK__ 0xFFBF
- #endif
|