diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-12-07 14:11:55 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-12-07 14:11:55 -0800 |
commit | 0fb0a68db70f2720d93a182129e73e4a0eaeb3cb (patch) | |
tree | 263f7bfedd28d9ac9edc34df02b9853e1f81c581 | |
parent | c44dc7b23fae93222c8a38da53e50c0b0aaa0366 (diff) | |
download | binaryen-0fb0a68db70f2720d93a182129e73e4a0eaeb3cb.tar.gz binaryen-0fb0a68db70f2720d93a182129e73e4a0eaeb3cb.tar.bz2 binaryen-0fb0a68db70f2720d93a182129e73e4a0eaeb3cb.zip |
import Math.imul
-rw-r--r-- | src/wasm2asm.h | 44 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.2asm.js | 1 | ||||
-rw-r--r-- | test/hello_world.2asm.js | 1 | ||||
-rw-r--r-- | test/min.2asm.js | 1 | ||||
-rw-r--r-- | test/unit.2asm.js | 1 |
5 files changed, 34 insertions, 14 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h index 0dec0722c..e57a0cff8 100644 --- a/src/wasm2asm.h +++ b/src/wasm2asm.h @@ -162,7 +162,7 @@ private: // All our function tables have the same size TODO: optimize? size_t tableSize; - void addHeaps(Ref ast); + void addBasics(Ref ast); }; Ref Wasm2AsmBuilder::processWasm(Module* wasm) { @@ -173,8 +173,8 @@ Ref Wasm2AsmBuilder::processWasm(Module* wasm) { ValueBuilder::appendArgumentToFunction(asmFunc, ENV); ValueBuilder::appendArgumentToFunction(asmFunc, BUFFER); asmFunc[3]->push_back(ValueBuilder::makeStatement(ValueBuilder::makeString(USE_ASM))); - // create heaps - addHeaps(asmFunc[3]); + // create heaps, etc + addBasics(asmFunc[3]); // figure out the table size tableSize = wasm->table.names.size(); size_t pow2ed = 1; @@ -193,9 +193,9 @@ Ref Wasm2AsmBuilder::processWasm(Module* wasm) { return ret; } -void Wasm2AsmBuilder::addHeaps(Ref ast) { - // var HEAP8 = new global.Int8Array(buffer); etc - auto add = [&](IString name, IString view) { +void Wasm2AsmBuilder::addBasics(Ref ast) { + // heaps, var HEAP8 = new global.Int8Array(buffer); etc + auto addHeap = [&](IString name, IString view) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar(theVar, @@ -211,14 +211,30 @@ void Wasm2AsmBuilder::addHeaps(Ref ast) { ) ); }; - add(HEAP8, INT8ARRAY); - add(HEAP16, INT16ARRAY); - add(HEAP32, INT32ARRAY); - add(HEAPU8, UINT8ARRAY); - add(HEAPU16, UINT16ARRAY); - add(HEAPU32, UINT32ARRAY); - add(HEAPF32, FLOAT32ARRAY); - add(HEAPF64, FLOAT64ARRAY); + addHeap(HEAP8, INT8ARRAY); + addHeap(HEAP16, INT16ARRAY); + addHeap(HEAP32, INT32ARRAY); + addHeap(HEAPU8, UINT8ARRAY); + addHeap(HEAPU16, UINT16ARRAY); + addHeap(HEAPU32, UINT32ARRAY); + addHeap(HEAPF32, FLOAT32ARRAY); + addHeap(HEAPF64, FLOAT64ARRAY); + // core asm.js imports + auto addMath = [&](IString name, IString base) { + Ref theVar = ValueBuilder::makeVar(); + ast->push_back(theVar); + ValueBuilder::appendToVar(theVar, + name, + ValueBuilder::makeDot( + ValueBuilder::makeDot( + ValueBuilder::makeName(GLOBAL), + MATH + ), + base + ) + ); + }; + addMath(MATH_IMUL, IMUL); } Ref Wasm2AsmBuilder::processFunction(Function* func) { diff --git a/test/emcc_O2_hello_world.2asm.js b/test/emcc_O2_hello_world.2asm.js index 98331025f..63d1f62bb 100644 --- a/test/emcc_O2_hello_world.2asm.js +++ b/test/emcc_O2_hello_world.2asm.js @@ -8,6 +8,7 @@ function asmFunc(global, env, buffer) { var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; function _malloc(i1) { i1 = i1 | 0; var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, i40 = 0, i41 = 0, i42 = 0, i43 = 0, i44 = 0, i45 = 0, i46 = 0, i47 = 0, i48 = 0, i49 = 0, i50 = 0, i51 = 0, i52 = 0, i53 = 0, i54 = 0, i55 = 0, i56 = 0, i57 = 0, i58 = 0, i59 = 0, i60 = 0, i61 = 0, i62 = 0, i63 = 0, i64 = 0, i65 = 0, i66 = 0, i67 = 0, i68 = 0, i69 = 0, i70 = 0, i71 = 0, i72 = 0, i73 = 0, i74 = 0, i75 = 0, i76 = 0, i77 = 0, i78 = 0, i79 = 0, i80 = 0, i81 = 0, i82 = 0, i83 = 0, i84 = 0, i85 = 0, i86 = 0, i87 = 0, i88 = 0, i89 = 0, i90 = 0, i91 = 0, i92 = 0, wasm2asm_i32$3 = 0, wasm2asm_i32$2 = 0, wasm2asm_i32$1 = 0, wasm2asm_i32$0 = 0; diff --git a/test/hello_world.2asm.js b/test/hello_world.2asm.js index a7437f64b..48b0538c8 100644 --- a/test/hello_world.2asm.js +++ b/test/hello_world.2asm.js @@ -8,6 +8,7 @@ function asmFunc(global, env, buffer) { var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; function add(x, y) { x = x | 0; y = y | 0; diff --git a/test/min.2asm.js b/test/min.2asm.js index bd15fd5aa..c1cd2b64c 100644 --- a/test/min.2asm.js +++ b/test/min.2asm.js @@ -8,6 +8,7 @@ function asmFunc(global, env, buffer) { var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; function floats(f) { f = Math_fround(f); var t = Math_fround(0); diff --git a/test/unit.2asm.js b/test/unit.2asm.js index 1dfc7f32b..104b7c22c 100644 --- a/test/unit.2asm.js +++ b/test/unit.2asm.js @@ -8,6 +8,7 @@ function asmFunc(global, env, buffer) { var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; function big_negative() { var temp = 0.0; temp = -2147483648.0; |