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)   emit_lconst(cd, (reg), (c))
 
#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_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_BCMASK   0x0000fffc /* (((1 << 16) - 1) & ~3) */
 
#define M_BMASK   0x03fffffc /* (((1 << 26) - 1) & ~3) */
 
#define M_B(x, i, a, l)
 
#define M_BC(x, bo, bi, i, a, l)
 
#define M_EXTSW(a, b)   M_OP3(31, 986, 0, 0, a, b, 0)
 
#define M_ILLEGAL   M_OP3(0, 0, 0, 0, 0, 0, 0)
 
#define M_IADD(a, b, c)   M_LADD(a,b,c)
 
#define M_LADD(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) /* XXX */
 
#define M_LADD_IMM(a, b, c)   M_OP2_IMM(14, c, a, b)
 
#define M_ADDC(a, b, c)   M_OP3(31, 10, 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_ADDE(a, b, c)   M_OP3(31, 138, 0, 0, c, a, b)
 
#define M_ADDZE(a, b)   M_OP3(31, 202, 0, 0, b, a, 0)
 
#define M_ADDME(a, b)   M_OP3(31, 234, 0, 0, b, a, 0)
 
#define M_SUB(a, b, c)   M_OP3(31, 40, 0, 0, c, b, a)
 
#define M_ISUBTST(a, b, c)   M_OP3(31, 40, 0, 1, c, b, a)
 
#define M_SUBC(a, b, c)   M_OP3(31, 8, 0, 0, c, b, a)
 
#define M_SUBIC(a, b, c)   M_OP2_IMM(8, c, b, a)
 
#define M_SUBE(a, b, c)   M_OP3(31, 136, 0, 0, c, b, a)
 
#define M_SUBZE(a, b)   M_OP3(31, 200, 0, 0, b, a, 0)
 
#define M_SUBME(a, b)   M_OP3(31, 232, 0, 0, b, a, 0)
 
#define M_AND(a, b, c)   M_OP3(31, 28, 0, 0, a, c, b)
 
#define M_AND_IMM(a, b, c)   M_OP2_IMM(28, a, c, b)
 
#define M_ANDIS(a, b, c)   M_OP2_IMM(29, a, c, b)
 
#define M_OR(a, b, c)   M_OP3(31, 444, 0, 0, a, c, b)
 
#define M_OR_TST(a, b, c)   M_OP3(31, 444, 0, 1, a, c, b)
 
#define M_OR_IMM(a, b, c)   M_OP2_IMM(24, a, c, b)
 
#define M_ORIS(a, b, c)   M_OP2_IMM(25, a, c, b)
 
#define M_XOR(a, b, c)   M_OP3(31, 316, 0, 0, a, c, b)
 
#define M_XOR_IMM(a, b, c)   M_OP2_IMM(26, a, c, b)
 
#define M_XORIS(a, b, c)   M_OP2_IMM(27, a, c, b)
 
#define M_SLL(a, b, c)   M_OP3(31, 27, 0, 0, a, c, b)
 
#define M_SLL_IMM(a, b, c)   M_OP3(30, ((b)&0x20 ? 1:0), 0, ((((63-(b))&0x1f)<<6) | (((63-(b))&0x20 ? 1:0)<<5) | 0x04), a, c, (b)&0x1f);
 
#define M_SRL(a, b, c)   M_OP3(31, 539, 0, 0, a, c, b)
 
#define M_SRL_IMM(a, b, c)   M_OP3(30, ((64-(b))&0x20 ? 1:0), 0, (((((b))&0x1f)<<6) | ((((b))&0x20 ? 1:0)<<5) | 0x00), a, c, (64-(b))&0x1f);
 
#define M_SRA(a, b, c)   M_OP3(31, 794, 0, 0, a, c, b)
 
#define M_SRA_IMM(a, b, c)   M_OP3(31, (826 | ((b)&0x20?1:0)), 0, 0, a, c, ((b)&0x1f))
 
#define M_RLDICL(a, b, c, d)   M_OP4(30, ((b)&0x20 ? 1:0), 0, a, d, (b)&0x1f, c)
 
#define M_CNTLZ(a, b)   M_OP3(31, 58, 0, 0, a, b, 0)
 
#define M_MUL(a, b, c)   M_OP3(31, 233, 0, 0, c, a, b)
 
#define M_MUL_IMM(a, b, c)   M_OP2_IMM(7, c, a, b)
 
#define M_DIV(a, b, c)   M_OP3(31, 489, 1, 0, c, a, b)
 
#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_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_RLWINM(a, b, c, d, e)   M_OP4(21, d, 0, a, e, b, c)
 
#define M_ADDZE(a, b)   M_OP3(31, 202, 0, 0, b, a, 0)
 
#define M_ADDIS(a, b, c)   M_OP2_IMM(15, c, a, b)
 
#define M_STFIWX(a, b, c)   M_OP3(31, 983, 0, 0, a, b, c)
 
#define M_LWAX(a, b, c)   M_OP3(31, 341, 0, 0, a, b, c)
 
#define M_LHZX(a, b, c)   M_OP3(31, 279, 0, 0, a, b, c)
 
#define M_LHAX(a, b, c)   M_OP3(31, 343, 0, 0, a, b, c)
 
#define M_LHAX(a, b, c)   M_OP3(31, 343, 0, 0, a, b, c)
 
#define M_LBZX(a, b, c)   M_OP3(31, 87, 0, 0, a, b, c)
 
#define M_LFSX(a, b, c)   M_OP3(31, 535, 0, 0, a, b, c)
 
#define M_LFDX(a, b, c)   M_OP3(31, 599, 0, 0, a, b, c)
 
#define M_STWX(a, b, c)   M_OP3(31, 151, 0, 0, a, b, c)
 
#define M_STHX(a, b, c)   M_OP3(31, 407, 0, 0, a, b, c)
 
#define M_STBX(a, b, c)   M_OP3(31, 215, 0, 0, a, b, c)
 
#define M_STFSX(a, b, c)   M_OP3(31, 663, 0, 0, a, b, c)
 
#define M_STFDX(a, b, c)   M_OP3(31, 727, 0, 0, a, b, c)
 
#define M_STDU_INTERN(a, b, disp)   M_OP2_IMM(62,a,b,(disp)|0x0001)
 
#define M_STDU(a, b, disp)
 
#define M_STDUX(a, b, c)   M_OP3(31,181,0,0,a,b,c)
 
#define M_LDAH(a, b, c)   M_ADDIS(b, c, a)
 
#define M_TRAP   M_OP3(31, 4, 0, 0, 31, 0, 0)
 
#define M_NOP   M_OR_IMM(0, 0, 0)
 
#define M_MOV(a, b)   M_OR(a, a, b)
 
#define M_TST(a)   M_OP3(31, 444, 0, 1, a, a, a)
 
#define M_DADD(a, b, c)   M_OP3(63, 21, 0, 0, c, a, b)
 
#define M_FADD(a, b, c)   M_OP3(59, 21, 0, 0, c, a, b)
 
#define M_DSUB(a, b, c)   M_OP3(63, 20, 0, 0, c, a, b)
 
#define M_FSUB(a, b, c)   M_OP3(59, 20, 0, 0, c, a, b)
 
#define M_DMUL(a, b, c)   M_OP4(63, 25, 0, c, a, 0, b)
 
#define M_FMUL(a, b, c)   M_OP4(59, 25, 0, c, a, 0, b)
 
#define M_DDIV(a, b, c)   M_OP3(63, 18, 0, 0, c, a, b)
 
#define M_FDIV(a, b, c)   M_OP3(59, 18, 0, 0, c, a, b)
 
#define M_FABS(a, b)   M_OP3(63, 264, 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_CVTDF(a, b)   M_OP3(63, 12, 0, 0, b, 0, a)
 
#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_DSQRT(a, b)   M_OP3(63, 22, 0, 0, b, 0, a)
 
#define M_FSQRT(a, b)   M_OP3(59, 22, 0, 0, b, 0, a)
 
#define M_FCMPU(a, b)   M_OP3(63, 0, 0, 0, 0, a, b)
 
#define M_FCMPO(a, b)   M_OP3(63, 32, 0, 0, 0, a, b)
 
#define M_BLDU(a, b, c)   M_OP2_IMM(34, a, b, c) /* LBZ */
 
#define M_SLDU(a, b, c)   M_OP2_IMM(40, a, b, c) /* LHZ */
 
#define M_LWZ(a, b, disp)   M_OP2_IMM(32,a,b,disp) /* needed for hardware exceptions */
 
#define M_ILD_INTERN(a, b, disp)   M_OP2_IMM(58, a, b, (((disp) & 0xfffe) | 0x0002)) /* this is LWA actually */
 
#define M_ILD(a, b, disp)
 
#define M_LLD_INTERN(a, b, disp)   M_OP2_IMM(58,a,b,disp) /* LD */
 
#define M_LLD(a, b, disp)
 
#define M_ALD_INTERN(a, b, disp)   M_LLD_INTERN(a,b,disp)
 
#define M_ALD(a, b, disp)   M_LLD(a,b,disp)
 
#define M_ALD_DSEG(a, disp)   M_LLD(a,REG_PV,disp)
 
#define M_ALDX(a, b, c)   M_OP3(31, 21, 0, 0, a, b, c) /* LDX */
 
#define M_BST(a, b, c)   M_OP2_IMM(38, a, b, c) /* STB */
 
#define M_SST(a, b, c)   M_OP2_IMM(44, a, b, c) /* LMW */
 
#define M_IST_INTERN(a, b, disp)   M_OP2_IMM(36,a,b,disp) /* STW */
 
#define M_IST(a, b, disp)
 
#define M_LST_INTERN(a, b, disp)   M_OP2_IMM(62,a,b,disp) /* STD */
 
#define M_LST(a, b, disp)
 
#define M_AST_INTERN(a, b, disp)   M_LST_INTERN(a,b,disp)
 
#define M_AST(a, b, disp)   M_LST(a,b,disp)
 
#define M_ASTX(a, b, c)   M_OP3(31, 149, 0, 0, a, b, c)
 
#define M_LSTX(a, b, c)   M_ASTX(a,b,c)
 
#define M_BSEXT(a, b)   M_OP3(31, 954, 0, 0, a, b, 0)
 
#define M_CZEXT(a, b)   M_RLWINM(a,0,16,31,b)
 
#define M_SSEXT(a, b)   M_OP3(31, 922, 0, 0, a, b, 0)
 
#define M_ISEXT(a, b)   M_OP3(31, 986, 0, 0, a, b, 0)
 
#define M_BR(a)   M_B(18, a, 0, 0)
 
#define M_BL(a)   M_B(18, a, 0, 1)
 
#define M_RET   M_OP3(19, 16, 0, 0, 20, 0, 0)
 
#define M_JSR   M_OP3(19, 528, 0, 1, 20, 0, 0)
 
#define M_RTS   M_OP3(19, 528, 0, 0, 20, 0, 0)
 
#define M_CMP(a, b)   M_OP3(31, 0, 0, 0, 1, a, b)
 
#define M_CMPU(a, b)   M_OP3(31, 32, 0, 0, 1, a, b)
 
#define M_CMPI(a, b)   M_OP2_IMM(11, 1, a, b)
 
#define M_CMPUI(a, b)   M_OP2_IMM(10, 1, a, b)
 
#define M_BLT(a)   M_BC(16, 12, 0, a, 0, 0)
 
#define M_BLE(a)   M_BC(16, 4, 1, a, 0, 0)
 
#define M_BGT(a)   M_BC(16, 12, 1, a, 0, 0)
 
#define M_BGE(a)   M_BC(16, 4, 0, a, 0, 0)
 
#define M_BEQ(a)   M_BC(16, 12, 2, a, 0, 0)
 
#define M_BNE(a)   M_BC(16, 4, 2, a, 0, 0)
 
#define M_BNAN(a)   M_BC(16, 12, 3, a, 0, 0)
 
#define M_FLD_INTERN(a, b, disp)   M_OP2_IMM(48,a,b,disp)
 
#define M_DLD_INTERN(a, b, disp)   M_OP2_IMM(50,a,b,disp)
 
#define M_FLD(a, b, disp)
 
#define M_DLD(a, b, disp)
 
#define M_FST_INTERN(a, b, disp)   M_OP2_IMM(52,a,b,disp) /* STFS */
 
#define M_DST_INTERN(a, b, disp)   M_OP2_IMM(54,a,b,disp) /* STFD */
 
#define M_FST(a, b, disp)
 
#define M_DST(a, b, disp)
 
#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_MFCTR(a)   M_OP3(31, 339, 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_MTCTR(a)   M_OP3(31, 467, 0, 0, a, 9, 0)
 
#define M_LDA_INTERN(a, b, c)   M_LADD_IMM(b, c, a)
 
#define M_LDA(a, b, disp)
 
#define M_LDATST(a, b, c)   M_ADDICTST(b, c, a)
 
#define M_CLR(a)   M_LADD_IMM(0, 0, a)
 
#define M_CLR_HIGH(a)   M_OP3(30, 0, 0, 0x20, (a), (a), 0);
 
#define M_AADD_IMM(a, b, c)   M_LADD_IMM(a, b, c)
 
#define M_DMOV(a, b)   M_FMOV(a,b)
 
#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)
 

Macro Definition Documentation

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

Definition at line 54 of file codegen.hpp.

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

Definition at line 62 of file codegen.hpp.

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

Definition at line 50 of file codegen.hpp.

#define LCONST (   reg,
 
)    emit_lconst(cd, (reg), (c))

Definition at line 51 of file codegen.hpp.

#define M_AADD_IMM (   a,
  b,
 
)    M_LADD_IMM(a, b, c)

Definition at line 444 of file codegen.hpp.

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

Definition at line 448 of file codegen.hpp.

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

Definition at line 133 of file codegen.hpp.

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

Definition at line 136 of file codegen.hpp.

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

Definition at line 134 of file codegen.hpp.

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

Definition at line 135 of file codegen.hpp.

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

Definition at line 180 of file codegen.hpp.

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

Definition at line 138 of file codegen.hpp.

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

Definition at line 179 of file codegen.hpp.

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

Definition at line 179 of file codegen.hpp.

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

Definition at line 296 of file codegen.hpp.

#define M_ALD_DSEG (   a,
  disp 
)    M_LLD(a,REG_PV,disp)

Definition at line 297 of file codegen.hpp.

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

Definition at line 295 of file codegen.hpp.

#define M_ALDX (   a,
  b,
 
)    M_OP3(31, 21, 0, 0, a, b, c) /* LDX */

Definition at line 298 of file codegen.hpp.

#define M_AND (   a,
  b,
 
)    M_OP3(31, 28, 0, 0, a, c, b)

Definition at line 148 of file codegen.hpp.

#define M_AND_IMM (   a,
  b,
 
)    M_OP2_IMM(28, a, c, b)

Definition at line 149 of file codegen.hpp.

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

Definition at line 150 of file codegen.hpp.

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

Definition at line 336 of file codegen.hpp.

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

Definition at line 335 of file codegen.hpp.

#define M_ASTX (   a,
  b,
 
)    M_OP3(31, 149, 0, 0, a, b, c)

Definition at line 337 of file codegen.hpp.

#define M_B (   x,
  i,
  a,
 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = (((x) << 26) | ((((i) * 4) + 4) & M_BMASK) | ((a) << 1) | (l)); \
cd->mcodeptr += 4; \
} while (0)
MIIterator i
#define M_BMASK
Definition: codegen.hpp:107
uint32_t u4
Definition: types.hpp:46

Definition at line 109 of file codegen.hpp.

#define M_BC (   x,
  bo,
  bi,
  i,
  a,
 
)
Value:
do { \
*((u4 *) cd->mcodeptr) = (((x) << 26) | ((bo) << 21) | ((bi) << 16) | (((i) * 4 + 4) & M_BCMASK) | ((a) << 1) | (l)); \
cd->mcodeptr += 4; \
} while (0)
#define M_BCMASK
Definition: codegen.hpp:106
MIIterator i
uint32_t u4
Definition: types.hpp:46

Definition at line 115 of file codegen.hpp.

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

Definition at line 106 of file codegen.hpp.

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

Definition at line 361 of file codegen.hpp.

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

Definition at line 360 of file codegen.hpp.

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

Definition at line 359 of file codegen.hpp.

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

Definition at line 347 of file codegen.hpp.

#define M_BLDU (   a,
  b,
 
)    M_OP2_IMM(34, a, b, c) /* LBZ */

Definition at line 258 of file codegen.hpp.

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

Definition at line 358 of file codegen.hpp.

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

Definition at line 357 of file codegen.hpp.

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

Definition at line 107 of file codegen.hpp.

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

Definition at line 363 of file codegen.hpp.

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

Definition at line 362 of file codegen.hpp.

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

Definition at line 346 of file codegen.hpp.

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

Definition at line 341 of file codegen.hpp.

#define M_BST (   a,
  b,
 
)    M_OP2_IMM(38, a, b, c) /* STB */

Definition at line 300 of file codegen.hpp.

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

Definition at line 442 of file codegen.hpp.

#define M_CLR_HIGH (   a)    M_OP3(30, 0, 0, 0x20, (a), (a), 0);

Definition at line 443 of file codegen.hpp.

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

Definition at line 352 of file codegen.hpp.

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

Definition at line 354 of file codegen.hpp.

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

Definition at line 353 of file codegen.hpp.

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

Definition at line 355 of file codegen.hpp.

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

Definition at line 167 of file codegen.hpp.

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

Definition at line 249 of file codegen.hpp.

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

Definition at line 247 of file codegen.hpp.

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

Definition at line 248 of file codegen.hpp.

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

Definition at line 342 of file codegen.hpp.

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

Definition at line 237 of file codegen.hpp.

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

Definition at line 243 of file codegen.hpp.

#define M_DIV (   a,
  b,
 
)    M_OP3(31, 489, 1, 0, c, a, b)

Definition at line 171 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:366
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 380 of file codegen.hpp.

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

Definition at line 366 of file codegen.hpp.

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

Definition at line 446 of file codegen.hpp.

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

Definition at line 241 of file codegen.hpp.

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

Definition at line 252 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_DST_INTERN(a, b, disp)
Definition: codegen.hpp:393
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 407 of file codegen.hpp.

#define M_DST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(54,a,b,disp) /* STFD */

Definition at line 393 of file codegen.hpp.

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

Definition at line 239 of file codegen.hpp.

#define M_EXTSW (   a,
 
)    M_OP3(31, 986, 0, 0, a, b, 0)

Definition at line 123 of file codegen.hpp.

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

Definition at line 246 of file codegen.hpp.

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

Definition at line 238 of file codegen.hpp.

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

Definition at line 256 of file codegen.hpp.

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

Definition at line 255 of file codegen.hpp.

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

Definition at line 244 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_FLD_INTERN(a, b, disp)
Definition: codegen.hpp:365
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 368 of file codegen.hpp.

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

Definition at line 365 of file codegen.hpp.

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

Definition at line 250 of file codegen.hpp.

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

Definition at line 251 of file codegen.hpp.

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

Definition at line 242 of file codegen.hpp.

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

Definition at line 253 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_FST_INTERN(a, b, disp)
Definition: codegen.hpp:392
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 395 of file codegen.hpp.

#define M_FST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(52,a,b,disp) /* STFS */

Definition at line 392 of file codegen.hpp.

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

Definition at line 240 of file codegen.hpp.

#define M_IADD (   a,
  b,
 
)    M_LADD(a,b,c)

Definition at line 129 of file codegen.hpp.

#define M_IADD_IMM (   a,
  b,
 
)    M_OP2_IMM(14, c, a, b) /* XXX */

Definition at line 131 of file codegen.hpp.

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

Definition at line 449 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:180
int32_t s4
Definition: types.hpp:45
#define M_ILD_INTERN(a, b, disp)
Definition: codegen.hpp:267

Definition at line 269 of file codegen.hpp.

#define M_ILD_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(58, a, b, (((disp) & 0xfffe) | 0x0002)) /* this is LWA actually */

Definition at line 267 of file codegen.hpp.

#define M_ILLEGAL   M_OP3(0, 0, 0, 0, 0, 0, 0)

Definition at line 128 of file codegen.hpp.

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

Definition at line 103 of file codegen.hpp.

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

Definition at line 102 of file codegen.hpp.

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

Definition at line 104 of file codegen.hpp.

#define M_ISEXT (   a,
 
)    M_OP3(31, 986, 0, 0, a, b, 0)

Definition at line 344 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:180
int32_t s4
Definition: types.hpp:45
#define M_IST_INTERN(a, b, disp)
Definition: codegen.hpp:303
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 309 of file codegen.hpp.

#define M_IST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(36,a,b,disp) /* STW */

Definition at line 303 of file codegen.hpp.

#define M_ISUBTST (   a,
  b,
 
)    M_OP3(31, 40, 0, 1, c, b, a)

Definition at line 141 of file codegen.hpp.

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

Definition at line 349 of file codegen.hpp.

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

Definition at line 130 of file codegen.hpp.

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

Definition at line 132 of file codegen.hpp.

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

Definition at line 187 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_LDA_INTERN(a, b, c)
Definition: codegen.hpp:426
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45

Definition at line 428 of file codegen.hpp.

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

Definition at line 426 of file codegen.hpp.

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

Definition at line 230 of file codegen.hpp.

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

Definition at line 441 of file codegen.hpp.

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

Definition at line 189 of file codegen.hpp.

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

Definition at line 188 of file codegen.hpp.

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

Definition at line 186 of file codegen.hpp.

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

Definition at line 186 of file codegen.hpp.

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

Definition at line 184 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 GET_LOW_REG(a)
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define M_LLD_INTERN(a, b, disp)
Definition: codegen.hpp:281

Definition at line 283 of file codegen.hpp.

#define M_LLD_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(58,a,b,disp) /* LD */

Definition at line 281 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_LST_INTERN(a, b, disp)
Definition: codegen.hpp:321
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 323 of file codegen.hpp.

#define M_LST_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(62,a,b,disp) /* STD */

Definition at line 321 of file codegen.hpp.

#define M_LSTX (   a,
  b,
 
)    M_ASTX(a,b,c)

Definition at line 338 of file codegen.hpp.

#define M_LWAX (   a,
  b,
 
)    M_OP3(31, 341, 0, 0, a, b, c)

Definition at line 183 of file codegen.hpp.

#define M_LWZ (   a,
  b,
  disp 
)    M_OP2_IMM(32,a,b,disp) /* needed for hardware exceptions */

Definition at line 265 of file codegen.hpp.

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

Definition at line 421 of file codegen.hpp.

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

Definition at line 419 of file codegen.hpp.

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

Definition at line 420 of file codegen.hpp.

#define M_MOV (   a,
 
)    M_OR(a, a, b)

Definition at line 234 of file codegen.hpp.

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

Definition at line 424 of file codegen.hpp.

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

Definition at line 422 of file codegen.hpp.

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

Definition at line 423 of file codegen.hpp.

#define M_MUL (   a,
  b,
 
)    M_OP3(31, 233, 0, 0, c, a, b)

Definition at line 169 of file codegen.hpp.

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

Definition at line 170 of file codegen.hpp.

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

Definition at line 173 of file codegen.hpp.

#define M_NOP   M_OR_IMM(0, 0, 0)

Definition at line 233 of file codegen.hpp.

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

Definition at line 174 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 95 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 83 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 89 of file codegen.hpp.

#define M_OR (   a,
  b,
 
)    M_OP3(31, 444, 0, 0, a, c, b)

Definition at line 151 of file codegen.hpp.

#define M_OR_IMM (   a,
  b,
 
)    M_OP2_IMM(24, a, c, b)

Definition at line 153 of file codegen.hpp.

#define M_OR_TST (   a,
  b,
 
)    M_OP3(31, 444, 0, 1, a, c, b)

Definition at line 152 of file codegen.hpp.

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

Definition at line 154 of file codegen.hpp.

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

Definition at line 348 of file codegen.hpp.

#define M_RLDICL (   a,
  b,
  c,
 
)    M_OP4(30, ((b)&0x20 ? 1:0), 0, a, d, (b)&0x1f, c)

Definition at line 166 of file codegen.hpp.

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

Definition at line 178 of file codegen.hpp.

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

Definition at line 350 of file codegen.hpp.

#define M_SLDU (   a,
  b,
 
)    M_OP2_IMM(40, a, b, c) /* LHZ */

Definition at line 259 of file codegen.hpp.

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

Definition at line 160 of file codegen.hpp.

#define M_SLL_IMM (   a,
  b,
 
)    M_OP3(30, ((b)&0x20 ? 1:0), 0, ((((63-(b))&0x1f)<<6) | (((63-(b))&0x20 ? 1:0)<<5) | 0x04), a, c, (b)&0x1f);

Definition at line 161 of file codegen.hpp.

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

Definition at line 164 of file codegen.hpp.

#define M_SRA_IMM (   a,
  b,
 
)    M_OP3(31, (826 | ((b)&0x20?1:0)), 0, 0, a, c, ((b)&0x1f))

Definition at line 165 of file codegen.hpp.

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

Definition at line 162 of file codegen.hpp.

#define M_SRL_IMM (   a,
  b,
 
)    M_OP3(30, ((64-(b))&0x20 ? 1:0), 0, (((((b))&0x1f)<<6) | ((((b))&0x20 ? 1:0)<<5) | 0x00), a, c, (64-(b))&0x1f);

Definition at line 163 of file codegen.hpp.

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

Definition at line 343 of file codegen.hpp.

#define M_SST (   a,
  b,
 
)    M_OP2_IMM(44, a, b, c) /* LMW */

Definition at line 301 of file codegen.hpp.

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

Definition at line 193 of file codegen.hpp.

#define M_STDU (   a,
  b,
  disp 
)
Value:
do { \
s4 lo = (disp) & 0x0000ffff; \
s4 hi = ((disp) >> 16); \
if (((disp) >= -32678) && ((disp) <= 32767)) { \
M_STDU_INTERN(a,b,lo); \
} else { \
} \
} while (0)
#define REG_SP
Definition: md-abi.hpp:53
#define M_STDU_INTERN(a, b, disp)
Definition: codegen.hpp:215
#define M_ADDIS(a, b, c)
Definition: codegen.hpp:180
int32_t s4
Definition: types.hpp:45
#define M_STDUX(a, b, c)
Definition: codegen.hpp:228
#define M_OR_IMM(a, b, c)
Definition: codegen.hpp:153
#define REG_ZERO
Definition: md-abi.hpp:54
#define REG_ITMP3
Definition: md-abi.hpp:48

Definition at line 216 of file codegen.hpp.

#define M_STDU_INTERN (   a,
  b,
  disp 
)    M_OP2_IMM(62,a,b,(disp)|0x0001)

Definition at line 215 of file codegen.hpp.

#define M_STDUX (   a,
  b,
 
)    M_OP3(31,181,0,0,a,b,c)

Definition at line 228 of file codegen.hpp.

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

Definition at line 195 of file codegen.hpp.

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

Definition at line 181 of file codegen.hpp.

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

Definition at line 194 of file codegen.hpp.

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

Definition at line 192 of file codegen.hpp.

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

Definition at line 191 of file codegen.hpp.

#define M_SUB (   a,
  b,
 
)    M_OP3(31, 40, 0, 0, c, b, a)

Definition at line 140 of file codegen.hpp.

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

Definition at line 142 of file codegen.hpp.

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

Definition at line 144 of file codegen.hpp.

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

Definition at line 176 of file codegen.hpp.

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

Definition at line 177 of file codegen.hpp.

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

Definition at line 143 of file codegen.hpp.

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

Definition at line 146 of file codegen.hpp.

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

Definition at line 145 of file codegen.hpp.

#define M_TEST (   a)    M_TST(a)

Definition at line 451 of file codegen.hpp.

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

Definition at line 231 of file codegen.hpp.

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

Definition at line 235 of file codegen.hpp.

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

Definition at line 155 of file codegen.hpp.

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

Definition at line 156 of file codegen.hpp.

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

Definition at line 157 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 PATCHER_CALL_SIZE   1 * 4 /* an instruction is 4-bytes long */

Definition at line 73 of file codegen.hpp.

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

Definition at line 75 of file codegen.hpp.