diff options
Diffstat (limited to 'deps/v8/test/unittests/assembler/turbo-assembler-s390-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/assembler/turbo-assembler-s390-unittest.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/deps/v8/test/unittests/assembler/turbo-assembler-s390-unittest.cc b/deps/v8/test/unittests/assembler/turbo-assembler-s390-unittest.cc new file mode 100644 index 00000000000..7d45ec907f9 --- /dev/null +++ b/deps/v8/test/unittests/assembler/turbo-assembler-s390-unittest.cc @@ -0,0 +1,68 @@ +// 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/macro-assembler.h" +#include "src/s390/assembler-s390-inl.h" +#include "src/simulator.h" +#include "test/common/assembler-tester.h" +#include "test/unittests/test-utils.h" +#include "testing/gtest-support.h" + +namespace v8 { +namespace internal { + +#define __ tasm. + +// Test the s390 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) { + size_t allocated; + byte* buffer = AllocateAssemblerBuffer(&allocated); + TurboAssembler tasm(nullptr, AssemblerOptions{}, buffer, + static_cast<int>(allocated), CodeObjectRequired::kNo); + __ set_abort_hard(true); + + __ Abort(AbortReason::kNoReason); + + CodeDesc desc; + tasm.GetCode(nullptr, &desc); + MakeAssemblerBufferExecutable(buffer, allocated); + // We need an isolate here to execute in the simulator. + auto f = GeneratedCode<void>::FromBuffer(isolate(), buffer); + + ASSERT_DEATH_IF_SUPPORTED({ f.Call(); }, "abort: no reason"); +} + +TEST_F(TurboAssemblerTest, TestCheck) { + size_t allocated; + byte* buffer = AllocateAssemblerBuffer(&allocated); + TurboAssembler tasm(nullptr, AssemblerOptions{}, buffer, + static_cast<int>(allocated), CodeObjectRequired::kNo); + __ set_abort_hard(true); + + // Fail if the first parameter is 17. + __ lgfi(r3, Operand(17)); + __ CmpP(r2, r3); // 1st parameter is in {r2}. + __ Check(Condition::ne, AbortReason::kNoReason); + __ Ret(); + + CodeDesc desc; + tasm.GetCode(nullptr, &desc); + MakeAssemblerBufferExecutable(buffer, allocated); + // We need an isolate here to execute in the simulator. + auto f = GeneratedCode<void, int>::FromBuffer(isolate(), buffer); + + f.Call(0); + f.Call(18); + ASSERT_DEATH_IF_SUPPORTED({ f.Call(17); }, "abort: no reason"); +} + +#undef __ + +} // namespace internal +} // namespace v8 |