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

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

Issue 1901763004: PPC: [Interpreter] Remove register file register and replace with LoadParentFramePointer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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 | « no previous file | src/ppc/interface-descriptors-ppc.cc » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 __ mtctr(r5); 1053 __ mtctr(r5);
1054 __ bind(&loop); 1054 __ bind(&loop);
1055 __ push(r6); 1055 __ push(r6);
1056 __ bdnz(&loop); 1056 __ bdnz(&loop);
1057 __ bind(&no_args); 1057 __ bind(&no_args);
1058 } 1058 }
1059 1059
1060 // Load accumulator, register file, bytecode offset, dispatch table into 1060 // Load accumulator, register file, bytecode offset, dispatch table into
1061 // registers. 1061 // registers.
1062 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex); 1062 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex);
1063 __ addi(kInterpreterRegisterFileRegister, fp, 1063 __ addi(r7, fp, Operand(InterpreterFrameConstants::kRegisterFileFromFp));
1064 Operand(InterpreterFrameConstants::kRegisterFilePointerFromFp));
1065 __ mov(kInterpreterBytecodeOffsetRegister, 1064 __ mov(kInterpreterBytecodeOffsetRegister,
1066 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag)); 1065 Operand(BytecodeArray::kHeaderSize - kHeapObjectTag));
1067 __ mov(kInterpreterDispatchTableRegister, 1066 __ mov(kInterpreterDispatchTableRegister,
1068 Operand(ExternalReference::interpreter_dispatch_table_address( 1067 Operand(ExternalReference::interpreter_dispatch_table_address(
1069 masm->isolate()))); 1068 masm->isolate())));
1070 1069
1071 // Dispatch to the first bytecode handler for the function. 1070 // Dispatch to the first bytecode handler for the function.
1072 __ lbzx(r4, MemOperand(kInterpreterBytecodeArrayRegister, 1071 __ lbzx(r4, MemOperand(kInterpreterBytecodeArrayRegister,
1073 kInterpreterBytecodeOffsetRegister)); 1072 kInterpreterBytecodeOffsetRegister));
1074 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2)); 1073 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2));
1075 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip)); 1074 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip));
1076 __ Call(ip); 1075 __ Call(ip);
1077 1076
1078 // Even though the first bytecode handler was called, we will never return. 1077 // Even though the first bytecode handler was called, we will never return.
1079 __ Abort(kUnexpectedReturnFromBytecodeHandler); 1078 __ Abort(kUnexpectedReturnFromBytecodeHandler);
1080 } 1079 }
1081 1080
1082 1081
1083 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) { 1082 void Builtins::Generate_InterpreterExitTrampoline(MacroAssembler* masm) {
1084 // TODO(rmcilroy): List of things not currently dealt with here but done in
1085 // fullcodegen's EmitReturnSequence.
1086 // - Supporting FLAG_trace for Runtime::TraceExit.
1087 // - Support profiler (specifically decrementing profiling_counter
1088 // appropriately and calling out to HandleInterrupts if necessary).
1089
1090 // The return value is in accumulator, which is already in r3. 1083 // The return value is in accumulator, which is already in r3.
1091 1084
1092 // Leave the frame (also dropping the register file). 1085 // Leave the frame (also dropping the register file).
1093 __ LeaveFrame(StackFrame::JAVA_SCRIPT); 1086 __ LeaveFrame(StackFrame::JAVA_SCRIPT);
1094 1087
1095 // Drop receiver + arguments and return. 1088 // Drop receiver + arguments and return.
1096 __ lwz(r0, FieldMemOperand(kInterpreterBytecodeArrayRegister, 1089 __ lwz(r0, FieldMemOperand(kInterpreterBytecodeArrayRegister,
1097 BytecodeArray::kParameterSizeOffset)); 1090 BytecodeArray::kParameterSizeOffset));
1098 __ add(sp, sp, r0); 1091 __ add(sp, sp, r0);
1099 __ blr(); 1092 __ blr();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 __ beq(&skip); 1148 __ beq(&skip);
1156 Generate_InterpreterPushArgs(masm, r5, r3, r7); 1149 Generate_InterpreterPushArgs(masm, r5, r3, r7);
1157 __ bind(&skip); 1150 __ bind(&skip);
1158 1151
1159 // Call the constructor with r3, r4, and r6 unmodified. 1152 // Call the constructor with r3, r4, and r6 unmodified.
1160 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 1153 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
1161 } 1154 }
1162 1155
1163 1156
1164 static void Generate_EnterBytecodeDispatch(MacroAssembler* masm) { 1157 static void Generate_EnterBytecodeDispatch(MacroAssembler* masm) {
1165 // Initialize register file register and dispatch table register. 1158 // Initialize the dispatch table register.
1166 __ addi(kInterpreterRegisterFileRegister, fp,
1167 Operand(InterpreterFrameConstants::kRegisterFilePointerFromFp));
1168 __ mov(kInterpreterDispatchTableRegister, 1159 __ mov(kInterpreterDispatchTableRegister,
1169 Operand(ExternalReference::interpreter_dispatch_table_address( 1160 Operand(ExternalReference::interpreter_dispatch_table_address(
1170 masm->isolate()))); 1161 masm->isolate())));
1171 1162
1172 // Get the bytecode array pointer from the frame. 1163 // Get the bytecode array pointer from the frame.
1173 __ LoadP( 1164 __ LoadP(kInterpreterBytecodeArrayRegister,
1174 kInterpreterBytecodeArrayRegister, 1165 MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp));
1175 MemOperand(kInterpreterRegisterFileRegister,
1176 InterpreterFrameConstants::kBytecodeArrayFromRegisterPointer));
1177 1166
1178 if (FLAG_debug_code) { 1167 if (FLAG_debug_code) {
1179 // Check function data field is actually a BytecodeArray object. 1168 // Check function data field is actually a BytecodeArray object.
1180 __ TestIfSmi(kInterpreterBytecodeArrayRegister, r0); 1169 __ TestIfSmi(kInterpreterBytecodeArrayRegister, r0);
1181 __ Assert(ne, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); 1170 __ Assert(ne, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry);
1182 __ CompareObjectType(kInterpreterBytecodeArrayRegister, r4, no_reg, 1171 __ CompareObjectType(kInterpreterBytecodeArrayRegister, r4, no_reg,
1183 BYTECODE_ARRAY_TYPE); 1172 BYTECODE_ARRAY_TYPE);
1184 __ Assert(eq, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); 1173 __ Assert(eq, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry);
1185 } 1174 }
1186 1175
1187 // Get the target bytecode offset from the frame. 1176 // Get the target bytecode offset from the frame.
1188 __ LoadP(kInterpreterBytecodeOffsetRegister, 1177 __ LoadP(kInterpreterBytecodeOffsetRegister,
1189 MemOperand( 1178 MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp));
1190 kInterpreterRegisterFileRegister,
1191 InterpreterFrameConstants::kBytecodeOffsetFromRegisterPointer));
1192 __ SmiUntag(kInterpreterBytecodeOffsetRegister); 1179 __ SmiUntag(kInterpreterBytecodeOffsetRegister);
1193 1180
1194 // Dispatch to the target bytecode. 1181 // Dispatch to the target bytecode.
1195 __ lbzx(r4, MemOperand(kInterpreterBytecodeArrayRegister, 1182 __ lbzx(r4, MemOperand(kInterpreterBytecodeArrayRegister,
1196 kInterpreterBytecodeOffsetRegister)); 1183 kInterpreterBytecodeOffsetRegister));
1197 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2)); 1184 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2));
1198 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip)); 1185 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip));
1199 __ Jump(ip); 1186 __ Jump(ip);
1200 } 1187 }
1201 1188
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after
2865 __ bkpt(0); 2852 __ bkpt(0);
2866 } 2853 }
2867 } 2854 }
2868 2855
2869 2856
2870 #undef __ 2857 #undef __
2871 } // namespace internal 2858 } // namespace internal
2872 } // namespace v8 2859 } // namespace v8
2873 2860
2874 #endif // V8_TARGET_ARCH_PPC 2861 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | src/ppc/interface-descriptors-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698