< prev index next > src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
Print this page
return start;
}
+ // Call stub to call runtime oopDesc::load_nklass_runtime().
+ // rax: call argument (object)
+ // rax: return object's narrowKlass
+ // Preserves all caller-saved registers, except rax
+ #ifdef _LP64
+ address generate_load_nklass() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark(this, "StubRoutines", "load_nklass");
+ address start = __ pc();
+ __ enter(); // save rbp
+
+ __ andptr(rsp, -(StackAlignmentInBytes)); // Align stack
+ __ push_FPU_state();
+
+ __ push(rdi);
+ __ push(rsi);
+ __ push(rdx);
+ __ push(rcx);
+ __ push(r8);
+ __ push(r9);
+ __ push(r10);
+ __ push(r11);
+ __ call_VM_leaf(CAST_FROM_FN_PTR(address, oopDesc::load_nklass_runtime), rax);
+ __ pop(r11);
+ __ pop(r10);
+ __ pop(r9);
+ __ pop(r8);
+ __ pop(rcx);
+ __ pop(rdx);
+ __ pop(rsi);
+ __ pop(rdi);
+
+ __ pop_FPU_state();
+
+ __ leave();
+ __ ret(0);
+ return start;
+ }
+ #endif // _LP64
+
#undef __
#define __ masm->
// Continuation point for throwing of implicit exceptions that are
// not handled in the current activation. Fabricates an exception
}
if (vmIntrinsics::is_intrinsic_available(vmIntrinsics::_dtan)) {
StubRoutines::_dtan = generate_libmTan();
}
}
+
+ #ifdef _LP64
+ StubRoutines::_load_nklass = generate_load_nklass();
+ #endif
}
void generate_all() {
// Generates all stubs and initializes the entry points
< prev index next >