| 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/base/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 2689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2700 Register jmp_reg = r7; | 2700 Register jmp_reg = r7; |
| 2701 __ LoadP(jmp_reg, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); | 2701 __ LoadP(jmp_reg, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); |
| 2702 __ LoadP(jmp_reg, | 2702 __ LoadP(jmp_reg, |
| 2703 FieldMemOperand(jmp_reg, SharedFunctionInfo::kConstructStubOffset)); | 2703 FieldMemOperand(jmp_reg, SharedFunctionInfo::kConstructStubOffset)); |
| 2704 __ addi(ip, jmp_reg, Operand(Code::kHeaderSize - kHeapObjectTag)); | 2704 __ addi(ip, jmp_reg, Operand(Code::kHeaderSize - kHeapObjectTag)); |
| 2705 __ JumpToJSEntry(ip); | 2705 __ JumpToJSEntry(ip); |
| 2706 | 2706 |
| 2707 // r3: number of arguments | 2707 // r3: number of arguments |
| 2708 // r4: called object | 2708 // r4: called object |
| 2709 // r8: object type | 2709 // r8: object type |
| 2710 Label do_call; | |
| 2711 __ bind(&slow); | 2710 __ bind(&slow); |
| 2712 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu); | 2711 { |
| 2713 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE)); | 2712 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu); |
| 2714 __ bne(&non_function_call); | 2713 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE)); |
| 2715 __ GetBuiltinFunction( | 2714 __ bne(&non_function_call); |
| 2716 r4, Context::CALL_FUNCTION_PROXY_AS_CONSTRUCTOR_BUILTIN_INDEX); | 2715 // TODO(neis): This doesn't match the ES6 spec for [[Construct]] on proxies. |
| 2717 __ b(&do_call); | 2716 __ LoadP(r4, FieldMemOperand(r4, JSFunctionProxy::kConstructTrapOffset)); |
| 2717 __ Jump(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); |
| 2718 | 2718 |
| 2719 __ bind(&non_function_call); | 2719 __ bind(&non_function_call); |
| 2720 __ GetBuiltinFunction( | 2720 { |
| 2721 r4, Context::CALL_NON_FUNCTION_AS_CONSTRUCTOR_BUILTIN_INDEX); | 2721 // Determine the delegate for the target (if any). |
| 2722 __ bind(&do_call); | 2722 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
| 2723 // Set expected number of arguments to zero (not changing r3). | 2723 __ SmiTag(r3); |
| 2724 __ li(r5, Operand::Zero()); | 2724 __ Push(r3, r4); |
| 2725 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), | 2725 __ CallRuntime(Runtime::kGetConstructorDelegate, 1); |
| 2726 RelocInfo::CODE_TARGET); | 2726 __ mr(r4, r3); |
| 2727 __ pop(r3); |
| 2728 __ SmiUntag(r3); |
| 2729 } |
| 2730 // The delegate is always a regular function. |
| 2731 __ AssertFunction(r4); |
| 2732 __ Jump(masm->isolate()->builtins()->CallFunction(), |
| 2733 RelocInfo::CODE_TARGET); |
| 2734 } |
| 2727 } | 2735 } |
| 2728 | 2736 |
| 2729 | 2737 |
| 2730 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) { | 2738 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) { |
| 2731 __ LoadP(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 2739 __ LoadP(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 2732 __ LoadP(vector, | 2740 __ LoadP(vector, |
| 2733 FieldMemOperand(vector, JSFunction::kSharedFunctionInfoOffset)); | 2741 FieldMemOperand(vector, JSFunction::kSharedFunctionInfoOffset)); |
| 2734 __ LoadP(vector, | 2742 __ LoadP(vector, |
| 2735 FieldMemOperand(vector, SharedFunctionInfo::kFeedbackVectorOffset)); | 2743 FieldMemOperand(vector, SharedFunctionInfo::kFeedbackVectorOffset)); |
| 2736 } | 2744 } |
| (...skipping 3111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5848 kStackUnwindSpace, NULL, | 5856 kStackUnwindSpace, NULL, |
| 5849 MemOperand(fp, 6 * kPointerSize), NULL); | 5857 MemOperand(fp, 6 * kPointerSize), NULL); |
| 5850 } | 5858 } |
| 5851 | 5859 |
| 5852 | 5860 |
| 5853 #undef __ | 5861 #undef __ |
| 5854 } // namespace internal | 5862 } // namespace internal |
| 5855 } // namespace v8 | 5863 } // namespace v8 |
| 5856 | 5864 |
| 5857 #endif // V8_TARGET_ARCH_PPC | 5865 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |