| 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 fround = stdlib.Math.fround; | 10 var fround = stdlib.Math.fround; |
| 11 var Math_ceil = stdlib.Math.ceil; | 11 var Math_ceil = stdlib.Math.ceil; |
| 12 var Math_floor = stdlib.Math.floor; | 12 var Math_floor = stdlib.Math.floor; |
| 13 var Math_sqrt = stdlib.Math.sqrt; | 13 var Math_sqrt = stdlib.Math.sqrt; |
| 14 var Math_abs = stdlib.Math.abs; | 14 var Math_abs = stdlib.Math.abs; |
| 15 var Math_min = stdlib.Math.min; | 15 var Math_min = stdlib.Math.min; |
| 16 var Math_max = stdlib.Math.max; | 16 var Math_max = stdlib.Math.max; |
| 17 | 17 |
| 18 FUNC_BODY | 18 FUNC_BODY |
| 19 return {main: FUNC_NAME}; | 19 return {main: FUNC_NAME}; |
| 20 } | 20 } |
| 21 | 21 |
| 22 var source = MODULE_NAME.toString() | 22 var source = MODULE_NAME.toString() |
| 23 .replace(/MODULE_NAME/g, func.name + "_module") | 23 .replace(/MODULE_NAME/g, func.name + "_module") |
| 24 .replace(/FUNC_BODY/g, func.toString()) | 24 .replace(/FUNC_BODY/g, func.toString()) |
| 25 .replace(/FUNC_NAME/g, func.name); | 25 .replace(/FUNC_NAME/g, func.name); |
| 26 return eval("(" + source + ")"); | 26 return eval("(" + source + ")"); |
| 27 } | 27 } |
| 28 | 28 |
| 29 function RunThreeWayTest(asmfunc, expect) { | 29 function RunAsmJsTest(asmfunc, expect) { |
| 30 var asm_source = asmfunc.toString(); | 30 var asm_source = asmfunc.toString(); |
| 31 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); | 31 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); |
| 32 var stdlib = {Math: Math}; | 32 var stdlib = {Math: Math}; |
| 33 | 33 |
| 34 print("Testing " + asmfunc.name + " (js)..."); |
| 34 var js_module = eval("(" + nonasm_source + ")")(stdlib); | 35 var js_module = eval("(" + nonasm_source + ")")(stdlib); |
| 35 print("Testing " + asmfunc.name + " (js)..."); | |
| 36 expect(js_module); | 36 expect(js_module); |
| 37 | 37 |
| 38 print("Testing " + asmfunc.name + " (asm.js)..."); | 38 print("Testing " + asmfunc.name + " (asm.js)..."); |
| 39 var asm_module = asmfunc(stdlib); | 39 var asm_module = asmfunc(stdlib); |
| 40 assertTrue(%IsAsmWasmCode(asmfunc)); |
| 40 expect(asm_module); | 41 expect(asm_module); |
| 41 | |
| 42 print("Testing " + asmfunc.name + " (wasm)..."); | |
| 43 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib); | |
| 44 expect(wasm_module); | |
| 45 } | 42 } |
| 46 | 43 |
| 47 const fround = Math.fround; | 44 const fround = Math.fround; |
| 48 const Math_ceil = Math.ceil; | 45 const Math_ceil = Math.ceil; |
| 49 const Math_floor = Math.floor; | 46 const Math_floor = Math.floor; |
| 50 const Math_sqrt = Math.sqrt; | 47 const Math_sqrt = Math.sqrt; |
| 51 const Math_abs = Math.abs; | 48 const Math_abs = Math.abs; |
| 52 const Math_min = Math.min; | 49 const Math_min = Math.min; |
| 53 const Math_max = Math.max; | 50 const Math_max = Math.max; |
| 54 | 51 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 f32_eq, | 208 f32_eq, |
| 212 f32_ne, | 209 f32_ne, |
| 213 f32_lt, | 210 f32_lt, |
| 214 f32_lteq, | 211 f32_lteq, |
| 215 f32_gt, | 212 f32_gt, |
| 216 f32_gteq, | 213 f32_gteq, |
| 217 ]; | 214 ]; |
| 218 | 215 |
| 219 (function () { | 216 (function () { |
| 220 for (func of funcs) { | 217 for (func of funcs) { |
| 221 RunThreeWayTest(WrapInAsmModule(func), function (module) { | 218 RunAsmJsTest(WrapInAsmModule(func), function (module) { |
| 222 if (func.length == 1) { | 219 if (func.length == 1) { |
| 223 for (a of inputs) { | 220 for (a of inputs) { |
| 224 assertEquals(func(a), module.main(a)); | 221 assertEquals(func(a), module.main(a)); |
| 225 assertEquals(func(a / 11), module.main(a / 11)); | 222 assertEquals(func(a / 11), module.main(a / 11)); |
| 226 assertEquals(func(a / 430.9), module.main(a / 430.9)); | 223 assertEquals(func(a / 430.9), module.main(a / 430.9)); |
| 227 assertEquals(func(a / -31.1), module.main(a / -31.1)); | 224 assertEquals(func(a / -31.1), module.main(a / -31.1)); |
| 228 } | 225 } |
| 229 } else { | 226 } else { |
| 230 for (a of inputs) { | 227 for (a of inputs) { |
| 231 for (b of inputs) { | 228 for (b of inputs) { |
| 232 assertEquals(func(a, b), module.main(a, b)); | 229 assertEquals(func(a, b), module.main(a, b)); |
| 233 assertEquals(func(a / 11, b), module.main(a / 11, b)); | 230 assertEquals(func(a / 11, b), module.main(a / 11, b)); |
| 234 assertEquals(func(a, b / 420.9), module.main(a, b / 420.9)); | 231 assertEquals(func(a, b / 420.9), module.main(a, b / 420.9)); |
| 235 assertEquals(func(a / -31.1, b), module.main(a / -31.1, b)); | 232 assertEquals(func(a / -31.1, b), module.main(a / -31.1, b)); |
| 236 } | 233 } |
| 237 } | 234 } |
| 238 } | 235 } |
| 239 }); | 236 }); |
| 240 } | 237 } |
| 241 | 238 |
| 242 })(); | 239 })(); |
| OLD | NEW |