summaryrefslogtreecommitdiff
path: root/target-sparc/translate.c
diff options
context:
space:
mode:
Diffstat (limited to 'target-sparc/translate.c')
-rw-r--r--target-sparc/translate.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 53a3a674c6..cb11b928f6 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -2602,8 +2602,14 @@ static void disas_sparc_insn(DisasContext * dc)
gen_op_stfsr();
gen_op_ldst(stf);
break;
+#if !defined(CONFIG_USER_ONLY)
case 0x26: /* stdfq */
- goto nfpu_insn;
+ if (!supervisor(dc))
+ goto priv_insn;
+ if (gen_trap_ifnofpu(dc))
+ goto jmp_insn;
+ goto nfq_insn;
+#endif
case 0x27:
gen_op_load_fpr_DT0(DFPREG(rd));
gen_op_ldst(stdf);
@@ -2675,6 +2681,13 @@ static void disas_sparc_insn(DisasContext * dc)
gen_op_fpexception_im(FSR_FTT_UNIMPFPOP);
dc->is_br = 1;
return;
+#if !defined(CONFIG_USER_ONLY)
+ nfq_insn:
+ save_state(dc);
+ gen_op_fpexception_im(FSR_FTT_SEQ_ERROR);
+ dc->is_br = 1;
+ return;
+#endif
#ifndef TARGET_SPARC64
ncp_insn:
save_state(dc);