OLD | NEW |
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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" |
8 #include "src/codegen.h" | 8 #include "src/codegen.h" |
9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 | 920 |
921 // Pass the deoptimization type to the runtime system. | 921 // Pass the deoptimization type to the runtime system. |
922 __ Mov(x1, Operand(Smi::FromInt(static_cast<int>(type)))); | 922 __ Mov(x1, Operand(Smi::FromInt(static_cast<int>(type)))); |
923 __ Push(x1); | 923 __ Push(x1); |
924 __ CallRuntime(Runtime::kNotifyDeoptimized); | 924 __ CallRuntime(Runtime::kNotifyDeoptimized); |
925 | 925 |
926 __ Pop(kInterpreterAccumulatorRegister); // Restore accumulator register. | 926 __ Pop(kInterpreterAccumulatorRegister); // Restore accumulator register. |
927 // Tear down internal frame. | 927 // Tear down internal frame. |
928 } | 928 } |
929 | 929 |
930 // Drop state (we don't use these for interpreter deopts) and push PC at top | 930 // Drop state (we don't use this for interpreter deopts). |
931 // of stack (to simulate initial call to bytecode handler in interpreter entry | |
932 // trampoline). | |
933 __ Pop(x1); | |
934 __ Drop(1); | 931 __ Drop(1); |
935 __ Push(x1); | |
936 | 932 |
937 // Initialize register file register and dispatch table register. | 933 // Initialize register file register and dispatch table register. |
938 __ Add(kInterpreterRegisterFileRegister, fp, | 934 __ Add(kInterpreterRegisterFileRegister, fp, |
939 Operand(InterpreterFrameConstants::kRegisterFilePointerFromFp)); | 935 Operand(InterpreterFrameConstants::kRegisterFilePointerFromFp)); |
940 __ LoadRoot(kInterpreterDispatchTableRegister, | 936 __ LoadRoot(kInterpreterDispatchTableRegister, |
941 Heap::kInterpreterTableRootIndex); | 937 Heap::kInterpreterTableRootIndex); |
942 __ Add(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister, | 938 __ Add(kInterpreterDispatchTableRegister, kInterpreterDispatchTableRegister, |
943 Operand(FixedArray::kHeaderSize - kHeapObjectTag)); | 939 Operand(FixedArray::kHeaderSize - kHeapObjectTag)); |
944 | 940 |
945 | |
946 // Get the context from the frame. | 941 // Get the context from the frame. |
947 // TODO(rmcilroy): Update interpreter frame to expect current context at the | 942 // TODO(rmcilroy): Update interpreter frame to expect current context at the |
948 // context slot instead of the function context. | 943 // context slot instead of the function context. |
949 __ Ldr(kContextRegister, | 944 __ Ldr(kContextRegister, |
950 MemOperand(kInterpreterRegisterFileRegister, | 945 MemOperand(kInterpreterRegisterFileRegister, |
951 InterpreterFrameConstants::kContextFromRegisterPointer)); | 946 InterpreterFrameConstants::kContextFromRegisterPointer)); |
952 | 947 |
953 // Get the bytecode array pointer from the frame. | 948 // Get the bytecode array pointer from the frame. |
954 __ Ldr(x1, | 949 __ Ldr(x1, |
955 MemOperand(kInterpreterRegisterFileRegister, | 950 MemOperand(kInterpreterRegisterFileRegister, |
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2405 } | 2400 } |
2406 } | 2401 } |
2407 | 2402 |
2408 | 2403 |
2409 #undef __ | 2404 #undef __ |
2410 | 2405 |
2411 } // namespace internal | 2406 } // namespace internal |
2412 } // namespace v8 | 2407 } // namespace v8 |
2413 | 2408 |
2414 #endif // V8_TARGET_ARCH_ARM | 2409 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |