| 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 var Math_max = stdlib.Math.max; | 11 var Math_max = stdlib.Math.max; |
| 12 var Math_min = stdlib.Math.min; | 12 var Math_min = stdlib.Math.min; |
| 13 var Math_abs = stdlib.Math.abs; | 13 var Math_abs = stdlib.Math.abs; |
| 14 | 14 |
| 15 FUNC_BODY | 15 FUNC_BODY |
| 16 return {main: FUNC_NAME}; | 16 return {main: FUNC_NAME}; |
| 17 } | 17 } |
| 18 | 18 |
| 19 var source = MODULE_NAME.toString() | 19 var source = MODULE_NAME.toString() |
| 20 .replace(/MODULE_NAME/g, func.name + "_module") | 20 .replace(/MODULE_NAME/g, func.name + "_module") |
| 21 .replace(/FUNC_BODY/g, func.toString()) | 21 .replace(/FUNC_BODY/g, func.toString()) |
| 22 .replace(/FUNC_NAME/g, func.name); | 22 .replace(/FUNC_NAME/g, func.name); |
| 23 return eval("(" + source + ")"); | 23 return eval("(" + source + ")"); |
| 24 } | 24 } |
| 25 | 25 |
| 26 function RunThreeWayTest(asmfunc, expect) { | 26 function RunAsmJsTest(asmfunc, expect) { |
| 27 var asm_source = asmfunc.toString(); | 27 var asm_source = asmfunc.toString(); |
| 28 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); | 28 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); |
| 29 var stdlib = {Math: Math}; | 29 var stdlib = {Math: Math}; |
| 30 | 30 |
| 31 print("Testing " + asmfunc.name + " (js)..."); |
| 31 var js_module = eval("(" + nonasm_source + ")")(stdlib); | 32 var js_module = eval("(" + nonasm_source + ")")(stdlib); |
| 32 print("Testing " + asmfunc.name + " (js)..."); | |
| 33 expect(js_module); | 33 expect(js_module); |
| 34 | 34 |
| 35 print("Testing " + asmfunc.name + " (asm.js)..."); | 35 print("Testing " + asmfunc.name + " (asm.js)..."); |
| 36 var asm_module = asmfunc(stdlib); | 36 var asm_module = asmfunc(stdlib); |
| 37 assertTrue(%IsAsmWasmCode(asmfunc)); |
| 37 expect(asm_module); | 38 expect(asm_module); |
| 38 | |
| 39 print("Testing " + asmfunc.name + " (wasm)..."); | |
| 40 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib); | |
| 41 expect(wasm_module); | |
| 42 } | 39 } |
| 43 | 40 |
| 44 const imul = Math.imul; | 41 const imul = Math.imul; |
| 45 const Math_max = Math.max; | 42 const Math_max = Math.max; |
| 46 const Math_min = Math.min; | 43 const Math_min = Math.min; |
| 47 const Math_abs = Math.abs; | 44 const Math_abs = Math.abs; |
| 48 | 45 |
| 49 function i32_add(a, b) { | 46 function i32_add(a, b) { |
| 50 a = a | 0; | 47 a = a | 0; |
| 51 b = b | 0; | 48 b = b | 0; |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 i32_lteq, | 224 i32_lteq, |
| 228 i32_gt, | 225 i32_gt, |
| 229 i32_gteq, | 226 i32_gteq, |
| 230 i32_min, | 227 i32_min, |
| 231 i32_max, | 228 i32_max, |
| 232 i32_abs | 229 i32_abs |
| 233 ]; | 230 ]; |
| 234 | 231 |
| 235 (function () { | 232 (function () { |
| 236 for (func of funcs) { | 233 for (func of funcs) { |
| 237 RunThreeWayTest(WrapInAsmModule(func), function (module) { | 234 RunAsmJsTest(WrapInAsmModule(func), function (module) { |
| 238 if (func.length == 1) { | 235 if (func.length == 1) { |
| 239 for (a of inputs) { | 236 for (a of inputs) { |
| 240 assertEquals(func(a), module.main(a)); | 237 assertEquals(func(a), module.main(a)); |
| 241 } | 238 } |
| 242 } else { | 239 } else { |
| 243 for (a of inputs) { | 240 for (a of inputs) { |
| 244 for (b of inputs) { | 241 for (b of inputs) { |
| 245 assertEquals(func(a, b), module.main(a, b)); | 242 assertEquals(func(a, b), module.main(a, b)); |
| 246 } | 243 } |
| 247 } | 244 } |
| 248 } | 245 } |
| 249 }); | 246 }); |
| 250 } | 247 } |
| 251 | 248 |
| 252 })(); | 249 })(); |
| OLD | NEW |