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

Side by Side Diff: src/mips64/builtins-mips64.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: 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
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_MIPS64 9 #if V8_TARGET_ARCH_MIPS64
10 10
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 907
908 // Do a stack check to ensure we don't go over the limit. 908 // Do a stack check to ensure we don't go over the limit.
909 Label ok; 909 Label ok;
910 __ Dsubu(a5, sp, Operand(a4)); 910 __ Dsubu(a5, sp, Operand(a4));
911 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex); 911 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex);
912 __ Branch(&ok, hs, a5, Operand(a2)); 912 __ Branch(&ok, hs, a5, Operand(a2));
913 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION); 913 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION);
914 __ bind(&ok); 914 __ bind(&ok);
915 915
916 // If ok, push undefined as the initial value for all register file entries. 916 // If ok, push undefined as the initial value for all register file entries.
917 // Note: there should always be at least one stack slot for the return
918 // register in the register file.
919 Label loop_header; 917 Label loop_header;
918 Label loop_check;
920 __ LoadRoot(a5, Heap::kUndefinedValueRootIndex); 919 __ LoadRoot(a5, Heap::kUndefinedValueRootIndex);
920 __ Branch(&loop_check);
921 __ bind(&loop_header); 921 __ bind(&loop_header);
922 // TODO(rmcilroy): Consider doing more than one push per loop iteration. 922 // TODO(rmcilroy): Consider doing more than one push per loop iteration.
923 __ push(a5); 923 __ push(a5);
924 // Continue loop if not done. 924 // Continue loop if not done.
925 __ bind(&loop_check);
925 __ Dsubu(a4, a4, Operand(kPointerSize)); 926 __ Dsubu(a4, a4, Operand(kPointerSize));
926 __ Branch(&loop_header, ge, a4, Operand(zero_reg)); 927 __ Branch(&loop_header, ge, a4, Operand(zero_reg));
927 } 928 }
928 929
929 // TODO(rmcilroy): List of things not currently dealt with here but done in 930 // TODO(rmcilroy): List of things not currently dealt with here but done in
930 // fullcodegen's prologue: 931 // fullcodegen's prologue:
931 // - Support profiler (specifically profiling_counter). 932 // - Support profiler (specifically profiling_counter).
932 // - Call ProfileEntryHookStub when isolate has a function_entry_hook. 933 // - Call ProfileEntryHookStub when isolate has a function_entry_hook.
933 // - Allow simulator stop operations if FLAG_stop_at is set. 934 // - Allow simulator stop operations if FLAG_stop_at is set.
934 // - Deal with sloppy mode functions which need to replace the 935 // - Deal with sloppy mode functions which need to replace the
(...skipping 15 matching lines...) Expand all
950 // Perform stack guard check. 951 // Perform stack guard check.
951 { 952 {
952 Label ok; 953 Label ok;
953 __ LoadRoot(at, Heap::kStackLimitRootIndex); 954 __ LoadRoot(at, Heap::kStackLimitRootIndex);
954 __ Branch(&ok, hs, sp, Operand(at)); 955 __ Branch(&ok, hs, sp, Operand(at));
955 __ CallRuntime(Runtime::kStackGuard, 0); 956 __ CallRuntime(Runtime::kStackGuard, 0);
956 __ bind(&ok); 957 __ bind(&ok);
957 } 958 }
958 959
959 // Load bytecode offset and dispatch table into registers. 960 // Load bytecode offset and dispatch table into registers.
961 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex);
962 __ Dsubu(
963 kInterpreterRegisterFileRegister, fp,
964 Operand(kPointerSize + StandardFrameConstants::kFixedFrameSizeFromFp));
960 __ li(kInterpreterBytecodeOffsetRegister, 965 __ li(kInterpreterBytecodeOffsetRegister,
961 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag)); 966 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag));
962 __ LoadRoot(kInterpreterDispatchTableRegister, 967 __ LoadRoot(kInterpreterDispatchTableRegister,
963 Heap::kInterpreterTableRootIndex); 968 Heap::kInterpreterTableRootIndex);
964 __ Daddu(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister, 969 __ Daddu(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister,
965 Operand(FixedArray::kHeaderSize - kHeapObjectTag)); 970 Operand(FixedArray::kHeaderSize - kHeapObjectTag));
966 971
967 // Dispatch to the first bytecode handler for the function. 972 // Dispatch to the first bytecode handler for the function.
968 __ Daddu(a0, kInterpreterBytecodeArrayRegister, 973 __ Daddu(a0, kInterpreterBytecodeArrayRegister,
969 kInterpreterBytecodeOffsetRegister); 974 kInterpreterBytecodeOffsetRegister);
970 __ lbu(a0, MemOperand(a0)); 975 __ lbu(a0, MemOperand(a0));
971 __ dsll(at, a0, kPointerSizeLog2); 976 __ dsll(at, a0, kPointerSizeLog2);
972 __ Daddu(at, kInterpreterDispatchTableRegister, at); 977 __ Daddu(at, kInterpreterDispatchTableRegister, at);
973 __ ld(at, MemOperand(at)); 978 __ ld(at, MemOperand(at));
974 // TODO(rmcilroy): Make dispatch table point to code entrys to avoid untagging 979 // TODO(rmcilroy): Make dispatch table point to code entrys to avoid untagging
975 // and header removal. 980 // and header removal.
976 __ Daddu(at, at, Operand(Code::kHeaderSize - kHeapObjectTag)); 981 __ Daddu(at, at, Operand(Code::kHeaderSize - kHeapObjectTag));
977 __ Jump(at); 982 __ Call(at);
978 } 983 }
979 984
980 985
981 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) { 986 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) {
982 // TODO(rmcilroy): List of things not currently dealt with here but done in 987 // TODO(rmcilroy): List of things not currently dealt with here but done in
983 // fullcodegen's EmitReturnSequence. 988 // fullcodegen's EmitReturnSequence.
984 // - Supporting FLAG_trace for Runtime::TraceExit. 989 // - Supporting FLAG_trace for Runtime::TraceExit.
985 // - Support profiler (specifically decrementing profiling_counter 990 // - Support profiler (specifically decrementing profiling_counter
986 // appropriately and calling out to HandleInterrupts if necessary). 991 // appropriately and calling out to HandleInterrupts if necessary).
987 992
988 // Load return value into v0. 993 // The return value is in accumulator, which is already in v0.
989 __ ld(v0, MemOperand(fp, -kPointerSize - 994
990 StandardFrameConstants::kFixedFrameSizeFromFp));
991 // Leave the frame (also dropping the register file). 995 // Leave the frame (also dropping the register file).
992 __ LeaveFrame(StackFrame::JAVA_SCRIPT); 996 __ LeaveFrame(StackFrame::JAVA_SCRIPT);
993 // Drop receiver + arguments. 997 // Drop receiver + arguments.
994 __ Drop(1); // TODO(rmcilroy): Get number of arguments from BytecodeArray. 998 __ Drop(1); // TODO(rmcilroy): Get number of arguments from BytecodeArray.
995 __ Jump(ra); 999 __ Jump(ra);
996 } 1000 }
997 1001
998 1002
999 void Builtins::Generate_CompileLazy(MacroAssembler* masm) { 1003 void Builtins::Generate_CompileLazy(MacroAssembler* masm) {
1000 CallRuntimePassFunction(masm, Runtime::kCompileLazy); 1004 CallRuntimePassFunction(masm, Runtime::kCompileLazy);
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after
1871 } 1875 }
1872 } 1876 }
1873 1877
1874 1878
1875 #undef __ 1879 #undef __
1876 1880
1877 } // namespace internal 1881 } // namespace internal
1878 } // namespace v8 1882 } // namespace v8
1879 1883
1880 #endif // V8_TARGET_ARCH_MIPS64 1884 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698