CACAO
Macros
codegen.hpp File Reference

Go to the source code of this file.

Macros

#define CALCOFFSETBYTES(var, reg, val)
 
#define CALCIMMEDIATEBYTES(var, val)
 
#define ALIGNCODENOP
 
#define MCODECHECK(icnt)
 
#define M_FMOV(reg, dreg)
 
#define M_DMOV(a, b)   M_FMOV(a,b)
 
#define ICONST(d, c)
 
#define LCONST(d, c)
 
#define BRANCH_UNCONDITIONAL_SIZE   5 /* size in bytes of a branch */
 
#define BRANCH_CONDITIONAL_SIZE   6 /* size in bytes of a branch */
 
#define BRANCH_NOPS
 
#define PATCHER_CALL_SIZE   2 /* size in bytes of a patcher call */
 
#define PATCHER_NOPS
 
#define M_BYTE1(a)
 
#define M_BYTE2(a, b)
 
#define M_ILD(a, b, disp)   emit_mov_membase_reg(cd, (b), (disp), (a))
 
#define M_ILD32(a, b, disp)   emit_mov_membase32_reg(cd, (b), (disp), (a))
 
#define M_ALD(a, b, disp)   M_ILD(a,b,disp)
 
#define M_ALD32(a, b, disp)   M_ILD32(a,b,disp)
 
#define M_ALD_MEM(a, disp)   emit_mov_mem_reg(cd, (disp), (a))
 
#define M_ALD_MEM_GET_OPC(p)   (*(p))
 
#define M_ALD_MEM_GET_MOD(p)   (((*(p + 1)) >> 6) & 0x03)
 
#define M_ALD_MEM_GET_REG(p)   (((*(p + 1)) >> 3) & 0x07)
 
#define M_ALD_MEM_GET_RM(p)   (((*(p + 1)) ) & 0x07)
 
#define M_ALD_MEM_GET_DISP(p)   (*((u4 *) (p + 2)))
 
#define M_LLD(a, b, disp)
 
#define M_LLD32(a, b, disp)
 
#define M_IST(a, b, disp)   emit_mov_reg_membase(cd, (a), (b), (disp))
 
#define M_IST_IMM(a, b, disp)   emit_mov_imm_membase(cd, (u4) (a), (b), (disp))
 
#define M_AST(a, b, disp)   M_IST(a,b,disp)
 
#define M_AST_IMM(a, b, disp)   M_IST_IMM(a,b,disp)
 
#define M_IST32(a, b, disp)   emit_mov_reg_membase32(cd, (a), (b), (disp))
 
#define M_IST32_IMM(a, b, disp)   emit_mov_imm_membase32(cd, (u4) (a), (b), (disp))
 
#define M_LST(a, b, disp)
 
#define M_LST32(a, b, disp)
 
#define M_LST_IMM(a, b, disp)
 
#define M_LST32_IMM(a, b, disp)
 
#define M_IADD(a, b)   emit_alu_reg_reg(cd, ALU_ADD, (a), (b))
 
#define M_ISUB(a, b)   emit_alu_reg_reg(cd, ALU_SUB, (a), (b))
 
#define M_IMUL(a, b)   emit_imul_reg_reg(cd, (a), (b))
 
#define M_IDIV(a)   emit_idiv_reg(cd, (a))
 
#define M_MUL(a)   emit_mul_reg(cd, (a))
 
#define M_IADD_IMM(a, b)   emit_alu_imm_reg(cd, ALU_ADD, (a), (b))
 
#define M_ISUB_IMM(a, b)   emit_alu_imm_reg(cd, ALU_SUB, (a), (b))
 
#define M_IMUL_IMM(a, b, c)   emit_imul_imm_reg_reg(cd, (b), (a), (c))
 
#define M_IADD_IMM32(a, b)   emit_alu_imm32_reg(cd, ALU_ADD, (a), (b))
 
#define M_ISUB_IMM32(a, b)   emit_alu_imm32_reg(cd, ALU_SUB, (a), (b))
 
#define M_IADD_IMM_MEMBASE(a, b, c)   emit_alu_imm_membase(cd, ALU_ADD, (a), (b), (c))
 
#define M_ISUB_IMM_MEMABS(a, b)   emit_alu_imm_memabs(cd, ALU_SUB, (a), (b))
 
#define M_IINC(a)   emit_inc_reg(cd, (a))
 
#define M_IADDC(a, b)   emit_alu_reg_reg(cd, ALU_ADC, (a), (b))
 
#define M_ISUBB(a, b)   emit_alu_reg_reg(cd, ALU_SBB, (a), (b))
 
#define M_IADDC_IMM(a, b)   emit_alu_imm_reg(cd, ALU_ADC, (a), (b))
 
#define M_ISUBB_IMM(a, b)   emit_alu_imm_reg(cd, ALU_SBB, (a), (b))
 
#define M_AADD_IMM(a, b)   M_IADD_IMM(a,b)
 
#define M_AADD_IMM32(a, b)   M_IADD_IMM32(a,b)
 
#define M_ASUB_IMM(a, b)   M_ISUB_IMM(a,b)
 
#define M_NEG(a)   emit_neg_reg(cd, (a))
 
#define M_AND(a, b)   emit_alu_reg_reg(cd, ALU_AND, (a), (b))
 
#define M_OR(a, b)   emit_alu_reg_reg(cd, ALU_OR, (a), (b))
 
#define M_XOR(a, b)   emit_alu_reg_reg(cd, ALU_XOR, (a), (b))
 
#define M_AND_IMM(a, b)   emit_alu_imm_reg(cd, ALU_AND, (a), (b))
 
#define M_OR_IMM(a, b)   emit_alu_imm_reg(cd, ALU_OR, (a), (b))
 
#define M_XOR_IMM(a, b)   emit_alu_imm_reg(cd, ALU_XOR, (a), (b))
 
#define M_AND_IMM32(a, b)   emit_alu_imm32_reg(cd, ALU_AND, (a), (b))
 
#define M_CLR(a)   M_XOR(a,a)
 
#define M_PUSH(a)   emit_push_reg(cd, (a))
 
#define M_PUSH_IMM(a)   emit_push_imm(cd, (s4) (a))
 
#define M_POP(a)   emit_pop_reg(cd, (a))
 
#define M_MOV(a, b)   emit_mov_reg_reg(cd, (a), (b))
 
#define M_MOV_IMM(a, b)   emit_mov_imm_reg(cd, (u4) (a), (b))
 
#define M_MOV_IMM2(a, b)   emit_mov_imm2_reg(cd, (u4) (a), (b))
 
#define M_TEST(a)   emit_test_reg_reg(cd, (a), (a))
 
#define M_TEST_IMM(a, b)   emit_test_imm_reg(cd, (a), (b))
 
#define M_CMP(a, b)   emit_alu_reg_reg(cd, ALU_CMP, (a), (b))
 
#define M_CMP_MEMBASE(a, b, c)   emit_alu_membase_reg(cd, ALU_CMP, (a), (b), (c))
 
#define M_CMP_MEMINDEX(a, b, c, d, e)   emit_alu_memindex_reg(cd, ALU_CMP, (b), (a), (c), (d), (e))
 
#define M_CMP_IMM(a, b)   emit_alu_imm_reg(cd, ALU_CMP, (a), (b))
 
#define M_CMP_IMM_MEMBASE(a, b, c)   emit_alu_imm_membase(cd, ALU_CMP, (a), (b), (c))
 
#define M_CMP_IMM32(a, b)   emit_alu_imm32_reg(cd, ALU_CMP, (a), (b))
 
#define M_BSEXT(a, b)   emit_movsbl_reg_reg(cd, (a), (b))
 
#define M_SSEXT(a, b)   emit_movswl_reg_reg(cd, (a), (b))
 
#define M_BZEXT(a, b)   emit_movzbl_reg_reg(cd, (a), (b))
 
#define M_CZEXT(a, b)   emit_movzwl_reg_reg(cd, (a), (b))
 
#define M_CLTD   M_BYTE1(0x99)
 
#define M_SLL(a)   emit_shift_reg(cd, SHIFT_SHL, (a))
 
#define M_SRA(a)   emit_shift_reg(cd, SHIFT_SAR, (a))
 
#define M_SRL(a)   emit_shift_reg(cd, SHIFT_SHR, (a))
 
#define M_SLL_IMM(a, b)   emit_shift_imm_reg(cd, SHIFT_SHL, (a), (b))
 
#define M_SRA_IMM(a, b)   emit_shift_imm_reg(cd, SHIFT_SAR, (a), (b))
 
#define M_SRL_IMM(a, b)   emit_shift_imm_reg(cd, SHIFT_SHR, (a), (b))
 
#define M_SLLD(a, b)   emit_shld_reg_reg(cd, (a), (b))
 
#define M_SRLD(a, b)   emit_shrd_reg_reg(cd, (a), (b))
 
#define M_SLLD_IMM(a, b, c)   emit_shld_imm_reg_reg(cd, (a), (b), (c))
 
#define M_SRLD_IMM(a, b, c)   emit_shrd_imm_reg_reg(cd, (a), (b), (c))
 
#define M_CALL(a)   emit_call_reg(cd, (a))
 
#define M_CALL_IMM(a)   emit_call_imm(cd, (a))
 
#define M_RET   M_BYTE1(0xc3)
 
#define M_ACMP(a, b)   M_CMP(a,b)
 
#define M_ICMP(a, b)   M_CMP(a,b)
 
#define M_ICMP_IMM(a, b)   emit_alu_imm_reg(cd, ALU_CMP, (a), (b))
 
#define M_BEQ(a)   emit_jcc(cd, CC_E, (a))
 
#define M_BNE(a)   emit_jcc(cd, CC_NE, (a))
 
#define M_BLT(a)   emit_jcc(cd, CC_L, (a))
 
#define M_BLE(a)   emit_jcc(cd, CC_LE, (a))
 
#define M_BGE(a)   emit_jcc(cd, CC_GE, (a))
 
#define M_BGT(a)   emit_jcc(cd, CC_G, (a))
 
#define M_BB(a)   emit_jcc(cd, CC_B, (a))
 
#define M_BBE(a)   emit_jcc(cd, CC_BE, (a))
 
#define M_BAE(a)   emit_jcc(cd, CC_AE, (a))
 
#define M_BA(a)   emit_jcc(cd, CC_A, (a))
 
#define M_BNS(a)   emit_jcc(cd, CC_NS, (a))
 
#define M_BS(a)   emit_jcc(cd, CC_S, (a))
 
#define M_SETE(a)   emit_setcc_reg(cd, CC_E, (a))
 
#define M_JMP(a)   emit_jmp_reg(cd, (a))
 
#define M_JMP_IMM(a)   emit_jmp_imm(cd, (a))
 
#define M_NOP   M_BYTE1(0x90)
 
#define M_UD2   M_BYTE2(0x0f, 0x0b)
 
#define M_FLD(a, b, disp)   emit_flds_membase(cd, (b), (disp))
 
#define M_DLD(a, b, disp)   emit_fldl_membase(cd, (b), (disp))
 
#define M_FLD32(a, b, disp)   emit_flds_membase32(cd, (b), (disp))
 
#define M_DLD32(a, b, disp)   emit_fldl_membase32(cd, (b), (disp))
 
#define M_FST(a, b, disp)   emit_fstps_membase(cd, (b), (disp))
 
#define M_DST(a, b, disp)   emit_fstpl_membase(cd, (b), (disp))
 
#define M_FSTNP(a, b, disp)   emit_fsts_membase(cd, (b), (disp))
 
#define M_DSTNP(a, b, disp)   emit_fstl_membase(cd, (b), (disp))
 

Macro Definition Documentation

#define ALIGNCODENOP
Value:
do { \
for (s1 = 0; s1 < (s4) (((ptrint) cd->mcodeptr) & 7); s1++) \
M_NOP; \
} while (0)
#define M_NOP
Definition: codegen.hpp:318
int32_t s4
Definition: types.hpp:45
int8_t s1
Definition: types.hpp:39
uintptr_t ptrint
Definition: types.hpp:54

Definition at line 58 of file codegen.hpp.

#define BRANCH_CONDITIONAL_SIZE   6 /* size in bytes of a branch */

Definition at line 106 of file codegen.hpp.

#define BRANCH_NOPS
Value:
do { \
} while (0)
#define M_NOP
Definition: codegen.hpp:318

Definition at line 108 of file codegen.hpp.

#define BRANCH_UNCONDITIONAL_SIZE   5 /* size in bytes of a branch */

Definition at line 105 of file codegen.hpp.

#define CALCIMMEDIATEBYTES (   var,
  val 
)
Value:
if ((s4) (val) < -128 || (s4) (val) > 127) (var) += 4; \
else (var) += 1;
int32_t s4
Definition: types.hpp:45

Definition at line 53 of file codegen.hpp.

#define CALCOFFSETBYTES (   var,
  reg,
  val 
)
Value:
if ((s4) (val) < -128 || (s4) (val) > 127) (var) += 4; \
else if ((s4) (val) != 0) (var) += 1; \
else if ((reg) == EBP) (var) += 1;
#define EBP
Definition: arch.hpp:56
int32_t s4
Definition: types.hpp:45

Definition at line 47 of file codegen.hpp.

#define ICONST (   d,
 
)
Value:
do { \
if ((c) == 0) \
M_CLR(d); \
M_MOV_IMM((c), d); \
} while (0)
#define M_CLR(a)
Definition: codegen.hpp:246
#define M_MOV_IMM(a, b)
Definition: codegen.hpp:253

Definition at line 82 of file codegen.hpp.

#define LCONST (   d,
 
)
Value:
do { \
if ((c) == 0) { \
} else { \
M_MOV_IMM((c) >> 32, GET_HIGH_REG(d)); \
} \
} while (0)
#define GET_HIGH_REG(a)
#define M_CLR(a)
Definition: codegen.hpp:246
#define M_MOV_IMM(a, b)
Definition: codegen.hpp:253
#define GET_LOW_REG(a)

Definition at line 91 of file codegen.hpp.

#define M_AADD_IMM (   a,
 
)    M_IADD_IMM(a,b)

Definition at line 230 of file codegen.hpp.

#define M_AADD_IMM32 (   a,
 
)    M_IADD_IMM32(a,b)

Definition at line 231 of file codegen.hpp.

#define M_ACMP (   a,
 
)    M_CMP(a,b)

Definition at line 294 of file codegen.hpp.

#define M_ALD (   a,
  b,
  disp 
)    M_ILD(a,b,disp)

Definition at line 149 of file codegen.hpp.

#define M_ALD32 (   a,
  b,
  disp 
)    M_ILD32(a,b,disp)

Definition at line 150 of file codegen.hpp.

#define M_ALD_MEM (   a,
  disp 
)    emit_mov_mem_reg(cd, (disp), (a))

Definition at line 152 of file codegen.hpp.

#define M_ALD_MEM_GET_DISP (   p)    (*((u4 *) (p + 2)))

Definition at line 158 of file codegen.hpp.

#define M_ALD_MEM_GET_MOD (   p)    (((*(p + 1)) >> 6) & 0x03)

Definition at line 155 of file codegen.hpp.

#define M_ALD_MEM_GET_OPC (   p)    (*(p))

Definition at line 154 of file codegen.hpp.

#define M_ALD_MEM_GET_REG (   p)    (((*(p + 1)) >> 3) & 0x07)

Definition at line 156 of file codegen.hpp.

#define M_ALD_MEM_GET_RM (   p)    (((*(p + 1)) ) & 0x07)

Definition at line 157 of file codegen.hpp.

#define M_AND (   a,
 
)    emit_alu_reg_reg(cd, ALU_AND, (a), (b))

Definition at line 236 of file codegen.hpp.

#define M_AND_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_AND, (a), (b))

Definition at line 240 of file codegen.hpp.

#define M_AND_IMM32 (   a,
 
)    emit_alu_imm32_reg(cd, ALU_AND, (a), (b))

Definition at line 244 of file codegen.hpp.

#define M_AST (   a,
  b,
  disp 
)    M_IST(a,b,disp)

Definition at line 174 of file codegen.hpp.

#define M_AST_IMM (   a,
  b,
  disp 
)    M_IST_IMM(a,b,disp)

Definition at line 175 of file codegen.hpp.

#define M_ASUB_IMM (   a,
 
)    M_ISUB_IMM(a,b)

Definition at line 232 of file codegen.hpp.

#define M_BA (   a)    emit_jcc(cd, CC_A, (a))

Definition at line 309 of file codegen.hpp.

#define M_BAE (   a)    emit_jcc(cd, CC_AE, (a))

Definition at line 308 of file codegen.hpp.

#define M_BB (   a)    emit_jcc(cd, CC_B, (a))

Definition at line 306 of file codegen.hpp.

#define M_BBE (   a)    emit_jcc(cd, CC_BE, (a))

Definition at line 307 of file codegen.hpp.

#define M_BEQ (   a)    emit_jcc(cd, CC_E, (a))

Definition at line 299 of file codegen.hpp.

#define M_BGE (   a)    emit_jcc(cd, CC_GE, (a))

Definition at line 303 of file codegen.hpp.

#define M_BGT (   a)    emit_jcc(cd, CC_G, (a))

Definition at line 304 of file codegen.hpp.

#define M_BLE (   a)    emit_jcc(cd, CC_LE, (a))

Definition at line 302 of file codegen.hpp.

#define M_BLT (   a)    emit_jcc(cd, CC_L, (a))

Definition at line 301 of file codegen.hpp.

#define M_BNE (   a)    emit_jcc(cd, CC_NE, (a))

Definition at line 300 of file codegen.hpp.

#define M_BNS (   a)    emit_jcc(cd, CC_NS, (a))

Definition at line 310 of file codegen.hpp.

#define M_BS (   a)    emit_jcc(cd, CC_S, (a))

Definition at line 311 of file codegen.hpp.

#define M_BSEXT (   a,
 
)    emit_movsbl_reg_reg(cd, (a), (b))

Definition at line 268 of file codegen.hpp.

#define M_BYTE1 (   a)
Value:
do { \
*(cd->mcodeptr) = (a); \
cd->mcodeptr++; \
} while (0)

Definition at line 132 of file codegen.hpp.

#define M_BYTE2 (   a,
 
)
Value:
do { \
M_BYTE1(b); \
} while (0)
#define M_BYTE1(a)
Definition: codegen.hpp:132

Definition at line 139 of file codegen.hpp.

#define M_BZEXT (   a,
 
)    emit_movzbl_reg_reg(cd, (a), (b))

Definition at line 271 of file codegen.hpp.

#define M_CALL (   a)    emit_call_reg(cd, (a))

Definition at line 290 of file codegen.hpp.

#define M_CALL_IMM (   a)    emit_call_imm(cd, (a))

Definition at line 291 of file codegen.hpp.

#define M_CLR (   a)    M_XOR(a,a)

Definition at line 246 of file codegen.hpp.

#define M_CLTD   M_BYTE1(0x99)

Definition at line 274 of file codegen.hpp.

#define M_CMP (   a,
 
)    emit_alu_reg_reg(cd, ALU_CMP, (a), (b))

Definition at line 259 of file codegen.hpp.

#define M_CMP_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_CMP, (a), (b))

Definition at line 263 of file codegen.hpp.

#define M_CMP_IMM32 (   a,
 
)    emit_alu_imm32_reg(cd, ALU_CMP, (a), (b))

Definition at line 266 of file codegen.hpp.

#define M_CMP_IMM_MEMBASE (   a,
  b,
 
)    emit_alu_imm_membase(cd, ALU_CMP, (a), (b), (c))

Definition at line 264 of file codegen.hpp.

#define M_CMP_MEMBASE (   a,
  b,
 
)    emit_alu_membase_reg(cd, ALU_CMP, (a), (b), (c))

Definition at line 260 of file codegen.hpp.

#define M_CMP_MEMINDEX (   a,
  b,
  c,
  d,
  e 
)    emit_alu_memindex_reg(cd, ALU_CMP, (b), (a), (c), (d), (e))

Definition at line 261 of file codegen.hpp.

#define M_CZEXT (   a,
 
)    emit_movzwl_reg_reg(cd, (a), (b))

Definition at line 272 of file codegen.hpp.

#define M_DLD (   a,
  b,
  disp 
)    emit_fldl_membase(cd, (b), (disp))

Definition at line 323 of file codegen.hpp.

#define M_DLD32 (   a,
  b,
  disp 
)    emit_fldl_membase32(cd, (b), (disp))

Definition at line 326 of file codegen.hpp.

#define M_DMOV (   a,
 
)    M_FMOV(a,b)

Definition at line 80 of file codegen.hpp.

#define M_DST (   a,
  b,
  disp 
)    emit_fstpl_membase(cd, (b), (disp))

Definition at line 329 of file codegen.hpp.

#define M_DSTNP (   a,
  b,
  disp 
)    emit_fstl_membase(cd, (b), (disp))

Definition at line 332 of file codegen.hpp.

#define M_FLD (   a,
  b,
  disp 
)    emit_flds_membase(cd, (b), (disp))

Definition at line 322 of file codegen.hpp.

#define M_FLD32 (   a,
  b,
  disp 
)    emit_flds_membase32(cd, (b), (disp))

Definition at line 325 of file codegen.hpp.

#define M_FMOV (   reg,
  dreg 
)
Value:
do { \
log_text("M_FMOV"); \
assert(0); \
} while (0)
#define log_text(s)
Definition: logging.hpp:170

Definition at line 74 of file codegen.hpp.

#define M_FST (   a,
  b,
  disp 
)    emit_fstps_membase(cd, (b), (disp))

Definition at line 328 of file codegen.hpp.

#define M_FSTNP (   a,
  b,
  disp 
)    emit_fsts_membase(cd, (b), (disp))

Definition at line 331 of file codegen.hpp.

#define M_IADD (   a,
 
)    emit_alu_reg_reg(cd, ALU_ADD, (a), (b))

Definition at line 204 of file codegen.hpp.

#define M_IADD_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_ADD, (a), (b))

Definition at line 211 of file codegen.hpp.

#define M_IADD_IMM32 (   a,
 
)    emit_alu_imm32_reg(cd, ALU_ADD, (a), (b))

Definition at line 215 of file codegen.hpp.

#define M_IADD_IMM_MEMBASE (   a,
  b,
 
)    emit_alu_imm_membase(cd, ALU_ADD, (a), (b), (c))

Definition at line 218 of file codegen.hpp.

#define M_IADDC (   a,
 
)    emit_alu_reg_reg(cd, ALU_ADC, (a), (b))

Definition at line 224 of file codegen.hpp.

#define M_IADDC_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_ADC, (a), (b))

Definition at line 227 of file codegen.hpp.

#define M_ICMP (   a,
 
)    M_CMP(a,b)

Definition at line 296 of file codegen.hpp.

#define M_ICMP_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_CMP, (a), (b))

Definition at line 297 of file codegen.hpp.

#define M_IDIV (   a)    emit_idiv_reg(cd, (a))

Definition at line 207 of file codegen.hpp.

#define M_IINC (   a)    emit_inc_reg(cd, (a))

Definition at line 222 of file codegen.hpp.

#define M_ILD (   a,
  b,
  disp 
)    emit_mov_membase_reg(cd, (b), (disp), (a))

Definition at line 146 of file codegen.hpp.

#define M_ILD32 (   a,
  b,
  disp 
)    emit_mov_membase32_reg(cd, (b), (disp), (a))

Definition at line 147 of file codegen.hpp.

#define M_IMUL (   a,
 
)    emit_imul_reg_reg(cd, (a), (b))

Definition at line 206 of file codegen.hpp.

#define M_IMUL_IMM (   a,
  b,
 
)    emit_imul_imm_reg_reg(cd, (b), (a), (c))

Definition at line 213 of file codegen.hpp.

#define M_IST (   a,
  b,
  disp 
)    emit_mov_reg_membase(cd, (a), (b), (disp))

Definition at line 172 of file codegen.hpp.

#define M_IST32 (   a,
  b,
  disp 
)    emit_mov_reg_membase32(cd, (a), (b), (disp))

Definition at line 177 of file codegen.hpp.

#define M_IST32_IMM (   a,
  b,
  disp 
)    emit_mov_imm_membase32(cd, (u4) (a), (b), (disp))

Definition at line 178 of file codegen.hpp.

#define M_IST_IMM (   a,
  b,
  disp 
)    emit_mov_imm_membase(cd, (u4) (a), (b), (disp))

Definition at line 173 of file codegen.hpp.

#define M_ISUB (   a,
 
)    emit_alu_reg_reg(cd, ALU_SUB, (a), (b))

Definition at line 205 of file codegen.hpp.

#define M_ISUB_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_SUB, (a), (b))

Definition at line 212 of file codegen.hpp.

#define M_ISUB_IMM32 (   a,
 
)    emit_alu_imm32_reg(cd, ALU_SUB, (a), (b))

Definition at line 216 of file codegen.hpp.

#define M_ISUB_IMM_MEMABS (   a,
 
)    emit_alu_imm_memabs(cd, ALU_SUB, (a), (b))

Definition at line 220 of file codegen.hpp.

#define M_ISUBB (   a,
 
)    emit_alu_reg_reg(cd, ALU_SBB, (a), (b))

Definition at line 225 of file codegen.hpp.

#define M_ISUBB_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_SBB, (a), (b))

Definition at line 228 of file codegen.hpp.

#define M_JMP (   a)    emit_jmp_reg(cd, (a))

Definition at line 315 of file codegen.hpp.

#define M_JMP_IMM (   a)    emit_jmp_imm(cd, (a))

Definition at line 316 of file codegen.hpp.

#define M_LLD (   a,
  b,
  disp 
)
Value:
do { \
M_ILD(GET_LOW_REG(a),b,disp); \
M_ILD(GET_HIGH_REG(a),b,disp + 4); \
} while (0)
#define GET_HIGH_REG(a)
#define M_ILD(a, b, disp)
Definition: codegen.hpp:146
#define GET_LOW_REG(a)

Definition at line 160 of file codegen.hpp.

#define M_LLD32 (   a,
  b,
  disp 
)
Value:
do { \
M_ILD32(GET_LOW_REG(a),b,disp); \
M_ILD32(GET_HIGH_REG(a),b,disp + 4); \
} while (0)
#define GET_HIGH_REG(a)
#define M_ILD32(a, b, disp)
Definition: codegen.hpp:147
#define GET_LOW_REG(a)

Definition at line 166 of file codegen.hpp.

#define M_LST (   a,
  b,
  disp 
)
Value:
do { \
M_IST(GET_LOW_REG(a),b,disp); \
M_IST(GET_HIGH_REG(a),b,disp + 4); \
} while (0)
#define GET_HIGH_REG(a)
#define GET_LOW_REG(a)
#define M_IST(a, b, disp)
Definition: codegen.hpp:172

Definition at line 180 of file codegen.hpp.

#define M_LST32 (   a,
  b,
  disp 
)
Value:
do { \
M_IST32(GET_LOW_REG(a),b,disp); \
M_IST32(GET_HIGH_REG(a),b,disp + 4); \
} while (0)
#define GET_HIGH_REG(a)
#define GET_LOW_REG(a)
#define M_IST32(a, b, disp)
Definition: codegen.hpp:177

Definition at line 186 of file codegen.hpp.

#define M_LST32_IMM (   a,
  b,
  disp 
)
Value:
do { \
M_IST32_IMM(a,b,disp); \
M_IST32_IMM(a >> 32,b,disp + 4); \
} while (0)
#define M_IST32_IMM(a, b, disp)
Definition: codegen.hpp:178

Definition at line 198 of file codegen.hpp.

#define M_LST_IMM (   a,
  b,
  disp 
)
Value:
do { \
M_IST_IMM(a,b,disp); \
M_IST_IMM(a >> 32,b,disp + 4); \
} while (0)
#define M_IST_IMM(a, b, disp)
Definition: codegen.hpp:173

Definition at line 192 of file codegen.hpp.

#define M_MOV (   a,
 
)    emit_mov_reg_reg(cd, (a), (b))

Definition at line 252 of file codegen.hpp.

#define M_MOV_IMM (   a,
 
)    emit_mov_imm_reg(cd, (u4) (a), (b))

Definition at line 253 of file codegen.hpp.

#define M_MOV_IMM2 (   a,
 
)    emit_mov_imm2_reg(cd, (u4) (a), (b))

Definition at line 254 of file codegen.hpp.

#define M_MUL (   a)    emit_mul_reg(cd, (a))

Definition at line 209 of file codegen.hpp.

#define M_NEG (   a)    emit_neg_reg(cd, (a))

Definition at line 234 of file codegen.hpp.

#define M_NOP   M_BYTE1(0x90)

Definition at line 318 of file codegen.hpp.

#define M_OR (   a,
 
)    emit_alu_reg_reg(cd, ALU_OR, (a), (b))

Definition at line 237 of file codegen.hpp.

#define M_OR_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_OR, (a), (b))

Definition at line 241 of file codegen.hpp.

#define M_POP (   a)    emit_pop_reg(cd, (a))

Definition at line 250 of file codegen.hpp.

#define M_PUSH (   a)    emit_push_reg(cd, (a))

Definition at line 248 of file codegen.hpp.

#define M_PUSH_IMM (   a)    emit_push_imm(cd, (s4) (a))

Definition at line 249 of file codegen.hpp.

#define M_RET   M_BYTE1(0xc3)

Definition at line 292 of file codegen.hpp.

#define M_SETE (   a)    emit_setcc_reg(cd, CC_E, (a))

Definition at line 313 of file codegen.hpp.

#define M_SLL (   a)    emit_shift_reg(cd, SHIFT_SHL, (a))

Definition at line 276 of file codegen.hpp.

#define M_SLL_IMM (   a,
 
)    emit_shift_imm_reg(cd, SHIFT_SHL, (a), (b))

Definition at line 280 of file codegen.hpp.

#define M_SLLD (   a,
 
)    emit_shld_reg_reg(cd, (a), (b))

Definition at line 284 of file codegen.hpp.

#define M_SLLD_IMM (   a,
  b,
 
)    emit_shld_imm_reg_reg(cd, (a), (b), (c))

Definition at line 287 of file codegen.hpp.

#define M_SRA (   a)    emit_shift_reg(cd, SHIFT_SAR, (a))

Definition at line 277 of file codegen.hpp.

#define M_SRA_IMM (   a,
 
)    emit_shift_imm_reg(cd, SHIFT_SAR, (a), (b))

Definition at line 281 of file codegen.hpp.

#define M_SRL (   a)    emit_shift_reg(cd, SHIFT_SHR, (a))

Definition at line 278 of file codegen.hpp.

#define M_SRL_IMM (   a,
 
)    emit_shift_imm_reg(cd, SHIFT_SHR, (a), (b))

Definition at line 282 of file codegen.hpp.

#define M_SRLD (   a,
 
)    emit_shrd_reg_reg(cd, (a), (b))

Definition at line 285 of file codegen.hpp.

#define M_SRLD_IMM (   a,
  b,
 
)    emit_shrd_imm_reg_reg(cd, (a), (b), (c))

Definition at line 288 of file codegen.hpp.

#define M_SSEXT (   a,
 
)    emit_movswl_reg_reg(cd, (a), (b))

Definition at line 269 of file codegen.hpp.

#define M_TEST (   a)    emit_test_reg_reg(cd, (a), (a))

Definition at line 256 of file codegen.hpp.

#define M_TEST_IMM (   a,
 
)    emit_test_imm_reg(cd, (a), (b))

Definition at line 257 of file codegen.hpp.

#define M_UD2   M_BYTE2(0x0f, 0x0b)

Definition at line 319 of file codegen.hpp.

#define M_XOR (   a,
 
)    emit_alu_reg_reg(cd, ALU_XOR, (a), (b))

Definition at line 238 of file codegen.hpp.

#define M_XOR_IMM (   a,
 
)    emit_alu_imm_reg(cd, ALU_XOR, (a), (b))

Definition at line 242 of file codegen.hpp.

#define MCODECHECK (   icnt)
Value:
do { \
if ((cd->mcodeptr + (icnt)) > (u1 *) cd->mcodeend) \
} while (0)
uint8_t u1
Definition: types.hpp:40
void codegen_increase(codegendata *cd)

Definition at line 67 of file codegen.hpp.

#define PATCHER_CALL_SIZE   2 /* size in bytes of a patcher call */

Definition at line 121 of file codegen.hpp.

#define PATCHER_NOPS
Value:
do { \
} while (0)
#define M_NOP
Definition: codegen.hpp:318

Definition at line 123 of file codegen.hpp.