Commit bc1ad2decd3e5caeca90c09382b0a99e1c8d011e

Authored by bellard
1 parent 83fcb515

MIPS FPU support in linux user emulation


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1967 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 7 additions and 34 deletions
linux-user/main.c
@@ -1327,7 +1327,6 @@ void cpu_loop(CPUMIPSState *env) @@ -1327,7 +1327,6 @@ void cpu_loop(CPUMIPSState *env)
1327 arg5, 1327 arg5,
1328 arg6); 1328 arg6);
1329 } 1329 }
1330 - fail:  
1331 env->PC += 4; 1330 env->PC += 4;
1332 if ((unsigned int)ret >= (unsigned int)(-1133)) { 1331 if ((unsigned int)ret >= (unsigned int)(-1133)) {
1333 env->gpr[7] = 1; /* error flag */ 1332 env->gpr[7] = 1; /* error flag */
@@ -1342,39 +1341,10 @@ void cpu_loop(CPUMIPSState *env) @@ -1342,39 +1341,10 @@ void cpu_loop(CPUMIPSState *env)
1342 break; 1341 break;
1343 case EXCP_CpU: 1342 case EXCP_CpU:
1344 case EXCP_RI: 1343 case EXCP_RI:
1345 - {  
1346 - uint32_t insn, op;  
1347 -  
1348 - insn = tget32(env->PC);  
1349 - op = insn >> 26;  
1350 - // printf("insn=%08x op=%02x\n", insn, op);  
1351 - /* XXX: totally dummy FP ops just to be able to launch  
1352 - a few executables */  
1353 - switch(op) {  
1354 - case 0x31: /* LWC1 */  
1355 - env->PC += 4;  
1356 - break;  
1357 - case 0x39: /* SWC1 */  
1358 - env->PC += 4;  
1359 - break;  
1360 - case 0x11:  
1361 - switch((insn >> 21) & 0x1f) {  
1362 - case 0x02: /* CFC1 */  
1363 - env->PC += 4;  
1364 - break;  
1365 - default:  
1366 - goto sigill;  
1367 - }  
1368 - break;  
1369 - default:  
1370 - sigill:  
1371 - info.si_signo = TARGET_SIGILL;  
1372 - info.si_errno = 0;  
1373 - info.si_code = 0;  
1374 - queue_signal(info.si_signo, &info);  
1375 - break;  
1376 - }  
1377 - } 1344 + info.si_signo = TARGET_SIGILL;
  1345 + info.si_errno = 0;
  1346 + info.si_code = 0;
  1347 + queue_signal(info.si_signo, &info);
1378 break; 1348 break;
1379 default: 1349 default:
1380 // error: 1350 // error:
@@ -1700,6 +1670,9 @@ int main(int argc, char **argv) @@ -1700,6 +1670,9 @@ int main(int argc, char **argv)
1700 env->gpr[i] = regs->regs[i]; 1670 env->gpr[i] = regs->regs[i];
1701 } 1671 }
1702 env->PC = regs->cp0_epc; 1672 env->PC = regs->cp0_epc;
  1673 +#ifdef MIPS_USES_FPU
  1674 + env->CP0_Status |= (1 << CP0St_CU1);
  1675 +#endif
1703 } 1676 }
1704 #elif defined(TARGET_SH4) 1677 #elif defined(TARGET_SH4)
1705 { 1678 {