| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/interpreter/bytecode-array-writer.h" | 5 #include "src/interpreter/bytecode-array-writer.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/interpreter/bytecode-label.h" | 8 #include "src/interpreter/bytecode-label.h" |
| 9 #include "src/interpreter/bytecode-register.h" | 9 #include "src/interpreter/bytecode-register.h" |
| 10 #include "src/interpreter/constant-array-builder.h" | 10 #include "src/interpreter/constant-array-builder.h" |
| 11 #include "src/log.h" | 11 #include "src/log.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 namespace interpreter { | 15 namespace interpreter { |
| 16 | 16 |
| 17 STATIC_CONST_MEMBER_DEFINITION const size_t | 17 STATIC_CONST_MEMBER_DEFINITION const size_t |
| 18 BytecodeArrayWriter::kMaxSizeOfPackedBytecode; | 18 BytecodeArrayWriter::kMaxSizeOfPackedBytecode; |
| 19 | 19 |
| 20 BytecodeArrayWriter::BytecodeArrayWriter( | 20 BytecodeArrayWriter::BytecodeArrayWriter( |
| 21 Isolate* isolate, Zone* zone, ConstantArrayBuilder* constant_array_builder, | 21 Isolate* isolate, Zone* zone, ConstantArrayBuilder* constant_array_builder, |
| 22 SourcePositionTableBuilder::RecordingMode source_position_mode) | 22 SourcePositionTableBuilder::RecordingMode source_position_mode) |
| 23 : isolate_(isolate), | 23 : isolate_(isolate), |
| 24 bytecodes_(zone), | 24 bytecodes_(zone), |
| 25 max_register_count_(0), | 25 max_register_count_(0), |
| 26 unbound_jumps_(0), | 26 unbound_jumps_(0), |
| 27 source_position_table_builder_(isolate, zone, source_position_mode), | 27 source_position_table_builder_(zone, source_position_mode), |
| 28 constant_array_builder_(constant_array_builder) {} | 28 constant_array_builder_(constant_array_builder) {} |
| 29 | 29 |
| 30 // override | 30 // override |
| 31 BytecodeArrayWriter::~BytecodeArrayWriter() {} | 31 BytecodeArrayWriter::~BytecodeArrayWriter() {} |
| 32 | 32 |
| 33 // override | 33 // override |
| 34 Handle<BytecodeArray> BytecodeArrayWriter::ToBytecodeArray( | 34 Handle<BytecodeArray> BytecodeArrayWriter::ToBytecodeArray( |
| 35 int fixed_register_count, int parameter_count, | 35 int fixed_register_count, int parameter_count, |
| 36 Handle<FixedArray> handler_table) { | 36 Handle<FixedArray> handler_table) { |
| 37 DCHECK_EQ(0, unbound_jumps_); | 37 DCHECK_EQ(0, unbound_jumps_); |
| 38 | 38 |
| 39 int bytecode_size = static_cast<int>(bytecodes()->size()); | 39 int bytecode_size = static_cast<int>(bytecodes()->size()); |
| 40 | 40 |
| 41 // All locals need a frame slot for the debugger, but may not be | 41 // All locals need a frame slot for the debugger, but may not be |
| 42 // present in generated code. | 42 // present in generated code. |
| 43 int frame_size_for_locals = fixed_register_count * kPointerSize; | 43 int frame_size_for_locals = fixed_register_count * kPointerSize; |
| 44 int frame_size_used = max_register_count() * kPointerSize; | 44 int frame_size_used = max_register_count() * kPointerSize; |
| 45 int frame_size = std::max(frame_size_for_locals, frame_size_used); | 45 int frame_size = std::max(frame_size_for_locals, frame_size_used); |
| 46 Handle<FixedArray> constant_pool = constant_array_builder()->ToFixedArray(); | 46 Handle<FixedArray> constant_pool = constant_array_builder()->ToFixedArray(); |
| 47 Handle<BytecodeArray> bytecode_array = isolate_->factory()->NewBytecodeArray( | 47 Handle<BytecodeArray> bytecode_array = isolate_->factory()->NewBytecodeArray( |
| 48 bytecode_size, &bytecodes()->front(), frame_size, parameter_count, | 48 bytecode_size, &bytecodes()->front(), frame_size, parameter_count, |
| 49 constant_pool); | 49 constant_pool); |
| 50 bytecode_array->set_handler_table(*handler_table); | 50 bytecode_array->set_handler_table(*handler_table); |
| 51 Handle<ByteArray> source_position_table = | 51 Handle<ByteArray> source_position_table = |
| 52 source_position_table_builder()->ToSourcePositionTable(); | 52 source_position_table_builder()->ToSourcePositionTable( |
| 53 isolate(), Handle<AbstractCode>::cast(bytecode_array)); |
| 53 bytecode_array->set_source_position_table(*source_position_table); | 54 bytecode_array->set_source_position_table(*source_position_table); |
| 54 source_position_table_builder()->EndJitLogging( | |
| 55 AbstractCode::cast(*bytecode_array)); | |
| 56 return bytecode_array; | 55 return bytecode_array; |
| 57 } | 56 } |
| 58 | 57 |
| 59 // override | 58 // override |
| 60 void BytecodeArrayWriter::Write(BytecodeNode* node) { | 59 void BytecodeArrayWriter::Write(BytecodeNode* node) { |
| 61 DCHECK(!Bytecodes::IsJump(node->bytecode())); | 60 DCHECK(!Bytecodes::IsJump(node->bytecode())); |
| 62 UpdateSourcePositionTable(node); | 61 UpdateSourcePositionTable(node); |
| 63 EmitBytecode(node); | 62 EmitBytecode(node); |
| 64 } | 63 } |
| 65 | 64 |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 node->set_bytecode(node->bytecode(), k32BitJumpPlaceholder); | 383 node->set_bytecode(node->bytecode(), k32BitJumpPlaceholder); |
| 385 break; | 384 break; |
| 386 } | 385 } |
| 387 } | 386 } |
| 388 EmitBytecode(node); | 387 EmitBytecode(node); |
| 389 } | 388 } |
| 390 | 389 |
| 391 } // namespace interpreter | 390 } // namespace interpreter |
| 392 } // namespace internal | 391 } // namespace internal |
| 393 } // namespace v8 | 392 } // namespace v8 |
| OLD | NEW |