< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page




 425     } else {
 426       __ mov(c_rarg2, NULL_WORD);
 427     }
 428     __ call_VM(r0,
 429                CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception),
 430                c_rarg1, c_rarg2);
 431   }
 432   // throw exception
 433   __ b(address(Interpreter::throw_exception_entry()));
 434   return entry;
 435 }
 436 
 437 address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
 438   address entry = __ pc();
 439 
 440   // Restore stack bottom in case i2c adjusted stack
 441   __ ldr(esp, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 442   // and NULL it as marker that esp is now tos until next java call
 443   __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 444 




 445   __ restore_bcp();
 446   __ restore_locals();
 447   __ restore_constant_pool_cache();
 448   __ get_method(rmethod);
 449 
 450   if (state == atos) {
 451     Register obj = r0;
 452     Register mdp = r1;
 453     Register tmp = r2;
 454     __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
 455     __ profile_return_type(mdp, obj, tmp);
 456   }
 457 
 458   // Pop N words from the stack
 459   __ get_cache_and_index_at_bcp(r1, r2, 1, index_size);
 460   __ ldr(r1, Address(r1, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
 461   __ andr(r1, r1, ConstantPoolCacheEntry::parameter_size_mask);
 462 
 463   __ add(esp, esp, r1, Assembler::LSL, 3);
 464 




 425     } else {
 426       __ mov(c_rarg2, NULL_WORD);
 427     }
 428     __ call_VM(r0,
 429                CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception),
 430                c_rarg1, c_rarg2);
 431   }
 432   // throw exception
 433   __ b(address(Interpreter::throw_exception_entry()));
 434   return entry;
 435 }
 436 
 437 address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
 438   address entry = __ pc();
 439 
 440   // Restore stack bottom in case i2c adjusted stack
 441   __ ldr(esp, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 442   // and NULL it as marker that esp is now tos until next java call
 443   __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 444 
 445   if (state == atos && ValueTypeReturnedAsFields) {
 446     __ store_value_type_fields_to_buf(NULL, true);
 447   }
 448 
 449   __ restore_bcp();
 450   __ restore_locals();
 451   __ restore_constant_pool_cache();
 452   __ get_method(rmethod);
 453 
 454   if (state == atos) {
 455     Register obj = r0;
 456     Register mdp = r1;
 457     Register tmp = r2;
 458     __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
 459     __ profile_return_type(mdp, obj, tmp);
 460   }
 461 
 462   // Pop N words from the stack
 463   __ get_cache_and_index_at_bcp(r1, r2, 1, index_size);
 464   __ ldr(r1, Address(r1, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
 465   __ andr(r1, r1, ConstantPoolCacheEntry::parameter_size_mask);
 466 
 467   __ add(esp, esp, r1, Assembler::LSL, 3);
 468 


< prev index next >