< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page




6259   vzeroupper();
6260   // Reset k1 to 0xffff.
6261   if (VM_Version::supports_evex()) {
6262     push(rcx);
6263     movl(rcx, 0xffff);
6264     kmovwl(k1, rcx);
6265     pop(rcx);
6266   }
6267 
6268 #ifndef _LP64
6269   // Either restore the x87 floating pointer control word after returning
6270   // from the JNI call or verify that it wasn't changed.
6271   if (CheckJNICalls) {
6272     call(RuntimeAddress(StubRoutines::x86::verify_fpu_cntrl_wrd_entry()));
6273   }
6274 #endif // _LP64
6275 }
6276 
6277 // ((OopHandle)result).resolve();
6278 void MacroAssembler::resolve_oop_handle(Register result, Register tmp) {


6279   // Only 64 bit platforms support GCs that require a tmp register
6280   // Only IN_HEAP loads require a thread_tmp register
6281   // OopHandle::resolve is an indirection like jobject.
6282   access_load_at(T_OBJECT, IN_ROOT | IN_CONCURRENT_ROOT,
6283                  result, Address(result, 0), tmp, /*tmp_thread*/noreg);
6284 }
6285 
6286 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) {
6287   // get mirror
6288   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
6289   movptr(mirror, Address(method, Method::const_offset()));
6290   movptr(mirror, Address(mirror, ConstMethod::constants_offset()));
6291   movptr(mirror, Address(mirror, ConstantPool::pool_holder_offset_in_bytes()));
6292   movptr(mirror, Address(mirror, mirror_offset));
6293   resolve_oop_handle(mirror, tmp);
6294 }
6295 
6296 void MacroAssembler::load_klass(Register dst, Register src) {
6297 #ifdef _LP64
6298   if (UseCompressedClassPointers) {




6259   vzeroupper();
6260   // Reset k1 to 0xffff.
6261   if (VM_Version::supports_evex()) {
6262     push(rcx);
6263     movl(rcx, 0xffff);
6264     kmovwl(k1, rcx);
6265     pop(rcx);
6266   }
6267 
6268 #ifndef _LP64
6269   // Either restore the x87 floating pointer control word after returning
6270   // from the JNI call or verify that it wasn't changed.
6271   if (CheckJNICalls) {
6272     call(RuntimeAddress(StubRoutines::x86::verify_fpu_cntrl_wrd_entry()));
6273   }
6274 #endif // _LP64
6275 }
6276 
6277 // ((OopHandle)result).resolve();
6278 void MacroAssembler::resolve_oop_handle(Register result, Register tmp) {
6279   assert_different_registers(result, tmp);
6280 
6281   // Only 64 bit platforms support GCs that require a tmp register
6282   // Only IN_HEAP loads require a thread_tmp register
6283   // OopHandle::resolve is an indirection like jobject.
6284   access_load_at(T_OBJECT, IN_ROOT | IN_CONCURRENT_ROOT,
6285                  result, Address(result, 0), tmp, /*tmp_thread*/noreg);
6286 }
6287 
6288 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) {
6289   // get mirror
6290   const int mirror_offset = in_bytes(Klass::java_mirror_offset());
6291   movptr(mirror, Address(method, Method::const_offset()));
6292   movptr(mirror, Address(mirror, ConstMethod::constants_offset()));
6293   movptr(mirror, Address(mirror, ConstantPool::pool_holder_offset_in_bytes()));
6294   movptr(mirror, Address(mirror, mirror_offset));
6295   resolve_oop_handle(mirror, tmp);
6296 }
6297 
6298 void MacroAssembler::load_klass(Register dst, Register src) {
6299 #ifdef _LP64
6300   if (UseCompressedClassPointers) {


< prev index next >