small optimization in disasm code

This commit is contained in:
Stanislav Shwartsman 2004-12-15 17:15:43 +00:00
parent 5955549a8d
commit 7f26baeb94
4 changed files with 31 additions and 26 deletions

View File

@ -239,3 +239,9 @@ void disassembler::dis_sprintf(char *fmt, ...)
disbufptr += strlen(disbufptr);
}
void disassembler::dis_putc(char symbol)
{
*disbufptr++ = symbol;
*disbufptr = 0;
}

View File

@ -288,10 +288,8 @@ void disassembler::Sw (unsigned attr)
// immediate
void disassembler::I1 (unsigned)
{
if (intel_mode)
dis_sprintf ("1");
else
dis_sprintf("$1");
if (! intel_mode) dis_putc('$');
dis_putc ('1');
}
void disassembler::Ib (unsigned attr)

View File

@ -223,6 +223,7 @@ private:
};
#endif
void dis_putc(char symbol);
void dis_sprintf(char *fmt, ...);
void decode_modrm();

View File

@ -206,19 +206,19 @@ void disassembler::print_disassembly_intel(const BxDisasmOpcodeInfo_t *entry)
break;
case 'X': // movsx or movzx
dis_sprintf("x");
dis_putc('x');
break;
case 'S': // string
if (i32bit_opsize)
dis_sprintf("d");
dis_putc('d');
else
dis_sprintf("w");
dis_putc('w');
break;
case 'D':
if (i32bit_opsize)
dis_sprintf("d");
dis_putc('d');
break;
default:
@ -226,7 +226,7 @@ void disassembler::print_disassembly_intel(const BxDisasmOpcodeInfo_t *entry)
break;
}
dis_sprintf(" ");
dis_putc(' ');
if (entry->Operand1) {
(this->*entry->Operand1)(entry->Op1Attr);
@ -273,55 +273,55 @@ void disassembler::print_disassembly_att(const BxDisasmOpcodeInfo_t *entry)
switch(*disbufptr) {
case 'B':
dis_sprintf("b");
dis_putc('b');
break;
case 'W':
dis_sprintf("w");
dis_putc('w');
break;
case 'S':
case 'V':
if (i32bit_opsize)
dis_sprintf("l");
dis_putc('l');
else
dis_sprintf("w");
dis_putc('w');
break;
case 'L':
dis_sprintf("l");
dis_putc('l');
break;
case 'Q':
dis_sprintf("q");
dis_putc('q');
break;
case 'T':
dis_sprintf("t");
dis_putc('t');
break;
case 'X':
if (entry->Op2Attr == B_SIZE)
dis_sprintf("b");
dis_putc('b');
else if (entry->Op2Attr == W_SIZE)
dis_sprintf("w");
dis_putc('w');
else if (entry->Op2Attr == D_SIZE)
dis_sprintf("l");
dis_putc('l');
else
printf("Internal disassembler error !\n");
if (entry->Op1Attr == W_SIZE)
dis_sprintf("w");
dis_putc('w');
else if (entry->Op1Attr == D_SIZE)
dis_sprintf("l");
dis_putc('l');
else if (entry->Op1Attr == Q_SIZE)
dis_sprintf("q");
dis_putc('q');
else if (entry->Op1Attr == V_SIZE)
{
if (i32bit_opsize)
dis_sprintf("l");
dis_putc('l');
else
dis_sprintf("w");
dis_putc('w');
}
else
printf("Internal disassembler error !\n");
@ -329,7 +329,7 @@ void disassembler::print_disassembly_att(const BxDisasmOpcodeInfo_t *entry)
case 'D':
if (i32bit_opsize)
dis_sprintf("l");
dis_putc('l');
break;
default:
@ -337,7 +337,7 @@ void disassembler::print_disassembly_att(const BxDisasmOpcodeInfo_t *entry)
break;
}
dis_sprintf(" ");
dis_putc(' ');
if (entry->Operand3) {
(this->*entry->Operand3)(entry->Op3Attr);