void print_disas_string(mipsinst_t inst) { switch (get_inst_type(inst)) { case R_TYPE: if (inst.r.funct==MR_SLL || inst.r.funct==MR_SRL) { fprintf(stderr, mips_r_insts[inst.r.funct].asmstr, inst.r.rd, inst.r.rt, inst.r.sa); } else { fprintf(stderr, mips_r_insts[inst.r.funct].asmstr, inst.r.rd, inst.r.rs, inst.r.rt); } break; case I_TYPE: switch (inst.i.opcode) { case MI_SW: case MI_SWL: case MI_SWR: case MI_LW: case MI_SB: case MI_SH: case MI_LB: case MI_LBU: case MI_LHU: fprintf(stderr, mips_i_insts[inst.i.opcode].asmstr, inst.i.rt, inst.i.imm, inst.i.rs); break; default: fprintf(stderr, mips_i_insts[inst.i.opcode].asmstr, inst.i.rt, inst.i.rs, inst.i.imm); break; } case J_TYPE: fprintf(stderr, mips_j_insts[inst.j.opcode].asmstr, inst.j.imm); break; default: // should not go here break; } fprintf(stderr, "\n"); }
void GameInstSet::serialize(GameState* gs, SerializeBuffer& serializer) { serializer.write_int(grid_w); serializer.write_int(grid_h); serializer.write_int(size()); serializer.write_int(next_id); DepthMap::const_iterator it = depthlist_map.end(); for (int ind = 0; it != depthlist_map.begin();) { --it; InstanceState* state = it->second.start_of_list; while (state) { GameInst* inst = state->inst; serializer.write_int(get_inst_type(inst)); serializer.write_int(inst->id); inst->serialize(gs, serializer); serializer.write_int(inst->integrity_hash()); state = state->next_same_depth; } } }