| 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 <memory> | 
|  | 10 | 
| 9 #include "src/wasm/wasm-macro-gen.h" | 11 #include "src/wasm/wasm-macro-gen.h" | 
| 10 | 12 | 
| 11 #include "src/wasm/wasm-interpreter.h" | 13 #include "src/wasm/wasm-interpreter.h" | 
| 12 | 14 | 
| 13 #include "test/cctest/cctest.h" | 15 #include "test/cctest/cctest.h" | 
| 14 #include "test/cctest/compiler/value-helper.h" | 16 #include "test/cctest/compiler/value-helper.h" | 
| 15 #include "test/cctest/wasm/test-signatures.h" | 17 #include "test/cctest/wasm/test-signatures.h" | 
| 16 #include "test/cctest/wasm/wasm-run-utils.h" | 18 #include "test/cctest/wasm/wasm-run-utils.h" | 
| 17 | 19 | 
| 18 using namespace v8::base; | 20 using namespace v8::base; | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 131 | 133 | 
| 132   CHECK_EQ(11, r.Call(1, 1)); | 134   CHECK_EQ(11, r.Call(1, 1)); | 
| 133   CHECK_EQ(12, r.Call(1, 0)); | 135   CHECK_EQ(12, r.Call(1, 0)); | 
| 134   CHECK_EQ(13, r.Call(0, 1)); | 136   CHECK_EQ(13, r.Call(0, 1)); | 
| 135   CHECK_EQ(14, r.Call(0, 0)); | 137   CHECK_EQ(14, r.Call(0, 0)); | 
| 136 } | 138 } | 
| 137 | 139 | 
| 138 // Make tests more robust by not hard-coding offsets of various operations. | 140 // Make tests more robust by not hard-coding offsets of various operations. | 
| 139 // The {Find} method finds the offsets for the given bytecodes, returning | 141 // The {Find} method finds the offsets for the given bytecodes, returning | 
| 140 // the offsets in an array. | 142 // the offsets in an array. | 
| 141 SmartArrayPointer<int> Find(byte* code, size_t code_size, int n, ...) { | 143 std::unique_ptr<int[]> Find(byte* code, size_t code_size, int n, ...) { | 
| 142   va_list vl; | 144   va_list vl; | 
| 143   va_start(vl, n); | 145   va_start(vl, n); | 
| 144 | 146 | 
| 145   SmartArrayPointer<int> offsets(new int[n]); | 147   std::unique_ptr<int[]> offsets(new int[n]); | 
| 146 | 148 | 
| 147   for (int i = 0; i < n; i++) { | 149   for (int i = 0; i < n; i++) { | 
| 148     offsets[i] = -1; | 150     offsets[i] = -1; | 
| 149   } | 151   } | 
| 150 | 152 | 
| 151   int pos = 0; | 153   int pos = 0; | 
| 152   WasmOpcode current = static_cast<WasmOpcode>(va_arg(vl, int)); | 154   WasmOpcode current = static_cast<WasmOpcode>(va_arg(vl, int)); | 
| 153   for (size_t i = 0; i < code_size; i++) { | 155   for (size_t i = 0; i < code_size; i++) { | 
| 154     if (code[i] == current) { | 156     if (code[i] == current) { | 
| 155       offsets[pos++] = static_cast<int>(i); | 157       offsets[pos++] = static_cast<int>(i); | 
| 156       if (pos == n) break; | 158       if (pos == n) break; | 
| 157       current = static_cast<WasmOpcode>(va_arg(vl, int)); | 159       current = static_cast<WasmOpcode>(va_arg(vl, int)); | 
| 158     } | 160     } | 
| 159   } | 161   } | 
| 160   va_end(vl); | 162   va_end(vl); | 
| 161 | 163 | 
| 162   return offsets; | 164   return offsets; | 
| 163 } | 165 } | 
| 164 | 166 | 
| 165 TEST(Breakpoint_I32Add) { | 167 TEST(Breakpoint_I32Add) { | 
| 166   static const int kLocalsDeclSize = 1; | 168   static const int kLocalsDeclSize = 1; | 
| 167   static const int kNumBreakpoints = 3; | 169   static const int kNumBreakpoints = 3; | 
| 168   byte code[] = {WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; | 170   byte code[] = {WASM_I32_ADD(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; | 
| 169   SmartArrayPointer<int> offsets = | 171   std::unique_ptr<int[]> offsets = | 
| 170       Find(code, sizeof(code), kNumBreakpoints, kExprGetLocal, kExprGetLocal, | 172       Find(code, sizeof(code), kNumBreakpoints, kExprGetLocal, kExprGetLocal, | 
| 171            kExprI32Add); | 173            kExprI32Add); | 
| 172 | 174 | 
| 173   WasmRunner<int32_t> r(kExecuteInterpreted, MachineType::Uint32(), | 175   WasmRunner<int32_t> r(kExecuteInterpreted, MachineType::Uint32(), | 
| 174                         MachineType::Uint32()); | 176                         MachineType::Uint32()); | 
| 175 | 177 | 
| 176   r.Build(code, code + arraysize(code)); | 178   r.Build(code, code + arraysize(code)); | 
| 177 | 179 | 
| 178   WasmInterpreter* interpreter = r.interpreter(); | 180   WasmInterpreter* interpreter = r.interpreter(); | 
| 179   WasmInterpreter::Thread* thread = interpreter->GetThread(0); | 181   WasmInterpreter::Thread* thread = interpreter->GetThread(0); | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 238       uint32_t expected = (*a) * (b); | 240       uint32_t expected = (*a) * (b); | 
| 239       CHECK_EQ(expected, thread->GetReturnValue().to<uint32_t>()); | 241       CHECK_EQ(expected, thread->GetReturnValue().to<uint32_t>()); | 
| 240     } | 242     } | 
| 241   } | 243   } | 
| 242 } | 244 } | 
| 243 | 245 | 
| 244 TEST(Breakpoint_I32And_disable) { | 246 TEST(Breakpoint_I32And_disable) { | 
| 245   static const int kLocalsDeclSize = 1; | 247   static const int kLocalsDeclSize = 1; | 
| 246   static const int kNumBreakpoints = 1; | 248   static const int kNumBreakpoints = 1; | 
| 247   byte code[] = {WASM_I32_AND(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; | 249   byte code[] = {WASM_I32_AND(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; | 
| 248   SmartArrayPointer<int> offsets = | 250   std::unique_ptr<int[]> offsets = | 
| 249       Find(code, sizeof(code), kNumBreakpoints, kExprI32And); | 251       Find(code, sizeof(code), kNumBreakpoints, kExprI32And); | 
| 250 | 252 | 
| 251   WasmRunner<int32_t> r(kExecuteInterpreted, MachineType::Uint32(), | 253   WasmRunner<int32_t> r(kExecuteInterpreted, MachineType::Uint32(), | 
| 252                         MachineType::Uint32()); | 254                         MachineType::Uint32()); | 
| 253 | 255 | 
| 254   r.Build(code, code + arraysize(code)); | 256   r.Build(code, code + arraysize(code)); | 
| 255 | 257 | 
| 256   WasmInterpreter* interpreter = r.interpreter(); | 258   WasmInterpreter* interpreter = r.interpreter(); | 
| 257   WasmInterpreter::Thread* thread = interpreter->GetThread(0); | 259   WasmInterpreter::Thread* thread = interpreter->GetThread(0); | 
| 258 | 260 | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 280         uint32_t expected = (*a) & (b); | 282         uint32_t expected = (*a) & (b); | 
| 281         CHECK_EQ(expected, thread->GetReturnValue().to<uint32_t>()); | 283         CHECK_EQ(expected, thread->GetReturnValue().to<uint32_t>()); | 
| 282       } | 284       } | 
| 283     } | 285     } | 
| 284   } | 286   } | 
| 285 } | 287 } | 
| 286 | 288 | 
| 287 }  // namespace wasm | 289 }  // namespace wasm | 
| 288 }  // namespace internal | 290 }  // namespace internal | 
| 289 }  // namespace v8 | 291 }  // namespace v8 | 
| OLD | NEW | 
|---|