Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: test/mjsunit/wasm/test-import-export-wrapper.js

Issue 2472103002: [wasm] Store the function_index in the js-to-wasm wrapper instead of the export index (Closed)
Patch Set: Rename variables Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | test/mjsunit/wasm/wasm-constants.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 --allow-natives-syntax 5 // Flags: --expose-wasm --allow-natives-syntax
6 6
7 load("test/mjsunit/wasm/wasm-constants.js"); 7 load("test/mjsunit/wasm/wasm-constants.js");
8 load("test/mjsunit/wasm/wasm-module-builder.js"); 8 load("test/mjsunit/wasm/wasm-module-builder.js");
9 9
10 var expect_elison = 0; 10 var expect_elison = 0;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 var the_export = first_module 59 var the_export = first_module
60 .instantiate({import_module_1: {import_name_1: f}}) 60 .instantiate({import_module_1: {import_name_1: f}})
61 .exports.first_export; 61 .exports.first_export;
62 assertEquals(the_export(2), 3); 62 assertEquals(the_export(2), 3);
63 assertEquals(the_export(-1), 0); 63 assertEquals(the_export(-1), 0);
64 assertEquals(the_export(0), 1); 64 assertEquals(the_export(0), 1);
65 assertEquals(the_export(5.5), 6); 65 assertEquals(the_export(5.5), 6);
66 assertEquals(%CheckWasmWrapperElision(the_export, expect_elison), true); 66 assertEquals(%CheckWasmWrapperElision(the_export, expect_elison), true);
67 })(); 67 })();
68 68
69 // Function calls stack: first_export -> first_func -> first_import ->
70 // second_export -> second_import
71 // In this case, first_import and second_export have same signature,
72 // So that wrappers will be removed. If the wrappers do are not removed, then
Mircea Trofin 2016/11/03 14:38:29 remove "do" (If the wrappers...)
ahaas 2016/11/07 08:10:51 I fixed it in https://codereview.chromium.org/2481
73 // the test crashes because of the int64 parameter, which is not allowed in the
Mircea Trofin 2016/11/03 14:38:29 while at it - the test fails, right? (OK, maybe it
ahaas 2016/11/07 08:10:51 I do not understand your question. This test would
74 // wrappers.
75 (function TestWasmWrapperElisionInt64() {
76 var imported = function (a) {
77 return a;
78 };
79
80 var second_module = new WasmModuleBuilder();
81 var sig_index1 = second_module.addType(kSig_i_i);
82 var sig_index_ll = second_module.addType(kSig_l_l);
83 second_module
84 .addImportWithModule("import_module_2", "import_name_2", sig_index1);
85 second_module
86 .addFunction("second_export", sig_index_ll)
87 .addBody([
88 kExprGetLocal, 0,
89 kExprI32ConvertI64,
90 kExprCallFunction, 0,
91 kExprI64SConvertI32,
92 kExprReturn
93 ])
94 .exportFunc();
95
96 var first_module = new WasmModuleBuilder();
97 var sig_index = first_module.addType(kSig_i_v);
98 var sig_index_ll = first_module.addType(kSig_l_l);
99 first_module
100 .addImportWithModule("import_module_1", "import_name_1", sig_index_ll);
101 first_module
102 .addFunction("first_export", sig_index)
103 .addBody([
104 kExprI64Const, 2,
105 kExprCallFunction, 2,
106 kExprI32ConvertI64,
107 kExprReturn
108 ])
109 .exportFunc();
110 first_module
111 .addFunction("first_func", sig_index_ll)
112 .addBody([
113 kExprI64Const, 1,
114 kExprGetLocal, 0,
115 kExprI64Add,
116 kExprCallFunction, 0,
117 kExprReturn
118 ]);
119
120 var f = second_module
121 .instantiate({import_module_2: {import_name_2: imported}})
122 .exports.second_export;
123 var the_export = first_module
124 .instantiate({import_module_1: {import_name_1: f}})
125 .exports.first_export;
126 assertEquals(the_export(), 3);
127 })();
128
69 // function calls stack: first_export -> first_func -> first_import -> 129 // function calls stack: first_export -> first_func -> first_import ->
70 // second_export -> second_import 130 // second_export -> second_import
71 // In this case, second_export has less params than first_import, 131 // In this case, second_export has less params than first_import,
72 // So that wrappers will not be removed 132 // So that wrappers will not be removed
73 (function TestWasmWrapperNoElisionLessParams() { 133 (function TestWasmWrapperNoElisionLessParams() {
74 var imported = function (a) { 134 var imported = function (a) {
75 return a; 135 return a;
76 }; 136 };
77 137
78 var second_module = new WasmModuleBuilder(); 138 var second_module = new WasmModuleBuilder();
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 .exports.second_export; 292 .exports.second_export;
233 var the_export = first_module 293 var the_export = first_module
234 .instantiate({import_module_1: {import_name_1: f}}) 294 .instantiate({import_module_1: {import_name_1: f}})
235 .exports.first_export; 295 .exports.first_export;
236 assertEquals(the_export(2.8, 9.1), 11); 296 assertEquals(the_export(2.8, 9.1), 11);
237 assertEquals(the_export(-1.7, -2.5), -3); 297 assertEquals(the_export(-1.7, -2.5), -3);
238 assertEquals(the_export(0.0, 0.0), 0); 298 assertEquals(the_export(0.0, 0.0), 0);
239 assertEquals(the_export(2, -2), 0); 299 assertEquals(the_export(2, -2), 0);
240 assertEquals(%CheckWasmWrapperElision(the_export, expect_no_elison), true); 300 assertEquals(%CheckWasmWrapperElision(the_export, expect_no_elison), true);
241 })(); 301 })();
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | test/mjsunit/wasm/wasm-constants.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698