| 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: --expose-wasm |
| 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; |
| 12 var Math_min = stdlib.Math.min; |
| 13 var Math_abs = stdlib.Math.abs; |
| 11 | 14 |
| 12 FUNC_BODY | 15 FUNC_BODY |
| 13 return {main: FUNC_NAME}; | 16 return {main: FUNC_NAME}; |
| 14 } | 17 } |
| 15 | 18 |
| 16 var source = MODULE_NAME.toString() | 19 var source = MODULE_NAME.toString() |
| 17 .replace(/MODULE_NAME/g, func.name + "_module") | 20 .replace(/MODULE_NAME/g, func.name + "_module") |
| 18 .replace(/FUNC_BODY/g, func.toString()) | 21 .replace(/FUNC_BODY/g, func.toString()) |
| 19 .replace(/FUNC_NAME/g, func.name); | 22 .replace(/FUNC_NAME/g, func.name); |
| 20 return eval("(" + source + ")"); | 23 return eval("(" + source + ")"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 32 print("Testing " + asmfunc.name + " (asm.js)..."); | 35 print("Testing " + asmfunc.name + " (asm.js)..."); |
| 33 var asm_module = asmfunc(stdlib); | 36 var asm_module = asmfunc(stdlib); |
| 34 expect(asm_module); | 37 expect(asm_module); |
| 35 | 38 |
| 36 print("Testing " + asmfunc.name + " (wasm)..."); | 39 print("Testing " + asmfunc.name + " (wasm)..."); |
| 37 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib); | 40 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib); |
| 38 expect(wasm_module); | 41 expect(wasm_module); |
| 39 } | 42 } |
| 40 | 43 |
| 41 const imul = Math.imul; | 44 const imul = Math.imul; |
| 45 const Math_max = Math.max; |
| 46 const Math_min = Math.min; |
| 47 const Math_abs = Math.abs; |
| 42 | 48 |
| 43 function i32_add(a, b) { | 49 function i32_add(a, b) { |
| 44 a = a | 0; | 50 a = a | 0; |
| 45 b = b | 0; | 51 b = b | 0; |
| 46 return (a + b) | 0; | 52 return (a + b) | 0; |
| 47 } | 53 } |
| 48 | 54 |
| 49 function i32_sub(a, b) { | 55 function i32_sub(a, b) { |
| 50 a = a | 0; | 56 a = a | 0; |
| 51 b = b | 0; | 57 b = b | 0; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 | 159 |
| 154 function i32_gteq(a, b) { | 160 function i32_gteq(a, b) { |
| 155 a = a | 0; | 161 a = a | 0; |
| 156 b = b | 0; | 162 b = b | 0; |
| 157 if ((a | 0) >= (b | 0)) { | 163 if ((a | 0) >= (b | 0)) { |
| 158 return 1; | 164 return 1; |
| 159 } | 165 } |
| 160 return 0; | 166 return 0; |
| 161 } | 167 } |
| 162 | 168 |
| 169 function i32_min(a, b) { |
| 170 a = a | 0; |
| 171 b = b | 0; |
| 172 return Math_min(a | 0, b | 0) | 0; |
| 173 } |
| 174 |
| 175 function i32_max(a, b) { |
| 176 a = a | 0; |
| 177 b = b | 0; |
| 178 return Math_max(a | 0, b | 0) | 0; |
| 179 } |
| 180 |
| 181 function i32_abs(a) { |
| 182 a = a | 0; |
| 183 return Math_abs(a | 0) | 0; |
| 184 } |
| 185 |
| 163 var inputs = [ | 186 var inputs = [ |
| 164 0, 1, 2, 3, 4, | 187 0, 1, 2, 3, 4, |
| 165 10, 20, 30, 31, 32, 33, 100, 2000, | 188 10, 20, 30, 31, 32, 33, 100, 2000, |
| 166 30000, 400000, 5000000, | 189 30000, 400000, 5000000, |
| 167 100000000, 2000000000, | 190 100000000, 2000000000, |
| 168 2147483646, | 191 2147483646, |
| 169 2147483647, | 192 2147483647, |
| 170 2147483648, | 193 2147483648, |
| 171 2147483649, | 194 2147483649, |
| 172 0x273a798e, 0x187937a3, 0xece3af83, 0x5495a16b, 0x0b668ecc, 0x11223344, | 195 0x273a798e, 0x187937a3, 0xece3af83, 0x5495a16b, 0x0b668ecc, 0x11223344, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 198 i32_xor, | 221 i32_xor, |
| 199 // TODO(titzer): i32_shl on arm | 222 // TODO(titzer): i32_shl on arm |
| 200 // TODO(titzer): i32_shr on arm | 223 // TODO(titzer): i32_shr on arm |
| 201 // TODO(titzer): i32_sar on arm | 224 // TODO(titzer): i32_sar on arm |
| 202 i32_eq, | 225 i32_eq, |
| 203 i32_ne, | 226 i32_ne, |
| 204 i32_lt, | 227 i32_lt, |
| 205 i32_lteq, | 228 i32_lteq, |
| 206 i32_gt, | 229 i32_gt, |
| 207 i32_gteq, | 230 i32_gteq, |
| 208 // TODO(titzer): i32_min | 231 i32_min, |
| 209 // TODO(titzer): i32_max | 232 i32_max, |
| 210 // TODO(titzer): i32_abs | 233 i32_abs |
| 211 ]; | 234 ]; |
| 212 | 235 |
| 213 (function () { | 236 (function () { |
| 214 for (func of funcs) { | 237 for (func of funcs) { |
| 215 RunThreeWayTest(WrapInAsmModule(func), function (module) { | 238 RunThreeWayTest(WrapInAsmModule(func), function (module) { |
| 216 for (a of inputs) { | 239 if (func.length == 1) { |
| 217 for (b of inputs) { | 240 for (a of inputs) { |
| 218 var expected = func(a, b); | 241 assertEquals(func(a), module.main(a)); |
| 219 assertEquals(expected, module.main(a, b)); | 242 } |
| 243 } else { |
| 244 for (a of inputs) { |
| 245 for (b of inputs) { |
| 246 assertEquals(func(a, b), module.main(a, b)); |
| 247 } |
| 220 } | 248 } |
| 221 } | 249 } |
| 222 }); | 250 }); |
| 223 } | 251 } |
| 224 | 252 |
| 225 })(); | 253 })(); |
| OLD | NEW |