36 |
|
|
37 |
#include "cpu-defs.h" |
#include "cpu-defs.h" |
38 |
|
|
39 |
|
#include "softfloat.h" |
40 |
|
|
41 |
#if defined(__i386__) && !defined(CONFIG_SOFTMMU) |
#if defined(__i386__) && !defined(CONFIG_SOFTMMU) |
42 |
#define USE_CODE_COPY |
#define USE_CODE_COPY |
43 |
#endif |
#endif |
334 |
CC_OP_NB, |
CC_OP_NB, |
335 |
}; |
}; |
336 |
|
|
337 |
#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD) |
#ifdef FLOATX80 |
338 |
#define USE_X86LDOUBLE |
#define USE_X86LDOUBLE |
339 |
#endif |
#endif |
340 |
|
|
341 |
#ifdef USE_X86LDOUBLE |
#ifdef USE_X86LDOUBLE |
342 |
typedef long double CPU86_LDouble; |
typedef floatx80 CPU86_LDouble; |
343 |
#else |
#else |
344 |
typedef double CPU86_LDouble; |
typedef float64 CPU86_LDouble; |
345 |
#endif |
#endif |
346 |
|
|
347 |
typedef struct SegmentCache { |
typedef struct SegmentCache { |
356 |
uint16_t _w[8]; |
uint16_t _w[8]; |
357 |
uint32_t _l[4]; |
uint32_t _l[4]; |
358 |
uint64_t _q[2]; |
uint64_t _q[2]; |
359 |
float _s[4]; |
float32 _s[4]; |
360 |
double _d[2]; |
float64 _d[2]; |
361 |
} XMMReg; |
} XMMReg; |
362 |
|
|
363 |
typedef union { |
typedef union { |
443 |
} fpregs[8]; |
} fpregs[8]; |
444 |
|
|
445 |
/* emulator internal variables */ |
/* emulator internal variables */ |
446 |
|
float_status fp_status; |
447 |
CPU86_LDouble ft0; |
CPU86_LDouble ft0; |
448 |
union { |
union { |
449 |
float f; |
float f; |
452 |
int64_t i64; |
int64_t i64; |
453 |
} fp_convert; |
} fp_convert; |
454 |
|
|
455 |
|
float_status sse_status; |
456 |
uint32_t mxcsr; |
uint32_t mxcsr; |
457 |
XMMReg xmm_regs[CPU_NB_REGS]; |
XMMReg xmm_regs[CPU_NB_REGS]; |
458 |
XMMReg xmm_t0; |
XMMReg xmm_t0; |