Line 535... |
Line 535... |
inline void dump_exe_log()
|
inline void dump_exe_log()
|
{
|
{
|
unsigned long i = iqueue[0].insn_addr;
|
unsigned long i = iqueue[0].insn_addr;
|
|
|
if (i == 0xffffffff) return;
|
if (i == 0xffffffff) return;
|
|
if (config.sim.exe_log_marker && instructions % config.sim.exe_log_marker == 0) {
|
|
fprintf (runtime.sim.fexe_log, "--------------------- %8i instruction ---------------------\n");
|
|
}
|
|
if (config.sim.exe_log_start <= instructions && (config.sim.exe_log_end <= 0 || instructions <= config.sim.exe_log_end)) {
|
|
switch (config.sim.exe_log_type) {
|
|
case EXE_LOG_HARDWARE:
|
fprintf(runtime.sim.fexe_log, "\nEXECUTED(): %.8lx: ", i);
|
fprintf(runtime.sim.fexe_log, "\nEXECUTED(): %.8lx: ", i);
|
fprintf(runtime.sim.fexe_log, "%.2x%.2x", evalsim_mem8(i), evalsim_mem8(i + 1));
|
fprintf(runtime.sim.fexe_log, "%.2x%.2x", evalsim_mem8(i), evalsim_mem8(i + 1));
|
fprintf(runtime.sim.fexe_log, "%.2x%.2x", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
|
fprintf(runtime.sim.fexe_log, "%.2x%.2x", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
|
for(i = 0; i < MAX_GPRS; i++) {
|
for(i = 0; i < MAX_GPRS; i++) {
|
if (i % 4 == 0)
|
if (i % 4 == 0)
|
Line 548... |
Line 554... |
fprintf(runtime.sim.fexe_log, "\n");
|
fprintf(runtime.sim.fexe_log, "\n");
|
fprintf(runtime.sim.fexe_log, "SR : %.8lx ", mfspr(SPR_SR));
|
fprintf(runtime.sim.fexe_log, "SR : %.8lx ", mfspr(SPR_SR));
|
fprintf(runtime.sim.fexe_log, "EPCR0: %.8lx ", mfspr(SPR_EPCR_BASE));
|
fprintf(runtime.sim.fexe_log, "EPCR0: %.8lx ", mfspr(SPR_EPCR_BASE));
|
fprintf(runtime.sim.fexe_log, "EEAR0: %.8lx ", mfspr(SPR_EEAR_BASE));
|
fprintf(runtime.sim.fexe_log, "EEAR0: %.8lx ", mfspr(SPR_EEAR_BASE));
|
fprintf(runtime.sim.fexe_log, "ESR0 : %.8lx\n", mfspr(SPR_ESR_BASE));
|
fprintf(runtime.sim.fexe_log, "ESR0 : %.8lx\n", mfspr(SPR_ESR_BASE));
|
|
break;
|
|
case EXE_LOG_SOFTWARE:
|
|
{
|
|
int labels = 0;
|
|
if (verify_memoryarea(i)) {
|
|
struct label_entry *entry;
|
|
entry = get_label(i);
|
|
if (entry) {
|
|
printf("%s: ", entry->name);
|
|
labels++;
|
|
}
|
|
} else {
|
|
printf("<invalid addr>: ");
|
|
labels++;
|
|
}
|
|
if (labels) fprintf (runtime.sim.fexe_log, "\n");
|
|
fprintf (runtime.sim.fexe_log, "%.8lx ", i);
|
|
if (index >= 0) {
|
|
extern char *disassembled;
|
|
disassemble_insn (iqueue[0].insn_index);
|
|
printf(" %s", disassembled);
|
|
} else
|
|
printf("<invalid>");
|
|
}
|
|
}
|
|
}
|
}
|
}
|
|
|
#if 0
|
#if 0
|
void print_time (int cycles, char *output)
|
void print_time (int cycles, char *output)
|
{
|
{
|