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

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

Issue 901083004: Contribution of PowerPC port (continuation of 422063005) - PPC dir update (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Contribution of PowerPC port (continuation of 422063005) - PPC dir update -comments and rebase Created 5 years, 10 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/ppc/constants-ppc.h ('k') | src/ppc/disasm-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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/deoptimizer.h" 8 #include "src/deoptimizer.h"
9 #include "src/full-codegen.h" 9 #include "src/full-codegen.h"
10 #include "src/safepoint-table.h" 10 #include "src/safepoint-table.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15 const int Deoptimizer::table_entry_size_ = 8; 15 const int Deoptimizer::table_entry_size_ = 8;
16 16
17 17
18 int Deoptimizer::patch_size() { 18 int Deoptimizer::patch_size() {
19 #if V8_TARGET_ARCH_PPC64 19 #if V8_TARGET_ARCH_PPC64
20 const int kCallInstructionSizeInWords = 7; 20 const int kCallInstructionSizeInWords = 7;
21 #else 21 #else
22 const int kCallInstructionSizeInWords = 4; 22 const int kCallInstructionSizeInWords = 4;
23 #endif 23 #endif
24 return kCallInstructionSizeInWords * Assembler::kInstrSize; 24 return kCallInstructionSizeInWords * Assembler::kInstrSize;
25 } 25 }
26 26
27 27
28 void Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(Handle<Code> code) {
29 // Empty because there is no need for relocation information for the code
30 // patching in Deoptimizer::PatchCodeForDeoptimization below.
31 }
32
33
28 void Deoptimizer::PatchCodeForDeoptimization(Isolate* isolate, Code* code) { 34 void Deoptimizer::PatchCodeForDeoptimization(Isolate* isolate, Code* code) {
29 Address code_start_address = code->instruction_start(); 35 Address code_start_address = code->instruction_start();
30 36
31 // Invalidate the relocation information, as it will become invalid by the 37 // Invalidate the relocation information, as it will become invalid by the
32 // code patching below, and is not needed any more. 38 // code patching below, and is not needed any more.
33 code->InvalidateRelocation(); 39 code->InvalidateRelocation();
34 40
35 if (FLAG_zap_code_space) { 41 if (FLAG_zap_code_space) {
36 // Fail hard and early if we enter this code object again. 42 // Fail hard and early if we enter this code object again.
37 byte* pointer = code->FindCodeAgeSequence(); 43 byte* pointer = code->FindCodeAgeSequence();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 prev_call_address = call_address; 85 prev_call_address = call_address;
80 #endif 86 #endif
81 } 87 }
82 } 88 }
83 89
84 90
85 void Deoptimizer::FillInputFrame(Address tos, JavaScriptFrame* frame) { 91 void Deoptimizer::FillInputFrame(Address tos, JavaScriptFrame* frame) {
86 // Set the register values. The values are not important as there are no 92 // Set the register values. The values are not important as there are no
87 // callee saved registers in JavaScript frames, so all registers are 93 // callee saved registers in JavaScript frames, so all registers are
88 // spilled. Registers fp and sp are set to the correct values though. 94 // spilled. Registers fp and sp are set to the correct values though.
95 // We ensure the values are Smis to avoid confusing the garbage
96 // collector in the event that any values are retreived and stored
97 // elsewhere.
89 98
90 for (int i = 0; i < Register::kNumRegisters; i++) { 99 for (int i = 0; i < Register::kNumRegisters; i++) {
91 input_->SetRegister(i, i * 4); 100 input_->SetRegister(i, reinterpret_cast<intptr_t>(Smi::FromInt(i)));
92 } 101 }
93 input_->SetRegister(sp.code(), reinterpret_cast<intptr_t>(frame->sp())); 102 input_->SetRegister(sp.code(), reinterpret_cast<intptr_t>(frame->sp()));
94 input_->SetRegister(fp.code(), reinterpret_cast<intptr_t>(frame->fp())); 103 input_->SetRegister(fp.code(), reinterpret_cast<intptr_t>(frame->fp()));
95 for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); i++) { 104 for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); i++) {
96 input_->SetDoubleRegister(i, 0.0); 105 input_->SetDoubleRegister(i, 0.0);
97 } 106 }
98 107
99 // Fill the frame content from the actual data on the frame. 108 // Fill the frame content from the actual data on the frame.
100 for (unsigned i = 0; i < input_->GetFrameSize(); i += kPointerSize) { 109 for (unsigned i = 0; i < input_->GetFrameSize(); i += kPointerSize) {
101 input_->SetFrameSlot( 110 input_->SetFrameSlot(
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 #else 359 #else
351 // No out-of-line constant pool support. 360 // No out-of-line constant pool support.
352 UNREACHABLE(); 361 UNREACHABLE();
353 #endif 362 #endif
354 } 363 }
355 364
356 365
357 #undef __ 366 #undef __
358 } 367 }
359 } // namespace v8::internal 368 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ppc/constants-ppc.h ('k') | src/ppc/disasm-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698