Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: src/ppc/code-stubs-ppc.cc

Issue 1929703002: PPC: [api] Expose FunctionCallbackInfo::NewTarget (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: removed extra stack space Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 5617 matching lines...) Expand 10 before | Expand all | Expand 10 after
5628 5628
5629 typedef FunctionCallbackArguments FCA; 5629 typedef FunctionCallbackArguments FCA;
5630 5630
5631 STATIC_ASSERT(FCA::kContextSaveIndex == 6); 5631 STATIC_ASSERT(FCA::kContextSaveIndex == 6);
5632 STATIC_ASSERT(FCA::kCalleeIndex == 5); 5632 STATIC_ASSERT(FCA::kCalleeIndex == 5);
5633 STATIC_ASSERT(FCA::kDataIndex == 4); 5633 STATIC_ASSERT(FCA::kDataIndex == 4);
5634 STATIC_ASSERT(FCA::kReturnValueOffset == 3); 5634 STATIC_ASSERT(FCA::kReturnValueOffset == 3);
5635 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2); 5635 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2);
5636 STATIC_ASSERT(FCA::kIsolateIndex == 1); 5636 STATIC_ASSERT(FCA::kIsolateIndex == 1);
5637 STATIC_ASSERT(FCA::kHolderIndex == 0); 5637 STATIC_ASSERT(FCA::kHolderIndex == 0);
5638 STATIC_ASSERT(FCA::kArgsLength == 7); 5638 STATIC_ASSERT(FCA::kNewTargetIndex == 7);
5639 STATIC_ASSERT(FCA::kArgsLength == 8);
5640
5641 // new target
5642 __ PushRoot(Heap::kUndefinedValueRootIndex);
5639 5643
5640 // context save 5644 // context save
5641 __ push(context); 5645 __ push(context);
5642 if (!is_lazy()) { 5646 if (!is_lazy()) {
5643 // load context from callee 5647 // load context from callee
5644 __ LoadP(context, FieldMemOperand(callee, JSFunction::kContextOffset)); 5648 __ LoadP(context, FieldMemOperand(callee, JSFunction::kContextOffset));
5645 } 5649 }
5646 5650
5647 // callee 5651 // callee
5648 __ push(callee); 5652 __ push(callee);
(...skipping 15 matching lines...) Expand all
5664 // holder 5668 // holder
5665 __ push(holder); 5669 __ push(holder);
5666 5670
5667 // Prepare arguments. 5671 // Prepare arguments.
5668 __ mr(scratch, sp); 5672 __ mr(scratch, sp);
5669 5673
5670 // Allocate the v8::Arguments structure in the arguments' space since 5674 // Allocate the v8::Arguments structure in the arguments' space since
5671 // it's not controlled by GC. 5675 // it's not controlled by GC.
5672 // PPC LINUX ABI: 5676 // PPC LINUX ABI:
5673 // 5677 //
5674 // Create 5 extra slots on stack: 5678 // Create 4 extra slots on stack:
5675 // [0] space for DirectCEntryStub's LR save 5679 // [0] space for DirectCEntryStub's LR save
5676 // [1-4] FunctionCallbackInfo 5680 // [1-3] FunctionCallbackInfo
5677 const int kApiStackSpace = 5; 5681 const int kApiStackSpace = 4;
5678 const int kFunctionCallbackInfoOffset = 5682 const int kFunctionCallbackInfoOffset =
5679 (kStackFrameExtraParamSlot + 1) * kPointerSize; 5683 (kStackFrameExtraParamSlot + 1) * kPointerSize;
5680 5684
5681 FrameScope frame_scope(masm, StackFrame::MANUAL); 5685 FrameScope frame_scope(masm, StackFrame::MANUAL);
5682 __ EnterExitFrame(false, kApiStackSpace); 5686 __ EnterExitFrame(false, kApiStackSpace);
5683 5687
5684 DCHECK(!api_function_address.is(r3) && !scratch.is(r3)); 5688 DCHECK(!api_function_address.is(r3) && !scratch.is(r3));
5685 // r3 = FunctionCallbackInfo& 5689 // r3 = FunctionCallbackInfo&
5686 // Arguments is after the return address. 5690 // Arguments is after the return address.
5687 __ addi(r3, sp, Operand(kFunctionCallbackInfoOffset)); 5691 __ addi(r3, sp, Operand(kFunctionCallbackInfoOffset));
5688 // FunctionCallbackInfo::implicit_args_ 5692 // FunctionCallbackInfo::implicit_args_
5689 __ StoreP(scratch, MemOperand(r3, 0 * kPointerSize)); 5693 __ StoreP(scratch, MemOperand(r3, 0 * kPointerSize));
5690 // FunctionCallbackInfo::values_ 5694 // FunctionCallbackInfo::values_
5691 __ addi(ip, scratch, Operand((FCA::kArgsLength - 1 + argc()) * kPointerSize)); 5695 __ addi(ip, scratch, Operand((FCA::kArgsLength - 1 + argc()) * kPointerSize));
5692 __ StoreP(ip, MemOperand(r3, 1 * kPointerSize)); 5696 __ StoreP(ip, MemOperand(r3, 1 * kPointerSize));
5693 // FunctionCallbackInfo::length_ = argc 5697 // FunctionCallbackInfo::length_ = argc
5694 __ li(ip, Operand(argc())); 5698 __ li(ip, Operand(argc()));
5695 __ stw(ip, MemOperand(r3, 2 * kPointerSize)); 5699 __ stw(ip, MemOperand(r3, 2 * kPointerSize));
5696 // FunctionCallbackInfo::is_construct_call_ = 0
5697 __ li(ip, Operand::Zero());
5698 __ stw(ip, MemOperand(r3, 2 * kPointerSize + kIntSize));
5699 5700
5700 ExternalReference thunk_ref = 5701 ExternalReference thunk_ref =
5701 ExternalReference::invoke_function_callback(masm->isolate()); 5702 ExternalReference::invoke_function_callback(masm->isolate());
5702 5703
5703 AllowExternalCallThatCantCauseGC scope(masm); 5704 AllowExternalCallThatCantCauseGC scope(masm);
5704 MemOperand context_restore_operand( 5705 MemOperand context_restore_operand(
5705 fp, (2 + FCA::kContextSaveIndex) * kPointerSize); 5706 fp, (2 + FCA::kContextSaveIndex) * kPointerSize);
5706 // Stores return the first js argument 5707 // Stores return the first js argument
5707 int return_value_offset = 0; 5708 int return_value_offset = 0;
5708 if (is_store()) { 5709 if (is_store()) {
5709 return_value_offset = 2 + FCA::kArgsLength; 5710 return_value_offset = 2 + FCA::kArgsLength;
5710 } else { 5711 } else {
5711 return_value_offset = 2 + FCA::kReturnValueOffset; 5712 return_value_offset = 2 + FCA::kReturnValueOffset;
5712 } 5713 }
5713 MemOperand return_value_operand(fp, return_value_offset * kPointerSize); 5714 MemOperand return_value_operand(fp, return_value_offset * kPointerSize);
5714 int stack_space = 0; 5715 int stack_space = 0;
5715 MemOperand is_construct_call_operand = 5716 MemOperand length_operand =
5716 MemOperand(sp, kFunctionCallbackInfoOffset + 2 * kPointerSize + kIntSize); 5717 MemOperand(sp, kFunctionCallbackInfoOffset + 2 * kPointerSize);
5717 MemOperand* stack_space_operand = &is_construct_call_operand; 5718 MemOperand* stack_space_operand = &length_operand;
5718 stack_space = argc() + FCA::kArgsLength + 1; 5719 stack_space = argc() + FCA::kArgsLength + 1;
5719 stack_space_operand = NULL; 5720 stack_space_operand = NULL;
5720 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, stack_space, 5721 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, stack_space,
5721 stack_space_operand, return_value_operand, 5722 stack_space_operand, return_value_operand,
5722 &context_restore_operand); 5723 &context_restore_operand);
5723 } 5724 }
5724 5725
5725 5726
5726 void CallApiGetterStub::Generate(MacroAssembler* masm) { 5727 void CallApiGetterStub::Generate(MacroAssembler* masm) {
5727 int arg0Slot = 0; 5728 int arg0Slot = 0;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
5813 fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize); 5814 fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize);
5814 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5815 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5815 kStackUnwindSpace, NULL, return_value_operand, NULL); 5816 kStackUnwindSpace, NULL, return_value_operand, NULL);
5816 } 5817 }
5817 5818
5818 #undef __ 5819 #undef __
5819 } // namespace internal 5820 } // namespace internal
5820 } // namespace v8 5821 } // namespace v8
5821 5822
5822 #endif // V8_TARGET_ARCH_PPC 5823 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698