< prev index next >

src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp

Print this page

  95   __ z_br(klass);
  96 
  97   __ bind(L_skip_barrier);
  98 }
  99 
 100 void LIR_Assembler::osr_entry() {
 101   // On-stack-replacement entry sequence (interpreter frame layout described in frame_s390.hpp):
 102   //
 103   //   1. Create a new compiled activation.
 104   //   2. Initialize local variables in the compiled activation. The expression stack must be empty
 105   //      at the osr_bci; it is not initialized.
 106   //   3. Jump to the continuation address in compiled code to resume execution.
 107 
 108   // OSR entry point
 109   offsets()->set_value(CodeOffsets::OSR_Entry, code_offset());
 110   BlockBegin* osr_entry = compilation()->hir()->osr_entry();
 111   ValueStack* entry_state = osr_entry->end()->state();
 112   int number_of_locks = entry_state->locks_size();
 113 
 114   // Create a frame for the compiled activation.
 115   __ build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes());
 116 
 117   // OSR buffer is
 118   //
 119   // locals[nlocals-1..0]
 120   // monitors[number_of_locks-1..0]
 121   //
 122   // Locals is a direct copy of the interpreter frame so in the osr buffer
 123   // the first slot in the local array is the last local from the interpreter
 124   // and the last slot is local[0] (receiver) from the interpreter
 125   //
 126   // Similarly with locks. The first lock slot in the osr buffer is the nth lock
 127   // from the interpreter frame, the nth lock slot in the osr buffer is 0th lock
 128   // in the interpreter frame (the method lock if a sync method)
 129 
 130   // Initialize monitors in the compiled activation.
 131   //   I0: pointer to osr buffer
 132   //
 133   // All other registers are dead at this point and the locals will be
 134   // copied into place by code emitted in the IR.
 135 

  95   __ z_br(klass);
  96 
  97   __ bind(L_skip_barrier);
  98 }
  99 
 100 void LIR_Assembler::osr_entry() {
 101   // On-stack-replacement entry sequence (interpreter frame layout described in frame_s390.hpp):
 102   //
 103   //   1. Create a new compiled activation.
 104   //   2. Initialize local variables in the compiled activation. The expression stack must be empty
 105   //      at the osr_bci; it is not initialized.
 106   //   3. Jump to the continuation address in compiled code to resume execution.
 107 
 108   // OSR entry point
 109   offsets()->set_value(CodeOffsets::OSR_Entry, code_offset());
 110   BlockBegin* osr_entry = compilation()->hir()->osr_entry();
 111   ValueStack* entry_state = osr_entry->end()->state();
 112   int number_of_locks = entry_state->locks_size();
 113 
 114   // Create a frame for the compiled activation.
 115   __ build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes(), compilation()->max_monitors());
 116 
 117   // OSR buffer is
 118   //
 119   // locals[nlocals-1..0]
 120   // monitors[number_of_locks-1..0]
 121   //
 122   // Locals is a direct copy of the interpreter frame so in the osr buffer
 123   // the first slot in the local array is the last local from the interpreter
 124   // and the last slot is local[0] (receiver) from the interpreter
 125   //
 126   // Similarly with locks. The first lock slot in the osr buffer is the nth lock
 127   // from the interpreter frame, the nth lock slot in the osr buffer is 0th lock
 128   // in the interpreter frame (the method lock if a sync method)
 129 
 130   // Initialize monitors in the compiled activation.
 131   //   I0: pointer to osr buffer
 132   //
 133   // All other registers are dead at this point and the locals will be
 134   // copied into place by code emitted in the IR.
 135 
< prev index next >