translate.c (ff4c711b8d01608c4589cead0e2f650588d4b804) translate.c (5e3b17bbe9cc49c67d68f4a676113361944c8709)
1/*
2 SPARC translation
3
4 Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at>
5 Copyright (C) 2003-2005 Fabrice Bellard
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public

--- 1655 unchanged lines hidden (view full) ---

1664
1665 gen(tcg_env);
1666
1667 gen_op_store_QT0_fpr(QFPREG(rd));
1668 gen_update_fprs_dirty(dc, QFPREG(rd));
1669}
1670#endif
1671
1/*
2 SPARC translation
3
4 Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at>
5 Copyright (C) 2003-2005 Fabrice Bellard
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public

--- 1655 unchanged lines hidden (view full) ---

1664
1665 gen(tcg_env);
1666
1667 gen_op_store_QT0_fpr(QFPREG(rd));
1668 gen_update_fprs_dirty(dc, QFPREG(rd));
1669}
1670#endif
1671
1672static void gen_fop_QDD(DisasContext *dc, int rd, int rs1, int rs2,
1673 void (*gen)(TCGv_ptr, TCGv_i64, TCGv_i64))
1674{
1675 TCGv_i64 src1, src2;
1676
1677 src1 = gen_load_fpr_D(dc, rs1);
1678 src2 = gen_load_fpr_D(dc, rs2);
1679
1680 gen(tcg_env, src1, src2);
1681 gen_helper_check_ieee_exceptions(cpu_fsr, tcg_env);
1682
1683 gen_op_store_QT0_fpr(QFPREG(rd));
1684 gen_update_fprs_dirty(dc, QFPREG(rd));
1685}
1686
1687#ifdef TARGET_SPARC64
1688static void gen_fop_DF(DisasContext *dc, int rd, int rs,
1689 void (*gen)(TCGv_i64, TCGv_ptr, TCGv_i32))
1690{
1691 TCGv_i64 dst;
1692 TCGv_i32 src;
1693
1694 src = gen_load_fpr_F(dc, rs);

--- 3282 unchanged lines hidden (view full) ---

4977 return advance_pc(dc);
4978}
4979
4980TRANS(FADDq, ALL, do_env_qqq, a, gen_helper_faddq)
4981TRANS(FSUBq, ALL, do_env_qqq, a, gen_helper_fsubq)
4982TRANS(FMULq, ALL, do_env_qqq, a, gen_helper_fmulq)
4983TRANS(FDIVq, ALL, do_env_qqq, a, gen_helper_fdivq)
4984
1672#ifdef TARGET_SPARC64
1673static void gen_fop_DF(DisasContext *dc, int rd, int rs,
1674 void (*gen)(TCGv_i64, TCGv_ptr, TCGv_i32))
1675{
1676 TCGv_i64 dst;
1677 TCGv_i32 src;
1678
1679 src = gen_load_fpr_F(dc, rs);

--- 3282 unchanged lines hidden (view full) ---

4962 return advance_pc(dc);
4963}
4964
4965TRANS(FADDq, ALL, do_env_qqq, a, gen_helper_faddq)
4966TRANS(FSUBq, ALL, do_env_qqq, a, gen_helper_fsubq)
4967TRANS(FMULq, ALL, do_env_qqq, a, gen_helper_fmulq)
4968TRANS(FDIVq, ALL, do_env_qqq, a, gen_helper_fdivq)
4969
4970static bool trans_FdMULq(DisasContext *dc, arg_r_r_r *a)
4971{
4972 TCGv_i64 src1, src2;
4973
4974 if (gen_trap_ifnofpu(dc)) {
4975 return true;
4976 }
4977 if (gen_trap_float128(dc)) {
4978 return true;
4979 }
4980
4981 gen_op_clear_ieee_excp_and_FTT();
4982 src1 = gen_load_fpr_D(dc, a->rs1);
4983 src2 = gen_load_fpr_D(dc, a->rs2);
4984 gen_helper_fdmulq(tcg_env, src1, src2);
4985 gen_helper_check_ieee_exceptions(cpu_fsr, tcg_env);
4986 gen_op_store_QT0_fpr(QFPREG(a->rd));
4987 gen_update_fprs_dirty(dc, QFPREG(a->rd));
4988 return advance_pc(dc);
4989}
4990
4985#define CHECK_IU_FEATURE(dc, FEATURE) \
4986 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4987 goto illegal_insn;
4988#define CHECK_FPU_FEATURE(dc, FEATURE) \
4989 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4990 goto nfpu_insn;
4991
4992/* before an instruction, dc->pc must be static */

--- 50 unchanged lines hidden (view full) ---

5043 case 0x46: /* fsubd */
5044 case 0x4a: /* fmuld */
5045 case 0x4e: /* fdivd */
5046 case 0x43: /* faddq */
5047 case 0x47: /* fsubq */
5048 case 0x4b: /* fmulq */
5049 case 0x4f: /* fdivq */
5050 case 0x69: /* fsmuld */
4991#define CHECK_IU_FEATURE(dc, FEATURE) \
4992 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4993 goto illegal_insn;
4994#define CHECK_FPU_FEATURE(dc, FEATURE) \
4995 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4996 goto nfpu_insn;
4997
4998/* before an instruction, dc->pc must be static */

--- 50 unchanged lines hidden (view full) ---

5049 case 0x46: /* fsubd */
5050 case 0x4a: /* fmuld */
5051 case 0x4e: /* fdivd */
5052 case 0x43: /* faddq */
5053 case 0x47: /* fsubq */
5054 case 0x4b: /* fmulq */
5055 case 0x4f: /* fdivq */
5056 case 0x69: /* fsmuld */
5051 g_assert_not_reached(); /* in decodetree */
5052 case 0x6e: /* fdmulq */
5057 case 0x6e: /* fdmulq */
5053 CHECK_FPU_FEATURE(dc, FLOAT128);
5054 gen_fop_QDD(dc, rd, rs1, rs2, gen_helper_fdmulq);
5055 break;
5058 g_assert_not_reached(); /* in decodetree */
5056 case 0xc6: /* fdtos */
5057 gen_fop_FD(dc, rd, rs2, gen_helper_fdtos);
5058 break;
5059 case 0xc7: /* fqtos */
5060 CHECK_FPU_FEATURE(dc, FLOAT128);
5061 gen_fop_FQ(dc, rd, rs2, gen_helper_fqtos);
5062 break;
5063 case 0xc8: /* fitod */

--- 688 unchanged lines hidden ---
5059 case 0xc6: /* fdtos */
5060 gen_fop_FD(dc, rd, rs2, gen_helper_fdtos);
5061 break;
5062 case 0xc7: /* fqtos */
5063 CHECK_FPU_FEATURE(dc, FLOAT128);
5064 gen_fop_FQ(dc, rd, rs2, gen_helper_fqtos);
5065 break;
5066 case 0xc8: /* fitod */

--- 688 unchanged lines hidden ---