OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 // Used for encoding f32 and double constants to bits. | 5 // Used for encoding f32 and double constants to bits. |
6 let __buffer = new ArrayBuffer(8); | 6 let __buffer = new ArrayBuffer(8); |
7 let byte_view = new Int8Array(__buffer); | 7 let byte_view = new Int8Array(__buffer); |
8 let f32_view = new Float32Array(__buffer); | 8 let f32_view = new Float32Array(__buffer); |
9 let f64_view = new Float64Array(__buffer); | 9 let f64_view = new Float64Array(__buffer); |
10 | 10 |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 if (wasm.globals.length > 0) { | 346 if (wasm.globals.length > 0) { |
347 if (debug) print ("emitting globals @ " + binary.length); | 347 if (debug) print ("emitting globals @ " + binary.length); |
348 binary.emit_section(kGlobalSectionCode, section => { | 348 binary.emit_section(kGlobalSectionCode, section => { |
349 section.emit_u32v(wasm.globals.length); | 349 section.emit_u32v(wasm.globals.length); |
350 for (let global of wasm.globals) { | 350 for (let global of wasm.globals) { |
351 section.emit_u8(global.type); | 351 section.emit_u8(global.type); |
352 section.emit_u8(global.mutable); | 352 section.emit_u8(global.mutable); |
353 if ((typeof global.init_index) == "undefined") { | 353 if ((typeof global.init_index) == "undefined") { |
354 // Emit a constant initializer. | 354 // Emit a constant initializer. |
355 switch (global.type) { | 355 switch (global.type) { |
356 case kAstI32: | 356 case kWasmI32: |
357 section.emit_u8(kExprI32Const); | 357 section.emit_u8(kExprI32Const); |
358 section.emit_u32v(global.init); | 358 section.emit_u32v(global.init); |
359 break; | 359 break; |
360 case kAstI64: | 360 case kWasmI64: |
361 section.emit_u8(kExprI64Const); | 361 section.emit_u8(kExprI64Const); |
362 section.emit_u8(global.init); | 362 section.emit_u8(global.init); |
363 break; | 363 break; |
364 case kAstF32: | 364 case kWasmF32: |
365 section.emit_u8(kExprF32Const); | 365 section.emit_u8(kExprF32Const); |
366 f32_view[0] = global.init; | 366 f32_view[0] = global.init; |
367 section.emit_u8(byte_view[0]); | 367 section.emit_u8(byte_view[0]); |
368 section.emit_u8(byte_view[1]); | 368 section.emit_u8(byte_view[1]); |
369 section.emit_u8(byte_view[2]); | 369 section.emit_u8(byte_view[2]); |
370 section.emit_u8(byte_view[3]); | 370 section.emit_u8(byte_view[3]); |
371 break; | 371 break; |
372 case kAstF64: | 372 case kWasmF64: |
373 section.emit_u8(kExprF64Const); | 373 section.emit_u8(kExprF64Const); |
374 f64_view[0] = global.init; | 374 f64_view[0] = global.init; |
375 section.emit_u8(byte_view[0]); | 375 section.emit_u8(byte_view[0]); |
376 section.emit_u8(byte_view[1]); | 376 section.emit_u8(byte_view[1]); |
377 section.emit_u8(byte_view[2]); | 377 section.emit_u8(byte_view[2]); |
378 section.emit_u8(byte_view[3]); | 378 section.emit_u8(byte_view[3]); |
379 section.emit_u8(byte_view[4]); | 379 section.emit_u8(byte_view[4]); |
380 section.emit_u8(byte_view[5]); | 380 section.emit_u8(byte_view[5]); |
381 section.emit_u8(byte_view[6]); | 381 section.emit_u8(byte_view[6]); |
382 section.emit_u8(byte_view[7]); | 382 section.emit_u8(byte_view[7]); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 if (debug) print("emitting code @ " + binary.length); | 450 if (debug) print("emitting code @ " + binary.length); |
451 binary.emit_section(kCodeSectionCode, section => { | 451 binary.emit_section(kCodeSectionCode, section => { |
452 section.emit_u32v(wasm.functions.length); | 452 section.emit_u32v(wasm.functions.length); |
453 for (let func of wasm.functions) { | 453 for (let func of wasm.functions) { |
454 // Function body length will be patched later. | 454 // Function body length will be patched later. |
455 let local_decls = []; | 455 let local_decls = []; |
456 let l = func.locals; | 456 let l = func.locals; |
457 if (l != undefined) { | 457 if (l != undefined) { |
458 let local_decls_count = 0; | 458 let local_decls_count = 0; |
459 if (l.i32_count > 0) { | 459 if (l.i32_count > 0) { |
460 local_decls.push({count: l.i32_count, type: kAstI32}); | 460 local_decls.push({count: l.i32_count, type: kWasmI32}); |
461 } | 461 } |
462 if (l.i64_count > 0) { | 462 if (l.i64_count > 0) { |
463 local_decls.push({count: l.i64_count, type: kAstI64}); | 463 local_decls.push({count: l.i64_count, type: kWasmI64}); |
464 } | 464 } |
465 if (l.f32_count > 0) { | 465 if (l.f32_count > 0) { |
466 local_decls.push({count: l.f32_count, type: kAstF32}); | 466 local_decls.push({count: l.f32_count, type: kWasmF32}); |
467 } | 467 } |
468 if (l.f64_count > 0) { | 468 if (l.f64_count > 0) { |
469 local_decls.push({count: l.f64_count, type: kAstF64}); | 469 local_decls.push({count: l.f64_count, type: kWasmF64}); |
470 } | 470 } |
471 } | 471 } |
472 | 472 |
473 let header = new Binary; | 473 let header = new Binary; |
474 header.emit_u32v(local_decls.length); | 474 header.emit_u32v(local_decls.length); |
475 for (let decl of local_decls) { | 475 for (let decl of local_decls) { |
476 header.emit_u32v(decl.count); | 476 header.emit_u32v(decl.count); |
477 header.emit_u8(decl.type); | 477 header.emit_u8(decl.type); |
478 } | 478 } |
479 | 479 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 } | 546 } |
547 return buffer; | 547 return buffer; |
548 } | 548 } |
549 | 549 |
550 instantiate(...args) { | 550 instantiate(...args) { |
551 let module = new WebAssembly.Module(this.toBuffer()); | 551 let module = new WebAssembly.Module(this.toBuffer()); |
552 let instance = new WebAssembly.Instance(module, ...args); | 552 let instance = new WebAssembly.Instance(module, ...args); |
553 return instance; | 553 return instance; |
554 } | 554 } |
555 } | 555 } |
OLD | NEW |