Commit 2382dc6b9b1bd130f16330965a9163681e786cd9

Authored by blueswir1
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();
... ...