hotspot/src/cpu/x86/vm/interp_masm_x86.cpp
changeset 31046 d01ad7a0ecb0
parent 31041 7d59fa6a48f1
child 32391 01e2f5e916c7
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp	Fri May 29 12:49:31 2015 +0200
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp	Fri May 29 17:04:21 2015 +0300
@@ -482,14 +482,6 @@
   andl(bytecode, ConstantPoolCacheEntry::bytecode_1_mask);
 }
 
-void InterpreterMacroAssembler::get_resolved_references(Register reg) {
-  get_constant_pool(reg);
-  movptr(reg, Address(reg, ConstantPool::pool_holder_offset_in_bytes()));
-  movptr(reg, Address(reg, Klass::java_mirror_offset()));
-  assert(java_lang_Class::resolved_references_offset_in_bytes() > 0, "");
-  load_heap_oop(reg, Address(reg, java_lang_Class::resolved_references_offset_in_bytes()));
-}
-
 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache,
                                                                Register tmp,
                                                                int bcp_offset,
@@ -507,16 +499,20 @@
   addptr(cache, tmp);  // construct pointer to cache entry
 }
 
-// Load object from cpool->pool_holder->mirror->resolved_references(index)
-void InterpreterMacroAssembler::load_resolved_reference_at_index(Register result, Register index) {
+// Load object from cpool->resolved_references(index)
+void InterpreterMacroAssembler::load_resolved_reference_at_index(
+                                           Register result, Register index) {
   assert_different_registers(result, index);
   // convert from field index to resolved_references() index and from
   // word index to byte offset. Since this is a java object, it can be compressed
   Register tmp = index;  // reuse
   shll(tmp, LogBytesPerHeapOop);
 
+  get_constant_pool(result);
   // load pointer for resolved_references[] objArray
-  get_resolved_references(result);
+  movptr(result, Address(result, ConstantPool::resolved_references_offset_in_bytes()));
+  // JNIHandles::resolve(obj);
+  movptr(result, Address(result, 0));
   // Add in the index
   addptr(result, tmp);
   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));