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