354 355 void C1_MacroAssembler::remove_frame(int framesize, bool needs_stack_repair) { 356 357 guarantee(needs_stack_repair == false, "Stack repair should not be true"); 358 359 MacroAssembler::remove_frame(framesize + 2 * wordSize); 360 } 361 362 void C1_MacroAssembler::verified_value_entry() { 363 if (C1Breakpoint || VerifyFPU || !UseStackBanging) { 364 // Verified Entry first instruction should be 5 bytes long for correct 365 // patching by patch_verified_entry(). 366 // 367 // C1Breakpoint and VerifyFPU have one byte first instruction. 368 // Also first instruction will be one byte "push(rbp)" if stack banging 369 // code is not generated (see build_frame() above). 370 // For all these cases generate long instruction first. 371 nop(); 372 } 373 374 // build frame 375 // verify_FPU(0, "method_entry"); 376 } 377 378 int C1_MacroAssembler::scalarized_entry(const CompiledEntrySignature *ces, int frame_size_in_bytes, int bang_size_in_bytes, Label& verified_value_entry_label, bool is_value_ro_entry) { 379 // This function required to support for ValueTypePassFieldsAsArgs 380 if (C1Breakpoint || VerifyFPU || !UseStackBanging) { 381 // Verified Entry first instruction should be 5 bytes long for correct 382 // patching by patch_verified_entry(). 383 // 384 // C1Breakpoint and VerifyFPU have one byte first instruction. 385 // Also first instruction will be one byte "push(rbp)" if stack banging 386 // code is not generated (see build_frame() above). 387 // For all these cases generate long instruction first. 388 nop(); 389 } 390 391 // verify_FPU(0, "method_entry"); 392 393 assert(ValueTypePassFieldsAsArgs, "sanity"); 394 395 GrowableArray<SigEntry>* sig = &ces->sig(); 396 GrowableArray<SigEntry>* sig_cc = is_value_ro_entry ? &ces->sig_cc_ro() : &ces->sig_cc(); 397 VMRegPair* regs = ces->regs(); 398 VMRegPair* regs_cc = is_value_ro_entry ? ces->regs_cc_ro() : ces->regs_cc(); 399 int args_on_stack = ces->args_on_stack(); 400 int args_on_stack_cc = is_value_ro_entry ? ces->args_on_stack_cc_ro() : ces->args_on_stack_cc(); 401 402 assert(sig->length() <= sig_cc->length(), "Zero-sized value class not allowed!"); 403 BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, sig_cc->length()); 404 int args_passed = sig->length(); 405 int args_passed_cc = SigEntry::fill_sig_bt(sig_cc, sig_bt); 406 407 int extra_stack_offset = wordSize; // tos is return address. 408 409 // Create a temp frame so we can call into runtime. It must be properly set up to accomodate GC. 410 int sp_inc = (args_on_stack - args_on_stack_cc) * VMRegImpl::stack_slot_size; | 354 355 void C1_MacroAssembler::remove_frame(int framesize, bool needs_stack_repair) { 356 357 guarantee(needs_stack_repair == false, "Stack repair should not be true"); 358 359 MacroAssembler::remove_frame(framesize + 2 * wordSize); 360 } 361 362 void C1_MacroAssembler::verified_value_entry() { 363 if (C1Breakpoint || VerifyFPU || !UseStackBanging) { 364 // Verified Entry first instruction should be 5 bytes long for correct 365 // patching by patch_verified_entry(). 366 // 367 // C1Breakpoint and VerifyFPU have one byte first instruction. 368 // Also first instruction will be one byte "push(rbp)" if stack banging 369 // code is not generated (see build_frame() above). 370 // For all these cases generate long instruction first. 371 nop(); 372 } 373 374 nop(); 375 // build frame 376 // verify_FPU(0, "method_entry"); 377 } 378 379 int C1_MacroAssembler::scalarized_entry(const CompiledEntrySignature *ces, int frame_size_in_bytes, int bang_size_in_bytes, Label& verified_value_entry_label, bool is_value_ro_entry) { 380 // This function required to support for ValueTypePassFieldsAsArgs 381 if (C1Breakpoint || VerifyFPU || !UseStackBanging) { 382 // Verified Entry first instruction should be 5 bytes long for correct 383 // patching by patch_verified_entry(). 384 // 385 // C1Breakpoint and VerifyFPU have one byte first instruction. 386 // Also first instruction will be one byte "push(rbp)" if stack banging 387 // code is not generated (see build_frame() above). 388 // For all these cases generate long instruction first. 389 nop(); 390 } 391 392 nop(); 393 // verify_FPU(0, "method_entry"); 394 395 assert(ValueTypePassFieldsAsArgs, "sanity"); 396 397 GrowableArray<SigEntry>* sig = &ces->sig(); 398 GrowableArray<SigEntry>* sig_cc = is_value_ro_entry ? &ces->sig_cc_ro() : &ces->sig_cc(); 399 VMRegPair* regs = ces->regs(); 400 VMRegPair* regs_cc = is_value_ro_entry ? ces->regs_cc_ro() : ces->regs_cc(); 401 int args_on_stack = ces->args_on_stack(); 402 int args_on_stack_cc = is_value_ro_entry ? ces->args_on_stack_cc_ro() : ces->args_on_stack_cc(); 403 404 assert(sig->length() <= sig_cc->length(), "Zero-sized value class not allowed!"); 405 BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, sig_cc->length()); 406 int args_passed = sig->length(); 407 int args_passed_cc = SigEntry::fill_sig_bt(sig_cc, sig_bt); 408 409 int extra_stack_offset = wordSize; // tos is return address. 410 411 // Create a temp frame so we can call into runtime. It must be properly set up to accomodate GC. 412 int sp_inc = (args_on_stack - args_on_stack_cc) * VMRegImpl::stack_slot_size; |