OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 // crawls in MakeCodeYoung. This seems a bit fragile. | 597 // crawls in MakeCodeYoung. This seems a bit fragile. |
598 | 598 |
599 // Re-execute the code that was patched back to the young age when | 599 // Re-execute the code that was patched back to the young age when |
600 // the stub returns. | 600 // the stub returns. |
601 __ subq(Operand(rsp, 0), Immediate(5)); | 601 __ subq(Operand(rsp, 0), Immediate(5)); |
602 __ Pushad(); | 602 __ Pushad(); |
603 __ Move(arg_reg_2, ExternalReference::isolate_address(masm->isolate())); | 603 __ Move(arg_reg_2, ExternalReference::isolate_address(masm->isolate())); |
604 __ movq(arg_reg_1, Operand(rsp, kNumSafepointRegisters * kPointerSize)); | 604 __ movq(arg_reg_1, Operand(rsp, kNumSafepointRegisters * kPointerSize)); |
605 { // NOLINT | 605 { // NOLINT |
606 FrameScope scope(masm, StackFrame::MANUAL); | 606 FrameScope scope(masm, StackFrame::MANUAL); |
607 __ PrepareCallCFunction(1); | 607 __ PrepareCallCFunction(2); |
608 __ CallCFunction( | 608 __ CallCFunction( |
609 ExternalReference::get_make_code_young_function(masm->isolate()), 1); | 609 ExternalReference::get_make_code_young_function(masm->isolate()), 2); |
610 } | 610 } |
611 __ Popad(); | 611 __ Popad(); |
612 __ ret(0); | 612 __ ret(0); |
613 } | 613 } |
614 | 614 |
615 | 615 |
616 #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ | 616 #define DEFINE_CODE_AGE_BUILTIN_GENERATOR(C) \ |
617 void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ | 617 void Builtins::Generate_Make##C##CodeYoungAgainEvenMarking( \ |
618 MacroAssembler* masm) { \ | 618 MacroAssembler* masm) { \ |
619 GenerateMakeCodeYoungAgainCommon(masm); \ | 619 GenerateMakeCodeYoungAgainCommon(masm); \ |
(...skipping 10 matching lines...) Expand all Loading... |
630 // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact | 630 // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact |
631 // that make_code_young doesn't do any garbage collection which allows us to | 631 // that make_code_young doesn't do any garbage collection which allows us to |
632 // save/restore the registers without worrying about which of them contain | 632 // save/restore the registers without worrying about which of them contain |
633 // pointers. | 633 // pointers. |
634 __ Pushad(); | 634 __ Pushad(); |
635 __ Move(arg_reg_2, ExternalReference::isolate_address(masm->isolate())); | 635 __ Move(arg_reg_2, ExternalReference::isolate_address(masm->isolate())); |
636 __ movq(arg_reg_1, Operand(rsp, kNumSafepointRegisters * kPointerSize)); | 636 __ movq(arg_reg_1, Operand(rsp, kNumSafepointRegisters * kPointerSize)); |
637 __ subq(arg_reg_1, Immediate(Assembler::kShortCallInstructionLength)); | 637 __ subq(arg_reg_1, Immediate(Assembler::kShortCallInstructionLength)); |
638 { // NOLINT | 638 { // NOLINT |
639 FrameScope scope(masm, StackFrame::MANUAL); | 639 FrameScope scope(masm, StackFrame::MANUAL); |
640 __ PrepareCallCFunction(1); | 640 __ PrepareCallCFunction(2); |
641 __ CallCFunction( | 641 __ CallCFunction( |
642 ExternalReference::get_mark_code_as_executed_function(masm->isolate()), | 642 ExternalReference::get_mark_code_as_executed_function(masm->isolate()), |
643 1); | 643 2); |
644 } | 644 } |
645 __ Popad(); | 645 __ Popad(); |
646 | 646 |
647 // Perform prologue operations usually performed by the young code stub. | 647 // Perform prologue operations usually performed by the young code stub. |
648 __ PopReturnAddressTo(kScratchRegister); | 648 __ PopReturnAddressTo(kScratchRegister); |
649 __ push(rbp); // Caller's frame pointer. | 649 __ push(rbp); // Caller's frame pointer. |
650 __ movq(rbp, rsp); | 650 __ movq(rbp, rsp); |
651 __ push(rsi); // Callee's context. | 651 __ push(rsi); // Callee's context. |
652 __ push(rdi); // Callee's JS Function. | 652 __ push(rdi); // Callee's JS Function. |
653 __ PushReturnAddressFrom(kScratchRegister); | 653 __ PushReturnAddressFrom(kScratchRegister); |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 __ bind(&ok); | 1436 __ bind(&ok); |
1437 __ ret(0); | 1437 __ ret(0); |
1438 } | 1438 } |
1439 | 1439 |
1440 | 1440 |
1441 #undef __ | 1441 #undef __ |
1442 | 1442 |
1443 } } // namespace v8::internal | 1443 } } // namespace v8::internal |
1444 | 1444 |
1445 #endif // V8_TARGET_ARCH_X64 | 1445 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |