OLD | NEW |
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 #include <stdint.h> | 5 #include <stdint.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "src/wasm/wasm-macro-gen.h" | 9 #include "src/wasm/wasm-macro-gen.h" |
10 | 10 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 | 84 |
85 TEST(Run_WasmMemorySize) { | 85 TEST(Run_WasmMemorySize) { |
86 TestingModule module; | 86 TestingModule module; |
87 WasmRunner<int32_t> r(&module); | 87 WasmRunner<int32_t> r(&module); |
88 module.AddMemory(1024); | 88 module.AddMemory(1024); |
89 BUILD(r, kExprMemorySize); | 89 BUILD(r, kExprMemorySize); |
90 CHECK_EQ(1024, r.Call()); | 90 CHECK_EQ(1024, r.Call()); |
91 } | 91 } |
92 | 92 |
93 | 93 |
94 #if WASM_64 | |
95 TEST(Run_WasmInt64Const) { | |
96 WasmRunner<int64_t> r; | |
97 const int64_t kExpectedValue = 0x1122334455667788LL; | |
98 // return(kExpectedValue) | |
99 BUILD(r, WASM_I64V_9(kExpectedValue)); | |
100 CHECK_EQ(kExpectedValue, r.Call()); | |
101 } | |
102 | |
103 | |
104 TEST(Run_WasmInt64Const_many) { | |
105 int cntr = 0; | |
106 FOR_INT32_INPUTS(i) { | |
107 WasmRunner<int64_t> r; | |
108 const int64_t kExpectedValue = (static_cast<int64_t>(*i) << 32) | cntr; | |
109 // return(kExpectedValue) | |
110 BUILD(r, WASM_I64V(kExpectedValue)); | |
111 CHECK_EQ(kExpectedValue, r.Call()); | |
112 cntr++; | |
113 } | |
114 } | |
115 #endif | |
116 | |
117 | |
118 TEST(Run_WasmInt32Param0) { | 94 TEST(Run_WasmInt32Param0) { |
119 WasmRunner<int32_t> r(MachineType::Int32()); | 95 WasmRunner<int32_t> r(MachineType::Int32()); |
120 // return(local[0]) | 96 // return(local[0]) |
121 BUILD(r, WASM_GET_LOCAL(0)); | 97 BUILD(r, WASM_GET_LOCAL(0)); |
122 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 98 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
123 } | 99 } |
124 | 100 |
125 | 101 |
126 TEST(Run_WasmInt32Param0_fallthru) { | 102 TEST(Run_WasmInt32Param0_fallthru) { |
127 WasmRunner<int32_t> r(MachineType::Int32()); | 103 WasmRunner<int32_t> r(MachineType::Int32()); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 | 309 |
334 | 310 |
335 TEST(Run_WasmInt32Popcnt) { | 311 TEST(Run_WasmInt32Popcnt) { |
336 TestInt32Unop(kExprI32Popcnt, 32, 0xffffffff); | 312 TestInt32Unop(kExprI32Popcnt, 32, 0xffffffff); |
337 TestInt32Unop(kExprI32Popcnt, 0, 0x00000000); | 313 TestInt32Unop(kExprI32Popcnt, 0, 0x00000000); |
338 TestInt32Unop(kExprI32Popcnt, 1, 0x00008000); | 314 TestInt32Unop(kExprI32Popcnt, 1, 0x00008000); |
339 TestInt32Unop(kExprI32Popcnt, 13, 0x12345678); | 315 TestInt32Unop(kExprI32Popcnt, 13, 0x12345678); |
340 TestInt32Unop(kExprI32Popcnt, 19, 0xfedcba09); | 316 TestInt32Unop(kExprI32Popcnt, 19, 0xfedcba09); |
341 } | 317 } |
342 | 318 |
343 | 319 TEST(Run_WasmI32Eqz) { |
344 #if WASM_64 | 320 TestInt32Unop(kExprI32Eqz, 0, 1); |
345 void TestInt64Binop(WasmOpcode opcode, int64_t expected, int64_t a, int64_t b) { | 321 TestInt32Unop(kExprI32Eqz, 0, -1); |
346 if (!WasmOpcodes::IsSupported(opcode)) return; | 322 TestInt32Unop(kExprI32Eqz, 0, -827343); |
347 { | 323 TestInt32Unop(kExprI32Eqz, 0, 8888888); |
348 WasmRunner<int64_t> r; | 324 TestInt32Unop(kExprI32Eqz, 1, 0); |
349 // return K op K | |
350 BUILD(r, WASM_BINOP(opcode, WASM_I64V(a), WASM_I64V(b))); | |
351 CHECK_EQ(expected, r.Call()); | |
352 } | |
353 { | |
354 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
355 // return a op b | |
356 BUILD(r, WASM_BINOP(opcode, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
357 CHECK_EQ(expected, r.Call(a, b)); | |
358 } | |
359 } | 325 } |
360 | 326 |
361 | 327 |
362 void TestInt64Cmp(WasmOpcode opcode, int64_t expected, int64_t a, int64_t b) { | |
363 if (!WasmOpcodes::IsSupported(opcode)) return; | |
364 { | |
365 WasmRunner<int32_t> r; | |
366 // return K op K | |
367 BUILD(r, WASM_BINOP(opcode, WASM_I64V(a), WASM_I64V(b))); | |
368 CHECK_EQ(expected, r.Call()); | |
369 } | |
370 { | |
371 WasmRunner<int32_t> r(MachineType::Int64(), MachineType::Int64()); | |
372 // return a op b | |
373 BUILD(r, WASM_BINOP(opcode, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
374 CHECK_EQ(expected, r.Call(a, b)); | |
375 } | |
376 } | |
377 | |
378 | |
379 TEST(Run_WasmInt64Binops) { | |
380 // TODO(titzer): real 64-bit numbers | |
381 TestInt64Binop(kExprI64Add, 8888888888888LL, 3333333333333LL, | |
382 5555555555555LL); | |
383 TestInt64Binop(kExprI64Sub, -111111111111LL, 777777777777LL, 888888888888LL); | |
384 TestInt64Binop(kExprI64Mul, 65130756, 88734, 734); | |
385 TestInt64Binop(kExprI64DivS, -66, -4777344, 72384); | |
386 TestInt64Binop(kExprI64DivU, 805306368, 0xF0000000, 5); | |
387 TestInt64Binop(kExprI64RemS, -3, -3003, 1000); | |
388 TestInt64Binop(kExprI64RemU, 4, 4004, 1000); | |
389 TestInt64Binop(kExprI64And, 0xEE, 0xFFEE, 0xFF0000FF); | |
390 TestInt64Binop(kExprI64Ior, 0xF0FF00FF, 0xF0F000EE, 0x000F0011); | |
391 TestInt64Binop(kExprI64Xor, 0xABCDEF01, 0xABCDEFFF, 0xFE); | |
392 TestInt64Binop(kExprI64Shl, 0xA0000000, 0xA, 28); | |
393 TestInt64Binop(kExprI64ShrU, 0x0700001000123456LL, 0x7000010001234567LL, 4); | |
394 TestInt64Binop(kExprI64ShrS, 0xFF00000000000000LL, 0x8000000000000000LL, 7); | |
395 TestInt64Binop(kExprI64Ror, 0x0100000000000000LL, 0x8000000000000000LL, 7); | |
396 TestInt64Binop(kExprI64Ror, 0x0100000000000000LL, 0x8000000000000000LL, 71); | |
397 TestInt64Binop(kExprI64Rol, 0x0000000000000040LL, 0x8000000000000000LL, 7); | |
398 TestInt64Binop(kExprI64Rol, 0x0000000000000040LL, 0x8000000000000000LL, 71); | |
399 TestInt64Cmp(kExprI64Eq, 1, -9999, -9999); | |
400 TestInt64Cmp(kExprI64Ne, 1, -9199, -9999); | |
401 TestInt64Cmp(kExprI64LtS, 1, -4, 4); | |
402 TestInt64Cmp(kExprI64LeS, 0, -2, -3); | |
403 TestInt64Cmp(kExprI64LtU, 1, 0, -6); | |
404 TestInt64Cmp(kExprI64LeU, 1, 98978, 0xF0000000); | |
405 } | |
406 | |
407 | |
408 TEST(Run_WasmInt64Clz) { | |
409 struct { | |
410 int64_t expected; | |
411 uint64_t input; | |
412 } values[] = {{0, 0x8000100000000000}, {1, 0x4000050000000000}, | |
413 {2, 0x2000030000000000}, {3, 0x1000000300000000}, | |
414 {4, 0x0805000000000000}, {5, 0x0400600000000000}, | |
415 {6, 0x0200000000000000}, {7, 0x010000a000000000}, | |
416 {8, 0x00800c0000000000}, {9, 0x0040000000000000}, | |
417 {10, 0x0020000d00000000}, {11, 0x00100f0000000000}, | |
418 {12, 0x0008000000000000}, {13, 0x0004100000000000}, | |
419 {14, 0x0002002000000000}, {15, 0x0001030000000000}, | |
420 {16, 0x0000804000000000}, {17, 0x0000400500000000}, | |
421 {18, 0x0000205000000000}, {19, 0x0000170000000000}, | |
422 {20, 0x0000087000000000}, {21, 0x0000040500000000}, | |
423 {22, 0x0000020300000000}, {23, 0x0000010100000000}, | |
424 {24, 0x0000008900000000}, {25, 0x0000004100000000}, | |
425 {26, 0x0000002200000000}, {27, 0x0000001300000000}, | |
426 {28, 0x0000000800000000}, {29, 0x0000000400000000}, | |
427 {30, 0x0000000200000000}, {31, 0x0000000100000000}, | |
428 {32, 0x0000000080001000}, {33, 0x0000000040000500}, | |
429 {34, 0x0000000020000300}, {35, 0x0000000010000003}, | |
430 {36, 0x0000000008050000}, {37, 0x0000000004006000}, | |
431 {38, 0x0000000002000000}, {39, 0x00000000010000a0}, | |
432 {40, 0x0000000000800c00}, {41, 0x0000000000400000}, | |
433 {42, 0x000000000020000d}, {43, 0x0000000000100f00}, | |
434 {44, 0x0000000000080000}, {45, 0x0000000000041000}, | |
435 {46, 0x0000000000020020}, {47, 0x0000000000010300}, | |
436 {48, 0x0000000000008040}, {49, 0x0000000000004005}, | |
437 {50, 0x0000000000002050}, {51, 0x0000000000001700}, | |
438 {52, 0x0000000000000870}, {53, 0x0000000000000405}, | |
439 {54, 0x0000000000000203}, {55, 0x0000000000000101}, | |
440 {56, 0x0000000000000089}, {57, 0x0000000000000041}, | |
441 {58, 0x0000000000000022}, {59, 0x0000000000000013}, | |
442 {60, 0x0000000000000008}, {61, 0x0000000000000004}, | |
443 {62, 0x0000000000000002}, {63, 0x0000000000000001}, | |
444 {64, 0x0000000000000000}}; | |
445 | |
446 WasmRunner<int64_t> r(MachineType::Uint64()); | |
447 BUILD(r, WASM_I64_CLZ(WASM_GET_LOCAL(0))); | |
448 for (size_t i = 0; i < arraysize(values); i++) { | |
449 CHECK_EQ(values[i].expected, r.Call(values[i].input)); | |
450 } | |
451 } | |
452 | |
453 | |
454 TEST(Run_WasmInt64Ctz) { | |
455 struct { | |
456 int64_t expected; | |
457 uint64_t input; | |
458 } values[] = {{64, 0x0000000000000000}, {63, 0x8000000000000000}, | |
459 {62, 0x4000000000000000}, {61, 0x2000000000000000}, | |
460 {60, 0x1000000000000000}, {59, 0xa800000000000000}, | |
461 {58, 0xf400000000000000}, {57, 0x6200000000000000}, | |
462 {56, 0x9100000000000000}, {55, 0xcd80000000000000}, | |
463 {54, 0x0940000000000000}, {53, 0xaf20000000000000}, | |
464 {52, 0xac10000000000000}, {51, 0xe0b8000000000000}, | |
465 {50, 0x9ce4000000000000}, {49, 0xc792000000000000}, | |
466 {48, 0xb8f1000000000000}, {47, 0x3b9f800000000000}, | |
467 {46, 0xdb4c400000000000}, {45, 0xe9a3200000000000}, | |
468 {44, 0xfca6100000000000}, {43, 0x6c8a780000000000}, | |
469 {42, 0x8ce5a40000000000}, {41, 0xcb7d020000000000}, | |
470 {40, 0xcb4dc10000000000}, {39, 0xdfbec58000000000}, | |
471 {38, 0x27a9db4000000000}, {37, 0xde3bcb2000000000}, | |
472 {36, 0xd7e8a61000000000}, {35, 0x9afdbc8800000000}, | |
473 {34, 0x9afdbc8400000000}, {33, 0x9afdbc8200000000}, | |
474 {32, 0x9afdbc8100000000}, {31, 0x0000000080000000}, | |
475 {30, 0x0000000040000000}, {29, 0x0000000020000000}, | |
476 {28, 0x0000000010000000}, {27, 0x00000000a8000000}, | |
477 {26, 0x00000000f4000000}, {25, 0x0000000062000000}, | |
478 {24, 0x0000000091000000}, {23, 0x00000000cd800000}, | |
479 {22, 0x0000000009400000}, {21, 0x00000000af200000}, | |
480 {20, 0x00000000ac100000}, {19, 0x00000000e0b80000}, | |
481 {18, 0x000000009ce40000}, {17, 0x00000000c7920000}, | |
482 {16, 0x00000000b8f10000}, {15, 0x000000003b9f8000}, | |
483 {14, 0x00000000db4c4000}, {13, 0x00000000e9a32000}, | |
484 {12, 0x00000000fca61000}, {11, 0x000000006c8a7800}, | |
485 {10, 0x000000008ce5a400}, {9, 0x00000000cb7d0200}, | |
486 {8, 0x00000000cb4dc100}, {7, 0x00000000dfbec580}, | |
487 {6, 0x0000000027a9db40}, {5, 0x00000000de3bcb20}, | |
488 {4, 0x00000000d7e8a610}, {3, 0x000000009afdbc88}, | |
489 {2, 0x000000009afdbc84}, {1, 0x000000009afdbc82}, | |
490 {0, 0x000000009afdbc81}}; | |
491 | |
492 WasmRunner<int64_t> r(MachineType::Uint64()); | |
493 BUILD(r, WASM_I64_CTZ(WASM_GET_LOCAL(0))); | |
494 for (size_t i = 0; i < arraysize(values); i++) { | |
495 CHECK_EQ(values[i].expected, r.Call(values[i].input)); | |
496 } | |
497 } | |
498 | |
499 | |
500 TEST(Run_WasmInt64Popcnt) { | |
501 struct { | |
502 int64_t expected; | |
503 uint64_t input; | |
504 } values[] = {{64, 0xffffffffffffffff}, | |
505 {0, 0x0000000000000000}, | |
506 {2, 0x0000080000008000}, | |
507 {26, 0x1123456782345678}, | |
508 {38, 0xffedcba09edcba09}}; | |
509 | |
510 WasmRunner<int64_t> r(MachineType::Uint64()); | |
511 BUILD(r, WASM_I64_POPCNT(WASM_GET_LOCAL(0))); | |
512 for (size_t i = 0; i < arraysize(values); i++) { | |
513 CHECK_EQ(values[i].expected, r.Call(values[i].input)); | |
514 } | |
515 } | |
516 | |
517 | |
518 #endif | |
519 | |
520 TEST(Run_WASM_Int32DivS_trap) { | 328 TEST(Run_WASM_Int32DivS_trap) { |
521 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); | 329 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); |
522 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 330 BUILD(r, WASM_I32_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
523 CHECK_EQ(0, r.Call(0, 100)); | 331 CHECK_EQ(0, r.Call(0, 100)); |
524 CHECK_TRAP(r.Call(100, 0)); | 332 CHECK_TRAP(r.Call(100, 0)); |
525 CHECK_TRAP(r.Call(-1001, 0)); | 333 CHECK_TRAP(r.Call(-1001, 0)); |
526 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), -1)); | 334 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), -1)); |
527 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); | 335 CHECK_TRAP(r.Call(std::numeric_limits<int32_t>::min(), 0)); |
528 } | 336 } |
529 | 337 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 WASM_I32_DIVS(WASM_STORE_MEM(MachineType::Int8(), | 414 WASM_I32_DIVS(WASM_STORE_MEM(MachineType::Int8(), |
607 WASM_ZERO, WASM_GET_LOCAL(0)), | 415 WASM_ZERO, WASM_GET_LOCAL(0)), |
608 WASM_GET_LOCAL(1)))); | 416 WASM_GET_LOCAL(1)))); |
609 CHECK_EQ(0, r.Call(0, 100)); | 417 CHECK_EQ(0, r.Call(0, 100)); |
610 CHECK_TRAP(r.Call(8, 0)); | 418 CHECK_TRAP(r.Call(8, 0)); |
611 CHECK_TRAP(r.Call(4, 0)); | 419 CHECK_TRAP(r.Call(4, 0)); |
612 CHECK_TRAP(r.Call(0, 0)); | 420 CHECK_TRAP(r.Call(0, 0)); |
613 } | 421 } |
614 | 422 |
615 | 423 |
616 #if WASM_64 | |
617 #define as64(x) static_cast<int64_t>(x) | |
618 TEST(Run_WASM_Int64DivS_trap) { | |
619 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
620 BUILD(r, WASM_I64_DIVS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
621 CHECK_EQ(0, r.Call(as64(0), as64(100))); | |
622 CHECK_TRAP64(r.Call(as64(100), as64(0))); | |
623 CHECK_TRAP64(r.Call(as64(-1001), as64(0))); | |
624 CHECK_TRAP64(r.Call(std::numeric_limits<int64_t>::min(), as64(-1))); | |
625 CHECK_TRAP64(r.Call(std::numeric_limits<int64_t>::min(), as64(0))); | |
626 } | |
627 | |
628 | |
629 TEST(Run_WASM_Int64RemS_trap) { | |
630 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
631 BUILD(r, WASM_I64_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
632 CHECK_EQ(33, r.Call(as64(133), as64(100))); | |
633 CHECK_EQ(0, r.Call(std::numeric_limits<int64_t>::min(), as64(-1))); | |
634 CHECK_TRAP64(r.Call(as64(100), as64(0))); | |
635 CHECK_TRAP64(r.Call(as64(-1001), as64(0))); | |
636 CHECK_TRAP64(r.Call(std::numeric_limits<int64_t>::min(), as64(0))); | |
637 } | |
638 | |
639 | |
640 TEST(Run_WASM_Int64DivU_trap) { | |
641 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
642 BUILD(r, WASM_I64_DIVU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
643 CHECK_EQ(0, r.Call(as64(0), as64(100))); | |
644 CHECK_EQ(0, r.Call(std::numeric_limits<int64_t>::min(), as64(-1))); | |
645 CHECK_TRAP64(r.Call(as64(100), as64(0))); | |
646 CHECK_TRAP64(r.Call(as64(-1001), as64(0))); | |
647 CHECK_TRAP64(r.Call(std::numeric_limits<int64_t>::min(), as64(0))); | |
648 } | |
649 | |
650 | |
651 TEST(Run_WASM_Int64RemU_trap) { | |
652 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
653 BUILD(r, WASM_I64_REMU(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
654 CHECK_EQ(17, r.Call(as64(217), as64(100))); | |
655 CHECK_TRAP64(r.Call(as64(100), as64(0))); | |
656 CHECK_TRAP64(r.Call(as64(-1001), as64(0))); | |
657 CHECK_TRAP64(r.Call(std::numeric_limits<int64_t>::min(), as64(0))); | |
658 CHECK_EQ(std::numeric_limits<int64_t>::min(), | |
659 r.Call(std::numeric_limits<int64_t>::min(), as64(-1))); | |
660 } | |
661 | |
662 | |
663 TEST(Run_WASM_Int64DivS_byzero_const) { | |
664 for (int8_t denom = -2; denom < 8; denom++) { | |
665 WasmRunner<int64_t> r(MachineType::Int64()); | |
666 BUILD(r, WASM_I64_DIVS(WASM_GET_LOCAL(0), WASM_I64V_1(denom))); | |
667 for (int64_t val = -7; val < 8; val++) { | |
668 if (denom == 0) { | |
669 CHECK_TRAP64(r.Call(val)); | |
670 } else { | |
671 CHECK_EQ(val / denom, r.Call(val)); | |
672 } | |
673 } | |
674 } | |
675 } | |
676 | |
677 | |
678 TEST(Run_WASM_Int64DivU_byzero_const) { | |
679 for (uint64_t denom = 0xfffffffffffffffe; denom < 8; denom++) { | |
680 WasmRunner<uint64_t> r(MachineType::Uint64()); | |
681 BUILD(r, WASM_I64_DIVU(WASM_GET_LOCAL(0), WASM_I64V_1(denom))); | |
682 | |
683 for (uint64_t val = 0xfffffffffffffff0; val < 8; val++) { | |
684 if (denom == 0) { | |
685 CHECK_TRAP64(r.Call(val)); | |
686 } else { | |
687 CHECK_EQ(val / denom, r.Call(val)); | |
688 } | |
689 } | |
690 } | |
691 } | |
692 #endif | |
693 | |
694 | |
695 void TestFloat32Binop(WasmOpcode opcode, int32_t expected, float a, float b) { | 424 void TestFloat32Binop(WasmOpcode opcode, int32_t expected, float a, float b) { |
696 { | 425 { |
697 WasmRunner<int32_t> r; | 426 WasmRunner<int32_t> r; |
698 // return K op K | 427 // return K op K |
699 BUILD(r, WASM_BINOP(opcode, WASM_F32(a), WASM_F32(b))); | 428 BUILD(r, WASM_BINOP(opcode, WASM_F32(a), WASM_F32(b))); |
700 CHECK_EQ(expected, r.Call()); | 429 CHECK_EQ(expected, r.Call()); |
701 } | 430 } |
702 { | 431 { |
703 WasmRunner<int32_t> r(MachineType::Float32(), MachineType::Float32()); | 432 WasmRunner<int32_t> r(MachineType::Float32(), MachineType::Float32()); |
704 // return a op b | 433 // return a op b |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 | 626 |
898 TEST(Run_Wasm_Return_I32) { | 627 TEST(Run_Wasm_Return_I32) { |
899 WasmRunner<int32_t> r(MachineType::Int32()); | 628 WasmRunner<int32_t> r(MachineType::Int32()); |
900 | 629 |
901 BUILD(r, RET(WASM_GET_LOCAL(0))); | 630 BUILD(r, RET(WASM_GET_LOCAL(0))); |
902 | 631 |
903 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 632 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
904 } | 633 } |
905 | 634 |
906 | 635 |
907 #if WASM_64 | |
908 TEST(Run_Wasm_Return_I64) { | |
909 WasmRunner<int64_t> r(MachineType::Int64()); | |
910 | |
911 BUILD(r, RET(WASM_GET_LOCAL(0))); | |
912 | |
913 FOR_INT64_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | |
914 } | |
915 #endif | |
916 | |
917 | |
918 TEST(Run_Wasm_Return_F32) { | 636 TEST(Run_Wasm_Return_F32) { |
919 WasmRunner<float> r(MachineType::Float32()); | 637 WasmRunner<float> r(MachineType::Float32()); |
920 | 638 |
921 BUILD(r, RET(WASM_GET_LOCAL(0))); | 639 BUILD(r, RET(WASM_GET_LOCAL(0))); |
922 | 640 |
923 FOR_FLOAT32_INPUTS(i) { | 641 FOR_FLOAT32_INPUTS(i) { |
924 float expect = *i; | 642 float expect = *i; |
925 float result = r.Call(expect); | 643 float result = r.Call(expect); |
926 if (std::isnan(expect)) { | 644 if (std::isnan(expect)) { |
927 CHECK(std::isnan(result)); | 645 CHECK(std::isnan(result)); |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1660 CHECK_EQ(0, r.Call(boundary)); // in bounds. | 1378 CHECK_EQ(0, r.Call(boundary)); // in bounds. |
1661 CHECK_EQ(0, memcmp(&memory[0], &memory[8 + boundary], memsize)); | 1379 CHECK_EQ(0, memcmp(&memory[0], &memory[8 + boundary], memsize)); |
1662 | 1380 |
1663 for (uint32_t offset = boundary + 1; offset < boundary + 19; offset++) { | 1381 for (uint32_t offset = boundary + 1; offset < boundary + 19; offset++) { |
1664 CHECK_TRAP(r.Call(offset)); // out of bounds. | 1382 CHECK_TRAP(r.Call(offset)); // out of bounds. |
1665 } | 1383 } |
1666 } | 1384 } |
1667 } | 1385 } |
1668 | 1386 |
1669 | 1387 |
1670 #if WASM_64 | |
1671 TEST(Run_Wasm_F64ReinterpretI64) { | |
1672 TestingModule module; | |
1673 int64_t* memory = module.AddMemoryElems<int64_t>(8); | |
1674 WasmRunner<int64_t> r(&module); | |
1675 | |
1676 BUILD(r, WASM_I64_REINTERPRET_F64( | |
1677 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO))); | |
1678 | |
1679 FOR_INT32_INPUTS(i) { | |
1680 int64_t expected = static_cast<int64_t>(*i) * 0x300010001; | |
1681 memory[0] = expected; | |
1682 CHECK_EQ(expected, r.Call()); | |
1683 } | |
1684 } | |
1685 | |
1686 | |
1687 TEST(Run_Wasm_I64ReinterpretF64) { | |
1688 TestingModule module; | |
1689 int64_t* memory = module.AddMemoryElems<int64_t>(8); | |
1690 WasmRunner<int64_t> r(&module, MachineType::Int64()); | |
1691 | |
1692 BUILD(r, WASM_BLOCK( | |
1693 2, WASM_STORE_MEM(MachineType::Float64(), WASM_ZERO, | |
1694 WASM_F64_REINTERPRET_I64(WASM_GET_LOCAL(0))), | |
1695 WASM_GET_LOCAL(0))); | |
1696 | |
1697 FOR_INT32_INPUTS(i) { | |
1698 int64_t expected = static_cast<int64_t>(*i) * 0x300010001; | |
1699 CHECK_EQ(expected, r.Call(expected)); | |
1700 CHECK_EQ(expected, memory[0]); | |
1701 } | |
1702 } | |
1703 | |
1704 | |
1705 TEST(Run_Wasm_LoadMemI64) { | |
1706 TestingModule module; | |
1707 int64_t* memory = module.AddMemoryElems<int64_t>(8); | |
1708 module.RandomizeMemory(1111); | |
1709 WasmRunner<int64_t> r(&module); | |
1710 | |
1711 BUILD(r, WASM_LOAD_MEM(MachineType::Int64(), WASM_I8(0))); | |
1712 | |
1713 memory[0] = 0xaabbccdd00112233LL; | |
1714 CHECK_EQ(0xaabbccdd00112233LL, r.Call()); | |
1715 | |
1716 memory[0] = 0x33aabbccdd001122LL; | |
1717 CHECK_EQ(0x33aabbccdd001122LL, r.Call()); | |
1718 | |
1719 memory[0] = 77777777; | |
1720 CHECK_EQ(77777777, r.Call()); | |
1721 } | |
1722 #endif | |
1723 | |
1724 | |
1725 TEST(Run_Wasm_LoadMemI32_P) { | 1388 TEST(Run_Wasm_LoadMemI32_P) { |
1726 const int kNumElems = 8; | 1389 const int kNumElems = 8; |
1727 TestingModule module; | 1390 TestingModule module; |
1728 int32_t* memory = module.AddMemoryElems<int32_t>(kNumElems); | 1391 int32_t* memory = module.AddMemoryElems<int32_t>(kNumElems); |
1729 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1392 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
1730 module.RandomizeMemory(2222); | 1393 module.RandomizeMemory(2222); |
1731 | 1394 |
1732 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))); | 1395 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))); |
1733 | 1396 |
1734 for (int i = 0; i < kNumElems; i++) { | 1397 for (int i = 0; i < kNumElems; i++) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1813 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, | 1476 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, |
1814 WASM_GET_LOCAL(kSum)), | 1477 WASM_GET_LOCAL(kSum)), |
1815 WASM_GET_LOCAL(0))); | 1478 WASM_GET_LOCAL(0))); |
1816 | 1479 |
1817 CHECK_EQ(0, r.Call(4 * (kSize - 1))); | 1480 CHECK_EQ(0, r.Call(4 * (kSize - 1))); |
1818 CHECK_NE(-99.25, buffer[0]); | 1481 CHECK_NE(-99.25, buffer[0]); |
1819 CHECK_EQ(71256.0f, buffer[0]); | 1482 CHECK_EQ(71256.0f, buffer[0]); |
1820 } | 1483 } |
1821 | 1484 |
1822 | 1485 |
1823 #if WASM_64 | |
1824 TEST(Run_Wasm_MemI64_Sum) { | |
1825 const int kNumElems = 20; | |
1826 TestingModule module; | |
1827 uint64_t* memory = module.AddMemoryElems<uint64_t>(kNumElems); | |
1828 WasmRunner<uint64_t> r(&module, MachineType::Int32()); | |
1829 const byte kSum = r.AllocateLocal(kAstI64); | |
1830 | |
1831 BUILD(r, WASM_BLOCK( | |
1832 2, WASM_WHILE( | |
1833 WASM_GET_LOCAL(0), | |
1834 WASM_BLOCK( | |
1835 2, WASM_SET_LOCAL( | |
1836 kSum, WASM_I64_ADD( | |
1837 WASM_GET_LOCAL(kSum), | |
1838 WASM_LOAD_MEM(MachineType::Int64(), | |
1839 WASM_GET_LOCAL(0)))), | |
1840 WASM_SET_LOCAL( | |
1841 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(8))))), | |
1842 WASM_GET_LOCAL(1))); | |
1843 | |
1844 // Run 4 trials. | |
1845 for (int i = 0; i < 3; i++) { | |
1846 module.RandomizeMemory(i * 33); | |
1847 uint64_t expected = 0; | |
1848 for (size_t j = kNumElems - 1; j > 0; j--) { | |
1849 expected += memory[j]; | |
1850 } | |
1851 uint64_t result = r.Call(8 * (kNumElems - 1)); | |
1852 CHECK_EQ(expected, result); | |
1853 } | |
1854 } | |
1855 #endif | |
1856 | |
1857 | |
1858 template <typename T> | 1486 template <typename T> |
1859 T GenerateAndRunFold(WasmOpcode binop, T* buffer, size_t size, | 1487 T GenerateAndRunFold(WasmOpcode binop, T* buffer, size_t size, |
1860 LocalType astType, MachineType memType) { | 1488 LocalType astType, MachineType memType) { |
1861 TestingModule module; | 1489 TestingModule module; |
1862 module.AddMemoryElems<T>(size); | 1490 module.AddMemoryElems<T>(size); |
1863 for (size_t i = 0; i < size; i++) { | 1491 for (size_t i = 0; i < size; i++) { |
1864 module.raw_mem_start<T>()[i] = buffer[i]; | 1492 module.raw_mem_start<T>()[i] = buffer[i]; |
1865 } | 1493 } |
1866 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1494 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
1867 const byte kAccum = r.AllocateLocal(astType); | 1495 const byte kAccum = r.AllocateLocal(astType); |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2135 r.Call(i); | 1763 r.Call(i); |
2136 for (int j = 0; j < kNumGlobals; j++) { | 1764 for (int j = 0; j < kNumGlobals; j++) { |
2137 int32_t expected = j == g ? sum : before[j]; | 1765 int32_t expected = j == g ? sum : before[j]; |
2138 CHECK_EQ(expected, *globals[j]); | 1766 CHECK_EQ(expected, *globals[j]); |
2139 } | 1767 } |
2140 } | 1768 } |
2141 } | 1769 } |
2142 } | 1770 } |
2143 | 1771 |
2144 | 1772 |
2145 #if WASM_64 | |
2146 TEST(Run_WasmInt64Global) { | |
2147 TestingModule module; | |
2148 int64_t* global = module.AddGlobal<int64_t>(MachineType::Int64()); | |
2149 WasmRunner<int32_t> r(&module, MachineType::Int32()); | |
2150 // global = global + p0 | |
2151 BUILD(r, B2(WASM_STORE_GLOBAL( | |
2152 0, WASM_I64_ADD(WASM_LOAD_GLOBAL(0), | |
2153 WASM_I64_SCONVERT_I32(WASM_GET_LOCAL(0)))), | |
2154 WASM_ZERO)); | |
2155 | |
2156 *global = 0xFFFFFFFFFFFFFFFFLL; | |
2157 for (int i = 9; i < 444444; i += 111111) { | |
2158 int64_t expected = *global + i; | |
2159 r.Call(i); | |
2160 CHECK_EQ(expected, *global); | |
2161 } | |
2162 } | |
2163 #endif | |
2164 | |
2165 | |
2166 TEST(Run_WasmFloat32Global) { | 1773 TEST(Run_WasmFloat32Global) { |
2167 TestingModule module; | 1774 TestingModule module; |
2168 float* global = module.AddGlobal<float>(MachineType::Float32()); | 1775 float* global = module.AddGlobal<float>(MachineType::Float32()); |
2169 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1776 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
2170 // global = global + p0 | 1777 // global = global + p0 |
2171 BUILD(r, B2(WASM_STORE_GLOBAL( | 1778 BUILD(r, B2(WASM_STORE_GLOBAL( |
2172 0, WASM_F32_ADD(WASM_LOAD_GLOBAL(0), | 1779 0, WASM_F32_ADD(WASM_LOAD_GLOBAL(0), |
2173 WASM_F32_SCONVERT_I32(WASM_GET_LOCAL(0)))), | 1780 WASM_F32_SCONVERT_I32(WASM_GET_LOCAL(0)))), |
2174 WASM_ZERO)); | 1781 WASM_ZERO)); |
2175 | 1782 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2249 CHECK(static_cast<uint16_t>(0xccaa) == *var_uint16); | 1856 CHECK(static_cast<uint16_t>(0xccaa) == *var_uint16); |
2250 CHECK(static_cast<int32_t>(0xee55ccaa) == *var_int32); | 1857 CHECK(static_cast<int32_t>(0xee55ccaa) == *var_int32); |
2251 CHECK(static_cast<uint32_t>(0xee55ccaa) == *var_uint32); | 1858 CHECK(static_cast<uint32_t>(0xee55ccaa) == *var_uint32); |
2252 CHECK(bit_cast<float>(0xee55ccaa) == *var_float); | 1859 CHECK(bit_cast<float>(0xee55ccaa) == *var_float); |
2253 CHECK(bit_cast<double>(0x99112233ee55ccaaULL) == *var_double); | 1860 CHECK(bit_cast<double>(0x99112233ee55ccaaULL) == *var_double); |
2254 | 1861 |
2255 USE(unused); | 1862 USE(unused); |
2256 } | 1863 } |
2257 | 1864 |
2258 | 1865 |
2259 #if WASM_64 | |
2260 // Test the WasmRunner with an Int64 return value and different numbers of | |
2261 // Int64 parameters. | |
2262 TEST(Run_TestI64WasmRunner) { | |
2263 { | |
2264 FOR_INT64_INPUTS(i) { | |
2265 WasmRunner<int64_t> r; | |
2266 BUILD(r, WASM_I64V(*i)); | |
2267 CHECK_EQ(*i, r.Call()); | |
2268 } | |
2269 } | |
2270 { | |
2271 WasmRunner<int64_t> r(MachineType::Int64()); | |
2272 BUILD(r, WASM_GET_LOCAL(0)); | |
2273 FOR_INT64_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | |
2274 } | |
2275 { | |
2276 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
2277 BUILD(r, WASM_I64_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
2278 FOR_INT64_INPUTS(i) { | |
2279 FOR_INT64_INPUTS(j) { CHECK_EQ(*i + *j, r.Call(*i, *j)); } | |
2280 } | |
2281 } | |
2282 { | |
2283 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64(), | |
2284 MachineType::Int64()); | |
2285 BUILD(r, WASM_I64_ADD(WASM_GET_LOCAL(0), | |
2286 WASM_I64_ADD(WASM_GET_LOCAL(1), WASM_GET_LOCAL(2)))); | |
2287 FOR_INT64_INPUTS(i) { | |
2288 FOR_INT64_INPUTS(j) { | |
2289 CHECK_EQ(*i + *j + *j, r.Call(*i, *j, *j)); | |
2290 CHECK_EQ(*j + *i + *j, r.Call(*j, *i, *j)); | |
2291 CHECK_EQ(*j + *j + *i, r.Call(*j, *j, *i)); | |
2292 } | |
2293 } | |
2294 } | |
2295 { | |
2296 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64(), | |
2297 MachineType::Int64(), MachineType::Int64()); | |
2298 BUILD(r, WASM_I64_ADD(WASM_GET_LOCAL(0), | |
2299 WASM_I64_ADD(WASM_GET_LOCAL(1), | |
2300 WASM_I64_ADD(WASM_GET_LOCAL(2), | |
2301 WASM_GET_LOCAL(3))))); | |
2302 FOR_INT64_INPUTS(i) { | |
2303 FOR_INT64_INPUTS(j) { | |
2304 CHECK_EQ(*i + *j + *j + *j, r.Call(*i, *j, *j, *j)); | |
2305 CHECK_EQ(*j + *i + *j + *j, r.Call(*j, *i, *j, *j)); | |
2306 CHECK_EQ(*j + *j + *i + *j, r.Call(*j, *j, *i, *j)); | |
2307 CHECK_EQ(*j + *j + *j + *i, r.Call(*j, *j, *j, *i)); | |
2308 } | |
2309 } | |
2310 } | |
2311 } | |
2312 #endif | |
2313 | |
2314 | |
2315 TEST(Run_WasmCallEmpty) { | 1866 TEST(Run_WasmCallEmpty) { |
2316 const int32_t kExpected = -414444; | 1867 const int32_t kExpected = -414444; |
2317 // Build the target function. | 1868 // Build the target function. |
2318 TestSignatures sigs; | 1869 TestSignatures sigs; |
2319 TestingModule module; | 1870 TestingModule module; |
2320 WasmFunctionCompiler t(sigs.i_v(), &module); | 1871 WasmFunctionCompiler t(sigs.i_v(), &module); |
2321 BUILD(t, WASM_I32V_3(kExpected)); | 1872 BUILD(t, WASM_I32V_3(kExpected)); |
2322 uint32_t index = t.CompileAndAdd(); | 1873 uint32_t index = t.CompileAndAdd(); |
2323 | 1874 |
2324 // Build the calling function. | 1875 // Build the calling function. |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2418 | 1969 |
2419 FOR_INT32_INPUTS(i) { | 1970 FOR_INT32_INPUTS(i) { |
2420 FOR_INT32_INPUTS(j) { | 1971 FOR_INT32_INPUTS(j) { |
2421 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + | 1972 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + |
2422 static_cast<uint32_t>(*j)); | 1973 static_cast<uint32_t>(*j)); |
2423 CHECK_EQ(expected, r.Call(*i, *j)); | 1974 CHECK_EQ(expected, r.Call(*i, *j)); |
2424 } | 1975 } |
2425 } | 1976 } |
2426 } | 1977 } |
2427 | 1978 |
2428 #if WASM_64 | |
2429 TEST(Run_WasmCall_Int64Sub) { | |
2430 // Build the target function. | |
2431 TestSignatures sigs; | |
2432 TestingModule module; | |
2433 WasmFunctionCompiler t(sigs.l_ll(), &module); | |
2434 BUILD(t, WASM_I64_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
2435 uint32_t index = t.CompileAndAdd(); | |
2436 | |
2437 // Build the caller function. | |
2438 WasmRunner<int64_t> r(&module, MachineType::Int64(), MachineType::Int64()); | |
2439 BUILD(r, WASM_CALL_FUNCTION(index, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
2440 | |
2441 FOR_INT32_INPUTS(i) { | |
2442 FOR_INT32_INPUTS(j) { | |
2443 int64_t a = static_cast<int64_t>(*i) << 32 | | |
2444 (static_cast<int64_t>(*j) | 0xFFFFFFFF); | |
2445 int64_t b = static_cast<int64_t>(*j) << 32 | | |
2446 (static_cast<int64_t>(*i) | 0xFFFFFFFF); | |
2447 | |
2448 int64_t expected = static_cast<int64_t>(static_cast<uint64_t>(a) - | |
2449 static_cast<uint64_t>(b)); | |
2450 CHECK_EQ(expected, r.Call(a, b)); | |
2451 } | |
2452 } | |
2453 } | |
2454 #endif | |
2455 | |
2456 | |
2457 TEST(Run_WasmCall_Float32Sub) { | 1979 TEST(Run_WasmCall_Float32Sub) { |
2458 TestSignatures sigs; | 1980 TestSignatures sigs; |
2459 TestingModule module; | 1981 TestingModule module; |
2460 WasmFunctionCompiler t(sigs.f_ff(), &module); | 1982 WasmFunctionCompiler t(sigs.f_ff(), &module); |
2461 | 1983 |
2462 // Build the target function. | 1984 // Build the target function. |
2463 BUILD(t, WASM_F32_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 1985 BUILD(t, WASM_F32_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
2464 uint32_t index = t.CompileAndAdd(); | 1986 uint32_t index = t.CompileAndAdd(); |
2465 | 1987 |
2466 // Builder the caller function. | 1988 // Builder the caller function. |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2765 WASM_BRV(1, WASM_I8(14)))))); | 2287 WASM_BRV(1, WASM_I8(14)))))); |
2766 | 2288 |
2767 | 2289 |
2768 CHECK_EQ(11, r.Call(1, 1)); | 2290 CHECK_EQ(11, r.Call(1, 1)); |
2769 CHECK_EQ(12, r.Call(1, 0)); | 2291 CHECK_EQ(12, r.Call(1, 0)); |
2770 CHECK_EQ(13, r.Call(0, 1)); | 2292 CHECK_EQ(13, r.Call(0, 1)); |
2771 CHECK_EQ(14, r.Call(0, 0)); | 2293 CHECK_EQ(14, r.Call(0, 0)); |
2772 } | 2294 } |
2773 | 2295 |
2774 | 2296 |
2775 #if WASM_64 | |
2776 TEST(Run_Wasm_LoadStoreI64_sx) { | |
2777 byte loads[] = {kExprI64LoadMem8S, kExprI64LoadMem16S, kExprI64LoadMem32S, | |
2778 kExprI64LoadMem}; | |
2779 | |
2780 for (size_t m = 0; m < arraysize(loads); m++) { | |
2781 TestingModule module; | |
2782 byte* memory = module.AddMemoryElems<byte>(16); | |
2783 WasmRunner<int64_t> r(&module); | |
2784 | |
2785 byte code[] = {kExprI64StoreMem, ZERO_ALIGNMENT, | |
2786 ZERO_OFFSET, // -- | |
2787 kExprI8Const, 8, // -- | |
2788 loads[m], ZERO_ALIGNMENT, | |
2789 ZERO_OFFSET, // -- | |
2790 kExprI8Const, 0}; // -- | |
2791 | |
2792 r.Build(code, code + arraysize(code)); | |
2793 | |
2794 // Try a bunch of different negative values. | |
2795 for (int i = -1; i >= -128; i -= 11) { | |
2796 int size = 1 << m; | |
2797 module.BlankMemory(); | |
2798 memory[size - 1] = static_cast<byte>(i); // set the high order byte. | |
2799 | |
2800 int64_t expected = static_cast<int64_t>(i) << ((size - 1) * 8); | |
2801 | |
2802 CHECK_EQ(expected, r.Call()); | |
2803 CHECK_EQ(static_cast<byte>(i), memory[8 + size - 1]); | |
2804 for (int j = size; j < 8; j++) { | |
2805 CHECK_EQ(255, memory[8 + j]); | |
2806 } | |
2807 } | |
2808 } | |
2809 } | |
2810 | |
2811 | |
2812 #endif | |
2813 | |
2814 | |
2815 TEST(Run_Wasm_SimpleCallIndirect) { | 2297 TEST(Run_Wasm_SimpleCallIndirect) { |
2816 TestSignatures sigs; | 2298 TestSignatures sigs; |
2817 TestingModule module; | 2299 TestingModule module; |
2818 | 2300 |
2819 WasmFunctionCompiler t1(sigs.i_ii(), &module); | 2301 WasmFunctionCompiler t1(sigs.i_ii(), &module); |
2820 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 2302 BUILD(t1, WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
2821 t1.CompileAndAdd(/*sig_index*/ 1); | 2303 t1.CompileAndAdd(/*sig_index*/ 1); |
2822 | 2304 |
2823 WasmFunctionCompiler t2(sigs.i_ii(), &module); | 2305 WasmFunctionCompiler t2(sigs.i_ii(), &module); |
2824 BUILD(t2, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 2306 BUILD(t2, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3250 | 2732 |
3251 #if WASM_64 | 2733 #if WASM_64 |
3252 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } | 2734 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } |
3253 #endif | 2735 #endif |
3254 | 2736 |
3255 | 2737 |
3256 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } | 2738 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } |
3257 | 2739 |
3258 | 2740 |
3259 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } | 2741 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } |
OLD | NEW |