small optimization in disasm code
This commit is contained in:
parent
5955549a8d
commit
7f26baeb94
@ -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;
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user