Commit 36d239587370c6ccfc53d7f6acc624ce5d61fe84

Authored by ths
1 parent 54d43f70

MIPS FPU dynamic activation, part 1, by Herve Poussineau.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2463 c046a42c-6fe2-441c-8c8c-71466251a162
exec-all.h
... ... @@ -581,13 +581,12 @@ static inline target_ulong get_phys_addr_code(CPUState *env, target_ulong addr)
581 581 }
582 582 pd = env->tlb_table[is_user][index].addr_code & ~TARGET_PAGE_MASK;
583 583 if (pd > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
584   - cpu_abort(env, "Trying to execute code outside RAM or ROM at 0x%08lx\n", addr);
  584 + cpu_abort(env, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
585 585 }
586 586 return addr + env->tlb_table[is_user][index].addend - (unsigned long)phys_ram_base;
587 587 }
588 588 #endif
589 589  
590   -
591 590 #ifdef USE_KQEMU
592 591 #define KQEMU_MODIFY_PAGE_MASK (0xff & ~(VGA_DIRTY_FLAG | CODE_DIRTY_FLAG))
593 592  
... ...
gdbstub.c
... ... @@ -568,19 +568,20 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
568 568 *(uint32_t *)ptr = tswapl(env->PC);
569 569 ptr += 4;
570 570  
571   -#ifdef MIPS_USES_FPU
572   - for (i = 0; i < 32; i++)
  571 + if (env->CP0_Config1 & (1 << CP0C1_FP))
573 572 {
574   - *(uint32_t *)ptr = tswapl(FPR_W (env, i));
575   - ptr += 4;
576   - }
  573 + for (i = 0; i < 32; i++)
  574 + {
  575 + *(uint32_t *)ptr = tswapl(FPR_W (env, i));
  576 + ptr += 4;
  577 + }
577 578  
578   - *(uint32_t *)ptr = tswapl(env->fcr31);
579   - ptr += 4;
  579 + *(uint32_t *)ptr = tswapl(env->fcr31);
  580 + ptr += 4;
580 581  
581   - *(uint32_t *)ptr = tswapl(env->fcr0);
582   - ptr += 4;
583   -#endif
  582 + *(uint32_t *)ptr = tswapl(env->fcr0);
  583 + ptr += 4;
  584 + }
584 585  
585 586 /* 32 FP registers, fsr, fir, fp. Not yet implemented. */
586 587 /* what's 'fp' mean here? */
... ... @@ -629,27 +630,28 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
629 630 env->PC = tswapl(*(uint32_t *)ptr);
630 631 ptr += 4;
631 632  
632   -#ifdef MIPS_USES_FPU
633   - for (i = 0; i < 32; i++)
  633 + if (env->CP0_Config1 & (1 << CP0C1_FP))
634 634 {
635   - FPR_W (env, i) = tswapl(*(uint32_t *)ptr);
636   - ptr += 4;
637   - }
  635 + for (i = 0; i < 32; i++)
  636 + {
  637 + FPR_W (env, i) = tswapl(*(uint32_t *)ptr);
  638 + ptr += 4;
  639 + }
638 640  
639   - env->fcr31 = tswapl(*(uint32_t *)ptr) & 0x0183FFFF;
640   - ptr += 4;
  641 + env->fcr31 = tswapl(*(uint32_t *)ptr) & 0x0183FFFF;
  642 + ptr += 4;
641 643  
642   - env->fcr0 = tswapl(*(uint32_t *)ptr);
643   - ptr += 4;
  644 + env->fcr0 = tswapl(*(uint32_t *)ptr);
  645 + ptr += 4;
644 646  
645   - /* set rounding mode */
646   - RESTORE_ROUNDING_MODE;
  647 + /* set rounding mode */
  648 + RESTORE_ROUNDING_MODE;
647 649  
648 650 #ifndef CONFIG_SOFTFLOAT
649   - /* no floating point exception for native float */
650   - SET_FP_ENABLE(env->fcr31, 0);
651   -#endif
  651 + /* no floating point exception for native float */
  652 + SET_FP_ENABLE(env->fcr31, 0);
652 653 #endif
  654 + }
653 655 }
654 656 #elif defined (TARGET_SH4)
655 657 static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
... ...
linux-user/main.c
... ... @@ -1838,9 +1838,9 @@ int main(int argc, char **argv)
1838 1838 env->gpr[i] = regs->regs[i];
1839 1839 }
1840 1840 env->PC = regs->cp0_epc;
1841   -#ifdef MIPS_USES_FPU
1842   - env->CP0_Status |= (1 << CP0St_CU1);
1843   -#endif
  1841 + if (env->CP0_Config1 & (1 << CP0C1_FP)) {
  1842 + env->CP0_Status |= (1 << CP0St_CU1);
  1843 + }
1844 1844 }
1845 1845 #elif defined(TARGET_SH4)
1846 1846 {
... ...
target-mips/cpu.h
... ... @@ -63,7 +63,6 @@ struct CPUMIPSState {
63 63 #endif
64 64 target_ulong HI, LO;
65 65 uint32_t DCR; /* ? */
66   -#if defined(MIPS_USES_FPU)
67 66 /* Floating point registers */
68 67 fpr_t fpr[16];
69 68 #define FPR(cpu, n) ((fpr_t*)&(cpu)->fpr[(n) / 2])
... ... @@ -97,8 +96,7 @@ struct CPUMIPSState {
97 96 #define FP_DIV0 8
98 97 #define FP_INVALID 16
99 98 #define FP_UNIMPLEMENTED 32
100   -
101   -#endif
  99 +
102 100 #if defined(MIPS_USES_R4K_TLB)
103 101 tlb_t tlb[MIPS_TLB_MAX];
104 102 uint32_t tlb_in_use;
... ...
target-mips/exec.h
... ... @@ -115,12 +115,10 @@ void do_tlbwi (void);
115 115 void do_tlbwr (void);
116 116 void do_tlbp (void);
117 117 void do_tlbr (void);
118   -#ifdef MIPS_USES_FPU
119 118 void dump_fpu(CPUState *env);
120 119 void fpu_dump_state(CPUState *env, FILE *f,
121 120 int (*fpu_fprintf)(FILE *f, const char *fmt, ...),
122 121 int flags);
123   -#endif
124 122 void dump_sc (void);
125 123 void do_lwl_raw (uint32_t);
126 124 void do_lwr_raw (uint32_t);
... ...
target-mips/mips-defs.h
... ... @@ -45,19 +45,14 @@
45 45 2-way Icache, 64 sets Dcache, 16 bytes Dcache line, 2-way Dcache,
46 46 no coprocessor2 attached, no MDMX support attached,
47 47 no performance counters, watch registers present,
48   - no code compression, EJTAG present, FPU enable bit depending on
49   - MIPS_USES_FPU */
50   -#define MIPS_CONFIG1_1 \
  48 + no code compression, EJTAG present, no FPU */
  49 +#define MIPS_CONFIG1 \
51 50 ((1 << CP0C1_M) | ((MIPS_TLB_NB - 1) << CP0C1_MMU) | \
52 51 (0x0 << CP0C1_IS) | (0x3 << CP0C1_IL) | (0x1 << CP0C1_IA) | \
53 52 (0x0 << CP0C1_DS) | (0x3 << CP0C1_DL) | (0x1 << CP0C1_DA) | \
54 53 (0 << CP0C1_C2) | (0 << CP0C1_MD) | (0 << CP0C1_PC) | \
55   - (1 << CP0C1_WR) | (0 << CP0C1_CA) | (1 << CP0C1_EP))
56   -#ifdef MIPS_USES_FPU
57   -#define MIPS_CONFIG1 (MIPS_CONFIG1_1 | (1 << CP0C1_FP))
58   -#else
59   -#define MIPS_CONFIG1 (MIPS_CONFIG1_1 | (0 << CP0C1_FP))
60   -#endif
  54 + (1 << CP0C1_WR) | (0 << CP0C1_CA) | (1 << CP0C1_EP) | \
  55 + (0 << CP0C1_FP))
61 56 /* Have config3, no tertiary/secondary caches implemented */
62 57 #define MIPS_CONFIG2 \
63 58 ((1 << CP0C2_M))
... ...
target-mips/op.c
... ... @@ -144,8 +144,6 @@ CALL_FROM_TB2(func, arg0, arg1);
144 144 #include "op_template.c"
145 145 #undef TN
146 146  
147   -#ifdef MIPS_USES_FPU
148   -
149 147 #define SFREG 0
150 148 #define DFREG 0
151 149 #include "fop_template.c"
... ... @@ -279,8 +277,6 @@ CALL_FROM_TB2(func, arg0, arg1);
279 277 #include "fop_template.c"
280 278 #undef FTN
281 279  
282   -#endif
283   -
284 280 void op_dup_T0 (void)
285 281 {
286 282 T2 = T0;
... ... @@ -924,7 +920,6 @@ void op_movz (void)
924 920 RETURN();
925 921 }
926 922  
927   -#ifdef MIPS_USES_FPU
928 923 void op_movf (void)
929 924 {
930 925 if (!(env->fcr31 & PARAM1))
... ... @@ -938,7 +933,6 @@ void op_movt (void)
938 933 env->gpr[PARAM2] = env->gpr[PARAM3];
939 934 RETURN();
940 935 }
941   -#endif
942 936  
943 937 /* Tests */
944 938 #define OP_COND(name, cond) \
... ... @@ -1645,8 +1639,6 @@ void op_dmtc0_errorepc (void)
1645 1639 RETURN();
1646 1640 }
1647 1641  
1648   -#ifdef MIPS_USES_FPU
1649   -
1650 1642 #if 0
1651 1643 # define DEBUG_FPU_STATE() CALL_FROM_TB1(dump_fpu, env)
1652 1644 #else
... ... @@ -2001,7 +1993,6 @@ void op_bc1t (void)
2001 1993 DEBUG_FPU_STATE();
2002 1994 RETURN();
2003 1995 }
2004   -#endif /* MIPS_USES_FPU */
2005 1996  
2006 1997 #if defined(MIPS_USES_R4K_TLB)
2007 1998 void op_tlbwi (void)
... ...
target-mips/op_helper.c
... ... @@ -331,7 +331,6 @@ void do_mtc0_status_irqraise_debug(void)
331 331 fprintf(logfile, "Raise pending IRQs\n");
332 332 }
333 333  
334   -#ifdef MIPS_USES_FPU
335 334 #include "softfloat.h"
336 335  
337 336 void fpu_handle_exception(void)
... ... @@ -370,7 +369,6 @@ void fpu_handle_exception(void)
370 369 SET_FP_CAUSE(env->fcr31, 0);
371 370 #endif
372 371 }
373   -#endif /* MIPS_USES_FPU */
374 372  
375 373 /* TLB management */
376 374 #if defined(MIPS_USES_R4K_TLB)
... ...
target-mips/op_mem.c
... ... @@ -192,7 +192,6 @@ void glue(op_scd, MEMSUFFIX) (void)
192 192 }
193 193 #endif /* MIPS_HAS_MIPS64 */
194 194  
195   -#ifdef MIPS_USES_FPU
196 195 void glue(op_lwc1, MEMSUFFIX) (void)
197 196 {
198 197 WT0 = glue(ldl, MEMSUFFIX)(T0);
... ... @@ -213,4 +212,3 @@ void glue(op_sdc1, MEMSUFFIX) (void)
213 212 glue(stq, MEMSUFFIX)(T0, DT0);
214 213 RETURN();
215 214 }
216   -#endif
... ...
target-mips/translate.c
... ... @@ -391,8 +391,6 @@ GEN32(gen_op_load_gpr_T2, gen_op_load_gpr_T2_gpr);
391 391 GEN32(gen_op_store_T0_gpr, gen_op_store_T0_gpr_gpr);
392 392 GEN32(gen_op_store_T1_gpr, gen_op_store_T1_gpr_gpr);
393 393  
394   -#ifdef MIPS_USES_FPU
395   -
396 394 static const char *fregnames[] =
397 395 { "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
398 396 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
... ... @@ -476,8 +474,6 @@ static inline void gen_cmp_ ## fmt(int n) \
476 474 FOP_CONDS(d)
477 475 FOP_CONDS(s)
478 476  
479   -#endif /* MIPS_USES_FPU */
480   -
481 477 typedef struct DisasContext {
482 478 struct TranslationBlock *tb;
483 479 target_ulong pc, saved_pc;
... ... @@ -640,12 +636,10 @@ OP_LD_TABLE(bu);
640 636 OP_ST_TABLE(b);
641 637 OP_LD_TABLE(l);
642 638 OP_ST_TABLE(c);
643   -#ifdef MIPS_USES_FPU
644 639 OP_LD_TABLE(wc1);
645 640 OP_ST_TABLE(wc1);
646 641 OP_LD_TABLE(dc1);
647 642 OP_ST_TABLE(dc1);
648   -#endif
649 643  
650 644 /* Load and store */
651 645 static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt,
... ... @@ -794,8 +788,6 @@ static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt,
794 788 MIPS_DEBUG("%s %s, %d(%s)", opn, regnames[rt], offset, regnames[base]);
795 789 }
796 790  
797   -#ifdef MIPS_USES_FPU
798   -
799 791 /* Load and store */
800 792 static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft,
801 793 int base, int16_t offset)
... ... @@ -843,8 +835,6 @@ static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft,
843 835 MIPS_DEBUG("%s %s, %d(%s)", opn, fregnames[ft], offset, regnames[base]);
844 836 }
845 837  
846   -#endif /* MIPS_USES_FPU */
847   -
848 838 /* Arithmetic with immediate operand */
849 839 static void gen_arith_imm (DisasContext *ctx, uint32_t opc, int rt,
850 840 int rs, int16_t imm)
... ... @@ -4111,8 +4101,6 @@ static void gen_cp0 (DisasContext *ctx, uint32_t opc, int rt, int rd)
4111 4101 MIPS_DEBUG("%s %s %d", opn, regnames[rt], rd);
4112 4102 }
4113 4103  
4114   -#ifdef MIPS_USES_FPU
4115   -
4116 4104 /* CP1 Branches (before delay slot) */
4117 4105 static void gen_compute_branch1 (DisasContext *ctx, uint32_t op,
4118 4106 int32_t offset)
... ... @@ -4531,8 +4519,6 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf)
4531 4519 gen_op_movt(ccbit, rd, rs);
4532 4520 }
4533 4521  
4534   -#endif /* MIPS_USES_FPU */
4535   -
4536 4522 /* ISA extensions (ASEs) */
4537 4523 /* MIPS16 extension to MIPS32 */
4538 4524 /* SmartMIPS extension to MIPS32 */
... ... @@ -4555,7 +4541,7 @@ static void gen_blikely(DisasContext *ctx)
4555 4541 gen_set_label(l1);
4556 4542 }
4557 4543  
4558   -static void decode_opc (DisasContext *ctx)
  4544 +static void decode_opc (CPUState *env, DisasContext *ctx)
4559 4545 {
4560 4546 int32_t offset;
4561 4547 int rs, rt, rd, sa;
... ... @@ -4631,13 +4617,15 @@ static void decode_opc (DisasContext *ctx)
4631 4617 /* Treat as a noop. */
4632 4618 break;
4633 4619  
4634   -#ifdef MIPS_USES_FPU
4635 4620 case OPC_MOVCI:
4636   - gen_op_cp1_enabled();
4637   - gen_movci(ctx, rd, rs, (ctx->opcode >> 18) & 0x7,
4638   - (ctx->opcode >> 16) & 1);
  4621 + if (env->CP0_Config1 & (1 << CP0C1_FP)) {
  4622 + gen_op_cp1_enabled();
  4623 + gen_movci(ctx, rd, rs, (ctx->opcode >> 18) & 0x7,
  4624 + (ctx->opcode >> 16) & 1);
  4625 + } else {
  4626 + generate_exception(ctx, EXCP_RI);
  4627 + }
4639 4628 break;
4640   -#endif
4641 4629  
4642 4630 #ifdef MIPS_HAS_MIPS64
4643 4631 /* MIPS64 specific opcodes */
... ... @@ -4868,47 +4856,47 @@ static void decode_opc (DisasContext *ctx)
4868 4856 case OPC_LDC1:
4869 4857 case OPC_SWC1:
4870 4858 case OPC_SDC1:
4871   -#if defined(MIPS_USES_FPU)
4872   - save_cpu_state(ctx, 1);
4873   - gen_op_cp1_enabled();
4874   - gen_flt_ldst(ctx, op, rt, rs, imm);
4875   -#else
4876   - generate_exception_err(ctx, EXCP_CpU, 1);
4877   -#endif
  4859 + if (env->CP0_Config1 & (1 << CP0C1_FP)) {
  4860 + save_cpu_state(ctx, 1);
  4861 + gen_op_cp1_enabled();
  4862 + gen_flt_ldst(ctx, op, rt, rs, imm);
  4863 + } else {
  4864 + generate_exception_err(ctx, EXCP_CpU, 1);
  4865 + }
4878 4866 break;
4879 4867  
4880 4868 case OPC_CP1:
4881   -#if defined(MIPS_USES_FPU)
4882   - save_cpu_state(ctx, 1);
4883   - gen_op_cp1_enabled();
4884   - op1 = MASK_CP1(ctx->opcode);
4885   - switch (op1) {
4886   - case OPC_MFC1:
4887   - case OPC_CFC1:
4888   - case OPC_MTC1:
4889   - case OPC_CTC1:
  4869 + if (env->CP0_Config1 & (1 << CP0C1_FP)) {
  4870 + save_cpu_state(ctx, 1);
  4871 + gen_op_cp1_enabled();
  4872 + op1 = MASK_CP1(ctx->opcode);
  4873 + switch (op1) {
  4874 + case OPC_MFC1:
  4875 + case OPC_CFC1:
  4876 + case OPC_MTC1:
  4877 + case OPC_CTC1:
4890 4878 #ifdef MIPS_HAS_MIPS64
4891   - case OPC_DMFC1:
4892   - case OPC_DMTC1:
  4879 + case OPC_DMFC1:
  4880 + case OPC_DMTC1:
4893 4881 #endif
4894   - gen_cp1(ctx, op1, rt, rd);
4895   - break;
4896   - case OPC_BC1:
4897   - gen_compute_branch1(ctx, MASK_CP1_BCOND(ctx->opcode), imm << 2);
4898   - return;
4899   - case OPC_S_FMT:
4900   - case OPC_D_FMT:
4901   - case OPC_W_FMT:
4902   - case OPC_L_FMT:
4903   - gen_farith(ctx, MASK_CP1_FUNC(ctx->opcode), rt, rd, sa);
4904   - break;
4905   - default:
4906   - generate_exception_err(ctx, EXCP_RI, 1);
4907   - break;
  4882 + gen_cp1(ctx, op1, rt, rd);
  4883 + break;
  4884 + case OPC_BC1:
  4885 + gen_compute_branch1(ctx, MASK_CP1_BCOND(ctx->opcode), imm << 2);
  4886 + return;
  4887 + case OPC_S_FMT:
  4888 + case OPC_D_FMT:
  4889 + case OPC_W_FMT:
  4890 + case OPC_L_FMT:
  4891 + gen_farith(ctx, MASK_CP1_FUNC(ctx->opcode), rt, rd, sa);
  4892 + break;
  4893 + default:
  4894 + generate_exception_err(ctx, EXCP_RI, 1);
  4895 + break;
  4896 + }
  4897 + } else {
  4898 + generate_exception_err(ctx, EXCP_CpU, 1);
4908 4899 }
4909   -#else
4910   - generate_exception_err(ctx, EXCP_CpU, 1);
4911   -#endif
4912 4900 break;
4913 4901  
4914 4902 /* COP2. */
... ... @@ -4921,18 +4909,20 @@ static void decode_opc (DisasContext *ctx)
4921 4909 generate_exception_err(ctx, EXCP_CpU, 2);
4922 4910 break;
4923 4911  
4924   -#ifdef MIPS_USES_FPU
4925 4912 case OPC_CP3:
4926   - gen_op_cp1_enabled();
4927   - op1 = MASK_CP3(ctx->opcode);
4928   - switch (op1) {
4929   - /* Not implemented */
4930   - default:
4931   - generate_exception_err(ctx, EXCP_RI, 1);
4932   - break;
  4913 + if (env->CP0_Config1 & (1 << CP0C1_FP)) {
  4914 + gen_op_cp1_enabled();
  4915 + op1 = MASK_CP3(ctx->opcode);
  4916 + switch (op1) {
  4917 + /* Not implemented */
  4918 + default:
  4919 + generate_exception_err(ctx, EXCP_RI, 1);
  4920 + break;
  4921 + }
  4922 + } else {
  4923 + generate_exception(ctx, EXCP_RI);
4933 4924 }
4934 4925 break;
4935   -#endif
4936 4926  
4937 4927 #ifdef MIPS_HAS_MIPS64
4938 4928 /* MIPS64 opcodes */
... ... @@ -5079,7 +5069,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
5079 5069 gen_opc_instr_start[lj] = 1;
5080 5070 }
5081 5071 ctx.opcode = ldl_code(ctx.pc);
5082   - decode_opc(&ctx);
  5072 + decode_opc(env, &ctx);
5083 5073 ctx.pc += 4;
5084 5074  
5085 5075 if (env->singlestep_enabled)
... ... @@ -5148,8 +5138,6 @@ int gen_intermediate_code_pc (CPUState *env, struct TranslationBlock *tb)
5148 5138 return gen_intermediate_code_internal(env, tb, 1);
5149 5139 }
5150 5140  
5151   -#ifdef MIPS_USES_FPU
5152   -
5153 5141 void fpu_dump_state(CPUState *env, FILE *f,
5154 5142 int (*fpu_fprintf)(FILE *f, const char *fmt, ...),
5155 5143 int flags)
... ... @@ -5184,8 +5172,6 @@ void dump_fpu (CPUState *env)
5184 5172 }
5185 5173 }
5186 5174  
5187   -#endif /* MIPS_USES_FPU */
5188   -
5189 5175 #if defined(MIPS_HAS_MIPS64) && defined(MIPS_DEBUG_SIGN_EXTENSIONS)
5190 5176 /* Debug help: The architecture requires 32bit code to maintain proper
5191 5177 sign-extened values on 64bit machines. */
... ... @@ -5248,10 +5234,8 @@ void cpu_dump_state (CPUState *env, FILE *f,
5248 5234 c0_status, env->CP0_Cause, env->CP0_EPC);
5249 5235 cpu_fprintf(f, " Config0 0x%08x Config1 0x%08x LLAddr 0x" TARGET_FMT_lx "\n",
5250 5236 env->CP0_Config0, env->CP0_Config1, env->CP0_LLAddr);
5251   -#ifdef MIPS_USES_FPU
5252 5237 if (c0_status & (1 << CP0St_CU1))
5253 5238 fpu_dump_state(env, f, cpu_fprintf, flags);
5254   -#endif
5255 5239 #if defined(MIPS_HAS_MIPS64) && defined(MIPS_DEBUG_SIGN_EXTENSIONS)
5256 5240 cpu_mips_check_sign_extensions(env, f, cpu_fprintf, flags);
5257 5241 #endif
... ... @@ -5295,6 +5279,10 @@ void cpu_reset (CPUMIPSState *env)
5295 5279 env->CP0_EBase = 0x80000000;
5296 5280 env->CP0_Config0 = MIPS_CONFIG0;
5297 5281 env->CP0_Config1 = MIPS_CONFIG1;
  5282 +#ifdef MIPS_USES_FPU
  5283 + /* basic FPU register support */
  5284 + env->CP0_Config1 |= (1 << CP0C1_FP);
  5285 +#endif
5298 5286 env->CP0_Config2 = MIPS_CONFIG2;
5299 5287 env->CP0_Config3 = MIPS_CONFIG3;
5300 5288 env->CP0_Status = (1 << CP0St_BEV) | (1 << CP0St_ERL);
... ... @@ -5309,9 +5297,7 @@ void cpu_reset (CPUMIPSState *env)
5309 5297 env->hflags |= MIPS_HFLAG_UM;
5310 5298 env->user_mode_only = 1;
5311 5299 #endif
5312   -#ifdef MIPS_USES_FPU
5313   - env->fcr0 = MIPS_FCR0;
5314   -#endif
  5300 + env->fcr0 = MIPS_FCR0;
5315 5301 /* XXX some guesswork here, values are CPU specific */
5316 5302 env->SYNCI_Step = 16;
5317 5303 env->CCRes = 2;
... ...