hotspot/src/share/vm/opto/generateOptoStub.cpp
changeset 15475 73896d91270c
parent 13963 e5b53c306fb5
child 19708 64e8c91f5f3e
child 22819 f88b9c394e42
equal deleted inserted replaced
15474:62425bb6b9e3 15475:73896d91270c
    86 
    86 
    87   Node* adr_last_Java_pc = basic_plus_adr(top(),
    87   Node* adr_last_Java_pc = basic_plus_adr(top(),
    88                                             thread,
    88                                             thread,
    89                                             in_bytes(JavaThread::frame_anchor_offset()) +
    89                                             in_bytes(JavaThread::frame_anchor_offset()) +
    90                                             in_bytes(JavaFrameAnchor::last_Java_pc_offset()));
    90                                             in_bytes(JavaFrameAnchor::last_Java_pc_offset()));
    91 #if defined(SPARC) || defined(IA64)
    91 #if defined(SPARC)
    92   Node* adr_flags = basic_plus_adr(top(),
    92   Node* adr_flags = basic_plus_adr(top(),
    93                                    thread,
    93                                    thread,
    94                                    in_bytes(JavaThread::frame_anchor_offset()) +
    94                                    in_bytes(JavaThread::frame_anchor_offset()) +
    95                                    in_bytes(JavaFrameAnchor::flags_offset()));
    95                                    in_bytes(JavaFrameAnchor::flags_offset()));
    96 #endif /* defined(SPARC) || defined(IA64) */
    96 #endif /* defined(SPARC) */
    97 
    97 
    98 
    98 
    99   // Drop in the last_Java_sp.  last_Java_fp is not touched.
    99   // Drop in the last_Java_sp.  last_Java_fp is not touched.
   100   // Always do this after the other "last_Java_frame" fields are set since
   100   // Always do this after the other "last_Java_frame" fields are set since
   101   // as soon as last_Java_sp != NULL the has_last_Java_frame is true and
   101   // as soon as last_Java_sp != NULL the has_last_Java_frame is true and
   102   // users will look at the other fields.
   102   // users will look at the other fields.
   103   //
   103   //
   104   Node *adr_sp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_sp_offset()));
   104   Node *adr_sp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_sp_offset()));
   105 #ifndef IA64
       
   106   Node *last_sp = basic_plus_adr(top(), frameptr(), (intptr_t) STACK_BIAS);
   105   Node *last_sp = basic_plus_adr(top(), frameptr(), (intptr_t) STACK_BIAS);
   107   store_to_memory(NULL, adr_sp, last_sp, T_ADDRESS, NoAlias);
   106   store_to_memory(NULL, adr_sp, last_sp, T_ADDRESS, NoAlias);
   108 #endif
       
   109 
   107 
   110   // Set _thread_in_native
   108   // Set _thread_in_native
   111   // The order of stores into TLS is critical!  Setting _thread_in_native MUST
   109   // The order of stores into TLS is critical!  Setting _thread_in_native MUST
   112   // be last, because a GC is allowed at any time after setting it and the GC
   110   // be last, because a GC is allowed at any time after setting it and the GC
   113   // will require last_Java_pc and last_Java_sp.
   111   // will require last_Java_pc and last_Java_sp.
   208   }
   206   }
   209 
   207 
   210   //-----------------------------
   208   //-----------------------------
   211 
   209 
   212   // Clear last_Java_sp
   210   // Clear last_Java_sp
   213 #ifdef IA64
       
   214   if( os::is_MP() ) insert_mem_bar(Op_MemBarRelease);
       
   215 #endif
       
   216 
       
   217   store_to_memory(NULL, adr_sp, null(), T_ADDRESS, NoAlias);
   211   store_to_memory(NULL, adr_sp, null(), T_ADDRESS, NoAlias);
   218 #ifdef IA64
       
   219   if (os::is_MP() && UseMembar) insert_mem_bar(new MemBarVolatileNode());
       
   220 #endif // def IA64
       
   221   // Clear last_Java_pc and (optionally)_flags
   212   // Clear last_Java_pc and (optionally)_flags
   222   store_to_memory(NULL, adr_last_Java_pc, null(), T_ADDRESS, NoAlias);
   213   store_to_memory(NULL, adr_last_Java_pc, null(), T_ADDRESS, NoAlias);
   223 #if defined(SPARC) || defined(IA64)
   214 #if defined(SPARC)
   224   store_to_memory(NULL, adr_flags, intcon(0), T_INT, NoAlias);
   215   store_to_memory(NULL, adr_flags, intcon(0), T_INT, NoAlias);
   225 #endif /* defined(SPARC) || defined(IA64) */
   216 #endif /* defined(SPARC) */
   226 #ifdef IA64
   217 #ifdef IA64
   227   Node* adr_last_Java_fp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_fp_offset()));
   218   Node* adr_last_Java_fp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_fp_offset()));
   228   if( os::is_MP() ) insert_mem_bar(Op_MemBarRelease);
   219   if( os::is_MP() ) insert_mem_bar(Op_MemBarRelease);
   229   store_to_memory(NULL, adr_last_Java_fp,    null(),    T_ADDRESS, NoAlias);
   220   store_to_memory(NULL, adr_last_Java_fp,    null(),    T_ADDRESS, NoAlias);
   230 #endif
   221 #endif