target-i386: Fix FPU helpers.
This fixes the bug that prevents x86 system images from booting
properly without KVM/HAXM. It was introduced by commit
e228840614eab80006f9d7e68339b09b3890931a which upgraded
softfloat support to upstream version.
This patch upgrades the target-i386 FPU emulation code to
always use 80-bit FPU registera, and perform computations
appropriately. This comes from upstream QEMU patch
c31da136a0bf8caad70c348f5ffc283206e9c7fc
Change-Id: I5c3452a3072f31299623b5dae754a060c86c402a
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index de23359..44f29e1 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -661,16 +661,6 @@
CC_OP_NB,
};
-#ifdef FLOATX80
-#define USE_X86LDOUBLE
-#endif
-
-#ifdef USE_X86LDOUBLE
-typedef floatx80 CPU86_LDouble;
-#else
-typedef float64 CPU86_LDouble;
-#endif
-
typedef struct SegmentCache {
uint32_t selector;
target_ulong base;
@@ -775,18 +765,11 @@
unsigned int fpus;
unsigned int fpuc;
uint8_t fptags[8]; /* 0 = valid, 1 = empty */
- union {
-#ifdef USE_X86LDOUBLE
- CPU86_LDouble d __attribute__((aligned(16)));
-#else
- CPU86_LDouble d;
-#endif
- MMXReg mmx;
- } fpregs[8];
+ FPReg fpregs[8];
/* emulator internal variables */
float_status fp_status;
- CPU86_LDouble ft0;
+ floatx80 ft0;
float_status mmx_status; /* for 3DNow! float ops */
float_status sse_status;
@@ -955,8 +938,8 @@
/* op_helper.c */
/* used for debug or cpu save/restore */
-void cpu_get_fp80(uint64_t *pmant, uint16_t *pexp, CPU86_LDouble f);
-CPU86_LDouble cpu_set_fp80(uint64_t mant, uint16_t upper);
+void cpu_get_fp80(uint64_t *pmant, uint16_t *pexp, floatx80 f);
+floatx80 cpu_set_fp80(uint64_t mant, uint16_t upper);
/* cpu-exec.c */
/* the following helpers are only usable in user mode simulation as