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

Side by Side Diff: src/arm64/macro-assembler-arm64-inl.h

Issue 2622643005: ARM64: Add NEON support (Closed)
Patch Set: Created 3 years, 11 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_ 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_ 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
7 7
8 #include <ctype.h> 8 #include <ctype.h>
9 9
10 #include "src/globals.h" 10 #include "src/globals.h"
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 547
548 void MacroAssembler::Extr(const Register& rd, 548 void MacroAssembler::Extr(const Register& rd,
549 const Register& rn, 549 const Register& rn,
550 const Register& rm, 550 const Register& rm,
551 unsigned lsb) { 551 unsigned lsb) {
552 DCHECK(allow_macro_instructions_); 552 DCHECK(allow_macro_instructions_);
553 DCHECK(!rd.IsZero()); 553 DCHECK(!rd.IsZero());
554 extr(rd, rn, rm, lsb); 554 extr(rd, rn, rm, lsb);
555 } 555 }
556 556
557 557 void MacroAssembler::Fabs(const VRegister& fd, const VRegister& fn) {
558 void MacroAssembler::Fabs(const FPRegister& fd, const FPRegister& fn) {
559 DCHECK(allow_macro_instructions_); 558 DCHECK(allow_macro_instructions_);
560 fabs(fd, fn); 559 fabs(fd, fn);
561 } 560 }
562 561
563 562 void MacroAssembler::Fadd(const VRegister& fd, const VRegister& fn,
564 void MacroAssembler::Fadd(const FPRegister& fd, 563 const VRegister& fm) {
565 const FPRegister& fn,
566 const FPRegister& fm) {
567 DCHECK(allow_macro_instructions_); 564 DCHECK(allow_macro_instructions_);
568 fadd(fd, fn, fm); 565 fadd(fd, fn, fm);
569 } 566 }
570 567
571 568 void MacroAssembler::Fccmp(const VRegister& fn, const VRegister& fm,
572 void MacroAssembler::Fccmp(const FPRegister& fn, 569 StatusFlags nzcv, Condition cond) {
573 const FPRegister& fm,
574 StatusFlags nzcv,
575 Condition cond) {
576 DCHECK(allow_macro_instructions_); 570 DCHECK(allow_macro_instructions_);
577 DCHECK((cond != al) && (cond != nv)); 571 DCHECK((cond != al) && (cond != nv));
578 fccmp(fn, fm, nzcv, cond); 572 fccmp(fn, fm, nzcv, cond);
579 } 573 }
580 574
581 575 void MacroAssembler::Fcmp(const VRegister& fn, const VRegister& fm) {
582 void MacroAssembler::Fcmp(const FPRegister& fn, const FPRegister& fm) {
583 DCHECK(allow_macro_instructions_); 576 DCHECK(allow_macro_instructions_);
584 fcmp(fn, fm); 577 fcmp(fn, fm);
585 } 578 }
586 579
587 580 void MacroAssembler::Fcmp(const VRegister& fn, double value) {
588 void MacroAssembler::Fcmp(const FPRegister& fn, double value) {
589 DCHECK(allow_macro_instructions_); 581 DCHECK(allow_macro_instructions_);
590 if (value != 0.0) { 582 if (value != 0.0) {
591 UseScratchRegisterScope temps(this); 583 UseScratchRegisterScope temps(this);
592 FPRegister tmp = temps.AcquireSameSizeAs(fn); 584 VRegister tmp = temps.AcquireSameSizeAs(fn);
593 Fmov(tmp, value); 585 Fmov(tmp, value);
594 fcmp(fn, tmp); 586 fcmp(fn, tmp);
595 } else { 587 } else {
596 fcmp(fn, value); 588 fcmp(fn, value);
597 } 589 }
598 } 590 }
599 591
600 592 void MacroAssembler::Fcsel(const VRegister& fd, const VRegister& fn,
601 void MacroAssembler::Fcsel(const FPRegister& fd, 593 const VRegister& fm, Condition cond) {
602 const FPRegister& fn,
603 const FPRegister& fm,
604 Condition cond) {
605 DCHECK(allow_macro_instructions_); 594 DCHECK(allow_macro_instructions_);
606 DCHECK((cond != al) && (cond != nv)); 595 DCHECK((cond != al) && (cond != nv));
607 fcsel(fd, fn, fm, cond); 596 fcsel(fd, fn, fm, cond);
608 } 597 }
609 598
610 599 void MacroAssembler::Fcvt(const VRegister& fd, const VRegister& fn) {
611 void MacroAssembler::Fcvt(const FPRegister& fd, const FPRegister& fn) {
612 DCHECK(allow_macro_instructions_); 600 DCHECK(allow_macro_instructions_);
613 fcvt(fd, fn); 601 fcvt(fd, fn);
614 } 602 }
615 603
616 604 void MacroAssembler::Fcvtas(const Register& rd, const VRegister& fn) {
617 void MacroAssembler::Fcvtas(const Register& rd, const FPRegister& fn) {
618 DCHECK(allow_macro_instructions_); 605 DCHECK(allow_macro_instructions_);
619 DCHECK(!rd.IsZero()); 606 DCHECK(!rd.IsZero());
620 fcvtas(rd, fn); 607 fcvtas(rd, fn);
621 } 608 }
622 609
623 610 void MacroAssembler::Fcvtau(const Register& rd, const VRegister& fn) {
624 void MacroAssembler::Fcvtau(const Register& rd, const FPRegister& fn) {
625 DCHECK(allow_macro_instructions_); 611 DCHECK(allow_macro_instructions_);
626 DCHECK(!rd.IsZero()); 612 DCHECK(!rd.IsZero());
627 fcvtau(rd, fn); 613 fcvtau(rd, fn);
628 } 614 }
629 615
630 616 void MacroAssembler::Fcvtms(const Register& rd, const VRegister& fn) {
631 void MacroAssembler::Fcvtms(const Register& rd, const FPRegister& fn) {
632 DCHECK(allow_macro_instructions_); 617 DCHECK(allow_macro_instructions_);
633 DCHECK(!rd.IsZero()); 618 DCHECK(!rd.IsZero());
634 fcvtms(rd, fn); 619 fcvtms(rd, fn);
635 } 620 }
636 621
637 622 void MacroAssembler::Fcvtmu(const Register& rd, const VRegister& fn) {
638 void MacroAssembler::Fcvtmu(const Register& rd, const FPRegister& fn) {
639 DCHECK(allow_macro_instructions_); 623 DCHECK(allow_macro_instructions_);
640 DCHECK(!rd.IsZero()); 624 DCHECK(!rd.IsZero());
641 fcvtmu(rd, fn); 625 fcvtmu(rd, fn);
642 } 626 }
643 627
644 628 void MacroAssembler::Fcvtns(const Register& rd, const VRegister& fn) {
645 void MacroAssembler::Fcvtns(const Register& rd, const FPRegister& fn) {
646 DCHECK(allow_macro_instructions_); 629 DCHECK(allow_macro_instructions_);
647 DCHECK(!rd.IsZero()); 630 DCHECK(!rd.IsZero());
648 fcvtns(rd, fn); 631 fcvtns(rd, fn);
649 } 632 }
650 633
651 634 void MacroAssembler::Fcvtnu(const Register& rd, const VRegister& fn) {
652 void MacroAssembler::Fcvtnu(const Register& rd, const FPRegister& fn) {
653 DCHECK(allow_macro_instructions_); 635 DCHECK(allow_macro_instructions_);
654 DCHECK(!rd.IsZero()); 636 DCHECK(!rd.IsZero());
655 fcvtnu(rd, fn); 637 fcvtnu(rd, fn);
656 } 638 }
657 639
658 640 void MacroAssembler::Fcvtzs(const Register& rd, const VRegister& fn) {
659 void MacroAssembler::Fcvtzs(const Register& rd, const FPRegister& fn) {
660 DCHECK(allow_macro_instructions_); 641 DCHECK(allow_macro_instructions_);
661 DCHECK(!rd.IsZero()); 642 DCHECK(!rd.IsZero());
662 fcvtzs(rd, fn); 643 fcvtzs(rd, fn);
663 } 644 }
664 void MacroAssembler::Fcvtzu(const Register& rd, const FPRegister& fn) { 645 void MacroAssembler::Fcvtzu(const Register& rd, const VRegister& fn) {
665 DCHECK(allow_macro_instructions_); 646 DCHECK(allow_macro_instructions_);
666 DCHECK(!rd.IsZero()); 647 DCHECK(!rd.IsZero());
667 fcvtzu(rd, fn); 648 fcvtzu(rd, fn);
668 } 649 }
669 650
670 651 void MacroAssembler::Fdiv(const VRegister& fd, const VRegister& fn,
671 void MacroAssembler::Fdiv(const FPRegister& fd, 652 const VRegister& fm) {
672 const FPRegister& fn,
673 const FPRegister& fm) {
674 DCHECK(allow_macro_instructions_); 653 DCHECK(allow_macro_instructions_);
675 fdiv(fd, fn, fm); 654 fdiv(fd, fn, fm);
676 } 655 }
677 656
678 657 void MacroAssembler::Fmadd(const VRegister& fd, const VRegister& fn,
679 void MacroAssembler::Fmadd(const FPRegister& fd, 658 const VRegister& fm, const VRegister& fa) {
680 const FPRegister& fn,
681 const FPRegister& fm,
682 const FPRegister& fa) {
683 DCHECK(allow_macro_instructions_); 659 DCHECK(allow_macro_instructions_);
684 fmadd(fd, fn, fm, fa); 660 fmadd(fd, fn, fm, fa);
685 } 661 }
686 662
687 663 void MacroAssembler::Fmax(const VRegister& fd, const VRegister& fn,
688 void MacroAssembler::Fmax(const FPRegister& fd, 664 const VRegister& fm) {
689 const FPRegister& fn,
690 const FPRegister& fm) {
691 DCHECK(allow_macro_instructions_); 665 DCHECK(allow_macro_instructions_);
692 fmax(fd, fn, fm); 666 fmax(fd, fn, fm);
693 } 667 }
694 668
695 669 void MacroAssembler::Fmaxnm(const VRegister& fd, const VRegister& fn,
696 void MacroAssembler::Fmaxnm(const FPRegister& fd, 670 const VRegister& fm) {
697 const FPRegister& fn,
698 const FPRegister& fm) {
699 DCHECK(allow_macro_instructions_); 671 DCHECK(allow_macro_instructions_);
700 fmaxnm(fd, fn, fm); 672 fmaxnm(fd, fn, fm);
701 } 673 }
702 674
703 675 void MacroAssembler::Fmin(const VRegister& fd, const VRegister& fn,
704 void MacroAssembler::Fmin(const FPRegister& fd, 676 const VRegister& fm) {
705 const FPRegister& fn,
706 const FPRegister& fm) {
707 DCHECK(allow_macro_instructions_); 677 DCHECK(allow_macro_instructions_);
708 fmin(fd, fn, fm); 678 fmin(fd, fn, fm);
709 } 679 }
710 680
711 681 void MacroAssembler::Fminnm(const VRegister& fd, const VRegister& fn,
712 void MacroAssembler::Fminnm(const FPRegister& fd, 682 const VRegister& fm) {
713 const FPRegister& fn,
714 const FPRegister& fm) {
715 DCHECK(allow_macro_instructions_); 683 DCHECK(allow_macro_instructions_);
716 fminnm(fd, fn, fm); 684 fminnm(fd, fn, fm);
717 } 685 }
718 686
719 687 void MacroAssembler::Fmov(VRegister fd, VRegister fn) {
720 void MacroAssembler::Fmov(FPRegister fd, FPRegister fn) {
721 DCHECK(allow_macro_instructions_); 688 DCHECK(allow_macro_instructions_);
722 // Only emit an instruction if fd and fn are different, and they are both D 689 // Only emit an instruction if fd and fn are different, and they are both D
723 // registers. fmov(s0, s0) is not a no-op because it clears the top word of 690 // registers. fmov(s0, s0) is not a no-op because it clears the top word of
724 // d0. Technically, fmov(d0, d0) is not a no-op either because it clears the 691 // d0. Technically, fmov(d0, d0) is not a no-op either because it clears the
725 // top of q0, but FPRegister does not currently support Q registers. 692 // top of q0, but VRegister does not currently support Q registers.
726 if (!fd.Is(fn) || !fd.Is64Bits()) { 693 if (!fd.Is(fn) || !fd.Is64Bits()) {
727 fmov(fd, fn); 694 fmov(fd, fn);
728 } 695 }
729 } 696 }
730 697
731 698 void MacroAssembler::Fmov(VRegister fd, Register rn) {
732 void MacroAssembler::Fmov(FPRegister fd, Register rn) {
733 DCHECK(allow_macro_instructions_); 699 DCHECK(allow_macro_instructions_);
734 fmov(fd, rn); 700 fmov(fd, rn);
735 } 701 }
736 702
737 703 void MacroAssembler::Fmov(VRegister vd, double imm) {
738 void MacroAssembler::Fmov(FPRegister fd, double imm) { 704 DCHECK(allow_macro_instructions_);
739 DCHECK(allow_macro_instructions_); 705
740 if (fd.Is32Bits()) { 706 if (vd.Is1S() || vd.Is2S() || vd.Is4S()) {
741 Fmov(fd, static_cast<float>(imm)); 707 Fmov(vd, static_cast<float>(imm));
742 return; 708 return;
743 } 709 }
744 710
745 DCHECK(fd.Is64Bits()); 711 DCHECK(vd.Is1D() || vd.Is2D());
746 if (IsImmFP64(imm)) { 712 if (IsImmFP64(imm)) {
747 fmov(fd, imm); 713 fmov(vd, imm);
748 } else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
749 fmov(fd, xzr);
750 } else { 714 } else {
751 Ldr(fd, imm); 715 uint64_t bits = bit_cast<uint64_t>(imm);
752 } 716 if (vd.IsScalar()) {
753 } 717 if (bits == 0) {
754 718 fmov(vd, xzr);
755 719 } else {
756 void MacroAssembler::Fmov(FPRegister fd, float imm) { 720 Ldr(vd, imm);
757 DCHECK(allow_macro_instructions_); 721 }
758 if (fd.Is64Bits()) { 722 } else {
759 Fmov(fd, static_cast<double>(imm)); 723 // TODO(all): consider NEON support for load literal.
724 Movi(vd, bits);
725 }
726 }
727 }
728
729 void MacroAssembler::Fmov(VRegister vd, float imm) {
730 DCHECK(allow_macro_instructions_);
731 if (vd.Is1D() || vd.Is2D()) {
732 Fmov(vd, static_cast<double>(imm));
760 return; 733 return;
761 } 734 }
762 735
763 DCHECK(fd.Is32Bits()); 736 DCHECK(vd.Is1S() || vd.Is2S() || vd.Is4S());
764 if (IsImmFP32(imm)) { 737 if (IsImmFP32(imm)) {
765 fmov(fd, imm); 738 fmov(vd, imm);
766 } else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
767 fmov(fd, wzr);
768 } else { 739 } else {
769 UseScratchRegisterScope temps(this); 740 uint32_t bits = bit_cast<uint32_t>(imm);
770 Register tmp = temps.AcquireW(); 741 if (vd.IsScalar()) {
771 // TODO(all): Use Assembler::ldr(const FPRegister& ft, float imm). 742 if (bits == 0) {
772 Mov(tmp, float_to_rawbits(imm)); 743 fmov(vd, wzr);
773 Fmov(fd, tmp); 744 } else {
774 } 745 UseScratchRegisterScope temps(this);
775 } 746 Register tmp = temps.AcquireW();
776 747 // TODO(all): Use Assembler::ldr(const VRegister& ft, float imm).
777 748 Mov(tmp, bit_cast<uint32_t>(imm));
778 void MacroAssembler::Fmov(Register rd, FPRegister fn) { 749 Fmov(vd, tmp);
750 }
751 } else {
752 // TODO(all): consider NEON support for load literal.
753 Movi(vd, bits);
754 }
755 }
756 }
757
758 void MacroAssembler::Fmov(Register rd, VRegister fn) {
779 DCHECK(allow_macro_instructions_); 759 DCHECK(allow_macro_instructions_);
780 DCHECK(!rd.IsZero()); 760 DCHECK(!rd.IsZero());
781 fmov(rd, fn); 761 fmov(rd, fn);
782 } 762 }
783 763
784 764 void MacroAssembler::Fmsub(const VRegister& fd, const VRegister& fn,
785 void MacroAssembler::Fmsub(const FPRegister& fd, 765 const VRegister& fm, const VRegister& fa) {
786 const FPRegister& fn,
787 const FPRegister& fm,
788 const FPRegister& fa) {
789 DCHECK(allow_macro_instructions_); 766 DCHECK(allow_macro_instructions_);
790 fmsub(fd, fn, fm, fa); 767 fmsub(fd, fn, fm, fa);
791 } 768 }
792 769
793 770 void MacroAssembler::Fmul(const VRegister& fd, const VRegister& fn,
794 void MacroAssembler::Fmul(const FPRegister& fd, 771 const VRegister& fm) {
795 const FPRegister& fn,
796 const FPRegister& fm) {
797 DCHECK(allow_macro_instructions_); 772 DCHECK(allow_macro_instructions_);
798 fmul(fd, fn, fm); 773 fmul(fd, fn, fm);
799 } 774 }
800 775
801 776 void MacroAssembler::Fnmadd(const VRegister& fd, const VRegister& fn,
802 void MacroAssembler::Fneg(const FPRegister& fd, const FPRegister& fn) { 777 const VRegister& fm, const VRegister& fa) {
803 DCHECK(allow_macro_instructions_);
804 fneg(fd, fn);
805 }
806
807
808 void MacroAssembler::Fnmadd(const FPRegister& fd,
809 const FPRegister& fn,
810 const FPRegister& fm,
811 const FPRegister& fa) {
812 DCHECK(allow_macro_instructions_); 778 DCHECK(allow_macro_instructions_);
813 fnmadd(fd, fn, fm, fa); 779 fnmadd(fd, fn, fm, fa);
814 } 780 }
815 781
816 782 void MacroAssembler::Fnmsub(const VRegister& fd, const VRegister& fn,
817 void MacroAssembler::Fnmsub(const FPRegister& fd, 783 const VRegister& fm, const VRegister& fa) {
818 const FPRegister& fn,
819 const FPRegister& fm,
820 const FPRegister& fa) {
821 DCHECK(allow_macro_instructions_); 784 DCHECK(allow_macro_instructions_);
822 fnmsub(fd, fn, fm, fa); 785 fnmsub(fd, fn, fm, fa);
823 } 786 }
824 787
825 788 void MacroAssembler::Fsub(const VRegister& fd, const VRegister& fn,
826 void MacroAssembler::Frinta(const FPRegister& fd, const FPRegister& fn) { 789 const VRegister& fm) {
827 DCHECK(allow_macro_instructions_);
828 frinta(fd, fn);
829 }
830
831
832 void MacroAssembler::Frintm(const FPRegister& fd, const FPRegister& fn) {
833 DCHECK(allow_macro_instructions_);
834 frintm(fd, fn);
835 }
836
837
838 void MacroAssembler::Frintn(const FPRegister& fd, const FPRegister& fn) {
839 DCHECK(allow_macro_instructions_);
840 frintn(fd, fn);
841 }
842
843
844 void MacroAssembler::Frintp(const FPRegister& fd, const FPRegister& fn) {
845 DCHECK(allow_macro_instructions_);
846 frintp(fd, fn);
847 }
848
849
850 void MacroAssembler::Frintz(const FPRegister& fd, const FPRegister& fn) {
851 DCHECK(allow_macro_instructions_);
852 frintz(fd, fn);
853 }
854
855
856 void MacroAssembler::Fsqrt(const FPRegister& fd, const FPRegister& fn) {
857 DCHECK(allow_macro_instructions_);
858 fsqrt(fd, fn);
859 }
860
861
862 void MacroAssembler::Fsub(const FPRegister& fd,
863 const FPRegister& fn,
864 const FPRegister& fm) {
865 DCHECK(allow_macro_instructions_); 790 DCHECK(allow_macro_instructions_);
866 fsub(fd, fn, fm); 791 fsub(fd, fn, fm);
867 } 792 }
868 793
869 794
870 void MacroAssembler::Hint(SystemHint code) { 795 void MacroAssembler::Hint(SystemHint code) {
871 DCHECK(allow_macro_instructions_); 796 DCHECK(allow_macro_instructions_);
872 hint(code); 797 hint(code);
873 } 798 }
874 799
(...skipping 12 matching lines...) Expand all
887 812
888 void MacroAssembler::Ldr(const CPURegister& rt, const Immediate& imm) { 813 void MacroAssembler::Ldr(const CPURegister& rt, const Immediate& imm) {
889 DCHECK(allow_macro_instructions_); 814 DCHECK(allow_macro_instructions_);
890 ldr(rt, imm); 815 ldr(rt, imm);
891 } 816 }
892 817
893 818
894 void MacroAssembler::Ldr(const CPURegister& rt, double imm) { 819 void MacroAssembler::Ldr(const CPURegister& rt, double imm) {
895 DCHECK(allow_macro_instructions_); 820 DCHECK(allow_macro_instructions_);
896 DCHECK(rt.Is64Bits()); 821 DCHECK(rt.Is64Bits());
897 ldr(rt, Immediate(double_to_rawbits(imm))); 822 ldr(rt, Immediate(bit_cast<uint64_t>(imm)));
898 } 823 }
899 824
900 825
901 void MacroAssembler::Lsl(const Register& rd, 826 void MacroAssembler::Lsl(const Register& rd,
902 const Register& rn, 827 const Register& rn,
903 unsigned shift) { 828 unsigned shift) {
904 DCHECK(allow_macro_instructions_); 829 DCHECK(allow_macro_instructions_);
905 DCHECK(!rd.IsZero()); 830 DCHECK(!rd.IsZero());
906 lsl(rd, rn, shift); 831 lsl(rd, rn, shift);
907 } 832 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 995
1071 void MacroAssembler::Sbfx(const Register& rd, 996 void MacroAssembler::Sbfx(const Register& rd,
1072 const Register& rn, 997 const Register& rn,
1073 unsigned lsb, 998 unsigned lsb,
1074 unsigned width) { 999 unsigned width) {
1075 DCHECK(allow_macro_instructions_); 1000 DCHECK(allow_macro_instructions_);
1076 DCHECK(!rd.IsZero()); 1001 DCHECK(!rd.IsZero());
1077 sbfx(rd, rn, lsb, width); 1002 sbfx(rd, rn, lsb, width);
1078 } 1003 }
1079 1004
1080 1005 void MacroAssembler::Scvtf(const VRegister& fd, const Register& rn,
1081 void MacroAssembler::Scvtf(const FPRegister& fd,
1082 const Register& rn,
1083 unsigned fbits) { 1006 unsigned fbits) {
1084 DCHECK(allow_macro_instructions_); 1007 DCHECK(allow_macro_instructions_);
1085 scvtf(fd, rn, fbits); 1008 scvtf(fd, rn, fbits);
1086 } 1009 }
1087 1010
1088 1011
1089 void MacroAssembler::Sdiv(const Register& rd, 1012 void MacroAssembler::Sdiv(const Register& rd,
1090 const Register& rn, 1013 const Register& rn,
1091 const Register& rm) { 1014 const Register& rm) {
1092 DCHECK(allow_macro_instructions_); 1015 DCHECK(allow_macro_instructions_);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 1097
1175 void MacroAssembler::Ubfx(const Register& rd, 1098 void MacroAssembler::Ubfx(const Register& rd,
1176 const Register& rn, 1099 const Register& rn,
1177 unsigned lsb, 1100 unsigned lsb,
1178 unsigned width) { 1101 unsigned width) {
1179 DCHECK(allow_macro_instructions_); 1102 DCHECK(allow_macro_instructions_);
1180 DCHECK(!rd.IsZero()); 1103 DCHECK(!rd.IsZero());
1181 ubfx(rd, rn, lsb, width); 1104 ubfx(rd, rn, lsb, width);
1182 } 1105 }
1183 1106
1184 1107 void MacroAssembler::Ucvtf(const VRegister& fd, const Register& rn,
1185 void MacroAssembler::Ucvtf(const FPRegister& fd,
1186 const Register& rn,
1187 unsigned fbits) { 1108 unsigned fbits) {
1188 DCHECK(allow_macro_instructions_); 1109 DCHECK(allow_macro_instructions_);
1189 ucvtf(fd, rn, fbits); 1110 ucvtf(fd, rn, fbits);
1190 } 1111 }
1191 1112
1192 1113
1193 void MacroAssembler::Udiv(const Register& rd, 1114 void MacroAssembler::Udiv(const Register& rd,
1194 const Register& rn, 1115 const Register& rn,
1195 const Register& rm) { 1116 const Register& rm) {
1196 DCHECK(allow_macro_instructions_); 1117 DCHECK(allow_macro_instructions_);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 DCHECK(dst.Is64Bits() && src.Is64Bits()); 1231 DCHECK(dst.Is64Bits() && src.Is64Bits());
1311 if (FLAG_enable_slow_asserts) { 1232 if (FLAG_enable_slow_asserts) {
1312 AssertSmi(src); 1233 AssertSmi(src);
1313 } 1234 }
1314 Asr(dst, src, kSmiShift); 1235 Asr(dst, src, kSmiShift);
1315 } 1236 }
1316 1237
1317 1238
1318 void MacroAssembler::SmiUntag(Register smi) { SmiUntag(smi, smi); } 1239 void MacroAssembler::SmiUntag(Register smi) { SmiUntag(smi, smi); }
1319 1240
1320 1241 void MacroAssembler::SmiUntagToDouble(VRegister dst, Register src,
1321 void MacroAssembler::SmiUntagToDouble(FPRegister dst,
1322 Register src,
1323 UntagMode mode) { 1242 UntagMode mode) {
1324 DCHECK(dst.Is64Bits() && src.Is64Bits()); 1243 DCHECK(dst.Is64Bits() && src.Is64Bits());
1325 if (FLAG_enable_slow_asserts && (mode == kNotSpeculativeUntag)) { 1244 if (FLAG_enable_slow_asserts && (mode == kNotSpeculativeUntag)) {
1326 AssertSmi(src); 1245 AssertSmi(src);
1327 } 1246 }
1328 Scvtf(dst, src, kSmiShift); 1247 Scvtf(dst, src, kSmiShift);
1329 } 1248 }
1330 1249
1331 1250 void MacroAssembler::SmiUntagToFloat(VRegister dst, Register src,
1332 void MacroAssembler::SmiUntagToFloat(FPRegister dst,
1333 Register src,
1334 UntagMode mode) { 1251 UntagMode mode) {
1335 DCHECK(dst.Is32Bits() && src.Is64Bits()); 1252 DCHECK(dst.Is32Bits() && src.Is64Bits());
1336 if (FLAG_enable_slow_asserts && (mode == kNotSpeculativeUntag)) { 1253 if (FLAG_enable_slow_asserts && (mode == kNotSpeculativeUntag)) {
1337 AssertSmi(src); 1254 AssertSmi(src);
1338 } 1255 }
1339 Scvtf(dst, src, kSmiShift); 1256 Scvtf(dst, src, kSmiShift);
1340 } 1257 }
1341 1258
1342 1259
1343 void MacroAssembler::SmiTagAndPush(Register src) { 1260 void MacroAssembler::SmiTagAndPush(Register src) {
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 DCHECK(isprint(marker_name[0]) && isprint(marker_name[1])); 1591 DCHECK(isprint(marker_name[0]) && isprint(marker_name[1]));
1675 1592
1676 InstructionAccurateScope scope(this, 1); 1593 InstructionAccurateScope scope(this, 1);
1677 movn(xzr, (marker_name[1] << 8) | marker_name[0]); 1594 movn(xzr, (marker_name[1] << 8) | marker_name[0]);
1678 } 1595 }
1679 1596
1680 } // namespace internal 1597 } // namespace internal
1681 } // namespace v8 1598 } // namespace v8
1682 1599
1683 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_ 1600 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698