better fpu state dump
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1503 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
d24b15a8d8
commit
2157fa0682
|
@ -250,7 +250,7 @@ void cpu_dump_state(CPUState *env, FILE *f,
|
||||||
int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
|
int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
int eflags, i;
|
int eflags, i, nb;
|
||||||
char cc_op_name[32];
|
char cc_op_name[32];
|
||||||
static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" };
|
static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" };
|
||||||
|
|
||||||
|
@ -398,16 +398,54 @@ void cpu_dump_state(CPUState *env, FILE *f,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags & X86_DUMP_FPU) {
|
if (flags & X86_DUMP_FPU) {
|
||||||
cpu_fprintf(f, "ST0=%f ST1=%f ST2=%f ST3=%f\n",
|
int fptag;
|
||||||
(double)env->fpregs[0].d,
|
fptag = 0;
|
||||||
(double)env->fpregs[1].d,
|
for(i = 0; i < 8; i++) {
|
||||||
(double)env->fpregs[2].d,
|
fptag |= ((!env->fptags[i]) << i);
|
||||||
(double)env->fpregs[3].d);
|
}
|
||||||
cpu_fprintf(f, "ST4=%f ST5=%f ST6=%f ST7=%f\n",
|
cpu_fprintf(f, "FCW=%04x FSW=%04x [ST=%d] FTW=%02x MXCSR=%08x\n",
|
||||||
(double)env->fpregs[4].d,
|
env->fpuc,
|
||||||
(double)env->fpregs[5].d,
|
(env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11,
|
||||||
(double)env->fpregs[7].d,
|
env->fpstt,
|
||||||
(double)env->fpregs[8].d);
|
fptag,
|
||||||
|
env->mxcsr);
|
||||||
|
for(i=0;i<8;i++) {
|
||||||
|
#if defined(USE_X86LDOUBLE)
|
||||||
|
union {
|
||||||
|
long double d;
|
||||||
|
struct {
|
||||||
|
uint64_t lower;
|
||||||
|
uint16_t upper;
|
||||||
|
} l;
|
||||||
|
} tmp;
|
||||||
|
tmp.d = env->fpregs[i].d;
|
||||||
|
cpu_fprintf(f, "FPR%d=%016llx %04x",
|
||||||
|
i, tmp.l.lower, tmp.l.upper);
|
||||||
|
#else
|
||||||
|
cpu_fprintf(f, "FPR%d=%016llx",
|
||||||
|
i, env->fpregs[i].mmx.q);
|
||||||
|
#endif
|
||||||
|
if ((i & 1) == 1)
|
||||||
|
cpu_fprintf(f, "\n");
|
||||||
|
else
|
||||||
|
cpu_fprintf(f, " ");
|
||||||
|
}
|
||||||
|
if (env->hflags & HF_CS64_MASK)
|
||||||
|
nb = 16;
|
||||||
|
else
|
||||||
|
nb = 8;
|
||||||
|
for(i=0;i<nb;i++) {
|
||||||
|
cpu_fprintf(f, "XMM%02d=%08x%08x%08x%08x",
|
||||||
|
i,
|
||||||
|
env->xmm_regs[i].XMM_L(3),
|
||||||
|
env->xmm_regs[i].XMM_L(2),
|
||||||
|
env->xmm_regs[i].XMM_L(1),
|
||||||
|
env->xmm_regs[i].XMM_L(0));
|
||||||
|
if ((i & 1) == 1)
|
||||||
|
cpu_fprintf(f, "\n");
|
||||||
|
else
|
||||||
|
cpu_fprintf(f, " ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue