|  | // 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/macro-assembler.h" | 
|  | #include "src/codegen/mips64/assembler-mips64-inl.h" | 
|  | #include "src/execution/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 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); | 
|  |  | 
|  | __ Abort(AbortReason::kNoReason); | 
|  |  | 
|  | CodeDesc desc; | 
|  | tasm.GetCode(isolate(), &desc); | 
|  | buffer->MakeExecutable(); | 
|  | // We need an isolate here to execute in the simulator. | 
|  | auto f = GeneratedCode<void>::FromBuffer(isolate(), buffer->start()); | 
|  |  | 
|  | ASSERT_DEATH_IF_SUPPORTED({ f.Call(); }, "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); | 
|  |  | 
|  | // Fail if the first parameter (in {a0}) is 17. | 
|  | __ Check(Condition::ne, AbortReason::kNoReason, a0, Operand(17)); | 
|  | __ Ret(); | 
|  |  | 
|  | CodeDesc desc; | 
|  | tasm.GetCode(isolate(), &desc); | 
|  | buffer->MakeExecutable(); | 
|  | // 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); }, "abort: no reason"); | 
|  | } | 
|  |  | 
|  | #undef __ | 
|  |  | 
|  | }  // namespace internal | 
|  | }  // namespace v8 |