OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 | 6 |
7 #include "v8.h" | 7 #include "v8.h" |
8 | 8 |
9 #if V8_TARGET_ARCH_MIPS | 9 #if V8_TARGET_ARCH_MIPS |
10 | 10 |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 | 858 |
859 static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) { | 859 static void GenerateMakeCodeYoungAgainCommon(MacroAssembler* masm) { |
860 // For now, we are relying on the fact that make_code_young doesn't do any | 860 // For now, we are relying on the fact that make_code_young doesn't do any |
861 // garbage collection which allows us to save/restore the registers without | 861 // garbage collection which allows us to save/restore the registers without |
862 // worrying about which of them contain pointers. We also don't build an | 862 // worrying about which of them contain pointers. We also don't build an |
863 // internal frame to make the code faster, since we shouldn't have to do stack | 863 // internal frame to make the code faster, since we shouldn't have to do stack |
864 // crawls in MakeCodeYoung. This seems a bit fragile. | 864 // crawls in MakeCodeYoung. This seems a bit fragile. |
865 | 865 |
866 // Set a0 to point to the head of the PlatformCodeAge sequence. | 866 // Set a0 to point to the head of the PlatformCodeAge sequence. |
867 __ Subu(a0, a0, | 867 __ Subu(a0, a0, |
868 Operand((kNoCodeAgeSequenceLength - 1) * Assembler::kInstrSize)); | 868 Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize)); |
869 | 869 |
870 // The following registers must be saved and restored when calling through to | 870 // The following registers must be saved and restored when calling through to |
871 // the runtime: | 871 // the runtime: |
872 // a0 - contains return address (beginning of patch sequence) | 872 // a0 - contains return address (beginning of patch sequence) |
873 // a1 - isolate | 873 // a1 - isolate |
874 RegList saved_regs = | 874 RegList saved_regs = |
875 (a0.bit() | a1.bit() | ra.bit() | fp.bit()) & ~sp.bit(); | 875 (a0.bit() | a1.bit() | ra.bit() | fp.bit()) & ~sp.bit(); |
876 FrameScope scope(masm, StackFrame::MANUAL); | 876 FrameScope scope(masm, StackFrame::MANUAL); |
877 __ MultiPush(saved_regs); | 877 __ MultiPush(saved_regs); |
878 __ PrepareCallCFunction(2, 0, a2); | 878 __ PrepareCallCFunction(2, 0, a2); |
(...skipping 18 matching lines...) Expand all Loading... |
897 | 897 |
898 | 898 |
899 void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { | 899 void Builtins::Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm) { |
900 // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact | 900 // For now, as in GenerateMakeCodeYoungAgainCommon, we are relying on the fact |
901 // that make_code_young doesn't do any garbage collection which allows us to | 901 // that make_code_young doesn't do any garbage collection which allows us to |
902 // save/restore the registers without worrying about which of them contain | 902 // save/restore the registers without worrying about which of them contain |
903 // pointers. | 903 // pointers. |
904 | 904 |
905 // Set a0 to point to the head of the PlatformCodeAge sequence. | 905 // Set a0 to point to the head of the PlatformCodeAge sequence. |
906 __ Subu(a0, a0, | 906 __ Subu(a0, a0, |
907 Operand((kNoCodeAgeSequenceLength - 1) * Assembler::kInstrSize)); | 907 Operand(kNoCodeAgeSequenceLength - Assembler::kInstrSize)); |
908 | 908 |
909 // The following registers must be saved and restored when calling through to | 909 // The following registers must be saved and restored when calling through to |
910 // the runtime: | 910 // the runtime: |
911 // a0 - contains return address (beginning of patch sequence) | 911 // a0 - contains return address (beginning of patch sequence) |
912 // a1 - isolate | 912 // a1 - isolate |
913 RegList saved_regs = | 913 RegList saved_regs = |
914 (a0.bit() | a1.bit() | ra.bit() | fp.bit()) & ~sp.bit(); | 914 (a0.bit() | a1.bit() | ra.bit() | fp.bit()) & ~sp.bit(); |
915 FrameScope scope(masm, StackFrame::MANUAL); | 915 FrameScope scope(masm, StackFrame::MANUAL); |
916 __ MultiPush(saved_regs); | 916 __ MultiPush(saved_regs); |
917 __ PrepareCallCFunction(2, 0, a2); | 917 __ PrepareCallCFunction(2, 0, a2); |
918 __ li(a1, Operand(ExternalReference::isolate_address(masm->isolate()))); | 918 __ li(a1, Operand(ExternalReference::isolate_address(masm->isolate()))); |
919 __ CallCFunction( | 919 __ CallCFunction( |
920 ExternalReference::get_mark_code_as_executed_function(masm->isolate()), | 920 ExternalReference::get_mark_code_as_executed_function(masm->isolate()), |
921 2); | 921 2); |
922 __ MultiPop(saved_regs); | 922 __ MultiPop(saved_regs); |
923 | 923 |
924 // Perform prologue operations usually performed by the young code stub. | 924 // Perform prologue operations usually performed by the young code stub. |
925 __ Push(ra, fp, cp, a1); | 925 __ Push(ra, fp, cp, a1); |
926 __ Addu(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp)); | 926 __ Addu(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp)); |
927 | 927 |
928 // Jump to point after the code-age stub. | 928 // Jump to point after the code-age stub. |
929 __ Addu(a0, a0, Operand((kNoCodeAgeSequenceLength) * Assembler::kInstrSize)); | 929 __ Addu(a0, a0, Operand(kNoCodeAgeSequenceLength)); |
930 __ Jump(a0); | 930 __ Jump(a0); |
931 } | 931 } |
932 | 932 |
933 | 933 |
934 void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { | 934 void Builtins::Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm) { |
935 GenerateMakeCodeYoungAgainCommon(masm); | 935 GenerateMakeCodeYoungAgainCommon(masm); |
936 } | 936 } |
937 | 937 |
938 | 938 |
939 static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, | 939 static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, |
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1570 __ break_(0xCC); | 1570 __ break_(0xCC); |
1571 } | 1571 } |
1572 } | 1572 } |
1573 | 1573 |
1574 | 1574 |
1575 #undef __ | 1575 #undef __ |
1576 | 1576 |
1577 } } // namespace v8::internal | 1577 } } // namespace v8::internal |
1578 | 1578 |
1579 #endif // V8_TARGET_ARCH_MIPS | 1579 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |