1340 // this function returns the adjust size (in number of words) to a c2i adapter
1341 // activation for use during deoptimization
1342 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals) {
1343 int extra_locals_size = (callee_locals - callee_parameters) * Interpreter::stackElementWords;
1344 return extra_locals_size;
1345 }
1346
1347
1348 // Number of stack slots between incoming argument block and the start of
1349 // a new frame. The PROLOG must add this many slots to the stack. The
1350 // EPILOG must remove this many slots.
1351 // FP + LR
1352 uint SharedRuntime::in_preserve_stack_slots() {
1353 return 2 * VMRegImpl::slots_per_word;
1354 }
1355
1356 uint SharedRuntime::out_preserve_stack_slots() {
1357 return 0;
1358 }
1359
1360 //------------------------------generate_deopt_blob----------------------------
1361 void SharedRuntime::generate_deopt_blob() {
1362 ResourceMark rm;
1363 CodeBuffer buffer("deopt_blob", 1024, 1024);
1364 int frame_size_in_words;
1365 OopMapSet* oop_maps;
1366 int reexecute_offset;
1367 int exception_in_tls_offset;
1368 int exception_offset;
1369
1370 MacroAssembler* masm = new MacroAssembler(&buffer);
1371 Label cont;
1372 const Register Rkind = R9; // caller-saved
1373 const Register Rublock = R6;
1374 const Register Rsender = altFP_7_11;
1375 assert_different_registers(Rkind, Rublock, Rsender, Rexception_obj, Rexception_pc, R0, R1, R2, R3, R8, Rtemp);
1376
1377 address start = __ pc();
1378
1379 oop_maps = new OopMapSet();
|
1340 // this function returns the adjust size (in number of words) to a c2i adapter
1341 // activation for use during deoptimization
1342 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals) {
1343 int extra_locals_size = (callee_locals - callee_parameters) * Interpreter::stackElementWords;
1344 return extra_locals_size;
1345 }
1346
1347
1348 // Number of stack slots between incoming argument block and the start of
1349 // a new frame. The PROLOG must add this many slots to the stack. The
1350 // EPILOG must remove this many slots.
1351 // FP + LR
1352 uint SharedRuntime::in_preserve_stack_slots() {
1353 return 2 * VMRegImpl::slots_per_word;
1354 }
1355
1356 uint SharedRuntime::out_preserve_stack_slots() {
1357 return 0;
1358 }
1359
1360 VMReg SharedRuntime::thread_register() {
1361 Unimplemented();
1362 return nullptr;
1363 }
1364
1365 //------------------------------generate_deopt_blob----------------------------
1366 void SharedRuntime::generate_deopt_blob() {
1367 ResourceMark rm;
1368 CodeBuffer buffer("deopt_blob", 1024, 1024);
1369 int frame_size_in_words;
1370 OopMapSet* oop_maps;
1371 int reexecute_offset;
1372 int exception_in_tls_offset;
1373 int exception_offset;
1374
1375 MacroAssembler* masm = new MacroAssembler(&buffer);
1376 Label cont;
1377 const Register Rkind = R9; // caller-saved
1378 const Register Rublock = R6;
1379 const Register Rsender = altFP_7_11;
1380 assert_different_registers(Rkind, Rublock, Rsender, Rexception_obj, Rexception_pc, R0, R1, R2, R3, R8, Rtemp);
1381
1382 address start = __ pc();
1383
1384 oop_maps = new OopMapSet();
|