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, |