< prev index next >

src/cpu/x86/vm/interp_masm_x86.cpp

Print this page




 494   shll(tmp, 2 + LogBytesPerWord);
 495   movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize));
 496   // skip past the header
 497   addptr(cache, in_bytes(ConstantPoolCache::base_offset()));
 498   addptr(cache, tmp);  // construct pointer to cache entry
 499 }
 500 
 501 // Load object from cpool->resolved_references(index)
 502 void InterpreterMacroAssembler::load_resolved_reference_at_index(
 503                                            Register result, Register index) {
 504   assert_different_registers(result, index);
 505   // convert from field index to resolved_references() index and from
 506   // word index to byte offset. Since this is a java object, it can be compressed
 507   Register tmp = index;  // reuse
 508   shll(tmp, LogBytesPerHeapOop);
 509 
 510   get_constant_pool(result);
 511   // load pointer for resolved_references[] objArray
 512   movptr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
 513   movptr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
 514   // JNIHandles::resolve(obj);
 515   movptr(result, Address(result, 0));
 516   // Add in the index
 517   addptr(result, tmp);
 518   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
 519 }
 520 
 521 // load cpool->resolved_klass_at(index)
 522 void InterpreterMacroAssembler::load_resolved_klass_at_index(Register cpool,
 523                                            Register index, Register klass) {
 524   movw(index, Address(cpool, index, Address::times_ptr, sizeof(ConstantPool)));
 525   Register resolved_klasses = cpool;
 526   movptr(resolved_klasses, Address(cpool, ConstantPool::resolved_klasses_offset_in_bytes()));
 527   movptr(klass, Address(resolved_klasses, index, Address::times_ptr, Array<Klass*>::base_offset_in_bytes()));
 528 }
 529 
 530 // Generate a subtype check: branch to ok_is_subtype if sub_klass is a
 531 // subtype of super_klass.
 532 //
 533 // Args:
 534 //      rax: superklass
 535 //      Rsub_klass: subklass




 494   shll(tmp, 2 + LogBytesPerWord);
 495   movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize));
 496   // skip past the header
 497   addptr(cache, in_bytes(ConstantPoolCache::base_offset()));
 498   addptr(cache, tmp);  // construct pointer to cache entry
 499 }
 500 
 501 // Load object from cpool->resolved_references(index)
 502 void InterpreterMacroAssembler::load_resolved_reference_at_index(
 503                                            Register result, Register index) {
 504   assert_different_registers(result, index);
 505   // convert from field index to resolved_references() index and from
 506   // word index to byte offset. Since this is a java object, it can be compressed
 507   Register tmp = index;  // reuse
 508   shll(tmp, LogBytesPerHeapOop);
 509 
 510   get_constant_pool(result);
 511   // load pointer for resolved_references[] objArray
 512   movptr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
 513   movptr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
 514   resolve_oop_handle(result);

 515   // Add in the index
 516   addptr(result, tmp);
 517   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
 518 }
 519 
 520 // load cpool->resolved_klass_at(index)
 521 void InterpreterMacroAssembler::load_resolved_klass_at_index(Register cpool,
 522                                            Register index, Register klass) {
 523   movw(index, Address(cpool, index, Address::times_ptr, sizeof(ConstantPool)));
 524   Register resolved_klasses = cpool;
 525   movptr(resolved_klasses, Address(cpool, ConstantPool::resolved_klasses_offset_in_bytes()));
 526   movptr(klass, Address(resolved_klasses, index, Address::times_ptr, Array<Klass*>::base_offset_in_bytes()));
 527 }
 528 
 529 // Generate a subtype check: branch to ok_is_subtype if sub_klass is a
 530 // subtype of super_klass.
 531 //
 532 // Args:
 533 //      rax: superklass
 534 //      Rsub_klass: subklass


< prev index next >