Chromium Code Reviews| Index: test/mjsunit/wasm/indirect-calls.js |
| diff --git a/test/mjsunit/wasm/indirect-calls.js b/test/mjsunit/wasm/indirect-calls.js |
| index 1e87c6f8230fd862b49acfeddbe0bcfe491285d0..2a3c110aee07733c62f41698f48b5b339e5544ab 100644 |
| --- a/test/mjsunit/wasm/indirect-calls.js |
| +++ b/test/mjsunit/wasm/indirect-calls.js |
| @@ -14,7 +14,7 @@ var module = (function () { |
| builder.addImport("add", sig_index); |
| builder.addFunction("add", sig_index) |
| .addBody([ |
| - kExprGetLocal, 0, kExprGetLocal, 1, kExprCallImport, kArity2, 0 |
| + kExprGetLocal, 0, kExprGetLocal, 1, kExprCallFunction, 0 |
| ]); |
| builder.addFunction("sub", sig_index) |
| .addBody([ |
| @@ -24,13 +24,13 @@ var module = (function () { |
| ]); |
| builder.addFunction("main", kSig_i_iii) |
| .addBody([ |
| - kExprGetLocal, 0, |
| kExprGetLocal, 1, |
| kExprGetLocal, 2, |
| - kExprCallIndirect, kArity2, sig_index |
| + kExprGetLocal, 0, |
| + kExprCallIndirect, sig_index |
| ]) |
| .exportFunc() |
| - builder.appendToTable([0, 1, 2]); |
| + builder.appendToTable([1, 2, 3]); |
| return builder.instantiate({add: function(a, b) { return a + b | 0; }}); |
| })(); |
| @@ -47,3 +47,40 @@ assertEquals(19, module.exports.main(0, 12, 7)); |
| assertTraps(kTrapFuncSigMismatch, "module.exports.main(2, 12, 33)"); |
| assertTraps(kTrapFuncInvalid, "module.exports.main(3, 12, 33)"); |
| + |
| + |
| +module = (function () { |
| + var builder = new WasmModuleBuilder(); |
| + |
| + var sig_i_ii = builder.addType(kSig_i_ii); |
| + var sig_i_i = builder.addType(kSig_i_i); |
| + builder.addImport("mul", sig_i_ii); |
| + builder.addFunction("add", sig_i_ii) |
| + .addBody([ |
| + kExprGetLocal, 0, // -- |
| + kExprGetLocal, 1, // -- |
| + kExprI32Add // -- |
| + ]); |
| + builder.addFunction("pop", sig_i_i) |
|
ahaas
2016/09/19 11:02:38
Please give this function a proper name, Popcnt do
titzer
2016/09/19 11:37:03
Done.
|
| + .addBody([ |
| + kExprGetLocal, 0, // -- |
| + kExprI32Popcnt // -- |
| + ]); |
| + builder.addFunction("main", kSig_i_iii) |
| + .addBody([ |
| + kExprGetLocal, 1, |
| + kExprGetLocal, 2, |
| + kExprGetLocal, 0, |
| + kExprCallIndirect, sig_i_ii |
| + ]) |
| + .exportFunc() |
| + builder.appendToTable([0, 1, 2, 3]); |
| + |
| + return builder.instantiate({mul: function(a, b) { return a * b | 0; }}); |
| +})(); |
| + |
| +assertEquals(-6, module.exports.main(0, -2, 3)); |
| +assertEquals(99, module.exports.main(1, 22, 77)); |
| +assertTraps(kTrapFuncSigMismatch, "module.exports.main(2, 12, 33)"); |
| +assertTraps(kTrapFuncSigMismatch, "module.exports.main(3, 12, 33)"); |
| +assertTraps(kTrapFuncInvalid, "module.exports.main(4, 12, 33)"); |