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