2031
2032 // this function returns the adjust size (in number of words) to a c2i adapter
2033 // activation for use during deoptimization
2034 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals ) {
2035 return (callee_locals - callee_parameters) * Interpreter::stackElementWords;
2036 }
2037
2038
2039 // Number of stack slots between incoming argument block and the start of
2040 // a new frame. The PROLOG must add this many slots to the stack. The
2041 // EPILOG must remove this many slots. Intel needs one slot for
2042 // return address and one for rbp, (must save rbp)
2043 uint SharedRuntime::in_preserve_stack_slots() {
2044 return 2+VerifyStackAtCalls;
2045 }
2046
2047 uint SharedRuntime::out_preserve_stack_slots() {
2048 return 0;
2049 }
2050
2051 //------------------------------generate_deopt_blob----------------------------
2052 void SharedRuntime::generate_deopt_blob() {
2053 // allocate space for the code
2054 ResourceMark rm;
2055 // setup code generation tools
2056 // note: the buffer code size must account for StackShadowPages=50
2057 CodeBuffer buffer("deopt_blob", 1536, 1024);
2058 MacroAssembler* masm = new MacroAssembler(&buffer);
2059 int frame_size_in_words;
2060 OopMap* map = nullptr;
2061 // Account for the extra args we place on the stack
2062 // by the time we call fetch_unroll_info
2063 const int additional_words = 2; // deopt kind, thread
2064
2065 OopMapSet *oop_maps = new OopMapSet();
2066
2067 // -------------
2068 // This code enters when returning to a de-optimized nmethod. A return
2069 // address has been pushed on the stack, and return values are in
2070 // registers.
|
2031
2032 // this function returns the adjust size (in number of words) to a c2i adapter
2033 // activation for use during deoptimization
2034 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals ) {
2035 return (callee_locals - callee_parameters) * Interpreter::stackElementWords;
2036 }
2037
2038
2039 // Number of stack slots between incoming argument block and the start of
2040 // a new frame. The PROLOG must add this many slots to the stack. The
2041 // EPILOG must remove this many slots. Intel needs one slot for
2042 // return address and one for rbp, (must save rbp)
2043 uint SharedRuntime::in_preserve_stack_slots() {
2044 return 2+VerifyStackAtCalls;
2045 }
2046
2047 uint SharedRuntime::out_preserve_stack_slots() {
2048 return 0;
2049 }
2050
2051 VMReg SharedRuntime::thread_register() {
2052 Unimplemented();
2053 return nullptr;
2054 }
2055
2056 //------------------------------generate_deopt_blob----------------------------
2057 void SharedRuntime::generate_deopt_blob() {
2058 // allocate space for the code
2059 ResourceMark rm;
2060 // setup code generation tools
2061 // note: the buffer code size must account for StackShadowPages=50
2062 CodeBuffer buffer("deopt_blob", 1536, 1024);
2063 MacroAssembler* masm = new MacroAssembler(&buffer);
2064 int frame_size_in_words;
2065 OopMap* map = nullptr;
2066 // Account for the extra args we place on the stack
2067 // by the time we call fetch_unroll_info
2068 const int additional_words = 2; // deopt kind, thread
2069
2070 OopMapSet *oop_maps = new OopMapSet();
2071
2072 // -------------
2073 // This code enters when returning to a de-optimized nmethod. A return
2074 // address has been pushed on the stack, and return values are in
2075 // registers.
|