| 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_S390 | 5 #if V8_TARGET_ARCH_S390 |
| 6 | 6 |
| 7 #include "src/codegen.h" | 7 #include "src/codegen.h" |
| 8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
| 9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
| 10 #include "src/full-codegen/full-codegen.h" | 10 #include "src/full-codegen/full-codegen.h" |
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 Label ok; | 544 Label ok; |
| 545 __ CmpLogicalP(sp, RootMemOperand(Heap::kStackLimitRootIndex)); | 545 __ CmpLogicalP(sp, RootMemOperand(Heap::kStackLimitRootIndex)); |
| 546 __ bge(&ok, Label::kNear); | 546 __ bge(&ok, Label::kNear); |
| 547 | 547 |
| 548 GenerateTailCallToReturnedCode(masm, Runtime::kTryInstallOptimizedCode); | 548 GenerateTailCallToReturnedCode(masm, Runtime::kTryInstallOptimizedCode); |
| 549 | 549 |
| 550 __ bind(&ok); | 550 __ bind(&ok); |
| 551 GenerateTailCallToSharedCode(masm); | 551 GenerateTailCallToSharedCode(masm); |
| 552 } | 552 } |
| 553 | 553 |
| 554 static void Generate_JSConstructStubHelper(MacroAssembler* masm, | 554 namespace { |
| 555 bool is_api_function, | 555 |
| 556 bool create_implicit_receiver, | 556 void Generate_JSConstructStubHelper(MacroAssembler* masm, bool is_api_function, |
| 557 bool check_derived_construct) { | 557 bool create_implicit_receiver, |
| 558 bool check_derived_construct) { |
| 558 // ----------- S t a t e ------------- | 559 // ----------- S t a t e ------------- |
| 559 // -- r2 : number of arguments | 560 // -- r2 : number of arguments |
| 560 // -- r3 : constructor function | 561 // -- r3 : constructor function |
| 561 // -- r4 : allocation site or undefined | |
| 562 // -- r5 : new target | 562 // -- r5 : new target |
| 563 // -- cp : context | 563 // -- cp : context |
| 564 // -- lr : return address | 564 // -- lr : return address |
| 565 // -- sp[...]: constructor arguments | 565 // -- sp[...]: constructor arguments |
| 566 // ----------------------------------- | 566 // ----------------------------------- |
| 567 | 567 |
| 568 Isolate* isolate = masm->isolate(); | 568 Isolate* isolate = masm->isolate(); |
| 569 | 569 |
| 570 // Enter a construct frame. | 570 // Enter a construct frame. |
| 571 { | 571 { |
| 572 FrameAndConstantPoolScope scope(masm, StackFrame::CONSTRUCT); | 572 FrameAndConstantPoolScope scope(masm, StackFrame::CONSTRUCT); |
| 573 | 573 |
| 574 // Preserve the incoming parameters on the stack. | 574 // Preserve the incoming parameters on the stack. |
| 575 __ AssertUndefinedOrAllocationSite(r4, r6); | |
| 576 | 575 |
| 577 if (!create_implicit_receiver) { | 576 if (!create_implicit_receiver) { |
| 578 __ SmiTag(r6, r2); | 577 __ SmiTag(r6, r2); |
| 579 __ LoadAndTestP(r6, r6); | 578 __ LoadAndTestP(r6, r6); |
| 580 __ Push(cp, r4, r6); | 579 __ Push(cp, r6); |
| 581 __ PushRoot(Heap::kTheHoleValueRootIndex); | 580 __ PushRoot(Heap::kTheHoleValueRootIndex); |
| 582 } else { | 581 } else { |
| 583 __ SmiTag(r2); | 582 __ SmiTag(r2); |
| 584 __ Push(cp, r4, r2); | 583 __ Push(cp, r2); |
| 585 | 584 |
| 586 // Allocate the new receiver object. | 585 // Allocate the new receiver object. |
| 587 __ Push(r3, r5); | 586 __ Push(r3, r5); |
| 588 FastNewObjectStub stub(masm->isolate()); | 587 FastNewObjectStub stub(masm->isolate()); |
| 589 __ CallStub(&stub); | 588 __ CallStub(&stub); |
| 590 __ LoadRR(r6, r2); | 589 __ LoadRR(r6, r2); |
| 591 __ Pop(r3, r5); | 590 __ Pop(r3, r5); |
| 592 | 591 |
| 593 // ----------- S t a t e ------------- | 592 // ----------- S t a t e ------------- |
| 594 // -- r3: constructor function | 593 // -- r3: constructor function |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 | 702 |
| 704 __ SmiToPtrArrayOffset(r3, r3); | 703 __ SmiToPtrArrayOffset(r3, r3); |
| 705 __ AddP(sp, sp, r3); | 704 __ AddP(sp, sp, r3); |
| 706 __ AddP(sp, sp, Operand(kPointerSize)); | 705 __ AddP(sp, sp, Operand(kPointerSize)); |
| 707 if (create_implicit_receiver) { | 706 if (create_implicit_receiver) { |
| 708 __ IncrementCounter(isolate->counters()->constructed_objects(), 1, r3, r4); | 707 __ IncrementCounter(isolate->counters()->constructed_objects(), 1, r3, r4); |
| 709 } | 708 } |
| 710 __ Ret(); | 709 __ Ret(); |
| 711 } | 710 } |
| 712 | 711 |
| 712 } // namespace |
| 713 |
| 713 void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { | 714 void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { |
| 714 Generate_JSConstructStubHelper(masm, false, true, false); | 715 Generate_JSConstructStubHelper(masm, false, true, false); |
| 715 } | 716 } |
| 716 | 717 |
| 717 void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { | 718 void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) { |
| 718 Generate_JSConstructStubHelper(masm, true, false, false); | 719 Generate_JSConstructStubHelper(masm, true, false, false); |
| 719 } | 720 } |
| 720 | 721 |
| 721 void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { | 722 void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { |
| 722 Generate_JSConstructStubHelper(masm, false, false, false); | 723 Generate_JSConstructStubHelper(masm, false, false, false); |
| (...skipping 2283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3006 __ bkpt(0); | 3007 __ bkpt(0); |
| 3007 } | 3008 } |
| 3008 } | 3009 } |
| 3009 | 3010 |
| 3010 #undef __ | 3011 #undef __ |
| 3011 | 3012 |
| 3012 } // namespace internal | 3013 } // namespace internal |
| 3013 } // namespace v8 | 3014 } // namespace v8 |
| 3014 | 3015 |
| 3015 #endif // V8_TARGET_ARCH_S390 | 3016 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |