< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page
rev 53735 : AArch64 support for ValueTypes


 549     __ dispatch_next(state, step);
 550   } else {
 551     __ jump_to_entry(continuation);
 552   }
 553   return entry;
 554 }
 555 
 556 address TemplateInterpreterGenerator::generate_result_handler_for(
 557         BasicType type) {
 558     address entry = __ pc();
 559   switch (type) {
 560   case T_BOOLEAN: __ c2bool(r0);         break;
 561   case T_CHAR   : __ uxth(r0, r0);       break;
 562   case T_BYTE   : __ sxtb(r0, r0);        break;
 563   case T_SHORT  : __ sxth(r0, r0);        break;
 564   case T_INT    : __ uxtw(r0, r0);        break;  // FIXME: We almost certainly don't need this
 565   case T_LONG   : /* nothing to do */        break;
 566   case T_VOID   : /* nothing to do */        break;
 567   case T_FLOAT  : /* nothing to do */        break;
 568   case T_DOUBLE : /* nothing to do */        break;

 569   case T_OBJECT :
 570     // retrieve result from frame
 571     __ ldr(r0, Address(rfp, frame::interpreter_frame_oop_temp_offset*wordSize));
 572     // and verify it
 573     __ verify_oop(r0);
 574     break;
 575   default       : ShouldNotReachHere();
 576   }
 577   __ ret(lr);                                  // return from result handler
 578   return entry;
 579 }
 580 
 581 address TemplateInterpreterGenerator::generate_safept_entry_for(
 582         TosState state,
 583         address runtime_entry) {
 584   address entry = __ pc();
 585   __ push(state);
 586   __ call_VM(noreg, runtime_entry);
 587   __ membar(Assembler::AnyAny);
 588   __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos));




 549     __ dispatch_next(state, step);
 550   } else {
 551     __ jump_to_entry(continuation);
 552   }
 553   return entry;
 554 }
 555 
 556 address TemplateInterpreterGenerator::generate_result_handler_for(
 557         BasicType type) {
 558     address entry = __ pc();
 559   switch (type) {
 560   case T_BOOLEAN: __ c2bool(r0);         break;
 561   case T_CHAR   : __ uxth(r0, r0);       break;
 562   case T_BYTE   : __ sxtb(r0, r0);        break;
 563   case T_SHORT  : __ sxth(r0, r0);        break;
 564   case T_INT    : __ uxtw(r0, r0);        break;  // FIXME: We almost certainly don't need this
 565   case T_LONG   : /* nothing to do */        break;
 566   case T_VOID   : /* nothing to do */        break;
 567   case T_FLOAT  : /* nothing to do */        break;
 568   case T_DOUBLE : /* nothing to do */        break;
 569   case T_VALUETYPE: // fall through (value types are handled with oops)
 570   case T_OBJECT :
 571     // retrieve result from frame
 572     __ ldr(r0, Address(rfp, frame::interpreter_frame_oop_temp_offset*wordSize));
 573     // and verify it
 574     __ verify_oop(r0);
 575     break;
 576   default       : ShouldNotReachHere();
 577   }
 578   __ ret(lr);                                  // return from result handler
 579   return entry;
 580 }
 581 
 582 address TemplateInterpreterGenerator::generate_safept_entry_for(
 583         TosState state,
 584         address runtime_entry) {
 585   address entry = __ pc();
 586   __ push(state);
 587   __ call_VM(noreg, runtime_entry);
 588   __ membar(Assembler::AnyAny);
 589   __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos));


< prev index next >