avoid using magic constants for disasm source metadata

This commit is contained in:
Stanislav Shwartsman 2017-06-05 19:55:40 +00:00
parent 8006ec9fa3
commit 46ef85ce0f
3 changed files with 10 additions and 6 deletions

View File

@ -512,8 +512,8 @@ char* disasm(char *disbufptr, const bxInstruction_c *i, bx_address cs_base, bx_a
unsigned srcs_used = 0;
for (n = 0; n <= 3; n++) {
unsigned src = (unsigned) BxOpcodesTable[ia_opcode].src[n];
unsigned src_type = src >> 3;
unsigned src_index = src & 0x7;
unsigned src_type = BX_DISASM_SRC_TYPE(src);
unsigned src_index = BX_DISASM_SRC_ORIGIN(src);
if (! src_type && src_index != BX_SRC_RM && src_index != BX_SRC_EVEX_RM) continue;
if (srcs_used++ > 0)
disbufptr = dis_sprintf(disbufptr, ", ");

View File

@ -255,6 +255,9 @@ enum {
#define BX_FORM_SRC(type, src) (((type) << 3) | (src))
#define BX_DISASM_SRC_ORIGIN(desc) (desc & 0x7)
#define BX_DISASM_SRC_TYPE(desc) (desc >> 3)
const Bit8u OP_NONE = BX_SRC_NONE;
const Bit8u OP_Eb = BX_FORM_SRC(BX_GPR8, BX_SRC_RM);

View File

@ -1554,8 +1554,9 @@ bx_bool assign_srcs(bxInstruction_c *i, unsigned ia_opcode, unsigned nnn, unsign
{
for (unsigned n = 0; n <= 3; n++) {
unsigned src = (unsigned) BxOpcodesTable[ia_opcode].src[n];
unsigned type = src >> 3;
switch(src & 0x7) {
unsigned type = BX_DISASM_SRC_TYPE(src);
unsigned index = BX_DISASM_SRC_ORIGIN(src);
switch(index) {
case BX_SRC_NONE:
break;
case BX_SRC_EAX:
@ -1596,8 +1597,8 @@ bx_bool assign_srcs(bxInstruction_c *i, unsigned ia_opcode, bx_bool is_64, unsig
// assign sources
for (unsigned n = 0; n <= 3; n++) {
unsigned src = (unsigned) BxOpcodesTable[ia_opcode].src[n];
unsigned type = src >> 3;
src &= 0x7;
unsigned type = BX_DISASM_SRC_TYPE(src);
src = BX_DISASM_SRC_ORIGIN(src);
#if BX_SUPPORT_EVEX
bx_bool mem_src = BX_FALSE;
#endif