< prev index next >

src/cpu/ppc/vm/interp_masm_ppc_64.cpp

Print this page




 447   if (is_signed == Signed) {
 448     lwa(Rdst, offset, Rsrc);
 449   } else {
 450     lwz(Rdst, offset, Rsrc);
 451   }
 452 #endif
 453 }
 454 
 455 // Load object from cpool->resolved_references(index).
 456 void InterpreterMacroAssembler::load_resolved_reference_at_index(Register result, Register index, Label *is_null) {
 457   assert_different_registers(result, index);
 458   get_constant_pool(result);
 459 
 460   // Convert from field index to resolved_references() index and from
 461   // word index to byte offset. Since this is a java object, it can be compressed.
 462   Register tmp = index;  // reuse
 463   sldi(tmp, index, LogBytesPerHeapOop);
 464   // Load pointer for resolved_references[] objArray.
 465   ld(result, ConstantPool::cache_offset_in_bytes(), result);
 466   ld(result, ConstantPoolCache::resolved_references_offset_in_bytes(), result);
 467   // JNIHandles::resolve(result)
 468   ld(result, 0, result);
 469 #ifdef ASSERT
 470   Label index_ok;
 471   lwa(R0, arrayOopDesc::length_offset_in_bytes(), result);
 472   sldi(R0, R0, LogBytesPerHeapOop);
 473   cmpd(CCR0, tmp, R0);
 474   blt(CCR0, index_ok);
 475   stop("resolved reference index out of bounds", 0x09256);
 476   bind(index_ok);
 477 #endif
 478   // Add in the index.
 479   add(result, tmp, result);
 480   load_heap_oop(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT), result, is_null);
 481 }
 482 
 483 // load cpool->resolved_klass_at(index)
 484 void InterpreterMacroAssembler::load_resolved_klass_at_offset(Register Rcpool, Register Roffset, Register Rklass) {
 485   // int value = *(Rcpool->int_at_addr(which));
 486   // int resolved_klass_index = extract_low_short_from_int(value);
 487   add(Roffset, Rcpool, Roffset);
 488 #if defined(VM_LITTLE_ENDIAN)




 447   if (is_signed == Signed) {
 448     lwa(Rdst, offset, Rsrc);
 449   } else {
 450     lwz(Rdst, offset, Rsrc);
 451   }
 452 #endif
 453 }
 454 
 455 // Load object from cpool->resolved_references(index).
 456 void InterpreterMacroAssembler::load_resolved_reference_at_index(Register result, Register index, Label *is_null) {
 457   assert_different_registers(result, index);
 458   get_constant_pool(result);
 459 
 460   // Convert from field index to resolved_references() index and from
 461   // word index to byte offset. Since this is a java object, it can be compressed.
 462   Register tmp = index;  // reuse
 463   sldi(tmp, index, LogBytesPerHeapOop);
 464   // Load pointer for resolved_references[] objArray.
 465   ld(result, ConstantPool::cache_offset_in_bytes(), result);
 466   ld(result, ConstantPoolCache::resolved_references_offset_in_bytes(), result);
 467   resolve_oop_handle(result);

 468 #ifdef ASSERT
 469   Label index_ok;
 470   lwa(R0, arrayOopDesc::length_offset_in_bytes(), result);
 471   sldi(R0, R0, LogBytesPerHeapOop);
 472   cmpd(CCR0, tmp, R0);
 473   blt(CCR0, index_ok);
 474   stop("resolved reference index out of bounds", 0x09256);
 475   bind(index_ok);
 476 #endif
 477   // Add in the index.
 478   add(result, tmp, result);
 479   load_heap_oop(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT), result, is_null);
 480 }
 481 
 482 // load cpool->resolved_klass_at(index)
 483 void InterpreterMacroAssembler::load_resolved_klass_at_offset(Register Rcpool, Register Roffset, Register Rklass) {
 484   // int value = *(Rcpool->int_at_addr(which));
 485   // int resolved_klass_index = extract_low_short_from_int(value);
 486   add(Roffset, Rcpool, Roffset);
 487 #if defined(VM_LITTLE_ENDIAN)


< prev index next >