src/hotspot/cpu/x86/interp_masm_x86.cpp
changeset 49816 a3e79f97e86b
parent 49748 6a880e576856
child 50106 24151f48582b
equal deleted inserted replaced
49815:76e3bcb9bee1 49816:a3e79f97e86b
   500   addptr(cache, tmp);  // construct pointer to cache entry
   500   addptr(cache, tmp);  // construct pointer to cache entry
   501 }
   501 }
   502 
   502 
   503 // Load object from cpool->resolved_references(index)
   503 // Load object from cpool->resolved_references(index)
   504 void InterpreterMacroAssembler::load_resolved_reference_at_index(
   504 void InterpreterMacroAssembler::load_resolved_reference_at_index(
   505                                            Register result, Register index) {
   505                                            Register result, Register index, Register tmp) {
   506   assert_different_registers(result, index);
   506   assert_different_registers(result, index);
   507   // convert from field index to resolved_references() index and from
   507   // convert from field index to resolved_references() index and from
   508   // word index to byte offset. Since this is a java object, it can be compressed
   508   // word index to byte offset. Since this is a java object, it can be compressed
   509   Register tmp = index;  // reuse
   509   shll(index, LogBytesPerHeapOop);
   510   shll(tmp, LogBytesPerHeapOop);
       
   511 
   510 
   512   get_constant_pool(result);
   511   get_constant_pool(result);
   513   // load pointer for resolved_references[] objArray
   512   // load pointer for resolved_references[] objArray
   514   movptr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
   513   movptr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
   515   movptr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
   514   movptr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
   516   resolve_oop_handle(result);
   515   resolve_oop_handle(result, tmp);
   517   // Add in the index
   516   // Add in the index
   518   addptr(result, tmp);
   517   addptr(result, index);
   519   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), tmp);
   518   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)), tmp);
   520 }
   519 }
   521 
   520 
   522 // load cpool->resolved_klass_at(index)
   521 // load cpool->resolved_klass_at(index)
   523 void InterpreterMacroAssembler::load_resolved_klass_at_index(Register cpool,
   522 void InterpreterMacroAssembler::load_resolved_klass_at_index(Register cpool,