< prev index next >

src/cpu/aarch64/vm/templateInterpreter_aarch64.cpp

Print this page




 196   __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 197   __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size() + 2);
 198   __ ldr(rscratch2,
 199          Address(rfp, frame::interpreter_frame_initial_sp_offset * wordSize));
 200   __ sub(rscratch1, rscratch2, rscratch1, ext::uxtw, 3);
 201   __ andr(sp, rscratch1, -16);
 202 
 203   __ get_dispatch();
 204   __ dispatch_next(state, step);
 205 
 206   return entry;
 207 }
 208 
 209 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state,
 210                                                                int step) {
 211   address entry = __ pc();
 212   __ restore_bcp();
 213   __ restore_locals();
 214   __ restore_constant_pool_cache();
 215   __ get_method(rmethod);
 216 
 217   // handle exceptions
 218   {
 219     Label L;
 220     __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
 221     __ cbz(rscratch1, L);
 222     __ call_VM(noreg,
 223                CAST_FROM_FN_PTR(address,
 224                                 InterpreterRuntime::throw_pending_exception));
 225     __ should_not_reach_here();
 226     __ bind(L);
 227   }
 228 
 229   __ get_dispatch();
 230 
 231   // Calculate stack limit
 232   __ ldr(rscratch1, Address(rmethod, Method::const_offset()));
 233   __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 234   __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size()
 235          + (EnableInvokeDynamic ? 2 : 0));
 236   __ ldr(rscratch2,
 237          Address(rfp, frame::interpreter_frame_initial_sp_offset * wordSize));
 238   __ sub(rscratch1, rscratch2, rscratch1, ext::uxtx, 3);
 239   __ andr(sp, rscratch1, -16);
 240 
 241   // Restore expression stack pointer
 242   __ ldr(esp, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 243   // NULL last_sp until next java call
 244   __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));












 245 
 246   __ dispatch_next(state, step);
 247   return entry;
 248 }
 249 
 250 
 251 int AbstractInterpreter::BasicType_as_index(BasicType type) {
 252   int i = 0;
 253   switch (type) {
 254     case T_BOOLEAN: i = 0; break;
 255     case T_CHAR   : i = 1; break;
 256     case T_BYTE   : i = 2; break;
 257     case T_SHORT  : i = 3; break;
 258     case T_INT    : i = 4; break;
 259     case T_LONG   : i = 5; break;
 260     case T_VOID   : i = 6; break;
 261     case T_FLOAT  : i = 7; break;
 262     case T_DOUBLE : i = 8; break;
 263     case T_OBJECT : i = 9; break;
 264     case T_ARRAY  : i = 9; break;




 196   __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 197   __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size() + 2);
 198   __ ldr(rscratch2,
 199          Address(rfp, frame::interpreter_frame_initial_sp_offset * wordSize));
 200   __ sub(rscratch1, rscratch2, rscratch1, ext::uxtw, 3);
 201   __ andr(sp, rscratch1, -16);
 202 
 203   __ get_dispatch();
 204   __ dispatch_next(state, step);
 205 
 206   return entry;
 207 }
 208 
 209 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state,
 210                                                                int step) {
 211   address entry = __ pc();
 212   __ restore_bcp();
 213   __ restore_locals();
 214   __ restore_constant_pool_cache();
 215   __ get_method(rmethod);













 216   __ get_dispatch();
 217 
 218   // Calculate stack limit
 219   __ ldr(rscratch1, Address(rmethod, Method::const_offset()));
 220   __ ldrh(rscratch1, Address(rscratch1, ConstMethod::max_stack_offset()));
 221   __ add(rscratch1, rscratch1, frame::interpreter_frame_monitor_size()
 222          + (EnableInvokeDynamic ? 2 : 0));
 223   __ ldr(rscratch2,
 224          Address(rfp, frame::interpreter_frame_initial_sp_offset * wordSize));
 225   __ sub(rscratch1, rscratch2, rscratch1, ext::uxtx, 3);
 226   __ andr(sp, rscratch1, -16);
 227 
 228   // Restore expression stack pointer
 229   __ ldr(esp, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 230   // NULL last_sp until next java call
 231   __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
 232 
 233   // handle exceptions
 234   {
 235     Label L;
 236     __ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
 237     __ cbz(rscratch1, L);
 238     __ call_VM(noreg,
 239                CAST_FROM_FN_PTR(address,
 240                                 InterpreterRuntime::throw_pending_exception));
 241     __ should_not_reach_here();
 242     __ bind(L);
 243   }
 244 
 245   __ dispatch_next(state, step);
 246   return entry;
 247 }
 248 
 249 
 250 int AbstractInterpreter::BasicType_as_index(BasicType type) {
 251   int i = 0;
 252   switch (type) {
 253     case T_BOOLEAN: i = 0; break;
 254     case T_CHAR   : i = 1; break;
 255     case T_BYTE   : i = 2; break;
 256     case T_SHORT  : i = 3; break;
 257     case T_INT    : i = 4; break;
 258     case T_LONG   : i = 5; break;
 259     case T_VOID   : i = 6; break;
 260     case T_FLOAT  : i = 7; break;
 261     case T_DOUBLE : i = 8; break;
 262     case T_OBJECT : i = 9; break;
 263     case T_ARRAY  : i = 9; break;


< prev index next >