summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc')
-rw-r--r--deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc254
1 files changed, 0 insertions, 254 deletions
diff --git a/deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc b/deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc
deleted file mode 100644
index 77123ef565..0000000000
--- a/deps/v8/test/unittests/assembler/turbo-assembler-arm64-unittest.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2018 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 "src/codegen/arm64/macro-assembler-arm64-inl.h"
-#include "src/codegen/macro-assembler.h"
-#include "src/execution/simulator.h"
-#include "src/utils/ostreams.h"
-#include "test/common/assembler-tester.h"
-#include "test/unittests/test-utils.h"
-#include "testing/gtest-support.h"
-
-namespace v8 {
-namespace internal {
-
-#define __ tasm.
-
-// If we are running on android and the output is not redirected (i.e. ends up
-// in the android log) then we cannot find the error message in the output. This
-// macro just returns the empty string in that case.
-#if defined(ANDROID) && !defined(V8_ANDROID_LOG_STDOUT)
-#define ERROR_MESSAGE(msg) ""
-#else
-#define ERROR_MESSAGE(msg) msg
-#endif
-
-// Test the x64 assembler by compiling some simple functions into
-// a buffer and executing them. These tests do not initialize the
-// V8 library, create a context, or use any V8 objects.
-
-class TurboAssemblerTest : public TestWithIsolate {};
-
-TEST_F(TurboAssemblerTest, TestHardAbort) {
- auto buffer = AllocateAssemblerBuffer();
- TurboAssembler tasm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo,
- buffer->CreateView());
- __ set_root_array_available(false);
- __ set_abort_hard(true);
-
- {
- AssemblerBufferWriteScope rw_scope(*buffer);
-
- __ CodeEntry();
-
- __ Abort(AbortReason::kNoReason);
-
- CodeDesc desc;
- tasm.GetCode(isolate(), &desc);
- }
- // We need an isolate here to execute in the simulator.
- auto f = GeneratedCode<void>::FromBuffer(isolate(), buffer->start());
-
- ASSERT_DEATH_IF_SUPPORTED({ f.Call(); }, ERROR_MESSAGE("abort: no reason"));
-}
-
-TEST_F(TurboAssemblerTest, TestCheck) {
- auto buffer = AllocateAssemblerBuffer();
- TurboAssembler tasm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo,
- buffer->CreateView());
- __ set_root_array_available(false);
- __ set_abort_hard(true);
-
- {
- AssemblerBufferWriteScope rw_scope(*buffer);
-
- __ CodeEntry();
-
- // Fail if the first parameter is 17.
- __ Mov(w1, Immediate(17));
- __ Cmp(w0, w1); // 1st parameter is in {w0}.
- __ Check(Condition::ne, AbortReason::kNoReason);
- __ Ret();
-
- CodeDesc desc;
- tasm.GetCode(isolate(), &desc);
- }
- // We need an isolate here to execute in the simulator.
- auto f = GeneratedCode<void, int>::FromBuffer(isolate(), buffer->start());
-
- f.Call(0);
- f.Call(18);
- ASSERT_DEATH_IF_SUPPORTED({ f.Call(17); }, ERROR_MESSAGE("abort: no reason"));
-}
-
-TEST_F(TurboAssemblerTest, CompareAndBranch) {
- const int kTestCases[] = {-42, 0, 42};
- static_assert(Condition::eq == 0);
- static_assert(Condition::le == 13);
- TRACED_FORRANGE(int, cc, 0, 13) { // All conds except al and nv
- Condition cond = static_cast<Condition>(cc);
- TRACED_FOREACH(int, imm, kTestCases) {
- auto buffer = AllocateAssemblerBuffer();
- TurboAssembler tasm(isolate(), AssemblerOptions{},
- CodeObjectRequired::kNo, buffer->CreateView());
- __ set_root_array_available(false);
- __ set_abort_hard(true);
-
- {
- AssemblerBufferWriteScope rw_scope(*buffer);
-
- __ CodeEntry();
-
- Label start, lab;
- __ Bind(&start);
- __ CompareAndBranch(x0, Immediate(imm), cond, &lab);
- if (imm == 0 && ((cond == eq) || (cond == ne) || (cond == hi) ||
- (cond == ls))) { // One instruction generated
- ASSERT_EQ(kInstrSize, __ SizeOfCodeGeneratedSince(&start));
- } else { // Two instructions generated
- ASSERT_EQ(static_cast<uint8_t>(2 * kInstrSize),
- __ SizeOfCodeGeneratedSince(&start));
- }
- __ Cmp(x0, Immediate(imm));
- __ Check(NegateCondition(cond),
- AbortReason::kNoReason); // cond must not hold
- __ Ret();
- __ Bind(&lab); // Branch leads here
- __ Cmp(x0, Immediate(imm));
- __ Check(cond, AbortReason::kNoReason); // cond must hold
- __ Ret();
-
- CodeDesc desc;
- tasm.GetCode(isolate(), &desc);
- }
- // We need an isolate here to execute in the simulator.
- auto f = GeneratedCode<void, int>::FromBuffer(isolate(), buffer->start());
-
- TRACED_FOREACH(int, n, kTestCases) { f.Call(n); }
- }
- }
-}
-
-struct MoveObjectAndSlotTestCase {
- const char* comment;
- Register dst_object;
- Register dst_slot;
- Register object;
- Register offset_register = no_reg;
-};
-
-const MoveObjectAndSlotTestCase kMoveObjectAndSlotTestCases[] = {
- {"no overlap", x0, x1, x2},
- {"no overlap", x0, x1, x2, x3},
-
- {"object == dst_object", x2, x1, x2},
- {"object == dst_object", x2, x1, x2, x3},
-
- {"object == dst_slot", x1, x2, x2},
- {"object == dst_slot", x1, x2, x2, x3},
-
- {"offset == dst_object", x0, x1, x2, x0},
-
- {"offset == dst_object && object == dst_slot", x0, x1, x1, x0},
-
- {"offset == dst_slot", x0, x1, x2, x1},
-
- {"offset == dst_slot && object == dst_object", x0, x1, x0, x1}};
-
-// Make sure we include offsets that cannot be encoded in an add instruction.
-const int kOffsets[] = {0, 42, kMaxRegularHeapObjectSize, 0x101001};
-
-template <typename T>
-class TurboAssemblerTestWithParam : public TurboAssemblerTest,
- public ::testing::WithParamInterface<T> {};
-
-using TurboAssemblerTestMoveObjectAndSlot =
- TurboAssemblerTestWithParam<MoveObjectAndSlotTestCase>;
-
-TEST_P(TurboAssemblerTestMoveObjectAndSlot, MoveObjectAndSlot) {
- const MoveObjectAndSlotTestCase test_case = GetParam();
- TRACED_FOREACH(int32_t, offset, kOffsets) {
- auto buffer = AllocateAssemblerBuffer();
- TurboAssembler tasm(nullptr, AssemblerOptions{}, CodeObjectRequired::kNo,
- buffer->CreateView());
-
- {
- AssemblerBufferWriteScope rw_buffer_scope(*buffer);
-
- __ CodeEntry();
- __ Push(x0, padreg);
- __ Mov(test_case.object, x1);
-
- Register src_object = test_case.object;
- Register dst_object = test_case.dst_object;
- Register dst_slot = test_case.dst_slot;
-
- Operand offset_operand(0);
- if (test_case.offset_register == no_reg) {
- offset_operand = Operand(offset);
- } else {
- __ Mov(test_case.offset_register, Operand(offset));
- offset_operand = Operand(test_case.offset_register);
- }
-
- std::stringstream comment;
- comment << "-- " << test_case.comment << ": MoveObjectAndSlot("
- << dst_object << ", " << dst_slot << ", " << src_object << ", ";
- if (test_case.offset_register == no_reg) {
- comment << "#" << offset;
- } else {
- comment << test_case.offset_register;
- }
- comment << ") --";
- __ RecordComment(comment.str().c_str());
- __ MoveObjectAndSlot(dst_object, dst_slot, src_object, offset_operand);
- __ RecordComment("--");
-
- // The `result` pointer was saved on the stack.
- UseScratchRegisterScope temps(&tasm);
- Register scratch = temps.AcquireX();
- __ Pop(padreg, scratch);
- __ Str(dst_object, MemOperand(scratch));
- __ Str(dst_slot, MemOperand(scratch, kSystemPointerSize));
-
- __ Ret();
-
- CodeDesc desc;
- tasm.GetCode(nullptr, &desc);
- if (v8_flags.print_code) {
- Handle<Code> code =
- Factory::CodeBuilder(isolate(), desc, CodeKind::FOR_TESTING)
- .Build();
- StdoutStream os;
- code->Print(os);
- }
- }
-
- // We need an isolate here to execute in the simulator.
- auto f = GeneratedCode<void, byte**, byte*>::FromBuffer(isolate(),
- buffer->start());
-
- byte* object = new byte[offset];
- byte* result[] = {nullptr, nullptr};
-
- f.Call(result, object);
-
- // The first element must be the address of the object, and the second the
- // slot addressed by `offset`.
- EXPECT_EQ(result[0], &object[0]);
- EXPECT_EQ(result[1], &object[offset]);
-
- delete[] object;
- }
-}
-
-INSTANTIATE_TEST_SUITE_P(TurboAssemblerTest,
- TurboAssemblerTestMoveObjectAndSlot,
- ::testing::ValuesIn(kMoveObjectAndSlotTestCases));
-
-#undef __
-#undef ERROR_MESSAGE
-
-} // namespace internal
-} // namespace v8