Commit 9143e59842952d89533937dba9043b7b36b76a82

Authored by blueswir1
1 parent a4d17f19

Fix stdfq op (Aurelien Jarno)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2604 c046a42c-6fe2-441c-8c8c-71466251a162
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);
... ...