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); 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 // immediate
void disassembler::I1 (unsigned) void disassembler::I1 (unsigned)
{ {
if (intel_mode) if (! intel_mode) dis_putc('$');
dis_sprintf ("1"); dis_putc ('1');
else
dis_sprintf("$1");
} }
void disassembler::Ib (unsigned attr) void disassembler::Ib (unsigned attr)

View File

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

View File

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