Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(381)

Side by Side Diff: src/arm64/macro-assembler-arm64.cc

Issue 836093007: split api call stubs into accessor and function call stubs (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/arm64/macro-assembler-arm64.h ('k') | src/code-stubs.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM64 7 #if V8_TARGET_ARCH_ARM64
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/division-by-constant.h" 10 #include "src/base/division-by-constant.h"
(...skipping 1736 matching lines...) Expand 10 before | Expand all | Expand 10 after
1747 CallStub(&stub); 1747 CallStub(&stub);
1748 } 1748 }
1749 1749
1750 1750
1751 static int AddressOffset(ExternalReference ref0, ExternalReference ref1) { 1751 static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
1752 return ref0.address() - ref1.address(); 1752 return ref0.address() - ref1.address();
1753 } 1753 }
1754 1754
1755 1755
1756 void MacroAssembler::CallApiFunctionAndReturn( 1756 void MacroAssembler::CallApiFunctionAndReturn(
1757 Register function_address, 1757 Register function_address, ExternalReference thunk_ref, int stack_space,
1758 ExternalReference thunk_ref, 1758 MemOperand* stack_space_operand, int spill_offset,
1759 int stack_space, 1759 MemOperand return_value_operand, MemOperand* context_restore_operand) {
1760 int spill_offset,
1761 MemOperand return_value_operand,
1762 MemOperand* context_restore_operand) {
1763 ASM_LOCATION("CallApiFunctionAndReturn"); 1760 ASM_LOCATION("CallApiFunctionAndReturn");
1764 ExternalReference next_address = 1761 ExternalReference next_address =
1765 ExternalReference::handle_scope_next_address(isolate()); 1762 ExternalReference::handle_scope_next_address(isolate());
1766 const int kNextOffset = 0; 1763 const int kNextOffset = 0;
1767 const int kLimitOffset = AddressOffset( 1764 const int kLimitOffset = AddressOffset(
1768 ExternalReference::handle_scope_limit_address(isolate()), 1765 ExternalReference::handle_scope_limit_address(isolate()),
1769 next_address); 1766 next_address);
1770 const int kLevelOffset = AddressOffset( 1767 const int kLevelOffset = AddressOffset(
1771 ExternalReference::handle_scope_level_address(isolate()), 1768 ExternalReference::handle_scope_level_address(isolate()),
1772 next_address); 1769 next_address);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1864 Mov(x5, ExternalReference::scheduled_exception_address(isolate())); 1861 Mov(x5, ExternalReference::scheduled_exception_address(isolate()));
1865 Ldr(x5, MemOperand(x5)); 1862 Ldr(x5, MemOperand(x5));
1866 JumpIfNotRoot(x5, Heap::kTheHoleValueRootIndex, &promote_scheduled_exception); 1863 JumpIfNotRoot(x5, Heap::kTheHoleValueRootIndex, &promote_scheduled_exception);
1867 Bind(&exception_handled); 1864 Bind(&exception_handled);
1868 1865
1869 bool restore_context = context_restore_operand != NULL; 1866 bool restore_context = context_restore_operand != NULL;
1870 if (restore_context) { 1867 if (restore_context) {
1871 Ldr(cp, *context_restore_operand); 1868 Ldr(cp, *context_restore_operand);
1872 } 1869 }
1873 1870
1871 if (stack_space_operand != NULL) {
1872 Ldr(w2, *stack_space_operand);
1873 }
1874
1874 LeaveExitFrame(false, x1, !restore_context); 1875 LeaveExitFrame(false, x1, !restore_context);
1875 Drop(stack_space); 1876 if (stack_space_operand != NULL) {
1877 Drop(x2, 1);
1878 } else {
1879 Drop(stack_space);
1880 }
1876 Ret(); 1881 Ret();
1877 1882
1878 Bind(&promote_scheduled_exception); 1883 Bind(&promote_scheduled_exception);
1879 { 1884 {
1880 FrameScope frame(this, StackFrame::INTERNAL); 1885 FrameScope frame(this, StackFrame::INTERNAL);
1881 CallExternalReference( 1886 CallExternalReference(
1882 ExternalReference( 1887 ExternalReference(
1883 Runtime::kPromoteScheduledException, isolate()), 0); 1888 Runtime::kPromoteScheduledException, isolate()), 0);
1884 } 1889 }
1885 B(&exception_handled); 1890 B(&exception_handled);
(...skipping 3507 matching lines...) Expand 10 before | Expand all | Expand 10 after
5393 } 5398 }
5394 } 5399 }
5395 5400
5396 5401
5397 #undef __ 5402 #undef __
5398 5403
5399 5404
5400 } } // namespace v8::internal 5405 } } // namespace v8::internal
5401 5406
5402 #endif // V8_TARGET_ARCH_ARM64 5407 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm64/macro-assembler-arm64.h ('k') | src/code-stubs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698