From d6a4d7e6ddb4bf47613c2376516c7abf44f1433b Mon Sep 17 00:00:00 2001 From: "palfia@homejinni.com" Date: Thu, 26 Sep 2013 22:18:02 +0000 Subject: [PATCH] MIPS: Refactoring PropertyCallbackInfo & FunctionCallbackInfo, step 2. Port r16961 (ce471468) Original commit message: This step reorders the FunctionCallbackInfo fields. BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/24857002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16971 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/stub-cache-mips.cc | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc index e0cf1b6363..7177c701af 100644 --- a/src/mips/stub-cache-mips.cc +++ b/src/mips/stub-cache-mips.cc @@ -832,27 +832,25 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm, int argc, bool restore_context) { // ----------- S t a t e ------------- - // -- sp[0] : context - // -- sp[4] : holder (set by CheckPrototypes) - // -- sp[8] : callee JS function - // -- sp[12] : call data - // -- sp[16] : isolate - // -- sp[20] : ReturnValue default value - // -- sp[24] : ReturnValue + // -- sp[0] - sp[24] : FunctionCallbackInfo, incl. + // : holder (set by CheckPrototypes) // -- sp[28] : last JS argument // -- ... // -- sp[(argc + 6) * 4] : first JS argument // -- sp[(argc + 7) * 4] : receiver // ----------------------------------- + typedef FunctionCallbackArguments FCA; + const int kArgs = kFastApiCallArguments; // Save calling context. - __ sw(cp, MemOperand(sp)); + __ sw(cp, + MemOperand(sp, (kArgs - 1 + FCA::kContextSaveIndex) * kPointerSize)); // Get the function and setup the context. Handle function = optimization.constant_function(); __ LoadHeapObject(t1, function); __ lw(cp, FieldMemOperand(t1, JSFunction::kContextOffset)); - __ sw(t1, MemOperand(sp, 2 * kPointerSize)); + __ sw(t1, MemOperand(sp, (kArgs - 1 + FCA::kCalleeIndex) * kPointerSize)); - // Pass the additional arguments. + // Construct the FunctionCallbackInfo. Handle api_call_info = optimization.api_call_info(); Handle call_data(api_call_info->data(), masm->isolate()); if (masm->isolate()->heap()->InNewSpace(*call_data)) { @@ -862,17 +860,20 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm, __ li(t2, call_data); } // Store call data. - __ sw(t2, MemOperand(sp, 3 * kPointerSize)); + __ sw(t2, MemOperand(sp, (kArgs - 1 + FCA::kDataIndex) * kPointerSize)); // Store isolate. __ li(t3, Operand(ExternalReference::isolate_address(masm->isolate()))); - __ sw(t3, MemOperand(sp, 4 * kPointerSize)); + __ sw(t3, MemOperand(sp, (kArgs - 1 + FCA::kIsolateIndex) * kPointerSize)); // Store ReturnValue default and ReturnValue. __ LoadRoot(t1, Heap::kUndefinedValueRootIndex); - __ sw(t1, MemOperand(sp, 5 * kPointerSize)); - __ sw(t1, MemOperand(sp, 6 * kPointerSize)); + __ sw(t1, + MemOperand(sp, (kArgs - 1 + FCA::kReturnValueOffset) * kPointerSize)); + __ sw(t1, + MemOperand(sp, + (kArgs - 1 + FCA::kReturnValueDefaultValueIndex) * kPointerSize)); // Prepare arguments. - __ Addu(a2, sp, Operand((kFastApiCallArguments - 1) * kPointerSize)); + __ Addu(a2, sp, Operand((kArgs - 1) * kPointerSize)); // Allocate the v8::Arguments structure in the arguments' space since // it's not controlled by GC. @@ -896,7 +897,7 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm, // v8::Arguments::is_construct_call = 0 __ sw(zero_reg, MemOperand(a0, 3 * kPointerSize)); - const int kStackUnwindSpace = argc + kFastApiCallArguments + 1; + const int kStackUnwindSpace = argc + kArgs + 1; Address function_address = v8::ToCData
(api_call_info->callback()); ApiFunction fun(function_address); ExternalReference::Type type = ExternalReference::DIRECT_API_CALL; @@ -912,9 +913,9 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm, AllowExternalCallThatCantCauseGC scope(masm); MemOperand context_restore_operand( - fp, 2 * kPointerSize); + fp, (kArgs + 1 + FCA::kContextSaveIndex) * kPointerSize); MemOperand return_value_operand( - fp, (kFastApiCallArguments + 1) * kPointerSize); + fp, (kArgs + 1 + FCA::kReturnValueOffset) * kPointerSize); __ CallApiFunctionAndReturn(ref, function_address, thunk_ref,