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

Side by Side Diff: src/mips64/lithium-codegen-mips64.cc

Issue 587473003: Removed confusing defensive programming in GenerateJumpTable. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/mips64/lithium-codegen-mips64.h ('k') | src/x64/lithium-codegen-x64.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 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/hydrogen-osr.h" 9 #include "src/hydrogen-osr.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 bool LCodeGen::GenerateCode() { 44 bool LCodeGen::GenerateCode() {
45 LPhase phase("Z_Code generation", chunk()); 45 LPhase phase("Z_Code generation", chunk());
46 DCHECK(is_unused()); 46 DCHECK(is_unused());
47 status_ = GENERATING; 47 status_ = GENERATING;
48 48
49 // Open a frame scope to indicate that there is a frame on the stack. The 49 // Open a frame scope to indicate that there is a frame on the stack. The
50 // NONE indicates that the scope shouldn't actually generate code to set up 50 // NONE indicates that the scope shouldn't actually generate code to set up
51 // the frame (that is done in GeneratePrologue). 51 // the frame (that is done in GeneratePrologue).
52 FrameScope frame_scope(masm_, StackFrame::NONE); 52 FrameScope frame_scope(masm_, StackFrame::NONE);
53 53
54 return GeneratePrologue() && 54 return GeneratePrologue() && GenerateBody() && GenerateDeferredCode() &&
55 GenerateBody() && 55 GenerateJumpTable() && GenerateSafepointTable();
56 GenerateDeferredCode() &&
57 GenerateDeoptJumpTable() &&
58 GenerateSafepointTable();
59 } 56 }
60 57
61 58
62 void LCodeGen::FinishCode(Handle<Code> code) { 59 void LCodeGen::FinishCode(Handle<Code> code) {
63 DCHECK(is_done()); 60 DCHECK(is_done());
64 code->set_stack_slots(GetStackSlotCount()); 61 code->set_stack_slots(GetStackSlotCount());
65 code->set_safepoint_table_offset(safepoints_.GetCodeOffset()); 62 code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
66 if (code->is_optimized_code()) RegisterWeakObjectsInOptimizedCode(code); 63 if (code->is_optimized_code()) RegisterWeakObjectsInOptimizedCode(code);
67 PopulateDeoptimizationData(code); 64 PopulateDeoptimizationData(code);
68 } 65 }
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 __ jmp(code->exit()); 292 __ jmp(code->exit());
296 } 293 }
297 } 294 }
298 // Deferred code is the last part of the instruction sequence. Mark 295 // Deferred code is the last part of the instruction sequence. Mark
299 // the generated code as done unless we bailed out. 296 // the generated code as done unless we bailed out.
300 if (!is_aborted()) status_ = DONE; 297 if (!is_aborted()) status_ = DONE;
301 return !is_aborted(); 298 return !is_aborted();
302 } 299 }
303 300
304 301
305 bool LCodeGen::GenerateDeoptJumpTable() { 302 bool LCodeGen::GenerateJumpTable() {
306 if (deopt_jump_table_.length() > 0) { 303 if (deopt_jump_table_.length() > 0) {
307 Comment(";;; -------------------- Jump table --------------------"); 304 Comment(";;; -------------------- Jump table --------------------");
308 } 305 }
309 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_); 306 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_);
310 Label table_start; 307 Label table_start;
311 __ bind(&table_start); 308 __ bind(&table_start);
312 Label needs_frame; 309 Label needs_frame;
313 for (int i = 0; i < deopt_jump_table_.length(); i++) { 310 for (int i = 0; i < deopt_jump_table_.length(); i++) {
314 __ bind(&deopt_jump_table_[i].label); 311 __ bind(&deopt_jump_table_[i].label);
315 Address entry = deopt_jump_table_[i].address; 312 Address entry = deopt_jump_table_[i].address;
316 Deoptimizer::BailoutType type = deopt_jump_table_[i].bailout_type; 313 Deoptimizer::BailoutType type = deopt_jump_table_[i].bailout_type;
317 int id = Deoptimizer::GetDeoptimizationId(isolate(), entry, type); 314 int id = Deoptimizer::GetDeoptimizationId(isolate(), entry, type);
318 if (id == Deoptimizer::kNotDeoptimizationEntry) { 315 DCHECK_NE(Deoptimizer::kNotDeoptimizationEntry, id);
319 Comment(";;; jump table entry %d.", i); 316 Comment(";;; jump table entry %d: deoptimization bailout %d.", i, id);
320 } else {
321 Comment(";;; jump table entry %d: deoptimization bailout %d.", i, id);
322 }
323 __ li(t9, Operand(ExternalReference::ForDeoptEntry(entry))); 317 __ li(t9, Operand(ExternalReference::ForDeoptEntry(entry)));
324 if (deopt_jump_table_[i].needs_frame) { 318 if (deopt_jump_table_[i].needs_frame) {
325 DCHECK(!info()->saves_caller_doubles()); 319 DCHECK(!info()->saves_caller_doubles());
326 if (needs_frame.is_bound()) { 320 if (needs_frame.is_bound()) {
327 __ Branch(&needs_frame); 321 __ Branch(&needs_frame);
328 } else { 322 } else {
329 __ bind(&needs_frame); 323 __ bind(&needs_frame);
330 __ MultiPush(cp.bit() | fp.bit() | ra.bit()); 324 __ MultiPush(cp.bit() | fp.bit() | ra.bit());
331 // This variant of deopt can only be used with stubs. Since we don't 325 // This variant of deopt can only be used with stubs. Since we don't
332 // have a function pointer to install in the stack frame that we're 326 // have a function pointer to install in the stack frame that we're
(...skipping 5618 matching lines...) Expand 10 before | Expand all | Expand 10 after
5951 __ li(at, scope_info); 5945 __ li(at, scope_info);
5952 __ Push(at, ToRegister(instr->function())); 5946 __ Push(at, ToRegister(instr->function()));
5953 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5947 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5954 RecordSafepoint(Safepoint::kNoLazyDeopt); 5948 RecordSafepoint(Safepoint::kNoLazyDeopt);
5955 } 5949 }
5956 5950
5957 5951
5958 #undef __ 5952 #undef __
5959 5953
5960 } } // namespace v8::internal 5954 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.h ('k') | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698