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

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

Issue 2927813004: PPC/s390: [debug] Untangle DebugInfo from break point support (Closed)
Patch Set: Created 3 years, 6 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/builtins/s390/builtins-s390.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 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 __ LoadP( 1079 __ LoadP(
1080 optimized_code_entry, 1080 optimized_code_entry,
1081 FieldMemOperand(r3, FeedbackVector::kOptimizedCodeIndex * kPointerSize + 1081 FieldMemOperand(r3, FeedbackVector::kOptimizedCodeIndex * kPointerSize +
1082 FeedbackVector::kHeaderSize)); 1082 FeedbackVector::kHeaderSize));
1083 __ LoadP(optimized_code_entry, 1083 __ LoadP(optimized_code_entry,
1084 FieldMemOperand(optimized_code_entry, WeakCell::kValueOffset)); 1084 FieldMemOperand(optimized_code_entry, WeakCell::kValueOffset));
1085 __ JumpIfNotSmi(optimized_code_entry, &switch_to_optimized_code); 1085 __ JumpIfNotSmi(optimized_code_entry, &switch_to_optimized_code);
1086 1086
1087 // Get the bytecode array from the function object (or from the DebugInfo if 1087 // Get the bytecode array from the function object (or from the DebugInfo if
1088 // it is present) and load it into kInterpreterBytecodeArrayRegister. 1088 // it is present) and load it into kInterpreterBytecodeArrayRegister.
1089 Label maybe_load_debug_bytecode_array, bytecode_array_loaded;
1089 __ LoadP(r3, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 1090 __ LoadP(r3, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
1090 Label array_done;
1091 Register debug_info = r5;
1092 DCHECK(!debug_info.is(r3));
1093 __ LoadP(debug_info,
1094 FieldMemOperand(r3, SharedFunctionInfo::kDebugInfoOffset));
1095 // Load original bytecode array or the debug copy. 1091 // Load original bytecode array or the debug copy.
1096 __ LoadP(kInterpreterBytecodeArrayRegister, 1092 __ LoadP(kInterpreterBytecodeArrayRegister,
1097 FieldMemOperand(r3, SharedFunctionInfo::kFunctionDataOffset)); 1093 FieldMemOperand(r3, SharedFunctionInfo::kFunctionDataOffset));
1098 __ TestIfSmi(debug_info, r0); 1094 __ LoadP(r5, FieldMemOperand(r3, SharedFunctionInfo::kDebugInfoOffset));
1099 __ beq(&array_done, cr0); 1095 __ TestIfSmi(r5, r0);
1100 __ LoadP(kInterpreterBytecodeArrayRegister, 1096 __ bne(&maybe_load_debug_bytecode_array, cr0);
1101 FieldMemOperand(debug_info, DebugInfo::kDebugBytecodeArrayOffset)); 1097 __ bind(&bytecode_array_loaded);
1102 __ bind(&array_done);
1103 1098
1104 // Check whether we should continue to use the interpreter. 1099 // Check whether we should continue to use the interpreter.
1105 // TODO(rmcilroy) Remove self healing once liveedit only has to deal with 1100 // TODO(rmcilroy) Remove self healing once liveedit only has to deal with
1106 // Ignition bytecode. 1101 // Ignition bytecode.
1107 Label switch_to_different_code_kind; 1102 Label switch_to_different_code_kind;
1108 __ LoadP(r3, FieldMemOperand(r3, SharedFunctionInfo::kCodeOffset)); 1103 __ LoadP(r3, FieldMemOperand(r3, SharedFunctionInfo::kCodeOffset));
1109 __ mov(ip, Operand(masm->CodeObject())); // Self-reference to this code. 1104 __ mov(ip, Operand(masm->CodeObject())); // Self-reference to this code.
1110 __ cmp(r3, ip); 1105 __ cmp(r3, ip);
1111 __ bne(&switch_to_different_code_kind); 1106 __ bne(&switch_to_different_code_kind);
1112 1107
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2)); 1181 __ ShiftLeftImm(ip, r4, Operand(kPointerSizeLog2));
1187 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip)); 1182 __ LoadPX(ip, MemOperand(kInterpreterDispatchTableRegister, ip));
1188 __ Call(ip); 1183 __ Call(ip);
1189 1184
1190 masm->isolate()->heap()->SetInterpreterEntryReturnPCOffset(masm->pc_offset()); 1185 masm->isolate()->heap()->SetInterpreterEntryReturnPCOffset(masm->pc_offset());
1191 1186
1192 // The return value is in r3. 1187 // The return value is in r3.
1193 LeaveInterpreterFrame(masm, r5); 1188 LeaveInterpreterFrame(masm, r5);
1194 __ blr(); 1189 __ blr();
1195 1190
1191 // Load debug copy of the bytecode array if it exists.
1192 // kInterpreterBytecodeArrayRegister is already loaded with
1193 // SharedFunctionInfo::kFunctionDataOffset.
1194 Label done;
1195 __ bind(&maybe_load_debug_bytecode_array);
1196 __ LoadP(ip, FieldMemOperand(r5, DebugInfo::kFlagsOffset));
1197 __ SmiUntag(ip);
1198 __ andi(r0, ip, Operand(DebugInfo::kHasBreakInfo));
1199 __ beq(&done, cr0);
1200 __ LoadP(kInterpreterBytecodeArrayRegister,
1201 FieldMemOperand(r5, DebugInfo::kDebugBytecodeArrayOffset));
1202 __ bind(&done);
1203 __ b(&bytecode_array_loaded);
1204
1196 // If the shared code is no longer this entry trampoline, then the underlying 1205 // If the shared code is no longer this entry trampoline, then the underlying
1197 // function has been switched to a different kind of code and we heal the 1206 // function has been switched to a different kind of code and we heal the
1198 // closure by switching the code entry field over to the new code as well. 1207 // closure by switching the code entry field over to the new code as well.
1199 __ bind(&switch_to_different_code_kind); 1208 __ bind(&switch_to_different_code_kind);
1200 __ LeaveFrame(StackFrame::JAVA_SCRIPT); 1209 __ LeaveFrame(StackFrame::JAVA_SCRIPT);
1201 __ LoadP(r7, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 1210 __ LoadP(r7, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
1202 __ LoadP(r7, FieldMemOperand(r7, SharedFunctionInfo::kCodeOffset)); 1211 __ LoadP(r7, FieldMemOperand(r7, SharedFunctionInfo::kCodeOffset));
1203 __ addi(r7, r7, Operand(Code::kHeaderSize - kHeapObjectTag)); 1212 __ addi(r7, r7, Operand(Code::kHeaderSize - kHeapObjectTag));
1204 __ StoreP(r7, FieldMemOperand(r4, JSFunction::kCodeEntryOffset), r0); 1213 __ StoreP(r7, FieldMemOperand(r4, JSFunction::kCodeEntryOffset), r0);
1205 __ RecordWriteCodeEntryField(r4, r7, r8); 1214 __ RecordWriteCodeEntryField(r4, r7, r8);
(...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after
3180 } 3189 }
3181 // Now jump to the instructions of the returned code object. 3190 // Now jump to the instructions of the returned code object.
3182 __ Jump(r11); 3191 __ Jump(r11);
3183 } 3192 }
3184 3193
3185 #undef __ 3194 #undef __
3186 } // namespace internal 3195 } // namespace internal
3187 } // namespace v8 3196 } // namespace v8
3188 3197
3189 #endif // V8_TARGET_ARCH_PPC 3198 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | src/builtins/s390/builtins-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698