예제 #1
0
파일: mipsinst.c 프로젝트: mytbk/sim_mips
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");
}
예제 #2
0
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;
		}
	}
}