Revision 43fe9bdb target-arm/helper.c

b/target-arm/helper.c
2720 2720
    float_status *s = &env->vfp.standard_fp_status;
2721 2721
    if ((float32_is_infinity(a) && float32_is_zero_or_denormal(b)) ||
2722 2722
        (float32_is_infinity(b) && float32_is_zero_or_denormal(a))) {
2723
        if (!(float32_is_zero(a) || float32_is_zero(b))) {
2724
            float_raise(float_flag_input_denormal, s);
2725
        }
2723 2726
        return float32_two;
2724 2727
    }
2725 2728
    return float32_sub(float32_two, float32_mul(a, b, s), s);
......
2731 2734
    float32 product;
2732 2735
    if ((float32_is_infinity(a) && float32_is_zero_or_denormal(b)) ||
2733 2736
        (float32_is_infinity(b) && float32_is_zero_or_denormal(a))) {
2737
        if (!(float32_is_zero(a) || float32_is_zero(b))) {
2738
            float_raise(float_flag_input_denormal, s);
2739
        }
2734 2740
        return float32_one_point_five;
2735 2741
    }
2736 2742
    product = float32_mul(a, b, s);
......
2791 2797
    } else if (float32_is_infinity(a)) {
2792 2798
        return float32_set_sign(float32_zero, float32_is_neg(a));
2793 2799
    } else if (float32_is_zero_or_denormal(a)) {
2800
        if (!float32_is_zero(a)) {
2801
            float_raise(float_flag_input_denormal, s);
2802
        }
2794 2803
        float_raise(float_flag_divbyzero, s);
2795 2804
        return float32_set_sign(float32_infinity, float32_is_neg(a));
2796 2805
    } else if (a_exp >= 253) {
......
2882 2891
        }
2883 2892
        return float32_default_nan;
2884 2893
    } else if (float32_is_zero_or_denormal(a)) {
2894
        if (!float32_is_zero(a)) {
2895
            float_raise(float_flag_input_denormal, s);
2896
        }
2885 2897
        float_raise(float_flag_divbyzero, s);
2886 2898
        return float32_set_sign(float32_infinity, float32_is_neg(a));
2887 2899
    } else if (float32_is_neg(a)) {

Also available in: Unified diff