Commit f6548c0a4b751852b9dcb341e3974e049a45a518
1 parent
4f4a67ae
PPC 32/64 GUEST_BASE support
Signed-off-by: malc <av1474@comtv.ru>
Showing
5 changed files
with
130 additions
and
41 deletions
configure
tcg/ppc/tcg-target.c
... | ... | @@ -42,6 +42,16 @@ static uint8_t *tb_ret_addr; |
42 | 42 | #define ADDEND_OFFSET 4 |
43 | 43 | #endif |
44 | 44 | |
45 | +#ifndef GUEST_BASE | |
46 | +#define GUEST_BASE 0 | |
47 | +#endif | |
48 | + | |
49 | +#ifdef CONFIG_USE_GUEST_BASE | |
50 | +#define TCG_GUEST_BASE_REG 30 | |
51 | +#else | |
52 | +#define TCG_GUEST_BASE_REG 0 | |
53 | +#endif | |
54 | + | |
45 | 55 | #ifndef NDEBUG |
46 | 56 | static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { |
47 | 57 | "r0", |
... | ... | @@ -501,7 +511,7 @@ static void *qemu_st_helpers[4] = { |
501 | 511 | |
502 | 512 | static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
503 | 513 | { |
504 | - int addr_reg, data_reg, data_reg2, r0, r1, mem_index, s_bits, bswap; | |
514 | + int addr_reg, data_reg, data_reg2, r0, r1, rbase, mem_index, s_bits, bswap; | |
505 | 515 | #ifdef CONFIG_SOFTMMU |
506 | 516 | int r2; |
507 | 517 | void *label1_ptr, *label2_ptr; |
... | ... | @@ -526,6 +536,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
526 | 536 | r0 = 3; |
527 | 537 | r1 = 4; |
528 | 538 | r2 = 0; |
539 | + rbase = 0; | |
529 | 540 | |
530 | 541 | tcg_out32 (s, (RLWINM |
531 | 542 | | RA (r0) |
... | ... | @@ -631,6 +642,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
631 | 642 | #else /* !CONFIG_SOFTMMU */ |
632 | 643 | r0 = addr_reg; |
633 | 644 | r1 = 3; |
645 | + rbase = GUEST_BASE ? TCG_GUEST_BASE_REG : 0; | |
634 | 646 | #endif |
635 | 647 | |
636 | 648 | #ifdef TARGET_WORDS_BIGENDIAN |
... | ... | @@ -638,37 +650,47 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
638 | 650 | #else |
639 | 651 | bswap = 1; |
640 | 652 | #endif |
653 | + | |
641 | 654 | switch (opc) { |
642 | 655 | default: |
643 | 656 | case 0: |
644 | - tcg_out32 (s, LBZ | RT (data_reg) | RA (r0)); | |
657 | + tcg_out32 (s, LBZX | TAB (data_reg, rbase, r0)); | |
645 | 658 | break; |
646 | 659 | case 0|4: |
647 | - tcg_out32 (s, LBZ | RT (data_reg) | RA (r0)); | |
660 | + tcg_out32 (s, LBZX | TAB (data_reg, rbase, r0)); | |
648 | 661 | tcg_out32 (s, EXTSB | RA (data_reg) | RS (data_reg)); |
649 | 662 | break; |
650 | 663 | case 1: |
651 | - if (bswap) tcg_out32 (s, LHBRX | RT (data_reg) | RB (r0)); | |
652 | - else tcg_out32 (s, LHZ | RT (data_reg) | RA (r0)); | |
664 | + if (bswap) | |
665 | + tcg_out32 (s, LHBRX | TAB (data_reg, rbase, r0)); | |
666 | + else | |
667 | + tcg_out32 (s, LHZX | TAB (data_reg, rbase, r0)); | |
653 | 668 | break; |
654 | 669 | case 1|4: |
655 | 670 | if (bswap) { |
656 | - tcg_out32 (s, LHBRX | RT (data_reg) | RB (r0)); | |
671 | + tcg_out32 (s, LHBRX | TAB (data_reg, rbase, r0)); | |
657 | 672 | tcg_out32 (s, EXTSH | RA (data_reg) | RS (data_reg)); |
658 | 673 | } |
659 | - else tcg_out32 (s, LHA | RT (data_reg) | RA (r0)); | |
674 | + else tcg_out32 (s, LHAX | TAB (data_reg, rbase, r0)); | |
660 | 675 | break; |
661 | 676 | case 2: |
662 | - if (bswap) tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0)); | |
663 | - else tcg_out32 (s, LWZ | RT (data_reg)| RA (r0)); | |
677 | + if (bswap) | |
678 | + tcg_out32 (s, LWBRX | TAB (data_reg, rbase, r0)); | |
679 | + else | |
680 | + tcg_out32 (s, LWZX | TAB (data_reg, rbase, r0)); | |
664 | 681 | break; |
665 | 682 | case 3: |
666 | 683 | if (bswap) { |
667 | - tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); | |
668 | - tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0)); | |
669 | - tcg_out32 (s, LWBRX | RT (data_reg2) | RB (r1)); | |
684 | + tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); | |
685 | + tcg_out32 (s, LWBRX | TAB (data_reg, rbase, r0)); | |
686 | + tcg_out32 (s, LWBRX | TAB (data_reg2, rbase, r1)); | |
670 | 687 | } |
671 | 688 | else { |
689 | +#ifdef CONFIG_USE_GUEST_BASE | |
690 | + tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); | |
691 | + tcg_out32 (s, LWZX | TAB (data_reg2, rbase, r0)); | |
692 | + tcg_out32 (s, LWZX | TAB (data_reg, rbase, r1)); | |
693 | +#else | |
672 | 694 | if (r0 == data_reg2) { |
673 | 695 | tcg_out32 (s, LWZ | RT (0) | RA (r0)); |
674 | 696 | tcg_out32 (s, LWZ | RT (data_reg) | RA (r0) | 4); |
... | ... | @@ -678,6 +700,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
678 | 700 | tcg_out32 (s, LWZ | RT (data_reg2) | RA (r0)); |
679 | 701 | tcg_out32 (s, LWZ | RT (data_reg) | RA (r0) | 4); |
680 | 702 | } |
703 | +#endif | |
681 | 704 | } |
682 | 705 | break; |
683 | 706 | } |
... | ... | @@ -689,7 +712,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
689 | 712 | |
690 | 713 | static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
691 | 714 | { |
692 | - int addr_reg, r0, r1, data_reg, data_reg2, mem_index, bswap; | |
715 | + int addr_reg, r0, r1, data_reg, data_reg2, mem_index, bswap, rbase; | |
693 | 716 | #ifdef CONFIG_SOFTMMU |
694 | 717 | int r2, ir; |
695 | 718 | void *label1_ptr, *label2_ptr; |
... | ... | @@ -713,6 +736,7 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
713 | 736 | r0 = 3; |
714 | 737 | r1 = 4; |
715 | 738 | r2 = 0; |
739 | + rbase = 0; | |
716 | 740 | |
717 | 741 | tcg_out32 (s, (RLWINM |
718 | 742 | | RA (r0) |
... | ... | @@ -819,8 +843,9 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
819 | 843 | /* r0 = env->tlb_table[mem_index][index].addend + addr */ |
820 | 844 | |
821 | 845 | #else /* !CONFIG_SOFTMMU */ |
822 | - r1 = 3; | |
823 | 846 | r0 = addr_reg; |
847 | + r1 = 3; | |
848 | + rbase = GUEST_BASE ? rbase : 0; | |
824 | 849 | #endif |
825 | 850 | |
826 | 851 | #ifdef TARGET_WORDS_BIGENDIAN |
... | ... | @@ -830,25 +855,35 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
830 | 855 | #endif |
831 | 856 | switch (opc) { |
832 | 857 | case 0: |
833 | - tcg_out32 (s, STB | RS (data_reg) | RA (r0)); | |
858 | + tcg_out32 (s, STBX | SAB (data_reg, rbase, r0)); | |
834 | 859 | break; |
835 | 860 | case 1: |
836 | - if (bswap) tcg_out32 (s, STHBRX | RS (data_reg) | RA (0) | RB (r0)); | |
837 | - else tcg_out32 (s, STH | RS (data_reg) | RA (r0)); | |
861 | + if (bswap) | |
862 | + tcg_out32 (s, STHBRX | SAB (data_reg, rbase, r0)); | |
863 | + else | |
864 | + tcg_out32 (s, STHX | SAB (data_reg, rbase, r0)); | |
838 | 865 | break; |
839 | 866 | case 2: |
840 | - if (bswap) tcg_out32 (s, STWBRX | RS (data_reg) | RA (0) | RB (r0)); | |
841 | - else tcg_out32 (s, STW | RS (data_reg) | RA (r0)); | |
867 | + if (bswap) | |
868 | + tcg_out32 (s, STWBRX | SAB (data_reg, rbase, r0)); | |
869 | + else | |
870 | + tcg_out32 (s, STWX | SAB (data_reg, rbase, r0)); | |
842 | 871 | break; |
843 | 872 | case 3: |
844 | 873 | if (bswap) { |
845 | 874 | tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); |
846 | - tcg_out32 (s, STWBRX | RS (data_reg) | RA (0) | RB (r0)); | |
847 | - tcg_out32 (s, STWBRX | RS (data_reg2) | RA (0) | RB (r1)); | |
875 | + tcg_out32 (s, STWBRX | SAB (data_reg, rbase, r0)); | |
876 | + tcg_out32 (s, STWBRX | SAB (data_reg2, rbase, r1)); | |
848 | 877 | } |
849 | 878 | else { |
879 | +#ifdef CONFIG_USE_GUEST_BASE | |
880 | + tcg_out32 (s, STWX | SAB (data_reg2, rbase, r0)); | |
881 | + tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); | |
882 | + tcg_out32 (s, STWX | SAB (data_reg, rbase, r1)); | |
883 | +#else | |
850 | 884 | tcg_out32 (s, STW | RS (data_reg2) | RA (r0)); |
851 | 885 | tcg_out32 (s, STW | RS (data_reg) | RA (r0) | 4); |
886 | +#endif | |
852 | 887 | } |
853 | 888 | break; |
854 | 889 | } |
... | ... | @@ -890,6 +925,10 @@ void tcg_target_qemu_prologue (TCGContext *s) |
890 | 925 | ); |
891 | 926 | tcg_out32 (s, STW | RS (0) | RA (1) | (frame_size + LR_OFFSET)); |
892 | 927 | |
928 | +#ifdef CONFIG_USE_GUEST_BASE | |
929 | + tcg_out_movi (s, TCG_TYPE_I32, TCG_GUEST_BASE_REG, GUEST_BASE); | |
930 | +#endif | |
931 | + | |
893 | 932 | tcg_out32 (s, MTSPR | RS (3) | CTR); |
894 | 933 | tcg_out32 (s, BCCTR | BO_ALWAYS); |
895 | 934 | tb_ret_addr = s->code_ptr; |
... | ... | @@ -1532,6 +1571,9 @@ void tcg_target_init(TCGContext *s) |
1532 | 1571 | #ifdef __linux__ |
1533 | 1572 | tcg_regset_set_reg(s->reserved_regs, TCG_REG_R13); |
1534 | 1573 | #endif |
1574 | +#ifdef CONFIG_USE_GUEST_BASE | |
1575 | + tcg_regset_set_reg(s->reserved_regs, TCG_GUEST_BASE_REG); | |
1576 | +#endif | |
1535 | 1577 | |
1536 | 1578 | tcg_add_target_add_op_defs(ppc_op_defs); |
1537 | 1579 | } | ... | ... |
tcg/ppc/tcg-target.h
tcg/ppc64/tcg-target.c
... | ... | @@ -42,6 +42,16 @@ static uint8_t *tb_ret_addr; |
42 | 42 | #define CMP_L (1<<21) |
43 | 43 | #endif |
44 | 44 | |
45 | +#ifndef GUEST_BASE | |
46 | +#define GUEST_BASE 0 | |
47 | +#endif | |
48 | + | |
49 | +#ifdef CONFIG_USE_GUEST_BASE | |
50 | +#define TCG_GUEST_BASE_REG 30 | |
51 | +#else | |
52 | +#define TCG_GUEST_BASE_REG 0 | |
53 | +#endif | |
54 | + | |
45 | 55 | #ifndef NDEBUG |
46 | 56 | static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { |
47 | 57 | "r0", |
... | ... | @@ -588,7 +598,7 @@ static void tcg_out_tlb_read (TCGContext *s, int r0, int r1, int r2, |
588 | 598 | |
589 | 599 | static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
590 | 600 | { |
591 | - int addr_reg, data_reg, r0, r1, mem_index, s_bits, bswap; | |
601 | + int addr_reg, data_reg, r0, r1, rbase, mem_index, s_bits, bswap; | |
592 | 602 | #ifdef CONFIG_SOFTMMU |
593 | 603 | int r2; |
594 | 604 | void *label1_ptr, *label2_ptr; |
... | ... | @@ -603,6 +613,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
603 | 613 | r0 = 3; |
604 | 614 | r1 = 4; |
605 | 615 | r2 = 0; |
616 | + rbase = 0; | |
606 | 617 | |
607 | 618 | tcg_out_tlb_read (s, r0, r1, r2, addr_reg, s_bits, |
608 | 619 | offsetof (CPUState, tlb_table[mem_index][0].addr_read)); |
... | ... | @@ -663,6 +674,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
663 | 674 | #endif |
664 | 675 | r0 = addr_reg; |
665 | 676 | r1 = 3; |
677 | + rbase = GUEST_BASE ? TCG_GUEST_BASE_REG : 0; | |
666 | 678 | #endif |
667 | 679 | |
668 | 680 | #ifdef TARGET_WORDS_BIGENDIAN |
... | ... | @@ -673,35 +685,48 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
673 | 685 | switch (opc) { |
674 | 686 | default: |
675 | 687 | case 0: |
676 | - tcg_out32 (s, LBZ | RT (data_reg) | RA (r0)); | |
688 | + tcg_out32 (s, LBZX | TAB (data_reg, rbase, r0)); | |
677 | 689 | break; |
678 | 690 | case 0|4: |
679 | - tcg_out32 (s, LBZ | RT (data_reg) | RA (r0)); | |
691 | + tcg_out32 (s, LBZX | TAB (data_reg, rbase, r0)); | |
680 | 692 | tcg_out32 (s, EXTSB | RA (data_reg) | RS (data_reg)); |
681 | 693 | break; |
682 | 694 | case 1: |
683 | - if (bswap) tcg_out32 (s, LHBRX | RT (data_reg) | RB (r0)); | |
684 | - else tcg_out32 (s, LHZ | RT (data_reg) | RA (r0)); | |
695 | + if (bswap) | |
696 | + tcg_out32 (s, LHBRX | TAB (data_reg, rbase, r0)); | |
697 | + else | |
698 | + tcg_out32 (s, LHZX | TAB (data_reg, rbase, r0)); | |
685 | 699 | break; |
686 | 700 | case 1|4: |
687 | 701 | if (bswap) { |
688 | - tcg_out32 (s, LHBRX | RT (data_reg) | RB (r0)); | |
702 | + tcg_out32 (s, LHBRX | TAB (data_reg, rbase, r0)); | |
689 | 703 | tcg_out32 (s, EXTSH | RA (data_reg) | RS (data_reg)); |
690 | 704 | } |
691 | - else tcg_out32 (s, LHA | RT (data_reg) | RA (r0)); | |
705 | + else tcg_out32 (s, LHAX | TAB (data_reg, rbase, r0)); | |
692 | 706 | break; |
693 | 707 | case 2: |
694 | - if (bswap) tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0)); | |
695 | - else tcg_out32 (s, LWZ | RT (data_reg)| RA (r0)); | |
708 | + if (bswap) | |
709 | + tcg_out32 (s, LWBRX | TAB (data_reg, rbase, r0)); | |
710 | + else | |
711 | + tcg_out32 (s, LWZX | TAB (data_reg, rbase, r0)); | |
696 | 712 | break; |
697 | 713 | case 2|4: |
698 | 714 | if (bswap) { |
699 | - tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0)); | |
715 | + tcg_out32 (s, LWBRX | TAB (data_reg, rbase, r0)); | |
700 | 716 | tcg_out32 (s, EXTSW | RA (data_reg) | RS (data_reg)); |
701 | 717 | } |
702 | - else tcg_out32 (s, LWA | RT (data_reg)| RA (r0)); | |
718 | + else tcg_out32 (s, LWAX | TAB (data_reg, rbase, r0)); | |
703 | 719 | break; |
704 | 720 | case 3: |
721 | +#ifdef CONFIG_USE_GUEST_BASE | |
722 | + if (bswap) { | |
723 | + tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); | |
724 | + tcg_out32 (s, LWBRX | TAB (data_reg, rbase, r0)); | |
725 | + tcg_out32 (s, LWBRX | TAB ( r1, rbase, r1)); | |
726 | + tcg_out_rld (s, RLDIMI, data_reg, r1, 32, 0); | |
727 | + } | |
728 | + else tcg_out32 (s, LDX | TAB (data_reg, rbase, r0)); | |
729 | +#else | |
705 | 730 | if (bswap) { |
706 | 731 | tcg_out_movi32 (s, 0, 4); |
707 | 732 | tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0)); |
... | ... | @@ -709,6 +734,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
709 | 734 | tcg_out_rld (s, RLDIMI, data_reg, r1, 32, 0); |
710 | 735 | } |
711 | 736 | else tcg_out32 (s, LD | RT (data_reg) | RA (r0)); |
737 | +#endif | |
712 | 738 | break; |
713 | 739 | } |
714 | 740 | |
... | ... | @@ -719,7 +745,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc) |
719 | 745 | |
720 | 746 | static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
721 | 747 | { |
722 | - int addr_reg, r0, r1, data_reg, mem_index, bswap; | |
748 | + int addr_reg, r0, r1, rbase, data_reg, mem_index, bswap; | |
723 | 749 | #ifdef CONFIG_SOFTMMU |
724 | 750 | int r2; |
725 | 751 | void *label1_ptr, *label2_ptr; |
... | ... | @@ -733,6 +759,7 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
733 | 759 | r0 = 3; |
734 | 760 | r1 = 4; |
735 | 761 | r2 = 0; |
762 | + rbase = 0; | |
736 | 763 | |
737 | 764 | tcg_out_tlb_read (s, r0, r1, r2, addr_reg, opc, |
738 | 765 | offsetof (CPUState, tlb_table[mem_index][0].addr_write)); |
... | ... | @@ -775,6 +802,7 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
775 | 802 | #endif |
776 | 803 | r1 = 3; |
777 | 804 | r0 = addr_reg; |
805 | + rbase = GUEST_BASE ? TCG_GUEST_BASE_REG : 0; | |
778 | 806 | #endif |
779 | 807 | |
780 | 808 | #ifdef TARGET_WORDS_BIGENDIAN |
... | ... | @@ -784,24 +812,28 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc) |
784 | 812 | #endif |
785 | 813 | switch (opc) { |
786 | 814 | case 0: |
787 | - tcg_out32 (s, STB | RS (data_reg) | RA (r0)); | |
815 | + tcg_out32 (s, STBX | SAB (data_reg, rbase, r0)); | |
788 | 816 | break; |
789 | 817 | case 1: |
790 | - if (bswap) tcg_out32 (s, STHBRX | RS (data_reg) | RA (0) | RB (r0)); | |
791 | - else tcg_out32 (s, STH | RS (data_reg) | RA (r0)); | |
818 | + if (bswap) | |
819 | + tcg_out32 (s, STHBRX | SAB (data_reg, rbase, r0)); | |
820 | + else | |
821 | + tcg_out32 (s, STHX | SAB (data_reg, rbase, r0)); | |
792 | 822 | break; |
793 | 823 | case 2: |
794 | - if (bswap) tcg_out32 (s, STWBRX | RS (data_reg) | RA (0) | RB (r0)); | |
795 | - else tcg_out32 (s, STW | RS (data_reg) | RA (r0)); | |
824 | + if (bswap) | |
825 | + tcg_out32 (s, STWBRX | SAB (data_reg, rbase, r0)); | |
826 | + else | |
827 | + tcg_out32 (s, STWX | SAB (data_reg, rbase, r0)); | |
796 | 828 | break; |
797 | 829 | case 3: |
798 | 830 | if (bswap) { |
799 | - tcg_out32 (s, STWBRX | RS (data_reg) | RA (0) | RB (r0)); | |
831 | + tcg_out32 (s, STWBRX | SAB (data_reg, rbase, r0)); | |
800 | 832 | tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4); |
801 | 833 | tcg_out_rld (s, RLDICL, 0, data_reg, 32, 0); |
802 | - tcg_out32 (s, STWBRX | RS (0) | RA (0) | RB (r1)); | |
834 | + tcg_out32 (s, STWBRX | SAB (0, rbase, r1)); | |
803 | 835 | } |
804 | - else tcg_out32 (s, STD | RS (data_reg) | RA (r0)); | |
836 | + else tcg_out32 (s, STDX | SAB (data_reg, rbase, r0)); | |
805 | 837 | break; |
806 | 838 | } |
807 | 839 | |
... | ... | @@ -844,6 +876,10 @@ void tcg_target_qemu_prologue (TCGContext *s) |
844 | 876 | ); |
845 | 877 | tcg_out32 (s, STD | RS (0) | RA (1) | (frame_size + 16)); |
846 | 878 | |
879 | +#ifdef CONFIG_USE_GUEST_BASE | |
880 | + tcg_out_movi (s, TCG_TYPE_I64, TCG_GUEST_BASE_REG, GUEST_BASE); | |
881 | +#endif | |
882 | + | |
847 | 883 | tcg_out32 (s, MTSPR | RS (3) | CTR); |
848 | 884 | tcg_out32 (s, BCCTR | BO_ALWAYS); |
849 | 885 | |
... | ... | @@ -1498,5 +1534,9 @@ void tcg_target_init (TCGContext *s) |
1498 | 1534 | tcg_regset_set_reg (s->reserved_regs, TCG_REG_R2); |
1499 | 1535 | tcg_regset_set_reg (s->reserved_regs, TCG_REG_R13); |
1500 | 1536 | |
1537 | +#ifdef CONFIG_USE_GUEST_BASE | |
1538 | + tcg_regset_set_reg(s->reserved_regs, TCG_GUEST_BASE_REG); | |
1539 | +#endif | |
1540 | + | |
1501 | 1541 | tcg_add_target_add_op_defs (ppc_op_defs); |
1502 | 1542 | } | ... | ... |