250 |
int (*cpu_fprintf)(FILE *f, const char *fmt, ...), |
int (*cpu_fprintf)(FILE *f, const char *fmt, ...), |
251 |
int flags) |
int flags) |
252 |
{ |
{ |
253 |
int eflags, i; |
int eflags, i, nb; |
254 |
char cc_op_name[32]; |
char cc_op_name[32]; |
255 |
static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" }; |
static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" }; |
256 |
|
|
398 |
} |
} |
399 |
} |
} |
400 |
if (flags & X86_DUMP_FPU) { |
if (flags & X86_DUMP_FPU) { |
401 |
cpu_fprintf(f, "ST0=%f ST1=%f ST2=%f ST3=%f\n", |
int fptag; |
402 |
(double)env->fpregs[0].d, |
fptag = 0; |
403 |
(double)env->fpregs[1].d, |
for(i = 0; i < 8; i++) { |
404 |
(double)env->fpregs[2].d, |
fptag |= ((!env->fptags[i]) << i); |
405 |
(double)env->fpregs[3].d); |
} |
406 |
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", |
407 |
(double)env->fpregs[4].d, |
env->fpuc, |
408 |
(double)env->fpregs[5].d, |
(env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11, |
409 |
(double)env->fpregs[7].d, |
env->fpstt, |
410 |
(double)env->fpregs[8].d); |
fptag, |
411 |
|
env->mxcsr); |
412 |
|
for(i=0;i<8;i++) { |
413 |
|
#if defined(USE_X86LDOUBLE) |
414 |
|
union { |
415 |
|
long double d; |
416 |
|
struct { |
417 |
|
uint64_t lower; |
418 |
|
uint16_t upper; |
419 |
|
} l; |
420 |
|
} tmp; |
421 |
|
tmp.d = env->fpregs[i].d; |
422 |
|
cpu_fprintf(f, "FPR%d=%016llx %04x", |
423 |
|
i, tmp.l.lower, tmp.l.upper); |
424 |
|
#else |
425 |
|
cpu_fprintf(f, "FPR%d=%016llx", |
426 |
|
i, env->fpregs[i].mmx.q); |
427 |
|
#endif |
428 |
|
if ((i & 1) == 1) |
429 |
|
cpu_fprintf(f, "\n"); |
430 |
|
else |
431 |
|
cpu_fprintf(f, " "); |
432 |
|
} |
433 |
|
if (env->hflags & HF_CS64_MASK) |
434 |
|
nb = 16; |
435 |
|
else |
436 |
|
nb = 8; |
437 |
|
for(i=0;i<nb;i++) { |
438 |
|
cpu_fprintf(f, "XMM%02d=%08x%08x%08x%08x", |
439 |
|
i, |
440 |
|
env->xmm_regs[i].XMM_L(3), |
441 |
|
env->xmm_regs[i].XMM_L(2), |
442 |
|
env->xmm_regs[i].XMM_L(1), |
443 |
|
env->xmm_regs[i].XMM_L(0)); |
444 |
|
if ((i & 1) == 1) |
445 |
|
cpu_fprintf(f, "\n"); |
446 |
|
else |
447 |
|
cpu_fprintf(f, " "); |
448 |
|
} |
449 |
} |
} |
450 |
} |
} |
451 |
|
|