246 if (value >= 0 && value <= 4095) {
248 }
else if ((-value) >= 0 && (-value) <= 4095) {
272 branchdisp = disp >> 2;
279 if ((checkdisp < (
s4) 0xffe00000) || (checkdisp > (
s4) 0x001fffff)) {
288 vm_abort(
"emit_branch: emit unconditional long-branch code");
297 if ((checkdisp < (
s4) 0xffe00000) || (checkdisp > (
s4) 0x001fffff)) {
306 vm_abort(
"emit_branch: emit conditional long-branch code");
311 asme.
b_eq(branchdisp);
314 asme.
b_ne(branchdisp);
317 asme.
b_lt(branchdisp);
320 asme.
b_ge(branchdisp);
323 asme.
b_gt(branchdisp);
326 asme.
b_le(branchdisp);
329 asme.
b_hi(branchdisp);
332 vm_abort(
"emit_branch: unknown condition %d", condition);
417 vm_abort(
"emit_classcast_check: unknown condition %d", condition);
484 uint32_t mcode = *((uint32_t*) cd->
mcodeptr);
527 syncslot_offset += (INT_ARG_CNT +
FLT_ARG_CNT) * 8;
632 int32_t stackframesize;
651 stackframesize += stackframesize % 2;
void ald(u1 xt, u1 xn, s2 imm)
const s4 abi_registers_float_argument[]
#define CODEGENDATA_FLAG_ERROR
dummy_java_lang_Class object
void emit_monitor_exit(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to leave a monitor.
#define JITDATA_HAS_FLAG_VERBOSECALL(jd)
void emit_monitor_enter(jitdata *jd, int32_t syncslot_offset)
Generates synchronization code to enter a monitor.
const s4 abi_registers_integer_argument[]
s4 dseg_add_address(codegendata *cd, void *value)
void dst(u1 xt, u1 xn, s2 imm)
s4 codegen_reg_of_var(u2 opcode, varinfo *v, s4 tempregnum)
#define BRANCH_UNCONDITIONAL
void lconst(u1 xt, s8 value)
#define dseg_add_functionptr(cd, value)
void icmp_imm(u1 wd, u2 imm)
void emit_arraystore_check(codegendata *cd, instruction *iptr)
void trace_java_call_exit(methodinfo *m, uint64_t *return_regs)
void fst(u1 xt, u1 xn, s2 imm)
#define CODEGENDATA_HAS_FLAG_LONGBRANCHES(cd)
void log_println(const char *text,...)
#define CODEGENDATA_FLAG_LONGBRANCHES
JNIEnv jthread jobject jclass jlong size
void emit_recompute_pv(codegendata *cd)
Emit code to recompute the procedure vector.
void emit_abstractmethoderror_trap(codegendata *cd)
void ist(u1 xt, u1 xn, s2 imm)
static int code_is_leafmethod(codeinfo *code)
void vm_abort(const char *text,...)
void emit_verbosecall_enter(jitdata *jd)
void ild(u1 xt, u1 xn, s2 imm)
void emit_exception_check(codegendata *cd, instruction *iptr)
void ast(u1 xt, u1 xn, s2 imm)
void trace_java_call_enter(methodinfo *m, uint64_t *arg_regs, uint64_t *stack)
void ladd_imm(u1 xd, u1 xn, u4 imm)
void emit_lconst(codegendata *cd, s4 d, s8 value)
#define LOCK_monitor_enter
void emit_trap_compiler(codegendata *cd)
void lst(u1 xt, u1 xn, s2 imm)
void lsub_imm(u1 xd, u1 xn, u4 imm)
void emit_trap(codegendata *cd, u1 Xd, int type)
s4 emit_load(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
void emit_store(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
void dld(u1 xt, u1 xn, s2 imm)
void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg)
#define LOCK_monitor_exit
void emit_icmp_imm(codegendata *cd, int reg, int32_t value)
Emits code comparing a single register.
void emit_copy(jitdata *jd, instruction *iptr)
void lld(u1 xt, u1 xn, s2 imm)
void lda(u1 xd, u1 xn, s4 imm)
void icmn_imm(u1 wd, u2 imm)
static bool IS_INMEMORY(s4 flags)
void iconst(u1 xt, s4 value)
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)
void emit_iconst(codegendata *cd, s4 d, s4 value)
void fld(u1 xt, u1 xn, s2 imm)
void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2)
void emit_verbosecall_exit(jitdata *jd)
#define INSTRUCTION_MUST_CHECK(iptr)
void emit_nullpointer_check(codegendata *cd, instruction *iptr, s4 reg)