2359 //
2360 // Actually only compiled frames need to be adjusted, but it
2361 // doesn't harm to adjust entry and interpreter frames, too.
2362 //
2363 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals) {
2364 assert(callee_locals >= callee_parameters,
2365 "test and remove; got more parms than locals");
2366 // Handle the abi adjustment here instead of doing it in push_skeleton_frames.
2367 return (callee_locals - callee_parameters) * Interpreter::stackElementWords +
2368 frame::z_parent_ijava_frame_abi_size / BytesPerWord;
2369 }
2370
2371 uint SharedRuntime::in_preserve_stack_slots() {
2372 return frame::jit_in_preserve_size_in_4_byte_units;
2373 }
2374
2375 uint SharedRuntime::out_preserve_stack_slots() {
2376 return frame::z_jit_out_preserve_size/VMRegImpl::stack_slot_size;
2377 }
2378
2379 //
2380 // Frame generation for deopt and uncommon trap blobs.
2381 //
2382 static void push_skeleton_frame(MacroAssembler* masm,
2383 /* Unchanged */
2384 Register frame_sizes_reg,
2385 Register pcs_reg,
2386 /* Invalidate */
2387 Register frame_size_reg,
2388 Register pc_reg) {
2389 BLOCK_COMMENT(" push_skeleton_frame {");
2390 __ z_lg(pc_reg, 0, pcs_reg);
2391 __ z_lg(frame_size_reg, 0, frame_sizes_reg);
2392 __ z_stg(pc_reg, _z_abi(return_pc), Z_SP);
2393 Register fp = pc_reg;
2394 __ push_frame(frame_size_reg, fp);
2395 #ifdef ASSERT
2396 // The magic is required for successful walking skeletal frames.
2397 __ load_const_optimized(frame_size_reg/*tmp*/, frame::z_istate_magic_number);
2398 __ z_stg(frame_size_reg, _z_ijava_state_neg(magic), fp);
|
2359 //
2360 // Actually only compiled frames need to be adjusted, but it
2361 // doesn't harm to adjust entry and interpreter frames, too.
2362 //
2363 int Deoptimization::last_frame_adjust(int callee_parameters, int callee_locals) {
2364 assert(callee_locals >= callee_parameters,
2365 "test and remove; got more parms than locals");
2366 // Handle the abi adjustment here instead of doing it in push_skeleton_frames.
2367 return (callee_locals - callee_parameters) * Interpreter::stackElementWords +
2368 frame::z_parent_ijava_frame_abi_size / BytesPerWord;
2369 }
2370
2371 uint SharedRuntime::in_preserve_stack_slots() {
2372 return frame::jit_in_preserve_size_in_4_byte_units;
2373 }
2374
2375 uint SharedRuntime::out_preserve_stack_slots() {
2376 return frame::z_jit_out_preserve_size/VMRegImpl::stack_slot_size;
2377 }
2378
2379 VMReg SharedRuntime::thread_register() {
2380 Unimplemented();
2381 return nullptr;
2382 }
2383
2384 //
2385 // Frame generation for deopt and uncommon trap blobs.
2386 //
2387 static void push_skeleton_frame(MacroAssembler* masm,
2388 /* Unchanged */
2389 Register frame_sizes_reg,
2390 Register pcs_reg,
2391 /* Invalidate */
2392 Register frame_size_reg,
2393 Register pc_reg) {
2394 BLOCK_COMMENT(" push_skeleton_frame {");
2395 __ z_lg(pc_reg, 0, pcs_reg);
2396 __ z_lg(frame_size_reg, 0, frame_sizes_reg);
2397 __ z_stg(pc_reg, _z_abi(return_pc), Z_SP);
2398 Register fp = pc_reg;
2399 __ push_frame(frame_size_reg, fp);
2400 #ifdef ASSERT
2401 // The magic is required for successful walking skeletal frames.
2402 __ load_const_optimized(frame_size_reg/*tmp*/, frame::z_istate_magic_number);
2403 __ z_stg(frame_size_reg, _z_ijava_state_neg(magic), fp);
|