CACAO
Macros
codegen.hpp File Reference

Go to the source code of this file.

Macros

#define MCODECHECK(icnt)
 
#define ICONST(d, c)   emit_iconst(cd, (d), (c))
 
#define LCONST(reg, c)
 
#define M_DMOV(a, b)   M_FMOV(a,b)
 
#define ALIGNCODENOP
 
#define BRANCH_NOPS
 
#define PATCHER_CALL_SIZE   1 * 4 /* an instruction is 4-bytes long */
 
#define PATCHER_NOPS
 
#define M_OP3(opcode, y, oe, rc, d, a, b)
 
#define M_OP3_GET_A(x)   (((x) >> 16) & 0x1f )
 
#define M_OP3_GET_B(x)   (((x) >> 11) & 0x1f )
 
#define M_OP4(x, y, rc, d, a, b, c)
 
#define M_OP2_IMM(x, d, a, i)
 
#define M_INSTR_OP2_IMM_D(x)   (((x) >> 21) & 0x1f )
 
#define M_INSTR_OP2_IMM_A(x)   (((x) >> 16) & 0x1f )
 
#define M_INSTR_OP2_IMM_I(x)   ( (x) & 0xffff)
 
#define M_BMASK   0x03fffffc /* (((1 << 26) - 1) & ~3) */
 
#define M_BCMASK   0x0000fffc /* (((1 << 16) - 1) & ~3) */
 
#define M_B(LI, AA, LK)
 
#define M_BC(BO, BI, BD, AA, LK)
 
#define MI_and(rA, rS, rB)   M_OP3(31, 28, 0, 0, rS, rA, rB)
 
#define MI_anddot(rA, rS, rB)   M_OP3(31, 28, 0, 1, rS, rA, rB)
 
#define MI_andi(rA, rS, UIMM)   M_OP2_IMM(28, rS, rA, UIMM)
 
#define MI_illegal   M_OP3( 0, 0, 0, 0, 0, 0, 0)
 
#define MI_lwarx(rD, rA, rB)   M_OP3(31, 20, 0, 0, rD, rA, rB)
 
#define MI_or(rA, rS, rB)   M_OP3(31, 444, 0, 0, rS, rA, rB)
 
#define MI_ordot(rA, rS, rB)   M_OP3(31, 444, 0, 1, rS, rA, rB)
 
#define MI_ori(rA, rS, UIMM)   M_OP2_IMM(24, rS, rA, UIMM)
 
#define MI_stwcxdot(rS, rA, rB)   M_OP3(31, 150, 0, 1, rS, rA, rB)
 
#define MI_subf(rD, rA, rB)   M_OP3(31, 40, 0, 0, rD, rA, rB)
 
#define MI_subfdot(rD, rA, rB)   M_OP3(31, 40, 0, 1, rD, rA, rB)
 
#define MI_sync   M_OP3(31, 598, 0, 0, 0, 0, 0)
 
#define M_IAND(a, b, d)   MI_and(d, a, b)
 
#define M_IAND_IMM(a, b, d)   MI_andi(d, a, b)
 
#define M_ILLEGAL   MI_illegal
 
#define M_IOR(a, b, d)   MI_or(d, a, b)
 
#define M_IOR_IMM(a, b, d)   MI_ori(d, a, b)
 
#define M_IOR_TST(a, b, d)   MI_ordot(d, a, b)
 
#define M_ISUB(a, b, d)   MI_subf(d, b, a)
 
#define M_ISUB_TST(a, b, d)   MI_subfdot(d, b, a)
 
#define M_MOV(a, d)   MI_or(d, a, a)
 
#define M_NOP   MI_ori(0, 0, 0)
 
#define M_ADDC(a, b, c)   M_OP3(31, 10, 0, 0, c, a, b)
 
#define M_ADDE(a, b, c)   M_OP3(31, 138, 0, 0, c, a, b)
 
#define M_ADDIC(a, b, c)   M_OP2_IMM(12, c, a, b)
 
#define M_ADDICTST(a, b, c)   M_OP2_IMM(13, c, a, b)
 
#define M_ADDIS(a, b, c)   M_OP2_IMM(15, c, a, b)
 
#define M_ADDME(a, b)   M_OP3(31, 234, 0, 0, b, a, 0)
 
#define M_ADDZE(a, b)   M_OP3(31, 202, 0, 0, b, a, 0)
 
#define M_ADDZE(a, b)   M_OP3(31, 202, 0, 0, b, a, 0)
 
#define M_ANDIS(a, b, c)   M_OP2_IMM(29, a, c, b)
 
#define M_BEQ(a)   M_BC(12, 2, a, 0, 0)
 
#define M_BGE(a)   M_BC(4, 0, a, 0, 0)
 
#define M_BGT(a)   M_BC(12, 1, a, 0, 0)
 
#define M_BL(a)   M_B(a, 0, 1)
 
#define M_BLDU(a, b, c)   M_OP2_IMM(34, a, b, c)
 
#define M_BLE(a)   M_BC(4, 1, a, 0, 0)
 
#define M_BLT(a)   M_BC(12, 0, a, 0, 0)
 
#define M_BNAN(a)   M_BC(12, 3, a, 0, 0)
 
#define M_BNE(a)   M_BC(4, 2, a, 0, 0)
 
#define M_BR(a)   M_B(a, 0, 0)
 
#define M_BSEXT(a, b)   M_OP3(31, 954, 0, 0, a, b, 0)
 
#define M_BST(a, b, c)   M_OP2_IMM(38, a, b, c)
 
#define M_CMP(a, b)   M_OP3(31, 0, 0, 0, 0, a, b)
 
#define M_CMPI(a, b)   M_OP2_IMM(11, 0, a, b)
 
#define M_CMPU(a, b)   M_OP3(31, 32, 0, 0, 0, a, b)
 
#define M_CMPUI(a, b)   M_OP2_IMM(10, 0, a, b)
 
#define M_CNTLZ(a, b)   M_OP3(31, 26, 0, 0, a, b, 0)
 
#define M_CZEXT(a, b)   M_RLWINM(a,0,16,31,b)
 
#define M_IADD(a, b, c)   M_OP3(31, 266, 0, 0, c, a, b)
 
#define M_IADD_IMM(a, b, c)   M_OP2_IMM(14, c, a, b)
 
#define M_IDIV(a, b, c)   M_OP3(31, 491, 0, 0, c, a, b)
 
#define M_IMUL(a, b, c)   M_OP3(31, 235, 0, 0, c, a, b)
 
#define M_IMUL_IMM(a, b, c)   M_OP2_IMM(7, c, a, b)
 
#define M_JSR   M_OP3(19, 528, 0, 1, 20, 0, 0)
 
#define M_LBZX(a, b, c)   M_OP3(31, 87, 0, 0, a, b, c)
 
#define M_LHAX(a, b, c)   M_OP3(31, 343, 0, 0, a, b, c)
 
#define M_LHZX(a, b, c)   M_OP3(31, 279, 0, 0, a, b, c)
 
#define M_LWZX(a, b, c)   M_OP3(31, 23, 0, 0, a, b, c)
 
#define M_MFCTR(a)   M_OP3(31, 339, 0, 0, a, 9, 0)
 
#define M_MFLR(a)   M_OP3(31, 339, 0, 0, a, 8, 0)
 
#define M_MFXER(a)   M_OP3(31, 339, 0, 0, a, 1, 0)
 
#define M_MTCTR(a)   M_OP3(31, 467, 0, 0, a, 9, 0)
 
#define M_MTLR(a)   M_OP3(31, 467, 0, 0, a, 8, 0)
 
#define M_MTXER(a)   M_OP3(31, 467, 0, 0, a, 1, 0)
 
#define M_NEG(a, b)   M_OP3(31, 104, 0, 0, b, a, 0)
 
#define M_NOT(a, b)   M_OP3(31, 124, 0, 0, a, b, a)
 
#define M_ORIS(a, b, c)   M_OP2_IMM(25, a, c, b)
 
#define M_RET   M_OP3(19, 16, 0, 0, 20, 0, 0)
 
#define M_RLWINM(a, b, c, d, e)   M_OP4(21, d, 0, a, e, b, c)
 
#define M_RTS   M_OP3(19, 528, 0, 0, 20, 0, 0)
 
#define M_SLDU(a, b, c)   M_OP2_IMM(40, a, b, c)
 
#define M_SLL(a, b, c)   M_OP3(31, 24, 0, 0, a, c, b)
 
#define M_SLL_IMM(a, b, c)   M_RLWINM(a,b,0,31-(b),c)
 
#define M_SRA(a, b, c)   M_OP3(31, 792, 0, 0, a, c, b)
 
#define M_SRA_IMM(a, b, c)   M_OP3(31, 824, 0, 0, a, c, b)
 
#define M_SRL(a, b, c)   M_OP3(31, 536, 0, 0, a, c, b)
 
#define M_SRL_IMM(a, b, c)   M_RLWINM(a,32-(b),b,31,c)
 
#define M_SSEXT(a, b)   M_OP3(31, 922, 0, 0, a, b, 0)
 
#define M_SST(a, b, c)   M_OP2_IMM(44, a, b, c)
 
#define M_STBX(a, b, c)   M_OP3(31, 215, 0, 0, a, b, c)
 
#define M_STHX(a, b, c)   M_OP3(31, 407, 0, 0, a, b, c)
 
#define M_STWUX(a, b, c)   M_OP3(31,183,0,0,a,b,c)
 
#define M_STWX(a, b, c)   M_OP3(31, 151, 0, 0, a, b, c)
 
#define M_SUBC(a, b, c)   M_OP3(31, 8, 0, 0, c, b, a)
 
#define M_SUBE(a, b, c)   M_OP3(31, 136, 0, 0, c, b, a)
 
#define M_SUBFIC(a, b, c)   M_OP2_IMM(8, c, a, b)
 
#define M_SUBFZE(a, b)   M_OP3(31, 200, 0, 0, b, a, 0)
 
#define M_SUBIC(a, b, c)   M_OP2_IMM(8, c, b, a)
 
#define M_SUBME(a, b)   M_OP3(31, 232, 0, 0, b, a, 0)
 
#define M_SUBZE(a, b)   M_OP3(31, 200, 0, 0, b, a, 0)
 
#define M_TRAP   M_OP3(31, 4, 0, 0, 31, 0, 0)
 
#define M_TRAPGEU(a, b)   M_OP3(31, 4, 0, 0, 5, a, b)
 
#define M_TST(a)   M_OP3(31, 444, 0, 1, a, a, a)
 
#define M_XOR(a, b, c)   M_OP3(31, 316, 0, 0, a, c, b)
 
#define M_XORIS(a, b, c)   M_OP2_IMM(27, a, c, b)
 
#define M_XOR_IMM(a, b, c)   M_OP2_IMM(26, a, c, b)
 
#define M_LDAH(a, b, c)   M_ADDIS(b, c, a)
 
#define M_LDATST(a, b, c)   M_ADDICTST(b, c, a)
 
#define M_CLR(a)   M_IADD_IMM(0, 0, a)
 
#define M_ILD_INTERN(a, b, disp)   M_OP2_IMM(32,a,b,disp)
 
#define M_ILD(a, b, disp)
 
#define M_LLD_INTERN(a, b, disp)
 
#define M_LLD(a, b, disp)
 
#define M_IST_INTERN(a, b, disp)   M_OP2_IMM(36,a,b,disp)
 
#define M_IST(a, b, disp)
 
#define M_LST_INTERN(a, b, disp)
 
#define M_LST(a, b, disp)
 
#define M_STWU_INTERN(a, b, disp)   M_OP2_IMM(37,a,b,disp)
 
#define M_STWU(a, b, disp)
 
#define M_LDA_INTERN(a, b, c)   M_IADD_IMM(b, c, a)
 
#define M_LDA(a, b, disp)
 
#define M_AADD(a, b, d)   M_IADD(a, b, d)
 
#define M_AADD_IMM(a, b, d)   M_IADD_IMM(a, b, d)
 
#define M_ALD_INTERN(a, b, disp)   M_ILD_INTERN(a,b,disp)
 
#define M_ALD(a, b, disp)   M_ILD(a,b,disp)
 
#define M_AST_INTERN(a, b, disp)   M_IST_INTERN(a,b,disp)
 
#define M_AST(a, b, disp)   M_IST(a,b,disp)
 
#define M_ACMP(a, b)   M_CMP(a,b)
 
#define M_ICMP(a, b)   M_CMP(a,b)
 
#define M_TEST(a)   M_TST(a)
 
#define M_ALD_DSEG(a, disp)   M_ALD(a,REG_PV,disp);
 
#define M_CVTDF(a, b)   M_OP3(63, 12, 0, 0, b, 0, a)
 
#define M_CVTDL(a, b)   M_OP3(63, 14, 0, 0, b, 0, a)
 
#define M_CVTDL_C(a, b)   M_OP3(63, 15, 0, 0, b, 0, a)
 
#define M_DADD(a, b, c)   M_OP3(63, 21, 0, 0, c, a, b)
 
#define M_DDIV(a, b, c)   M_OP3(63, 18, 0, 0, c, a, b)
 
#define M_DMUL(a, b, c)   M_OP4(63, 25, 0, c, a, 0, b)
 
#define M_DSQRT(a, b)   M_OP3(63, 22, 0, 0, b, 0, a)
 
#define M_DSUB(a, b, c)   M_OP3(63, 20, 0, 0, c, a, b)
 
#define M_FABS(a, b)   M_OP3(63, 264, 0, 0, b, 0, a)
 
#define M_FADD(a, b, c)   M_OP3(59, 21, 0, 0, c, a, b)
 
#define M_FCMPO(a, b)   M_OP3(63, 32, 0, 0, 0, a, b)
 
#define M_FCMPU(a, b)   M_OP3(63, 0, 0, 0, 0, a, b)
 
#define M_FDIV(a, b, c)   M_OP3(59, 18, 0, 0, c, a, b)
 
#define M_FMOV(a, b)   M_OP3(63, 72, 0, 0, b, 0, a)
 
#define M_FMOVN(a, b)   M_OP3(63, 40, 0, 0, b, 0, a)
 
#define M_FMUL(a, b, c)   M_OP4(59, 25, 0, c, a, 0, b)
 
#define M_FSQRT(a, b)   M_OP3(59, 22, 0, 0, b, 0, a)
 
#define M_FSUB(a, b, c)   M_OP3(59, 20, 0, 0, c, a, b)
 
#define M_LFDX(a, b, c)   M_OP3(31, 599, 0, 0, a, b, c)
 
#define M_LFSX(a, b, c)   M_OP3(31, 535, 0, 0, a, b, c)
 
#define M_STFDX(a, b, c)   M_OP3(31, 727, 0, 0, a, b, c)
 
#define M_STFIWX(a, b, c)   M_OP3(31, 983, 0, 0, a, b, c)
 
#define M_STFSX(a, b, c)   M_OP3(31, 663, 0, 0, a, b, c)
 
#define M_FLD_INTERN(a, b, disp)   M_OP2_IMM(48,a,b,disp)
 
#define M_FLD(a, b, disp)
 
#define M_DLD_INTERN(a, b, disp)   M_OP2_IMM(50,a,b,disp)
 
#define M_DLD(a, b, disp)
 
#define M_FST_INTERN(a, b, disp)   M_OP2_IMM(52,a,b,disp)
 
#define M_FST(a, b, disp)
 
#define M_DST_INTERN(a, b, disp)   M_OP2_IMM(54,a,b,disp)
 
#define M_DST(a, b, disp)
 

Macro Definition Documentation

#define ALIGNCODENOP
Value:
if ((s4) ((ptrint) cd->mcodeptr & 7)) { \
}
int32_t s4
Definition: types.hpp:45
#define M_NOP
Definition: codegen.hpp:183
uintptr_t ptrint
Definition: types.hpp:54

Definition at line 58 of file codegen.hpp.

#define BRANCH_NOPS
Value:
do { \
} \
else { \
} \
} while (0)
#define CODEGENDATA_HAS_FLAG_LONGBRANCHES(cd)
#define M_NOP
Definition: codegen.hpp:183

Definition at line 66 of file codegen.hpp.

#define ICONST (   d,
 
)    emit_iconst(cd, (d), (c))

Definition at line 50 of file codegen.hpp.

#define LCONST (   reg,
 
)
Value:
ICONST(GET_HIGH_REG((reg)), (s4) ((s8) (c) >> 32)); \
ICONST(GET_LOW_REG((reg)), (s4) ((s8) (c)));
#define GET_HIGH_REG(a)
int64_t s8
Definition: types.hpp:48
#define ICONST(d, c)
Definition: codegen.hpp:50
#define GET_LOW_REG(a)
int32_t s4
Definition: types.hpp:45

Definition at line 52 of file codegen.hpp.

#define M_AADD (   a,
  b,
 
)    M_IADD(a, b, d)

Definition at line 366 of file codegen.hpp.

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

Definition at line 367 of file codegen.hpp.

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

Definition at line 373 of file codegen.hpp.

#define M_ADDC (   a,
  b,
 
)    M_OP3(31, 10, 0, 0, c, a, b)

Definition at line 186 of file codegen.hpp.

#define M_ADDE (   a,
  b,
 
)    M_OP3(31, 138, 0, 0, c, a, b)

Definition at line 187 of file codegen.hpp.

#define M_ADDIC (   a,
  b,
 
)    M_OP2_IMM(12, c, a, b)

Definition at line 188 of file codegen.hpp.

#define M_ADDICTST (   a,
  b,
 
)    M_OP2_IMM(13, c, a, b)

Definition at line 189 of file codegen.hpp.

#define M_ADDIS (   a,
  b,
 
)    M_OP2_IMM(15, c, a, b)

Definition at line 190 of file codegen.hpp.

#define M_ADDME (   a,
 
)    M_OP3(31, 234, 0, 0, b, a, 0)

Definition at line 191 of file codegen.hpp.

#define M_ADDZE (   a,
 
)    M_OP3(31, 202, 0, 0, b, a, 0)

Definition at line 193 of file codegen.hpp.

#define M_ADDZE (   a,
 
)    M_OP3(31, 202, 0, 0, b, a, 0)

Definition at line 193 of file codegen.hpp.

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

Definition at line 369 of file codegen.hpp.

#define M_ALD_DSEG (   a,
  disp 
)    M_ALD(a,REG_PV,disp);

Definition at line 377 of file codegen.hpp.

#define M_ALD_INTERN (   a,
  b,
  disp 
)    M_ILD_INTERN(a,b,disp)

Definition at line 368 of file codegen.hpp.

#define M_ANDIS (   a,
  b,
 
)    M_OP2_IMM(29, a, c, b)

Definition at line 194 of file codegen.hpp.

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

Definition at line 371 of file codegen.hpp.

#define M_AST_INTERN (   a,
  b,
  disp 
)    M_IST_INTERN(a,b,disp)

Definition at line 370 of file codegen.hpp.

#define M_B (   LI,
  AA,
  LK 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = ((18 << 26) | ((((LI) * 4) + 4) & M_BMASK) | ((AA) << 1) | (LK)); \
cd->mcodeptr += 4; \
} while (0)
#define M_BMASK
Definition: codegen.hpp:118
uint32_t u4
Definition: types.hpp:46

Definition at line 121 of file codegen.hpp.

#define M_BC (   BO,
  BI,
  BD,
  AA,
  LK 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = ((16 << 26) | ((BO) << 21) | ((BI) << 16) | ((((BD) * 4) + 4) & M_BCMASK) | ((AA) << 1) | (LK)); \
cd->mcodeptr += 4; \
} while (0)
#define M_BCMASK
Definition: codegen.hpp:119
BeginInst * BI
uint32_t u4
Definition: types.hpp:46

Definition at line 127 of file codegen.hpp.

#define M_BCMASK   0x0000fffc /* (((1 << 16) - 1) & ~3) */

Definition at line 119 of file codegen.hpp.

#define M_BEQ (   a)    M_BC(12, 2, a, 0, 0)

Definition at line 195 of file codegen.hpp.

#define M_BGE (   a)    M_BC(4, 0, a, 0, 0)

Definition at line 196 of file codegen.hpp.

#define M_BGT (   a)    M_BC(12, 1, a, 0, 0)

Definition at line 197 of file codegen.hpp.

#define M_BL (   a)    M_B(a, 0, 1)

Definition at line 198 of file codegen.hpp.

#define M_BLDU (   a,
  b,
 
)    M_OP2_IMM(34, a, b, c)

Definition at line 199 of file codegen.hpp.

#define M_BLE (   a)    M_BC(4, 1, a, 0, 0)

Definition at line 200 of file codegen.hpp.

#define M_BLT (   a)    M_BC(12, 0, a, 0, 0)

Definition at line 201 of file codegen.hpp.

#define M_BMASK   0x03fffffc /* (((1 << 26) - 1) & ~3) */

Definition at line 118 of file codegen.hpp.

#define M_BNAN (   a)    M_BC(12, 3, a, 0, 0)

Definition at line 202 of file codegen.hpp.

#define M_BNE (   a)    M_BC(4, 2, a, 0, 0)

Definition at line 203 of file codegen.hpp.

#define M_BR (   a)    M_B(a, 0, 0)

Definition at line 204 of file codegen.hpp.

#define M_BSEXT (   a,
 
)    M_OP3(31, 954, 0, 0, a, b, 0)

Definition at line 205 of file codegen.hpp.

#define M_BST (   a,
  b,
 
)    M_OP2_IMM(38, a, b, c)

Definition at line 206 of file codegen.hpp.

#define M_CLR (   a)    M_IADD_IMM(0, 0, a)

Definition at line 265 of file codegen.hpp.

#define M_CMP (   a,
 
)    M_OP3(31, 0, 0, 0, 0, a, b)

Definition at line 207 of file codegen.hpp.

#define M_CMPI (   a,
 
)    M_OP2_IMM(11, 0, a, b)

Definition at line 208 of file codegen.hpp.

#define M_CMPU (   a,
 
)    M_OP3(31, 32, 0, 0, 0, a, b)

Definition at line 209 of file codegen.hpp.

#define M_CMPUI (   a,
 
)    M_OP2_IMM(10, 0, a, b)

Definition at line 210 of file codegen.hpp.

#define M_CNTLZ (   a,
 
)    M_OP3(31, 26, 0, 0, a, b, 0)

Definition at line 211 of file codegen.hpp.

#define M_CVTDF (   a,
 
)    M_OP3(63, 12, 0, 0, b, 0, a)

Definition at line 382 of file codegen.hpp.

#define M_CVTDL (   a,
 
)    M_OP3(63, 14, 0, 0, b, 0, a)

Definition at line 383 of file codegen.hpp.

#define M_CVTDL_C (   a,
 
)    M_OP3(63, 15, 0, 0, b, 0, a)

Definition at line 384 of file codegen.hpp.

#define M_CZEXT (   a,
 
)    M_RLWINM(a,0,16,31,b)

Definition at line 212 of file codegen.hpp.

#define M_DADD (   a,
  b,
 
)    M_OP3(63, 21, 0, 0, c, a, b)

Definition at line 385 of file codegen.hpp.

#define M_DDIV (   a,
  b,
 
)    M_OP3(63, 18, 0, 0, c, a, b)

Definition at line 386 of file codegen.hpp.

#define M_DLD (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_DLD_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_DLD_INTERN(a, b, disp)
Definition: codegen.hpp:421
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 423 of file codegen.hpp.

#define M_DLD_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(50,a,b,disp)

Definition at line 421 of file codegen.hpp.

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

Definition at line 56 of file codegen.hpp.

#define M_DMUL (   a,
  b,
 
)    M_OP4(63, 25, 0, c, a, 0, b)

Definition at line 387 of file codegen.hpp.

#define M_DSQRT (   a,
 
)    M_OP3(63, 22, 0, 0, b, 0, a)

Definition at line 388 of file codegen.hpp.

#define M_DST (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_DST_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define M_DST_INTERN(a, b, disp)
Definition: codegen.hpp:449
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 451 of file codegen.hpp.

#define M_DST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(54,a,b,disp)

Definition at line 449 of file codegen.hpp.

#define M_DSUB (   a,
  b,
 
)    M_OP3(63, 20, 0, 0, c, a, b)

Definition at line 389 of file codegen.hpp.

#define M_FABS (   a,
 
)    M_OP3(63, 264, 0, 0, b, 0, a)

Definition at line 390 of file codegen.hpp.

#define M_FADD (   a,
  b,
 
)    M_OP3(59, 21, 0, 0, c, a, b)

Definition at line 391 of file codegen.hpp.

#define M_FCMPO (   a,
 
)    M_OP3(63, 32, 0, 0, 0, a, b)

Definition at line 392 of file codegen.hpp.

#define M_FCMPU (   a,
 
)    M_OP3(63, 0, 0, 0, 0, a, b)

Definition at line 393 of file codegen.hpp.

#define M_FDIV (   a,
  b,
 
)    M_OP3(59, 18, 0, 0, c, a, b)

Definition at line 394 of file codegen.hpp.

#define M_FLD (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_FLD_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
int32_t s4
Definition: types.hpp:45
#define M_FLD_INTERN(a, b, disp)
Definition: codegen.hpp:407
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 409 of file codegen.hpp.

#define M_FLD_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(48,a,b,disp)

Definition at line 407 of file codegen.hpp.

#define M_FMOV (   a,
 
)    M_OP3(63, 72, 0, 0, b, 0, a)

Definition at line 395 of file codegen.hpp.

#define M_FMOVN (   a,
 
)    M_OP3(63, 40, 0, 0, b, 0, a)

Definition at line 396 of file codegen.hpp.

#define M_FMUL (   a,
  b,
 
)    M_OP4(59, 25, 0, c, a, 0, b)

Definition at line 397 of file codegen.hpp.

#define M_FSQRT (   a,
 
)    M_OP3(59, 22, 0, 0, b, 0, a)

Definition at line 398 of file codegen.hpp.

#define M_FST (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_FST_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define M_FST_INTERN(a, b, disp)
Definition: codegen.hpp:435
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 437 of file codegen.hpp.

#define M_FST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(52,a,b,disp)

Definition at line 435 of file codegen.hpp.

#define M_FSUB (   a,
  b,
 
)    M_OP3(59, 20, 0, 0, c, a, b)

Definition at line 399 of file codegen.hpp.

#define M_IADD (   a,
  b,
 
)    M_OP3(31, 266, 0, 0, c, a, b)

Definition at line 213 of file codegen.hpp.

#define M_IADD_IMM (   a,
  b,
 
)    M_OP2_IMM(14, c, a, b)

Definition at line 214 of file codegen.hpp.

#define M_IAND (   a,
  b,
 
)    MI_and(d, a, b)

Definition at line 174 of file codegen.hpp.

#define M_IAND_IMM (   a,
  b,
 
)    MI_andi(d, a, b)

Definition at line 175 of file codegen.hpp.

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

Definition at line 374 of file codegen.hpp.

#define M_IDIV (   a,
  b,
 
)    M_OP3(31, 491, 0, 0, c, a, b)

Definition at line 215 of file codegen.hpp.

#define M_ILD (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_ILD_INTERN(a,b,lo); \
} else { \
M_ADDIS(b,hi,a); \
M_ILD_INTERN(a,a,lo); \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define M_ILD_INTERN(a, b, disp)
Definition: codegen.hpp:268
int32_t s4
Definition: types.hpp:45

Definition at line 270 of file codegen.hpp.

#define M_ILD_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(32,a,b,disp)

Definition at line 268 of file codegen.hpp.

#define M_ILLEGAL   MI_illegal

Definition at line 176 of file codegen.hpp.

#define M_IMUL (   a,
  b,
 
)    M_OP3(31, 235, 0, 0, c, a, b)

Definition at line 216 of file codegen.hpp.

#define M_IMUL_IMM (   a,
  b,
 
)    M_OP2_IMM(7, c, a, b)

Definition at line 217 of file codegen.hpp.

#define M_INSTR_OP2_IMM_A (   x)    (((x) >> 16) & 0x1f )

Definition at line 114 of file codegen.hpp.

#define M_INSTR_OP2_IMM_D (   x)    (((x) >> 21) & 0x1f )

Definition at line 113 of file codegen.hpp.

#define M_INSTR_OP2_IMM_I (   x)    ( (x) & 0xffff)

Definition at line 115 of file codegen.hpp.

#define M_IOR (   a,
  b,
 
)    MI_or(d, a, b)

Definition at line 177 of file codegen.hpp.

#define M_IOR_IMM (   a,
  b,
 
)    MI_ori(d, a, b)

Definition at line 178 of file codegen.hpp.

#define M_IOR_TST (   a,
  b,
 
)    MI_ordot(d, a, b)

Definition at line 179 of file codegen.hpp.

#define M_IST (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_IST_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
int32_t s4
Definition: types.hpp:45
#define M_IST_INTERN(a, b, disp)
Definition: codegen.hpp:300
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 306 of file codegen.hpp.

#define M_IST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(36,a,b,disp)

Definition at line 300 of file codegen.hpp.

#define M_ISUB (   a,
  b,
 
)    MI_subf(d, b, a)

Definition at line 180 of file codegen.hpp.

#define M_ISUB_TST (   a,
  b,
 
)    MI_subfdot(d, b, a)

Definition at line 181 of file codegen.hpp.

#define M_JSR   M_OP3(19, 528, 0, 1, 20, 0, 0)

Definition at line 218 of file codegen.hpp.

#define M_LBZX (   a,
  b,
 
)    M_OP3(31, 87, 0, 0, a, b, c)

Definition at line 219 of file codegen.hpp.

#define M_LDA (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_LDA_INTERN(a,b,lo); \
} else { \
M_ADDIS(b,hi,a); \
M_LDA_INTERN(a,a,lo); \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define M_LDA_INTERN(a, b, c)
Definition: codegen.hpp:351
int32_t s4
Definition: types.hpp:45

Definition at line 353 of file codegen.hpp.

#define M_LDA_INTERN (   a,
  b,
 
)    M_IADD_IMM(b, c, a)

Definition at line 351 of file codegen.hpp.

#define M_LDAH (   a,
  b,
 
)    M_ADDIS(b, c, a)

Definition at line 263 of file codegen.hpp.

#define M_LDATST (   a,
  b,
 
)    M_ADDICTST(b, c, a)

Definition at line 264 of file codegen.hpp.

#define M_LFDX (   a,
  b,
 
)    M_OP3(31, 599, 0, 0, a, b, c)

Definition at line 400 of file codegen.hpp.

#define M_LFSX (   a,
  b,
 
)    M_OP3(31, 535, 0, 0, a, b, c)

Definition at line 401 of file codegen.hpp.

#define M_LHAX (   a,
  b,
 
)    M_OP3(31, 343, 0, 0, a, b, c)

Definition at line 220 of file codegen.hpp.

#define M_LHZX (   a,
  b,
 
)    M_OP3(31, 279, 0, 0, a, b, c)

Definition at line 221 of file codegen.hpp.

#define M_LLD (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_LLD_INTERN(a,b,lo); \
} else { \
M_ADDIS(b,hi,a); \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define GET_LOW_REG(a)
int32_t s4
Definition: types.hpp:45
#define M_LLD_INTERN(a, b, disp)
Definition: codegen.hpp:282

Definition at line 288 of file codegen.hpp.

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

Definition at line 282 of file codegen.hpp.

#define M_LST (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (short) (disp); \
s4 hi = (short) (((disp) - lo) >> 16); \
if (hi == 0) { \
M_LST_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
#define M_LST_INTERN(a, b, disp)
Definition: codegen.hpp:318
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 324 of file codegen.hpp.

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

Definition at line 318 of file codegen.hpp.

#define M_LWZX (   a,
  b,
 
)    M_OP3(31, 23, 0, 0, a, b, c)

Definition at line 222 of file codegen.hpp.

#define M_MFCTR (   a)    M_OP3(31, 339, 0, 0, a, 9, 0)

Definition at line 223 of file codegen.hpp.

#define M_MFLR (   a)    M_OP3(31, 339, 0, 0, a, 8, 0)

Definition at line 224 of file codegen.hpp.

#define M_MFXER (   a)    M_OP3(31, 339, 0, 0, a, 1, 0)

Definition at line 225 of file codegen.hpp.

#define M_MOV (   a,
 
)    MI_or(d, a, a)

Definition at line 182 of file codegen.hpp.

#define M_MTCTR (   a)    M_OP3(31, 467, 0, 0, a, 9, 0)

Definition at line 226 of file codegen.hpp.

#define M_MTLR (   a)    M_OP3(31, 467, 0, 0, a, 8, 0)

Definition at line 227 of file codegen.hpp.

#define M_MTXER (   a)    M_OP3(31, 467, 0, 0, a, 1, 0)

Definition at line 228 of file codegen.hpp.

#define M_NEG (   a,
 
)    M_OP3(31, 104, 0, 0, b, a, 0)

Definition at line 229 of file codegen.hpp.

#define M_NOP   MI_ori(0, 0, 0)

Definition at line 183 of file codegen.hpp.

#define M_NOT (   a,
 
)    M_OP3(31, 124, 0, 0, a, b, a)

Definition at line 230 of file codegen.hpp.

#define M_OP2_IMM (   x,
  d,
  a,
  i 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = (((x) << 26) | ((d) << 21) | ((a) << 16) | ((i) & 0xffff)); \
cd->mcodeptr += 4; \
} while (0)
MIIterator i
uint32_t u4
Definition: types.hpp:46

Definition at line 107 of file codegen.hpp.

#define M_OP3 (   opcode,
  y,
  oe,
  rc,
  d,
  a,
 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = (((opcode) << 26) | ((d) << 21) | ((a) << 16) | ((b) << 11) | ((oe) << 10) | ((y) << 1) | (rc)); \
cd->mcodeptr += 4; \
} while (0)
uint32_t u4
Definition: types.hpp:46

Definition at line 90 of file codegen.hpp.

#define M_OP3_GET_A (   x)    (((x) >> 16) & 0x1f )

Definition at line 96 of file codegen.hpp.

#define M_OP3_GET_B (   x)    (((x) >> 11) & 0x1f )

Definition at line 97 of file codegen.hpp.

#define M_OP4 (   x,
  y,
  rc,
  d,
  a,
  b,
 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = (((x) << 26) | ((d) << 21) | ((a) << 16) | ((b) << 11) | ((c) << 6) | ((y) << 1) | (rc)); \
cd->mcodeptr += 4; \
} while (0)
uint32_t u4
Definition: types.hpp:46

Definition at line 100 of file codegen.hpp.

#define M_ORIS (   a,
  b,
 
)    M_OP2_IMM(25, a, c, b)

Definition at line 231 of file codegen.hpp.

#define M_RET   M_OP3(19, 16, 0, 0, 20, 0, 0)

Definition at line 232 of file codegen.hpp.

#define M_RLWINM (   a,
  b,
  c,
  d,
  e 
)    M_OP4(21, d, 0, a, e, b, c)

Definition at line 233 of file codegen.hpp.

#define M_RTS   M_OP3(19, 528, 0, 0, 20, 0, 0)

Definition at line 234 of file codegen.hpp.

#define M_SLDU (   a,
  b,
 
)    M_OP2_IMM(40, a, b, c)

Definition at line 235 of file codegen.hpp.

#define M_SLL (   a,
  b,
 
)    M_OP3(31, 24, 0, 0, a, c, b)

Definition at line 236 of file codegen.hpp.

#define M_SLL_IMM (   a,
  b,
 
)    M_RLWINM(a,b,0,31-(b),c)

Definition at line 237 of file codegen.hpp.

#define M_SRA (   a,
  b,
 
)    M_OP3(31, 792, 0, 0, a, c, b)

Definition at line 238 of file codegen.hpp.

#define M_SRA_IMM (   a,
  b,
 
)    M_OP3(31, 824, 0, 0, a, c, b)

Definition at line 239 of file codegen.hpp.

#define M_SRL (   a,
  b,
 
)    M_OP3(31, 536, 0, 0, a, c, b)

Definition at line 240 of file codegen.hpp.

#define M_SRL_IMM (   a,
  b,
 
)    M_RLWINM(a,32-(b),b,31,c)

Definition at line 241 of file codegen.hpp.

#define M_SSEXT (   a,
 
)    M_OP3(31, 922, 0, 0, a, b, 0)

Definition at line 242 of file codegen.hpp.

#define M_SST (   a,
  b,
 
)    M_OP2_IMM(44, a, b, c)

Definition at line 243 of file codegen.hpp.

#define M_STBX (   a,
  b,
 
)    M_OP3(31, 215, 0, 0, a, b, c)

Definition at line 244 of file codegen.hpp.

#define M_STFDX (   a,
  b,
 
)    M_OP3(31, 727, 0, 0, a, b, c)

Definition at line 402 of file codegen.hpp.

#define M_STFIWX (   a,
  b,
 
)    M_OP3(31, 983, 0, 0, a, b, c)

Definition at line 403 of file codegen.hpp.

#define M_STFSX (   a,
  b,
 
)    M_OP3(31, 663, 0, 0, a, b, c)

Definition at line 404 of file codegen.hpp.

#define M_STHX (   a,
  b,
 
)    M_OP3(31, 407, 0, 0, a, b, c)

Definition at line 245 of file codegen.hpp.

#define M_STWU (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (disp) & 0x0000ffff; \
s4 hi = ((disp) >> 16); \
if (((disp) >= -32678) && ((disp) <= 32767)) { \
M_STWU_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define REG_SP
Definition: md-abi.hpp:55
#define M_STWU_INTERN(a, b, disp)
Definition: codegen.hpp:336
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:190
int32_t s4
Definition: types.hpp:45
#define M_STWUX(a, b, c)
Definition: codegen.hpp:246
#define REG_ZERO
Definition: md-abi.hpp:56
#define M_IOR_IMM(a, b, d)
Definition: codegen.hpp:178
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 338 of file codegen.hpp.

#define M_STWU_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(37,a,b,disp)

Definition at line 336 of file codegen.hpp.

#define M_STWUX (   a,
  b,
 
)    M_OP3(31,183,0,0,a,b,c)

Definition at line 246 of file codegen.hpp.

#define M_STWX (   a,
  b,
 
)    M_OP3(31, 151, 0, 0, a, b, c)

Definition at line 247 of file codegen.hpp.

#define M_SUBC (   a,
  b,
 
)    M_OP3(31, 8, 0, 0, c, b, a)

Definition at line 248 of file codegen.hpp.

#define M_SUBE (   a,
  b,
 
)    M_OP3(31, 136, 0, 0, c, b, a)

Definition at line 249 of file codegen.hpp.

#define M_SUBFIC (   a,
  b,
 
)    M_OP2_IMM(8, c, a, b)

Definition at line 250 of file codegen.hpp.

#define M_SUBFZE (   a,
 
)    M_OP3(31, 200, 0, 0, b, a, 0)

Definition at line 251 of file codegen.hpp.

#define M_SUBIC (   a,
  b,
 
)    M_OP2_IMM(8, c, b, a)

Definition at line 252 of file codegen.hpp.

#define M_SUBME (   a,
 
)    M_OP3(31, 232, 0, 0, b, a, 0)

Definition at line 253 of file codegen.hpp.

#define M_SUBZE (   a,
 
)    M_OP3(31, 200, 0, 0, b, a, 0)

Definition at line 254 of file codegen.hpp.

#define M_TEST (   a)    M_TST(a)

Definition at line 376 of file codegen.hpp.

#define M_TRAP   M_OP3(31, 4, 0, 0, 31, 0, 0)

Definition at line 255 of file codegen.hpp.

#define M_TRAPGEU (   a,
 
)    M_OP3(31, 4, 0, 0, 5, a, b)

Definition at line 256 of file codegen.hpp.

#define M_TST (   a)    M_OP3(31, 444, 0, 1, a, a, a)

Definition at line 257 of file codegen.hpp.

#define M_XOR (   a,
  b,
 
)    M_OP3(31, 316, 0, 0, a, c, b)

Definition at line 258 of file codegen.hpp.

#define M_XOR_IMM (   a,
  b,
 
)    M_OP2_IMM(26, a, c, b)

Definition at line 260 of file codegen.hpp.

#define M_XORIS (   a,
  b,
 
)    M_OP2_IMM(27, a, c, b)

Definition at line 259 of file codegen.hpp.

#define MCODECHECK (   icnt)
Value:
do { \
if ((cd->mcodeptr + (icnt) * 4) > cd->mcodeend) \
} while (0)
void codegen_increase(codegendata *cd)

Definition at line 43 of file codegen.hpp.

#define MI_and (   rA,
  rS,
  rB 
)    M_OP3(31, 28, 0, 0, rS, rA, rB)

Definition at line 146 of file codegen.hpp.

#define MI_anddot (   rA,
  rS,
  rB 
)    M_OP3(31, 28, 0, 1, rS, rA, rB)

Definition at line 147 of file codegen.hpp.

#define MI_andi (   rA,
  rS,
  UIMM 
)    M_OP2_IMM(28, rS, rA, UIMM)

Definition at line 148 of file codegen.hpp.

#define MI_illegal   M_OP3( 0, 0, 0, 0, 0, 0, 0)

Definition at line 149 of file codegen.hpp.

#define MI_lwarx (   rD,
  rA,
  rB 
)    M_OP3(31, 20, 0, 0, rD, rA, rB)

Definition at line 150 of file codegen.hpp.

#define MI_or (   rA,
  rS,
  rB 
)    M_OP3(31, 444, 0, 0, rS, rA, rB)

Definition at line 151 of file codegen.hpp.

#define MI_ordot (   rA,
  rS,
  rB 
)    M_OP3(31, 444, 0, 1, rS, rA, rB)

Definition at line 152 of file codegen.hpp.

#define MI_ori (   rA,
  rS,
  UIMM 
)    M_OP2_IMM(24, rS, rA, UIMM)

Definition at line 153 of file codegen.hpp.

#define MI_stwcxdot (   rS,
  rA,
  rB 
)    M_OP3(31, 150, 0, 1, rS, rA, rB)

Definition at line 154 of file codegen.hpp.

#define MI_subf (   rD,
  rA,
  rB 
)    M_OP3(31, 40, 0, 0, rD, rA, rB)

Definition at line 155 of file codegen.hpp.

#define MI_subfdot (   rD,
  rA,
  rB 
)    M_OP3(31, 40, 0, 1, rD, rA, rB)

Definition at line 156 of file codegen.hpp.

#define MI_sync   M_OP3(31, 598, 0, 0, 0, 0, 0)

Definition at line 157 of file codegen.hpp.

#define PATCHER_CALL_SIZE   1 * 4 /* an instruction is 4-bytes long */

Definition at line 80 of file codegen.hpp.

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

Definition at line 82 of file codegen.hpp.