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