Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 4920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4931 } | 4931 } |
| 4932 | 4932 |
| 4933 void FastNewSloppyArgumentsStub::Generate(MacroAssembler* masm) { | 4933 void FastNewSloppyArgumentsStub::Generate(MacroAssembler* masm) { |
| 4934 // ----------- S t a t e ------------- | 4934 // ----------- S t a t e ------------- |
| 4935 // -- r4 : function | 4935 // -- r4 : function |
| 4936 // -- cp : context | 4936 // -- cp : context |
| 4937 // -- fp : frame pointer | 4937 // -- fp : frame pointer |
| 4938 // -- lr : return address | 4938 // -- lr : return address |
| 4939 // ----------------------------------- | 4939 // ----------------------------------- |
| 4940 __ AssertFunction(r4); | 4940 __ AssertFunction(r4); |
| 4941 | 4941 |
|
MTBrandyberry
2016/04/25 15:46:47
Copy over the comment for this new block as well.
| |
| 4942 { | |
| 4943 Label loop, loop_entry; | |
| 4944 __ mr(r10, fp); | |
| 4945 __ b(&loop_entry); | |
| 4946 __ bind(&loop); | |
| 4947 __ LoadP(r10, MemOperand(r10, StandardFrameConstants::kCallerFPOffset)); | |
| 4948 __ bind(&loop_entry); | |
| 4949 __ LoadP(ip, MemOperand(r10, StandardFrameConstants::kFunctionOffset)); | |
| 4950 __ cmp(ip, r4); | |
| 4951 __ bne(&loop); | |
| 4952 } | |
| 4953 | |
| 4954 | |
| 4942 // TODO(bmeurer): Cleanup to match the FastNewStrictArgumentsStub. | 4955 // TODO(bmeurer): Cleanup to match the FastNewStrictArgumentsStub. |
| 4943 __ LoadP(r5, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); | 4956 __ LoadP(r5, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); |
| 4944 __ LoadWordArith( | 4957 __ LoadWordArith( |
| 4945 r5, FieldMemOperand(r5, SharedFunctionInfo::kFormalParameterCountOffset)); | 4958 r5, FieldMemOperand(r5, SharedFunctionInfo::kFormalParameterCountOffset)); |
| 4946 #if V8_TARGET_ARCH_PPC64 | 4959 #if V8_TARGET_ARCH_PPC64 |
| 4947 __ SmiTag(r5); | 4960 __ SmiTag(r5); |
| 4948 #endif | 4961 #endif |
| 4949 __ SmiToPtrArrayOffset(r6, r5); | 4962 __ SmiToPtrArrayOffset(r6, r5); |
| 4950 __ add(r6, fp, r6); | 4963 __ add(r6, r10, r6); |
| 4951 __ addi(r6, r6, Operand(StandardFrameConstants::kCallerSPOffset)); | 4964 __ addi(r6, r6, Operand(StandardFrameConstants::kCallerSPOffset)); |
| 4952 | 4965 |
| 4953 // r4 : function | 4966 // r4 : function |
| 4954 // r5 : number of parameters (tagged) | 4967 // r5 : number of parameters (tagged) |
| 4955 // r6 : parameters pointer | 4968 // r6 : parameters pointer |
| 4969 // r10 : JavaScript frame pointer | |
| 4956 // Registers used over whole function: | 4970 // Registers used over whole function: |
| 4957 // r8 : arguments count (tagged) | 4971 // r8 : arguments count (tagged) |
| 4958 // r9 : mapped parameter count (tagged) | 4972 // r9 : mapped parameter count (tagged) |
| 4959 | 4973 |
| 4960 // Check if the calling frame is an arguments adaptor frame. | 4974 // Check if the calling frame is an arguments adaptor frame. |
| 4961 Label adaptor_frame, try_allocate, runtime; | 4975 Label adaptor_frame, try_allocate, runtime; |
| 4962 __ LoadP(r7, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); | 4976 __ LoadP(r7, MemOperand(r10, StandardFrameConstants::kCallerFPOffset)); |
| 4963 __ LoadP(r3, MemOperand(r7, CommonFrameConstants::kContextOrFrameTypeOffset)); | 4977 __ LoadP(r3, MemOperand(r7, CommonFrameConstants::kContextOrFrameTypeOffset)); |
| 4964 __ CmpSmiLiteral(r3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); | 4978 __ CmpSmiLiteral(r3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); |
| 4965 __ beq(&adaptor_frame); | 4979 __ beq(&adaptor_frame); |
| 4966 | 4980 |
| 4967 // No adaptor, parameter count = argument count. | 4981 // No adaptor, parameter count = argument count. |
| 4968 __ mr(r8, r5); | 4982 __ mr(r8, r5); |
| 4969 __ mr(r9, r5); | 4983 __ mr(r9, r5); |
| 4970 __ b(&try_allocate); | 4984 __ b(&try_allocate); |
| 4971 | 4985 |
| 4972 // We have an adaptor frame. Patch the parameters pointer. | 4986 // We have an adaptor frame. Patch the parameters pointer. |
| (...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5801 fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize); | 5815 fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize); |
| 5802 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, | 5816 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, |
| 5803 kStackUnwindSpace, NULL, return_value_operand, NULL); | 5817 kStackUnwindSpace, NULL, return_value_operand, NULL); |
| 5804 } | 5818 } |
| 5805 | 5819 |
| 5806 #undef __ | 5820 #undef __ |
| 5807 } // namespace internal | 5821 } // namespace internal |
| 5808 } // namespace v8 | 5822 } // namespace v8 |
| 5809 | 5823 |
| 5810 #endif // V8_TARGET_ARCH_PPC | 5824 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |