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

Side by Side Diff: src/ppc/builtins-ppc.cc

Issue 1216073004: PPC: Clean up copy args loop in Generate_JSConstructStubHelper. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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 | « no previous file | 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_PPC 7 #if V8_TARGET_ARCH_PPC
8 8
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 634
635 // Restore the parameters. 635 // Restore the parameters.
636 if (use_new_target) { 636 if (use_new_target) {
637 __ Pop(r4, ip); 637 __ Pop(r4, ip);
638 } else { 638 } else {
639 __ pop(r4); 639 __ pop(r4);
640 } 640 }
641 641
642 // Retrieve smi-tagged arguments count from the stack. 642 // Retrieve smi-tagged arguments count from the stack.
643 __ LoadP(r6, MemOperand(sp)); 643 __ LoadP(r6, MemOperand(sp));
644 __ SmiUntag(r3, r6);
645 644
646 // Push new.target onto the construct frame. This is stored just below the 645 // Push new.target onto the construct frame. This is stored just below the
647 // receiver on the stack. 646 // receiver on the stack.
648 if (use_new_target) { 647 if (use_new_target) {
649 __ Push(ip, r7, r7); 648 __ Push(ip, r7, r7);
650 } else { 649 } else {
651 __ Push(r7, r7); 650 __ Push(r7, r7);
652 } 651 }
653 652
654 // Set up pointer to last argument. 653 // Set up pointer to last argument.
655 __ addi(r5, fp, Operand(StandardFrameConstants::kCallerSPOffset)); 654 __ addi(r5, fp, Operand(StandardFrameConstants::kCallerSPOffset));
656 655
657 // Copy arguments and receiver to the expression stack. 656 // Copy arguments and receiver to the expression stack.
658 // r3: number of arguments
659 // r4: constructor function 657 // r4: constructor function
660 // r5: address of last argument (caller sp) 658 // r5: address of last argument (caller sp)
661 // r6: number of arguments (smi-tagged) 659 // r6: number of arguments (smi-tagged)
662 // sp[0]: receiver 660 // sp[0]: receiver
663 // sp[1]: receiver 661 // sp[1]: receiver
664 // sp[2]: new.target (if used) 662 // sp[2]: new.target (if used)
665 // sp[2/3]: number of arguments (smi-tagged) 663 // sp[2/3]: number of arguments (smi-tagged)
666 Label loop, no_args; 664 Label loop, no_args;
667 __ cmpi(r3, Operand::Zero()); 665 __ SmiUntag(r3, r6, SetRC);
668 __ beq(&no_args); 666 __ beq(&no_args, cr0);
669 __ ShiftLeftImm(ip, r3, Operand(kPointerSizeLog2)); 667 __ ShiftLeftImm(ip, r3, Operand(kPointerSizeLog2));
668 __ sub(sp, sp, ip);
670 __ mtctr(r3); 669 __ mtctr(r3);
671 __ bind(&loop); 670 __ bind(&loop);
672 __ subi(ip, ip, Operand(kPointerSize)); 671 __ subi(ip, ip, Operand(kPointerSize));
673 __ LoadPX(r0, MemOperand(r5, ip)); 672 __ LoadPX(r0, MemOperand(r5, ip));
674 __ push(r0); 673 __ StorePX(r0, MemOperand(sp, ip));
675 __ bdnz(&loop); 674 __ bdnz(&loop);
676 __ bind(&no_args); 675 __ bind(&no_args);
677 676
678 // Call the function. 677 // Call the function.
679 // r3: number of arguments 678 // r3: number of arguments
680 // r4: constructor function 679 // r4: constructor function
681 if (is_api_function) { 680 if (is_api_function) {
682 __ LoadP(cp, FieldMemOperand(r4, JSFunction::kContextOffset)); 681 __ LoadP(cp, FieldMemOperand(r4, JSFunction::kContextOffset));
683 Handle<Code> code = masm->isolate()->builtins()->HandleApiCallConstruct(); 682 Handle<Code> code = masm->isolate()->builtins()->HandleApiCallConstruct();
684 __ Call(code, RelocInfo::CODE_TARGET); 683 __ Call(code, RelocInfo::CODE_TARGET);
(...skipping 1214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1899 __ bkpt(0); 1898 __ bkpt(0);
1900 } 1899 }
1901 } 1900 }
1902 1901
1903 1902
1904 #undef __ 1903 #undef __
1905 } // namespace internal 1904 } // namespace internal
1906 } // namespace v8 1905 } // namespace v8
1907 1906
1908 #endif // V8_TARGET_ARCH_PPC 1907 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698