| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 if (FLAG_trace_codegen) { | 284 if (FLAG_trace_codegen) { |
| 285 PrintF("Full Compiler - "); | 285 PrintF("Full Compiler - "); |
| 286 } | 286 } |
| 287 CodeGenerator::MakeCodePrologue(info); | 287 CodeGenerator::MakeCodePrologue(info); |
| 288 const int kInitialBufferSize = 4 * KB; | 288 const int kInitialBufferSize = 4 * KB; |
| 289 MacroAssembler masm(info->isolate(), NULL, kInitialBufferSize); | 289 MacroAssembler masm(info->isolate(), NULL, kInitialBufferSize); |
| 290 #ifdef ENABLE_GDB_JIT_INTERFACE | 290 #ifdef ENABLE_GDB_JIT_INTERFACE |
| 291 masm.positions_recorder()->StartGDBJITLineInfoRecording(); | 291 masm.positions_recorder()->StartGDBJITLineInfoRecording(); |
| 292 #endif | 292 #endif |
| 293 | 293 |
| 294 FullCodeGenerator cgen(&masm); | 294 FullCodeGenerator cgen(&masm, info); |
| 295 cgen.Generate(info); | 295 cgen.Generate(); |
| 296 if (cgen.HasStackOverflow()) { | 296 if (cgen.HasStackOverflow()) { |
| 297 ASSERT(!isolate->has_pending_exception()); | 297 ASSERT(!isolate->has_pending_exception()); |
| 298 return false; | 298 return false; |
| 299 } | 299 } |
| 300 unsigned table_offset = cgen.EmitStackCheckTable(); | 300 unsigned table_offset = cgen.EmitStackCheckTable(); |
| 301 | 301 |
| 302 Code::Flags flags = Code::ComputeFlags(Code::FUNCTION); | 302 Code::Flags flags = Code::ComputeFlags(Code::FUNCTION); |
| 303 Handle<Code> code = CodeGenerator::MakeCodeEpilogue(&masm, flags, info); | 303 Handle<Code> code = CodeGenerator::MakeCodeEpilogue(&masm, flags, info); |
| 304 code->set_optimizable(info->IsOptimizable()); | 304 code->set_optimizable(info->IsOptimizable()); |
| 305 cgen.PopulateDeoptimizationData(code); | 305 cgen.PopulateDeoptimizationData(code); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 #endif | 397 #endif |
| 398 } | 398 } |
| 399 | 399 |
| 400 | 400 |
| 401 void FullCodeGenerator::PrepareForBailoutForId(unsigned id, State state) { | 401 void FullCodeGenerator::PrepareForBailoutForId(unsigned id, State state) { |
| 402 // There's no need to prepare this code for bailouts from already optimized | 402 // There's no need to prepare this code for bailouts from already optimized |
| 403 // code or code that can't be optimized. | 403 // code or code that can't be optimized. |
| 404 if (!info_->HasDeoptimizationSupport()) return; | 404 if (!info_->HasDeoptimizationSupport()) return; |
| 405 unsigned pc_and_state = | 405 unsigned pc_and_state = |
| 406 StateField::encode(state) | PcField::encode(masm_->pc_offset()); | 406 StateField::encode(state) | PcField::encode(masm_->pc_offset()); |
| 407 ASSERT(Smi::IsValid(pc_and_state)); |
| 407 BailoutEntry entry = { id, pc_and_state }; | 408 BailoutEntry entry = { id, pc_and_state }; |
| 408 #ifdef DEBUG | 409 #ifdef DEBUG |
| 409 if (FLAG_enable_slow_asserts) { | 410 if (FLAG_enable_slow_asserts) { |
| 410 // Assert that we don't have multiple bailout entries for the same node. | 411 // Assert that we don't have multiple bailout entries for the same node. |
| 411 for (int i = 0; i < bailout_entries_.length(); i++) { | 412 for (int i = 0; i < bailout_entries_.length(); i++) { |
| 412 if (bailout_entries_.at(i).id == entry.id) { | 413 if (bailout_entries_.at(i).id == entry.id) { |
| 413 AstPrinter printer; | 414 AstPrinter printer; |
| 414 PrintF("%s", printer.PrintProgram(info_->function())); | 415 PrintF("%s", printer.PrintProgram(info_->function())); |
| 415 UNREACHABLE(); | 416 UNREACHABLE(); |
| 416 } | 417 } |
| (...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1380 } | 1381 } |
| 1381 | 1382 |
| 1382 return false; | 1383 return false; |
| 1383 } | 1384 } |
| 1384 | 1385 |
| 1385 | 1386 |
| 1386 #undef __ | 1387 #undef __ |
| 1387 | 1388 |
| 1388 | 1389 |
| 1389 } } // namespace v8::internal | 1390 } } // namespace v8::internal |
| OLD | NEW |