60 LIR_Opr LIR_Assembler::osrBufferPointer() { 61 return FrameMap::R3_opr; 62 } 63 64 65 // This specifies the stack pointer decrement needed to build the frame. 66 int LIR_Assembler::initial_frame_size_in_bytes() const { 67 return in_bytes(frame_map()->framesize_in_bytes()); 68 } 69 70 71 // Inline cache check: the inline cached class is in inline_cache_reg; 72 // we fetch the class of the receiver and compare it with the cached class. 73 // If they do not match we jump to slow case. 74 int LIR_Assembler::check_icache() { 75 int offset = __ offset(); 76 __ inline_cache_check(R3_ARG1, R19_inline_cache_reg); 77 return offset; 78 } 79 80 81 void LIR_Assembler::osr_entry() { 82 // On-stack-replacement entry sequence: 83 // 84 // 1. Create a new compiled activation. 85 // 2. Initialize local variables in the compiled activation. The expression 86 // stack must be empty at the osr_bci; it is not initialized. 87 // 3. Jump to the continuation address in compiled code to resume execution. 88 89 // OSR entry point 90 offsets()->set_value(CodeOffsets::OSR_Entry, code_offset()); 91 BlockBegin* osr_entry = compilation()->hir()->osr_entry(); 92 ValueStack* entry_state = osr_entry->end()->state(); 93 int number_of_locks = entry_state->locks_size(); 94 95 // Create a frame for the compiled activation. 96 __ build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes()); 97 98 // OSR buffer is 99 // | 60 LIR_Opr LIR_Assembler::osrBufferPointer() { 61 return FrameMap::R3_opr; 62 } 63 64 65 // This specifies the stack pointer decrement needed to build the frame. 66 int LIR_Assembler::initial_frame_size_in_bytes() const { 67 return in_bytes(frame_map()->framesize_in_bytes()); 68 } 69 70 71 // Inline cache check: the inline cached class is in inline_cache_reg; 72 // we fetch the class of the receiver and compare it with the cached class. 73 // If they do not match we jump to slow case. 74 int LIR_Assembler::check_icache() { 75 int offset = __ offset(); 76 __ inline_cache_check(R3_ARG1, R19_inline_cache_reg); 77 return offset; 78 } 79 80 void LIR_Assembler::clinit_barrier(ciMethod* method) { 81 ShouldNotReachHere(); // not implemented 82 } 83 84 void LIR_Assembler::osr_entry() { 85 // On-stack-replacement entry sequence: 86 // 87 // 1. Create a new compiled activation. 88 // 2. Initialize local variables in the compiled activation. The expression 89 // stack must be empty at the osr_bci; it is not initialized. 90 // 3. Jump to the continuation address in compiled code to resume execution. 91 92 // OSR entry point 93 offsets()->set_value(CodeOffsets::OSR_Entry, code_offset()); 94 BlockBegin* osr_entry = compilation()->hir()->osr_entry(); 95 ValueStack* entry_state = osr_entry->end()->state(); 96 int number_of_locks = entry_state->locks_size(); 97 98 // Create a frame for the compiled activation. 99 __ build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes()); 100 101 // OSR buffer is 102 // |