Recompiler now handles instruction and cycle counting.
This commit is contained in:
parent
93ec6b0692
commit
774f4201ee
8 changed files with 99 additions and 7 deletions
50
src/codegen_accumulate.c
Normal file
50
src/codegen_accumulate.c
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#include "ibm.h"
|
||||
#include "codegen.h"
|
||||
#include "codegen_accumulate.h"
|
||||
#include "codegen_ir.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
int count;
|
||||
int dest_reg;
|
||||
} acc_regs[] =
|
||||
{
|
||||
[ACCREG_ins] = {0, IREG_ins},
|
||||
[ACCREG_cycles] = {0, IREG_cycles},
|
||||
};
|
||||
|
||||
void codegen_accumulate(int acc_reg, int delta)
|
||||
{
|
||||
if (acc_reg == ACCREG_cycles)
|
||||
{
|
||||
// pclog("cycles %04x:%04x %i\n", CS, cpu_state.pc, delta);
|
||||
// if (CS == 0x1000 && cpu_state.pc == 0x863)
|
||||
// fatal("Here\n");
|
||||
}
|
||||
acc_regs[acc_reg].count += delta;
|
||||
}
|
||||
|
||||
void codegen_accumulate_flush(ir_data_t *ir)
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = 0; c < ACCREG_COUNT; c++)
|
||||
{
|
||||
if (acc_regs[c].count)
|
||||
{
|
||||
// if (c == ACCREG_cycles)
|
||||
// pclog("accumulate %i %i %i\n", c, acc_regs[c].dest_reg, acc_regs[c].count);
|
||||
uop_ADD_IMM(ir, acc_regs[c].dest_reg, acc_regs[c].dest_reg, acc_regs[c].count);
|
||||
}
|
||||
|
||||
acc_regs[c].count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void codegen_accumulate_reset()
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = 0; c < ACCREG_COUNT; c++)
|
||||
acc_regs[c].count = 0;
|
||||
}
|
||||
Loading…
Reference in a new issue