< prev index next >

src/cpu/aarch64/vm/interp_masm_aarch64.cpp

Print this page




 255   call_VM(noreg, CAST_FROM_FN_PTR(address,
 256           InterpreterRuntime::build_method_counters), method);
 257   ldr(mcs, Address(method, Method::method_counters_offset()));
 258   cbz(mcs, skip); // No MethodCounters allocated, OutOfMemory
 259   bind(has_counters);
 260 }
 261 
 262 // Load object from cpool->resolved_references(index)
 263 void InterpreterMacroAssembler::load_resolved_reference_at_index(
 264                                            Register result, Register index) {
 265   assert_different_registers(result, index);
 266   // convert from field index to resolved_references() index and from
 267   // word index to byte offset. Since this is a java object, it can be compressed
 268   Register tmp = index;  // reuse
 269   lslw(tmp, tmp, LogBytesPerHeapOop);
 270 
 271   get_constant_pool(result);
 272   // load pointer for resolved_references[] objArray
 273   ldr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
 274   ldr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
 275   // JNIHandles::resolve(obj);
 276   ldr(result, Address(result, 0));
 277   // Add in the index
 278   add(result, result, tmp);
 279   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
 280 }
 281 
 282 void InterpreterMacroAssembler::load_resolved_klass_at_offset(
 283                              Register cpool, Register index, Register klass, Register temp) {
 284   add(temp, cpool, index, LSL, LogBytesPerWord);
 285   ldrh(temp, Address(temp, sizeof(ConstantPool))); // temp = resolved_klass_index
 286   ldr(klass, Address(cpool,  ConstantPool::resolved_klasses_offset_in_bytes())); // klass = cpool->_resolved_klasses
 287   add(klass, klass, temp, LSL, LogBytesPerWord);
 288   ldr(klass, Address(klass, Array<Klass*>::base_offset_in_bytes()));
 289 }
 290 
 291 // Generate a subtype check: branch to ok_is_subtype if sub_klass is a
 292 // subtype of super_klass.
 293 //
 294 // Args:
 295 //      r0: superklass
 296 //      Rsub_klass: subklass




 255   call_VM(noreg, CAST_FROM_FN_PTR(address,
 256           InterpreterRuntime::build_method_counters), method);
 257   ldr(mcs, Address(method, Method::method_counters_offset()));
 258   cbz(mcs, skip); // No MethodCounters allocated, OutOfMemory
 259   bind(has_counters);
 260 }
 261 
 262 // Load object from cpool->resolved_references(index)
 263 void InterpreterMacroAssembler::load_resolved_reference_at_index(
 264                                            Register result, Register index) {
 265   assert_different_registers(result, index);
 266   // convert from field index to resolved_references() index and from
 267   // word index to byte offset. Since this is a java object, it can be compressed
 268   Register tmp = index;  // reuse
 269   lslw(tmp, tmp, LogBytesPerHeapOop);
 270 
 271   get_constant_pool(result);
 272   // load pointer for resolved_references[] objArray
 273   ldr(result, Address(result, ConstantPool::cache_offset_in_bytes()));
 274   ldr(result, Address(result, ConstantPoolCache::resolved_references_offset_in_bytes()));
 275   resolve_oop_handle(result);

 276   // Add in the index
 277   add(result, result, tmp);
 278   load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
 279 }
 280 
 281 void InterpreterMacroAssembler::load_resolved_klass_at_offset(
 282                              Register cpool, Register index, Register klass, Register temp) {
 283   add(temp, cpool, index, LSL, LogBytesPerWord);
 284   ldrh(temp, Address(temp, sizeof(ConstantPool))); // temp = resolved_klass_index
 285   ldr(klass, Address(cpool,  ConstantPool::resolved_klasses_offset_in_bytes())); // klass = cpool->_resolved_klasses
 286   add(klass, klass, temp, LSL, LogBytesPerWord);
 287   ldr(klass, Address(klass, Array<Klass*>::base_offset_in_bytes()));
 288 }
 289 
 290 // Generate a subtype check: branch to ok_is_subtype if sub_klass is a
 291 // subtype of super_klass.
 292 //
 293 // Args:
 294 //      r0: superklass
 295 //      Rsub_klass: subklass


< prev index next >