27 #define MD_EMIT_HPP_ 1
105 #define emit_address_byte(mod,reg,rm) \
107 *(cd->mcodeptr++) = ((((mod) & 0x03) << 6) | (((reg) & 0x07) << 3) | ((rm) & 0x07)); \
111 #define emit_rex(size,reg,index,rm) \
113 if (((size) == 1) || ((reg) > 7) || ((index) > 7) || ((rm) > 7)) \
114 *(cd->mcodeptr++) = (0x40 | (((size) & 0x01) << 3) | ((((reg) >> 3) & 0x01) << 2) | ((((index) >> 3) & 0x01) << 1) | (((rm) >> 3) & 0x01)); \
118 #define emit_byte_rex(reg,index,rm) \
120 *(cd->mcodeptr++) = (0x40 | ((((reg) >> 3) & 0x01) << 2) | ((((index) >> 3) & 0x01) << 1) | (((rm) >> 3) & 0x01)); \
124 #define emit_mem(r,disp) \
126 emit_address_byte(0,(r),5); \
127 emit_imm32((disp)); \
131 #define emit_imm8(imm) \
133 *(cd->mcodeptr++) = (u1) ((imm) & 0xff); \
137 #define emit_imm16(imm) \
140 imb.i = (s4) (imm); \
141 *(cd->mcodeptr++) = imb.b[0]; \
142 *(cd->mcodeptr++) = imb.b[1]; \
146 #define emit_imm32(imm) \
149 imb.i = (s4) (imm); \
150 *(cd->mcodeptr++) = imb.b[0]; \
151 *(cd->mcodeptr++) = imb.b[1]; \
152 *(cd->mcodeptr++) = imb.b[2]; \
153 *(cd->mcodeptr++) = imb.b[3]; \
157 #define emit_imm64(imm) \
160 imb.l = (s8) (imm); \
161 *(cd->mcodeptr++) = imb.b[0]; \
162 *(cd->mcodeptr++) = imb.b[1]; \
163 *(cd->mcodeptr++) = imb.b[2]; \
164 *(cd->mcodeptr++) = imb.b[3]; \
165 *(cd->mcodeptr++) = imb.b[4]; \
166 *(cd->mcodeptr++) = imb.b[5]; \
167 *(cd->mcodeptr++) = imb.b[6]; \
168 *(cd->mcodeptr++) = imb.b[7]; \
174 #define emit_reg(reg,rm) emit_address_byte(3,(reg),(rm))
375 #endif // MD_EMIT_HPP_
void emit_incq_reg(codegendata *cd, s8 reg)
void emit_ucomisd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_imul_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 dreg)
void emit_test_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_mfence(codegendata *cd)
void emit_imull_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movsd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_imul_imm_membase_reg(codegendata *cd, s4 imm, s4 basereg, s4 disp, s4 dreg)
void emit_neg_reg(codegendata *cd, s4 reg)
void emit_setcc_reg(codegendata *cd, s4 opc, s4 reg)
void emit_mov_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_shiftl_reg(codegendata *cd, s8 opc, s8 reg)
void emit_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
void emit_push_reg(codegendata *cd, s4 reg)
void emit_movw_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
void emit_alul_membase_reg(codegendata *cd, s8 opc, s8 basereg, s8 disp, s8 reg)
void emit_movlps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_ucomiss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_alu_membase_reg(codegendata *cd, s4 opc, s4 basereg, s4 disp, s4 reg)
void emit_ishift(jitdata *jd, s4 shift_op, instruction *iptr)
void emit_movzbq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_alul_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg)
void emit_cvtsd2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_addsd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg)
void emit_push_imm(codegendata *cd, s4 imm)
void emit_imull_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_testb_imm_reg(codegendata *cd, s8 imm, s8 reg)
void emit_negl_reg(codegendata *cd, s8 reg)
void emit_shiftl_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp)
void emit_movlps_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_xchg_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp)
void emit_mov_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_movb_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_alu_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg)
void emit_movl_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg)
void emit_cvttsd2si_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movl_imm_membase32(codegendata *cd, s8 imm, s8 basereg, s8 disp)
void emit_movsd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_alul_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg)
void emit_movd_reg_freg(codegendata *cd, s8 reg, s8 freg)
void emit_arbitrary_nop(codegendata *cd, int disp)
void emit_movl_imm_reg(codegendata *cd, s8 imm, s8 reg)
void emit_movsbq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_shift_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp)
void emit_jmp_reg(codegendata *cd, s4 reg)
void emit_xorps_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_idivl_reg(codegendata *cd, s8 reg)
void emit_alu_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp)
void emit_call_imm(codegendata *cd, s4 imm)
void emit_movsd_membase32_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_recompute_pv(codegendata *cd)
Emit code to recompute the procedure vector.
void emit_testl_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movlpd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_cvtsi2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_shiftl_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp)
void emit_movl_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale)
void emit_setcc_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp)
void emit_movsd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg)
void emit_cmovccl_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg)
void emit_imul_imm_reg(codegendata *cd, s4 imm, s4 dreg)
void emit_movq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_test_imm_reg(codegendata *cd, s4 imm, s4 reg)
void emit_subss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_call_reg(codegendata *cd, s4 reg)
void emit_alul_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_movsd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale)
void emit_movb_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_imul_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_cvtsi2sdq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_incq_membase(codegendata *cd, s8 basereg, s8 disp)
void emit_movl_imm_membase(codegendata *cd, s8 imm, s8 basereg, s8 disp)
void emit_movss_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale)
void emit_alul_reg_membase(codegendata *cd, s8 opc, s8 reg, s8 basereg, s8 disp)
void emit_alul_memindex_reg(codegendata *cd, s8 opc, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg)
void emit_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp)
void emit_movswq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_cqto(codegendata *cd)
void emit_decl_membase(codegendata *cd, s8 basereg, s8 disp)
void emit_shift_reg(codegendata *cd, s4 opc, s4 reg)
void emit_cvtsi2ssq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_imul_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
void emit_incl_membase(codegendata *cd, s8 basereg, s8 disp)
void emit_movzwq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_xorpd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movsbq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg)
void emit_mulss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movlpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_cvttsd2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_cltd(codegendata *cd)
void emit_mov_imm_reg(codegendata *cd, s4 imm, s4 reg)
void emit_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_testw_imm_reg(codegendata *cd, s8 imm, s8 reg)
void emit_alu_reg_membase(codegendata *cd, s4 opc, s4 reg, s4 basereg, s4 disp)
void emit_movl_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg)
void emit_mov_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_alu_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_movss_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg)
void emit_cvtss2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_alu_memindex_reg(codegendata *cd, s4 opc, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_leal_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg)
void emit_movq_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_movq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_neg_membase(codegendata *cd, s8 basereg, s8 disp)
void emit_movsd_reg_membase32(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_alul_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp)
void emit_nop(codegendata *cd)
void emit_jcc(codegendata *cd, s4 opc, s4 imm)
void emit_addss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_cvttss2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movzwq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_xorps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_pop_reg(codegendata *cd, s4 reg)
void emit_movw_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_movd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale)
void emit_movl_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_divsd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_mulsd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_call_mem(codegendata *cd, s4 mem)
void emit_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp)
void emit_imull_imm_membase_reg(codegendata *cd, s8 imm, s8 basereg, s8 disp, s8 dreg)
void emit_xorpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
void emit_jmp_imm(codegendata *cd, s4 imm)
void emit_incl_reg(codegendata *cd, s8 reg)
void emit_movl_membase32_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg)
void emit_cmovcc_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg)
void emit_cvtsi2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_cvttss2si_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movslq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_rdtsc(codegendata *cd)
void emit_shift_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_movss_membase32_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_alu_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_movzwq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg)
void emit_movl_reg_membase32(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_movsbq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_movd_freg_reg(codegendata *cd, s8 freg, s8 reg)
void emit_shiftl_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg)
void emit_movss_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_lshift(jitdata *jd, s4 shift_op, instruction *iptr)
void emit_shift_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp)
void emit_idiv_reg(codegendata *cd, s4 reg)
void emit_movswq_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movl_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_movslq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
const char const void jint length
void emit_movss_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_lea_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg)
void emit_cmovxx(codegendata *cd, instruction *iptr, s4 s, s4 d)
void emit_movss_reg_membase32(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_movd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg)
void emit_movsd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_movdl_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg)
void emit_divss_reg_reg(codegendata *cd, s8 reg, s8 dreg)
void emit_movswq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg)
void emit_imull_imm_reg_reg(codegendata *cd, s8 imm, s8 reg, s8 dreg)
void emit_movl_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp)
void emit_negl_membase(codegendata *cd, s8 basereg, s8 disp)
void emit_subsd_reg_reg(codegendata *cd, s8 reg, s8 dreg)