#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; }