| 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 <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/base/platform/elapsed-timer.h" | 9 #include "src/base/platform/elapsed-timer.h" |
| 10 | 10 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); | 63 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); |
| 64 BUILD(r, WASM_BINOP(kExprI32AsmjsRemU, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 64 BUILD(r, WASM_BINOP(kExprI32AsmjsRemU, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
| 65 const int32_t kMin = std::numeric_limits<int32_t>::min(); | 65 const int32_t kMin = std::numeric_limits<int32_t>::min(); |
| 66 CHECK_EQ(17, r.Call(217, 100)); | 66 CHECK_EQ(17, r.Call(217, 100)); |
| 67 CHECK_EQ(0, r.Call(100, 0)); | 67 CHECK_EQ(0, r.Call(100, 0)); |
| 68 CHECK_EQ(0, r.Call(-1001, 0)); | 68 CHECK_EQ(0, r.Call(-1001, 0)); |
| 69 CHECK_EQ(0, r.Call(kMin, 0)); | 69 CHECK_EQ(0, r.Call(kMin, 0)); |
| 70 CHECK_EQ(kMin, r.Call(kMin, -1)); | 70 CHECK_EQ(kMin, r.Call(kMin, -1)); |
| 71 } | 71 } |
| 72 | 72 |
| 73 TEST(Run_Wasm_I32AsmjsSConvertF32) { |
| 74 WasmRunner<int32_t> r(MachineType::Float32()); |
| 75 BUILD(r, WASM_UNOP(kExprI32AsmjsSConvertF32, WASM_GET_LOCAL(0))); |
| 76 |
| 77 FOR_FLOAT32_INPUTS(i) { |
| 78 int32_t expected = DoubleToInt32(*i); |
| 79 CHECK_EQ(expected, r.Call(*i)); |
| 80 } |
| 81 } |
| 82 |
| 83 TEST(Run_Wasm_I32AsmjsSConvertF64) { |
| 84 WasmRunner<int32_t> r(MachineType::Float64()); |
| 85 BUILD(r, WASM_UNOP(kExprI32AsmjsSConvertF64, WASM_GET_LOCAL(0))); |
| 86 |
| 87 FOR_FLOAT64_INPUTS(i) { |
| 88 int32_t expected = DoubleToInt32(*i); |
| 89 CHECK_EQ(expected, r.Call(*i)); |
| 90 } |
| 91 } |
| 92 |
| 93 TEST(Run_Wasm_I32AsmjsUConvertF32) { |
| 94 WasmRunner<uint32_t> r(MachineType::Float32()); |
| 95 BUILD(r, WASM_UNOP(kExprI32AsmjsUConvertF32, WASM_GET_LOCAL(0))); |
| 96 |
| 97 FOR_FLOAT32_INPUTS(i) { |
| 98 uint32_t expected = DoubleToUint32(*i); |
| 99 CHECK_EQ(expected, r.Call(*i)); |
| 100 } |
| 101 } |
| 102 |
| 103 TEST(Run_Wasm_I32AsmjsUConvertF64) { |
| 104 WasmRunner<uint32_t> r(MachineType::Float64()); |
| 105 BUILD(r, WASM_UNOP(kExprI32AsmjsUConvertF64, WASM_GET_LOCAL(0))); |
| 106 |
| 107 FOR_FLOAT64_INPUTS(i) { |
| 108 uint32_t expected = DoubleToUint32(*i); |
| 109 CHECK_EQ(expected, r.Call(*i)); |
| 110 } |
| 111 } |
| 112 |
| 73 TEST(Run_Wasm_LoadMemI32_oob_asm) { | 113 TEST(Run_Wasm_LoadMemI32_oob_asm) { |
| 74 TestingModule module; | 114 TestingModule module; |
| 75 module.origin = kAsmJsOrigin; | 115 module.origin = kAsmJsOrigin; |
| 76 int32_t* memory = module.AddMemoryElems<int32_t>(8); | 116 int32_t* memory = module.AddMemoryElems<int32_t>(8); |
| 77 WasmRunner<int32_t> r(&module, MachineType::Uint32()); | 117 WasmRunner<int32_t> r(&module, MachineType::Uint32()); |
| 78 module.RandomizeMemory(1112); | 118 module.RandomizeMemory(1112); |
| 79 | 119 |
| 80 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))); | 120 BUILD(r, WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))); |
| 81 | 121 |
| 82 memory[0] = 999999; | 122 memory[0] = 999999; |
| 83 CHECK_EQ(999999, r.Call(0u)); | 123 CHECK_EQ(999999, r.Call(0u)); |
| 84 // TODO(titzer): offset 29-31 should also be OOB. | 124 // TODO(titzer): offset 29-31 should also be OOB. |
| 85 for (uint32_t offset = 32; offset < 40; offset++) { | 125 for (uint32_t offset = 32; offset < 40; offset++) { |
| 86 CHECK_EQ(0, r.Call(offset)); | 126 CHECK_EQ(0, r.Call(offset)); |
| 87 } | 127 } |
| 88 | 128 |
| 89 for (uint32_t offset = 0x80000000; offset < 0x80000010; offset++) { | 129 for (uint32_t offset = 0x80000000; offset < 0x80000010; offset++) { |
| 90 CHECK_EQ(0, r.Call(offset)); | 130 CHECK_EQ(0, r.Call(offset)); |
| 91 } | 131 } |
| 92 } | 132 } |
| OLD | NEW |