Simplify macros for immediate loading
This commit is contained in:
23
decode.c
23
decode.c
@@ -45,22 +45,12 @@ typedef enum DecodeMode DecodeMode;
|
|||||||
kind = entry_copy & ENTRY_MASK; \
|
kind = entry_copy & ENTRY_MASK; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define LOAD_LE_1(buf) (((size_t) ((uint8_t*) buf)[0]))
|
#define LOAD_LE_1(buf) ((size_t) *(uint8_t*) (buf))
|
||||||
#define LOAD_LE_2(buf) (((size_t) ((uint8_t*) buf)[0]) | \
|
#define LOAD_LE_2(buf) (LOAD_LE_1(buf) | LOAD_LE_1((uint8_t*) (buf) + 1)<<8)
|
||||||
((size_t) ((uint8_t*) buf)[1] << 8))
|
#define LOAD_LE_3(buf) (LOAD_LE_2(buf) | LOAD_LE_1((uint8_t*) (buf) + 2)<<16)
|
||||||
#define LOAD_LE_4(buf) (((size_t) ((uint8_t*) buf)[0]) | \
|
#define LOAD_LE_4(buf) (LOAD_LE_2(buf) | LOAD_LE_2((uint8_t*) (buf) + 2)<<16)
|
||||||
((size_t) ((uint8_t*) buf)[1] << 8) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[2] << 16) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[3] << 24))
|
|
||||||
#if defined(ARCH_X86_64)
|
#if defined(ARCH_X86_64)
|
||||||
#define LOAD_LE_8(buf) (((size_t) ((uint8_t*) buf)[0]) | \
|
#define LOAD_LE_8(buf) (LOAD_LE_4(buf) | LOAD_LE_4((uint8_t*) (buf) + 4)<<32)
|
||||||
((size_t) ((uint8_t*) buf)[1] << 8) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[2] << 16) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[3] << 24) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[4] << 32) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[5] << 40) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[6] << 48) | \
|
|
||||||
((size_t) ((uint8_t*) buf)[7] << 56))
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum PrefixSet
|
enum PrefixSet
|
||||||
@@ -580,8 +570,7 @@ fd_decode(const uint8_t* buffer, size_t len_sz, int mode_int, uintptr_t address,
|
|||||||
}
|
}
|
||||||
else if (imm_size == 3)
|
else if (imm_size == 3)
|
||||||
{
|
{
|
||||||
instr->imm = LOAD_LE_2(&buffer[off]);
|
instr->imm = LOAD_LE_3(&buffer[off]);
|
||||||
instr->imm |= LOAD_LE_1(&buffer[off + 2]) << 16;
|
|
||||||
}
|
}
|
||||||
else if (imm_size == 4)
|
else if (imm_size == 4)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user