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

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

Issue 1763433002: [wasm] Rework encoding of local declarations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months 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
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 load("test/mjsunit/wasm/wasm-constants.js"); 7 load("test/mjsunit/wasm/wasm-constants.js");
8 8
9 function testCallImport(func, check) { 9 function testCallImport(func, check) {
10 var kBodySize = 6; 10 var kBodySize = 7;
11 var kNameFunOffset = kHeaderSize + 29 + kBodySize + 1; 11 var kNameFunOffset = kHeaderSize + 29 + kBodySize + 1;
12 var kNameMainOffset = kNameFunOffset + 4; 12 var kNameMainOffset = kNameFunOffset + 4;
13 13
14 var ffi = new Object(); 14 var ffi = new Object();
15 ffi.fun = func; 15 ffi.fun = func;
16 16
17 var data = bytesWithHeader( 17 var data = bytesWithHeader(
18 // signatures 18 // signatures
19 kDeclSignatures, 1, 19 kDeclSignatures, 1,
20 2, kAstI32, kAstF64, kAstF64, // (f64,f64) -> int 20 2, kAstI32, kAstF64, kAstF64, // (f64,f64) -> int
21 // -- main function 21 // -- main function
22 kDeclFunctions, 22 kDeclFunctions,
23 1, 23 1,
24 kDeclFunctionName | kDeclFunctionExport, 24 kDeclFunctionName | kDeclFunctionExport,
25 0, 0, 25 0, 0,
26 kNameMainOffset, 0, 0, 0, // name offset 26 kNameMainOffset, 0, 0, 0, // name offset
27 kBodySize, 0, 27 kBodySize, 0,
28 // main body 28 // main body
29 kDeclNoLocals,
29 kExprCallImport, 0, // -- 30 kExprCallImport, 0, // --
30 kExprGetLocal, 0, // -- 31 kExprGetLocal, 0, // --
31 kExprGetLocal, 1, // -- 32 kExprGetLocal, 1, // --
32 // imports 33 // imports
33 kDeclImportTable, 34 kDeclImportTable,
34 1, 35 1,
35 0, 0, // sig index 36 0, 0, // sig index
36 0, 0, 0, 0, // module name offset 37 0, 0, 0, 0, // module name offset
37 kNameFunOffset, 0, 0, 0, // function name offset 38 kNameFunOffset, 0, 0, 0, // function name offset
38 // names 39 // names
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 testCallImport(returnValue(null), checkReturn(0)); 186 testCallImport(returnValue(null), checkReturn(0));
186 testCallImport(returnValue("0"), checkReturn(0)); 187 testCallImport(returnValue("0"), checkReturn(0));
187 testCallImport(returnValue("-77"), checkReturn(-77)); 188 testCallImport(returnValue("-77"), checkReturn(-77));
188 189
189 var objWithValueOf = {valueOf: function() { return 198; }} 190 var objWithValueOf = {valueOf: function() { return 198; }}
190 191
191 testCallImport(returnValue(objWithValueOf), checkReturn(198)); 192 testCallImport(returnValue(objWithValueOf), checkReturn(198));
192 193
193 194
194 function testCallBinopVoid(type, func, check) { 195 function testCallBinopVoid(type, func, check) {
195 var kBodySize = 10; 196 var kBodySize = 11;
196 var kNameFunOffset = kHeaderSize + 28 + kBodySize + 1; 197 var kNameFunOffset = kHeaderSize + 28 + kBodySize + 1;
197 var kNameMainOffset = kNameFunOffset + 4; 198 var kNameMainOffset = kNameFunOffset + 4;
198 199
199 var ffi = new Object(); 200 var ffi = new Object();
200 201
201 var passed_length = -1; 202 var passed_length = -1;
202 var passed_a = -1; 203 var passed_a = -1;
203 var passed_b = -1; 204 var passed_b = -1;
204 var args_a = -1; 205 var args_a = -1;
205 var args_b = -1; 206 var args_b = -1;
(...skipping 15 matching lines...) Expand all
221 kDeclFunctions, 2, 222 kDeclFunctions, 2,
222 kDeclFunctionName | kDeclFunctionImport, 223 kDeclFunctionName | kDeclFunctionImport,
223 0, 0, // signature index 224 0, 0, // signature index
224 kNameFunOffset, 0, 0, 0, // name offset 225 kNameFunOffset, 0, 0, 0, // name offset
225 // -- main function 226 // -- main function
226 kDeclFunctionName | kDeclFunctionExport, 227 kDeclFunctionName | kDeclFunctionExport,
227 1, 0, // signature index 228 1, 0, // signature index
228 kNameMainOffset, 0, 0, 0, // name offset 229 kNameMainOffset, 0, 0, 0, // name offset
229 kBodySize, 0, // body size 230 kBodySize, 0, // body size
230 // main body 231 // main body
232 kDeclNoLocals,
231 kExprBlock, 2, // -- 233 kExprBlock, 2, // --
232 kExprCallFunction, 0, // -- 234 kExprCallFunction, 0, // --
233 kExprGetLocal, 0, // -- 235 kExprGetLocal, 0, // --
234 kExprGetLocal, 1, // -- 236 kExprGetLocal, 1, // --
235 kExprI8Const, 99, // -- 237 kExprI8Const, 99, // --
236 // names 238 // names
237 kDeclEnd, 239 kDeclEnd,
238 'f', 'u', 'n', 0, // -- 240 'f', 'u', 'n', 0, // --
239 'm', 'a', 'i', 'n', 0 // -- 241 'm', 'a', 'i', 'n', 0 // --
240 ); 242 );
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 280
279 281
280 testCallBinopVoid(kAstI32); 282 testCallBinopVoid(kAstI32);
281 // TODO testCallBinopVoid(kAstI64); 283 // TODO testCallBinopVoid(kAstI64);
282 testCallBinopVoid(kAstF32); 284 testCallBinopVoid(kAstF32);
283 testCallBinopVoid(kAstF64); 285 testCallBinopVoid(kAstF64);
284 286
285 287
286 288
287 function testCallPrint() { 289 function testCallPrint() {
288 var kBodySize = 10; 290 var kBodySize = 11;
289 var kNamePrintOffset = kHeaderSize + 10 + 7 + 7 + 9 + kBodySize + 1; 291 var kNamePrintOffset = kHeaderSize + 10 + 7 + 7 + 9 + kBodySize + 1;
290 var kNameMainOffset = kNamePrintOffset + 6; 292 var kNameMainOffset = kNamePrintOffset + 6;
291 293
292 var ffi = new Object(); 294 var ffi = new Object();
293 ffi.print = print; 295 ffi.print = print;
294 296
295 var data = bytesWithHeader( 297 var data = bytesWithHeader(
296 // -- signatures 298 // -- signatures
297 kDeclSignatures, 2, 299 kDeclSignatures, 2,
298 1, kAstStmt, kAstI32, // i32->void 300 1, kAstStmt, kAstI32, // i32->void
299 1, kAstStmt, kAstF64, // f64->int 301 1, kAstStmt, kAstF64, // f64->int
300 kDeclFunctions, 3, 302 kDeclFunctions, 3,
301 // -- import print i32 303 // -- import print i32
302 kDeclFunctionName | kDeclFunctionImport, 304 kDeclFunctionName | kDeclFunctionImport,
303 0, 0, // signature index 305 0, 0, // signature index
304 kNamePrintOffset, 0, 0, 0, // name offset 306 kNamePrintOffset, 0, 0, 0, // name offset
305 // -- import print f64 307 // -- import print f64
306 kDeclFunctionName | kDeclFunctionImport, 308 kDeclFunctionName | kDeclFunctionImport,
307 1, 0, // signature index 309 1, 0, // signature index
308 kNamePrintOffset, 0, 0, 0, // name offset 310 kNamePrintOffset, 0, 0, 0, // name offset
309 // -- decl main 311 // -- decl main
310 kDeclFunctionName | kDeclFunctionExport, 312 kDeclFunctionName | kDeclFunctionExport,
311 1, 0, // signature index 313 1, 0, // signature index
312 kNameMainOffset, 0, 0, 0, // name offset 314 kNameMainOffset, 0, 0, 0, // name offset
313 kBodySize, 0, // body size 315 kBodySize, 0, // body size
314 // main body 316 // main body
317 kDeclNoLocals,
315 kExprBlock, 2, // -- 318 kExprBlock, 2, // --
316 kExprCallFunction, 0, // -- 319 kExprCallFunction, 0, // --
317 kExprI8Const, 97, // -- 320 kExprI8Const, 97, // --
318 kExprCallFunction, 1, // -- 321 kExprCallFunction, 1, // --
319 kExprGetLocal, 0, // -- 322 kExprGetLocal, 0, // --
320 // names 323 // names
321 kDeclEnd, 324 kDeclEnd,
322 'p', 'r', 'i', 'n', 't', 0, // -- 325 'p', 'r', 'i', 'n', 't', 0, // --
323 'm', 'a', 'i', 'n', 0 // -- 326 'm', 'a', 'i', 'n', 0 // --
324 ); 327 );
325 328
326 var module = _WASMEXP_.instantiateModule(data, ffi); 329 var module = _WASMEXP_.instantiateModule(data, ffi);
327 330
328 assertEquals("function", typeof module.main); 331 assertEquals("function", typeof module.main);
329 332
330 for (var i = -9; i < 900; i += 6.125) { 333 for (var i = -9; i < 900; i += 6.125) {
331 module.main(i); 334 module.main(i);
332 } 335 }
333 } 336 }
334 337
335 testCallPrint(); 338 testCallPrint();
336 testCallPrint(); 339 testCallPrint();
337 340
338 341
339 function testCallImport2(foo, bar, expected) { 342 function testCallImport2(foo, bar, expected) {
340 var kBodySize = 5; 343 var kBodySize = 6;
341 var kNameFooOffset = kHeaderSize + 37 + kBodySize + 1; 344 var kNameFooOffset = kHeaderSize + 37 + kBodySize + 1;
342 var kNameBarOffset = kNameFooOffset + 4; 345 var kNameBarOffset = kNameFooOffset + 4;
343 var kNameMainOffset = kNameBarOffset + 4; 346 var kNameMainOffset = kNameBarOffset + 4;
344 347
345 var ffi = new Object(); 348 var ffi = new Object();
346 ffi.foo = foo; 349 ffi.foo = foo;
347 ffi.bar = bar; 350 ffi.bar = bar;
348 351
349 var data = bytesWithHeader( 352 var data = bytesWithHeader(
350 // signatures 353 // signatures
351 kDeclSignatures, 1, 354 kDeclSignatures, 1,
352 0, kAstI32, // void -> i32 355 0, kAstI32, // void -> i32
353 // -- main function 356 // -- main function
354 kDeclFunctions, 357 kDeclFunctions,
355 1, 358 1,
356 kDeclFunctionName | kDeclFunctionExport, 359 kDeclFunctionName | kDeclFunctionExport,
357 0, 0, 360 0, 0,
358 kNameMainOffset, 0, 0, 0, // name offset 361 kNameMainOffset, 0, 0, 0, // name offset
359 kBodySize, 0, 362 kBodySize, 0,
360 // main body 363 // main body
364 kDeclNoLocals,
361 kExprI32Add, // -- 365 kExprI32Add, // --
362 kExprCallImport, 0, // -- 366 kExprCallImport, 0, // --
363 kExprCallImport, 1, // -- 367 kExprCallImport, 1, // --
364 // imports 368 // imports
365 kDeclImportTable, 369 kDeclImportTable,
366 2, 370 2,
367 0, 0, // sig index 371 0, 0, // sig index
368 0, 0, 0, 0, // module name offset 372 0, 0, 0, 0, // module name offset
369 kNameFooOffset, 0, 0, 0, // function name offset 373 kNameFooOffset, 0, 0, 0, // function name offset
370 0, 0, // sig index 374 0, 0, // sig index
371 0, 0, 0, 0, // module name offset 375 0, 0, 0, 0, // module name offset
372 kNameBarOffset, 0, 0, 0, // function name offset 376 kNameBarOffset, 0, 0, 0, // function name offset
373 // names 377 // names
374 kDeclEnd, 378 kDeclEnd,
375 'f', 'o', 'o', 0, // -- 379 'f', 'o', 'o', 0, // --
376 'b', 'a', 'r', 0, // -- 380 'b', 'a', 'r', 0, // --
377 'm', 'a', 'i', 'n', 0 // -- 381 'm', 'a', 'i', 'n', 0 // --
378 ); 382 );
379 383
380 var module = _WASMEXP_.instantiateModule(data, ffi); 384 var module = _WASMEXP_.instantiateModule(data, ffi);
381 385
382 assertEquals("function", typeof module.main); 386 assertEquals("function", typeof module.main);
383 387
384 assertEquals(expected, module.main()); 388 assertEquals(expected, module.main());
385 } 389 }
386 390
387 testCallImport2(function() { return 33; }, function () { return 44; }, 77); 391 testCallImport2(function() { return 33; }, function () { return 44; }, 77);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698