| 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 |
| 11 #include "test/cctest/cctest.h" | 11 #include "test/cctest/cctest.h" |
| 12 #include "test/cctest/compiler/value-helper.h" | 12 #include "test/cctest/compiler/value-helper.h" |
| 13 #include "test/cctest/wasm/test-signatures.h" | 13 #include "test/cctest/wasm/test-signatures.h" |
| 14 #include "test/cctest/wasm/wasm-run-utils.h" | 14 #include "test/cctest/wasm/wasm-run-utils.h" |
| 15 | 15 |
| 16 using namespace v8::base; | 16 using namespace v8::base; |
| 17 using namespace v8::internal; | 17 using namespace v8::internal; |
| 18 using namespace v8::internal::compiler; | 18 using namespace v8::internal::compiler; |
| 19 using namespace v8::internal::wasm; | 19 using namespace v8::internal::wasm; |
| 20 | 20 |
| 21 #define BUILD(r, ...) \ | |
| 22 do { \ | |
| 23 byte code[] = {__VA_ARGS__}; \ | |
| 24 r.Build(code, code + arraysize(code)); \ | |
| 25 } while (false) | |
| 26 | |
| 27 | |
| 28 TEST(Run_WasmInt8Const) { | 21 TEST(Run_WasmInt8Const) { |
| 29 WasmRunner<int32_t> r; | 22 WasmRunner<int32_t> r; |
| 30 const byte kExpectedValue = 121; | 23 const byte kExpectedValue = 121; |
| 31 // return(kExpectedValue) | 24 // return(kExpectedValue) |
| 32 BUILD(r, WASM_I8(kExpectedValue)); | 25 BUILD(r, WASM_I8(kExpectedValue)); |
| 33 CHECK_EQ(kExpectedValue, r.Call()); | 26 CHECK_EQ(kExpectedValue, r.Call()); |
| 34 } | 27 } |
| 35 | 28 |
| 36 | 29 |
| 37 TEST(Run_WasmInt8Const_fallthru1) { | 30 TEST(Run_WasmInt8Const_fallthru1) { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 WasmRunner<int64_t> r; | 101 WasmRunner<int64_t> r; |
| 109 const int64_t kExpectedValue = (static_cast<int64_t>(*i) << 32) | cntr; | 102 const int64_t kExpectedValue = (static_cast<int64_t>(*i) << 32) | cntr; |
| 110 // return(kExpectedValue) | 103 // return(kExpectedValue) |
| 111 BUILD(r, WASM_I64(kExpectedValue)); | 104 BUILD(r, WASM_I64(kExpectedValue)); |
| 112 CHECK_EQ(kExpectedValue, r.Call()); | 105 CHECK_EQ(kExpectedValue, r.Call()); |
| 113 cntr++; | 106 cntr++; |
| 114 } | 107 } |
| 115 } | 108 } |
| 116 #endif | 109 #endif |
| 117 | 110 |
| 118 TEST(Run_WasmI32ConvertI64) { | |
| 119 FOR_INT64_INPUTS(i) { | |
| 120 WasmRunner<int32_t> r; | |
| 121 BUILD(r, WASM_I32_CONVERT_I64(WASM_I64(*i))); | |
| 122 CHECK_EQ(static_cast<int32_t>(*i), r.Call()); | |
| 123 } | |
| 124 } | |
| 125 | |
| 126 TEST(Run_WasmI64AndConstants) { | |
| 127 FOR_INT64_INPUTS(i) { | |
| 128 FOR_INT64_INPUTS(j) { | |
| 129 WasmRunner<int32_t> r; | |
| 130 BUILD(r, WASM_I32_CONVERT_I64(WASM_I64_AND(WASM_I64(*i), WASM_I64(*j)))); | |
| 131 CHECK_EQ(static_cast<int32_t>(*i & *j), r.Call()); | |
| 132 } | |
| 133 } | |
| 134 } | |
| 135 | 111 |
| 136 TEST(Run_WasmInt32Param0) { | 112 TEST(Run_WasmInt32Param0) { |
| 137 WasmRunner<int32_t> r(MachineType::Int32()); | 113 WasmRunner<int32_t> r(MachineType::Int32()); |
| 138 // return(local[0]) | 114 // return(local[0]) |
| 139 BUILD(r, WASM_GET_LOCAL(0)); | 115 BUILD(r, WASM_GET_LOCAL(0)); |
| 140 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 116 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
| 141 } | 117 } |
| 142 | 118 |
| 143 | 119 |
| 144 TEST(Run_WasmInt32Param0_fallthru) { | 120 TEST(Run_WasmInt32Param0_fallthru) { |
| (...skipping 2284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2429 WASM_F64(32.0), WASM_F64(64.0), WASM_F64(128.0), | 2405 WASM_F64(32.0), WASM_F64(64.0), WASM_F64(128.0), |
| 2430 WASM_F64(256.0), WASM_F64(1.5), WASM_F64(2.5), | 2406 WASM_F64(256.0), WASM_F64(1.5), WASM_F64(2.5), |
| 2431 WASM_F64(4.5), WASM_F64(8.5), WASM_F64(16.5), | 2407 WASM_F64(4.5), WASM_F64(8.5), WASM_F64(16.5), |
| 2432 WASM_F64(32.5), WASM_F64(64.5), WASM_F64(128.5), | 2408 WASM_F64(32.5), WASM_F64(64.5), WASM_F64(128.5), |
| 2433 WASM_F64(256.5), WASM_F64(512.5))); | 2409 WASM_F64(256.5), WASM_F64(512.5))); |
| 2434 | 2410 |
| 2435 float result = r.Call(); | 2411 float result = r.Call(); |
| 2436 CHECK_EQ(256.5, result); | 2412 CHECK_EQ(256.5, result); |
| 2437 } | 2413 } |
| 2438 | 2414 |
| 2439 TEST(Run_WasmCallI64Parameter) { | |
| 2440 // Build the target function. | |
| 2441 LocalType param_types[20]; | |
| 2442 for (int i = 0; i < 20; i++) param_types[i] = kAstI64; | |
| 2443 param_types[3] = kAstI32; | |
| 2444 param_types[4] = kAstI32; | |
| 2445 FunctionSig sig(1, 19, param_types); | |
| 2446 for (int i = 0; i < 19; i++) { | |
| 2447 TestingModule module; | |
| 2448 WasmFunctionCompiler t(&sig, &module); | |
| 2449 if (i == 2 || i == 3) { | |
| 2450 continue; | |
| 2451 } else { | |
| 2452 BUILD(t, WASM_GET_LOCAL(i)); | |
| 2453 } | |
| 2454 uint32_t index = t.CompileAndAdd(); | |
| 2455 | |
| 2456 // Build the calling function. | |
| 2457 WasmRunner<int32_t> r; | |
| 2458 r.env()->module = &module; | |
| 2459 BUILD(r, | |
| 2460 WASM_I32_CONVERT_I64(WASM_CALL_FUNCTION( | |
| 2461 index, WASM_I64(0xbcd12340000000b), WASM_I64(0xbcd12340000000c), | |
| 2462 WASM_I32(0xd), WASM_I32_CONVERT_I64(WASM_I64(0xbcd12340000000e)), | |
| 2463 WASM_I64(0xbcd12340000000f), WASM_I64(0xbcd1234000000010), | |
| 2464 WASM_I64(0xbcd1234000000011), WASM_I64(0xbcd1234000000012), | |
| 2465 WASM_I64(0xbcd1234000000013), WASM_I64(0xbcd1234000000014), | |
| 2466 WASM_I64(0xbcd1234000000015), WASM_I64(0xbcd1234000000016), | |
| 2467 WASM_I64(0xbcd1234000000017), WASM_I64(0xbcd1234000000018), | |
| 2468 WASM_I64(0xbcd1234000000019), WASM_I64(0xbcd123400000001a), | |
| 2469 WASM_I64(0xbcd123400000001b), WASM_I64(0xbcd123400000001c), | |
| 2470 WASM_I64(0xbcd123400000001d)))); | |
| 2471 | |
| 2472 CHECK_EQ(i + 0xb, r.Call()); | |
| 2473 } | |
| 2474 } | |
| 2475 | |
| 2476 TEST(Run_WasmI64And) { | |
| 2477 WasmRunner<int64_t> r(MachineType::Int64(), MachineType::Int64()); | |
| 2478 BUILD(r, WASM_I64_AND(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | |
| 2479 FOR_INT64_INPUTS(i) { | |
| 2480 FOR_INT64_INPUTS(j) { CHECK_EQ((*i) & (*j), r.Call(*i, *j)); } | |
| 2481 } | |
| 2482 } | |
| 2483 | |
| 2484 TEST(Run_WasmCallVoid) { | 2415 TEST(Run_WasmCallVoid) { |
| 2485 const byte kMemOffset = 8; | 2416 const byte kMemOffset = 8; |
| 2486 const int32_t kElemNum = kMemOffset / sizeof(int32_t); | 2417 const int32_t kElemNum = kMemOffset / sizeof(int32_t); |
| 2487 const int32_t kExpected = -414444; | 2418 const int32_t kExpected = -414444; |
| 2488 // Build the target function. | 2419 // Build the target function. |
| 2489 TestSignatures sigs; | 2420 TestSignatures sigs; |
| 2490 TestingModule module; | 2421 TestingModule module; |
| 2491 module.AddMemory(16); | 2422 module.AddMemory(16); |
| 2492 module.RandomizeMemory(); | 2423 module.RandomizeMemory(); |
| 2493 WasmFunctionCompiler t(sigs.v_v(), &module); | 2424 WasmFunctionCompiler t(sigs.v_v(), &module); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2520 | 2451 |
| 2521 FOR_INT32_INPUTS(i) { | 2452 FOR_INT32_INPUTS(i) { |
| 2522 FOR_INT32_INPUTS(j) { | 2453 FOR_INT32_INPUTS(j) { |
| 2523 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + | 2454 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + |
| 2524 static_cast<uint32_t>(*j)); | 2455 static_cast<uint32_t>(*j)); |
| 2525 CHECK_EQ(expected, r.Call(*i, *j)); | 2456 CHECK_EQ(expected, r.Call(*i, *j)); |
| 2526 } | 2457 } |
| 2527 } | 2458 } |
| 2528 } | 2459 } |
| 2529 | 2460 |
| 2530 | |
| 2531 #if WASM_64 | 2461 #if WASM_64 |
| 2532 TEST(Run_WasmCall_Int64Sub) { | 2462 TEST(Run_WasmCall_Int64Sub) { |
| 2533 // Build the target function. | 2463 // Build the target function. |
| 2534 TestSignatures sigs; | 2464 TestSignatures sigs; |
| 2535 TestingModule module; | 2465 TestingModule module; |
| 2536 WasmFunctionCompiler t(sigs.l_ll(), &module); | 2466 WasmFunctionCompiler t(sigs.l_ll(), &module); |
| 2537 BUILD(t, WASM_I64_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 2467 BUILD(t, WASM_I64_SUB(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
| 2538 uint32_t index = t.CompileAndAdd(); | 2468 uint32_t index = t.CompileAndAdd(); |
| 2539 | 2469 |
| 2540 // Build the caller function. | 2470 // Build the caller function. |
| (...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3451 | 3381 |
| 3452 #if WASM_64 | 3382 #if WASM_64 |
| 3453 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } | 3383 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } |
| 3454 #endif | 3384 #endif |
| 3455 | 3385 |
| 3456 | 3386 |
| 3457 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } | 3387 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } |
| 3458 | 3388 |
| 3459 | 3389 |
| 3460 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } | 3390 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } |
| OLD | NEW |