| Index: runtime/vm/stub_code_arm64.cc
|
| diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
|
| index fac4ef6be683ebee723a34bcc10a305c0fb1ba7e..bc582e5f9f349be4d416b2c63485bb9b580713c8 100644
|
| --- a/runtime/vm/stub_code_arm64.cc
|
| +++ b/runtime/vm/stub_code_arm64.cc
|
| @@ -123,19 +123,16 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Print the stop message.
|
| DEFINE_LEAF_RUNTIME_ENTRY(void, PrintStopMessage, 1, const char* message) {
|
| OS::Print("Stop message: %s\n", message);
|
| }
|
| END_LEAF_RUNTIME_ENTRY
|
|
|
| -
|
| void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
|
| __ Stop("GeneratePrintStopMessageStub");
|
| }
|
|
|
| -
|
| // Input parameters:
|
| // LR : return address.
|
| // SP : address of return value.
|
| @@ -230,21 +227,18 @@ static void GenerateCallNativeWithWrapperStub(Assembler* assembler,
|
| __ ret();
|
| }
|
|
|
| -
|
| void StubCode::GenerateCallNoScopeNativeStub(Assembler* assembler) {
|
| GenerateCallNativeWithWrapperStub(
|
| assembler,
|
| Address(THR, Thread::no_scope_native_wrapper_entry_point_offset()));
|
| }
|
|
|
| -
|
| void StubCode::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
|
| GenerateCallNativeWithWrapperStub(
|
| assembler,
|
| Address(THR, Thread::auto_scope_native_wrapper_entry_point_offset()));
|
| }
|
|
|
| -
|
| // Input parameters:
|
| // LR : return address.
|
| // SP : address of return value.
|
| @@ -335,7 +329,6 @@ void StubCode::GenerateCallBootstrapNativeStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Input parameters:
|
| // R4: arguments descriptor array.
|
| void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
|
| @@ -356,7 +349,6 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
|
| __ br(R0);
|
| }
|
|
|
| -
|
| // Called from a static call only when an invalid code has been entered
|
| // (invalid because its function was optimized or deoptimized).
|
| // R4: arguments descriptor array.
|
| @@ -382,7 +374,6 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
|
| __ br(R0);
|
| }
|
|
|
| -
|
| // Called from object allocate instruction when the allocation stub has been
|
| // disabled.
|
| void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) {
|
| @@ -403,7 +394,6 @@ void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) {
|
| __ br(R0);
|
| }
|
|
|
| -
|
| // Input parameters:
|
| // R2: smi-tagged argument count, may be zero.
|
| // FP[kParamEndSlotFromFp + 1]: last argument.
|
| @@ -435,7 +425,6 @@ static void PushArgumentsArray(Assembler* assembler) {
|
| __ Bind(&loop_exit);
|
| }
|
|
|
| -
|
| // Used by eager and lazy deoptimization. Preserve result in RAX if necessary.
|
| // This stub translates optimized frame into unoptimized frame. The optimized
|
| // frame can contain values in registers and on stack, the unoptimized
|
| @@ -576,7 +565,6 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
| // The caller is responsible for emitting the return instruction.
|
| }
|
|
|
| -
|
| // R0: result, must be preserved
|
| void StubCode::GenerateDeoptimizeLazyFromReturnStub(Assembler* assembler) {
|
| // Push zap value instead of CODE_REG for lazy deopt.
|
| @@ -589,7 +577,6 @@ void StubCode::GenerateDeoptimizeLazyFromReturnStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // R0: exception, must be preserved
|
| // R1: stacktrace, must be preserved
|
| void StubCode::GenerateDeoptimizeLazyFromThrowStub(Assembler* assembler) {
|
| @@ -603,13 +590,11 @@ void StubCode::GenerateDeoptimizeLazyFromThrowStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| void StubCode::GenerateDeoptimizeStub(Assembler* assembler) {
|
| GenerateDeoptimizationSequence(assembler, kEagerDeopt);
|
| __ ret();
|
| }
|
|
|
| -
|
| static void GenerateDispatcherCode(Assembler* assembler,
|
| Label* call_target_function) {
|
| __ Comment("NoSuchMethodDispatch");
|
| @@ -644,7 +629,6 @@ static void GenerateDispatcherCode(Assembler* assembler,
|
| __ ret();
|
| }
|
|
|
| -
|
| void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) {
|
| __ EnterStubFrame();
|
|
|
| @@ -689,7 +673,6 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) {
|
| __ br(R2);
|
| }
|
|
|
| -
|
| // Called for inline allocation of arrays.
|
| // Input parameters:
|
| // LR: return address.
|
| @@ -834,7 +817,6 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Called when invoking Dart code from C++ (VM code).
|
| // Input parameters:
|
| // LR : points to return address.
|
| @@ -967,7 +949,6 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Called for inline allocation of contexts.
|
| // Input:
|
| // R1: number of context variables.
|
| @@ -1082,7 +1063,6 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Helper stub to implement Assembler::StoreIntoObject.
|
| // Input parameters:
|
| // R0: Address being stored
|
| @@ -1148,7 +1128,6 @@ void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Called for inline allocation of objects.
|
| // Input parameters:
|
| // LR : return address.
|
| @@ -1275,7 +1254,6 @@ void StubCode::GenerateAllocationStubForClass(Assembler* assembler,
|
| __ ret();
|
| }
|
|
|
| -
|
| // Called for invoking "dynamic noSuchMethod(Invocation invocation)" function
|
| // from the entry code of a dart function after an error in passed argument
|
| // name or number is detected.
|
| @@ -1313,7 +1291,6 @@ void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
|
| __ brk(0);
|
| }
|
|
|
| -
|
| // R6: function object.
|
| // R5: inline cache data object.
|
| // Cannot use function object from ICData as it may be the inlined
|
| @@ -1338,7 +1315,6 @@ void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) {
|
| __ StoreFieldToOffset(R7, func_reg, Function::usage_counter_offset(), kWord);
|
| }
|
|
|
| -
|
| // Loads function into 'temp_reg'.
|
| void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
|
| Register temp_reg) {
|
| @@ -1356,7 +1332,6 @@ void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
|
| }
|
| }
|
|
|
| -
|
| // Note: R5 must be preserved.
|
| // Attempt a quick Smi operation for known operations ('kind'). The ICData
|
| // must have been primed with a Smi/Smi check that will be used for counting
|
| @@ -1423,7 +1398,6 @@ static void EmitFastSmiOp(Assembler* assembler,
|
| __ ret();
|
| }
|
|
|
| -
|
| // Generate inline cache check for 'num_args'.
|
| // LR: return address.
|
| // R5: inline cache data object.
|
| @@ -1605,7 +1579,6 @@ void StubCode::GenerateNArgsCheckInlineCacheStub(
|
| }
|
| }
|
|
|
| -
|
| // Use inline cache data array to invoke the target or continue in inline
|
| // cache miss handler. Stub for 1-argument check (receiver class).
|
| // LR: return address.
|
| @@ -1622,7 +1595,6 @@ void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) {
|
| assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
|
| }
|
|
|
| -
|
| void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(assembler, 2,
|
| @@ -1630,28 +1602,24 @@ void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
|
| Token::kILLEGAL);
|
| }
|
|
|
| -
|
| void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(
|
| assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD);
|
| }
|
|
|
| -
|
| void StubCode::GenerateSmiSubInlineCacheStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(
|
| assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kSUB);
|
| }
|
|
|
| -
|
| void StubCode::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(
|
| assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ);
|
| }
|
|
|
| -
|
| void StubCode::GenerateOneArgOptimizedCheckInlineCacheStub(
|
| Assembler* assembler) {
|
| GenerateOptimizedUsageCounterIncrement(assembler);
|
| @@ -1660,7 +1628,6 @@ void StubCode::GenerateOneArgOptimizedCheckInlineCacheStub(
|
| Token::kILLEGAL, true /* optimized */);
|
| }
|
|
|
| -
|
| void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub(
|
| Assembler* assembler) {
|
| GenerateOptimizedUsageCounterIncrement(assembler);
|
| @@ -1669,7 +1636,6 @@ void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub(
|
| Token::kILLEGAL, true /* optimized */);
|
| }
|
|
|
| -
|
| void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| #if defined(DEBUG)
|
| @@ -1734,21 +1700,18 @@ void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) {
|
| }
|
| }
|
|
|
| -
|
| void StubCode::GenerateOneArgUnoptimizedStaticCallStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(
|
| assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
|
| }
|
|
|
| -
|
| void StubCode::GenerateTwoArgsUnoptimizedStaticCallStub(Assembler* assembler) {
|
| GenerateUsageCounterIncrement(assembler, R6);
|
| GenerateNArgsCheckInlineCacheStub(
|
| assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL);
|
| }
|
|
|
| -
|
| // Stub for compiling a function and jumping to the compiled code.
|
| // R5: IC-Data (for methods).
|
| // R4: Arguments descriptor.
|
| @@ -1770,7 +1733,6 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) {
|
| __ br(R2);
|
| }
|
|
|
| -
|
| // R5: Contains an ICData.
|
| void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) {
|
| __ EnterStubFrame();
|
| @@ -1784,7 +1746,6 @@ void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) {
|
| __ br(R0);
|
| }
|
|
|
| -
|
| void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
|
| __ EnterStubFrame();
|
| __ Push(ZR); // Space for result.
|
| @@ -1814,7 +1775,6 @@ void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) {
|
| __ b(&done_stepping);
|
| }
|
|
|
| -
|
| // Used to check class and type arguments. Arguments passed in registers:
|
| // LR: return address.
|
| // R0: instance (must be preserved).
|
| @@ -1900,7 +1860,6 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
|
| __ ret();
|
| }
|
|
|
| -
|
| // Used to check class and type arguments. Arguments passed on stack:
|
| // LR: return address.
|
| // R0: instance (must be preserved).
|
| @@ -1912,7 +1871,6 @@ void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
|
| GenerateSubtypeNTestCacheStub(assembler, 1);
|
| }
|
|
|
| -
|
| // Used to check class and type arguments. Arguments passed in registers:
|
| // LR: return address.
|
| // R0: instance (must be preserved).
|
| @@ -1924,7 +1882,6 @@ void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
|
| GenerateSubtypeNTestCacheStub(assembler, 2);
|
| }
|
|
|
| -
|
| // Used to check class and type arguments. Arguments passed on stack:
|
| // LR: return address.
|
| // R0: instance (must be preserved).
|
| @@ -1936,13 +1893,11 @@ void StubCode::GenerateSubtype4TestCacheStub(Assembler* assembler) {
|
| GenerateSubtypeNTestCacheStub(assembler, 4);
|
| }
|
|
|
| -
|
| void StubCode::GenerateGetCStackPointerStub(Assembler* assembler) {
|
| __ mov(R0, CSP);
|
| __ ret();
|
| }
|
|
|
| -
|
| // Jump to a frame on the call stack.
|
| // LR: return address.
|
| // R0: program_counter.
|
| @@ -1968,7 +1923,6 @@ void StubCode::GenerateJumpToFrameStub(Assembler* assembler) {
|
| __ ret(); // Jump to continuation point.
|
| }
|
|
|
| -
|
| // Run an exception handler. Execution comes from JumpToFrame
|
| // stub or from the simulator.
|
| //
|
| @@ -1989,7 +1943,6 @@ void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) {
|
| __ ret(); // Jump to the exception handler code.
|
| }
|
|
|
| -
|
| // Deoptimize a frame on the call stack before rewinding.
|
| // The arguments are stored in the Thread object.
|
| // No result.
|
| @@ -2009,7 +1962,6 @@ void StubCode::GenerateDeoptForRewindStub(Assembler* assembler) {
|
| __ brk(0);
|
| }
|
|
|
| -
|
| // Calls to the runtime to optimize the given function.
|
| // R6: function to be re-optimized.
|
| // R4: argument descriptor (preserved).
|
| @@ -2030,7 +1982,6 @@ void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
|
| __ brk(0);
|
| }
|
|
|
| -
|
| // Does identical check (object references are equal or not equal) with special
|
| // checks for boxed numbers.
|
| // Left and right are pushed on stack.
|
| @@ -2088,7 +2039,6 @@ static void GenerateIdenticalWithNumberCheckStub(Assembler* assembler,
|
| __ Bind(&done);
|
| }
|
|
|
| -
|
| // Called only from unoptimized code. All relevant registers have been saved.
|
| // LR: return address.
|
| // SP + 4: left operand.
|
| @@ -2123,7 +2073,6 @@ void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub(
|
| }
|
| }
|
|
|
| -
|
| // Called from optimized code only.
|
| // LR: return address.
|
| // SP + 4: left operand.
|
| @@ -2139,7 +2088,6 @@ void StubCode::GenerateOptimizedIdenticalWithNumberCheckStub(
|
| __ ret();
|
| }
|
|
|
| -
|
| // Called from megamorphic calls.
|
| // R0: receiver
|
| // R5: MegamorphicCache (preserved)
|
| @@ -2212,7 +2160,6 @@ void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) {
|
| __ b(&cid_loaded);
|
| }
|
|
|
| -
|
| // Called from switchable IC calls.
|
| // R0: receiver
|
| // R5: ICData (preserved)
|
| @@ -2253,7 +2200,6 @@ void StubCode::GenerateICCallThroughFunctionStub(Assembler* assembler) {
|
| __ br(R1);
|
| }
|
|
|
| -
|
| void StubCode::GenerateICCallThroughCodeStub(Assembler* assembler) {
|
| Label loop, found, miss;
|
| __ ldr(R4, FieldAddress(R5, ICData::arguments_descriptor_offset()));
|
| @@ -2288,7 +2234,6 @@ void StubCode::GenerateICCallThroughCodeStub(Assembler* assembler) {
|
| __ br(R1);
|
| }
|
|
|
| -
|
| // Called from switchable IC calls.
|
| // R0: receiver
|
| // R5: SingleTargetCache
|
| @@ -2311,7 +2256,6 @@ void StubCode::GenerateUnlinkedCallStub(Assembler* assembler) {
|
| __ br(R1);
|
| }
|
|
|
| -
|
| // Called from switchable IC calls.
|
| // R0: receiver
|
| // R5: SingleTargetCache
|
| @@ -2352,7 +2296,6 @@ void StubCode::GenerateSingleTargetCallStub(Assembler* assembler) {
|
| __ br(R1);
|
| }
|
|
|
| -
|
| // Called from the monomorphic checked entry.
|
| // R0: receiver
|
| void StubCode::GenerateMonomorphicMissStub(Assembler* assembler) {
|
| @@ -2374,12 +2317,10 @@ void StubCode::GenerateMonomorphicMissStub(Assembler* assembler) {
|
| __ br(R1);
|
| }
|
|
|
| -
|
| void StubCode::GenerateFrameAwaitingMaterializationStub(Assembler* assembler) {
|
| __ brk(0);
|
| }
|
|
|
| -
|
| void StubCode::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
|
| __ brk(0);
|
| }
|
|
|