| 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 // Flags: --expose-wasm | 5 // Flags: --validate-asm --allow-natives-syntax |
| 6 | 6 |
| 7 function WrapInAsmModule(func) { | 7 function WrapInAsmModule(func) { |
| 8 function MODULE_NAME(stdlib) { | 8 function MODULE_NAME(stdlib) { |
| 9 "use asm"; | 9 "use asm"; |
| 10 var imul = stdlib.Math.imul; | 10 var imul = stdlib.Math.imul; |
| 11 | 11 |
| 12 FUNC_BODY | 12 FUNC_BODY |
| 13 return {main: FUNC_NAME}; | 13 return {main: FUNC_NAME}; |
| 14 } | 14 } |
| 15 | 15 |
| 16 var source = MODULE_NAME.toString() | 16 var source = MODULE_NAME.toString() |
| 17 .replace(/MODULE_NAME/g, func.name + "_module") | 17 .replace(/MODULE_NAME/g, func.name + "_module") |
| 18 .replace(/FUNC_BODY/g, func.toString()) | 18 .replace(/FUNC_BODY/g, func.toString()) |
| 19 .replace(/FUNC_NAME/g, func.name); | 19 .replace(/FUNC_NAME/g, func.name); |
| 20 return eval("(" + source + ")"); | 20 return eval("(" + source + ")"); |
| 21 } | 21 } |
| 22 | 22 |
| 23 function RunThreeWayTest(asmfunc, expect) { | 23 function RunAsmJsTest(asmfunc, expect) { |
| 24 var asm_source = asmfunc.toString(); | 24 var asm_source = asmfunc.toString(); |
| 25 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); | 25 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); |
| 26 var stdlib = {Math: Math}; | 26 var stdlib = {Math: Math}; |
| 27 | 27 |
| 28 print("Testing " + asmfunc.name + " (js)..."); |
| 28 var js_module = eval("(" + nonasm_source + ")")(stdlib); | 29 var js_module = eval("(" + nonasm_source + ")")(stdlib); |
| 29 print("Testing " + asmfunc.name + " (js)..."); | |
| 30 expect(js_module); | 30 expect(js_module); |
| 31 | 31 |
| 32 print("Testing " + asmfunc.name + " (asm.js)..."); | 32 print("Testing " + asmfunc.name + " (asm.js)..."); |
| 33 var asm_module = asmfunc(stdlib); | 33 var asm_module = asmfunc(stdlib); |
| 34 assertTrue(%IsAsmWasmCode(asmfunc)); |
| 34 expect(asm_module); | 35 expect(asm_module); |
| 35 | |
| 36 print("Testing " + asmfunc.name + " (wasm)..."); | |
| 37 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib); | |
| 38 expect(wasm_module); | |
| 39 } | 36 } |
| 40 | 37 |
| 41 const imul = Math.imul; | 38 const imul = Math.imul; |
| 42 | 39 |
| 43 function u32_add(a, b) { | 40 function u32_add(a, b) { |
| 44 a = a | 0; | 41 a = a | 0; |
| 45 b = b | 0; | 42 b = b | 0; |
| 46 return +(((a >>> 0) + (b >>> 0)) >>> 0); | 43 return +(((a >>> 0) + (b >>> 0)) >>> 0); |
| 47 } | 44 } |
| 48 | 45 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 u32_lteq, | 202 u32_lteq, |
| 206 u32_gt, | 203 u32_gt, |
| 207 u32_gteq, | 204 u32_gteq, |
| 208 // TODO(titzer): u32_min | 205 // TODO(titzer): u32_min |
| 209 // TODO(titzer): u32_max | 206 // TODO(titzer): u32_max |
| 210 // TODO(titzer): u32_abs | 207 // TODO(titzer): u32_abs |
| 211 ]; | 208 ]; |
| 212 | 209 |
| 213 (function () { | 210 (function () { |
| 214 for (func of funcs) { | 211 for (func of funcs) { |
| 215 RunThreeWayTest(WrapInAsmModule(func), function (module) { | 212 RunAsmJsTest(WrapInAsmModule(func), function (module) { |
| 216 for (a of inputs) { | 213 for (a of inputs) { |
| 217 for (b of inputs) { | 214 for (b of inputs) { |
| 218 var expected = func(a, b); | 215 var expected = func(a, b); |
| 219 assertEquals(expected, module.main(a, b)); | 216 assertEquals(expected, module.main(a, b)); |
| 220 } | 217 } |
| 221 } | 218 } |
| 222 }); | 219 }); |
| 223 } | 220 } |
| 224 | 221 |
| 225 })(); | 222 })(); |
| OLD | NEW |