mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
Full implementation of IEEE exceptions (Aurelien Jarno)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2625 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
c185970a0e
commit
417454b032
4 changed files with 154 additions and 14 deletions
|
@ -943,6 +943,21 @@ static GenOpFunc * const gen_fcmpd[4] = {
|
|||
gen_op_fcmpd_fcc2,
|
||||
gen_op_fcmpd_fcc3,
|
||||
};
|
||||
|
||||
static GenOpFunc * const gen_fcmpes[4] = {
|
||||
gen_op_fcmpes,
|
||||
gen_op_fcmpes_fcc1,
|
||||
gen_op_fcmpes_fcc2,
|
||||
gen_op_fcmpes_fcc3,
|
||||
};
|
||||
|
||||
static GenOpFunc * const gen_fcmped[4] = {
|
||||
gen_op_fcmped,
|
||||
gen_op_fcmped_fcc1,
|
||||
gen_op_fcmped_fcc2,
|
||||
gen_op_fcmped_fcc3,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
static int gen_trap_ifnofpu(DisasContext * dc)
|
||||
|
@ -1289,6 +1304,7 @@ static void disas_sparc_insn(DisasContext * dc)
|
|||
} else if (xop == 0x34) { /* FPU Operations */
|
||||
if (gen_trap_ifnofpu(dc))
|
||||
goto jmp_insn;
|
||||
gen_op_clear_ieee_excp_and_FTT();
|
||||
rs1 = GET_FIELD(insn, 13, 17);
|
||||
rs2 = GET_FIELD(insn, 27, 31);
|
||||
xop = GET_FIELD(insn, 18, 26);
|
||||
|
@ -1476,6 +1492,7 @@ static void disas_sparc_insn(DisasContext * dc)
|
|||
#endif
|
||||
if (gen_trap_ifnofpu(dc))
|
||||
goto jmp_insn;
|
||||
gen_op_clear_ieee_excp_and_FTT();
|
||||
rs1 = GET_FIELD(insn, 13, 17);
|
||||
rs2 = GET_FIELD(insn, 27, 31);
|
||||
xop = GET_FIELD(insn, 18, 26);
|
||||
|
@ -1653,18 +1670,18 @@ static void disas_sparc_insn(DisasContext * dc)
|
|||
gen_op_load_fpr_FT0(rs1);
|
||||
gen_op_load_fpr_FT1(rs2);
|
||||
#ifdef TARGET_SPARC64
|
||||
gen_fcmps[rd & 3]();
|
||||
gen_fcmpes[rd & 3]();
|
||||
#else
|
||||
gen_op_fcmps(); /* XXX should trap if qNaN or sNaN */
|
||||
gen_op_fcmpes();
|
||||
#endif
|
||||
break;
|
||||
case 0x56: /* fcmped, V9 %fcc */
|
||||
gen_op_load_fpr_DT0(DFPREG(rs1));
|
||||
gen_op_load_fpr_DT1(DFPREG(rs2));
|
||||
#ifdef TARGET_SPARC64
|
||||
gen_fcmpd[rd & 3]();
|
||||
gen_fcmped[rd & 3]();
|
||||
#else
|
||||
gen_op_fcmpd(); /* XXX should trap if qNaN or sNaN */
|
||||
gen_op_fcmped();
|
||||
#endif
|
||||
break;
|
||||
case 0x57: /* fcmpeq */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue