summaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/compiler/test-run-wasm-machops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/cctest/compiler/test-run-wasm-machops.cc')
-rw-r--r--deps/v8/test/cctest/compiler/test-run-wasm-machops.cc199
1 files changed, 0 insertions, 199 deletions
diff --git a/deps/v8/test/cctest/compiler/test-run-wasm-machops.cc b/deps/v8/test/cctest/compiler/test-run-wasm-machops.cc
deleted file mode 100644
index 30bdad59e6..0000000000
--- a/deps/v8/test/cctest/compiler/test-run-wasm-machops.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2016 the V8 project authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-#include <cmath>
-#include <functional>
-#include <limits>
-
-#include "src/base/bits.h"
-#include "src/base/utils/random-number-generator.h"
-#include "src/codegen.h"
-#include "src/objects-inl.h"
-#include "src/wasm/wasm-objects.h"
-#include "test/cctest/cctest.h"
-#include "test/cctest/compiler/codegen-tester.h"
-#include "test/cctest/compiler/graph-builder-tester.h"
-#include "test/cctest/compiler/value-helper.h"
-
-namespace v8 {
-namespace internal {
-namespace compiler {
-
-static void UpdateFunctionTableSizeReferences(Handle<Code> code,
- uint32_t old_size,
- uint32_t new_size) {
- Isolate* isolate = CcTest::i_isolate();
- // TODO(6792): No longer needed once WebAssembly code is off heap.
- CodeSpaceMemoryModificationScope modification_scope(isolate->heap());
- bool modified = false;
- int mode_mask =
- RelocInfo::ModeMask(RelocInfo::WASM_FUNCTION_TABLE_SIZE_REFERENCE);
- for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
- RelocInfo::Mode mode = it.rinfo()->rmode();
- if (RelocInfo::IsWasmFunctionTableSizeReference(mode)) {
- it.rinfo()->update_wasm_function_table_size_reference(old_size, new_size);
- modified = true;
- }
- }
- if (modified) {
- Assembler::FlushICache(code->instruction_start(), code->instruction_size());
- }
-}
-
-template <typename CType>
-static void RunLoadStoreRelocation(MachineType rep) {
- const int kNumElems = 2;
- CType buffer[kNumElems];
- CType new_buffer[kNumElems];
- byte* raw = reinterpret_cast<byte*>(buffer);
- byte* new_raw = reinterpret_cast<byte*>(new_buffer);
- WasmContext wasm_context;
- wasm_context.SetRawMemory(raw, sizeof(buffer));
- for (size_t i = 0; i < sizeof(buffer); i++) {
- raw[i] = static_cast<byte>((i + sizeof(CType)) ^ 0xAA);
- new_raw[i] = static_cast<byte>((i + sizeof(CType)) ^ 0xAA);
- }
- uint32_t OK = 0x29000;
- RawMachineAssemblerTester<uint32_t> m;
- Node* wasm_context_node =
- m.RelocatableIntPtrConstant(reinterpret_cast<uintptr_t>(&wasm_context),
- RelocInfo::WASM_CONTEXT_REFERENCE);
- Node* offset = m.Int32Constant(offsetof(WasmContext, mem_start));
- Node* base = m.Load(MachineType::UintPtr(), wasm_context_node, offset);
- Node* base1 = m.IntPtrAdd(base, m.Int32Constant(sizeof(CType)));
- Node* index = m.Int32Constant(0);
- Node* load = m.Load(rep, base, index);
- m.Store(rep.representation(), base1, index, load, kNoWriteBarrier);
- m.Return(m.Int32Constant(OK));
- CHECK(buffer[0] != buffer[1]);
- CHECK_EQ(OK, m.Call());
- CHECK(buffer[0] == buffer[1]);
- wasm_context.SetRawMemory(new_raw, sizeof(new_buffer));
- CHECK(new_buffer[0] != new_buffer[1]);
- CHECK_EQ(OK, m.Call());
- CHECK(new_buffer[0] == new_buffer[1]);
-}
-
-TEST(RunLoadStoreRelocation) {
- RunLoadStoreRelocation<int8_t>(MachineType::Int8());
- RunLoadStoreRelocation<uint8_t>(MachineType::Uint8());
- RunLoadStoreRelocation<int16_t>(MachineType::Int16());
- RunLoadStoreRelocation<uint16_t>(MachineType::Uint16());
- RunLoadStoreRelocation<int32_t>(MachineType::Int32());
- RunLoadStoreRelocation<uint32_t>(MachineType::Uint32());
- RunLoadStoreRelocation<void*>(MachineType::AnyTagged());
- RunLoadStoreRelocation<float>(MachineType::Float32());
- RunLoadStoreRelocation<double>(MachineType::Float64());
-}
-
-template <typename CType>
-static void RunLoadStoreRelocationOffset(MachineType rep) {
- RawMachineAssemblerTester<int32_t> r(MachineType::Int32());
- const int kNumElems = 4;
- CType buffer[kNumElems];
- CType new_buffer[kNumElems + 1];
- WasmContext wasm_context;
-
- for (int32_t x = 0; x < kNumElems; x++) {
- int32_t y = kNumElems - x - 1;
- // initialize the buffer with raw data.
- byte* raw = reinterpret_cast<byte*>(buffer);
- wasm_context.SetRawMemory(raw, sizeof(buffer));
- for (size_t i = 0; i < sizeof(buffer); i++) {
- raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA);
- }
-
- RawMachineAssemblerTester<int32_t> m;
- int32_t OK = 0x29000 + x;
- Node* wasm_context_node =
- m.RelocatableIntPtrConstant(reinterpret_cast<uintptr_t>(&wasm_context),
- RelocInfo::WASM_CONTEXT_REFERENCE);
- Node* offset = m.Int32Constant(offsetof(WasmContext, mem_start));
- Node* base = m.Load(MachineType::UintPtr(), wasm_context_node, offset);
- Node* index0 = m.IntPtrConstant(x * sizeof(buffer[0]));
- Node* load = m.Load(rep, base, index0);
- Node* index1 = m.IntPtrConstant(y * sizeof(buffer[0]));
- m.Store(rep.representation(), base, index1, load, kNoWriteBarrier);
- m.Return(m.Int32Constant(OK));
-
- CHECK(buffer[x] != buffer[y]);
- CHECK_EQ(OK, m.Call());
- CHECK(buffer[x] == buffer[y]);
-
- // Initialize new buffer and set old_buffer to 0
- byte* new_raw = reinterpret_cast<byte*>(new_buffer);
- for (size_t i = 0; i < sizeof(buffer); i++) {
- raw[i] = 0;
- new_raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA);
- }
-
- wasm_context.SetRawMemory(new_raw, sizeof(new_buffer));
-
- CHECK(new_buffer[x] != new_buffer[y]);
- CHECK_EQ(OK, m.Call());
- CHECK(new_buffer[x] == new_buffer[y]);
- }
-}
-
-TEST(RunLoadStoreRelocationOffset) {
- RunLoadStoreRelocationOffset<int8_t>(MachineType::Int8());
- RunLoadStoreRelocationOffset<uint8_t>(MachineType::Uint8());
- RunLoadStoreRelocationOffset<int16_t>(MachineType::Int16());
- RunLoadStoreRelocationOffset<uint16_t>(MachineType::Uint16());
- RunLoadStoreRelocationOffset<int32_t>(MachineType::Int32());
- RunLoadStoreRelocationOffset<uint32_t>(MachineType::Uint32());
- RunLoadStoreRelocationOffset<void*>(MachineType::AnyTagged());
- RunLoadStoreRelocationOffset<float>(MachineType::Float32());
- RunLoadStoreRelocationOffset<double>(MachineType::Float64());
-}
-
-TEST(Uint32LessThanMemoryRelocation) {
- RawMachineAssemblerTester<uint32_t> m;
- RawMachineLabel within_bounds, out_of_bounds;
- WasmContext wasm_context;
- wasm_context.SetRawMemory(reinterpret_cast<void*>(1234), 0x200);
- Node* index = m.Int32Constant(0x200);
- Node* wasm_context_node =
- m.RelocatableIntPtrConstant(reinterpret_cast<uintptr_t>(&wasm_context),
- RelocInfo::WASM_CONTEXT_REFERENCE);
- Node* offset = m.Int32Constant(offsetof(WasmContext, mem_size));
- Node* limit = m.Load(MachineType::Uint32(), wasm_context_node, offset);
- Node* cond = m.AddNode(m.machine()->Uint32LessThan(), index, limit);
- m.Branch(cond, &within_bounds, &out_of_bounds);
- m.Bind(&within_bounds);
- m.Return(m.Int32Constant(0xACED));
- m.Bind(&out_of_bounds);
- m.Return(m.Int32Constant(0xDEADBEEF));
- // Check that index is out of bounds with current size
- CHECK_EQ(0xDEADBEEF, m.Call());
- wasm_context.SetRawMemory(wasm_context.mem_start, 0x400);
- // Check that after limit is increased, index is within bounds.
- CHECK_EQ(0xACEDu, m.Call());
-}
-
-TEST(Uint32LessThanFunctionTableRelocation) {
- RawMachineAssemblerTester<uint32_t> m;
- RawMachineLabel within_bounds, out_of_bounds;
- Node* index = m.Int32Constant(0x200);
- Node* limit = m.RelocatableInt32Constant(
- 0x200, RelocInfo::WASM_FUNCTION_TABLE_SIZE_REFERENCE);
- Node* cond = m.AddNode(m.machine()->Uint32LessThan(), index, limit);
- m.Branch(cond, &within_bounds, &out_of_bounds);
- m.Bind(&within_bounds);
- m.Return(m.Int32Constant(0xACED));
- m.Bind(&out_of_bounds);
- m.Return(m.Int32Constant(0xDEADBEEF));
- // Check that index is out of bounds with current size
- CHECK_EQ(0xDEADBEEF, m.Call());
- m.GenerateCode();
-
- Handle<Code> code = m.GetCode();
- UpdateFunctionTableSizeReferences(code, 0x200, 0x400);
- // Check that after limit is increased, index is within bounds.
- CHECK_EQ(0xACED, m.Call());
-}
-
-} // namespace compiler
-} // namespace internal
-} // namespace v8