OLD | NEW |
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 #include "src/assembler-inl.h" | 5 #include "src/assembler-inl.h" |
6 #include "test/cctest/cctest.h" | 6 #include "test/cctest/cctest.h" |
7 #include "test/cctest/compiler/value-helper.h" | 7 #include "test/cctest/compiler/value-helper.h" |
8 #include "test/cctest/wasm/wasm-run-utils.h" | 8 #include "test/cctest/wasm/wasm-run-utils.h" |
9 #include "test/common/wasm/wasm-macro-gen.h" | 9 #include "test/common/wasm/wasm-macro-gen.h" |
10 | 10 |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 3) | 361 WASM_SIMD_CHECK_F32_LANE_ESTIMATE(value, low, high, 3) |
362 | 362 |
363 #define TO_BYTE(val) static_cast<byte>(val) | 363 #define TO_BYTE(val) static_cast<byte>(val) |
364 #define WASM_SIMD_OP(op) kSimdPrefix, TO_BYTE(op) | 364 #define WASM_SIMD_OP(op) kSimdPrefix, TO_BYTE(op) |
365 #define WASM_SIMD_SPLAT(Type, x) x, WASM_SIMD_OP(kExpr##Type##Splat) | 365 #define WASM_SIMD_SPLAT(Type, x) x, WASM_SIMD_OP(kExpr##Type##Splat) |
366 #define WASM_SIMD_UNOP(op, x) x, WASM_SIMD_OP(op) | 366 #define WASM_SIMD_UNOP(op, x) x, WASM_SIMD_OP(op) |
367 #define WASM_SIMD_BINOP(op, x, y) x, y, WASM_SIMD_OP(op) | 367 #define WASM_SIMD_BINOP(op, x, y) x, y, WASM_SIMD_OP(op) |
368 #define WASM_SIMD_SHIFT_OP(op, shift, x) x, WASM_SIMD_OP(op), TO_BYTE(shift) | 368 #define WASM_SIMD_SHIFT_OP(op, shift, x) x, WASM_SIMD_OP(op), TO_BYTE(shift) |
369 #define WASM_SIMD_CONCAT_OP(op, bytes, x, y) \ | 369 #define WASM_SIMD_CONCAT_OP(op, bytes, x, y) \ |
370 x, y, WASM_SIMD_OP(op), TO_BYTE(bytes) | 370 x, y, WASM_SIMD_OP(op), TO_BYTE(bytes) |
371 #define WASM_SIMD_SELECT(format, x, y, z) \ | 371 #define WASM_SIMD_SELECT(format, x, y, z) x, y, z, WASM_SIMD_OP(kExprS128Select) |
372 x, y, z, WASM_SIMD_OP(kExprS##format##Select) | |
373 // Since boolean vectors can't be checked directly, materialize them into | 372 // Since boolean vectors can't be checked directly, materialize them into |
374 // integer vectors using a Select operation. | 373 // integer vectors using a Select operation. |
375 #define WASM_SIMD_MATERIALIZE_BOOLS(format, x) \ | 374 #define WASM_SIMD_MATERIALIZE_BOOLS(format, x) \ |
376 x, WASM_SIMD_I##format##_SPLAT(WASM_ONE), \ | 375 x, WASM_SIMD_I##format##_SPLAT(WASM_ONE), \ |
377 WASM_SIMD_I##format##_SPLAT(WASM_ZERO), \ | 376 WASM_SIMD_I##format##_SPLAT(WASM_ZERO), WASM_SIMD_OP(kExprS128Select) |
378 WASM_SIMD_OP(kExprS##format##Select) | |
379 | 377 |
380 #define WASM_SIMD_F32x4_SPLAT(x) x, WASM_SIMD_OP(kExprF32x4Splat) | 378 #define WASM_SIMD_F32x4_SPLAT(x) x, WASM_SIMD_OP(kExprF32x4Splat) |
381 #define WASM_SIMD_F32x4_EXTRACT_LANE(lane, x) \ | 379 #define WASM_SIMD_F32x4_EXTRACT_LANE(lane, x) \ |
382 x, WASM_SIMD_OP(kExprF32x4ExtractLane), TO_BYTE(lane) | 380 x, WASM_SIMD_OP(kExprF32x4ExtractLane), TO_BYTE(lane) |
383 #define WASM_SIMD_F32x4_REPLACE_LANE(lane, x, y) \ | 381 #define WASM_SIMD_F32x4_REPLACE_LANE(lane, x, y) \ |
384 x, y, WASM_SIMD_OP(kExprF32x4ReplaceLane), TO_BYTE(lane) | 382 x, y, WASM_SIMD_OP(kExprF32x4ReplaceLane), TO_BYTE(lane) |
385 | 383 |
386 #define WASM_SIMD_I32x4_SPLAT(x) x, WASM_SIMD_OP(kExprI32x4Splat) | 384 #define WASM_SIMD_I32x4_SPLAT(x) x, WASM_SIMD_OP(kExprI32x4Splat) |
387 #define WASM_SIMD_I32x4_EXTRACT_LANE(lane, x) \ | 385 #define WASM_SIMD_I32x4_EXTRACT_LANE(lane, x) \ |
388 x, WASM_SIMD_OP(kExprI32x4ExtractLane), TO_BYTE(lane) | 386 x, WASM_SIMD_OP(kExprI32x4ExtractLane), TO_BYTE(lane) |
(...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1488 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \ | 1486 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \ |
1489 V8_TARGET_ARCH_MIPS64 | 1487 V8_TARGET_ARCH_MIPS64 |
1490 WASM_SIMD_TEST(I8x16ShrU) { | 1488 WASM_SIMD_TEST(I8x16ShrU) { |
1491 RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1); | 1489 RunI8x16ShiftOpTest(kExprI8x16ShrU, LogicalShiftRight, 1); |
1492 } | 1490 } |
1493 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || | 1491 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || |
1494 // V8_TARGET_ARCH_MIPS64 | 1492 // V8_TARGET_ARCH_MIPS64 |
1495 | 1493 |
1496 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || \ | 1494 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || \ |
1497 V8_TARGET_ARCH_MIPS64 | 1495 V8_TARGET_ARCH_MIPS64 |
1498 // Test Select by making a mask where the first two lanes are true and the rest | 1496 // Test Select by making a mask where the 0th and 3rd lanes are true and the |
1499 // false, and comparing for non-equality with zero to materialize a bool vector. | 1497 // rest false, and comparing for non-equality with zero to materialize a boolean |
| 1498 // vector. |
1500 #define WASM_SIMD_SELECT_TEST(format) \ | 1499 #define WASM_SIMD_SELECT_TEST(format) \ |
1501 WASM_SIMD_TEST(S##format##Select) { \ | 1500 WASM_SIMD_TEST(S##format##Select) { \ |
1502 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \ | 1501 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \ |
1503 byte val1 = 0; \ | 1502 byte val1 = 0; \ |
1504 byte val2 = 1; \ | 1503 byte val2 = 1; \ |
1505 byte src1 = r.AllocateLocal(kWasmS128); \ | 1504 byte src1 = r.AllocateLocal(kWasmS128); \ |
1506 byte src2 = r.AllocateLocal(kWasmS128); \ | 1505 byte src2 = r.AllocateLocal(kWasmS128); \ |
1507 byte zero = r.AllocateLocal(kWasmS128); \ | 1506 byte zero = r.AllocateLocal(kWasmS128); \ |
1508 byte mask = r.AllocateLocal(kWasmS128); \ | 1507 byte mask = r.AllocateLocal(kWasmS128); \ |
1509 BUILD(r, \ | 1508 BUILD(r, \ |
(...skipping 15 matching lines...) Expand all Loading... |
1525 WASM_GET_LOCAL(src1), WASM_GET_LOCAL(src2))), \ | 1524 WASM_GET_LOCAL(src1), WASM_GET_LOCAL(src2))), \ |
1526 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 0), \ | 1525 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 0), \ |
1527 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 1), \ | 1526 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 1), \ |
1528 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 2), \ | 1527 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val1, 2), \ |
1529 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 3), WASM_ONE); \ | 1528 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 3), WASM_ONE); \ |
1530 \ | 1529 \ |
1531 CHECK_EQ(1, r.Call(0x12, 0x34)); \ | 1530 CHECK_EQ(1, r.Call(0x12, 0x34)); \ |
1532 } | 1531 } |
1533 | 1532 |
1534 WASM_SIMD_SELECT_TEST(32x4) | 1533 WASM_SIMD_SELECT_TEST(32x4) |
| 1534 WASM_SIMD_SELECT_TEST(16x8) |
| 1535 WASM_SIMD_SELECT_TEST(8x16) |
| 1536 |
| 1537 // Test Select by making a mask where the 0th and 3rd lanes are non-zero and the |
| 1538 // rest 0. The mask is not the result of a comparison op. |
| 1539 #define WASM_SIMD_NON_CANONICAL_SELECT_TEST(format) \ |
| 1540 WASM_SIMD_TEST(S##format##NonCanonicalSelect) { \ |
| 1541 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); \ |
| 1542 byte val1 = 0; \ |
| 1543 byte val2 = 1; \ |
| 1544 byte combined = 2; \ |
| 1545 byte src1 = r.AllocateLocal(kWasmS128); \ |
| 1546 byte src2 = r.AllocateLocal(kWasmS128); \ |
| 1547 byte zero = r.AllocateLocal(kWasmS128); \ |
| 1548 byte mask = r.AllocateLocal(kWasmS128); \ |
| 1549 BUILD(r, \ |
| 1550 WASM_SET_LOCAL(src1, \ |
| 1551 WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val1))), \ |
| 1552 WASM_SET_LOCAL(src2, \ |
| 1553 WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(val2))), \ |
| 1554 WASM_SET_LOCAL(zero, WASM_SIMD_I##format##_SPLAT(WASM_ZERO)), \ |
| 1555 WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \ |
| 1556 1, WASM_GET_LOCAL(zero), WASM_I32V(0xF))), \ |
| 1557 WASM_SET_LOCAL(mask, WASM_SIMD_I##format##_REPLACE_LANE( \ |
| 1558 2, WASM_GET_LOCAL(mask), WASM_I32V(0xF))), \ |
| 1559 WASM_SET_LOCAL(mask, WASM_SIMD_SELECT(format, WASM_GET_LOCAL(mask), \ |
| 1560 WASM_GET_LOCAL(src1), \ |
| 1561 WASM_GET_LOCAL(src2))), \ |
| 1562 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 0), \ |
| 1563 WASM_SIMD_CHECK_LANE(I##format, mask, I32, combined, 1), \ |
| 1564 WASM_SIMD_CHECK_LANE(I##format, mask, I32, combined, 2), \ |
| 1565 WASM_SIMD_CHECK_LANE(I##format, mask, I32, val2, 3), WASM_ONE); \ |
| 1566 \ |
| 1567 CHECK_EQ(1, r.Call(0x12, 0x34, 0x32)); \ |
| 1568 } |
| 1569 |
| 1570 WASM_SIMD_NON_CANONICAL_SELECT_TEST(32x4) |
| 1571 WASM_SIMD_NON_CANONICAL_SELECT_TEST(16x8) |
| 1572 WASM_SIMD_NON_CANONICAL_SELECT_TEST(8x16) |
1535 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || | 1573 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || |
1536 // V8_TARGET_ARCH_MIPS64 | 1574 // V8_TARGET_ARCH_MIPS64 |
1537 | 1575 |
1538 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || \ | |
1539 V8_TARGET_ARCH_MIPS64 | |
1540 WASM_SIMD_SELECT_TEST(16x8) | |
1541 | |
1542 WASM_SIMD_SELECT_TEST(8x16) | |
1543 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_MIPS || | |
1544 // V8_TARGET_ARCH_MIPS64 | |
1545 | |
1546 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 | 1576 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 |
1547 // Test binary ops with two lane test patterns, all lanes distinct. | 1577 // Test binary ops with two lane test patterns, all lanes distinct. |
1548 template <typename T> | 1578 template <typename T> |
1549 void RunBinaryLaneOpTest( | 1579 void RunBinaryLaneOpTest( |
1550 WasmOpcode simd_op, | 1580 WasmOpcode simd_op, |
1551 const std::array<T, kSimd128Size / sizeof(T)>& expected) { | 1581 const std::array<T, kSimd128Size / sizeof(T)>& expected) { |
1552 WasmRunner<int32_t> r(kExecuteCompiled); | 1582 WasmRunner<int32_t> r(kExecuteCompiled); |
1553 // Set up two test patterns as globals, e.g. [0, 1, 2, 3] and [4, 5, 6, 7]. | 1583 // Set up two test patterns as globals, e.g. [0, 1, 2, 3] and [4, 5, 6, 7]. |
1554 T* src0 = r.module().AddGlobal<T>(kWasmS128); | 1584 T* src0 = r.module().AddGlobal<T>(kWasmS128); |
1555 T* src1 = r.module().AddGlobal<T>(kWasmS128); | 1585 T* src1 = r.module().AddGlobal<T>(kWasmS128); |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1873 WASM_IF(WASM_I32_NE(WASM_GET_LOCAL(reduced), WASM_ZERO), \ | 1903 WASM_IF(WASM_I32_NE(WASM_GET_LOCAL(reduced), WASM_ZERO), \ |
1874 WASM_RETURN1(WASM_ZERO)), \ | 1904 WASM_RETURN1(WASM_ZERO)), \ |
1875 WASM_ONE); \ | 1905 WASM_ONE); \ |
1876 CHECK_EQ(1, r.Call()); \ | 1906 CHECK_EQ(1, r.Call()); \ |
1877 } | 1907 } |
1878 | 1908 |
1879 WASM_SIMD_BOOL_REDUCTION_TEST(32x4, 4) | 1909 WASM_SIMD_BOOL_REDUCTION_TEST(32x4, 4) |
1880 WASM_SIMD_BOOL_REDUCTION_TEST(16x8, 8) | 1910 WASM_SIMD_BOOL_REDUCTION_TEST(16x8, 8) |
1881 WASM_SIMD_BOOL_REDUCTION_TEST(8x16, 16) | 1911 WASM_SIMD_BOOL_REDUCTION_TEST(8x16, 16) |
1882 | 1912 |
1883 #define WASM_SIMD_UNOP_HELPER(format, lanes, lane_size) \ | |
1884 void RunS1x##lanes##UnOpTest(WasmOpcode simd_op, \ | |
1885 Int##lane_size##UnOp expected_op) { \ | |
1886 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); \ | |
1887 byte a = 0; \ | |
1888 byte expected = 1; \ | |
1889 byte zero = r.AllocateLocal(kWasmS128); \ | |
1890 byte simd = r.AllocateLocal(kWasmS128); \ | |
1891 BUILD( \ | |
1892 r, WASM_SET_LOCAL(zero, WASM_SIMD_I##format##_SPLAT(WASM_ZERO)), \ | |
1893 WASM_SET_LOCAL(simd, WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(a))), \ | |
1894 WASM_SET_LOCAL( \ | |
1895 simd, \ | |
1896 WASM_SIMD_MATERIALIZE_BOOLS( \ | |
1897 format, WASM_SIMD_UNOP( \ | |
1898 simd_op, WASM_SIMD_BINOP(kExprI##format##Ne, \ | |
1899 WASM_GET_LOCAL(simd), \ | |
1900 WASM_GET_LOCAL(zero))))), \ | |
1901 WASM_SIMD_CHECK_SPLAT##lanes(I##format, simd, I32, expected), \ | |
1902 WASM_ONE); \ | |
1903 \ | |
1904 for (int i = 0; i <= 1; i++) { \ | |
1905 CHECK_EQ(1, r.Call(i, expected_op(i))); \ | |
1906 } \ | |
1907 } | |
1908 WASM_SIMD_UNOP_HELPER(32x4, 4, 32); | |
1909 WASM_SIMD_UNOP_HELPER(16x8, 8, 16); | |
1910 WASM_SIMD_UNOP_HELPER(8x16, 16, 8); | |
1911 #undef WASM_SIMD_UNOP_HELPER | |
1912 | |
1913 WASM_SIMD_TEST(S1x4Not) { RunS1x4UnOpTest(kExprS1x4Not, LogicalNot); } | |
1914 | |
1915 WASM_SIMD_TEST(S1x8Not) { RunS1x8UnOpTest(kExprS1x8Not, LogicalNot); } | |
1916 | |
1917 WASM_SIMD_TEST(S1x16Not) { RunS1x16UnOpTest(kExprS1x16Not, LogicalNot); } | |
1918 | |
1919 #define WASM_SIMD_BINOP_HELPER(format, lanes, lane_size) \ | |
1920 void RunS1x##lanes##BinOpTest(WasmOpcode simd_op, \ | |
1921 Int##lane_size##BinOp expected_op) { \ | |
1922 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); \ | |
1923 byte a = 0; \ | |
1924 byte b = 1; \ | |
1925 byte expected = 2; \ | |
1926 byte zero = r.AllocateLocal(kWasmS128); \ | |
1927 byte simd0 = r.AllocateLocal(kWasmS128); \ | |
1928 byte simd1 = r.AllocateLocal(kWasmS128); \ | |
1929 BUILD( \ | |
1930 r, WASM_SET_LOCAL(zero, WASM_SIMD_I##format##_SPLAT(WASM_ZERO)), \ | |
1931 WASM_SET_LOCAL(simd0, WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(a))), \ | |
1932 WASM_SET_LOCAL(simd1, WASM_SIMD_I##format##_SPLAT(WASM_GET_LOCAL(b))), \ | |
1933 WASM_SET_LOCAL( \ | |
1934 simd1, \ | |
1935 WASM_SIMD_MATERIALIZE_BOOLS( \ | |
1936 format, \ | |
1937 WASM_SIMD_BINOP( \ | |
1938 simd_op, \ | |
1939 WASM_SIMD_BINOP(kExprI##format##Ne, WASM_GET_LOCAL(simd0), \ | |
1940 WASM_GET_LOCAL(zero)), \ | |
1941 WASM_SIMD_BINOP(kExprI##format##Ne, WASM_GET_LOCAL(simd1), \ | |
1942 WASM_GET_LOCAL(zero))))), \ | |
1943 WASM_SIMD_CHECK_SPLAT##lanes(I##format, simd1, I32, expected), \ | |
1944 WASM_ONE); \ | |
1945 \ | |
1946 for (int i = 0; i <= 1; i++) { \ | |
1947 for (int j = 0; j <= 1; j++) { \ | |
1948 CHECK_EQ(1, r.Call(i, j, expected_op(i, j))); \ | |
1949 } \ | |
1950 } \ | |
1951 } | |
1952 | |
1953 WASM_SIMD_BINOP_HELPER(32x4, 4, 32); | |
1954 WASM_SIMD_BINOP_HELPER(16x8, 8, 16); | |
1955 WASM_SIMD_BINOP_HELPER(8x16, 16, 8); | |
1956 #undef WASM_SIMD_BINOP_HELPER | |
1957 | |
1958 WASM_SIMD_TEST(S1x4And) { RunS1x4BinOpTest(kExprS1x4And, And); } | |
1959 | |
1960 WASM_SIMD_TEST(S1x4Or) { RunS1x4BinOpTest(kExprS1x4Or, Or); } | |
1961 | |
1962 WASM_SIMD_TEST(S1x4Xor) { RunS1x4BinOpTest(kExprS1x4Xor, Xor); } | |
1963 | |
1964 WASM_SIMD_TEST(S1x8And) { RunS1x8BinOpTest(kExprS1x8And, And); } | |
1965 | |
1966 WASM_SIMD_TEST(S1x8Or) { RunS1x8BinOpTest(kExprS1x8Or, Or); } | |
1967 | |
1968 WASM_SIMD_TEST(S1x8Xor) { RunS1x8BinOpTest(kExprS1x8Xor, Xor); } | |
1969 | |
1970 WASM_SIMD_TEST(S1x16And) { RunS1x16BinOpTest(kExprS1x16And, And); } | |
1971 | |
1972 WASM_SIMD_TEST(S1x16Or) { RunS1x16BinOpTest(kExprS1x16Or, Or); } | |
1973 | |
1974 WASM_SIMD_TEST(S1x16Xor) { RunS1x16BinOpTest(kExprS1x16Xor, Xor); } | |
1975 #endif // !V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 | 1913 #endif // !V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 |
1976 | 1914 |
1977 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \ | 1915 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \ |
1978 V8_TARGET_ARCH_MIPS64 | 1916 V8_TARGET_ARCH_MIPS64 |
1979 WASM_SIMD_TEST(SimdI32x4ExtractWithF32x4) { | 1917 WASM_SIMD_TEST(SimdI32x4ExtractWithF32x4) { |
1980 WasmRunner<int32_t> r(kExecuteCompiled); | 1918 WasmRunner<int32_t> r(kExecuteCompiled); |
1981 BUILD(r, WASM_IF_ELSE_I( | 1919 BUILD(r, WASM_IF_ELSE_I( |
1982 WASM_I32_EQ(WASM_SIMD_I32x4_EXTRACT_LANE( | 1920 WASM_I32_EQ(WASM_SIMD_I32x4_EXTRACT_LANE( |
1983 0, WASM_SIMD_F32x4_SPLAT(WASM_F32(30.5))), | 1921 0, WASM_SIMD_F32x4_SPLAT(WASM_F32(30.5))), |
1984 WASM_I32_REINTERPRET_F32(WASM_F32(30.5))), | 1922 WASM_I32_REINTERPRET_F32(WASM_F32(30.5))), |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2247 0, WASM_LOAD_MEM(MachineType::Simd128(), WASM_ZERO))); | 2185 0, WASM_LOAD_MEM(MachineType::Simd128(), WASM_ZERO))); |
2248 | 2186 |
2249 FOR_INT32_INPUTS(i) { | 2187 FOR_INT32_INPUTS(i) { |
2250 int32_t expected = *i; | 2188 int32_t expected = *i; |
2251 r.module().WriteMemory(&memory[0], expected); | 2189 r.module().WriteMemory(&memory[0], expected); |
2252 CHECK_EQ(expected, r.Call()); | 2190 CHECK_EQ(expected, r.Call()); |
2253 } | 2191 } |
2254 } | 2192 } |
2255 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_X64 || | 2193 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_X64 || |
2256 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 | 2194 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 |
OLD | NEW |