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

Side by Side Diff: src/full-codegen/ppc/full-codegen-ppc.cc

Issue 1517243002: [es6] Remove the %DefaultConstructorCallSuper intrinsic. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@GetSuperConstructor
Patch Set: Created 5 years 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
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/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 3696 matching lines...) Expand 10 before | Expand all | Expand 10 after
3707 // Call the target. 3707 // Call the target.
3708 __ mov(r3, Operand(argc)); 3708 __ mov(r3, Operand(argc));
3709 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); 3709 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
3710 // Restore context register. 3710 // Restore context register.
3711 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 3711 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
3712 // Discard the function left on TOS. 3712 // Discard the function left on TOS.
3713 context()->DropAndPlug(1, r3); 3713 context()->DropAndPlug(1, r3);
3714 } 3714 }
3715 3715
3716 3716
3717 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) {
3718 ZoneList<Expression*>* args = expr->arguments();
3719 DCHECK(args->length() == 2);
3720
3721 // Evaluate new.target and super constructor.
3722 VisitForStackValue(args->at(0));
3723 VisitForStackValue(args->at(1));
3724
3725 // Call the construct call builtin that handles allocation and
3726 // constructor invocation.
3727 SetConstructCallPosition(expr);
3728
3729 // Check if the calling frame is an arguments adaptor frame.
3730 Label adaptor_frame, args_set_up, runtime;
3731 __ LoadP(r5, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
3732 __ LoadP(r7, MemOperand(r5, StandardFrameConstants::kContextOffset));
3733
3734 // Load super constructor, new target into r4, r6.
3735 __ LoadP(r4, MemOperand(sp));
3736 __ LoadP(r6, MemOperand(sp, 1 * kPointerSize));
3737
3738 __ CmpSmiLiteral(r7, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
3739 __ beq(&adaptor_frame);
3740
3741 // default constructor has no arguments, so no adaptor frame means no args.
3742 __ li(r3, Operand::Zero());
3743 __ b(&args_set_up);
3744
3745 // Copy arguments from adaptor frame.
3746 {
3747 __ bind(&adaptor_frame);
3748 __ LoadP(r3, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset));
3749 __ SmiUntag(r3);
3750
3751 // Get arguments pointer in r5.
3752 __ ShiftLeftImm(r0, r3, Operand(kPointerSizeLog2));
3753 __ add(r5, r5, r0);
3754 __ addi(r5, r5, Operand(StandardFrameConstants::kCallerSPOffset));
3755
3756 Label loop;
3757 __ mtctr(r3);
3758 __ bind(&loop);
3759 // Pre-decrement in order to skip receiver.
3760 __ LoadPU(r7, MemOperand(r5, -kPointerSize));
3761 __ Push(r7);
3762 __ bdnz(&loop);
3763 }
3764
3765 __ bind(&args_set_up);
3766 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
3767
3768 // Restore context register.
3769 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
3770
3771 context()->DropAndPlug(1, r3);
3772 }
3773
3774
3775 void FullCodeGenerator::EmitHasCachedArrayIndex(CallRuntime* expr) { 3717 void FullCodeGenerator::EmitHasCachedArrayIndex(CallRuntime* expr) {
3776 ZoneList<Expression*>* args = expr->arguments(); 3718 ZoneList<Expression*>* args = expr->arguments();
3777 VisitForAccumulatorValue(args->at(0)); 3719 VisitForAccumulatorValue(args->at(0));
3778 3720
3779 Label materialize_true, materialize_false; 3721 Label materialize_true, materialize_false;
3780 Label* if_true = NULL; 3722 Label* if_true = NULL;
3781 Label* if_false = NULL; 3723 Label* if_false = NULL;
3782 Label* fall_through = NULL; 3724 Label* fall_through = NULL;
3783 context()->PrepareTest(&materialize_true, &materialize_false, &if_true, 3725 context()->PrepareTest(&materialize_true, &materialize_false, &if_true,
3784 &if_false, &fall_through); 3726 &if_false, &fall_through);
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
4899 return ON_STACK_REPLACEMENT; 4841 return ON_STACK_REPLACEMENT;
4900 } 4842 }
4901 4843
4902 DCHECK(interrupt_address == 4844 DCHECK(interrupt_address ==
4903 isolate->builtins()->OsrAfterStackCheck()->entry()); 4845 isolate->builtins()->OsrAfterStackCheck()->entry());
4904 return OSR_AFTER_STACK_CHECK; 4846 return OSR_AFTER_STACK_CHECK;
4905 } 4847 }
4906 } // namespace internal 4848 } // namespace internal
4907 } // namespace v8 4849 } // namespace v8
4908 #endif // V8_TARGET_ARCH_PPC 4850 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/full-codegen/x64/full-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698