--- hatari/src/falcon/dsp_disasm.c 2019/04/09 08:47:20 1.1.1.3 +++ hatari/src/falcon/dsp_disasm.c 2019/04/09 08:48:45 1.1.1.4 @@ -45,12 +45,15 @@ **********************************/ /* Current instruction */ -static char str_instr[50]; static Uint32 cur_inst; static Uint32 disasm_cur_inst_len; +static char str_instr[50]; +static char str_instr2[100]; +static char parallelmove_name[64]; /* Previous instruction */ static Uint32 prev_inst_pc = 0x10000; /* Init to an invalid value */ +static Uint16 isLooping = 0; static dsp_core_t *dsp_core; @@ -64,7 +67,6 @@ void dsp56k_disasm_init(dsp_core_t *my_d **********************************/ static Uint32 registers_save[64]; -static Uint32 registers_changed[64]; #if DSP_DISASM_REG_PC static Uint32 pc_save; #endif @@ -91,95 +93,6 @@ static const char *registers_name[64]={ "ssh","ssl","la","lc" }; -void dsp56k_disasm_reg_read(void) -{ - memcpy(registers_save, dsp_core->registers , sizeof(registers_save)); - memset(registers_changed, 0, sizeof(registers_changed)); -#if DSP_DISASM_REG_PC - pc_save = dsp_core->pc; -#endif -} - -void dsp56k_disasm_reg_compare(void) -{ - int i; - - for (i=0;i<64;i++) { - if (!registers_changed[i]) { - continue; - } - - switch(i) { - case DSP_REG_X0: - case DSP_REG_X1: - case DSP_REG_Y0: - case DSP_REG_Y1: - case DSP_REG_A0: - case DSP_REG_A1: - case DSP_REG_B0: - case DSP_REG_B1: - fprintf(stderr," Reg: %s: 0x%06x -> 0x%06x\n", registers_name[i], registers_save[i] & BITMASK(24), dsp_core->registers[i] & BITMASK(24)); - break; - case DSP_REG_R0: - case DSP_REG_R1: - case DSP_REG_R2: - case DSP_REG_R3: - case DSP_REG_R4: - case DSP_REG_R5: - case DSP_REG_R6: - case DSP_REG_R7: - case DSP_REG_M0: - case DSP_REG_M1: - case DSP_REG_M2: - case DSP_REG_M3: - case DSP_REG_M4: - case DSP_REG_M5: - case DSP_REG_M6: - case DSP_REG_M7: - case DSP_REG_N0: - case DSP_REG_N1: - case DSP_REG_N2: - case DSP_REG_N3: - case DSP_REG_N4: - case DSP_REG_N5: - case DSP_REG_N6: - case DSP_REG_N7: - case DSP_REG_SR: - case DSP_REG_LA: - case DSP_REG_LC: - fprintf(stderr," Reg: %s: 0x%04x -> 0x%04x\n", registers_name[i], registers_save[i] & BITMASK(16), dsp_core->registers[i] & BITMASK(16)); - break; - case DSP_REG_A2: - case DSP_REG_B2: - case DSP_REG_OMR: - case DSP_REG_SP: - case DSP_REG_SSH: - case DSP_REG_SSL: - fprintf(stderr," Reg: %s: 0x%02x -> 0x%02x\n", registers_name[i], registers_save[i] & BITMASK(8), dsp_core->registers[i] & BITMASK(8)); - break; - case DSP_REG_A: - case DSP_REG_B: - { - fprintf(stderr," Reg: %s: 0x%02x:%06x:%06x -> 0x%02x:%06x:%06x\n", - registers_name[i], - registers_save[DSP_REG_A2+(i & 1)] & BITMASK(8), - registers_save[DSP_REG_A1+(i & 1)] & BITMASK(24), - registers_save[DSP_REG_A0+(i & 1)] & BITMASK(24), - dsp_core->registers[DSP_REG_A2+(i & 1)] & BITMASK(8), - dsp_core->registers[DSP_REG_A1+(i & 1)] & BITMASK(24), - dsp_core->registers[DSP_REG_A0+(i & 1)] & BITMASK(24) - ); - } - break; - } - } -#if DSP_DISASM_REG_PC - if (pc_save != dsp_core->pc) { - fprintf(stderr," Reg: pc: 0x%04x -> 0x%04x\n", pc_save, dsp_core->pc); - } -#endif -} - /********************************** * Opcode disassembler **********************************/ @@ -488,17 +401,6 @@ static const char *registers_lmove[8]={ "ba" }; -static int disasm_registers_lmove[8][2]={ - {DSP_REG_A1,DSP_REG_A0}, /* A10 */ - {DSP_REG_B1,DSP_REG_B0}, /* B10 */ - {DSP_REG_X1,DSP_REG_X0}, /* X */ - {DSP_REG_Y1,DSP_REG_Y0}, /* Y */ - {DSP_REG_A,DSP_REG_A}, /* A */ - {DSP_REG_B,DSP_REG_B}, /* B */ - {DSP_REG_A,DSP_REG_B}, /* AB */ - {DSP_REG_B,DSP_REG_A} /* BA */ -}; - static const char *ea_names[9]={ "(r%d)-n%d", /* 000xxx */ "(r%d)+n%d", /* 001xxx */ @@ -531,16 +433,105 @@ static const char *cc_name[16]={ "le" }; -static char parallelmove_name[64]; +void dsp56k_disasm_reg_save(void) +{ + memcpy(registers_save, dsp_core->registers , sizeof(registers_save)); +#if DSP_DISASM_REG_PC + pc_save = dsp_core->pc; +#endif +} + +void dsp56k_disasm_reg_compare(void) +{ + int i; + + for (i=0; i<64; i++) { + if (registers_save[i] == dsp_core->registers[i]) { + continue; + } + + switch(i) { + case DSP_REG_X0: + case DSP_REG_X1: + case DSP_REG_Y0: + case DSP_REG_Y1: + case DSP_REG_A0: + case DSP_REG_A1: + case DSP_REG_B0: + case DSP_REG_B1: + fprintf(stderr,"\tReg: %s 0x%06x -> 0x%06x\n", registers_name[i], registers_save[i] & BITMASK(24), dsp_core->registers[i] & BITMASK(24)); + break; + case DSP_REG_R0: + case DSP_REG_R1: + case DSP_REG_R2: + case DSP_REG_R3: + case DSP_REG_R4: + case DSP_REG_R5: + case DSP_REG_R6: + case DSP_REG_R7: + case DSP_REG_M0: + case DSP_REG_M1: + case DSP_REG_M2: + case DSP_REG_M3: + case DSP_REG_M4: + case DSP_REG_M5: + case DSP_REG_M6: + case DSP_REG_M7: + case DSP_REG_N0: + case DSP_REG_N1: + case DSP_REG_N2: + case DSP_REG_N3: + case DSP_REG_N4: + case DSP_REG_N5: + case DSP_REG_N6: + case DSP_REG_N7: + case DSP_REG_SR: + case DSP_REG_LA: + case DSP_REG_LC: + fprintf(stderr,"\tReg: %s 0x%04x -> 0x%04x\n", registers_name[i], registers_save[i] & BITMASK(16), dsp_core->registers[i] & BITMASK(16)); + break; + case DSP_REG_A2: + case DSP_REG_B2: + case DSP_REG_OMR: + case DSP_REG_SP: + case DSP_REG_SSH: + case DSP_REG_SSL: + fprintf(stderr,"\tReg: %s 0x%02x -> 0x%02x\n", registers_name[i], registers_save[i] & BITMASK(8), dsp_core->registers[i] & BITMASK(8)); + break; + case DSP_REG_A: + case DSP_REG_B: + { + fprintf(stderr,"\tReg: %s 0x%02x:%06x:%06x -> 0x%02x:%06x:%06x\n", + registers_name[i], + registers_save[DSP_REG_A2+(i & 1)] & BITMASK(8), + registers_save[DSP_REG_A1+(i & 1)] & BITMASK(24), + registers_save[DSP_REG_A0+(i & 1)] & BITMASK(24), + dsp_core->registers[DSP_REG_A2+(i & 1)] & BITMASK(8), + dsp_core->registers[DSP_REG_A1+(i & 1)] & BITMASK(24), + dsp_core->registers[DSP_REG_A0+(i & 1)] & BITMASK(24) + ); + } + break; + } + } + +#if DSP_DISASM_REG_PC + if (pc_save != dsp_core->pc) { + fprintf(stderr,"\tReg: pc 0x%04x -> 0x%04x\n", pc_save, dsp_core->pc); + } +#endif +} Uint16 dsp56k_disasm(void) { Uint32 value; if (prev_inst_pc == dsp_core->pc){ + isLooping = 1; return 0; } prev_inst_pc = dsp_core->pc; + isLooping = 0; cur_inst = read_memory(dsp_core->pc); disasm_cur_inst_len = 1; @@ -556,15 +547,27 @@ Uint16 dsp56k_disasm(void) value = cur_inst & BITMASK(8); opcodes_alu[value](); } - - if (disasm_cur_inst_len == 1) { - fprintf(stderr, "%04x: %06x %s", dsp_core->pc, cur_inst, str_instr); - } else { - fprintf(stderr, "%04x: %06x %06x %s", dsp_core->pc, cur_inst, read_memory(dsp_core->pc + 1), str_instr); - } return disasm_cur_inst_len; } +/** + * dsp56k_getInstrText : return the disasembled instructions + */ +char* dsp56k_getInstructionText(void) +{ + if (isLooping) { + *str_instr2 = 0; + } + else if (disasm_cur_inst_len == 1) { + sprintf(str_instr2, "%04x: %06x (%02d cyc) %s\n", prev_inst_pc, cur_inst, dsp_core->instr_cycle, str_instr); + } + else { + sprintf(str_instr2, "%04x: %06x %06x (%02d cyc) %s\n", prev_inst_pc, cur_inst, read_memory(prev_inst_pc + 1), dsp_core->instr_cycle, str_instr); + } + + return str_instr2; +} + static void dsp_pm_class2(void) { Uint32 value; @@ -573,11 +576,6 @@ static void dsp_pm_class2(void) { opcodes_alu[value](); } -void dsp56k_disasm_force_reg_changed(int num_dsp_reg) -{ - registers_changed[num_dsp_reg]=1; -} - static Uint32 read_memory(Uint32 currPc) { Uint32 value; @@ -615,12 +613,10 @@ static int dsp_calc_ea(Uint32 ea_mode, c case 0: /* (Rx)-Nx */ sprintf(dest, ea_names[value], numreg, numreg); - registers_changed[DSP_REG_R0+numreg]=1; break; case 1: /* (Rx)+Nx */ sprintf(dest, ea_names[value], numreg, numreg); - registers_changed[DSP_REG_R0+numreg]=1; break; case 5: /* (Rx+Nx) */ @@ -629,12 +625,10 @@ static int dsp_calc_ea(Uint32 ea_mode, c case 2: /* (Rx)- */ sprintf(dest, ea_names[value], numreg); - registers_changed[DSP_REG_R0+numreg]=1; break; case 3: /* (Rx)+ */ sprintf(dest, ea_names[value], numreg); - registers_changed[DSP_REG_R0+numreg]=1; break; case 4: /* (Rx) */ @@ -643,7 +637,6 @@ static int dsp_calc_ea(Uint32 ea_mode, c case 7: /* -(Rx) */ sprintf(dest, ea_names[value], numreg); - registers_changed[DSP_REG_R0+numreg]=1; break; case 6: disasm_cur_inst_len++; @@ -702,37 +695,24 @@ static void opcode8h_0(void) static void dsp_undefined(void) { - sprintf(str_instr," 0x%06x unknown instruction\n", cur_inst); + sprintf(str_instr,"0x%06x unknown instruction", cur_inst); } static void dsp_andi(void) { - const char *regname; - switch(cur_inst & BITMASK(2)) { case 0: - regname="mr"; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr, "andi #0x%02x,mr", (cur_inst>>8) & BITMASK(8)); break; case 1: - regname="ccr"; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr, "andi #0x%02x,ccr", (cur_inst>>8) & BITMASK(8)); break; case 2: - regname="omr"; - registers_changed[DSP_REG_OMR]=1; + sprintf(str_instr, "andi #0x%02x,omr", (cur_inst>>8) & BITMASK(8)); break; default: - regname=""; break; } - - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," andi #0x%02x,%s\n", - (cur_inst>>8) & BITMASK(8), - regname - ); } static void dsp_bchg_aa(void) @@ -751,9 +731,8 @@ static void dsp_bchg_aa(void) } else { sprintf(name,"x:0x%04x",value); } - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," bchg #%d,%s\n", numbit, name); + sprintf(str_instr,"bchg #%d,%s", numbit, name); } static void dsp_bchg_ea(void) @@ -773,9 +752,8 @@ static void dsp_bchg_ea(void) } else { sprintf(name,"x:%s",addr_name); } - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," bchg #%d,%s\n", numbit, name); + sprintf(str_instr,"bchg #%d,%s", numbit, name); } static void dsp_bchg_pp(void) @@ -794,26 +772,19 @@ static void dsp_bchg_pp(void) } else { sprintf(name,"x:0x%04x",value+0xffc0); } - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," bchg #%d,%s\n", numbit, name); + sprintf(str_instr,"bchg #%d,%s", numbit, name); } static void dsp_bchg_reg(void) { /* bchg #n,R */ - char name[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - sprintf(name,"%s",registers_name[value]); - registers_changed[value]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bchg #%d,%s\n", numbit, name); + sprintf(str_instr,"bchg #%d,%s", numbit, registers_name[value]); } static void dsp_bclr_aa(void) @@ -833,9 +804,7 @@ static void dsp_bclr_aa(void) sprintf(name,"x:0x%04x",value); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bclr #%d,%s\n", numbit, name); + sprintf(str_instr,"bclr #%d,%s", numbit, name); } static void dsp_bclr_ea(void) @@ -856,9 +825,7 @@ static void dsp_bclr_ea(void) sprintf(name,"x:%s",addr_name); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bclr #%d,%s\n", numbit, name); + sprintf(str_instr,"bclr #%d,%s", numbit, name); } static void dsp_bclr_pp(void) @@ -878,27 +845,18 @@ static void dsp_bclr_pp(void) sprintf(name,"x:0x%04x",value+0xffc0); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bclr #%d,%s\n", numbit, name); + sprintf(str_instr,"bclr #%d,%s", numbit, name); } static void dsp_bclr_reg(void) { /* bclr #n,R */ - char name[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - sprintf(name,"%s",registers_name[value]); - registers_changed[value]=1; - - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bclr #%d,%s\n", numbit, name); + sprintf(str_instr,"bclr #%d,%s", numbit, registers_name[value]); } static void dsp_bset_aa(void) @@ -918,9 +876,7 @@ static void dsp_bset_aa(void) sprintf(name,"x:0x%04x",value); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bset #%d,%s\n", numbit, name); + sprintf(str_instr,"bset #%d,%s", numbit, name); } static void dsp_bset_ea(void) @@ -941,9 +897,7 @@ static void dsp_bset_ea(void) sprintf(name,"x:%s",addr_name); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bset #%d,%s\n", numbit, name); + sprintf(str_instr,"bset #%d,%s", numbit, name); } static void dsp_bset_pp(void) @@ -963,27 +917,18 @@ static void dsp_bset_pp(void) sprintf(name,"x:0x%04x",value+0xffc0); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bset #%d,%s\n", numbit, name); + sprintf(str_instr,"bset #%d,%s", numbit, name); } static void dsp_bset_reg(void) { /* bset #n,R */ - char name[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - sprintf(name,"%s",registers_name[value]); - registers_changed[value]=1; - - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," bset #%d,%s\n", numbit, name); + sprintf(str_instr,"bset #%d,%s", numbit, registers_name[value]); } static void dsp_btst_aa(void) @@ -1003,9 +948,7 @@ static void dsp_btst_aa(void) sprintf(name,"x:0x%04x",value); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," btst #%d,%s\n", numbit, name); + sprintf(str_instr,"btst #%d,%s", numbit, name); } static void dsp_btst_ea(void) @@ -1026,9 +969,7 @@ static void dsp_btst_ea(void) sprintf(name,"x:%s",addr_name); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," btst #%d,%s\n", numbit, name); + sprintf(str_instr,"btst #%d,%s", numbit, name); } static void dsp_btst_pp(void) @@ -1048,27 +989,18 @@ static void dsp_btst_pp(void) sprintf(name,"x:0x%04x",value+0xffc0); } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," btst #%d,%s\n", numbit, name); + sprintf(str_instr,"btst #%d,%s", numbit, name); } static void dsp_btst_reg(void) { /* btst #n,R */ - char name[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - sprintf(name,"%s",registers_name[value]); - registers_changed[value]=1; - - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," btst #%d,%s\n", numbit, name); + sprintf(str_instr,"btst #%d,%s", numbit, registers_name[value]); } static void dsp_div(void) @@ -1090,10 +1022,8 @@ static void dsp_div(void) break; } destreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[destreg]=1; - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," div %s,%s\n", registers_name[srcreg],registers_name[destreg]); + sprintf(str_instr,"div %s,%s", registers_name[srcreg],registers_name[destreg]); } static void dsp_do_aa(void) @@ -1108,25 +1038,21 @@ static void dsp_do_aa(void) sprintf(name, "x:0x%04x", (cur_inst>>8) & BITMASK(6)); } - sprintf(str_instr," do %s,p:0x%04x\n", + sprintf(str_instr,"do %s,p:0x%04x", name, read_memory(dsp_core->pc+1) ); - registers_changed[DSP_REG_LA]=1; - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1;} +} static void dsp_do_imm(void) { disasm_cur_inst_len++; - sprintf(str_instr," do #0x%04x,p:0x%04x\n", + sprintf(str_instr,"do #0x%04x,p:0x%04x", ((cur_inst>>8) & BITMASK(8))|((cur_inst & BITMASK(4))<<8), read_memory(dsp_core->pc+1) ); - registers_changed[DSP_REG_LA]=1; - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1;} +} static void dsp_do_ea(void) { @@ -1144,34 +1070,30 @@ static void dsp_do_ea(void) sprintf(name, "x:%s", addr_name); } - sprintf(str_instr," do %s,p:0x%04x\n", + sprintf(str_instr,"do %s,p:0x%04x", name, read_memory(dsp_core->pc+1) ); - registers_changed[DSP_REG_LA]=1; - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1;} +} static void dsp_do_reg(void) { disasm_cur_inst_len++; - sprintf(str_instr," do %s,p:0x%04x\n", + sprintf(str_instr,"do %s,p:0x%04x", registers_name[(cur_inst>>8) & BITMASK(6)], read_memory(dsp_core->pc+1) ); - registers_changed[DSP_REG_LA]=1; - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1;} +} static void dsp_enddo(void) { - sprintf(str_instr," enddo\n"); + sprintf(str_instr,"enddo"); } static void dsp_illegal(void) { - sprintf(str_instr," illegal\n"); + sprintf(str_instr,"illegal"); } static void dsp_jcc_ea(void) @@ -1183,7 +1105,7 @@ static void dsp_jcc_ea(void) cc_code=cur_inst & BITMASK(4); dsp_calc_cc(cc_code, cond_name); - sprintf(str_instr," j%s p:%s\n", cond_name, addr_name); + sprintf(str_instr,"j%s p:%s", cond_name, addr_name); } static void dsp_jcc_imm(void) @@ -1195,7 +1117,7 @@ static void dsp_jcc_imm(void) cc_code=(cur_inst>>12) & BITMASK(4); dsp_calc_cc(cc_code, cond_name); - sprintf(str_instr," j%s p:%s\n", cond_name, addr_name); + sprintf(str_instr,"j%s p:%s", cond_name, addr_name); } static void dsp_jclr_aa(void) @@ -1217,7 +1139,7 @@ static void dsp_jclr_aa(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1244,7 +1166,7 @@ static void dsp_jclr_ea(void) sprintf(srcname, "x:%s", addr_name); } - sprintf(str_instr," jclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1271,7 +1193,7 @@ static void dsp_jclr_pp(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1281,31 +1203,23 @@ static void dsp_jclr_pp(void) static void dsp_jclr_reg(void) { /* jclr #n,R,p:xx */ - char srcname[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; disasm_cur_inst_len++; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - strcpy(srcname, registers_name[value]); - - sprintf(str_instr," jclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jclr #%d,%s,p:0x%04x", numbit, - srcname, + registers_name[value], read_memory(dsp_core->pc+1) ); } static void dsp_jmp_imm(void) { - char dstname[16]; - - sprintf(dstname, "0x%04x", cur_inst & BITMASK(12)); - - sprintf(str_instr," jmp p:%s\n", dstname); + sprintf(str_instr,"jmp p:0x%04x", cur_inst & BITMASK(12)); } static void dsp_jmp_ea(void) @@ -1314,7 +1228,7 @@ static void dsp_jmp_ea(void) dsp_calc_ea((cur_inst >>8) & BITMASK(6), dstname); - sprintf(str_instr," jmp p:%s\n", dstname); + sprintf(str_instr,"jmp p:%s", dstname); } static void dsp_jscc_ea(void) @@ -1326,7 +1240,7 @@ static void dsp_jscc_ea(void) cc_code=cur_inst & BITMASK(4); dsp_calc_cc(cc_code, cond_name); - sprintf(str_instr," js%s p:%s\n", cond_name, addr_name); + sprintf(str_instr,"js%s p:%s", cond_name, addr_name); } static void dsp_jscc_imm(void) @@ -1338,7 +1252,7 @@ static void dsp_jscc_imm(void) cc_code=(cur_inst>>12) & BITMASK(4); dsp_calc_cc(cc_code, cond_name); - sprintf(str_instr," js%s p:%s\n", cond_name, addr_name); + sprintf(str_instr,"js%s p:%s", cond_name, addr_name); } static void dsp_jsclr_aa(void) @@ -1360,7 +1274,7 @@ static void dsp_jsclr_aa(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jsclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1387,7 +1301,7 @@ static void dsp_jsclr_ea(void) sprintf(srcname, "x:%s", addr_name); } - sprintf(str_instr," jsclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1414,7 +1328,7 @@ static void dsp_jsclr_pp(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jsclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsclr #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1424,20 +1338,16 @@ static void dsp_jsclr_pp(void) static void dsp_jsclr_reg(void) { /* jsclr #n,R,p:xx */ - char srcname[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; disasm_cur_inst_len++; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - strcpy(srcname, registers_name[value]); - - sprintf(str_instr," jsclr #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsclr #%d,%s,p:0x%04x", numbit, - srcname, + registers_name[value], read_memory(dsp_core->pc+1) ); } @@ -1461,7 +1371,7 @@ static void dsp_jset_aa(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1488,7 +1398,7 @@ static void dsp_jset_ea(void) sprintf(srcname, "x:%s", addr_name); } - sprintf(str_instr," jset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1515,7 +1425,7 @@ static void dsp_jset_pp(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1525,31 +1435,23 @@ static void dsp_jset_pp(void) static void dsp_jset_reg(void) { /* jset #n,R,p:xx */ - char srcname[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; disasm_cur_inst_len++; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - strcpy(srcname, registers_name[value]); - - sprintf(str_instr," jset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jset #%d,%s,p:0x%04x", numbit, - srcname, + registers_name[value], read_memory(dsp_core->pc+1) ); } static void dsp_jsr_imm(void) { - char dstname[16]; - - sprintf(dstname, "0x%04x", cur_inst & BITMASK(12)); - - sprintf(str_instr," jsr p:%s\n", dstname); + sprintf(str_instr,"jsr p:0x%04x", cur_inst & BITMASK(12)); } static void dsp_jsr_ea(void) @@ -1558,7 +1460,7 @@ static void dsp_jsr_ea(void) dsp_calc_ea((cur_inst>>8) & BITMASK(6),dstname); - sprintf(str_instr," jsr p:%s\n", dstname); + sprintf(str_instr,"jsr p:%s", dstname); } static void dsp_jsset_aa(void) @@ -1580,7 +1482,7 @@ static void dsp_jsset_aa(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jsset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1607,7 +1509,7 @@ static void dsp_jsset_ea(void) sprintf(srcname, "x:%s", addr_name); } - sprintf(str_instr," jsset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1634,7 +1536,7 @@ static void dsp_jsset_pp(void) sprintf(srcname, "x:0x%04x", value); } - sprintf(str_instr," jsset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsset #%d,%s,p:0x%04x", numbit, srcname, read_memory(dsp_core->pc+1) @@ -1644,20 +1546,16 @@ static void dsp_jsset_pp(void) static void dsp_jsset_reg(void) { /* jsset #n,r,p:xx */ - char srcname[16]; - Uint32 memspace, value, numbit; + Uint32 value, numbit; disasm_cur_inst_len++; - memspace = (cur_inst>>6) & 1; value = (cur_inst>>8) & BITMASK(6); numbit = cur_inst & BITMASK(5); - strcpy(srcname, registers_name[value]); - - sprintf(str_instr," jsset #%d,%s,p:0x%04x\n", + sprintf(str_instr,"jsset #%d,%s,p:0x%04x", numbit, - srcname, + registers_name[value], read_memory(dsp_core->pc+1) ); } @@ -1668,9 +1566,8 @@ static void dsp_lua(void) dsp_calc_ea((cur_inst>>8) & BITMASK(5), addr_name); numreg = cur_inst & BITMASK(3); - registers_changed[DSP_REG_R0+numreg]=1; - sprintf(str_instr," lua %s,r%d\n", addr_name, numreg); + sprintf(str_instr,"lua %s,r%d", addr_name, numreg); } static void dsp_movec_reg(void) @@ -1685,14 +1582,11 @@ static void dsp_movec_reg(void) if (cur_inst & (1<<15)) { /* Write D1 */ - sprintf(str_instr," movec %s,%s\n", registers_name[numreg2], registers_name[numreg1]); - registers_changed[numreg1]=1; + sprintf(str_instr,"movec %s,%s", registers_name[numreg2], registers_name[numreg1]); } else { /* Read S1 */ - sprintf(str_instr," movec %s,%s\n", registers_name[numreg1], registers_name[numreg2]); - registers_changed[numreg2]=1; + sprintf(str_instr,"movec %s,%s", registers_name[numreg1], registers_name[numreg2]); } - registers_changed[DSP_REG_SR]=1; } static void dsp_movec_aa(void) @@ -1725,8 +1619,7 @@ static void dsp_movec_aa(void) sprintf(dstname, "%s:0x%04x", spacename, addr); } - sprintf(str_instr," movec %s,%s\n", srcname, dstname); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movec %s,%s", srcname, dstname); } static void dsp_movec_imm(void) @@ -1737,9 +1630,7 @@ static void dsp_movec_imm(void) numreg = cur_inst & BITMASK(6); - registers_changed[numreg]=1; - sprintf(str_instr," movec #0x%02x,%s\n", (cur_inst>>8) & BITMASK(8), registers_name[numreg]); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movec #0x%02x,%s", (cur_inst>>8) & BITMASK(8), registers_name[numreg]); } static void dsp_movec_ea(void) @@ -1772,7 +1663,6 @@ static void dsp_movec_ea(void) } else { sprintf(srcname, "%s:%s", spacename, addr_name); } - registers_changed[numreg]=1; strcpy(dstname, registers_name[numreg]); } else { /* Read S1 */ @@ -1780,8 +1670,7 @@ static void dsp_movec_ea(void) sprintf(dstname, "%s:%s", spacename, addr_name); } - sprintf(str_instr," movec %s,%s\n", srcname, dstname); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movec %s,%s", srcname, dstname); } static void dsp_movem_aa(void) @@ -1795,7 +1684,6 @@ static void dsp_movem_aa(void) numreg = cur_inst & BITMASK(6); if (cur_inst & (1<<15)) { /* Write D */ - registers_changed[numreg]=1; sprintf(srcname, "p:%s", addr_name); strcpy(dstname, registers_name[numreg]); } else { @@ -1803,9 +1691,8 @@ static void dsp_movem_aa(void) strcpy(srcname, registers_name[numreg]); sprintf(dstname, "p:%s", addr_name); } - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," movem %s,%s\n", srcname, dstname); + sprintf(str_instr,"movem %s,%s", srcname, dstname); } static void dsp_movem_ea(void) @@ -1820,7 +1707,6 @@ static void dsp_movem_ea(void) numreg = cur_inst & BITMASK(6); if (cur_inst & (1<<15)) { /* Write D */ - registers_changed[numreg]=1; sprintf(srcname, "p:%s", addr_name); strcpy(dstname, registers_name[numreg]); } else { @@ -1828,9 +1714,8 @@ static void dsp_movem_ea(void) strcpy(srcname, registers_name[numreg]); sprintf(dstname, "p:%s", addr_name); } - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," movem %s,%s\n", srcname, dstname); + sprintf(str_instr,"movem %s,%s", srcname, dstname); } static void dsp_movep_0(void) @@ -1866,12 +1751,10 @@ static void dsp_movep_0(void) sprintf(srcname, "x:0x%04x", addr); } - registers_changed[numreg]=1; strcpy(dstname, registers_name[numreg]); } - sprintf(str_instr," movep %s,%s\n", srcname, dstname); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movep %s,%s", srcname, dstname); } static void dsp_movep_1(void) @@ -1910,8 +1793,7 @@ static void dsp_movep_1(void) sprintf(dstname, "p:%s", name); } - sprintf(str_instr," movep %s,%s\n", srcname, dstname); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movep %s,%s", srcname, dstname); } static void dsp_movep_23(void) @@ -1970,13 +1852,12 @@ static void dsp_movep_23(void) } } - sprintf(str_instr," movep %s,%s\n", srcname, dstname); - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"movep %s,%s", srcname, dstname); } static void dsp_nop(void) { - sprintf(str_instr," nop\n"); + sprintf(str_instr,"nop"); } static void dsp_norm(void) @@ -1986,38 +1867,25 @@ static void dsp_norm(void) srcreg = DSP_REG_R0+((cur_inst>>8) & BITMASK(3)); destreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[srcreg]=1; - registers_changed[destreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," norm %s,%s\n", registers_name[srcreg], registers_name[destreg]); + sprintf(str_instr,"norm %s,%s", registers_name[srcreg], registers_name[destreg]); } static void dsp_ori(void) { - const char *regname; - switch(cur_inst & BITMASK(2)) { case 0: - regname="mr"; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"ori #0x%02x,mr", (cur_inst>>8) & BITMASK(8)); break; case 1: - regname="ccr"; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"ori #0x%02x,ccr", (cur_inst>>8) & BITMASK(8)); break; case 2: - regname="omr"; - registers_changed[DSP_REG_OMR]=1; + sprintf(str_instr,"ori #0x%02x,omr", (cur_inst>>8) & BITMASK(8)); break; default: - regname=""; break; } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," ori #0x%02x,%s\n", (cur_inst>>8) & BITMASK(8), regname); } static void dsp_rep_aa(void) @@ -2033,18 +1901,14 @@ static void dsp_rep_aa(void) sprintf(name, "x:0x%04x",(cur_inst>>8) & BITMASK(6)); } - sprintf(str_instr," rep %s\n", name); - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"rep %s", name); } static void dsp_rep_imm(void) { /* #xxx */ - sprintf(str_instr," rep #0x%02x\n", ((cur_inst>>8) & BITMASK(8)) + sprintf(str_instr,"rep #0x%02x", ((cur_inst>>8) & BITMASK(8)) + ((cur_inst & BITMASK(4))<<8)); - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1; } static void dsp_rep_ea(void) @@ -2061,45 +1925,39 @@ static void dsp_rep_ea(void) sprintf(name, "x:%s",addr_name); } - sprintf(str_instr," rep %s\n", name); - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"rep %s", name); } static void dsp_rep_reg(void) { /* R */ - sprintf(str_instr," rep %s\n", registers_name[(cur_inst>>8) & BITMASK(6)]); - registers_changed[DSP_REG_LC]=1; - registers_changed[DSP_REG_SR]=1; + sprintf(str_instr,"rep %s", registers_name[(cur_inst>>8) & BITMASK(6)]); } static void dsp_reset(void) { - sprintf(str_instr," reset\n"); + sprintf(str_instr,"reset"); } static void dsp_rti(void) { - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," rti\n"); + sprintf(str_instr,"rti"); } static void dsp_rts(void) { - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," rts\n"); + sprintf(str_instr,"rts"); } static void dsp_stop(void) { - sprintf(str_instr," stop\n"); + sprintf(str_instr,"stop"); } static void dsp_swi(void) { - sprintf(str_instr," swi\n"); + sprintf(str_instr,"swi"); } static void dsp_tcc(void) @@ -2111,13 +1969,11 @@ static void dsp_tcc(void) src1reg = registers_tcc[(cur_inst>>3) & BITMASK(4)][0]; dst1reg = registers_tcc[(cur_inst>>3) & BITMASK(4)][1]; - registers_changed[dst1reg]=1; if (cur_inst & (1<<16)) { src2reg = DSP_REG_R0+(cur_inst & BITMASK(3)); dst2reg = DSP_REG_R0+((cur_inst>>8) & BITMASK(3)); - registers_changed[dst2reg]=1; - sprintf(str_instr," t%s %s,%s %s,%s\n", + sprintf(str_instr,"t%s %s,%s %s,%s", ccname, registers_name[src1reg], registers_name[dst1reg], @@ -2125,7 +1981,7 @@ static void dsp_tcc(void) registers_name[dst2reg] ); } else { - sprintf(str_instr," t%s %s,%s\n", + sprintf(str_instr,"t%s %s,%s", ccname, registers_name[src1reg], registers_name[dst1reg] @@ -2135,7 +1991,7 @@ static void dsp_tcc(void) static void dsp_wait(void) { - sprintf(str_instr," wait\n"); + sprintf(str_instr,"wait"); } /********************************** @@ -2147,7 +2003,6 @@ static void dsp_pm(void) Uint32 value; value = (cur_inst >> 20) & BITMASK(4); - opcodes_parmove[value](); } @@ -2171,8 +2026,6 @@ static void dsp_pm_0(void) numreg2 = DSP_REG_X0; } - registers_changed[numreg1]=1; - sprintf(parallelmove_name, "%s,%s:%s %s,%s", registers_name[numreg1], @@ -2213,13 +2066,9 @@ static void dsp_pm_1(void) s1reg = DSP_REG_A+((cur_inst>>19) & 1); d1reg = DSP_REG_X0+((cur_inst>>18) & 1); - registers_changed[d1reg]=1; - if (write_flag) { /* Write D2 */ - registers_changed[d2reg]=1; - if (retour) { sprintf(parallelmove_name,"%s,%s #%s,%s", registers_name[s1reg], @@ -2257,13 +2106,9 @@ static void dsp_pm_1(void) s2reg = DSP_REG_A+((cur_inst>>17) & 1); d2reg = DSP_REG_Y0+((cur_inst>>16) & 1); - registers_changed[d2reg]=1; - if (write_flag) { /* Write D1 */ - registers_changed[d1reg]=1; - if (retour) { sprintf(parallelmove_name,"#%s,%s %s,%s", addr_name, @@ -2308,7 +2153,6 @@ static void dsp_pm_2(void) if (((cur_inst >> 8) & 0xffe0) == 0x2040) { dsp_calc_ea((cur_inst>>8) & BITMASK(5), addr_name); - registers_changed[DSP_REG_R0+((cur_inst>>8) & BITMASK(3))]=1; sprintf(parallelmove_name, "%s,r%d",addr_name, (cur_inst>>8) & BITMASK(3)); return; } @@ -2316,13 +2160,11 @@ static void dsp_pm_2(void) if (((cur_inst >> 8) & 0xfc00) == 0x2000) { numreg1 = (cur_inst>>13) & BITMASK(5); numreg2 = (cur_inst>>8) & BITMASK(5); - registers_changed[numreg2]=1; sprintf(parallelmove_name, "%s,%s", registers_name[numreg1], registers_name[numreg2]); return; } numreg1 = (cur_inst>>16) & BITMASK(5); - registers_changed[numreg1]=1; sprintf(parallelmove_name, "#0x%02x,%s", (cur_inst >> 8) & BITMASK(8), registers_name[numreg1]); } @@ -2366,8 +2208,6 @@ static void dsp_pm_4(void) if (cur_inst & (1<<15)) { /* Write D */ - registers_changed[disasm_registers_lmove[value][0]]=1; - registers_changed[disasm_registers_lmove[value][1]]=1; if (retour) { sprintf(parallelmove_name, "#%s,%s", addr_name, registers_lmove[value]); } else { @@ -2395,7 +2235,6 @@ static void dsp_pm_4(void) if (cur_inst & (1<<15)) { /* Write D */ - registers_changed[value]=1; if (retour) { sprintf(parallelmove_name, "#%s,%s", addr_name, registers_name[value]); } else { @@ -2412,8 +2251,6 @@ static void dsp_pm_4(void) if (cur_inst & (1<<15)) { /* Write D */ - registers_changed[value]=1; - if (retour) { sprintf(parallelmove_name, "#%s,%s", addr_name, registers_name[value]); } else { @@ -2469,9 +2306,7 @@ static void dsp_pm_8(void) dsp_calc_ea(ea_mode2, addr2_name); if (cur_inst & (1<<15)) { - registers_changed[numreg1]=1; if (cur_inst & (1<<22)) { - registers_changed[numreg2]=1; sprintf(parallelmove_name, "x:%s,%s y:%s,%s", addr1_name, registers_name[numreg1], @@ -2488,7 +2323,6 @@ static void dsp_pm_8(void) } } else { if (cur_inst & (1<<22)) { - registers_changed[numreg2]=1; sprintf(parallelmove_name, "%s,x:%s y:%s,%s", registers_name[numreg1], addr1_name, @@ -2517,10 +2351,7 @@ static void dsp_abs(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," abs %s %s\n", registers_name[numreg], parallelmove_name); + sprintf(str_instr,"abs %s %s", registers_name[numreg], parallelmove_name); } static void dsp_adc(void) @@ -2535,10 +2366,8 @@ static void dsp_adc(void) } numreg=DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - sprintf(str_instr," adc %s,%s %s\n", + sprintf(str_instr,"adc %s,%s %s", srcname, registers_name[numreg], parallelmove_name @@ -2581,10 +2410,7 @@ static void dsp_add(void) break; } - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," add %s,%s %s\n", + sprintf(str_instr,"add %s,%s %s", srcname, registers_name[DSP_REG_A+dstreg], parallelmove_name @@ -2597,10 +2423,7 @@ static void dsp_addl(void) numreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," addl %s,%s %s\n", + sprintf(str_instr,"addl %s,%s %s", registers_name[DSP_REG_A+(numreg ^ 1)], registers_name[DSP_REG_A+numreg], parallelmove_name @@ -2613,10 +2436,7 @@ static void dsp_addr(void) numreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," addr %s,%s %s\n", + sprintf(str_instr,"addr %s,%s %s", registers_name[DSP_REG_A+(numreg ^ 1)], registers_name[DSP_REG_A+numreg], parallelmove_name @@ -2643,10 +2463,7 @@ static void dsp_and(void) } dstreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," and %s,%s %s\n", + sprintf(str_instr,"and %s,%s %s", registers_name[srcreg], registers_name[dstreg], parallelmove_name @@ -2659,10 +2476,7 @@ static void dsp_asl(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," asl %s %s\n", + sprintf(str_instr,"asl %s %s", registers_name[numreg], parallelmove_name ); @@ -2674,10 +2488,7 @@ static void dsp_asr(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," asr %s %s\n", + sprintf(str_instr,"asr %s %s", registers_name[numreg], parallelmove_name ); @@ -2689,10 +2500,7 @@ static void dsp_clr(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," clr %s %s\n", + sprintf(str_instr,"clr %s %s", registers_name[numreg], parallelmove_name ); @@ -2723,9 +2531,7 @@ static void dsp_cmp(void) break; } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," cmp %s,%s %s\n", + sprintf(str_instr,"cmp %s,%s %s", registers_name[srcreg], registers_name[DSP_REG_A+dstreg], parallelmove_name @@ -2757,9 +2563,7 @@ static void dsp_cmpm(void) break; } - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," cmpm %s,%s %s\n", + sprintf(str_instr,"cmpm %s,%s %s", registers_name[srcreg], registers_name[DSP_REG_A+dstreg], parallelmove_name @@ -2786,10 +2590,7 @@ static void dsp_eor(void) } dstreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," eor %s,%s %s\n", + sprintf(str_instr,"eor %s,%s %s", registers_name[srcreg], registers_name[dstreg], parallelmove_name @@ -2802,10 +2603,7 @@ static void dsp_lsl(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," lsl %s %s\n", + sprintf(str_instr,"lsl %s %s", registers_name[numreg], parallelmove_name ); @@ -2817,10 +2615,7 @@ static void dsp_lsr(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," lsr %s %s\n", + sprintf(str_instr,"lsr %s %s", registers_name[numreg], parallelmove_name ); @@ -2873,10 +2668,7 @@ static void dsp_mac(void) } dstreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," mac %s%s,%s,%s %s\n", + sprintf(str_instr,"mac %s%s,%s,%s %s", sign_name, registers_name[src1reg], registers_name[src2reg], @@ -2932,10 +2724,7 @@ static void dsp_macr(void) } dstreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," macr %s%s,%s,%s %s\n", + sprintf(str_instr,"macr %s%s,%s,%s %s", sign_name, registers_name[src1reg], registers_name[src2reg], @@ -2946,7 +2735,7 @@ static void dsp_macr(void) static void dsp_move(void) { - sprintf(str_instr," move %s\n", parallelmove_name); + sprintf(str_instr,"move %s", parallelmove_name); } static void dsp_mpy(void) @@ -2996,10 +2785,7 @@ static void dsp_mpy(void) } dstreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," mpy %s%s,%s,%s %s\n", + sprintf(str_instr,"mpy %s%s,%s,%s %s", sign_name, registers_name[src1reg], registers_name[src2reg], @@ -3055,10 +2841,7 @@ static void dsp_mpyr(void) } dstreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," mpyr %s%s,%s,%s %s\n", + sprintf(str_instr,"mpyr %s%s,%s,%s %s", sign_name, registers_name[src1reg], registers_name[src2reg], @@ -3073,10 +2856,7 @@ static void dsp_neg(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," neg %s %s\n", + sprintf(str_instr,"neg %s %s", registers_name[numreg], parallelmove_name ); @@ -3088,10 +2868,7 @@ static void dsp_not(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," not %s %s\n", + sprintf(str_instr,"not %s %s", registers_name[numreg], parallelmove_name ); @@ -3117,10 +2894,7 @@ static void dsp_or(void) } dstreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," or %s,%s %s\n", + sprintf(str_instr,"or %s,%s %s", registers_name[srcreg], registers_name[dstreg], parallelmove_name @@ -3133,10 +2907,7 @@ static void dsp_rnd(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," rnd %s %s\n", + sprintf(str_instr,"rnd %s %s", registers_name[numreg], parallelmove_name ); @@ -3148,10 +2919,7 @@ static void dsp_rol(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," rol %s %s\n", + sprintf(str_instr,"rol %s %s", registers_name[numreg], parallelmove_name ); @@ -3163,10 +2931,7 @@ static void dsp_ror(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," ror %s %s\n", + sprintf(str_instr,"ror %s %s", registers_name[numreg], parallelmove_name ); @@ -3185,10 +2950,7 @@ static void dsp_sbc(void) numreg = DSP_REG_A+((cur_inst>>3) & 1); - registers_changed[numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," sbc %s,%s %s\n", + sprintf(str_instr,"sbc %s,%s %s", srcname, registers_name[numreg], parallelmove_name @@ -3231,10 +2993,7 @@ static void dsp_sub(void) break; } - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," sub %s,%s %s\n", + sprintf(str_instr,"sub %s,%s %s", srcname, registers_name[DSP_REG_A+dstreg], parallelmove_name @@ -3247,10 +3006,7 @@ static void dsp_subl(void) numreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," subl %s,%s %s\n", + sprintf(str_instr,"subl %s,%s %s", registers_name[DSP_REG_A+(numreg ^ 1)], registers_name[DSP_REG_A+numreg], parallelmove_name @@ -3263,10 +3019,7 @@ static void dsp_subr(void) numreg = (cur_inst>>3) & 1; - registers_changed[DSP_REG_A+numreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," subr %s,%s %s\n", + sprintf(str_instr,"subr %s,%s %s", registers_name[DSP_REG_A+(numreg ^ 1)], registers_name[DSP_REG_A+numreg], parallelmove_name @@ -3299,10 +3052,7 @@ static void dsp_tfr(void) break; } - registers_changed[DSP_REG_A+dstreg]=1; - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," tfr %s,%s %s\n", + sprintf(str_instr,"tfr %s,%s %s", registers_name[srcreg], registers_name[DSP_REG_A+dstreg], parallelmove_name @@ -3311,9 +3061,7 @@ static void dsp_tfr(void) static void dsp_tst(void) { - registers_changed[DSP_REG_SR]=1; - - sprintf(str_instr," tst %s %s\n", + sprintf(str_instr,"tst %s %s", registers_name[DSP_REG_A+((cur_inst>>3) & 1)], parallelmove_name );