86 disp = src->vv.regoff;
103 vm_abort(
"emit_load: unknown type %d", src->type);
110 reg = src->vv.regoff;
419 vm_abort(
"emit_branch: unknown condition %d", condition);
501 vm_abort(
"emit_classcast_check: unknown condition %d", condition);
598 mcode = *((uint16_t *) cd->
mcodeptr);
608 return (uint32_t) mcode;
720 #if defined(ENABLE_PROFILING)
732 #if defined(ENABLE_PROFILING)
744 #if defined(ENABLE_PROFILING)
755 #if defined(ENABLE_PROFILING)
777 int32_t stackframesize;
931 if (basereg ==
ESP) {
947 else if ((disp == 0) && (basereg !=
EBP)) {
963 if (basereg ==
ESP) {
982 else if ((disp == 0) && (basereg !=
EBP)) {
1011 *(cd->
mcodeptr++) = 0xb8 + ((reg) & 0x07);
1073 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1081 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1090 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1098 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1164 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1181 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1207 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1312 emit_memindex(cd, (reg),(disp),(basereg),(indexreg),(scale));
1572 *(cd->
mcodeptr++) = 0x58 + (0x07 & (
u1) (reg));
1578 *(cd->
mcodeptr++) = 0x50 + (0x07 & (
u1) (reg));
1626 *(cd->
mcodeptr++) = 0xc0 + (0x07 & (
u1) (reg));
1710 *(cd->
mcodeptr++) = 0xd0 + (0x07 & (
u1) (reg));
1745 *(cd->
mcodeptr++) = 0xd8 + (0x07 & (
u1) (reg));
1850 *(cd->
mcodeptr++) = 0xc0 + (0x0f & (
u1) (reg));
1857 *(cd->
mcodeptr++) = 0xc0 + (0x0f & (
u1) (reg));
1864 *(cd->
mcodeptr++) = 0xc0 + (0x0f & (
u1) (reg));
1885 *(cd->
mcodeptr++) = 0xe0 + (0x07 & (
u1) (reg));
1892 *(cd->
mcodeptr++) = 0xe8 + (0x07 & (
u1) (reg));
1899 *(cd->
mcodeptr++) = 0xe8 + (0x07 & (
u1) (reg));
1927 *(cd->
mcodeptr++) = 0xc8 + (0x07 & (
u1) (reg));
1934 *(cd->
mcodeptr++) = 0xc8 + (0x07 & (
u1) (reg));
1948 *(cd->
mcodeptr++) = 0xc8 + (0x07 & (
u1) (reg));
1969 *(cd->
mcodeptr++) = 0xf0 + (0x07 & (
u1) (reg));
1976 *(cd->
mcodeptr++) = 0xf8 + (0x07 & (
u1) (reg));
1990 *(cd->
mcodeptr++) = 0xf8 + (0x07 & (
u1) (reg));
2004 *(cd->
mcodeptr++) = 0xc8 + (0x07 & (reg));
2032 *(cd->
mcodeptr++) = 0xe0 + (0x07 & (
u1) (reg));
2039 *(cd->
mcodeptr++) = 0xe8 + (0x07 & (
u1) (reg));
2094 *(cd->
mcodeptr++) = 0xc0 + (0x07 & (
u1) (reg));
2111 #if defined(ENABLE_ESCAPE_CHECK)
void emit_fsubs_membase(codegendata *cd, s4 basereg, s4 disp)
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_fprem(codegendata *cd)
dummy_java_lang_Class object
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_fmul_st_reg(codegendata *cd, s4 reg)
#define M_ALD(a, b, disp)
#define STATISTICS(x)
Wrapper for statistics only code.
void emit_movb_imm_reg(codegendata *cd, s4 imm, s4 reg)
void emit_shrd_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
void emit_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
void emit_fsubp_st_reg(codegendata *cd, s4 reg)
void emit_monitor_exit(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to leave a monitor.
#define M_LST(a, b, disp)
void emit_flds_mem(codegendata *cd, s4 mem)
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_fmull_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
#define JITDATA_HAS_FLAG_VERBOSECALL(jd)
void emit_fchs(codegendata *cd)
#define M_ILD(a, b, disp)
void emit_alu_membase_reg(codegendata *cd, s4 opc, s4 basereg, s4 disp, s4 reg)
void emit_sahf(codegendata *cd)
void emit_flds_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_movzbl_reg_reg(codegendata *cd, s4 a, s4 b)
#define M_IST(a, b, disp)
void emit_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg)
void emit_push_imm(codegendata *cd, s4 imm)
void emit_shrd_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
void emit_monitor_enter(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to enter a monitor.
void emit_shld_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
#define M_AADD_IMM(a, b, c)
static void emit_membase32(codegendata *cd, s4 basereg, s4 disp, s4 dreg)
#define M_DSTNP(a, b, disp)
void emit_fsub_st_reg(codegendata *cd, s4 reg)
void emit_fildll_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fdivp_st_reg(codegendata *cd, s4 reg)
#define REG_ITMP12_PACKED
void emit_finit(codegendata *cd)
void emit_alu_imm_memabs(codegendata *cd, s4 opc, s4 imm, s4 disp)
s4 codegen_reg_of_var(u2 opcode, varinfo *v, s4 tempregnum)
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)
#define BRANCH_UNCONDITIONAL
void emit_fistl_membase(codegendata *cd, s4 basereg, s4 disp)
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_store_low(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
void emit_fmuls_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fldl_membase32(codegendata *cd, s4 basereg, s4 disp)
void emit_fadds_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_arraystore_check(codegendata *cd, instruction *iptr)
#define BRANCH_UNCONDITIONAL_SIZE
#define M_FST(a, b, disp)
#define M_FLD(a, b, disp)
void trace_java_call_exit(methodinfo *m, uint64_t *return_regs)
void emit_jmp_reg(codegendata *cd, s4 reg)
void emit_fucompp(codegendata *cd)
void emit_faddp_st_reg(codegendata *cd, s4 reg)
void emit_alu_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp)
void emit_fdivp(codegendata *cd)
void emit_call_imm(codegendata *cd, s4 imm)
void emit_fstps_mem(codegendata *cd, s4 mem)
JNIEnv jthread jobject jclass jlong size
void emit_movzwl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_fistpll_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_abstractmethoderror_trap(codegendata *cd)
void emit_shld_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp)
static int code_is_leafmethod(codeinfo *code)
void emit_fld1(codegendata *cd)
void emit_setcc_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp)
void vm_abort(const char *text,...)
void emit_imul_imm_reg(codegendata *cd, s4 imm, s4 dreg)
void emit_fst_reg(codegendata *cd, s4 reg)
void emit_xadd_reg_mem(codegendata *cd, s4 reg, s4 mem)
void emit_verbosecall_enter(jitdata *jd)
void emit_fsts_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_exception_check(codegendata *cd, instruction *iptr)
#define emit_reg(reg, rm)
void emit_dec_mem(codegendata *cd, s4 mem)
void emit_fstps_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fucomp_reg(codegendata *cd, s4 reg)
void emit_mul_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_test_imm_reg(codegendata *cd, s4 imm, s4 reg)
void emit_store_high(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
void emit_fldl_membase(codegendata *cd, s4 basereg, s4 disp)
void trace_java_call_enter(methodinfo *m, uint64_t *arg_regs, uint64_t *stack)
void emit_fstpl_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fsubp(codegendata *cd)
#define M_FSTNP(a, b, disp)
void emit_fadd_reg_st(codegendata *cd, s4 reg)
void emit_fstp_reg(codegendata *cd, s4 reg)
void emit_call_reg(codegendata *cd, s4 reg)
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_flds_membase32(codegendata *cd, s4 basereg, s4 disp)
void emit_mul_reg(codegendata *cd, s4 reg)
s4 emit_load_high(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_movsbl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
#define LOCK_monitor_enter
void emit_fldcw_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp)
This file contains the statistics framework.
void emit_movswl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_fmulp(codegendata *cd)
void emit_fucom(codegendata *cd)
void emit_shift_reg(codegendata *cd, s4 opc, s4 reg)
void emit_fxch_reg(codegendata *cd, s4 reg)
void emit_trap_compiler(codegendata *cd)
void emit_shrd_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_flds_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_imul_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
void emit_mov_imm_mem(codegendata *cd, s4 imm, s4 mem)
void emit_fdiv_st_reg(codegendata *cd, s4 reg)
#define M_ASUB_IMM(a, b, c)
void emit_fstl_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_trap(codegendata *cd, u1 Xd, int type)
s4 emit_load(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_ffree_reg(codegendata *cd, s4 reg)
void emit_mov_imm2_reg(codegendata *cd, s4 imm, s4 reg)
void emit_fldl_mem(codegendata *cd, s4 mem)
void emit_store(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
void emit_fmulp_st_reg(codegendata *cd, s4 reg)
#define M_AST(a, b, disp)
void emit_wait(codegendata *cd)
void emit_mov_imm_reg(codegendata *cd, s4 imm, s4 reg)
void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg)
void emit_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_alu_reg_membase(codegendata *cd, s4 opc, s4 reg, s4 basereg, s4 disp)
void emit_fsub_reg_st(codegendata *cd, s4 reg)
#define LOCK_monitor_exit
void emit_mov_reg_reg(codegendata *cd, s4 reg, s4 dreg)
void emit_icmp_imm(codegendata *cd, int reg, int32_t value)
Emits code comparing a single register.
void emit_fprem1(codegendata *cd)
void emit_copy(jitdata *jd, instruction *iptr)
void emit_alu_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_movswl_reg_reg(codegendata *cd, s4 a, s4 b)
void emit_fldz(codegendata *cd)
void emit_fstps_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_alu_memindex_reg(codegendata *cd, s4 opc, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
void emit_fadd_st_reg(codegendata *cd, s4 reg)
void emit_movzwl_reg_reg(codegendata *cd, s4 a, s4 b)
static bool IS_INMEMORY(s4 flags)
void emit_jcc(codegendata *cd, s4 opc, s4 imm)
void emit_fstl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_fucom_reg(codegendata *cd, s4 reg)
s4 emit_load_low(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_fmul_reg_st(codegendata *cd, s4 reg)
void emit_patcher_alignment(codegendata *cd)
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_fsts_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp)
#define M_ISUB_IMM_MEMABS(a, b)
void emit_classcast_check(codegendata *cd, instruction *iptr, s4 condition, s4 reg, s4 s1)
void emit_lock(codegendata *cd)
void emit_branch(codegendata *cd, s4 disp, s4 condition, s4 reg, u4 opt)
void emit_fxch(codegendata *cd)
void emit_faddl_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fstpl_mem(codegendata *cd, s4 mem)
void emit_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp)
void emit_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
void emit_jmp_imm(codegendata *cd, s4 imm)
#define M_DST(a, b, disp)
void emit_shld_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
void emit_shift_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_alu_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
void emit_fstpt_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fildl_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fincstp(codegendata *cd)
#define M_LLD(a, b, disp)
void emit_faddp(codegendata *cd)
void emit_inc_reg(codegendata *cd, s4 reg)
void emit_fdecstp(codegendata *cd)
void emit_fstpl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_fldt_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_mov_reg_mem(codegendata *cd, s4 reg, s4 mem)
static void emit_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_fistpl_membase(codegendata *cd, s4 basereg, s4 disp)
#define M_IADD_IMM(a, b, c)
#define M_ALD_MEM(a, disp)
#define emit_address_byte(mod, reg, rm)
void emit_fldl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2)
void emit_fldcw_mem(codegendata *cd, s4 mem)
#define M_DLD(a, b, disp)
void emit_fdiv_reg_st(codegendata *cd, s4 reg)
void emit_idiv_reg(codegendata *cd, s4 reg)
#define STAT_DECLARE_VAR(type, var, init)
Declare an external statistics variable.
void emit_verbosecall_exit(jitdata *jd)
void emit_trap_countdown(codegendata *cd, s4 *counter)
void emit_fnstsw(codegendata *cd)
void emit_fstps_membase32(codegendata *cd, s4 basereg, s4 disp)
static void emit_membase(codegendata *cd, s4 basereg, s4 disp, s4 dreg)
#define INSTRUCTION_MUST_CHECK(iptr)
void emit_fsubl_membase(codegendata *cd, s4 basereg, s4 disp)
void emit_fld_reg(codegendata *cd, s4 reg)
#define M_AST_IMM(a, b, disp)
#define BRANCH_CONDITIONAL_SIZE
void emit_nullpointer_check(codegendata *cd, instruction *iptr, s4 reg)
#define REG_RESULT_PACKED
void emit_movsbl_reg_reg(codegendata *cd, s4 a, s4 b)
#define M_IADD_IMM_MEMBASE(a, b, c)