Revision 6ea83fed target-mips/op_helper.c
b/target-mips/op_helper.c | ||
---|---|---|
529 | 529 |
return; |
530 | 530 |
} |
531 | 531 |
|
532 |
#ifdef MIPS_USES_FPU |
|
533 |
#include "softfloat.h" |
|
534 |
|
|
535 |
void fpu_handle_exception(void) |
|
536 |
{ |
|
537 |
#ifdef CONFIG_SOFTFLOAT |
|
538 |
int flags = get_float_exception_flags(&env->fp_status); |
|
539 |
unsigned int cpuflags = 0, enable, cause = 0; |
|
540 |
|
|
541 |
enable = GET_FP_ENABLE(env->fcr31); |
|
542 |
|
|
543 |
/* determine current flags */ |
|
544 |
if (flags & float_flag_invalid) { |
|
545 |
cpuflags |= FP_INVALID; |
|
546 |
cause |= FP_INVALID & enable; |
|
547 |
} |
|
548 |
if (flags & float_flag_divbyzero) { |
|
549 |
cpuflags |= FP_DIV0; |
|
550 |
cause |= FP_DIV0 & enable; |
|
551 |
} |
|
552 |
if (flags & float_flag_overflow) { |
|
553 |
cpuflags |= FP_OVERFLOW; |
|
554 |
cause |= FP_OVERFLOW & enable; |
|
555 |
} |
|
556 |
if (flags & float_flag_underflow) { |
|
557 |
cpuflags |= FP_UNDERFLOW; |
|
558 |
cause |= FP_UNDERFLOW & enable; |
|
559 |
} |
|
560 |
if (flags & float_flag_inexact) { |
|
561 |
cpuflags |= FP_INEXACT; |
|
562 |
cause |= FP_INEXACT & enable; |
|
563 |
} |
|
564 |
SET_FP_FLAGS(env->fcr31, cpuflags); |
|
565 |
SET_FP_CAUSE(env->fcr31, cause); |
|
566 |
#else |
|
567 |
SET_FP_FLAGS(env->fcr31, 0); |
|
568 |
SET_FP_CAUSE(env->fcr31, 0); |
|
569 |
#endif |
|
570 |
} |
|
571 |
#endif /* MIPS_USES_FPU */ |
|
572 |
|
|
532 | 573 |
/* TLB management */ |
533 | 574 |
#if defined(MIPS_USES_R4K_TLB) |
534 | 575 |
static void invalidate_tlb (int idx) |
Also available in: Unified diff