Commit 2382dc6b9b1bd130f16330965a9163681e786cd9
1 parent
8ef6367e
Fix floating point register decoding
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3742 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
139 additions
and
141 deletions
target-sparc/translate.c
... | ... | @@ -440,11 +440,10 @@ static inline void gen_st_asi(int insn, int size) |
440 | 440 | } |
441 | 441 | } |
442 | 442 | |
443 | -static inline void gen_ldf_asi(int insn, int size) | |
443 | +static inline void gen_ldf_asi(int insn, int size, int rd) | |
444 | 444 | { |
445 | - int asi, offset, rd; | |
445 | + int asi, offset; | |
446 | 446 | |
447 | - rd = DFPREG(GET_FIELD(insn, 2, 6)); | |
448 | 447 | if (IS_IMM) { |
449 | 448 | offset = GET_FIELD(insn, 25, 31); |
450 | 449 | gen_op_ldf_asi_reg(offset, size, rd); |
... | ... | @@ -454,11 +453,10 @@ static inline void gen_ldf_asi(int insn, int size) |
454 | 453 | } |
455 | 454 | } |
456 | 455 | |
457 | -static inline void gen_stf_asi(int insn, int size) | |
456 | +static inline void gen_stf_asi(int insn, int size, int rd) | |
458 | 457 | { |
459 | - int asi, offset, rd; | |
458 | + int asi, offset; | |
460 | 459 | |
461 | - rd = DFPREG(GET_FIELD(insn, 2, 6)); | |
462 | 460 | if (IS_IMM) { |
463 | 461 | offset = GET_FIELD(insn, 25, 31); |
464 | 462 | gen_op_stf_asi_reg(offset, size, rd); |
... | ... | @@ -1571,7 +1569,7 @@ static void disas_sparc_insn(DisasContext * dc) |
1571 | 1569 | gen_op_load_fpr_DT0(DFPREG(rs1)); |
1572 | 1570 | gen_op_load_fpr_DT1(DFPREG(rs2)); |
1573 | 1571 | gen_op_fmuld(); |
1574 | - gen_op_store_DT0_fpr(rd); | |
1572 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1575 | 1573 | break; |
1576 | 1574 | case 0x4b: /* fmulq */ |
1577 | 1575 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1692,7 +1690,7 @@ static void disas_sparc_insn(DisasContext * dc) |
1692 | 1690 | gen_op_store_FT0_fpr(rd); |
1693 | 1691 | break; |
1694 | 1692 | case 0xd2: |
1695 | - gen_op_load_fpr_DT1(rs2); | |
1693 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1696 | 1694 | gen_op_fdtoi(); |
1697 | 1695 | gen_op_store_FT0_fpr(rd); |
1698 | 1696 | break; |
... | ... | @@ -1812,14 +1810,14 @@ static void disas_sparc_insn(DisasContext * dc) |
1812 | 1810 | break; |
1813 | 1811 | } else if ((xop & 0x11f) == 0x006) { // V9 fmovdr |
1814 | 1812 | cond = GET_FIELD_SP(insn, 14, 17); |
1815 | - gen_op_load_fpr_DT0(rd); | |
1816 | - gen_op_load_fpr_DT1(rs2); | |
1813 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1814 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1817 | 1815 | flush_T2(dc); |
1818 | 1816 | rs1 = GET_FIELD(insn, 13, 17); |
1819 | 1817 | gen_movl_reg_T0(rs1); |
1820 | 1818 | gen_cond_reg(cond); |
1821 | 1819 | gen_op_fmovs_cc(); |
1822 | - gen_op_store_DT0_fpr(rd); | |
1820 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1823 | 1821 | break; |
1824 | 1822 | } else if ((xop & 0x11f) == 0x007) { // V9 fmovqr |
1825 | 1823 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1851,12 +1849,12 @@ static void disas_sparc_insn(DisasContext * dc) |
1851 | 1849 | break; |
1852 | 1850 | case 0x002: /* V9 fmovdcc %fcc0 */ |
1853 | 1851 | cond = GET_FIELD_SP(insn, 14, 17); |
1854 | - gen_op_load_fpr_DT0(rd); | |
1855 | - gen_op_load_fpr_DT1(rs2); | |
1852 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1853 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1856 | 1854 | flush_T2(dc); |
1857 | 1855 | gen_fcond[0][cond](); |
1858 | 1856 | gen_op_fmovd_cc(); |
1859 | - gen_op_store_DT0_fpr(rd); | |
1857 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1860 | 1858 | break; |
1861 | 1859 | case 0x003: /* V9 fmovqcc %fcc0 */ |
1862 | 1860 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1882,12 +1880,12 @@ static void disas_sparc_insn(DisasContext * dc) |
1882 | 1880 | break; |
1883 | 1881 | case 0x042: /* V9 fmovdcc %fcc1 */ |
1884 | 1882 | cond = GET_FIELD_SP(insn, 14, 17); |
1885 | - gen_op_load_fpr_DT0(rd); | |
1886 | - gen_op_load_fpr_DT1(rs2); | |
1883 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1884 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1887 | 1885 | flush_T2(dc); |
1888 | 1886 | gen_fcond[1][cond](); |
1889 | 1887 | gen_op_fmovd_cc(); |
1890 | - gen_op_store_DT0_fpr(rd); | |
1888 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1891 | 1889 | break; |
1892 | 1890 | case 0x043: /* V9 fmovqcc %fcc1 */ |
1893 | 1891 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1913,12 +1911,12 @@ static void disas_sparc_insn(DisasContext * dc) |
1913 | 1911 | break; |
1914 | 1912 | case 0x082: /* V9 fmovdcc %fcc2 */ |
1915 | 1913 | cond = GET_FIELD_SP(insn, 14, 17); |
1916 | - gen_op_load_fpr_DT0(rd); | |
1917 | - gen_op_load_fpr_DT1(rs2); | |
1914 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1915 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1918 | 1916 | flush_T2(dc); |
1919 | 1917 | gen_fcond[2][cond](); |
1920 | 1918 | gen_op_fmovd_cc(); |
1921 | - gen_op_store_DT0_fpr(rd); | |
1919 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1922 | 1920 | break; |
1923 | 1921 | case 0x083: /* V9 fmovqcc %fcc2 */ |
1924 | 1922 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1944,12 +1942,12 @@ static void disas_sparc_insn(DisasContext * dc) |
1944 | 1942 | break; |
1945 | 1943 | case 0x0c2: /* V9 fmovdcc %fcc3 */ |
1946 | 1944 | cond = GET_FIELD_SP(insn, 14, 17); |
1947 | - gen_op_load_fpr_DT0(rd); | |
1948 | - gen_op_load_fpr_DT1(rs2); | |
1945 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1946 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1949 | 1947 | flush_T2(dc); |
1950 | 1948 | gen_fcond[3][cond](); |
1951 | 1949 | gen_op_fmovd_cc(); |
1952 | - gen_op_store_DT0_fpr(rd); | |
1950 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1953 | 1951 | break; |
1954 | 1952 | case 0x0c3: /* V9 fmovqcc %fcc3 */ |
1955 | 1953 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -1975,12 +1973,12 @@ static void disas_sparc_insn(DisasContext * dc) |
1975 | 1973 | break; |
1976 | 1974 | case 0x102: /* V9 fmovdcc %icc */ |
1977 | 1975 | cond = GET_FIELD_SP(insn, 14, 17); |
1978 | - gen_op_load_fpr_DT0(rd); | |
1979 | - gen_op_load_fpr_DT1(rs2); | |
1976 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
1977 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
1980 | 1978 | flush_T2(dc); |
1981 | 1979 | gen_cond[0][cond](); |
1982 | 1980 | gen_op_fmovd_cc(); |
1983 | - gen_op_store_DT0_fpr(rd); | |
1981 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
1984 | 1982 | break; |
1985 | 1983 | case 0x103: /* V9 fmovqcc %icc */ |
1986 | 1984 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -2006,12 +2004,12 @@ static void disas_sparc_insn(DisasContext * dc) |
2006 | 2004 | break; |
2007 | 2005 | case 0x182: /* V9 fmovdcc %xcc */ |
2008 | 2006 | cond = GET_FIELD_SP(insn, 14, 17); |
2009 | - gen_op_load_fpr_DT0(rd); | |
2010 | - gen_op_load_fpr_DT1(rs2); | |
2007 | + gen_op_load_fpr_DT0(DFPREG(rd)); | |
2008 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2011 | 2009 | flush_T2(dc); |
2012 | 2010 | gen_cond[1][cond](); |
2013 | 2011 | gen_op_fmovd_cc(); |
2014 | - gen_op_store_DT0_fpr(rd); | |
2012 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2015 | 2013 | break; |
2016 | 2014 | case 0x183: /* V9 fmovqcc %xcc */ |
2017 | 2015 | #if defined(CONFIG_USER_ONLY) |
... | ... | @@ -2668,94 +2666,94 @@ static void disas_sparc_insn(DisasContext * dc) |
2668 | 2666 | // XXX |
2669 | 2667 | goto illegal_insn; |
2670 | 2668 | case 0x020: /* VIS I fcmple16 */ |
2671 | - gen_op_load_fpr_DT0(rs1); | |
2672 | - gen_op_load_fpr_DT1(rs2); | |
2669 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2670 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2673 | 2671 | gen_op_fcmple16(); |
2674 | - gen_op_store_DT0_fpr(rd); | |
2672 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2675 | 2673 | break; |
2676 | 2674 | case 0x022: /* VIS I fcmpne16 */ |
2677 | - gen_op_load_fpr_DT0(rs1); | |
2678 | - gen_op_load_fpr_DT1(rs2); | |
2675 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2676 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2679 | 2677 | gen_op_fcmpne16(); |
2680 | - gen_op_store_DT0_fpr(rd); | |
2678 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2681 | 2679 | break; |
2682 | 2680 | case 0x024: /* VIS I fcmple32 */ |
2683 | - gen_op_load_fpr_DT0(rs1); | |
2684 | - gen_op_load_fpr_DT1(rs2); | |
2681 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2682 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2685 | 2683 | gen_op_fcmple32(); |
2686 | - gen_op_store_DT0_fpr(rd); | |
2684 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2687 | 2685 | break; |
2688 | 2686 | case 0x026: /* VIS I fcmpne32 */ |
2689 | - gen_op_load_fpr_DT0(rs1); | |
2690 | - gen_op_load_fpr_DT1(rs2); | |
2687 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2688 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2691 | 2689 | gen_op_fcmpne32(); |
2692 | - gen_op_store_DT0_fpr(rd); | |
2690 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2693 | 2691 | break; |
2694 | 2692 | case 0x028: /* VIS I fcmpgt16 */ |
2695 | - gen_op_load_fpr_DT0(rs1); | |
2696 | - gen_op_load_fpr_DT1(rs2); | |
2693 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2694 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2697 | 2695 | gen_op_fcmpgt16(); |
2698 | - gen_op_store_DT0_fpr(rd); | |
2696 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2699 | 2697 | break; |
2700 | 2698 | case 0x02a: /* VIS I fcmpeq16 */ |
2701 | - gen_op_load_fpr_DT0(rs1); | |
2702 | - gen_op_load_fpr_DT1(rs2); | |
2699 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2700 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2703 | 2701 | gen_op_fcmpeq16(); |
2704 | - gen_op_store_DT0_fpr(rd); | |
2702 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2705 | 2703 | break; |
2706 | 2704 | case 0x02c: /* VIS I fcmpgt32 */ |
2707 | - gen_op_load_fpr_DT0(rs1); | |
2708 | - gen_op_load_fpr_DT1(rs2); | |
2705 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2706 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2709 | 2707 | gen_op_fcmpgt32(); |
2710 | - gen_op_store_DT0_fpr(rd); | |
2708 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2711 | 2709 | break; |
2712 | 2710 | case 0x02e: /* VIS I fcmpeq32 */ |
2713 | - gen_op_load_fpr_DT0(rs1); | |
2714 | - gen_op_load_fpr_DT1(rs2); | |
2711 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2712 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2715 | 2713 | gen_op_fcmpeq32(); |
2716 | - gen_op_store_DT0_fpr(rd); | |
2714 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2717 | 2715 | break; |
2718 | 2716 | case 0x031: /* VIS I fmul8x16 */ |
2719 | - gen_op_load_fpr_DT0(rs1); | |
2720 | - gen_op_load_fpr_DT1(rs2); | |
2717 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2718 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2721 | 2719 | gen_op_fmul8x16(); |
2722 | - gen_op_store_DT0_fpr(rd); | |
2720 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2723 | 2721 | break; |
2724 | 2722 | case 0x033: /* VIS I fmul8x16au */ |
2725 | - gen_op_load_fpr_DT0(rs1); | |
2726 | - gen_op_load_fpr_DT1(rs2); | |
2723 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2724 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2727 | 2725 | gen_op_fmul8x16au(); |
2728 | - gen_op_store_DT0_fpr(rd); | |
2726 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2729 | 2727 | break; |
2730 | 2728 | case 0x035: /* VIS I fmul8x16al */ |
2731 | - gen_op_load_fpr_DT0(rs1); | |
2732 | - gen_op_load_fpr_DT1(rs2); | |
2729 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2730 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2733 | 2731 | gen_op_fmul8x16al(); |
2734 | - gen_op_store_DT0_fpr(rd); | |
2732 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2735 | 2733 | break; |
2736 | 2734 | case 0x036: /* VIS I fmul8sux16 */ |
2737 | - gen_op_load_fpr_DT0(rs1); | |
2738 | - gen_op_load_fpr_DT1(rs2); | |
2735 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2736 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2739 | 2737 | gen_op_fmul8sux16(); |
2740 | - gen_op_store_DT0_fpr(rd); | |
2738 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2741 | 2739 | break; |
2742 | 2740 | case 0x037: /* VIS I fmul8ulx16 */ |
2743 | - gen_op_load_fpr_DT0(rs1); | |
2744 | - gen_op_load_fpr_DT1(rs2); | |
2741 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2742 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2745 | 2743 | gen_op_fmul8ulx16(); |
2746 | - gen_op_store_DT0_fpr(rd); | |
2744 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2747 | 2745 | break; |
2748 | 2746 | case 0x038: /* VIS I fmuld8sux16 */ |
2749 | - gen_op_load_fpr_DT0(rs1); | |
2750 | - gen_op_load_fpr_DT1(rs2); | |
2747 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2748 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2751 | 2749 | gen_op_fmuld8sux16(); |
2752 | - gen_op_store_DT0_fpr(rd); | |
2750 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2753 | 2751 | break; |
2754 | 2752 | case 0x039: /* VIS I fmuld8ulx16 */ |
2755 | - gen_op_load_fpr_DT0(rs1); | |
2756 | - gen_op_load_fpr_DT1(rs2); | |
2753 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2754 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2757 | 2755 | gen_op_fmuld8ulx16(); |
2758 | - gen_op_store_DT0_fpr(rd); | |
2756 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2759 | 2757 | break; |
2760 | 2758 | case 0x03a: /* VIS I fpack32 */ |
2761 | 2759 | case 0x03b: /* VIS I fpack16 */ |
... | ... | @@ -2764,31 +2762,31 @@ static void disas_sparc_insn(DisasContext * dc) |
2764 | 2762 | // XXX |
2765 | 2763 | goto illegal_insn; |
2766 | 2764 | case 0x048: /* VIS I faligndata */ |
2767 | - gen_op_load_fpr_DT0(rs1); | |
2768 | - gen_op_load_fpr_DT1(rs2); | |
2765 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2766 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2769 | 2767 | gen_op_faligndata(); |
2770 | - gen_op_store_DT0_fpr(rd); | |
2768 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2771 | 2769 | break; |
2772 | 2770 | case 0x04b: /* VIS I fpmerge */ |
2773 | - gen_op_load_fpr_DT0(rs1); | |
2774 | - gen_op_load_fpr_DT1(rs2); | |
2771 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2772 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2775 | 2773 | gen_op_fpmerge(); |
2776 | - gen_op_store_DT0_fpr(rd); | |
2774 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2777 | 2775 | break; |
2778 | 2776 | case 0x04c: /* VIS II bshuffle */ |
2779 | 2777 | // XXX |
2780 | 2778 | goto illegal_insn; |
2781 | 2779 | case 0x04d: /* VIS I fexpand */ |
2782 | - gen_op_load_fpr_DT0(rs1); | |
2783 | - gen_op_load_fpr_DT1(rs2); | |
2780 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2781 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2784 | 2782 | gen_op_fexpand(); |
2785 | - gen_op_store_DT0_fpr(rd); | |
2783 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2786 | 2784 | break; |
2787 | 2785 | case 0x050: /* VIS I fpadd16 */ |
2788 | - gen_op_load_fpr_DT0(rs1); | |
2789 | - gen_op_load_fpr_DT1(rs2); | |
2786 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2787 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2790 | 2788 | gen_op_fpadd16(); |
2791 | - gen_op_store_DT0_fpr(rd); | |
2789 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2792 | 2790 | break; |
2793 | 2791 | case 0x051: /* VIS I fpadd16s */ |
2794 | 2792 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2797,10 +2795,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2797 | 2795 | gen_op_store_FT0_fpr(rd); |
2798 | 2796 | break; |
2799 | 2797 | case 0x052: /* VIS I fpadd32 */ |
2800 | - gen_op_load_fpr_DT0(rs1); | |
2801 | - gen_op_load_fpr_DT1(rs2); | |
2798 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2799 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2802 | 2800 | gen_op_fpadd32(); |
2803 | - gen_op_store_DT0_fpr(rd); | |
2801 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2804 | 2802 | break; |
2805 | 2803 | case 0x053: /* VIS I fpadd32s */ |
2806 | 2804 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2809,10 +2807,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2809 | 2807 | gen_op_store_FT0_fpr(rd); |
2810 | 2808 | break; |
2811 | 2809 | case 0x054: /* VIS I fpsub16 */ |
2812 | - gen_op_load_fpr_DT0(rs1); | |
2813 | - gen_op_load_fpr_DT1(rs2); | |
2810 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2811 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2814 | 2812 | gen_op_fpsub16(); |
2815 | - gen_op_store_DT0_fpr(rd); | |
2813 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2816 | 2814 | break; |
2817 | 2815 | case 0x055: /* VIS I fpsub16s */ |
2818 | 2816 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2821,10 +2819,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2821 | 2819 | gen_op_store_FT0_fpr(rd); |
2822 | 2820 | break; |
2823 | 2821 | case 0x056: /* VIS I fpsub32 */ |
2824 | - gen_op_load_fpr_DT0(rs1); | |
2825 | - gen_op_load_fpr_DT1(rs2); | |
2822 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2823 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2826 | 2824 | gen_op_fpadd32(); |
2827 | - gen_op_store_DT0_fpr(rd); | |
2825 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2828 | 2826 | break; |
2829 | 2827 | case 0x057: /* VIS I fpsub32s */ |
2830 | 2828 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2834,17 +2832,17 @@ static void disas_sparc_insn(DisasContext * dc) |
2834 | 2832 | break; |
2835 | 2833 | case 0x060: /* VIS I fzero */ |
2836 | 2834 | gen_op_movl_DT0_0(); |
2837 | - gen_op_store_DT0_fpr(rd); | |
2835 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2838 | 2836 | break; |
2839 | 2837 | case 0x061: /* VIS I fzeros */ |
2840 | 2838 | gen_op_movl_FT0_0(); |
2841 | 2839 | gen_op_store_FT0_fpr(rd); |
2842 | 2840 | break; |
2843 | 2841 | case 0x062: /* VIS I fnor */ |
2844 | - gen_op_load_fpr_DT0(rs1); | |
2845 | - gen_op_load_fpr_DT1(rs2); | |
2842 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2843 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2846 | 2844 | gen_op_fnor(); |
2847 | - gen_op_store_DT0_fpr(rd); | |
2845 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2848 | 2846 | break; |
2849 | 2847 | case 0x063: /* VIS I fnors */ |
2850 | 2848 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2853,10 +2851,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2853 | 2851 | gen_op_store_FT0_fpr(rd); |
2854 | 2852 | break; |
2855 | 2853 | case 0x064: /* VIS I fandnot2 */ |
2856 | - gen_op_load_fpr_DT1(rs1); | |
2857 | - gen_op_load_fpr_DT0(rs2); | |
2854 | + gen_op_load_fpr_DT1(DFPREG(rs1)); | |
2855 | + gen_op_load_fpr_DT0(DFPREG(rs2)); | |
2858 | 2856 | gen_op_fandnot(); |
2859 | - gen_op_store_DT0_fpr(rd); | |
2857 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2860 | 2858 | break; |
2861 | 2859 | case 0x065: /* VIS I fandnot2s */ |
2862 | 2860 | gen_op_load_fpr_FT1(rs1); |
... | ... | @@ -2865,9 +2863,9 @@ static void disas_sparc_insn(DisasContext * dc) |
2865 | 2863 | gen_op_store_FT0_fpr(rd); |
2866 | 2864 | break; |
2867 | 2865 | case 0x066: /* VIS I fnot2 */ |
2868 | - gen_op_load_fpr_DT1(rs2); | |
2866 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2869 | 2867 | gen_op_fnot(); |
2870 | - gen_op_store_DT0_fpr(rd); | |
2868 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2871 | 2869 | break; |
2872 | 2870 | case 0x067: /* VIS I fnot2s */ |
2873 | 2871 | gen_op_load_fpr_FT1(rs2); |
... | ... | @@ -2875,10 +2873,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2875 | 2873 | gen_op_store_FT0_fpr(rd); |
2876 | 2874 | break; |
2877 | 2875 | case 0x068: /* VIS I fandnot1 */ |
2878 | - gen_op_load_fpr_DT0(rs1); | |
2879 | - gen_op_load_fpr_DT1(rs2); | |
2876 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2877 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2880 | 2878 | gen_op_fandnot(); |
2881 | - gen_op_store_DT0_fpr(rd); | |
2879 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2882 | 2880 | break; |
2883 | 2881 | case 0x069: /* VIS I fandnot1s */ |
2884 | 2882 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2887,9 +2885,9 @@ static void disas_sparc_insn(DisasContext * dc) |
2887 | 2885 | gen_op_store_FT0_fpr(rd); |
2888 | 2886 | break; |
2889 | 2887 | case 0x06a: /* VIS I fnot1 */ |
2890 | - gen_op_load_fpr_DT1(rs1); | |
2888 | + gen_op_load_fpr_DT1(DFPREG(rs1)); | |
2891 | 2889 | gen_op_fnot(); |
2892 | - gen_op_store_DT0_fpr(rd); | |
2890 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2893 | 2891 | break; |
2894 | 2892 | case 0x06b: /* VIS I fnot1s */ |
2895 | 2893 | gen_op_load_fpr_FT1(rs1); |
... | ... | @@ -2897,10 +2895,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2897 | 2895 | gen_op_store_FT0_fpr(rd); |
2898 | 2896 | break; |
2899 | 2897 | case 0x06c: /* VIS I fxor */ |
2900 | - gen_op_load_fpr_DT0(rs1); | |
2901 | - gen_op_load_fpr_DT1(rs2); | |
2898 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2899 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2902 | 2900 | gen_op_fxor(); |
2903 | - gen_op_store_DT0_fpr(rd); | |
2901 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2904 | 2902 | break; |
2905 | 2903 | case 0x06d: /* VIS I fxors */ |
2906 | 2904 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2909,10 +2907,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2909 | 2907 | gen_op_store_FT0_fpr(rd); |
2910 | 2908 | break; |
2911 | 2909 | case 0x06e: /* VIS I fnand */ |
2912 | - gen_op_load_fpr_DT0(rs1); | |
2913 | - gen_op_load_fpr_DT1(rs2); | |
2910 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2911 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2914 | 2912 | gen_op_fnand(); |
2915 | - gen_op_store_DT0_fpr(rd); | |
2913 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2916 | 2914 | break; |
2917 | 2915 | case 0x06f: /* VIS I fnands */ |
2918 | 2916 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2921,10 +2919,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2921 | 2919 | gen_op_store_FT0_fpr(rd); |
2922 | 2920 | break; |
2923 | 2921 | case 0x070: /* VIS I fand */ |
2924 | - gen_op_load_fpr_DT0(rs1); | |
2925 | - gen_op_load_fpr_DT1(rs2); | |
2922 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2923 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2926 | 2924 | gen_op_fand(); |
2927 | - gen_op_store_DT0_fpr(rd); | |
2925 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2928 | 2926 | break; |
2929 | 2927 | case 0x071: /* VIS I fands */ |
2930 | 2928 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2933,10 +2931,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2933 | 2931 | gen_op_store_FT0_fpr(rd); |
2934 | 2932 | break; |
2935 | 2933 | case 0x072: /* VIS I fxnor */ |
2936 | - gen_op_load_fpr_DT0(rs1); | |
2937 | - gen_op_load_fpr_DT1(rs2); | |
2934 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2935 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2938 | 2936 | gen_op_fxnor(); |
2939 | - gen_op_store_DT0_fpr(rd); | |
2937 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2940 | 2938 | break; |
2941 | 2939 | case 0x073: /* VIS I fxnors */ |
2942 | 2940 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2945,18 +2943,18 @@ static void disas_sparc_insn(DisasContext * dc) |
2945 | 2943 | gen_op_store_FT0_fpr(rd); |
2946 | 2944 | break; |
2947 | 2945 | case 0x074: /* VIS I fsrc1 */ |
2948 | - gen_op_load_fpr_DT0(rs1); | |
2949 | - gen_op_store_DT0_fpr(rd); | |
2946 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2947 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2950 | 2948 | break; |
2951 | 2949 | case 0x075: /* VIS I fsrc1s */ |
2952 | 2950 | gen_op_load_fpr_FT0(rs1); |
2953 | 2951 | gen_op_store_FT0_fpr(rd); |
2954 | 2952 | break; |
2955 | 2953 | case 0x076: /* VIS I fornot2 */ |
2956 | - gen_op_load_fpr_DT1(rs1); | |
2957 | - gen_op_load_fpr_DT0(rs2); | |
2954 | + gen_op_load_fpr_DT1(DFPREG(rs1)); | |
2955 | + gen_op_load_fpr_DT0(DFPREG(rs2)); | |
2958 | 2956 | gen_op_fornot(); |
2959 | - gen_op_store_DT0_fpr(rd); | |
2957 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2960 | 2958 | break; |
2961 | 2959 | case 0x077: /* VIS I fornot2s */ |
2962 | 2960 | gen_op_load_fpr_FT1(rs1); |
... | ... | @@ -2965,18 +2963,18 @@ static void disas_sparc_insn(DisasContext * dc) |
2965 | 2963 | gen_op_store_FT0_fpr(rd); |
2966 | 2964 | break; |
2967 | 2965 | case 0x078: /* VIS I fsrc2 */ |
2968 | - gen_op_load_fpr_DT0(rs2); | |
2969 | - gen_op_store_DT0_fpr(rd); | |
2966 | + gen_op_load_fpr_DT0(DFPREG(rs2)); | |
2967 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2970 | 2968 | break; |
2971 | 2969 | case 0x079: /* VIS I fsrc2s */ |
2972 | 2970 | gen_op_load_fpr_FT0(rs2); |
2973 | 2971 | gen_op_store_FT0_fpr(rd); |
2974 | 2972 | break; |
2975 | 2973 | case 0x07a: /* VIS I fornot1 */ |
2976 | - gen_op_load_fpr_DT0(rs1); | |
2977 | - gen_op_load_fpr_DT1(rs2); | |
2974 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2975 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2978 | 2976 | gen_op_fornot(); |
2979 | - gen_op_store_DT0_fpr(rd); | |
2977 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2980 | 2978 | break; |
2981 | 2979 | case 0x07b: /* VIS I fornot1s */ |
2982 | 2980 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2985,10 +2983,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2985 | 2983 | gen_op_store_FT0_fpr(rd); |
2986 | 2984 | break; |
2987 | 2985 | case 0x07c: /* VIS I for */ |
2988 | - gen_op_load_fpr_DT0(rs1); | |
2989 | - gen_op_load_fpr_DT1(rs2); | |
2986 | + gen_op_load_fpr_DT0(DFPREG(rs1)); | |
2987 | + gen_op_load_fpr_DT1(DFPREG(rs2)); | |
2990 | 2988 | gen_op_for(); |
2991 | - gen_op_store_DT0_fpr(rd); | |
2989 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
2992 | 2990 | break; |
2993 | 2991 | case 0x07d: /* VIS I fors */ |
2994 | 2992 | gen_op_load_fpr_FT0(rs1); |
... | ... | @@ -2998,7 +2996,7 @@ static void disas_sparc_insn(DisasContext * dc) |
2998 | 2996 | break; |
2999 | 2997 | case 0x07e: /* VIS I fone */ |
3000 | 2998 | gen_op_movl_DT0_1(); |
3001 | - gen_op_store_DT0_fpr(rd); | |
2999 | + gen_op_store_DT0_fpr(DFPREG(rd)); | |
3002 | 3000 | break; |
3003 | 3001 | case 0x07f: /* VIS I fones */ |
3004 | 3002 | gen_op_movl_FT0_1(); |
... | ... | @@ -3339,18 +3337,18 @@ static void disas_sparc_insn(DisasContext * dc) |
3339 | 3337 | goto skip_move; |
3340 | 3338 | case 0x30: /* V9 ldfa */ |
3341 | 3339 | gen_op_check_align_T0_3(); |
3342 | - gen_ldf_asi(insn, 4); | |
3340 | + gen_ldf_asi(insn, 4, rd); | |
3343 | 3341 | goto skip_move; |
3344 | 3342 | case 0x33: /* V9 lddfa */ |
3345 | 3343 | gen_op_check_align_T0_3(); |
3346 | - gen_ldf_asi(insn, 8); | |
3344 | + gen_ldf_asi(insn, 8, DFPREG(rd)); | |
3347 | 3345 | goto skip_move; |
3348 | 3346 | case 0x3d: /* V9 prefetcha, no effect */ |
3349 | 3347 | goto skip_move; |
3350 | 3348 | case 0x32: /* V9 ldqfa */ |
3351 | 3349 | #if defined(CONFIG_USER_ONLY) |
3352 | 3350 | gen_op_check_align_T0_3(); |
3353 | - gen_ldf_asi(insn, 16); | |
3351 | + gen_ldf_asi(insn, 16, QFPREG(rd)); | |
3354 | 3352 | goto skip_move; |
3355 | 3353 | #else |
3356 | 3354 | goto nfpu_insn; |
... | ... | @@ -3528,13 +3526,13 @@ static void disas_sparc_insn(DisasContext * dc) |
3528 | 3526 | case 0x34: /* V9 stfa */ |
3529 | 3527 | gen_op_check_align_T0_3(); |
3530 | 3528 | gen_op_load_fpr_FT0(rd); |
3531 | - gen_stf_asi(insn, 4); | |
3529 | + gen_stf_asi(insn, 4, rd); | |
3532 | 3530 | break; |
3533 | 3531 | case 0x36: /* V9 stqfa */ |
3534 | 3532 | #if defined(CONFIG_USER_ONLY) |
3535 | 3533 | gen_op_check_align_T0_7(); |
3536 | 3534 | gen_op_load_fpr_QT0(QFPREG(rd)); |
3537 | - gen_stf_asi(insn, 16); | |
3535 | + gen_stf_asi(insn, 16, QFPREG(rd)); | |
3538 | 3536 | break; |
3539 | 3537 | #else |
3540 | 3538 | goto nfpu_insn; |
... | ... | @@ -3542,7 +3540,7 @@ static void disas_sparc_insn(DisasContext * dc) |
3542 | 3540 | case 0x37: /* V9 stdfa */ |
3543 | 3541 | gen_op_check_align_T0_3(); |
3544 | 3542 | gen_op_load_fpr_DT0(DFPREG(rd)); |
3545 | - gen_stf_asi(insn, 8); | |
3543 | + gen_stf_asi(insn, 8, DFPREG(rd)); | |
3546 | 3544 | break; |
3547 | 3545 | case 0x3c: /* V9 casa */ |
3548 | 3546 | gen_op_check_align_T0_3(); | ... | ... |