| 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/signature.h" | 5 #include "src/signature.h" |
| 6 | 6 |
| 7 #include "src/handles.h" | 7 #include "src/handles.h" |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 #include "src/zone/zone-containers.h" | 9 #include "src/zone/zone-containers.h" |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 } | 47 } |
| 48 | 48 |
| 49 WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) | 49 WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) |
| 50 : builder_(builder), | 50 : builder_(builder), |
| 51 locals_(builder->zone()), | 51 locals_(builder->zone()), |
| 52 signature_index_(0), | 52 signature_index_(0), |
| 53 exported_(0), | 53 exported_(0), |
| 54 func_index_(static_cast<uint32_t>(builder->functions_.size())), | 54 func_index_(static_cast<uint32_t>(builder->functions_.size())), |
| 55 body_(builder->zone()), | 55 body_(builder->zone()), |
| 56 name_(builder->zone()), | 56 name_(builder->zone()), |
| 57 exported_name_(builder->zone()), |
| 57 i32_temps_(builder->zone()), | 58 i32_temps_(builder->zone()), |
| 58 i64_temps_(builder->zone()), | 59 i64_temps_(builder->zone()), |
| 59 f32_temps_(builder->zone()), | 60 f32_temps_(builder->zone()), |
| 60 f64_temps_(builder->zone()), | 61 f64_temps_(builder->zone()), |
| 61 direct_calls_(builder->zone()) {} | 62 direct_calls_(builder->zone()) {} |
| 62 | 63 |
| 63 void WasmFunctionBuilder::EmitVarInt(uint32_t val) { | 64 void WasmFunctionBuilder::EmitVarInt(uint32_t val) { |
| 64 byte buffer[8]; | 65 byte buffer[8]; |
| 65 byte* ptr = buffer; | 66 byte* ptr = buffer; |
| 66 LEBHelper::write_u32v(&ptr, val); | 67 LEBHelper::write_u32v(&ptr, val); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 133 |
| 133 void WasmFunctionBuilder::EmitDirectCallIndex(uint32_t index) { | 134 void WasmFunctionBuilder::EmitDirectCallIndex(uint32_t index) { |
| 134 DirectCallIndex call; | 135 DirectCallIndex call; |
| 135 call.offset = body_.size(); | 136 call.offset = body_.size(); |
| 136 call.direct_index = index; | 137 call.direct_index = index; |
| 137 direct_calls_.push_back(call); | 138 direct_calls_.push_back(call); |
| 138 byte code[] = {U32V_5(0)}; | 139 byte code[] = {U32V_5(0)}; |
| 139 EmitCode(code, sizeof(code)); | 140 EmitCode(code, sizeof(code)); |
| 140 } | 141 } |
| 141 | 142 |
| 142 void WasmFunctionBuilder::SetExported() { exported_ = true; } | 143 void WasmFunctionBuilder::Export() { exported_ = true; } |
| 143 | 144 |
| 144 void WasmFunctionBuilder::SetName(const char* name, int name_length) { | 145 void WasmFunctionBuilder::ExportAs(Vector<const char> name) { |
| 145 name_.clear(); | 146 exported_ = true; |
| 146 if (name_length > 0) { | 147 exported_name_.resize(name.length()); |
| 147 for (int i = 0; i < name_length; ++i) { | 148 memcpy(exported_name_.data(), name.start(), name.length()); |
| 148 name_.push_back(*(name + i)); | 149 } |
| 149 } | 150 |
| 150 } | 151 void WasmFunctionBuilder::SetName(Vector<const char> name) { |
| 152 name_.resize(name.length()); |
| 153 memcpy(name_.data(), name.start(), name.length()); |
| 151 } | 154 } |
| 152 | 155 |
| 153 void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { | 156 void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { |
| 154 buffer.write_u32v(signature_index_); | 157 buffer.write_u32v(signature_index_); |
| 155 } | 158 } |
| 156 | 159 |
| 157 void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { | 160 void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { |
| 158 if (exported_) { | 161 if (exported_) { |
| 159 buffer.write_size(name_.size()); | 162 const ZoneVector<char>* exported_name = |
| 160 if (name_.size() > 0) { | 163 exported_name_.size() == 0 ? &name_ : &exported_name_; |
| 161 buffer.write(reinterpret_cast<const byte*>(&name_[0]), name_.size()); | 164 buffer.write_size(exported_name->size()); |
| 162 } | 165 buffer.write(reinterpret_cast<const byte*>(exported_name->data()), |
| 166 exported_name->size()); |
| 163 buffer.write_u8(kExternalFunction); | 167 buffer.write_u8(kExternalFunction); |
| 164 buffer.write_u32v(func_index_ + | 168 buffer.write_u32v(func_index_ + |
| 165 static_cast<uint32_t>(builder_->imports_.size())); | 169 static_cast<uint32_t>(builder_->imports_.size())); |
| 166 } | 170 } |
| 167 } | 171 } |
| 168 | 172 |
| 169 void WasmFunctionBuilder::WriteBody(ZoneBuffer& buffer) const { | 173 void WasmFunctionBuilder::WriteBody(ZoneBuffer& buffer) const { |
| 170 size_t locals_size = locals_.Size(); | 174 size_t locals_size = locals_.Size(); |
| 171 buffer.write_size(locals_size + body_.size()); | 175 buffer.write_size(locals_size + body_.size()); |
| 172 buffer.EnsureSpace(locals_size); | 176 buffer.EnsureSpace(locals_size); |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 function->name_.size()); | 490 function->name_.size()); |
| 487 } | 491 } |
| 488 buffer.write_u8(0); | 492 buffer.write_u8(0); |
| 489 } | 493 } |
| 490 FixupSection(buffer, start); | 494 FixupSection(buffer, start); |
| 491 } | 495 } |
| 492 } | 496 } |
| 493 } // namespace wasm | 497 } // namespace wasm |
| 494 } // namespace internal | 498 } // namespace internal |
| 495 } // namespace v8 | 499 } // namespace v8 |
| OLD | NEW |