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 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1538 memory[0] = 11111111; | 1538 memory[0] = 11111111; |
1539 memory[1] = 22222222; | 1539 memory[1] = 22222222; |
1540 memory[2] = 33333333; | 1540 memory[2] = 33333333; |
1541 memory[3] = 44444444; | 1541 memory[3] = 44444444; |
1542 CHECK_EQ(22222222, r.Call(0)); | 1542 CHECK_EQ(22222222, r.Call(0)); |
1543 CHECK_EQ(33333333, r.Call(4)); | 1543 CHECK_EQ(33333333, r.Call(4)); |
1544 CHECK_EQ(44444444, r.Call(8)); | 1544 CHECK_EQ(44444444, r.Call(8)); |
1545 } | 1545 } |
1546 | 1546 |
1547 | 1547 |
1548 // TODO(titzer): Fix for mips and re-enable. | |
1549 #if !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64 | 1548 #if !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64 |
1550 | 1549 |
1551 TEST(Run_Wasm_LoadMemI32_const_oob) { | 1550 TEST(Run_Wasm_LoadMemI32_const_oob_misaligned) { |
| 1551 // TODO(titzer): Fix misaligned accesses on MIPS and re-enable. |
1552 TestingModule module; | 1552 TestingModule module; |
1553 const int kMemSize = 12; | 1553 const int kMemSize = 12; |
1554 module.AddMemoryElems<byte>(kMemSize); | 1554 module.AddMemoryElems<byte>(kMemSize); |
1555 | 1555 |
1556 for (int offset = 0; offset < kMemSize + 5; offset++) { | 1556 for (int offset = 0; offset < kMemSize + 5; offset++) { |
1557 for (int index = 0; index < kMemSize + 5; index++) { | 1557 for (int index = 0; index < kMemSize + 5; index++) { |
1558 WasmRunner<int32_t> r; | 1558 WasmRunner<int32_t> r; |
1559 r.env()->module = &module; | 1559 r.env()->module = &module; |
1560 module.RandomizeMemory(); | 1560 module.RandomizeMemory(); |
1561 | 1561 |
1562 BUILD(r, | 1562 BUILD(r, |
1563 WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset, WASM_I8(index))); | 1563 WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset, WASM_I8(index))); |
1564 | 1564 |
1565 if ((offset + index) <= (kMemSize - sizeof(int32_t))) { | 1565 if ((offset + index) <= (kMemSize - sizeof(int32_t))) { |
1566 CHECK_EQ(module.raw_val_at<int32_t>(offset + index), r.Call()); | 1566 CHECK_EQ(module.raw_val_at<int32_t>(offset + index), r.Call()); |
1567 } else { | 1567 } else { |
1568 CHECK_TRAP(r.Call()); | 1568 CHECK_TRAP(r.Call()); |
1569 } | 1569 } |
1570 } | 1570 } |
1571 } | 1571 } |
1572 } | 1572 } |
1573 | 1573 |
1574 #endif | 1574 #endif |
1575 | 1575 |
1576 | 1576 |
| 1577 TEST(Run_Wasm_LoadMemI32_const_oob) { |
| 1578 TestingModule module; |
| 1579 const int kMemSize = 24; |
| 1580 module.AddMemoryElems<byte>(kMemSize); |
| 1581 |
| 1582 for (int offset = 0; offset < kMemSize + 5; offset += 4) { |
| 1583 for (int index = 0; index < kMemSize + 5; index += 4) { |
| 1584 WasmRunner<int32_t> r; |
| 1585 r.env()->module = &module; |
| 1586 module.RandomizeMemory(); |
| 1587 |
| 1588 BUILD(r, |
| 1589 WASM_LOAD_MEM_OFFSET(MachineType::Int32(), offset, WASM_I8(index))); |
| 1590 |
| 1591 if ((offset + index) <= (kMemSize - sizeof(int32_t))) { |
| 1592 CHECK_EQ(module.raw_val_at<int32_t>(offset + index), r.Call()); |
| 1593 } else { |
| 1594 CHECK_TRAP(r.Call()); |
| 1595 } |
| 1596 } |
| 1597 } |
| 1598 } |
| 1599 |
| 1600 |
1577 TEST(Run_Wasm_StoreMemI32_offset) { | 1601 TEST(Run_Wasm_StoreMemI32_offset) { |
1578 WasmRunner<int32_t> r(MachineType::Int32()); | 1602 WasmRunner<int32_t> r(MachineType::Int32()); |
1579 const int32_t kWritten = 0xaabbccdd; | 1603 const int32_t kWritten = 0xaabbccdd; |
1580 TestingModule module; | 1604 TestingModule module; |
1581 int32_t* memory = module.AddMemoryElems<int32_t>(4); | 1605 int32_t* memory = module.AddMemoryElems<int32_t>(4); |
1582 r.env()->module = &module; | 1606 r.env()->module = &module; |
1583 | 1607 |
1584 BUILD(r, WASM_STORE_MEM_OFFSET(MachineType::Int32(), 4, WASM_GET_LOCAL(0), | 1608 BUILD(r, WASM_STORE_MEM_OFFSET(MachineType::Int32(), 4, WASM_GET_LOCAL(0), |
1585 WASM_I32(kWritten))); | 1609 WASM_I32(kWritten))); |
1586 | 1610 |
(...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3245 TEST(Run_Wasm_F32CopySign) { | 3269 TEST(Run_Wasm_F32CopySign) { |
3246 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32()); | 3270 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32()); |
3247 BUILD(r, WASM_F32_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 3271 BUILD(r, WASM_F32_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
3248 | 3272 |
3249 FOR_FLOAT32_INPUTS(i) { | 3273 FOR_FLOAT32_INPUTS(i) { |
3250 FOR_FLOAT32_INPUTS(j) { CheckFloatEq(copysign(*i, *j), r.Call(*i, *j)); } | 3274 FOR_FLOAT32_INPUTS(j) { CheckFloatEq(copysign(*i, *j), r.Call(*i, *j)); } |
3251 } | 3275 } |
3252 } | 3276 } |
3253 | 3277 |
3254 #endif | 3278 #endif |
OLD | NEW |