Format stack layout comments for X64
R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/18607002 Patch from Haitao Feng <haitao.feng@intel.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15481 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
45681dbd76
commit
77c582d253
@ -44,15 +44,15 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm,
|
||||
CFunctionId id,
|
||||
BuiltinExtraArguments extra_args) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : number of arguments excluding receiver
|
||||
// -- rdi : called function (only guaranteed when
|
||||
// extra_args requires it)
|
||||
// -- rsi : context
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : last argument
|
||||
// -- rax : number of arguments excluding receiver
|
||||
// -- rdi : called function (only guaranteed when
|
||||
// extra_args requires it)
|
||||
// -- rsi : context
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : last argument
|
||||
// -- ...
|
||||
// -- rsp[8 * argc] : first argument (argc == rax)
|
||||
// -- rsp[8 * (argc +1)] : receiver
|
||||
// -- rsp[8 * argc] : first argument (argc == rax)
|
||||
// -- rsp[8 * (argc + 1)] : receiver
|
||||
// -----------------------------------
|
||||
|
||||
// Insert extra arguments.
|
||||
@ -475,10 +475,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
||||
|
||||
#ifdef _WIN64
|
||||
// MSVC parameters in:
|
||||
// rcx : entry (ignored)
|
||||
// rdx : function
|
||||
// r8 : receiver
|
||||
// r9 : argc
|
||||
// rcx : entry (ignored)
|
||||
// rdx : function
|
||||
// r8 : receiver
|
||||
// r9 : argc
|
||||
// [rsp+0x20] : argv
|
||||
|
||||
// Clear the context before we push it when entering the internal frame.
|
||||
@ -527,9 +527,9 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
||||
#endif // _WIN64
|
||||
|
||||
// Current stack contents:
|
||||
// [rsp + 2 * kPointerSize ... ]: Internal frame
|
||||
// [rsp + kPointerSize] : function
|
||||
// [rsp] : receiver
|
||||
// [rsp + 2 * kPointerSize ... ] : Internal frame
|
||||
// [rsp + kPointerSize] : function
|
||||
// [rsp] : receiver
|
||||
// Current register contents:
|
||||
// rax : argc
|
||||
// rbx : argv
|
||||
@ -758,12 +758,12 @@ void Builtins::Generate_NotifyOSR(MacroAssembler* masm) {
|
||||
|
||||
void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
|
||||
// Stack Layout:
|
||||
// rsp[0]: Return address
|
||||
// rsp[1]: Argument n
|
||||
// rsp[2]: Argument n-1
|
||||
// rsp[0] : Return address
|
||||
// rsp[8] : Argument n
|
||||
// rsp[16] : Argument n-1
|
||||
// ...
|
||||
// rsp[n]: Argument 1
|
||||
// rsp[n+1]: Receiver (function to call)
|
||||
// rsp[8 * n] : Argument 1
|
||||
// rsp[8 * (n + 1)] : Receiver (function to call)
|
||||
//
|
||||
// rax contains the number of arguments, n, not counting the receiver.
|
||||
//
|
||||
@ -931,18 +931,18 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
|
||||
|
||||
void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
|
||||
// Stack at entry:
|
||||
// rsp: return address
|
||||
// rsp+8: arguments
|
||||
// rsp+16: receiver ("this")
|
||||
// rsp+24: function
|
||||
// rsp : return address
|
||||
// rsp[8] : arguments
|
||||
// rsp[16] : receiver ("this")
|
||||
// rsp[24] : function
|
||||
{
|
||||
FrameScope frame_scope(masm, StackFrame::INTERNAL);
|
||||
// Stack frame:
|
||||
// rbp: Old base pointer
|
||||
// rbp[1]: return address
|
||||
// rbp[2]: function arguments
|
||||
// rbp[3]: receiver
|
||||
// rbp[4]: function
|
||||
// rbp : Old base pointer
|
||||
// rbp[8] : return address
|
||||
// rbp[16] : function arguments
|
||||
// rbp[24] : receiver
|
||||
// rbp[32] : function
|
||||
static const int kArgumentsOffset = 2 * kPointerSize;
|
||||
static const int kReceiverOffset = 3 * kPointerSize;
|
||||
static const int kFunctionOffset = 4 * kPointerSize;
|
||||
@ -1097,7 +1097,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
|
||||
|
||||
void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : argc
|
||||
// -- rax : argc
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : last argument
|
||||
// -----------------------------------
|
||||
@ -1127,7 +1127,7 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
|
||||
|
||||
void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : argc
|
||||
// -- rax : argc
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : last argument
|
||||
// -----------------------------------
|
||||
|
@ -265,7 +265,7 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
|
||||
|
||||
|
||||
void ToNumberStub::Generate(MacroAssembler* masm) {
|
||||
// The ToNumber stub takes one argument in eax.
|
||||
// The ToNumber stub takes one argument in rax.
|
||||
Label check_heap_number, call_builtin;
|
||||
__ SmiTest(rax);
|
||||
__ j(not_zero, &check_heap_number, Label::kNear);
|
||||
@ -344,7 +344,7 @@ void FastNewClosureStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
__ IncrementCounter(counters->fast_new_closure_try_optimized(), 1);
|
||||
|
||||
// rcx holds native context, ebx points to fixed array of 3-element entries
|
||||
// rcx holds native context, rbx points to fixed array of 3-element entries
|
||||
// (native context, optimized code, literals).
|
||||
// The optimized code map must never be empty, so check the first elements.
|
||||
Label install_optimized;
|
||||
@ -463,8 +463,8 @@ void FastNewContextStub::Generate(MacroAssembler* masm) {
|
||||
void FastNewBlockContextStub::Generate(MacroAssembler* masm) {
|
||||
// Stack layout on entry:
|
||||
//
|
||||
// [rsp + (1 * kPointerSize)]: function
|
||||
// [rsp + (2 * kPointerSize)]: serialized scope info
|
||||
// [rsp + (1 * kPointerSize)] : function
|
||||
// [rsp + (2 * kPointerSize)] : serialized scope info
|
||||
|
||||
// Try to allocate the context in new space.
|
||||
Label gc;
|
||||
@ -1182,7 +1182,7 @@ static void BinaryOpStub_GenerateHeapResultAllocation(MacroAssembler* masm,
|
||||
// If the argument in rdx is already an object, we skip the
|
||||
// allocation of a heap number.
|
||||
__ JumpIfNotSmi(rdx, &skip_allocation);
|
||||
// Allocate a heap number for the result. Keep eax and edx intact
|
||||
// Allocate a heap number for the result. Keep rax and rdx intact
|
||||
// for the possible runtime call.
|
||||
__ AllocateHeapNumber(rbx, rcx, alloc_failure);
|
||||
// Now rdx can be overwritten losing one of the arguments as we are
|
||||
@ -1221,16 +1221,16 @@ void BinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
|
||||
void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
|
||||
// TAGGED case:
|
||||
// Input:
|
||||
// rsp[8]: argument (should be number).
|
||||
// rsp[0]: return address.
|
||||
// rsp[8] : argument (should be number).
|
||||
// rsp[0] : return address.
|
||||
// Output:
|
||||
// rax: tagged double result.
|
||||
// UNTAGGED case:
|
||||
// Input::
|
||||
// rsp[0]: return address.
|
||||
// xmm1: untagged double input argument
|
||||
// rsp[0] : return address.
|
||||
// xmm1 : untagged double input argument
|
||||
// Output:
|
||||
// xmm1: untagged double result.
|
||||
// xmm1 : untagged double result.
|
||||
|
||||
Label runtime_call;
|
||||
Label runtime_call_clear_stack;
|
||||
@ -1971,7 +1971,7 @@ void MathPowStub::Generate(MacroAssembler* masm) {
|
||||
__ TailCallRuntime(Runtime::kMath_pow_cfunction, 2, 1);
|
||||
|
||||
// The stub is called from non-optimized code, which expects the result
|
||||
// as heap number in eax.
|
||||
// as heap number in rax.
|
||||
__ bind(&done);
|
||||
__ AllocateHeapNumber(rax, rcx, &call_runtime);
|
||||
__ movsd(FieldOperand(rax, HeapNumber::kValueOffset), double_result);
|
||||
@ -2182,8 +2182,8 @@ void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
|
||||
|
||||
void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) {
|
||||
// Stack layout:
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : number of parameters (tagged)
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : number of parameters (tagged)
|
||||
// rsp[16] : receiver displacement
|
||||
// rsp[24] : function
|
||||
// Registers used over the whole function:
|
||||
@ -2398,10 +2398,10 @@ void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) {
|
||||
|
||||
|
||||
void ArgumentsAccessStub::GenerateNewNonStrictSlow(MacroAssembler* masm) {
|
||||
// esp[0] : return address
|
||||
// esp[8] : number of parameters
|
||||
// esp[16] : receiver displacement
|
||||
// esp[24] : function
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : number of parameters
|
||||
// rsp[16] : receiver displacement
|
||||
// rsp[24] : function
|
||||
|
||||
// Check if the calling frame is an arguments adaptor frame.
|
||||
Label runtime;
|
||||
@ -2424,8 +2424,8 @@ void ArgumentsAccessStub::GenerateNewNonStrictSlow(MacroAssembler* masm) {
|
||||
|
||||
|
||||
void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : number of parameters
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : number of parameters
|
||||
// rsp[16] : receiver displacement
|
||||
// rsp[24] : function
|
||||
|
||||
@ -2532,11 +2532,11 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
#else // V8_INTERPRETED_REGEXP
|
||||
|
||||
// Stack frame on entry.
|
||||
// rsp[0]: return address
|
||||
// rsp[8]: last_match_info (expected JSArray)
|
||||
// rsp[16]: previous index
|
||||
// rsp[24]: subject string
|
||||
// rsp[32]: JSRegExp object
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : last_match_info (expected JSArray)
|
||||
// rsp[16] : previous index
|
||||
// rsp[24] : subject string
|
||||
// rsp[32] : JSRegExp object
|
||||
|
||||
static const int kLastMatchInfoOffset = 1 * kPointerSize;
|
||||
static const int kPreviousIndexOffset = 2 * kPointerSize;
|
||||
@ -4141,14 +4141,14 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
void InstanceofStub::Generate(MacroAssembler* masm) {
|
||||
// Implements "value instanceof function" operator.
|
||||
// Expected input state with no inline cache:
|
||||
// rsp[0] : return address
|
||||
// rsp[1] : function pointer
|
||||
// rsp[2] : value
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : function pointer
|
||||
// rsp[16] : value
|
||||
// Expected input state with an inline one-element cache:
|
||||
// rsp[0] : return address
|
||||
// rsp[1] : offset from return address to location of inline cache
|
||||
// rsp[2] : function pointer
|
||||
// rsp[3] : value
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : offset from return address to location of inline cache
|
||||
// rsp[16] : function pointer
|
||||
// rsp[24] : value
|
||||
// Returns a bitwise zero to indicate that the value
|
||||
// is and instance of the function and anything else to
|
||||
// indicate that the value is not an instance.
|
||||
@ -5090,10 +5090,10 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
Label runtime;
|
||||
|
||||
// Stack frame on entry.
|
||||
// rsp[0]: return address
|
||||
// rsp[8]: to
|
||||
// rsp[16]: from
|
||||
// rsp[24]: string
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : to
|
||||
// rsp[16] : from
|
||||
// rsp[24] : string
|
||||
|
||||
const int kToOffset = 1 * kPointerSize;
|
||||
const int kFromOffset = kToOffset + kPointerSize;
|
||||
@ -5452,9 +5452,9 @@ void StringCompareStub::Generate(MacroAssembler* masm) {
|
||||
Label runtime;
|
||||
|
||||
// Stack frame on entry.
|
||||
// rsp[0]: return address
|
||||
// rsp[8]: right string
|
||||
// rsp[16]: left string
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : right string
|
||||
// rsp[16] : left string
|
||||
|
||||
__ movq(rdx, Operand(rsp, 2 * kPointerSize)); // left
|
||||
__ movq(rax, Operand(rsp, 1 * kPointerSize)); // right
|
||||
@ -5951,9 +5951,9 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
|
||||
// This stub overrides SometimesSetsUpAFrame() to return false. That means
|
||||
// we cannot call anything that could cause a GC from this stub.
|
||||
// Stack frame on entry:
|
||||
// esp[0 * kPointerSize]: return address.
|
||||
// esp[1 * kPointerSize]: key's hash.
|
||||
// esp[2 * kPointerSize]: key.
|
||||
// rsp[0 * kPointerSize] : return address.
|
||||
// rsp[1 * kPointerSize] : key's hash.
|
||||
// rsp[2 * kPointerSize] : key.
|
||||
// Registers:
|
||||
// dictionary_: NameDictionary to probe.
|
||||
// result_: used as scratch.
|
||||
@ -6334,11 +6334,11 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
|
||||
|
||||
void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : element value to store
|
||||
// -- rcx : element index as smi
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : array literal index in function
|
||||
// -- rsp[16]: array literal
|
||||
// -- rax : element value to store
|
||||
// -- rcx : element index as smi
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : array literal index in function
|
||||
// -- rsp[16] : array literal
|
||||
// clobbers rbx, rdx, rdi
|
||||
// -----------------------------------
|
||||
|
||||
@ -6500,8 +6500,8 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
|
||||
// rdx - kind
|
||||
// rax - number of arguments
|
||||
// rdi - constructor?
|
||||
// esp[0] - return address
|
||||
// esp[4] - last argument
|
||||
// rsp[0] - return address
|
||||
// rsp[8] - last argument
|
||||
ASSERT(FAST_SMI_ELEMENTS == 0);
|
||||
ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1);
|
||||
ASSERT(FAST_ELEMENTS == 2);
|
||||
@ -6599,11 +6599,11 @@ void InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(
|
||||
|
||||
void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : argc
|
||||
// -- rbx : type info cell
|
||||
// -- rdi : constructor
|
||||
// -- rax : argc
|
||||
// -- rbx : type info cell
|
||||
// -- rdi : constructor
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[4] : last argument
|
||||
// -- rsp[8] : last argument
|
||||
// -----------------------------------
|
||||
Handle<Object> undefined_sentinel(
|
||||
masm->isolate()->heap()->undefined_value(),
|
||||
@ -6622,7 +6622,7 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
||||
__ CmpObjectType(rcx, MAP_TYPE, rcx);
|
||||
__ Check(equal, "Unexpected initial map for Array function");
|
||||
|
||||
// We should either have undefined in ebx or a valid cell
|
||||
// We should either have undefined in rbx or a valid cell
|
||||
Label okay_here;
|
||||
Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
|
||||
__ Cmp(rbx, undefined_sentinel);
|
||||
@ -6707,11 +6707,11 @@ void InternalArrayConstructorStub::GenerateCase(
|
||||
|
||||
void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- eax : argc
|
||||
// -- ebx : type info cell
|
||||
// -- edi : constructor
|
||||
// -- esp[0] : return address
|
||||
// -- esp[4] : last argument
|
||||
// -- rax : argc
|
||||
// -- rbx : type info cell
|
||||
// -- rdi : constructor
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : last argument
|
||||
// -----------------------------------
|
||||
|
||||
if (FLAG_debug_code) {
|
||||
|
@ -712,10 +712,10 @@ static void KeyedStoreGenerateGenericHelper(
|
||||
void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
||||
StrictModeFlag strict_mode) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
Label slow, slow_with_tagged_index, fast_object, fast_object_grow;
|
||||
Label fast_double, fast_double_grow;
|
||||
@ -870,14 +870,14 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
|
||||
int argc,
|
||||
Label* miss) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rdi : function
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rdi : function
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
__ JumpIfSmi(rdi, miss);
|
||||
// Check that the value is a JavaScript function.
|
||||
@ -894,13 +894,13 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
|
||||
// The generated code falls through if the call should be handled by runtime.
|
||||
void CallICBase::GenerateNormal(MacroAssembler* masm, int argc) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
Label miss;
|
||||
|
||||
@ -924,13 +924,13 @@ void CallICBase::GenerateMiss(MacroAssembler* masm,
|
||||
IC::UtilityId id,
|
||||
Code::ExtraICState extra_state) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
|
||||
Counters* counters = masm->isolate()->counters();
|
||||
@ -996,13 +996,13 @@ void CallIC::GenerateMegamorphic(MacroAssembler* masm,
|
||||
int argc,
|
||||
Code::ExtraICState extra_ic_state) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
|
||||
// Get the receiver of the function from the stack; 1 ~ return address.
|
||||
@ -1014,13 +1014,13 @@ void CallIC::GenerateMegamorphic(MacroAssembler* masm,
|
||||
|
||||
void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
|
||||
// Get the receiver of the function from the stack; 1 ~ return address.
|
||||
@ -1125,13 +1125,13 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
||||
|
||||
void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
|
||||
// Check if the name is really a name.
|
||||
@ -1230,7 +1230,7 @@ void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
Label slow, notin;
|
||||
Operand mapped_location =
|
||||
@ -1253,10 +1253,10 @@ void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
||||
|
||||
void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
Label slow, notin;
|
||||
Operand mapped_location = GenerateMappedArgumentsLookup(
|
||||
@ -1293,13 +1293,13 @@ void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
||||
void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm,
|
||||
int argc) {
|
||||
// ----------- S t a t e -------------
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// rcx : function name
|
||||
// rsp[0] : return address
|
||||
// rsp[8] : argument argc
|
||||
// rsp[16] : argument argc - 1
|
||||
// ...
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// rsp[argc * 8] : argument 1
|
||||
// rsp[(argc + 1) * 8] : argument 0 = receiver
|
||||
// -----------------------------------
|
||||
Label slow, notin;
|
||||
__ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
|
||||
@ -1385,7 +1385,7 @@ void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : receiver
|
||||
// -- rcx : name
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1402,7 +1402,7 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
Counters* counters = masm->isolate()->counters();
|
||||
@ -1426,7 +1426,7 @@ void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1527,10 +1527,10 @@ void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
|
||||
void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
|
||||
StrictModeFlag strict_mode) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1548,10 +1548,10 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
|
||||
|
||||
void StoreIC::GenerateSlow(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1568,10 +1568,10 @@ void StoreIC::GenerateSlow(MacroAssembler* masm) {
|
||||
|
||||
void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1588,10 +1588,10 @@ void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) {
|
||||
|
||||
void KeyedStoreIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
|
||||
__ pop(rbx);
|
||||
@ -1611,9 +1611,9 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
|
||||
|
||||
void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rbx : target map
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rbx : target map
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
// Must return the modified receiver in eax.
|
||||
if (!FLAG_trace_elements_transitions) {
|
||||
@ -1636,9 +1636,9 @@ void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) {
|
||||
void KeyedStoreIC::GenerateTransitionElementsDoubleToObject(
|
||||
MacroAssembler* masm) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rbx : target map
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rbx : target map
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
// Must return the modified receiver in eax.
|
||||
if (!FLAG_trace_elements_transitions) {
|
||||
|
@ -645,8 +645,8 @@ void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
|
||||
int num_arguments,
|
||||
int result_size) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : argument num_arguments - 1
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[8] : argument num_arguments - 1
|
||||
// ...
|
||||
// -- rsp[8 * num_arguments] : argument 0 (receiver)
|
||||
// -----------------------------------
|
||||
|
@ -1252,7 +1252,7 @@ class MacroAssembler: public Assembler {
|
||||
int return_value_offset_from_rbp);
|
||||
|
||||
// Before calling a C-function from generated code, align arguments on stack.
|
||||
// After aligning the frame, arguments must be stored in esp[0], esp[4],
|
||||
// After aligning the frame, arguments must be stored in rsp[0], rsp[8],
|
||||
// etc., not pushed. The argument count assumes all arguments are word sized.
|
||||
// The number of slots reserved for arguments depends on platform. On Windows
|
||||
// stack slots are reserved for the arguments passed in registers. On other
|
||||
|
@ -423,10 +423,11 @@ static void ReserveSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
|
||||
// Undoes the effects of ReserveSpaceForFastApiCall.
|
||||
static void FreeSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rsp[0] : return address.
|
||||
// -- rsp[8] : last fast api call extra argument.
|
||||
// -- rsp[0] : return address.
|
||||
// -- rsp[8] : last fast api call extra argument.
|
||||
// -- ...
|
||||
// -- rsp[kFastApiCallArguments * 8] : first fast api call extra argument.
|
||||
// -- rsp[kFastApiCallArguments * 8] : first fast api call extra
|
||||
// argument.
|
||||
// -- rsp[kFastApiCallArguments * 8 + 8] : last argument in the internal
|
||||
// frame.
|
||||
// -----------------------------------
|
||||
@ -3082,7 +3083,7 @@ void KeyedLoadStubCompiler::GenerateLoadDictionaryElement(
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Slow);
|
||||
|
||||
@ -3090,7 +3091,7 @@ void KeyedLoadStubCompiler::GenerateLoadDictionaryElement(
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
TailCallBuiltin(masm, Builtins::kKeyedLoadIC_MissForceGeneric);
|
||||
}
|
||||
@ -3125,10 +3126,10 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
||||
MacroAssembler* masm,
|
||||
ElementsKind elements_kind) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
Label slow, miss_force_generic;
|
||||
|
||||
@ -3285,10 +3286,10 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
||||
__ bind(&slow);
|
||||
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -- rax : value
|
||||
// -- rcx : key
|
||||
// -- rdx : receiver
|
||||
// -- rsp[0] : return address
|
||||
// -----------------------------------
|
||||
TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user