示例#1
0
INLINE floatx80 propagateFloatx80NaNOneArg(floatx80 a)
{
	if (floatx80_is_signaling_nan(a))
		float_raise(float_flag_invalid);

	a.low |= U64(0xC000000000000000);

	return a;
}
示例#2
0
文件: softfloat.c 项目: nikunjad/qemu
static floatx80 propagateFloatx80NaNOneArg(floatx80 a, float_status *status)
{
    if (floatx80_is_signaling_nan(a, status)) {
        float_raise(float_flag_invalid, status);
    }

    if (status->default_nan_mode) {
        return floatx80_default_nan(status);
    }

    return floatx80_maybe_silence_nan(a, status);
}
示例#3
0
文件: fyl2x.c 项目: broftkd/mess-svn
static floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b)
{
    int aIsNaN = floatx80_is_nan(a);
    int aIsSignalingNaN = floatx80_is_signaling_nan(a);
    int bIsNaN = floatx80_is_nan(b);
    int bIsSignalingNaN = floatx80_is_signaling_nan(b);
    a.low |= U64(0xC000000000000000);
    b.low |= U64(0xC000000000000000);
    if (aIsSignalingNaN | bIsSignalingNaN) float_raise(float_flag_invalid);
    if (aIsSignalingNaN) {
        if (bIsSignalingNaN) goto returnLargerSignificand;
        return bIsNaN ? b : a;
    }
    else if (aIsNaN) {
        if (bIsSignalingNaN | ! bIsNaN) return a;
 returnLargerSignificand:
        if (a.low < b.low) return b;
        if (b.low < a.low) return a;
        return (a.high < b.high) ? a : b;
    }
    else {
        return b;
    }
}