| 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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  248                                       FunctionSig* sig) { |  248                                       FunctionSig* sig) { | 
|  249   imports_.push_back({AddSignature(sig), name, name_length}); |  249   imports_.push_back({AddSignature(sig), name, name_length}); | 
|  250   return static_cast<uint32_t>(imports_.size() - 1); |  250   return static_cast<uint32_t>(imports_.size() - 1); | 
|  251 } |  251 } | 
|  252  |  252  | 
|  253 void WasmModuleBuilder::MarkStartFunction(WasmFunctionBuilder* function) { |  253 void WasmModuleBuilder::MarkStartFunction(WasmFunctionBuilder* function) { | 
|  254   start_function_index_ = function->func_index(); |  254   start_function_index_ = function->func_index(); | 
|  255 } |  255 } | 
|  256  |  256  | 
|  257 uint32_t WasmModuleBuilder::AddGlobal(LocalType type, bool exported, |  257 uint32_t WasmModuleBuilder::AddGlobal(LocalType type, bool exported, | 
|  258                                       bool mutability) { |  258                                       bool mutability, | 
|  259   globals_.push_back({type, exported, mutability}); |  259                                       const WasmInitExpr& init) { | 
 |  260   globals_.push_back({type, exported, mutability, init}); | 
|  260   return static_cast<uint32_t>(globals_.size() - 1); |  261   return static_cast<uint32_t>(globals_.size() - 1); | 
|  261 } |  262 } | 
|  262  |  263  | 
|  263 void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { |  264 void WasmModuleBuilder::WriteTo(ZoneBuffer& buffer) const { | 
|  264   uint32_t exports = 0; |  265   uint32_t exports = 0; | 
|  265  |  266  | 
|  266   // == Emit magic ============================================================= |  267   // == Emit magic ============================================================= | 
|  267   TRACE("emit magic\n"); |  268   TRACE("emit magic\n"); | 
|  268   buffer.write_u32(kWasmMagic); |  269   buffer.write_u32(kWasmMagic); | 
|  269   buffer.write_u32(kWasmVersion); |  270   buffer.write_u32(kWasmVersion); | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  337   } |  338   } | 
|  338  |  339  | 
|  339   // == Emit globals =========================================================== |  340   // == Emit globals =========================================================== | 
|  340   if (globals_.size() > 0) { |  341   if (globals_.size() > 0) { | 
|  341     size_t start = EmitSection(kGlobalSectionCode, buffer); |  342     size_t start = EmitSection(kGlobalSectionCode, buffer); | 
|  342     buffer.write_size(globals_.size()); |  343     buffer.write_size(globals_.size()); | 
|  343  |  344  | 
|  344     for (auto global : globals_) { |  345     for (auto global : globals_) { | 
|  345       buffer.write_u8(WasmOpcodes::LocalTypeCodeFor(global.type)); |  346       buffer.write_u8(WasmOpcodes::LocalTypeCodeFor(global.type)); | 
|  346       buffer.write_u8(global.mutability ? 1 : 0); |  347       buffer.write_u8(global.mutability ? 1 : 0); | 
|  347       switch (global.type) { |  348       switch (global.init.kind) { | 
|  348         case kAstI32: { |  349         case WasmInitExpr::kI32Const: { | 
|  349           static const byte code[] = {WASM_I32V_1(0)}; |  350           DCHECK_EQ(kAstI32, global.type); | 
 |  351           const byte code[] = {WASM_I32V_5(global.init.val.i32_const)}; | 
|  350           buffer.write(code, sizeof(code)); |  352           buffer.write(code, sizeof(code)); | 
|  351           break; |  353           break; | 
|  352         } |  354         } | 
|  353         case kAstF32: { |  355         case WasmInitExpr::kI64Const: { | 
|  354           static const byte code[] = {WASM_F32(0)}; |  356           DCHECK_EQ(kAstI64, global.type); | 
 |  357           const byte code[] = {WASM_I64V_10(global.init.val.i64_const)}; | 
|  355           buffer.write(code, sizeof(code)); |  358           buffer.write(code, sizeof(code)); | 
|  356           break; |  359           break; | 
|  357         } |  360         } | 
|  358         case kAstI64: { |  361         case WasmInitExpr::kF32Const: { | 
|  359           static const byte code[] = {WASM_I64V_1(0)}; |  362           DCHECK_EQ(kAstF32, global.type); | 
 |  363           const byte code[] = {WASM_F32(global.init.val.f32_const)}; | 
|  360           buffer.write(code, sizeof(code)); |  364           buffer.write(code, sizeof(code)); | 
|  361           break; |  365           break; | 
|  362         } |  366         } | 
|  363         case kAstF64: { |  367         case WasmInitExpr::kF64Const: { | 
|  364           static const byte code[] = {WASM_F64(0.0)}; |  368           DCHECK_EQ(kAstF64, global.type); | 
 |  369           const byte code[] = {WASM_F64(global.init.val.f64_const)}; | 
|  365           buffer.write(code, sizeof(code)); |  370           buffer.write(code, sizeof(code)); | 
|  366           break; |  371           break; | 
|  367         } |  372         } | 
|  368         default: |  373         case WasmInitExpr::kGlobalIndex: { | 
|  369           UNREACHABLE(); |  374           const byte code[] = {kExprGetGlobal, | 
 |  375                                U32V_5(global.init.val.global_index)}; | 
 |  376           buffer.write(code, sizeof(code)); | 
 |  377           break; | 
 |  378         } | 
 |  379         default: { | 
 |  380           // No initializer, emit a default value. | 
 |  381           switch (global.type) { | 
 |  382             case kAstI32: { | 
 |  383               const byte code[] = {WASM_I32V_1(0)}; | 
 |  384               buffer.write(code, sizeof(code)); | 
 |  385               break; | 
 |  386             } | 
 |  387             case kAstI64: { | 
 |  388               const byte code[] = {WASM_I64V_1(0)}; | 
 |  389               buffer.write(code, sizeof(code)); | 
 |  390               break; | 
 |  391             } | 
 |  392             case kAstF32: { | 
 |  393               const byte code[] = {WASM_F32(0.0)}; | 
 |  394               buffer.write(code, sizeof(code)); | 
 |  395               break; | 
 |  396             } | 
 |  397             case kAstF64: { | 
 |  398               const byte code[] = {WASM_F64(0.0)}; | 
 |  399               buffer.write(code, sizeof(code)); | 
 |  400               break; | 
 |  401             } | 
 |  402             default: | 
 |  403               UNREACHABLE(); | 
 |  404           } | 
 |  405         } | 
|  370       } |  406       } | 
|  371       buffer.write_u8(kExprEnd); |  407       buffer.write_u8(kExprEnd); | 
|  372     } |  408     } | 
|  373     FixupSection(buffer, start); |  409     FixupSection(buffer, start); | 
|  374   } |  410   } | 
|  375  |  411  | 
|  376   // == emit exports =========================================================== |  412   // == emit exports =========================================================== | 
|  377   if (exports > 0) { |  413   if (exports > 0) { | 
|  378     size_t start = EmitSection(kExportSectionCode, buffer); |  414     size_t start = EmitSection(kExportSectionCode, buffer); | 
|  379     buffer.write_u32v(exports); |  415     buffer.write_u32v(exports); | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  450                      function->name_.size()); |  486                      function->name_.size()); | 
|  451       } |  487       } | 
|  452       buffer.write_u8(0); |  488       buffer.write_u8(0); | 
|  453     } |  489     } | 
|  454     FixupSection(buffer, start); |  490     FixupSection(buffer, start); | 
|  455   } |  491   } | 
|  456 } |  492 } | 
|  457 }  // namespace wasm |  493 }  // namespace wasm | 
|  458 }  // namespace internal |  494 }  // namespace internal | 
|  459 }  // namespace v8 |  495 }  // namespace v8 | 
| OLD | NEW |