Index: runtime/vm/stub_code_x64.cc |
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc |
index 95874ca8b111a54cd24448d77a231aea04b7faa4..157f7662abf40bd137e2165349220b79b207166b 100644 |
--- a/runtime/vm/stub_code_x64.cc |
+++ b/runtime/vm/stub_code_x64.cc |
@@ -96,14 +96,12 @@ 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 |
- |
// Input parameters: |
// RSP : points to return address. |
// RDI : stop message (const char*). |
@@ -119,7 +117,6 @@ void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Input parameters: |
// RSP : points to return address. |
// RSP + 8 : address of return value. |
@@ -192,21 +189,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: |
// RSP : points to return address. |
// RSP + 8 : address of return value. |
@@ -274,7 +268,6 @@ void StubCode::GenerateCallBootstrapNativeStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Input parameters: |
// R10: arguments descriptor array. |
void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
@@ -292,7 +285,6 @@ void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) { |
__ jmp(RBX); |
} |
- |
// Called from a static call only when an invalid code has been entered |
// (invalid because its function was optimized or deoptimized). |
// R10: arguments descriptor array. |
@@ -314,7 +306,6 @@ void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) { |
__ int3(); |
} |
- |
// Called from object allocate instruction when the allocation stub has been |
// disabled. |
void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
@@ -333,7 +324,6 @@ void StubCode::GenerateFixAllocationStubTargetStub(Assembler* assembler) { |
__ int3(); |
} |
- |
// Input parameters: |
// R10: smi-tagged argument count, may be zero. |
// RBP[kParamEndSlotFromFp + 1]: last argument. |
@@ -368,7 +358,6 @@ static void PushArgumentsArray(Assembler* assembler) { |
__ j(POSITIVE, &loop, Assembler::kNearJump); |
} |
- |
// 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 |
@@ -516,7 +505,6 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
// The caller is responsible for emitting the return instruction. |
} |
- |
// RAX: result, must be preserved |
void StubCode::GenerateDeoptimizeLazyFromReturnStub(Assembler* assembler) { |
// Push zap value instead of CODE_REG for lazy deopt. |
@@ -528,7 +516,6 @@ void StubCode::GenerateDeoptimizeLazyFromReturnStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// RAX: exception, must be preserved |
// RDX: stacktrace, must be preserved |
void StubCode::GenerateDeoptimizeLazyFromThrowStub(Assembler* assembler) { |
@@ -541,13 +528,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"); |
@@ -584,7 +569,6 @@ static void GenerateDispatcherCode(Assembler* assembler, |
__ ret(); |
} |
- |
void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
__ EnterStubFrame(); |
// Load the receiver into RAX. The argument count in the arguments |
@@ -623,7 +607,6 @@ void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
// Called for inline allocation of arrays. |
// Input parameters: |
// R10 : Array length as Smi. |
@@ -756,7 +739,6 @@ void StubCode::GenerateAllocateArrayStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Called when invoking Dart code from C++ (VM code). |
// Input parameters: |
// RSP : points to return address. |
@@ -888,7 +870,6 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Called for inline allocation of contexts. |
// Input: |
// R10: number of context variables. |
@@ -1018,7 +999,6 @@ void StubCode::GenerateAllocateContextStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Helper stub to implement Assembler::StoreIntoObject. |
// Input parameters: |
// RDX: Address being stored |
@@ -1083,7 +1063,6 @@ void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Called for inline allocation of objects. |
// Input parameters: |
// RSP + 8 : type arguments object (only if class is parameterized). |
@@ -1211,7 +1190,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. |
@@ -1248,7 +1226,6 @@ void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) { |
__ int3(); |
} |
- |
// Cannot use function object from ICData as it may be the inlined |
// function and not the top-scope function. |
void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) { |
@@ -1270,7 +1247,6 @@ void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) { |
__ incl(FieldAddress(func_reg, Function::usage_counter_offset())); |
} |
- |
// Loads function into 'temp_reg', preserves 'ic_reg'. |
void StubCode::GenerateUsageCounterIncrement(Assembler* assembler, |
Register temp_reg) { |
@@ -1284,7 +1260,6 @@ void StubCode::GenerateUsageCounterIncrement(Assembler* assembler, |
} |
} |
- |
// Note: RBX 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 |
@@ -1355,7 +1330,6 @@ static void EmitFastSmiOp(Assembler* assembler, |
__ ret(); |
} |
- |
// Generate inline cache check for 'num_args'. |
// RBX: Inline cache data object. |
// TOS(0): return address |
@@ -1523,7 +1497,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). |
// RBX: Inline cache data object. |
@@ -1540,7 +1513,6 @@ void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) { |
assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL); |
} |
- |
void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub(assembler, 2, |
@@ -1548,28 +1520,24 @@ void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { |
Token::kILLEGAL); |
} |
- |
void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub( |
assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD); |
} |
- |
void StubCode::GenerateSmiSubInlineCacheStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub( |
assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kSUB); |
} |
- |
void StubCode::GenerateSmiEqualInlineCacheStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub( |
assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ); |
} |
- |
// Use inline cache data array to invoke the target or continue in inline |
// cache miss handler. Stub for 1-argument check (receiver class). |
// RDI: function which counter needs to be incremented. |
@@ -1589,7 +1557,6 @@ void StubCode::GenerateOneArgOptimizedCheckInlineCacheStub( |
Token::kILLEGAL, true /* optimized */); |
} |
- |
void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( |
Assembler* assembler) { |
GenerateOptimizedUsageCounterIncrement(assembler); |
@@ -1598,7 +1565,6 @@ void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( |
Token::kILLEGAL, true /* optimized */); |
} |
- |
// Intermediary stub between a static call and its target. ICData contains |
// the target function and the call count. |
// RBX: ICData |
@@ -1668,21 +1634,18 @@ void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
} |
} |
- |
void StubCode::GenerateOneArgUnoptimizedStaticCallStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub( |
assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL); |
} |
- |
void StubCode::GenerateTwoArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
GenerateUsageCounterIncrement(assembler, RCX); |
GenerateNArgsCheckInlineCacheStub( |
assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL); |
} |
- |
// Stub for compiling a function and jumping to the compiled code. |
// RCX: IC-Data (for methods). |
// R10: Arguments descriptor. |
@@ -1703,7 +1666,6 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) { |
__ jmp(RAX); |
} |
- |
// RBX: Contains an ICData. |
// TOS(0): return address (Dart code). |
void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
@@ -1719,7 +1681,6 @@ void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
__ jmp(RAX); // Jump to original stub. |
} |
- |
// TOS(0): return address (Dart code). |
void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
@@ -1732,7 +1693,6 @@ void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
__ jmp(RAX); // Jump to original stub. |
} |
- |
// Called only from unoptimized code. |
void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) { |
// Check single stepping. |
@@ -1751,7 +1711,6 @@ void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) { |
__ jmp(&done_stepping, Assembler::kNearJump); |
} |
- |
// Used to check class and type arguments. Arguments passed on stack: |
// TOS + 0: return address. |
// TOS + 1: function type arguments (only if n == 4, can be raw_null). |
@@ -1843,7 +1802,6 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) { |
__ ret(); |
} |
- |
// Used to check class and type arguments. Arguments passed on stack: |
// TOS + 0: return address. |
// TOS + 1: raw_null. |
@@ -1855,7 +1813,6 @@ void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) { |
GenerateSubtypeNTestCacheStub(assembler, 1); |
} |
- |
// Used to check class and type arguments. Arguments passed on stack: |
// TOS + 0: return address. |
// TOS + 1: raw_null. |
@@ -1867,7 +1824,6 @@ void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) { |
GenerateSubtypeNTestCacheStub(assembler, 2); |
} |
- |
// Used to check class and type arguments. Arguments passed on stack: |
// TOS + 0: return address. |
// TOS + 1: function type arguments (can be raw_null). |
@@ -1879,7 +1835,6 @@ void StubCode::GenerateSubtype4TestCacheStub(Assembler* assembler) { |
GenerateSubtypeNTestCacheStub(assembler, 4); |
} |
- |
// Return the current stack pointer address, used to stack alignment |
// checks. |
// TOS + 0: return address |
@@ -1889,7 +1844,6 @@ void StubCode::GenerateGetCStackPointerStub(Assembler* assembler) { |
__ ret(); |
} |
- |
// Jump to a frame on the call stack. |
// TOS + 0: return address |
// Arg1: program counter |
@@ -1911,7 +1865,6 @@ void StubCode::GenerateJumpToFrameStub(Assembler* assembler) { |
__ jmp(CallingConventions::kArg1Reg); // Jump to program counter. |
} |
- |
// Run an exception handler. Execution comes from JumpToFrame stub. |
// |
// The arguments are stored in the Thread object. |
@@ -1935,7 +1888,6 @@ void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) { |
__ jmp(CallingConventions::kArg1Reg); // Jump to continuation point. |
} |
- |
// Deoptimize a frame on the call stack before rewinding. |
// The arguments are stored in the Thread object. |
// No result. |
@@ -1954,7 +1906,6 @@ void StubCode::GenerateDeoptForRewindStub(Assembler* assembler) { |
__ int3(); |
} |
- |
// Calls to the runtime to optimize the given function. |
// RDI: function to be reoptimized. |
// R10: argument descriptor (preserved). |
@@ -1974,7 +1925,6 @@ void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) { |
__ int3(); |
} |
- |
// Does identical check (object references are equal or not equal) with special |
// checks for boxed numbers. |
// Left and right are pushed on stack. |
@@ -2031,7 +1981,6 @@ static void GenerateIdenticalWithNumberCheckStub(Assembler* assembler, |
__ Bind(&done); |
} |
- |
// Called only from unoptimized code. All relevant registers have been saved. |
// TOS + 0: return address |
// TOS + 1: right argument. |
@@ -2067,7 +2016,6 @@ void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( |
} |
} |
- |
// Called from optimized code only. |
// TOS + 0: return address |
// TOS + 1: right argument. |
@@ -2084,7 +2032,6 @@ void StubCode::GenerateOptimizedIdenticalWithNumberCheckStub( |
__ ret(); |
} |
- |
// Called from megamorphic calls. |
// RDI: receiver |
// RBX: MegamorphicCache (preserved) |
@@ -2155,7 +2102,6 @@ void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) { |
__ jmp(&cid_loaded); |
} |
- |
// Called from switchable IC calls. |
// RDI: receiver |
// RBX: ICData (preserved) |
@@ -2198,7 +2144,6 @@ void StubCode::GenerateICCallThroughFunctionStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
void StubCode::GenerateICCallThroughCodeStub(Assembler* assembler) { |
Label loop, found, miss; |
__ movq(R13, FieldAddress(RBX, ICData::ic_data_offset())); |
@@ -2235,7 +2180,6 @@ void StubCode::GenerateICCallThroughCodeStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
// RDI: receiver |
// RBX: UnlinkedCall |
void StubCode::GenerateUnlinkedCallStub(Assembler* assembler) { |
@@ -2258,7 +2202,6 @@ void StubCode::GenerateUnlinkedCallStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
// Called from switchable IC calls. |
// RDI: receiver |
// RBX: SingleTargetCache |
@@ -2295,7 +2238,6 @@ void StubCode::GenerateSingleTargetCallStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
// Called from the monomorphic checked entry. |
// RDI: receiver |
void StubCode::GenerateMonomorphicMissStub(Assembler* assembler) { |
@@ -2317,12 +2259,10 @@ void StubCode::GenerateMonomorphicMissStub(Assembler* assembler) { |
__ jmp(RCX); |
} |
- |
void StubCode::GenerateFrameAwaitingMaterializationStub(Assembler* assembler) { |
__ int3(); |
} |
- |
void StubCode::GenerateAsynchronousGapMarkerStub(Assembler* assembler) { |
__ int3(); |
} |