Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/mips/builtins-mips.cc

Issue 1289863003: [interpreter]: Changes to interpreter builtins for accumulator and register file registers. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@fix_interpreter_initialization
Patch Set: Rename incoming_accumulator Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ia32/macro-assembler-ia32.h ('k') | src/mips/macro-assembler-mips.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "src/v8.h" 7 #include "src/v8.h"
8 8
9 #if V8_TARGET_ARCH_MIPS 9 #if V8_TARGET_ARCH_MIPS
10 10
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 913
914 // Do a stack check to ensure we don't go over the limit. 914 // Do a stack check to ensure we don't go over the limit.
915 Label ok; 915 Label ok;
916 __ Subu(t1, sp, Operand(t0)); 916 __ Subu(t1, sp, Operand(t0));
917 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex); 917 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex);
918 __ Branch(&ok, hs, t1, Operand(a2)); 918 __ Branch(&ok, hs, t1, Operand(a2));
919 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION); 919 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION);
920 __ bind(&ok); 920 __ bind(&ok);
921 921
922 // If ok, push undefined as the initial value for all register file entries. 922 // If ok, push undefined as the initial value for all register file entries.
923 // Note: there should always be at least one stack slot for the return
924 // register in the register file.
925 Label loop_header; 923 Label loop_header;
924 Label loop_check;
926 __ LoadRoot(t1, Heap::kUndefinedValueRootIndex); 925 __ LoadRoot(t1, Heap::kUndefinedValueRootIndex);
926 __ Branch(&loop_check);
927 __ bind(&loop_header); 927 __ bind(&loop_header);
928 // TODO(rmcilroy): Consider doing more than one push per loop iteration. 928 // TODO(rmcilroy): Consider doing more than one push per loop iteration.
929 __ push(t1); 929 __ push(t1);
930 // Continue loop if not done. 930 // Continue loop if not done.
931 __ bind(&loop_check);
931 __ Subu(t0, t0, Operand(kPointerSize)); 932 __ Subu(t0, t0, Operand(kPointerSize));
932 __ Branch(&loop_header, ge, t0, Operand(zero_reg)); 933 __ Branch(&loop_header, ge, t0, Operand(zero_reg));
933 } 934 }
934 935
935 // TODO(rmcilroy): List of things not currently dealt with here but done in 936 // TODO(rmcilroy): List of things not currently dealt with here but done in
936 // fullcodegen's prologue: 937 // fullcodegen's prologue:
937 // - Support profiler (specifically profiling_counter). 938 // - Support profiler (specifically profiling_counter).
938 // - Call ProfileEntryHookStub when isolate has a function_entry_hook. 939 // - Call ProfileEntryHookStub when isolate has a function_entry_hook.
939 // - Allow simulator stop operations if FLAG_stop_at is set. 940 // - Allow simulator stop operations if FLAG_stop_at is set.
940 // - Deal with sloppy mode functions which need to replace the 941 // - Deal with sloppy mode functions which need to replace the
(...skipping 15 matching lines...) Expand all
956 // Perform stack guard check. 957 // Perform stack guard check.
957 { 958 {
958 Label ok; 959 Label ok;
959 __ LoadRoot(at, Heap::kStackLimitRootIndex); 960 __ LoadRoot(at, Heap::kStackLimitRootIndex);
960 __ Branch(&ok, hs, sp, Operand(at)); 961 __ Branch(&ok, hs, sp, Operand(at));
961 __ CallRuntime(Runtime::kStackGuard, 0); 962 __ CallRuntime(Runtime::kStackGuard, 0);
962 __ bind(&ok); 963 __ bind(&ok);
963 } 964 }
964 965
965 // Load bytecode offset and dispatch table into registers. 966 // Load bytecode offset and dispatch table into registers.
967 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex);
968 __ Subu(
969 kInterpreterRegisterFileRegister, fp,
970 Operand(kPointerSize + StandardFrameConstants::kFixedFrameSizeFromFp));
966 __ li(kInterpreterBytecodeOffsetRegister, 971 __ li(kInterpreterBytecodeOffsetRegister,
967 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag)); 972 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag));
968 __ LoadRoot(kInterpreterDispatchTableRegister, 973 __ LoadRoot(kInterpreterDispatchTableRegister,
969 Heap::kInterpreterTableRootIndex); 974 Heap::kInterpreterTableRootIndex);
970 __ Addu(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister, 975 __ Addu(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister,
971 Operand(FixedArray::kHeaderSize - kHeapObjectTag)); 976 Operand(FixedArray::kHeaderSize - kHeapObjectTag));
972 977
973 // Dispatch to the first bytecode handler for the function. 978 // Dispatch to the first bytecode handler for the function.
974 __ Addu(a0, kInterpreterBytecodeArrayRegister, 979 __ Addu(a0, kInterpreterBytecodeArrayRegister,
975 kInterpreterBytecodeOffsetRegister); 980 kInterpreterBytecodeOffsetRegister);
976 __ lbu(a0, MemOperand(a0)); 981 __ lbu(a0, MemOperand(a0));
977 __ sll(at, a0, kPointerSizeLog2); 982 __ sll(at, a0, kPointerSizeLog2);
978 __ Addu(at, kInterpreterDispatchTableRegister, at); 983 __ Addu(at, kInterpreterDispatchTableRegister, at);
979 __ lw(at, MemOperand(at)); 984 __ lw(at, MemOperand(at));
980 // TODO(rmcilroy): Make dispatch table point to code entrys to avoid untagging 985 // TODO(rmcilroy): Make dispatch table point to code entrys to avoid untagging
981 // and header removal. 986 // and header removal.
982 __ Addu(at, at, Operand(Code::kHeaderSize - kHeapObjectTag)); 987 __ Addu(at, at, Operand(Code::kHeaderSize - kHeapObjectTag));
983 __ Jump(at); 988 __ Call(at);
984 } 989 }
985 990
986 991
987 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) { 992 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) {
988 // TODO(rmcilroy): List of things not currently dealt with here but done in 993 // TODO(rmcilroy): List of things not currently dealt with here but done in
989 // fullcodegen's EmitReturnSequence. 994 // fullcodegen's EmitReturnSequence.
990 // - Supporting FLAG_trace for Runtime::TraceExit. 995 // - Supporting FLAG_trace for Runtime::TraceExit.
991 // - Support profiler (specifically decrementing profiling_counter 996 // - Support profiler (specifically decrementing profiling_counter
992 // appropriately and calling out to HandleInterrupts if necessary). 997 // appropriately and calling out to HandleInterrupts if necessary).
993 998
994 // Load return value into v0. 999 // The return value is in accumulator, which is already in v0.
995 __ lw(v0, MemOperand(fp, -kPointerSize - 1000
996 StandardFrameConstants::kFixedFrameSizeFromFp));
997 // Leave the frame (also dropping the register file). 1001 // Leave the frame (also dropping the register file).
998 __ LeaveFrame(StackFrame::JAVA_SCRIPT); 1002 __ LeaveFrame(StackFrame::JAVA_SCRIPT);
999 // Drop receiver + arguments. 1003 // Drop receiver + arguments.
1000 __ Drop(1); // TODO(rmcilroy): Get number of arguments from BytecodeArray. 1004 __ Drop(1); // TODO(rmcilroy): Get number of arguments from BytecodeArray.
1001 __ Jump(ra); 1005 __ Jump(ra);
1002 } 1006 }
1003 1007
1004 1008
1005 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { 1009 void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
1006 CallRuntimePassFunction(masm, Runtime::kCompileLazy); 1010 CallRuntimePassFunction(masm, Runtime::kCompileLazy);
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 } 1880 }
1877 } 1881 }
1878 1882
1879 1883
1880 #undef __ 1884 #undef __
1881 1885
1882 } // namespace internal 1886 } // namespace internal
1883 } // namespace v8 1887 } // namespace v8
1884 1888
1885 #endif // V8_TARGET_ARCH_MIPS 1889 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/ia32/macro-assembler-ia32.h ('k') | src/mips/macro-assembler-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698