1088 // change thread state |
1088 // change thread state |
1089 NOT_LP64(__ get_thread(thread)); |
1089 NOT_LP64(__ get_thread(thread)); |
1090 __ movl(Address(thread, JavaThread::thread_state_offset()), |
1090 __ movl(Address(thread, JavaThread::thread_state_offset()), |
1091 _thread_in_native_trans); |
1091 _thread_in_native_trans); |
1092 |
1092 |
1093 if (UseMembar) { |
1093 // Force this write out before the read below |
1094 // Force this write out before the read below |
1094 __ membar(Assembler::Membar_mask_bits( |
1095 __ membar(Assembler::Membar_mask_bits( |
1095 Assembler::LoadLoad | Assembler::LoadStore | |
1096 Assembler::LoadLoad | Assembler::LoadStore | |
1096 Assembler::StoreLoad | Assembler::StoreStore)); |
1097 Assembler::StoreLoad | Assembler::StoreStore)); |
|
1098 } else { |
|
1099 // Write serialization page so VM thread can do a pseudo remote membar. |
|
1100 // We use the current thread pointer to calculate a thread specific |
|
1101 // offset to write to within the page. This minimizes bus traffic |
|
1102 // due to cache line collision. |
|
1103 __ serialize_memory(thread, rcx); |
|
1104 } |
|
1105 |
1097 |
1106 #ifndef _LP64 |
1098 #ifndef _LP64 |
1107 if (AlwaysRestoreFPU) { |
1099 if (AlwaysRestoreFPU) { |
1108 // Make sure the control word is correct. |
1100 // Make sure the control word is correct. |
1109 __ fldcw(ExternalAddress(StubRoutines::addr_fpu_cntrl_wrd_std())); |
1101 __ fldcw(ExternalAddress(StubRoutines::addr_fpu_cntrl_wrd_std())); |