summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc')
-rw-r--r--deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc59
1 files changed, 54 insertions, 5 deletions
diff --git a/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc b/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc
index b7e5b0ffbe..9924b620ee 100644
--- a/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc
+++ b/deps/v8/test/unittests/assembler/macro-assembler-x64-unittest.cc
@@ -40,6 +40,57 @@
namespace v8 {
namespace internal {
+
+#define __ masm.
+
+// 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.
+
+using MacroAssemblerX64Test = TestWithIsolate;
+
+TEST_F(MacroAssemblerX64Test, TestHardAbort) {
+ auto buffer = AllocateAssemblerBuffer();
+ MacroAssembler masm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo,
+ buffer->CreateView());
+ __ set_root_array_available(false);
+ __ set_abort_hard(true);
+
+ __ Abort(AbortReason::kNoReason);
+
+ CodeDesc desc;
+ masm.GetCode(isolate(), &desc);
+ buffer->MakeExecutable();
+ auto f = GeneratedCode<void>::FromBuffer(isolate(), buffer->start());
+
+ ASSERT_DEATH_IF_SUPPORTED({ f.Call(); }, "abort: no reason");
+}
+
+TEST_F(MacroAssemblerX64Test, TestCheck) {
+ auto buffer = AllocateAssemblerBuffer();
+ MacroAssembler masm(isolate(), AssemblerOptions{}, CodeObjectRequired::kNo,
+ buffer->CreateView());
+ __ set_root_array_available(false);
+ __ set_abort_hard(true);
+
+ // Fail if the first parameter is 17.
+ __ movl(rax, Immediate(17));
+ __ cmpl(rax, arg_reg_1);
+ __ Check(Condition::not_equal, AbortReason::kNoReason);
+ __ ret(0);
+
+ CodeDesc desc;
+ masm.GetCode(isolate(), &desc);
+ buffer->MakeExecutable();
+ 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 test_macro_assembler_x64 {
// Test the x64 assembler by compiling some simple functions into
@@ -51,8 +102,6 @@ namespace test_macro_assembler_x64 {
// This calling convention is used on Linux, with GCC, and on Mac OS,
// with GCC. A different convention is used on 64-bit windows.
-using MacroAssemblerX64Test = TestWithIsolate;
-
using F0 = int();
#define __ masm->
@@ -60,14 +109,14 @@ using F0 = int();
static void EntryCode(MacroAssembler* masm) {
// Smi constant register is callee save.
__ pushq(kRootRegister);
-#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
+#ifdef V8_COMPRESS_POINTERS
__ pushq(kPtrComprCageBaseRegister);
#endif
__ InitializeRootRegister();
}
static void ExitCode(MacroAssembler* masm) {
-#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
+#ifdef V8_COMPRESS_POINTERS
__ popq(kPtrComprCageBaseRegister);
#endif
__ popq(kRootRegister);
@@ -468,7 +517,7 @@ TEST_F(MacroAssemblerX64Test, EmbeddedObj) {
code->Print(os);
#endif
using myF0 = Address();
- auto f = GeneratedCode<myF0>::FromAddress(isolate, code->entry());
+ auto f = GeneratedCode<myF0>::FromAddress(isolate, code->code_entry_point());
Object result = Object(f.Call());
CHECK_EQ(old_array->ptr(), result.ptr());