OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 static const int kPatchDebugBreakSlotAddressOffset = | 538 static const int kPatchDebugBreakSlotAddressOffset = |
539 kDebugBreakSlotLength - kPatchDebugBreakSlotReturnOffset; | 539 kDebugBreakSlotLength - kPatchDebugBreakSlotReturnOffset; |
540 | 540 |
541 static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) { | 541 static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) { |
542 return ((cr.code() * CRWIDTH) + crbit); | 542 return ((cr.code() * CRWIDTH) + crbit); |
543 } | 543 } |
544 | 544 |
545 // --------------------------------------------------------------------------- | 545 // --------------------------------------------------------------------------- |
546 // Code generation | 546 // Code generation |
547 | 547 |
| 548 template <class T, int size, int lo, int hi> |
| 549 inline T getfield(T value) { |
| 550 DCHECK(lo < hi); |
| 551 DCHECK(size > 0); |
| 552 int mask = hi - lo; |
| 553 int shift = size * 8 - hi; |
| 554 uint32_t mask_value = (mask == 32) ? 0xffffffff : (1 << mask) - 1; |
| 555 return (value & mask_value) << shift; |
| 556 } |
| 557 |
| 558 // Declare generic instruction formats by fields |
| 559 inline void e_format(Opcode opcode) { |
| 560 emit2bytes(getfield<uint16_t, 2, 0, 16>(opcode)); |
| 561 } |
| 562 |
| 563 inline void i_format(Opcode opcode, int f1) { |
| 564 emit2bytes(getfield<uint16_t, 2, 0, 8>(opcode) | |
| 565 getfield<uint16_t, 2, 8, 16>(f1)); |
| 566 } |
| 567 |
| 568 inline void ie_format(Opcode opcode, int f1, int f2) { |
| 569 emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) | |
| 570 getfield<uint32_t, 4, 24, 28>(f1) | |
| 571 getfield<uint32_t, 4, 28, 32>(f2)); |
| 572 } |
| 573 inline void mii_format(Opcode opcode, int f1, int f2, int f3) { |
| 574 emit6bytes( |
| 575 getfield<uint64_t, 6, 0, 8>(opcode) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 576 getfield<uint64_t, 6, 12, 24>(f2) | getfield<uint64_t, 6, 24, 48>(f3)); |
| 577 } |
| 578 |
| 579 inline void ri_format(Opcode opcode, int f1, int f2) { |
| 580 uint32_t op1 = opcode >> 4; |
| 581 uint32_t op2 = opcode & 0xf; |
| 582 emit4bytes( |
| 583 getfield<uint32_t, 4, 0, 8>(op1) | getfield<uint32_t, 4, 8, 12>(f1) | |
| 584 getfield<uint32_t, 4, 12, 16>(op2) | getfield<uint32_t, 4, 16, 32>(f2)); |
| 585 } |
| 586 |
| 587 inline void rie_1_format(Opcode opcode, int f1, int f2, int f3, int f4) { |
| 588 uint32_t op1 = opcode >> 8; |
| 589 uint32_t op2 = opcode & 0xff; |
| 590 emit6bytes( |
| 591 getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 592 getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 32>(f3) | |
| 593 getfield<uint64_t, 6, 32, 36>(f4) | getfield<uint64_t, 6, 40, 48>(op2)); |
| 594 } |
| 595 |
| 596 inline void rie_2_format(Opcode opcode, int f1, int f2, int f3, int f4) { |
| 597 uint32_t op1 = opcode >> 8; |
| 598 uint32_t op2 = opcode & 0xff; |
| 599 emit6bytes( |
| 600 getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 601 getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 32>(f3) | |
| 602 getfield<uint64_t, 6, 32, 40>(f4) | getfield<uint64_t, 6, 40, 48>(op2)); |
| 603 } |
| 604 |
| 605 inline void rie_3_format(Opcode opcode, int f1, int f2, int f3, int f4, |
| 606 int f5) { |
| 607 uint32_t op1 = opcode >> 8; |
| 608 uint32_t op2 = opcode & 0xff; |
| 609 emit6bytes( |
| 610 getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 611 getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 24>(f3) | |
| 612 getfield<uint64_t, 6, 24, 32>(f4) | getfield<uint64_t, 6, 32, 40>(f5) | |
| 613 getfield<uint64_t, 6, 40, 48>(op2)); |
| 614 } |
| 615 |
| 616 #define DECLARE_S390_RIL_AB_INSTRUCTIONS(name, op_name, op_value) \ |
| 617 template <class R1> \ |
| 618 inline void name(R1 r1, const Operand& i2) { \ |
| 619 ril_format(op_name, r1.code(), i2.immediate()); \ |
| 620 } |
| 621 #define DECLARE_S390_RIL_C_INSTRUCTIONS(name, op_name, op_value) \ |
| 622 inline void name(Condition m1, const Operand& i2) { \ |
| 623 ril_format(op_name, m1, i2.immediate()); \ |
| 624 } |
| 625 |
| 626 inline void ril_format(Opcode opcode, int f1, int f2) { |
| 627 uint32_t op1 = opcode >> 4; |
| 628 uint32_t op2 = opcode & 0xf; |
| 629 emit6bytes( |
| 630 getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 631 getfield<uint64_t, 6, 12, 16>(op2) | getfield<uint64_t, 6, 16, 48>(f2)); |
| 632 } |
| 633 S390_RIL_A_OPCODE_LIST(DECLARE_S390_RIL_AB_INSTRUCTIONS) |
| 634 S390_RIL_B_OPCODE_LIST(DECLARE_S390_RIL_AB_INSTRUCTIONS) |
| 635 S390_RIL_C_OPCODE_LIST(DECLARE_S390_RIL_C_INSTRUCTIONS) |
| 636 #undef DECLARE_S390_RIL_AB_INSTRUCTIONS |
| 637 #undef DECLARE_S390_RIL_C_INSTRUCTIONS |
| 638 |
| 639 inline void ris_format(Opcode opcode, int f1, int f2, int f3, int f4, |
| 640 int f5) { |
| 641 uint32_t op1 = opcode >> 8; |
| 642 uint32_t op2 = opcode & 0xff; |
| 643 emit6bytes( |
| 644 getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) | |
| 645 getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 20>(f3) | |
| 646 getfield<uint64_t, 6, 20, 32>(f4) | getfield<uint64_t, 6, 32, 40>(f5) | |
| 647 getfield<uint64_t, 6, 40, 48>(op2)); |
| 648 } |
| 649 |
| 650 #define DECLARE_S390_RR_INSTRUCTIONS(name, op_name, op_value) \ |
| 651 inline void name(Register r1, Register r2) { \ |
| 652 rr_format(op_name, r1.code(), r2.code()); \ |
| 653 } \ |
| 654 inline void name(DoubleRegister r1, DoubleRegister r2) { \ |
| 655 rr_format(op_name, r1.code(), r2.code()); \ |
| 656 } \ |
| 657 inline void name(Condition m1, Register r2) { \ |
| 658 rr_format(op_name, m1, r2.code()); \ |
| 659 } |
| 660 |
| 661 inline void rr_format(Opcode opcode, int f1, int f2) { |
| 662 emit2bytes(getfield<uint16_t, 2, 0, 8>(opcode) | |
| 663 getfield<uint16_t, 2, 8, 12>(f1) | |
| 664 getfield<uint16_t, 2, 12, 16>(f2)); |
| 665 } |
| 666 S390_RR_OPCODE_LIST(DECLARE_S390_RR_INSTRUCTIONS) |
| 667 #undef DECLARE_S390_RR_INSTRUCTIONS |
| 668 |
| 669 #define DECLARE_S390_RRD_INSTRUCTIONS(name, op_name, op_value) \ |
| 670 template <class R1, class R2, class R3> \ |
| 671 inline void name(R1 r1, R3 r3, R2 r2) { \ |
| 672 rrd_format(op_name, r1.code(), r3.code(), r2.code()); \ |
| 673 } |
| 674 inline void rrd_format(Opcode opcode, int f1, int f2, int f3) { |
| 675 emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) | |
| 676 getfield<uint32_t, 4, 16, 20>(f1) | |
| 677 getfield<uint32_t, 4, 24, 28>(f2) | |
| 678 getfield<uint32_t, 4, 28, 32>(f3)); |
| 679 } |
| 680 S390_RRD_OPCODE_LIST(DECLARE_S390_RRD_INSTRUCTIONS) |
| 681 #undef DECLARE_S390_RRD_INSTRUCTIONS |
| 682 |
| 683 #define DECLARE_S390_RRE_INSTRUCTIONS(name, op_name, op_value) \ |
| 684 template <class R1, class R2> \ |
| 685 inline void name(R1 r1, R2 r2) { \ |
| 686 rre_format(op_name, r1.code(), r2.code()); \ |
| 687 } |
| 688 inline void rre_format(Opcode opcode, int f1, int f2) { |
| 689 emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) | |
| 690 getfield<uint32_t, 4, 24, 28>(f1) | |
| 691 getfield<uint32_t, 4, 28, 32>(f2)); |
| 692 } |
| 693 S390_RRE_OPCODE_LIST(DECLARE_S390_RRE_INSTRUCTIONS) |
| 694 // Special format |
| 695 void lzdr(DoubleRegister r1) { rre_format(LZDR, r1.code(), 0); } |
| 696 #undef DECLARE_S390_RRE_INSTRUCTIONS |
| 697 |
| 698 inline void rrf_format(Opcode opcode, int f1, int f2, int f3, int f4) { |
| 699 emit4bytes( |
| 700 getfield<uint32_t, 4, 0, 16>(opcode) | |
| 701 getfield<uint32_t, 4, 16, 20>(f1) | getfield<uint32_t, 4, 20, 24>(f2) | |
| 702 getfield<uint32_t, 4, 24, 28>(f3) | getfield<uint32_t, 4, 28, 32>(f4)); |
| 703 } |
| 704 |
548 // Helper for unconditional branch to Label with update to save register | 705 // Helper for unconditional branch to Label with update to save register |
549 void b(Register r, Label* l) { | 706 void b(Register r, Label* l) { |
550 int32_t halfwords = branch_offset(l) / 2; | 707 int32_t halfwords = branch_offset(l) / 2; |
551 brasl(r, Operand(halfwords)); | 708 brasl(r, Operand(halfwords)); |
552 } | 709 } |
553 | 710 |
554 // Conditional Branch Instruction - Generates either BRC / BRCL | 711 // Conditional Branch Instruction - Generates either BRC / BRCL |
555 void branchOnCond(Condition c, int branch_offset, bool is_bound = false); | 712 void branchOnCond(Condition c, int branch_offset, bool is_bound = false); |
556 | 713 |
557 // Helpers for conditional branch to Label | 714 // Helpers for conditional branch to Label |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 #define RI1_FORM(name) void name(Register r, const Operand& i) | 797 #define RI1_FORM(name) void name(Register r, const Operand& i) |
641 | 798 |
642 #define RI2_FORM(name) void name(Condition m, const Operand& i) | 799 #define RI2_FORM(name) void name(Condition m, const Operand& i) |
643 | 800 |
644 #define RIE_FORM(name) void name(Register r1, Register R3, const Operand& i) | 801 #define RIE_FORM(name) void name(Register r1, Register R3, const Operand& i) |
645 | 802 |
646 #define RIE_F_FORM(name) \ | 803 #define RIE_F_FORM(name) \ |
647 void name(Register r1, Register r2, const Operand& i3, const Operand& i4, \ | 804 void name(Register r1, Register r2, const Operand& i3, const Operand& i4, \ |
648 const Operand& i5) | 805 const Operand& i5) |
649 | 806 |
650 #define RIL1_FORM(name) void name(Register r1, const Operand& i2) | |
651 | |
652 #define RIL2_FORM(name) void name(Condition m1, const Operand& i2) | |
653 | |
654 #define RXE_FORM(name) \ | 807 #define RXE_FORM(name) \ |
655 void name(Register r1, const MemOperand& opnd); \ | 808 void name(Register r1, const MemOperand& opnd); \ |
656 void name(Register r1, Register b2, Register x2, Disp d2) | 809 void name(Register r1, Register b2, Register x2, Disp d2) |
657 | 810 |
658 #define RXF_FORM(name) \ | 811 #define RXF_FORM(name) \ |
659 void name(Register r1, Register r3, const MemOperand& opnd); \ | 812 void name(Register r1, Register r3, const MemOperand& opnd); \ |
660 void name(Register r1, Register r3, Register b2, Register x2, Disp d2) | 813 void name(Register r1, Register r3, Register b2, Register x2, Disp d2) |
661 | 814 |
662 #define RXY_FORM(name) \ | 815 #define RXY_FORM(name) \ |
663 void name(Register r1, Register x2, Register b2, Disp d2); \ | 816 void name(Register r1, Register x2, Register b2, Disp d2); \ |
664 void name(Register r1, const MemOperand& opnd) | 817 void name(Register r1, const MemOperand& opnd) |
665 | 818 |
666 #define RSI_FORM(name) void name(Register r1, Register r3, const Operand& i) | 819 #define RSI_FORM(name) void name(Register r1, Register r3, const Operand& i) |
667 | 820 |
668 #define RIS_FORM(name) \ | 821 #define RIS_FORM(name) \ |
669 void name(Register r1, Condition m3, Register b4, Disp d4, \ | 822 void name(Register r1, Condition m3, Register b4, Disp d4, \ |
670 const Operand& i2); \ | 823 const Operand& i2); \ |
671 void name(Register r1, const Operand& i2, Condition m3, \ | 824 void name(Register r1, const Operand& i2, Condition m3, \ |
672 const MemOperand& opnd) | 825 const MemOperand& opnd) |
673 | 826 |
674 #define SI_FORM(name) \ | 827 #define SI_FORM(name) \ |
675 void name(const MemOperand& opnd, const Operand& i); \ | 828 void name(const MemOperand& opnd, const Operand& i); \ |
676 void name(const Operand& i2, Register b1, Disp d1) | 829 void name(const Operand& i2, Register b1, Disp d1) |
677 | 830 |
678 #define SIL_FORM(name) \ | 831 #define SIL_FORM(name) \ |
679 void name(Register b1, Disp d1, const Operand& i2); \ | 832 void name(Register b1, Disp d1, const Operand& i2); \ |
680 void name(const MemOperand& opnd, const Operand& i2) | 833 void name(const MemOperand& opnd, const Operand& i2) |
681 | 834 |
682 #define RRE_FORM(name) void name(Register r1, Register r2) | |
683 | |
684 #define RRF1_FORM(name) void name(Register r1, Register r2, Register r3) | 835 #define RRF1_FORM(name) void name(Register r1, Register r2, Register r3) |
685 | 836 |
686 #define RRF2_FORM(name) void name(Condition m1, Register r1, Register r2) | 837 #define RRF2_FORM(name) void name(Condition m1, Register r1, Register r2) |
687 | 838 |
688 #define RRF3_FORM(name) \ | 839 #define RRF3_FORM(name) \ |
689 void name(Register r3, Condition m4, Register r1, Register r2) | 840 void name(Register r3, Condition m4, Register r1, Register r2) |
690 | 841 |
691 #define RS1_FORM(name) \ | 842 #define RS1_FORM(name) \ |
692 void name(Register r1, Register r3, const MemOperand& opnd); \ | 843 void name(Register r1, Register r3, const MemOperand& opnd); \ |
693 void name(Register r1, Register r3, Register b2, Disp d2) | 844 void name(Register r1, Register r3, Register b2, Disp d2) |
(...skipping 11 matching lines...) Expand all Loading... |
705 void name(const MemOperand& opnd) | 856 void name(const MemOperand& opnd) |
706 | 857 |
707 #define RSY1_FORM(name) \ | 858 #define RSY1_FORM(name) \ |
708 void name(Register r1, Register r3, Register b2, Disp d2); \ | 859 void name(Register r1, Register r3, Register b2, Disp d2); \ |
709 void name(Register r1, Register r3, const MemOperand& opnd) | 860 void name(Register r1, Register r3, const MemOperand& opnd) |
710 | 861 |
711 #define RSY2_FORM(name) \ | 862 #define RSY2_FORM(name) \ |
712 void name(Register r1, Condition m3, Register b2, Disp d2); \ | 863 void name(Register r1, Condition m3, Register b2, Disp d2); \ |
713 void name(Register r1, Condition m3, const MemOperand& opnd) | 864 void name(Register r1, Condition m3, const MemOperand& opnd) |
714 | 865 |
715 #define RRD_FORM(name) void name(Register r1, Register r3, Register r2) | |
716 | |
717 #define RRS_FORM(name) \ | 866 #define RRS_FORM(name) \ |
718 void name(Register r1, Register r2, Register b4, Disp d4, Condition m3); \ | 867 void name(Register r1, Register r2, Register b4, Disp d4, Condition m3); \ |
719 void name(Register r1, Register r2, Condition m3, const MemOperand& opnd) | 868 void name(Register r1, Register r2, Condition m3, const MemOperand& opnd) |
720 | 869 |
721 #define S_FORM(name) \ | 870 #define S_FORM(name) \ |
722 void name(Register b2, Disp d2); \ | 871 void name(Register b2, Disp d2); \ |
723 void name(const MemOperand& opnd) | 872 void name(const MemOperand& opnd) |
724 | 873 |
725 #define SIY_FORM(name) \ | 874 #define SIY_FORM(name) \ |
726 void name(const Operand& i2, Register b1, Disp d1); \ | 875 void name(const Operand& i2, Register b1, Disp d1); \ |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 vfm(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), | 951 vfm(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
803 static_cast<Condition>(3)); | 952 static_cast<Condition>(3)); |
804 } | 953 } |
805 void vfd(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { | 954 void vfd(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { |
806 vfd(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), | 955 vfd(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
807 static_cast<Condition>(3)); | 956 static_cast<Condition>(3)); |
808 } | 957 } |
809 | 958 |
810 // S390 instruction sets | 959 // S390 instruction sets |
811 RX_FORM(bc); | 960 RX_FORM(bc); |
812 RR_FORM(bctr); | |
813 RX_FORM(cd); | 961 RX_FORM(cd); |
814 RRE_FORM(cdr); | |
815 RXE_FORM(cdb); | 962 RXE_FORM(cdb); |
816 RXE_FORM(ceb); | 963 RXE_FORM(ceb); |
817 RXE_FORM(ddb); | 964 RXE_FORM(ddb); |
818 RRE_FORM(ddbr); | |
819 SS1_FORM(ed); | 965 SS1_FORM(ed); |
820 RRE_FORM(epair); | |
821 RX_FORM(ex); | 966 RX_FORM(ex); |
822 RRF2_FORM(fidbr); | 967 RRF2_FORM(fidbr); |
823 RRE_FORM(flogr); | |
824 RX_FORM(ic_z); | 968 RX_FORM(ic_z); |
825 RXY_FORM(icy); | 969 RXY_FORM(icy); |
826 RIL1_FORM(iihf); | |
827 RI1_FORM(iihh); | 970 RI1_FORM(iihh); |
828 RI1_FORM(iihl); | 971 RI1_FORM(iihl); |
829 RIL1_FORM(iilf); | |
830 RIL1_FORM(lgfi); | |
831 RI1_FORM(iilh); | 972 RI1_FORM(iilh); |
832 RI1_FORM(iill); | 973 RI1_FORM(iill); |
833 RRE_FORM(lcgr); | |
834 RR_FORM(lcr); | |
835 RX_FORM(le_z); | 974 RX_FORM(le_z); |
836 RXY_FORM(ley); | 975 RXY_FORM(ley); |
837 RIL1_FORM(llihf); | |
838 RIL1_FORM(llilf); | |
839 RRE_FORM(lngr); | |
840 RR_FORM(lnr); | |
841 RSY1_FORM(loc); | 976 RSY1_FORM(loc); |
842 RXY_FORM(lrv); | 977 RXY_FORM(lrv); |
843 RRE_FORM(lrvr); | |
844 RRE_FORM(lrvgr); | |
845 RXY_FORM(lrvh); | 978 RXY_FORM(lrvh); |
846 RXY_FORM(lrvg); | 979 RXY_FORM(lrvg); |
847 RXE_FORM(mdb); | 980 RXE_FORM(mdb); |
848 RRE_FORM(mdbr); | |
849 SS4_FORM(mvck); | 981 SS4_FORM(mvck); |
850 SSF_FORM(mvcos); | 982 SSF_FORM(mvcos); |
851 SS4_FORM(mvcs); | 983 SS4_FORM(mvcs); |
852 SS1_FORM(mvn); | 984 SS1_FORM(mvn); |
853 SS1_FORM(nc); | 985 SS1_FORM(nc); |
854 SI_FORM(ni); | 986 SI_FORM(ni); |
855 RIL1_FORM(nihf); | |
856 RIL1_FORM(nilf); | |
857 RI1_FORM(nilh); | 987 RI1_FORM(nilh); |
858 RI1_FORM(nill); | 988 RI1_FORM(nill); |
859 RIL1_FORM(oihf); | |
860 RIL1_FORM(oilf); | |
861 RI1_FORM(oill); | 989 RI1_FORM(oill); |
862 RRE_FORM(popcnt); | |
863 RXE_FORM(sdb); | 990 RXE_FORM(sdb); |
864 RRE_FORM(sdbr); | |
865 RIL1_FORM(slfi); | |
866 RXY_FORM(slgf); | 991 RXY_FORM(slgf); |
867 RIL1_FORM(slgfi); | |
868 RS1_FORM(srdl); | 992 RS1_FORM(srdl); |
869 RX_FORM(ste); | 993 RX_FORM(ste); |
870 RXY_FORM(stey); | 994 RXY_FORM(stey); |
871 RXY_FORM(strv); | 995 RXY_FORM(strv); |
872 RXY_FORM(strvh); | 996 RXY_FORM(strvh); |
873 RXY_FORM(strvg); | 997 RXY_FORM(strvg); |
874 RI1_FORM(tmll); | 998 RI1_FORM(tmll); |
875 SS1_FORM(tr); | 999 SS1_FORM(tr); |
876 S_FORM(ts); | 1000 S_FORM(ts); |
877 RIL1_FORM(xihf); | |
878 RIL1_FORM(xilf); | |
879 | 1001 |
880 // Load Address Instructions | 1002 // Load Address Instructions |
881 void la(Register r, const MemOperand& opnd); | 1003 void la(Register r, const MemOperand& opnd); |
882 void lay(Register r, const MemOperand& opnd); | 1004 void lay(Register r, const MemOperand& opnd); |
883 void larl(Register r1, const Operand& opnd); | |
884 void larl(Register r, Label* l); | 1005 void larl(Register r, Label* l); |
885 | 1006 |
886 // Load Instructions | 1007 // Load Instructions |
887 void lb(Register r, const MemOperand& src); | 1008 void lb(Register r, const MemOperand& src); |
888 void lbr(Register r1, Register r2); | |
889 void lgb(Register r, const MemOperand& src); | 1009 void lgb(Register r, const MemOperand& src); |
890 void lgbr(Register r1, Register r2); | |
891 void lh(Register r, const MemOperand& src); | 1010 void lh(Register r, const MemOperand& src); |
892 void lhy(Register r, const MemOperand& src); | 1011 void lhy(Register r, const MemOperand& src); |
893 void lhr(Register r1, Register r2); | |
894 void lgh(Register r, const MemOperand& src); | 1012 void lgh(Register r, const MemOperand& src); |
895 void lghr(Register r1, Register r2); | |
896 void l(Register r, const MemOperand& src); | 1013 void l(Register r, const MemOperand& src); |
897 void ly(Register r, const MemOperand& src); | 1014 void ly(Register r, const MemOperand& src); |
898 void lr(Register r1, Register r2); | |
899 void lg(Register r, const MemOperand& src); | 1015 void lg(Register r, const MemOperand& src); |
900 void lgr(Register r1, Register r2); | |
901 void lgf(Register r, const MemOperand& src); | 1016 void lgf(Register r, const MemOperand& src); |
902 void lgfr(Register r1, Register r2); | |
903 void lhi(Register r, const Operand& imm); | 1017 void lhi(Register r, const Operand& imm); |
904 void lghi(Register r, const Operand& imm); | 1018 void lghi(Register r, const Operand& imm); |
905 | 1019 |
906 // Load And Test Instructions | 1020 // Load And Test Instructions |
907 void lt_z(Register r, const MemOperand& src); | 1021 void lt_z(Register r, const MemOperand& src); |
908 void ltg(Register r, const MemOperand& src); | 1022 void ltg(Register r, const MemOperand& src); |
909 void ltr(Register r1, Register r2); | |
910 void ltgr(Register r1, Register r2); | |
911 void ltgfr(Register r1, Register r2); | |
912 | 1023 |
913 // Load Logical Instructions | 1024 // Load Logical Instructions |
914 void llc(Register r, const MemOperand& src); | 1025 void llc(Register r, const MemOperand& src); |
915 void llgc(Register r, const MemOperand& src); | 1026 void llgc(Register r, const MemOperand& src); |
916 void llgf(Register r, const MemOperand& src); | 1027 void llgf(Register r, const MemOperand& src); |
917 void llgfr(Register r1, Register r2); | |
918 void llh(Register r, const MemOperand& src); | 1028 void llh(Register r, const MemOperand& src); |
919 void llgh(Register r, const MemOperand& src); | 1029 void llgh(Register r, const MemOperand& src); |
920 void llhr(Register r1, Register r2); | |
921 void llghr(Register r1, Register r2); | |
922 | 1030 |
923 // Load Multiple Instructions | 1031 // Load Multiple Instructions |
924 void lm(Register r1, Register r2, const MemOperand& src); | 1032 void lm(Register r1, Register r2, const MemOperand& src); |
925 void lmy(Register r1, Register r2, const MemOperand& src); | 1033 void lmy(Register r1, Register r2, const MemOperand& src); |
926 void lmg(Register r1, Register r2, const MemOperand& src); | 1034 void lmg(Register r1, Register r2, const MemOperand& src); |
927 | 1035 |
928 // Load On Condition Instructions | 1036 // Load On Condition Instructions |
929 void locr(Condition m3, Register r1, Register r2); | 1037 void locr(Condition m3, Register r1, Register r2); |
930 void locgr(Condition m3, Register r1, Register r2); | 1038 void locgr(Condition m3, Register r1, Register r2); |
931 void loc(Condition m3, Register r1, const MemOperand& src); | 1039 void loc(Condition m3, Register r1, const MemOperand& src); |
932 void locg(Condition m3, Register r1, const MemOperand& src); | 1040 void locg(Condition m3, Register r1, const MemOperand& src); |
933 | 1041 |
934 // Store Instructions | 1042 // Store Instructions |
935 void st(Register r, const MemOperand& src); | 1043 void st(Register r, const MemOperand& src); |
936 void stc(Register r, const MemOperand& src); | 1044 void stc(Register r, const MemOperand& src); |
937 void stcy(Register r, const MemOperand& src); | 1045 void stcy(Register r, const MemOperand& src); |
938 void stg(Register r, const MemOperand& src); | 1046 void stg(Register r, const MemOperand& src); |
939 void sth(Register r, const MemOperand& src); | 1047 void sth(Register r, const MemOperand& src); |
940 void sthy(Register r, const MemOperand& src); | 1048 void sthy(Register r, const MemOperand& src); |
941 void sty(Register r, const MemOperand& src); | 1049 void sty(Register r, const MemOperand& src); |
942 | 1050 |
943 // Store Multiple Instructions | 1051 // Store Multiple Instructions |
944 void stm(Register r1, Register r2, const MemOperand& src); | 1052 void stm(Register r1, Register r2, const MemOperand& src); |
945 void stmy(Register r1, Register r2, const MemOperand& src); | 1053 void stmy(Register r1, Register r2, const MemOperand& src); |
946 void stmg(Register r1, Register r2, const MemOperand& src); | 1054 void stmg(Register r1, Register r2, const MemOperand& src); |
947 | 1055 |
948 // Compare Instructions | 1056 // Compare Instructions |
949 void c(Register r, const MemOperand& opnd); | 1057 void c(Register r, const MemOperand& opnd); |
950 void cy(Register r, const MemOperand& opnd); | 1058 void cy(Register r, const MemOperand& opnd); |
951 void cr_z(Register r1, Register r2); | |
952 void cg(Register r, const MemOperand& opnd); | 1059 void cg(Register r, const MemOperand& opnd); |
953 void cgr(Register r1, Register r2); | |
954 void ch(Register r, const MemOperand& opnd); | 1060 void ch(Register r, const MemOperand& opnd); |
955 void chy(Register r, const MemOperand& opnd); | 1061 void chy(Register r, const MemOperand& opnd); |
956 void chi(Register r, const Operand& opnd); | 1062 void chi(Register r, const Operand& opnd); |
957 void cghi(Register r, const Operand& opnd); | 1063 void cghi(Register r, const Operand& opnd); |
958 void cfi(Register r, const Operand& opnd); | |
959 void cgfi(Register r, const Operand& opnd); | |
960 | 1064 |
961 // Compare Logical Instructions | 1065 // Compare Logical Instructions |
962 void cl(Register r, const MemOperand& opnd); | 1066 void cl(Register r, const MemOperand& opnd); |
963 void cly(Register r, const MemOperand& opnd); | 1067 void cly(Register r, const MemOperand& opnd); |
964 void clr(Register r1, Register r2); | |
965 void clg(Register r, const MemOperand& opnd); | 1068 void clg(Register r, const MemOperand& opnd); |
966 void clgr(Register r1, Register r2); | |
967 void clfi(Register r, const Operand& opnd); | |
968 void clgfi(Register r, const Operand& opnd); | |
969 void cli(const MemOperand& mem, const Operand& imm); | 1069 void cli(const MemOperand& mem, const Operand& imm); |
970 void cliy(const MemOperand& mem, const Operand& imm); | 1070 void cliy(const MemOperand& mem, const Operand& imm); |
971 void clc(const MemOperand& opnd1, const MemOperand& opnd2, Length length); | 1071 void clc(const MemOperand& opnd1, const MemOperand& opnd2, Length length); |
972 | 1072 |
973 // Test Under Mask Instructions | 1073 // Test Under Mask Instructions |
974 void tm(const MemOperand& mem, const Operand& imm); | 1074 void tm(const MemOperand& mem, const Operand& imm); |
975 void tmy(const MemOperand& mem, const Operand& imm); | 1075 void tmy(const MemOperand& mem, const Operand& imm); |
976 | 1076 |
977 // Rotate Instructions | 1077 // Rotate Instructions |
978 void rll(Register r1, Register r3, Register opnd); | 1078 void rll(Register r1, Register r3, Register opnd); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 const Operand& endBit, const Operand& shiftAmt, | 1120 const Operand& endBit, const Operand& shiftAmt, |
1021 bool zeroBits = true); | 1121 bool zeroBits = true); |
1022 void risbgn(Register dst, Register src, const Operand& startBit, | 1122 void risbgn(Register dst, Register src, const Operand& startBit, |
1023 const Operand& endBit, const Operand& shiftAmt, | 1123 const Operand& endBit, const Operand& shiftAmt, |
1024 bool zeroBits = true); | 1124 bool zeroBits = true); |
1025 | 1125 |
1026 // Move Character (Mem to Mem) | 1126 // Move Character (Mem to Mem) |
1027 void mvc(const MemOperand& opnd1, const MemOperand& opnd2, uint32_t length); | 1127 void mvc(const MemOperand& opnd1, const MemOperand& opnd2, uint32_t length); |
1028 | 1128 |
1029 // Branch Instructions | 1129 // Branch Instructions |
1030 void basr(Register r1, Register r2); | |
1031 void bcr(Condition m, Register target); | |
1032 void bct(Register r, const MemOperand& opnd); | 1130 void bct(Register r, const MemOperand& opnd); |
1033 void bctg(Register r, const MemOperand& opnd); | 1131 void bctg(Register r, const MemOperand& opnd); |
1034 void bras(Register r, const Operand& opnd); | 1132 void bras(Register r, const Operand& opnd); |
1035 void brasl(Register r, const Operand& opnd); | |
1036 void brc(Condition c, const Operand& opnd); | 1133 void brc(Condition c, const Operand& opnd); |
1037 void brcl(Condition m, const Operand& opnd, bool isCodeTarget = false); | |
1038 void brct(Register r1, const Operand& opnd); | 1134 void brct(Register r1, const Operand& opnd); |
1039 void brctg(Register r1, const Operand& opnd); | 1135 void brctg(Register r1, const Operand& opnd); |
1040 | 1136 |
1041 // 32-bit Add Instructions | 1137 // 32-bit Add Instructions |
1042 void a(Register r1, const MemOperand& opnd); | 1138 void a(Register r1, const MemOperand& opnd); |
1043 void ay(Register r1, const MemOperand& opnd); | 1139 void ay(Register r1, const MemOperand& opnd); |
1044 void afi(Register r1, const Operand& opnd); | |
1045 void ah(Register r1, const MemOperand& opnd); | 1140 void ah(Register r1, const MemOperand& opnd); |
1046 void ahy(Register r1, const MemOperand& opnd); | 1141 void ahy(Register r1, const MemOperand& opnd); |
1047 void ahi(Register r1, const Operand& opnd); | 1142 void ahi(Register r1, const Operand& opnd); |
1048 void ahik(Register r1, Register r3, const Operand& opnd); | 1143 void ahik(Register r1, Register r3, const Operand& opnd); |
1049 void ar(Register r1, Register r2); | |
1050 void ark(Register r1, Register r2, Register r3); | 1144 void ark(Register r1, Register r2, Register r3); |
1051 void asi(const MemOperand&, const Operand&); | 1145 void asi(const MemOperand&, const Operand&); |
1052 | 1146 |
1053 // 64-bit Add Instructions | 1147 // 64-bit Add Instructions |
1054 void ag(Register r1, const MemOperand& opnd); | 1148 void ag(Register r1, const MemOperand& opnd); |
1055 void agf(Register r1, const MemOperand& opnd); | 1149 void agf(Register r1, const MemOperand& opnd); |
1056 void agfi(Register r1, const Operand& opnd); | |
1057 void agfr(Register r1, Register r2); | |
1058 void aghi(Register r1, const Operand& opnd); | 1150 void aghi(Register r1, const Operand& opnd); |
1059 void aghik(Register r1, Register r3, const Operand& opnd); | 1151 void aghik(Register r1, Register r3, const Operand& opnd); |
1060 void agr(Register r1, Register r2); | |
1061 void agrk(Register r1, Register r2, Register r3); | 1152 void agrk(Register r1, Register r2, Register r3); |
1062 void agsi(const MemOperand&, const Operand&); | 1153 void agsi(const MemOperand&, const Operand&); |
1063 | 1154 |
1064 // 32-bit Add Logical Instructions | 1155 // 32-bit Add Logical Instructions |
1065 void al_z(Register r1, const MemOperand& opnd); | 1156 void al_z(Register r1, const MemOperand& opnd); |
1066 void aly(Register r1, const MemOperand& opnd); | 1157 void aly(Register r1, const MemOperand& opnd); |
1067 void alfi(Register r1, const Operand& opnd); | |
1068 void alr(Register r1, Register r2); | |
1069 void alcr(Register r1, Register r2); | |
1070 void alrk(Register r1, Register r2, Register r3); | 1158 void alrk(Register r1, Register r2, Register r3); |
1071 | 1159 |
1072 // 64-bit Add Logical Instructions | 1160 // 64-bit Add Logical Instructions |
1073 void alg(Register r1, const MemOperand& opnd); | 1161 void alg(Register r1, const MemOperand& opnd); |
1074 void algfi(Register r1, const Operand& opnd); | |
1075 void algr(Register r1, Register r2); | |
1076 void algrk(Register r1, Register r2, Register r3); | 1162 void algrk(Register r1, Register r2, Register r3); |
1077 | 1163 |
1078 // 32-bit Subtract Instructions | 1164 // 32-bit Subtract Instructions |
1079 void s(Register r1, const MemOperand& opnd); | 1165 void s(Register r1, const MemOperand& opnd); |
1080 void sy(Register r1, const MemOperand& opnd); | 1166 void sy(Register r1, const MemOperand& opnd); |
1081 void sh(Register r1, const MemOperand& opnd); | 1167 void sh(Register r1, const MemOperand& opnd); |
1082 void shy(Register r1, const MemOperand& opnd); | 1168 void shy(Register r1, const MemOperand& opnd); |
1083 void sr(Register r1, Register r2); | |
1084 void srk(Register r1, Register r2, Register r3); | 1169 void srk(Register r1, Register r2, Register r3); |
1085 | 1170 |
1086 // 64-bit Subtract Instructions | 1171 // 64-bit Subtract Instructions |
1087 void sg(Register r1, const MemOperand& opnd); | 1172 void sg(Register r1, const MemOperand& opnd); |
1088 void sgf(Register r1, const MemOperand& opnd); | 1173 void sgf(Register r1, const MemOperand& opnd); |
1089 void sgr(Register r1, Register r2); | |
1090 void sgfr(Register r1, Register r2); | |
1091 void sgrk(Register r1, Register r2, Register r3); | 1174 void sgrk(Register r1, Register r2, Register r3); |
1092 | 1175 |
1093 // 32-bit Subtract Logical Instructions | 1176 // 32-bit Subtract Logical Instructions |
1094 void sl(Register r1, const MemOperand& opnd); | 1177 void sl(Register r1, const MemOperand& opnd); |
1095 void sly(Register r1, const MemOperand& opnd); | 1178 void sly(Register r1, const MemOperand& opnd); |
1096 void slr(Register r1, Register r2); | |
1097 void slrk(Register r1, Register r2, Register r3); | 1179 void slrk(Register r1, Register r2, Register r3); |
1098 void slbr(Register r1, Register r2); | |
1099 | 1180 |
1100 // 64-bit Subtract Logical Instructions | 1181 // 64-bit Subtract Logical Instructions |
1101 void slg(Register r1, const MemOperand& opnd); | 1182 void slg(Register r1, const MemOperand& opnd); |
1102 void slgr(Register r1, Register r2); | |
1103 void slgrk(Register r1, Register r2, Register r3); | 1183 void slgrk(Register r1, Register r2, Register r3); |
1104 | 1184 |
1105 // 32-bit Multiply Instructions | 1185 // 32-bit Multiply Instructions |
1106 void m(Register r1, const MemOperand& opnd); | 1186 void m(Register r1, const MemOperand& opnd); |
1107 void mfy(Register r1, const MemOperand& opnd); | 1187 void mfy(Register r1, const MemOperand& opnd); |
1108 void mr_z(Register r1, Register r2); | |
1109 void ml(Register r1, const MemOperand& opnd); | 1188 void ml(Register r1, const MemOperand& opnd); |
1110 void mlr(Register r1, Register r2); | |
1111 void ms(Register r1, const MemOperand& opnd); | 1189 void ms(Register r1, const MemOperand& opnd); |
1112 void msy(Register r1, const MemOperand& opnd); | 1190 void msy(Register r1, const MemOperand& opnd); |
1113 void msfi(Register r1, const Operand& opnd); | |
1114 void msr(Register r1, Register r2); | |
1115 void mh(Register r1, const MemOperand& opnd); | 1191 void mh(Register r1, const MemOperand& opnd); |
1116 void mhy(Register r1, const MemOperand& opnd); | 1192 void mhy(Register r1, const MemOperand& opnd); |
1117 void mhi(Register r1, const Operand& opnd); | 1193 void mhi(Register r1, const Operand& opnd); |
1118 | 1194 |
1119 // 64-bit Multiply Instructions | 1195 // 64-bit Multiply Instructions |
1120 void mlg(Register r1, const MemOperand& opnd); | 1196 void mlg(Register r1, const MemOperand& opnd); |
1121 void mlgr(Register r1, Register r2); | |
1122 void mghi(Register r1, const Operand& opnd); | 1197 void mghi(Register r1, const Operand& opnd); |
1123 void msgfi(Register r1, const Operand& opnd); | |
1124 void msg(Register r1, const MemOperand& opnd); | 1198 void msg(Register r1, const MemOperand& opnd); |
1125 void msgr(Register r1, Register r2); | |
1126 | 1199 |
1127 // 32-bit Divide Instructions | 1200 // 32-bit Divide Instructions |
1128 void d(Register r1, const MemOperand& opnd); | 1201 void d(Register r1, const MemOperand& opnd); |
1129 void dr(Register r1, Register r2); | |
1130 void dl(Register r1, const MemOperand& opnd); | 1202 void dl(Register r1, const MemOperand& opnd); |
1131 void dlr(Register r1, Register r2); | |
1132 | |
1133 // 64-bit Divide Instructions | |
1134 void dlgr(Register r1, Register r2); | |
1135 void dsgr(Register r1, Register r2); | |
1136 | 1203 |
1137 // Bitwise Instructions (AND / OR / XOR) | 1204 // Bitwise Instructions (AND / OR / XOR) |
1138 void n(Register r1, const MemOperand& opnd); | 1205 void n(Register r1, const MemOperand& opnd); |
1139 void ny(Register r1, const MemOperand& opnd); | 1206 void ny(Register r1, const MemOperand& opnd); |
1140 void nr(Register r1, Register r2); | |
1141 void nrk(Register r1, Register r2, Register r3); | 1207 void nrk(Register r1, Register r2, Register r3); |
1142 void ng(Register r1, const MemOperand& opnd); | 1208 void ng(Register r1, const MemOperand& opnd); |
1143 void ngr(Register r1, Register r2); | |
1144 void ngrk(Register r1, Register r2, Register r3); | 1209 void ngrk(Register r1, Register r2, Register r3); |
1145 void o(Register r1, const MemOperand& opnd); | 1210 void o(Register r1, const MemOperand& opnd); |
1146 void oy(Register r1, const MemOperand& opnd); | 1211 void oy(Register r1, const MemOperand& opnd); |
1147 void or_z(Register r1, Register r2); | |
1148 void ork(Register r1, Register r2, Register r3); | 1212 void ork(Register r1, Register r2, Register r3); |
1149 void og(Register r1, const MemOperand& opnd); | 1213 void og(Register r1, const MemOperand& opnd); |
1150 void ogr(Register r1, Register r2); | |
1151 void ogrk(Register r1, Register r2, Register r3); | 1214 void ogrk(Register r1, Register r2, Register r3); |
1152 void x(Register r1, const MemOperand& opnd); | 1215 void x(Register r1, const MemOperand& opnd); |
1153 void xy(Register r1, const MemOperand& opnd); | 1216 void xy(Register r1, const MemOperand& opnd); |
1154 void xr(Register r1, Register r2); | |
1155 void xrk(Register r1, Register r2, Register r3); | 1217 void xrk(Register r1, Register r2, Register r3); |
1156 void xg(Register r1, const MemOperand& opnd); | 1218 void xg(Register r1, const MemOperand& opnd); |
1157 void xgr(Register r1, Register r2); | |
1158 void xgrk(Register r1, Register r2, Register r3); | 1219 void xgrk(Register r1, Register r2, Register r3); |
1159 void xc(const MemOperand& opnd1, const MemOperand& opnd2, Length length); | 1220 void xc(const MemOperand& opnd1, const MemOperand& opnd2, Length length); |
1160 | 1221 |
1161 // Bitwise GPR <-> FPR Conversion Instructions | |
1162 void lgdr(Register r1, DoubleRegister f2); | |
1163 void ldgr(DoubleRegister f1, Register r2); | |
1164 | |
1165 // Floating Point Load / Store Instructions | 1222 // Floating Point Load / Store Instructions |
1166 void ld(DoubleRegister r1, const MemOperand& opnd); | 1223 void ld(DoubleRegister r1, const MemOperand& opnd); |
1167 void ldy(DoubleRegister r1, const MemOperand& opnd); | 1224 void ldy(DoubleRegister r1, const MemOperand& opnd); |
1168 void le_z(DoubleRegister r1, const MemOperand& opnd); | 1225 void le_z(DoubleRegister r1, const MemOperand& opnd); |
1169 void ley(DoubleRegister r1, const MemOperand& opnd); | 1226 void ley(DoubleRegister r1, const MemOperand& opnd); |
1170 void ldr(DoubleRegister r1, DoubleRegister r2); | |
1171 void ltdbr(DoubleRegister r1, DoubleRegister r2); | |
1172 void ltebr(DoubleRegister r1, DoubleRegister r2); | |
1173 void std(DoubleRegister r1, const MemOperand& opnd); | 1227 void std(DoubleRegister r1, const MemOperand& opnd); |
1174 void stdy(DoubleRegister r1, const MemOperand& opnd); | 1228 void stdy(DoubleRegister r1, const MemOperand& opnd); |
1175 void ste(DoubleRegister r1, const MemOperand& opnd); | 1229 void ste(DoubleRegister r1, const MemOperand& opnd); |
1176 void stey(DoubleRegister r1, const MemOperand& opnd); | 1230 void stey(DoubleRegister r1, const MemOperand& opnd); |
1177 | 1231 |
1178 // Floating Point Load Rounded/Positive Instructions | |
1179 void ledbr(DoubleRegister r1, DoubleRegister r2); | |
1180 void ldebr(DoubleRegister r1, DoubleRegister r2); | |
1181 void lpebr(DoubleRegister r1, DoubleRegister r2); | |
1182 void lpdbr(DoubleRegister r1, DoubleRegister r2); | |
1183 | |
1184 // Floating <-> Fixed Point Conversion Instructions | 1232 // Floating <-> Fixed Point Conversion Instructions |
1185 void cdlfbr(Condition m3, Condition m4, DoubleRegister fltReg, | 1233 void cdlfbr(Condition m3, Condition m4, DoubleRegister fltReg, |
1186 Register fixReg); | 1234 Register fixReg); |
1187 void cdlgbr(Condition m3, Condition m4, DoubleRegister fltReg, | 1235 void cdlgbr(Condition m3, Condition m4, DoubleRegister fltReg, |
1188 Register fixReg); | 1236 Register fixReg); |
1189 void celgbr(Condition m3, Condition m4, DoubleRegister fltReg, | 1237 void celgbr(Condition m3, Condition m4, DoubleRegister fltReg, |
1190 Register fixReg); | 1238 Register fixReg); |
1191 void celfbr(Condition m3, Condition m4, DoubleRegister fltReg, | 1239 void celfbr(Condition m3, Condition m4, DoubleRegister fltReg, |
1192 Register fixReg); | 1240 Register fixReg); |
1193 void clfdbr(Condition m3, Condition m4, Register fixReg, | 1241 void clfdbr(Condition m3, Condition m4, Register fixReg, |
1194 DoubleRegister fltReg); | 1242 DoubleRegister fltReg); |
1195 void clfebr(Condition m3, Condition m4, Register fixReg, | 1243 void clfebr(Condition m3, Condition m4, Register fixReg, |
1196 DoubleRegister fltReg); | 1244 DoubleRegister fltReg); |
1197 void clgdbr(Condition m3, Condition m4, Register fixReg, | 1245 void clgdbr(Condition m3, Condition m4, Register fixReg, |
1198 DoubleRegister fltReg); | 1246 DoubleRegister fltReg); |
1199 void clgebr(Condition m3, Condition m4, Register fixReg, | 1247 void clgebr(Condition m3, Condition m4, Register fixReg, |
1200 DoubleRegister fltReg); | 1248 DoubleRegister fltReg); |
1201 void cfdbr(Condition m, Register fixReg, DoubleRegister fltReg); | 1249 void cfdbr(Condition m, Register fixReg, DoubleRegister fltReg); |
1202 void cdfbr(DoubleRegister fltReg, Register fixReg); | |
1203 void cgebr(Condition m, Register fixReg, DoubleRegister fltReg); | 1250 void cgebr(Condition m, Register fixReg, DoubleRegister fltReg); |
1204 void cgdbr(Condition m, Register fixReg, DoubleRegister fltReg); | 1251 void cgdbr(Condition m, Register fixReg, DoubleRegister fltReg); |
1205 void cegbr(DoubleRegister fltReg, Register fixReg); | |
1206 void cdgbr(DoubleRegister fltReg, Register fixReg); | |
1207 void cfebr(Condition m3, Register fixReg, DoubleRegister fltReg); | 1252 void cfebr(Condition m3, Register fixReg, DoubleRegister fltReg); |
1208 void cefbr(Condition m3, DoubleRegister fltReg, Register fixReg); | 1253 void cefbr(Condition m3, DoubleRegister fltReg, Register fixReg); |
1209 | 1254 |
1210 // Floating Point Compare Instructions | 1255 // Floating Point Compare Instructions |
1211 void cebr(DoubleRegister r1, DoubleRegister r2); | |
1212 void cdb(DoubleRegister r1, const MemOperand& opnd); | 1256 void cdb(DoubleRegister r1, const MemOperand& opnd); |
1213 void cdbr(DoubleRegister r1, DoubleRegister r2); | |
1214 | 1257 |
1215 // Floating Point Arithmetic Instructions | 1258 // Floating Point Arithmetic Instructions |
1216 void aebr(DoubleRegister r1, DoubleRegister r2); | |
1217 void adb(DoubleRegister r1, const MemOperand& opnd); | 1259 void adb(DoubleRegister r1, const MemOperand& opnd); |
1218 void adbr(DoubleRegister r1, DoubleRegister r2); | |
1219 void lzdr(DoubleRegister r1); | |
1220 void sebr(DoubleRegister r1, DoubleRegister r2); | |
1221 void sdb(DoubleRegister r1, const MemOperand& opnd); | 1260 void sdb(DoubleRegister r1, const MemOperand& opnd); |
1222 void sdbr(DoubleRegister r1, DoubleRegister r2); | |
1223 void meebr(DoubleRegister r1, DoubleRegister r2); | |
1224 void mdb(DoubleRegister r1, const MemOperand& opnd); | 1261 void mdb(DoubleRegister r1, const MemOperand& opnd); |
1225 void mdbr(DoubleRegister r1, DoubleRegister r2); | |
1226 void debr(DoubleRegister r1, DoubleRegister r2); | |
1227 void ddb(DoubleRegister r1, const MemOperand& opnd); | 1262 void ddb(DoubleRegister r1, const MemOperand& opnd); |
1228 void ddbr(DoubleRegister r1, DoubleRegister r2); | |
1229 void madbr(DoubleRegister r1, DoubleRegister r2, DoubleRegister r3); | |
1230 void msdbr(DoubleRegister r1, DoubleRegister r2, DoubleRegister r3); | |
1231 void sqebr(DoubleRegister r1, DoubleRegister r2); | |
1232 void sqdb(DoubleRegister r1, const MemOperand& opnd); | 1263 void sqdb(DoubleRegister r1, const MemOperand& opnd); |
1233 void sqdbr(DoubleRegister r1, DoubleRegister r2); | |
1234 void lcdbr(DoubleRegister r1, DoubleRegister r2); | |
1235 void lcebr(DoubleRegister r1, DoubleRegister r2); | |
1236 void ldeb(DoubleRegister r1, const MemOperand& opnd); | 1264 void ldeb(DoubleRegister r1, const MemOperand& opnd); |
1237 | 1265 |
1238 enum FIDBRA_MASK3 { | 1266 enum FIDBRA_MASK3 { |
1239 FIDBRA_CURRENT_ROUNDING_MODE = 0, | 1267 FIDBRA_CURRENT_ROUNDING_MODE = 0, |
1240 FIDBRA_ROUND_TO_NEAREST_AWAY_FROM_0 = 1, | 1268 FIDBRA_ROUND_TO_NEAREST_AWAY_FROM_0 = 1, |
1241 // ... | 1269 // ... |
1242 FIDBRA_ROUND_TOWARD_0 = 5, | 1270 FIDBRA_ROUND_TOWARD_0 = 5, |
1243 FIDBRA_ROUND_TOWARD_POS_INF = 6, | 1271 FIDBRA_ROUND_TOWARD_POS_INF = 6, |
1244 FIDBRA_ROUND_TOWARD_NEG_INF = 7 | 1272 FIDBRA_ROUND_TOWARD_NEG_INF = 7 |
1245 }; | 1273 }; |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 Handle<Code> target, RelocInfo::Mode rmode, | 1436 Handle<Code> target, RelocInfo::Mode rmode, |
1409 TypeFeedbackId ast_id = TypeFeedbackId::None()); | 1437 TypeFeedbackId ast_id = TypeFeedbackId::None()); |
1410 | 1438 |
1411 // Helpers to emit binary encoding of 2/4/6 byte instructions. | 1439 // Helpers to emit binary encoding of 2/4/6 byte instructions. |
1412 inline void emit2bytes(uint16_t x); | 1440 inline void emit2bytes(uint16_t x); |
1413 inline void emit4bytes(uint32_t x); | 1441 inline void emit4bytes(uint32_t x); |
1414 inline void emit6bytes(uint64_t x); | 1442 inline void emit6bytes(uint64_t x); |
1415 | 1443 |
1416 // Helpers to emit binary encoding for various instruction formats. | 1444 // Helpers to emit binary encoding for various instruction formats. |
1417 | 1445 |
1418 inline void rr_form(Opcode op, Register r1, Register r2); | |
1419 inline void rr_form(Opcode op, DoubleRegister r1, DoubleRegister r2); | |
1420 inline void rr_form(Opcode op, Condition m1, Register r2); | |
1421 inline void rr2_form(uint8_t op, Condition m1, Register r2); | 1446 inline void rr2_form(uint8_t op, Condition m1, Register r2); |
1422 | 1447 |
1423 inline void rx_form(Opcode op, Register r1, Register x2, Register b2, | 1448 inline void rx_form(Opcode op, Register r1, Register x2, Register b2, |
1424 Disp d2); | 1449 Disp d2); |
1425 inline void rx_form(Opcode op, DoubleRegister r1, Register x2, Register b2, | 1450 inline void rx_form(Opcode op, DoubleRegister r1, Register x2, Register b2, |
1426 Disp d2); | 1451 Disp d2); |
1427 | 1452 |
1428 inline void ri_form(Opcode op, Register r1, const Operand& i2); | 1453 inline void ri_form(Opcode op, Register r1, const Operand& i2); |
1429 inline void ri_form(Opcode op, Condition m1, const Operand& i2); | 1454 inline void ri_form(Opcode op, Condition m1, const Operand& i2); |
1430 | 1455 |
1431 inline void rie_form(Opcode op, Register r1, Register r3, const Operand& i2); | 1456 inline void rie_form(Opcode op, Register r1, Register r3, const Operand& i2); |
1432 inline void rie_f_form(Opcode op, Register r1, Register r2, const Operand& i3, | 1457 inline void rie_f_form(Opcode op, Register r1, Register r2, const Operand& i3, |
1433 const Operand& i4, const Operand& i5); | 1458 const Operand& i4, const Operand& i5); |
1434 | 1459 |
1435 inline void ril_form(Opcode op, Register r1, const Operand& i2); | |
1436 inline void ril_form(Opcode op, Condition m1, const Operand& i2); | |
1437 | |
1438 inline void ris_form(Opcode op, Register r1, Condition m3, Register b4, | 1460 inline void ris_form(Opcode op, Register r1, Condition m3, Register b4, |
1439 Disp d4, const Operand& i2); | 1461 Disp d4, const Operand& i2); |
1440 | 1462 |
1441 inline void rrd_form(Opcode op, Register r1, Register r3, Register r2); | |
1442 | |
1443 inline void rre_form(Opcode op, Register r1, Register r2); | |
1444 inline void rre_form(Opcode op, DoubleRegister r1, DoubleRegister r2); | |
1445 | |
1446 inline void rrf1_form(Opcode op, Register r1, Register r2, Register r3); | 1463 inline void rrf1_form(Opcode op, Register r1, Register r2, Register r3); |
1447 inline void rrf1_form(uint32_t x); | 1464 inline void rrf1_form(uint32_t x); |
1448 inline void rrf2_form(uint32_t x); | 1465 inline void rrf2_form(uint32_t x); |
1449 inline void rrf3_form(uint32_t x); | 1466 inline void rrf3_form(uint32_t x); |
1450 inline void rrfe_form(Opcode op, Condition m3, Condition m4, Register r1, | 1467 inline void rrfe_form(Opcode op, Condition m3, Condition m4, Register r1, |
1451 Register r2); | 1468 Register r2); |
1452 | 1469 |
1453 inline void rrs_form(Opcode op, Register r1, Register r2, Register b4, | 1470 inline void rrs_form(Opcode op, Register r1, Register r2, Register b4, |
1454 Disp d4, Condition m3); | 1471 Disp d4, Condition m3); |
1455 | 1472 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 | 1531 |
1515 class EnsureSpace BASE_EMBEDDED { | 1532 class EnsureSpace BASE_EMBEDDED { |
1516 public: | 1533 public: |
1517 explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); } | 1534 explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); } |
1518 }; | 1535 }; |
1519 | 1536 |
1520 } // namespace internal | 1537 } // namespace internal |
1521 } // namespace v8 | 1538 } // namespace v8 |
1522 | 1539 |
1523 #endif // V8_S390_ASSEMBLER_S390_H_ | 1540 #endif // V8_S390_ASSEMBLER_S390_H_ |
OLD | NEW |