< prev index next >

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

Print this page
rev 51941 : 8211241: Missing obj equals in TemplateTable::fast_aldc


 395   __ get_cache_index_at_bcp(tmp, 1, index_size);
 396   __ load_resolved_reference_at_index(result, tmp);
 397   __ cbnz(result, resolved);
 398 
 399   address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc);
 400 
 401   // first time invocation - must resolve first
 402   __ mov(rarg, (int)bytecode());
 403   __ call_VM(result, entry, rarg);
 404 
 405   __ bind(resolved);
 406 
 407   { // Check for the null sentinel.
 408     // If we just called the VM, it already did the mapping for us,
 409     // but it's harmless to retry.
 410     Label notNull;
 411 
 412     // Stash null_sentinel address to get its value later
 413     __ movptr(rarg, (uintptr_t)Universe::the_null_sentinel_addr());
 414     __ ldr(tmp, Address(rarg));
 415     __ cmp(result, tmp);
 416     __ br(Assembler::NE, notNull);
 417     __ mov(result, 0);  // NULL object reference
 418     __ bind(notNull);
 419   }
 420 
 421   if (VerifyOops) {
 422     // Safe to call with 0 result
 423     __ verify_oop(result);
 424   }
 425 }
 426 
 427 void TemplateTable::ldc2_w()
 428 {
 429   transition(vtos, vtos);
 430   Label notDouble, notLong, Done;
 431   __ get_unsigned_2_byte_index_at_bcp(r0, 1);
 432 
 433   __ get_cpool_and_tags(r1, r2);
 434   const int base_offset = ConstantPool::header_size() * wordSize;
 435   const int tags_offset = Array<u1>::base_offset_in_bytes();




 395   __ get_cache_index_at_bcp(tmp, 1, index_size);
 396   __ load_resolved_reference_at_index(result, tmp);
 397   __ cbnz(result, resolved);
 398 
 399   address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc);
 400 
 401   // first time invocation - must resolve first
 402   __ mov(rarg, (int)bytecode());
 403   __ call_VM(result, entry, rarg);
 404 
 405   __ bind(resolved);
 406 
 407   { // Check for the null sentinel.
 408     // If we just called the VM, it already did the mapping for us,
 409     // but it's harmless to retry.
 410     Label notNull;
 411 
 412     // Stash null_sentinel address to get its value later
 413     __ movptr(rarg, (uintptr_t)Universe::the_null_sentinel_addr());
 414     __ ldr(tmp, Address(rarg));
 415     __ cmpoop(result, tmp);
 416     __ br(Assembler::NE, notNull);
 417     __ mov(result, 0);  // NULL object reference
 418     __ bind(notNull);
 419   }
 420 
 421   if (VerifyOops) {
 422     // Safe to call with 0 result
 423     __ verify_oop(result);
 424   }
 425 }
 426 
 427 void TemplateTable::ldc2_w()
 428 {
 429   transition(vtos, vtos);
 430   Label notDouble, notLong, Done;
 431   __ get_unsigned_2_byte_index_at_bcp(r0, 1);
 432 
 433   __ get_cpool_and_tags(r1, r2);
 434   const int base_offset = ConstantPool::header_size() * wordSize;
 435   const int tags_offset = Array<u1>::base_offset_in_bytes();


< prev index next >