61 #define REG_PV REG_PV_CALLEE
224 if ((value >= -4096) && (value <= 4095)) {
243 if ((value >= -4096) && (value <= 4095)) {
258 if ((value >= -4096) && (value <= 4095)) {
280 branchdisp = disp >> 2;
287 if ((branchdisp < (
s4) 0xfffc0000) || (branchdisp > (
s4) 0x003ffff)) {
295 vm_abort(
"emit_branch: emit unconditional long-branch code");
302 else if (reg == -1) {
307 if ((branchdisp < (
s4) 0xfffc0000) || (branchdisp > (
s4) 0x003ffff)) {
316 vm_abort(
"emit_branch: emit long-branch on cc code");
347 vm_abort(
"emit_branch: unknown condition %d", condition);
381 vm_abort(
"emit_branch: unknown condition %d", condition);
395 if ((branchdisp < (
s4) 0xffff8000) || (branchdisp > (
s4) 0x0007fff)) {
404 vm_abort(
"emit_branch: emit long-branch on reg code");
427 vm_abort(
"emit_branch: unknown condition %d", condition);
553 vm_abort(
"emit_classcast_check: unknown condition %d", condition);
608 mcode = *((uint32_t *) cd->
mcodeptr);
640 # if !defined(NDEBUG)
652 syncslot_offset += slots * 8;
676 # if !defined(NDEBUG)
759 for (pref = cd->patchrefs; pref != NULL; pref = pref->next) {
767 tmpmcodeptr = (
u1 *) (cd->
mcodebase + pref->branchpos);
772 mcode[0] = ((
u4 *) tmpmcodeptr)[0];
773 mcode[1] = ((
u4 *) tmpmcodeptr)[1];
781 disp = ((
u4 *) savedmcodeptr) - (((
u4 *) tmpmcodeptr) );
783 if ((disp < (
s4) 0xfffc0000) || (disp > (
s4) 0x003ffff)) {
784 vm_abort(
"Jump offset is out of range: %d > +/-%d",
842 if (targetdisp == 0) {
929 if (i < FLT_ARG_CNT) {
const s4 abi_registers_float_argument[]
#define CODEGENDATA_FLAG_ERROR
#define REG_RESULT_CALLEE
dummy_java_lang_Class object
#define M_ALD(a, b, disp)
#define REG_WINDOW_TRANSPOSE(reg)
void emit_monitor_exit(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to leave a monitor.
void emit_ble_xcc(codegendata *cd, basicblock *target)
#define JITDATA_HAS_FLAG_VERBOSECALL(jd)
void emit_bne_xcc(codegendata *cd, basicblock *target)
#define M_ILD(a, b, disp)
s4 dseg_add_unique_address(codegendata *cd, void *value)
#define IS_INT_LNG_TYPE(a)
#define M_IST(a, b, disp)
#define M_LDA(a, b, disp)
#define ALIGN_STACK_SLOTS(slots)
void emit_monitor_enter(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to enter a monitor.
const s4 abi_registers_integer_argument[]
void emit_bgt_xcc(codegendata *cd, basicblock *target)
s4 dseg_add_address(codegendata *cd, void *value)
s4 codegen_reg_of_var(u2 opcode, varinfo *v, s4 tempregnum)
void emit_bcc(codegendata *cd, basicblock *target, s4 condition, u4 options)
#define BRANCH_UNCONDITIONAL
#define dseg_add_functionptr(cd, value)
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
#define M_STX(rd, rs, disp)
void emit_patcher_stubs(jitdata *jd)
void emit_arraystore_check(codegendata *cd, instruction *iptr)
#define M_FST(a, b, disp)
void asm_patcher_wrapper(void)
#define M_LDX(rd, rs, disp)
#define CODEGENDATA_HAS_FLAG_LONGBRANCHES(cd)
void log_println(const char *text,...)
#define CODEGENDATA_FLAG_LONGBRANCHES
JNIEnv jthread jobject jclass jlong size
void emit_bge_xcc(codegendata *cd, basicblock *target)
void emit_recompute_pv(codegendata *cd)
Emit code to recompute the procedure vector.
void emit_blt_xcc(codegendata *cd, basicblock *target)
s4 dseg_add_s4(codegendata *cd, s4 value)
void vm_abort(const char *text,...)
void emit_verbosecall_enter(jitdata *jd)
#define IS_2_WORD_TYPE(a)
void emit_exception_check(codegendata *cd, instruction *iptr)
void emit_lconst(codegendata *cd, s4 d, s8 value)
#define M_XOR_IMM(a, b, c)
#define LOCK_monitor_enter
void emit_beq_xcc(codegendata *cd, basicblock *target)
#define M_ALD_INTERN(a, b, disp)
#define M_ASUB_IMM(a, b, c)
void emit_trap(codegendata *cd, u1 Xd, int type)
#define REG_RESULT_CALLER
s4 emit_load(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_store(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
#define M_AST(a, b, disp)
#define COUNT_READ_SPILLS(x)
#define BRANCH_CHECKS_XCC(options)
void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg)
#define LOCK_monitor_exit
#define COUNT_WRITE_SPILLS(x)
void emit_icmp_imm(codegendata *cd, int reg, int32_t value)
Emits code comparing a single register.
void emit_copy(jitdata *jd, instruction *iptr)
static bool IS_INMEMORY(s4 flags)
void builtin_verbosecall_exit(s8 l, double d, float f, methodinfo *m)
void emit_classcast_check(codegendata *cd, instruction *iptr, s4 condition, s4 reg, s4 s1)
void emit_branch(codegendata *cd, s4 disp, s4 condition, s4 reg, u4 opt)
s4 dseg_add_s8(codegendata *cd, s8 value)
#define M_DST(a, b, disp)
void emit_iconst(codegendata *cd, s4 d, s4 value)
void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2)
#define M_DLD(a, b, disp)
void emit_verbosecall_exit(jitdata *jd)
#define INSTRUCTION_MUST_CHECK(iptr)
void emit_nullpointer_check(codegendata *cd, instruction *iptr, s4 reg)