Commit 9143e59842952d89533937dba9043b7b36b76a82
1 parent
a4d17f19
Fix stdfq op (Aurelien Jarno)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2604 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
16 additions
and
2 deletions
target-sparc/cpu.h
... | ... | @@ -127,6 +127,7 @@ |
127 | 127 | #define FSR_FTT_MASK (FSR_FTT2 | FSR_FTT1 | FSR_FTT0) |
128 | 128 | #define FSR_FTT_IEEE_EXCP (1 << 14) |
129 | 129 | #define FSR_FTT_UNIMPFPOP (3 << 14) |
130 | +#define FSR_FTT_SEQ_ERROR (4 << 14) | |
130 | 131 | #define FSR_FTT_INVAL_FPR (6 << 14) |
131 | 132 | |
132 | 133 | #define FSR_FCC1 (1<<11) |
... | ... | @@ -239,7 +240,7 @@ typedef struct CPUSPARCState { |
239 | 240 | #else |
240 | 241 | #define GET_FSR32(env) (env->fsr) |
241 | 242 | #define PUT_FSR32(env, val) do { uint32_t _tmp = val; \ |
242 | - env->fsr = (_tmp & 0xcfc1ffff) | (env->fsr & 0x000e0000); \ | |
243 | + env->fsr = (_tmp & 0xcfc1dfff) | (env->fsr & 0x000e0000); \ | |
243 | 244 | } while (0) |
244 | 245 | #endif |
245 | 246 | ... | ... |
target-sparc/translate.c
... | ... | @@ -2602,8 +2602,14 @@ static void disas_sparc_insn(DisasContext * dc) |
2602 | 2602 | gen_op_stfsr(); |
2603 | 2603 | gen_op_ldst(stf); |
2604 | 2604 | break; |
2605 | +#if !defined(CONFIG_USER_ONLY) | |
2605 | 2606 | case 0x26: /* stdfq */ |
2606 | - goto nfpu_insn; | |
2607 | + if (!supervisor(dc)) | |
2608 | + goto priv_insn; | |
2609 | + if (gen_trap_ifnofpu(dc)) | |
2610 | + goto jmp_insn; | |
2611 | + goto nfq_insn; | |
2612 | +#endif | |
2607 | 2613 | case 0x27: |
2608 | 2614 | gen_op_load_fpr_DT0(DFPREG(rd)); |
2609 | 2615 | gen_op_ldst(stdf); |
... | ... | @@ -2675,6 +2681,13 @@ static void disas_sparc_insn(DisasContext * dc) |
2675 | 2681 | gen_op_fpexception_im(FSR_FTT_UNIMPFPOP); |
2676 | 2682 | dc->is_br = 1; |
2677 | 2683 | return; |
2684 | +#if !defined(CONFIG_USER_ONLY) | |
2685 | + nfq_insn: | |
2686 | + save_state(dc); | |
2687 | + gen_op_fpexception_im(FSR_FTT_SEQ_ERROR); | |
2688 | + dc->is_br = 1; | |
2689 | + return; | |
2690 | +#endif | |
2678 | 2691 | #ifndef TARGET_SPARC64 |
2679 | 2692 | ncp_insn: |
2680 | 2693 | save_state(dc); | ... | ... |