Simplify macros for immediate loading

This commit is contained in:
Alexis Engelke
2019-04-27 08:19:33 +02:00
parent 1ff0e60ddc
commit db1ec271df

View File

@@ -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)
{ {