From 20f696343bda37bbc389554832ec55e3eb78f39a Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 12 Feb 2018 13:06:48 -0500 Subject: [PATCH] softfloat: Expand out the STATUS_PARAM macro Expand out STATUS_PARAM wherever it is used and delete the definition. Backports commit e5a41ffa870ad096eb2f084447fea5dd00a51b31 from qemu --- qemu/fpu/softfloat-specialize.h | 42 ++-- qemu/fpu/softfloat.c | 338 ++++++++++++++++---------------- qemu/include/fpu/softfloat.h | 331 ++++++++++++++++--------------- qemu/target-mips/msa_helper.c | 16 +- 4 files changed, 363 insertions(+), 364 deletions(-) diff --git a/qemu/fpu/softfloat-specialize.h b/qemu/fpu/softfloat-specialize.h index 23d73788..e343dcd9 100644 --- a/qemu/fpu/softfloat-specialize.h +++ b/qemu/fpu/softfloat-specialize.h @@ -170,7 +170,7 @@ const float128 float128_default_nan | should be simply `float_exception_flags |= flags;'. *----------------------------------------------------------------------------*/ -void float_raise( int8 flags STATUS_PARAM ) +void float_raise( int8 flags, float_status *status) { STATUS(float_exception_flags) |= flags; } @@ -253,7 +253,7 @@ float16 float16_maybe_silence_nan(float16 a_) | exception is raised. *----------------------------------------------------------------------------*/ -static commonNaNT float16ToCommonNaN( float16 a STATUS_PARAM ) +static commonNaNT float16ToCommonNaN( float16 a, float_status *status) { commonNaNT z; @@ -269,7 +269,7 @@ static commonNaNT float16ToCommonNaN( float16 a STATUS_PARAM ) | precision floating-point format. *----------------------------------------------------------------------------*/ -static float16 commonNaNToFloat16(commonNaNT a STATUS_PARAM) +static float16 commonNaNToFloat16(commonNaNT a, float_status *status) { uint16_t mantissa = a.high>>54; @@ -356,7 +356,7 @@ float32 float32_maybe_silence_nan( float32 a_ ) | exception is raised. *----------------------------------------------------------------------------*/ -static commonNaNT float32ToCommonNaN( float32 a STATUS_PARAM ) +static commonNaNT float32ToCommonNaN( float32 a, float_status *status) { commonNaNT z; @@ -372,7 +372,7 @@ static commonNaNT float32ToCommonNaN( float32 a STATUS_PARAM ) | precision floating-point format. *----------------------------------------------------------------------------*/ -static float32 commonNaNToFloat32( commonNaNT a STATUS_PARAM) +static float32 commonNaNToFloat32( commonNaNT a, float_status *status) { uint32_t mantissa = a.high>>41; @@ -507,7 +507,7 @@ static int pickNaN(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, *----------------------------------------------------------------------------*/ #if defined(TARGET_ARM) static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, - flag cIsQNaN, flag cIsSNaN, flag infzero STATUS_PARAM) + flag cIsQNaN, flag cIsSNaN, flag infzero, float_status *status) { /* For ARM, the (inf,zero,qnan) case sets InvalidOp and returns * the default NaN @@ -536,7 +536,7 @@ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, } #elif defined(TARGET_MIPS) static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, - flag cIsQNaN, flag cIsSNaN, flag infzero STATUS_PARAM) + flag cIsQNaN, flag cIsSNaN, flag infzero, float_status *status) { /* For MIPS, the (inf,zero,qnan) case sets InvalidOp and returns * the default NaN @@ -563,7 +563,7 @@ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, } #elif defined(TARGET_PPC) static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, - flag cIsQNaN, flag cIsSNaN, flag infzero STATUS_PARAM) + flag cIsQNaN, flag cIsSNaN, flag infzero, float_status *status) { /* For PPC, the (inf,zero,qnan) case sets InvalidOp, but we prefer * to return an input NaN if we have one (ie c) rather than generating @@ -590,7 +590,7 @@ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, * This is unlikely to actually match any real implementation. */ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, - flag cIsQNaN, flag cIsSNaN, flag infzero STATUS_PARAM) + flag cIsQNaN, flag cIsSNaN, flag infzero, float_status *status) { if (aIsSNaN || aIsQNaN) { return 0; @@ -608,7 +608,7 @@ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN, | signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ -static float32 propagateFloat32NaN( float32 a, float32 b STATUS_PARAM) +static float32 propagateFloat32NaN( float32 a, float32 b, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; flag aIsLargerSignificand; @@ -652,7 +652,7 @@ static float32 propagateFloat32NaN( float32 a, float32 b STATUS_PARAM) *----------------------------------------------------------------------------*/ static float32 propagateFloat32MulAddNaN(float32 a, float32 b, - float32 c, flag infzero STATUS_PARAM) + float32 c, flag infzero, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN, cIsQuietNaN, cIsSignalingNaN; @@ -767,7 +767,7 @@ float64 float64_maybe_silence_nan( float64 a_ ) | exception is raised. *----------------------------------------------------------------------------*/ -static commonNaNT float64ToCommonNaN( float64 a STATUS_PARAM) +static commonNaNT float64ToCommonNaN( float64 a, float_status *status) { commonNaNT z; @@ -783,7 +783,7 @@ static commonNaNT float64ToCommonNaN( float64 a STATUS_PARAM) | precision floating-point format. *----------------------------------------------------------------------------*/ -static float64 commonNaNToFloat64( commonNaNT a STATUS_PARAM) +static float64 commonNaNToFloat64( commonNaNT a, float_status *status) { uint64_t mantissa = a.high>>12; @@ -806,7 +806,7 @@ static float64 commonNaNToFloat64( commonNaNT a STATUS_PARAM) | signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ -static float64 propagateFloat64NaN( float64 a, float64 b STATUS_PARAM) +static float64 propagateFloat64NaN( float64 a, float64 b, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; flag aIsLargerSignificand; @@ -850,7 +850,7 @@ static float64 propagateFloat64NaN( float64 a, float64 b STATUS_PARAM) *----------------------------------------------------------------------------*/ static float64 propagateFloat64MulAddNaN(float64 a, float64 b, - float64 c, flag infzero STATUS_PARAM) + float64 c, flag infzero, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN, cIsQuietNaN, cIsSignalingNaN; @@ -975,7 +975,7 @@ floatx80 floatx80_maybe_silence_nan( floatx80 a ) | invalid exception is raised. *----------------------------------------------------------------------------*/ -static commonNaNT floatx80ToCommonNaN( floatx80 a STATUS_PARAM) +static commonNaNT floatx80ToCommonNaN( floatx80 a, float_status *status) { commonNaNT z; @@ -997,7 +997,7 @@ static commonNaNT floatx80ToCommonNaN( floatx80 a STATUS_PARAM) | double-precision floating-point format. *----------------------------------------------------------------------------*/ -static floatx80 commonNaNToFloatx80( commonNaNT a STATUS_PARAM) +static floatx80 commonNaNToFloatx80( commonNaNT a, float_status *status) { floatx80 z; @@ -1024,7 +1024,7 @@ static floatx80 commonNaNToFloatx80( commonNaNT a STATUS_PARAM) | `b' is a signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ -static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b STATUS_PARAM) +static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; flag aIsLargerSignificand; @@ -1134,7 +1134,7 @@ float128 float128_maybe_silence_nan( float128 a ) | exception is raised. *----------------------------------------------------------------------------*/ -static commonNaNT float128ToCommonNaN( float128 a STATUS_PARAM) +static commonNaNT float128ToCommonNaN( float128 a, float_status *status) { commonNaNT z; @@ -1149,7 +1149,7 @@ static commonNaNT float128ToCommonNaN( float128 a STATUS_PARAM) | precision floating-point format. *----------------------------------------------------------------------------*/ -static float128 commonNaNToFloat128( commonNaNT a STATUS_PARAM) +static float128 commonNaNToFloat128( commonNaNT a, float_status *status) { float128 z; @@ -1170,7 +1170,7 @@ static float128 commonNaNToFloat128( commonNaNT a STATUS_PARAM) | `b' is a signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ -static float128 propagateFloat128NaN( float128 a, float128 b STATUS_PARAM) +static float128 propagateFloat128NaN( float128 a, float128 b, float_status *status) { flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; flag aIsLargerSignificand; diff --git a/qemu/fpu/softfloat.c b/qemu/fpu/softfloat.c index d93ead6a..7e9dd0f2 100644 --- a/qemu/fpu/softfloat.c +++ b/qemu/fpu/softfloat.c @@ -144,7 +144,7 @@ static inline flag extractFloat16Sign(float16 a) | positive or negative integer is returned. *----------------------------------------------------------------------------*/ -static int32 roundAndPackInt32( flag zSign, uint64_t absZ STATUS_PARAM) +static int32 roundAndPackInt32( flag zSign, uint64_t absZ, float_status *status) { int8 roundingMode; flag roundNearestEven; @@ -196,7 +196,7 @@ static int32 roundAndPackInt32( flag zSign, uint64_t absZ STATUS_PARAM) | returned. *----------------------------------------------------------------------------*/ -static int64 roundAndPackInt64( flag zSign, uint64_t absZ0, uint64_t absZ1 STATUS_PARAM) +static int64 roundAndPackInt64( flag zSign, uint64_t absZ0, uint64_t absZ1, float_status *status) { int8 roundingMode; flag roundNearestEven, increment; @@ -251,7 +251,7 @@ static int64 roundAndPackInt64( flag zSign, uint64_t absZ0, uint64_t absZ1 STATU *----------------------------------------------------------------------------*/ static int64 roundAndPackUint64(flag zSign, uint64_t absZ0, - uint64_t absZ1 STATUS_PARAM) + uint64_t absZ1, float_status *status) { int8 roundingMode; flag roundNearestEven, increment; @@ -332,7 +332,7 @@ static inline flag extractFloat32Sign( float32 a ) | If `a' is denormal and we are in flush-to-zero mode then set the | input-denormal exception and return zero. Otherwise just return the value. *----------------------------------------------------------------------------*/ -float32 float32_squash_input_denormal(float32 a STATUS_PARAM) +float32 float32_squash_input_denormal(float32 a, float_status *status) { if (STATUS(flush_inputs_to_zero)) { if (extractFloat32Exp(a) == 0 && extractFloat32Frac(a) != 0) { @@ -402,7 +402,7 @@ static inline float32 packFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig) | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float32 roundAndPackFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig STATUS_PARAM) +static float32 roundAndPackFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig, float_status *status) { int8 roundingMode; flag roundNearestEven; @@ -471,7 +471,7 @@ static float32 roundAndPackFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig *----------------------------------------------------------------------------*/ static float32 - normalizeRoundAndPackFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig STATUS_PARAM) + normalizeRoundAndPackFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig, float_status *status) { int8 shiftCount; @@ -517,7 +517,7 @@ static inline flag extractFloat64Sign( float64 a ) | If `a' is denormal and we are in flush-to-zero mode then set the | input-denormal exception and return zero. Otherwise just return the value. *----------------------------------------------------------------------------*/ -float64 float64_squash_input_denormal(float64 a STATUS_PARAM) +float64 float64_squash_input_denormal(float64 a, float_status *status) { if (STATUS(flush_inputs_to_zero)) { if (extractFloat64Exp(a) == 0 && extractFloat64Frac(a) != 0) { @@ -587,7 +587,7 @@ static inline float64 packFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig) | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float64 roundAndPackFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig STATUS_PARAM) +static float64 roundAndPackFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig, float_status *status) { int8 roundingMode; flag roundNearestEven; @@ -655,7 +655,7 @@ static float64 roundAndPackFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig *----------------------------------------------------------------------------*/ static float64 - normalizeRoundAndPackFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig STATUS_PARAM) + normalizeRoundAndPackFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig, float_status *status) { int8 shiftCount; @@ -760,7 +760,7 @@ static inline floatx80 packFloatx80( flag zSign, int32 zExp, uint64_t zSig ) static floatx80 roundAndPackFloatx80( int8 roundingPrecision, flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 - STATUS_PARAM) +, float_status *status) { int8 roundingMode; flag roundNearestEven, increment, isTiny; @@ -943,7 +943,7 @@ static floatx80 static floatx80 normalizeRoundAndPackFloatx80( int8 roundingPrecision, flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 - STATUS_PARAM) +, float_status *status) { int8 shiftCount; @@ -1095,7 +1095,7 @@ static inline float128 static float128 roundAndPackFloat128( - flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1, uint64_t zSig2 STATUS_PARAM) + flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1, uint64_t zSig2, float_status *status) { int8 roundingMode; flag roundNearestEven, increment, isTiny; @@ -1208,7 +1208,7 @@ static float128 static float128 normalizeRoundAndPackFloat128( - flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 STATUS_PARAM) + flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1, float_status *status) { int8 shiftCount; uint64_t zSig2; @@ -1238,7 +1238,7 @@ static float128 | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 int32_to_float32(int32_t a STATUS_PARAM) +float32 int32_to_float32(int32_t a, float_status *status) { flag zSign; @@ -1255,7 +1255,7 @@ float32 int32_to_float32(int32_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 int32_to_float64(int32_t a STATUS_PARAM) +float64 int32_to_float64(int32_t a, float_status *status) { flag zSign; uint32 absA; @@ -1278,7 +1278,7 @@ float64 int32_to_float64(int32_t a STATUS_PARAM) | Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 int32_to_floatx80(int32_t a STATUS_PARAM) +floatx80 int32_to_floatx80(int32_t a, float_status *status) { flag zSign; uint32 absA; @@ -1300,7 +1300,7 @@ floatx80 int32_to_floatx80(int32_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 int32_to_float128(int32_t a STATUS_PARAM) +float128 int32_to_float128(int32_t a, float_status *status) { flag zSign; uint32 absA; @@ -1322,7 +1322,7 @@ float128 int32_to_float128(int32_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 int64_to_float32(int64_t a STATUS_PARAM) +float32 int64_to_float32(int64_t a, float_status *status) { flag zSign; uint64 absA; @@ -1354,7 +1354,7 @@ float32 int64_to_float32(int64_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 int64_to_float64(int64_t a STATUS_PARAM) +float64 int64_to_float64(int64_t a, float_status *status) { flag zSign; @@ -1374,7 +1374,7 @@ float64 int64_to_float64(int64_t a STATUS_PARAM) | Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 int64_to_floatx80(int64_t a STATUS_PARAM) +floatx80 int64_to_floatx80(int64_t a, float_status *status) { flag zSign; uint64 absA; @@ -1394,7 +1394,7 @@ floatx80 int64_to_floatx80(int64_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 int64_to_float128(int64_t a STATUS_PARAM) +float128 int64_to_float128(int64_t a, float_status *status) { flag zSign; uint64 absA; @@ -1427,7 +1427,7 @@ float128 int64_to_float128(int64_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 uint64_to_float32(uint64_t a STATUS_PARAM) +float32 uint64_to_float32(uint64_t a, float_status *status) { int shiftcount; @@ -1462,7 +1462,7 @@ float32 uint64_to_float32(uint64_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 uint64_to_float64(uint64_t a STATUS_PARAM) +float64 uint64_to_float64(uint64_t a, float_status *status) { int exp = 0x43C; int shiftcount; @@ -1486,7 +1486,7 @@ float64 uint64_to_float64(uint64_t a STATUS_PARAM) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 uint64_to_float128(uint64_t a STATUS_PARAM) +float128 uint64_to_float128(uint64_t a, float_status *status) { if (a == 0) { float128 zero = {0}; @@ -1505,7 +1505,7 @@ float128 uint64_to_float128(uint64_t a STATUS_PARAM) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int32 float32_to_int32( float32 a STATUS_PARAM ) +int32 float32_to_int32( float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1536,7 +1536,7 @@ int32 float32_to_int32( float32 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int32 float32_to_int32_round_to_zero( float32 a STATUS_PARAM ) +int32 float32_to_int32_round_to_zero( float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1579,7 +1579,7 @@ int32 float32_to_int32_round_to_zero( float32 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int_fast16_t float32_to_int16_round_to_zero(float32 a STATUS_PARAM) +int_fast16_t float32_to_int16_round_to_zero(float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1628,7 +1628,7 @@ int_fast16_t float32_to_int16_round_to_zero(float32 a STATUS_PARAM) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int64 float32_to_int64( float32 a STATUS_PARAM ) +int64 float32_to_int64( float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1667,7 +1667,7 @@ int64 float32_to_int64( float32 a STATUS_PARAM ) | raise the inexact exception flag. *----------------------------------------------------------------------------*/ -uint64 float32_to_uint64(float32 a STATUS_PARAM) +uint64 float32_to_uint64(float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1712,7 +1712,7 @@ uint64 float32_to_uint64(float32 a STATUS_PARAM) | not round to zero will raise the inexact flag. *----------------------------------------------------------------------------*/ -uint64 float32_to_uint64_round_to_zero(float32 a STATUS_PARAM) +uint64 float32_to_uint64_round_to_zero(float32 a, float_status *status) { int64_t v; signed char current_rounding_mode = STATUS(float_rounding_mode); @@ -1732,7 +1732,7 @@ uint64 float32_to_uint64_round_to_zero(float32 a STATUS_PARAM) | returned. *----------------------------------------------------------------------------*/ -int64 float32_to_int64_round_to_zero( float32 a STATUS_PARAM ) +int64 float32_to_int64_round_to_zero( float32 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -1776,7 +1776,7 @@ int64 float32_to_int64_round_to_zero( float32 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float64 float32_to_float64( float32 a STATUS_PARAM ) +float64 float32_to_float64( float32 a, float_status *status) { flag aSign; int_fast16_t aExp; @@ -1806,7 +1806,7 @@ float64 float32_to_float64( float32 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 float32_to_floatx80( float32 a STATUS_PARAM ) +floatx80 float32_to_floatx80( float32 a, float_status *status) { flag aSign; int_fast16_t aExp; @@ -1836,7 +1836,7 @@ floatx80 float32_to_floatx80( float32 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float128 float32_to_float128( float32 a STATUS_PARAM ) +float128 float32_to_float128( float32 a, float_status *status) { flag aSign; int_fast16_t aExp; @@ -1866,7 +1866,7 @@ float128 float32_to_float128( float32 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_round_to_int( float32 a STATUS_PARAM) +float32 float32_round_to_int( float32 a, float_status *status) { flag aSign; int_fast16_t aExp; @@ -1946,7 +1946,7 @@ float32 float32_round_to_int( float32 a STATUS_PARAM) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float32 addFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM) +static float32 addFloat32Sigs( float32 a, float32 b, flag zSign, float_status *status) { int_fast16_t aExp, bExp, zExp; uint32_t aSig, bSig, zSig; @@ -2025,7 +2025,7 @@ static float32 addFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float32 subFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM) +static float32 subFloat32Sigs( float32 a, float32 b, flag zSign, float_status *status) { int_fast16_t aExp, bExp, zExp; uint32_t aSig, bSig, zSig; @@ -2098,7 +2098,7 @@ static float32 subFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM) | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_add( float32 a, float32 b STATUS_PARAM ) +float32 float32_add( float32 a, float32 b, float_status *status) { flag aSign, bSign; a = float32_squash_input_denormal(a STATUS_VAR); @@ -2121,7 +2121,7 @@ float32 float32_add( float32 a, float32 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_sub( float32 a, float32 b STATUS_PARAM ) +float32 float32_sub( float32 a, float32 b, float_status *status) { flag aSign, bSign; a = float32_squash_input_denormal(a STATUS_VAR); @@ -2144,7 +2144,7 @@ float32 float32_sub( float32 a, float32 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_mul( float32 a, float32 b STATUS_PARAM ) +float32 float32_mul( float32 a, float32 b, float_status *status) { flag aSign, bSign, zSign; int_fast16_t aExp, bExp, zExp; @@ -2207,7 +2207,7 @@ float32 float32_mul( float32 a, float32 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_div( float32 a, float32 b STATUS_PARAM ) +float32 float32_div( float32 a, float32 b, float_status *status) { flag aSign, bSign, zSign; int_fast16_t aExp, bExp, zExp; @@ -2271,7 +2271,7 @@ float32 float32_div( float32 a, float32 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_rem( float32 a, float32 b STATUS_PARAM ) +float32 float32_rem( float32 a, float32 b, float_status *status) { flag aSign, zSign; int_fast16_t aExp, bExp, expDiff; @@ -2377,7 +2377,7 @@ float32 float32_rem( float32 a, float32 b STATUS_PARAM ) | externally will flip the sign bit on NaNs.) *----------------------------------------------------------------------------*/ -float32 float32_muladd(float32 a, float32 b, float32 c, int flags STATUS_PARAM) +float32 float32_muladd(float32 a, float32 b, float32 c, int flags, float_status *status) { flag aSign, bSign, cSign, zSign; int_fast16_t aExp, bExp, cExp, pExp, zExp, expDiff; @@ -2597,7 +2597,7 @@ float32 float32_muladd(float32 a, float32 b, float32 c, int flags STATUS_PARAM) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_sqrt( float32 a STATUS_PARAM ) +float32 float32_sqrt( float32 a, float_status *status) { flag aSign; int_fast16_t aExp, zExp; @@ -2683,7 +2683,7 @@ static const float64 float32_exp2_coefficients[15] = const_float64( 0x3d6ae7f3e733b81fll ), /* 15 */ }; -float32 float32_exp2( float32 a STATUS_PARAM ) +float32 float32_exp2( float32 a, float_status *status) { flag aSign; int_fast16_t aExp; @@ -2731,7 +2731,7 @@ float32 float32_exp2( float32 a STATUS_PARAM ) | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 float32_log2( float32 a STATUS_PARAM ) +float32 float32_log2( float32 a, float_status *status) { flag aSign, zSign; int_fast16_t aExp; @@ -2781,7 +2781,7 @@ float32 float32_log2( float32 a STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_eq( float32 a, float32 b STATUS_PARAM ) +int float32_eq( float32 a, float32 b, float_status *status) { uint32_t av, bv; a = float32_squash_input_denormal(a STATUS_VAR); @@ -2805,7 +2805,7 @@ int float32_eq( float32 a, float32 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_le( float32 a, float32 b STATUS_PARAM ) +int float32_le( float32 a, float32 b, float_status *status) { flag aSign, bSign; uint32_t av, bv; @@ -2834,7 +2834,7 @@ int float32_le( float32 a, float32 b STATUS_PARAM ) | to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_lt( float32 a, float32 b STATUS_PARAM ) +int float32_lt( float32 a, float32 b, float_status *status ) { flag aSign, bSign; uint32_t av, bv; @@ -2863,7 +2863,7 @@ int float32_lt( float32 a, float32 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_unordered( float32 a, float32 b STATUS_PARAM ) +int float32_unordered( float32 a, float32 b, float_status *status ) { a = float32_squash_input_denormal(a STATUS_VAR); b = float32_squash_input_denormal(b STATUS_VAR); @@ -2884,7 +2884,7 @@ int float32_unordered( float32 a, float32 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_eq_quiet( float32 a, float32 b STATUS_PARAM ) +int float32_eq_quiet( float32 a, float32 b, float_status *status ) { a = float32_squash_input_denormal(a STATUS_VAR); b = float32_squash_input_denormal(b STATUS_VAR); @@ -2908,7 +2908,7 @@ int float32_eq_quiet( float32 a, float32 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_le_quiet( float32 a, float32 b STATUS_PARAM ) +int float32_le_quiet( float32 a, float32 b, float_status *status ) { flag aSign, bSign; uint32_t av, bv; @@ -2939,7 +2939,7 @@ int float32_le_quiet( float32 a, float32 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_lt_quiet( float32 a, float32 b STATUS_PARAM ) +int float32_lt_quiet( float32 a, float32 b, float_status *status ) { flag aSign, bSign; uint32_t av, bv; @@ -2970,7 +2970,7 @@ int float32_lt_quiet( float32 a, float32 b STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float32_unordered_quiet( float32 a, float32 b STATUS_PARAM ) +int float32_unordered_quiet( float32 a, float32 b, float_status *status ) { a = float32_squash_input_denormal(a STATUS_VAR); b = float32_squash_input_denormal(b STATUS_VAR); @@ -2996,7 +2996,7 @@ int float32_unordered_quiet( float32 a, float32 b STATUS_PARAM ) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int32 float64_to_int32( float64 a STATUS_PARAM ) +int32 float64_to_int32( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp, shiftCount; @@ -3024,7 +3024,7 @@ int32 float64_to_int32( float64 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int32 float64_to_int32_round_to_zero( float64 a STATUS_PARAM ) +int32 float64_to_int32_round_to_zero( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp, shiftCount; @@ -3071,7 +3071,7 @@ int32 float64_to_int32_round_to_zero( float64 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int_fast16_t float64_to_int16_round_to_zero(float64 a STATUS_PARAM) +int_fast16_t float64_to_int16_round_to_zero(float64 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -3122,7 +3122,7 @@ int_fast16_t float64_to_int16_round_to_zero(float64 a STATUS_PARAM) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int64 float64_to_int64( float64 a STATUS_PARAM ) +int64 float64_to_int64( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp, shiftCount; @@ -3165,7 +3165,7 @@ int64 float64_to_int64( float64 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int64 float64_to_int64_round_to_zero( float64 a STATUS_PARAM ) +int64 float64_to_int64_round_to_zero( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp, shiftCount; @@ -3215,7 +3215,7 @@ int64 float64_to_int64_round_to_zero( float64 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float32 float64_to_float32( float64 a STATUS_PARAM ) +float32 float64_to_float32( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp; @@ -3286,7 +3286,7 @@ static float16 packFloat16(flag zSign, int_fast16_t zExp, uint16_t zSig) *----------------------------------------------------------------------------*/ static float32 roundAndPackFloat16(flag zSign, int_fast16_t zExp, - uint32_t zSig, flag ieee STATUS_PARAM) + uint32_t zSig, flag ieee, float_status *status) { int maxexp = ieee ? 29 : 30; uint32_t mask; @@ -3382,7 +3382,7 @@ static void normalizeFloat16Subnormal(uint32_t aSig, int_fast16_t *zExpPtr, /* Half precision floats come in two formats: standard IEEE and "ARM" format. The latter gains extra exponent range by omitting the NaN/Inf encodings. */ -float32 float16_to_float32(float16 a, flag ieee STATUS_PARAM) +float32 float16_to_float32(float16 a, flag ieee, float_status *status) { flag aSign; int_fast16_t aExp; @@ -3409,7 +3409,7 @@ float32 float16_to_float32(float16 a, flag ieee STATUS_PARAM) return packFloat32( aSign, aExp + 0x70, aSig << 13); } -float16 float32_to_float16(float32 a, flag ieee STATUS_PARAM) +float16 float32_to_float16(float32 a, flag ieee, float_status *status) { flag aSign; int_fast16_t aExp; @@ -3453,7 +3453,7 @@ float16 float32_to_float16(float32 a, flag ieee STATUS_PARAM) return roundAndPackFloat16(aSign, aExp, aSig, ieee STATUS_VAR); } -float64 float16_to_float64(float16 a, flag ieee STATUS_PARAM) +float64 float16_to_float64(float16 a, flag ieee, float_status *status) { flag aSign; int_fast16_t aExp; @@ -3481,7 +3481,7 @@ float64 float16_to_float64(float16 a, flag ieee STATUS_PARAM) return packFloat64(aSign, aExp + 0x3f0, ((uint64_t)aSig) << 42); } -float16 float64_to_float16(float64 a, flag ieee STATUS_PARAM) +float16 float64_to_float16(float64 a, flag ieee, float_status *status) { flag aSign; int_fast16_t aExp; @@ -3535,7 +3535,7 @@ float16 float64_to_float16(float64 a, flag ieee STATUS_PARAM) | Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 float64_to_floatx80( float64 a STATUS_PARAM ) +floatx80 float64_to_floatx80( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp; @@ -3566,7 +3566,7 @@ floatx80 float64_to_floatx80( float64 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float128 float64_to_float128( float64 a STATUS_PARAM ) +float128 float64_to_float128( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp; @@ -3597,7 +3597,7 @@ float128 float64_to_float128( float64 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_round_to_int( float64 a STATUS_PARAM ) +float64 float64_round_to_int( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp; @@ -3671,7 +3671,7 @@ float64 float64_round_to_int( float64 a STATUS_PARAM ) } -float64 float64_trunc_to_int( float64 a STATUS_PARAM) +float64 float64_trunc_to_int( float64 a, float_status *status) { int oldmode; float64 res; @@ -3690,7 +3690,7 @@ float64 float64_trunc_to_int( float64 a STATUS_PARAM) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float64 addFloat64Sigs( float64 a, float64 b, flag zSign STATUS_PARAM ) +static float64 addFloat64Sigs( float64 a, float64 b, flag zSign, float_status *status ) { int_fast16_t aExp, bExp, zExp; uint64_t aSig, bSig, zSig; @@ -3769,7 +3769,7 @@ static float64 addFloat64Sigs( float64 a, float64 b, flag zSign STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float64 subFloat64Sigs( float64 a, float64 b, flag zSign STATUS_PARAM ) +static float64 subFloat64Sigs( float64 a, float64 b, flag zSign, float_status *status ) { int_fast16_t aExp, bExp, zExp; uint64_t aSig, bSig, zSig; @@ -3842,7 +3842,7 @@ static float64 subFloat64Sigs( float64 a, float64 b, flag zSign STATUS_PARAM ) | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_add( float64 a, float64 b STATUS_PARAM ) +float64 float64_add( float64 a, float64 b, float_status *status ) { flag aSign, bSign; a = float64_squash_input_denormal(a STATUS_VAR); @@ -3865,7 +3865,7 @@ float64 float64_add( float64 a, float64 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_sub( float64 a, float64 b STATUS_PARAM ) +float64 float64_sub( float64 a, float64 b, float_status *status ) { flag aSign, bSign; a = float64_squash_input_denormal(a STATUS_VAR); @@ -3888,7 +3888,7 @@ float64 float64_sub( float64 a, float64 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_mul( float64 a, float64 b STATUS_PARAM ) +float64 float64_mul( float64 a, float64 b, float_status *status ) { flag aSign, bSign, zSign; int_fast16_t aExp, bExp, zExp; @@ -3949,7 +3949,7 @@ float64 float64_mul( float64 a, float64 b STATUS_PARAM ) | the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_div( float64 a, float64 b STATUS_PARAM ) +float64 float64_div( float64 a, float64 b, float_status *status ) { flag aSign, bSign, zSign; int_fast16_t aExp, bExp, zExp; @@ -4021,7 +4021,7 @@ float64 float64_div( float64 a, float64 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_rem( float64 a, float64 b STATUS_PARAM ) +float64 float64_rem( float64 a, float64 b, float_status *status ) { flag aSign, zSign; int_fast16_t aExp, bExp, expDiff; @@ -4112,7 +4112,7 @@ float64 float64_rem( float64 a, float64 b STATUS_PARAM ) | externally will flip the sign bit on NaNs.) *----------------------------------------------------------------------------*/ -float64 float64_muladd(float64 a, float64 b, float64 c, int flags STATUS_PARAM) +float64 float64_muladd(float64 a, float64 b, float64 c, int flags, float_status *status) { flag aSign, bSign, cSign, zSign; int_fast16_t aExp, bExp, cExp, pExp, zExp, expDiff; @@ -4353,7 +4353,7 @@ float64 float64_muladd(float64 a, float64 b, float64 c, int flags STATUS_PARAM) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_sqrt( float64 a STATUS_PARAM ) +float64 float64_sqrt( float64 a, float_status *status ) { flag aSign; int_fast16_t aExp, zExp; @@ -4404,7 +4404,7 @@ float64 float64_sqrt( float64 a STATUS_PARAM ) | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 float64_log2( float64 a STATUS_PARAM ) +float64 float64_log2( float64 a, float_status *status ) { flag aSign, zSign; int_fast16_t aExp; @@ -4453,7 +4453,7 @@ float64 float64_log2( float64 a STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_eq( float64 a, float64 b STATUS_PARAM ) +int float64_eq( float64 a, float64 b, float_status *status ) { uint64_t av, bv; a = float64_squash_input_denormal(a STATUS_VAR); @@ -4478,7 +4478,7 @@ int float64_eq( float64 a, float64 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_le( float64 a, float64 b STATUS_PARAM ) +int float64_le( float64 a, float64 b, float_status *status ) { flag aSign, bSign; uint64_t av, bv; @@ -4507,7 +4507,7 @@ int float64_le( float64 a, float64 b STATUS_PARAM ) | to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_lt( float64 a, float64 b STATUS_PARAM ) +int float64_lt( float64 a, float64 b, float_status *status ) { flag aSign, bSign; uint64_t av, bv; @@ -4536,7 +4536,7 @@ int float64_lt( float64 a, float64 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_unordered( float64 a, float64 b STATUS_PARAM ) +int float64_unordered( float64 a, float64 b, float_status *status ) { a = float64_squash_input_denormal(a STATUS_VAR); b = float64_squash_input_denormal(b STATUS_VAR); @@ -4557,7 +4557,7 @@ int float64_unordered( float64 a, float64 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_eq_quiet( float64 a, float64 b STATUS_PARAM ) +int float64_eq_quiet( float64 a, float64 b, float_status *status ) { uint64_t av, bv; a = float64_squash_input_denormal(a STATUS_VAR); @@ -4584,7 +4584,7 @@ int float64_eq_quiet( float64 a, float64 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_le_quiet( float64 a, float64 b STATUS_PARAM ) +int float64_le_quiet( float64 a, float64 b, float_status *status ) { flag aSign, bSign; uint64_t av, bv; @@ -4615,7 +4615,7 @@ int float64_le_quiet( float64 a, float64 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_lt_quiet( float64 a, float64 b STATUS_PARAM ) +int float64_lt_quiet( float64 a, float64 b, float_status *status ) { flag aSign, bSign; uint64_t av, bv; @@ -4646,7 +4646,7 @@ int float64_lt_quiet( float64 a, float64 b STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float64_unordered_quiet( float64 a, float64 b STATUS_PARAM ) +int float64_unordered_quiet( float64 a, float64 b, float_status *status ) { a = float64_squash_input_denormal(a STATUS_VAR); b = float64_squash_input_denormal(b STATUS_VAR); @@ -4672,7 +4672,7 @@ int float64_unordered_quiet( float64 a, float64 b STATUS_PARAM ) | overflows, the largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int32 floatx80_to_int32( floatx80 a STATUS_PARAM ) +int32 floatx80_to_int32( floatx80 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -4703,7 +4703,7 @@ int32 floatx80_to_int32( floatx80 a STATUS_PARAM ) | sign as `a' is returned. *----------------------------------------------------------------------------*/ -int32 floatx80_to_int32_round_to_zero( floatx80 a STATUS_PARAM ) +int32 floatx80_to_int32_round_to_zero( floatx80 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -4752,7 +4752,7 @@ int32 floatx80_to_int32_round_to_zero( floatx80 a STATUS_PARAM ) | overflows, the largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int64 floatx80_to_int64( floatx80 a STATUS_PARAM ) +int64 floatx80_to_int64( floatx80 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -4796,7 +4796,7 @@ int64 floatx80_to_int64( floatx80 a STATUS_PARAM ) | sign as `a' is returned. *----------------------------------------------------------------------------*/ -int64 floatx80_to_int64_round_to_zero( floatx80 a STATUS_PARAM ) +int64 floatx80_to_int64_round_to_zero( floatx80 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -4841,7 +4841,7 @@ int64 floatx80_to_int64_round_to_zero( floatx80 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float32 floatx80_to_float32( floatx80 a STATUS_PARAM ) +float32 floatx80_to_float32( floatx80 a, float_status *status ) { flag aSign; int32 aExp; @@ -4873,7 +4873,7 @@ float32 floatx80_to_float32( floatx80 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float64 floatx80_to_float64( floatx80 a STATUS_PARAM ) +float64 floatx80_to_float64( floatx80 a, float_status *status ) { flag aSign; int32 aExp; @@ -4905,7 +4905,7 @@ float64 floatx80_to_float64( floatx80 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 floatx80_to_float128( floatx80 a STATUS_PARAM ) +float128 floatx80_to_float128( floatx80 a, float_status *status ) { flag aSign; int_fast16_t aExp; @@ -4933,7 +4933,7 @@ float128 floatx80_to_float128( floatx80 a STATUS_PARAM ) | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_round_to_int( floatx80 a STATUS_PARAM ) +floatx80 floatx80_round_to_int( floatx80 a, float_status *status ) { flag aSign; int32 aExp; @@ -5030,7 +5030,7 @@ floatx80 floatx80_round_to_int( floatx80 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign STATUS_PARAM) +static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign, float_status *status) { int32 aExp, bExp, zExp; uint64_t aSig, bSig, zSig0, zSig1; @@ -5096,7 +5096,7 @@ static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign STATUS_PARAM | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign STATUS_PARAM ) +static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign, float_status *status ) { int32 aExp, bExp, zExp; uint64_t aSig, bSig, zSig0, zSig1; @@ -5162,7 +5162,7 @@ static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign STATUS_PARAM | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_add( floatx80 a, floatx80 b STATUS_PARAM ) +floatx80 floatx80_add( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5187,7 +5187,7 @@ floatx80 floatx80_add( floatx80 a, floatx80 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_sub( floatx80 a, floatx80 b STATUS_PARAM ) +floatx80 floatx80_sub( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5212,7 +5212,7 @@ floatx80 floatx80_sub( floatx80 a, floatx80 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_mul( floatx80 a, floatx80 b STATUS_PARAM ) +floatx80 floatx80_mul( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; @@ -5275,7 +5275,7 @@ floatx80 floatx80_mul( floatx80 a, floatx80 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_div( floatx80 a, floatx80 b STATUS_PARAM ) +floatx80 floatx80_div( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; @@ -5359,7 +5359,7 @@ floatx80 floatx80_div( floatx80 a, floatx80 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_rem( floatx80 a, floatx80 b STATUS_PARAM ) +floatx80 floatx80_rem( floatx80 a, floatx80 b, float_status *status ) { flag aSign, zSign; int32 aExp, bExp, expDiff; @@ -5459,7 +5459,7 @@ floatx80 floatx80_rem( floatx80 a, floatx80 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 floatx80_sqrt( floatx80 a STATUS_PARAM ) +floatx80 floatx80_sqrt( floatx80 a, float_status *status ) { flag aSign; int32 aExp, zExp; @@ -5534,7 +5534,7 @@ floatx80 floatx80_sqrt( floatx80 a STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_eq( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_eq( floatx80 a, floatx80 b, float_status *status ) { if (floatx80_invalid_encoding(a) || floatx80_invalid_encoding(b) @@ -5563,7 +5563,7 @@ int floatx80_eq( floatx80 a, floatx80 b STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_le( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_le( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5597,7 +5597,7 @@ int floatx80_le( floatx80 a, floatx80 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_lt( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_lt( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5630,7 +5630,7 @@ int floatx80_lt( floatx80 a, floatx80 b STATUS_PARAM ) | either operand is a NaN. The comparison is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_unordered( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_unordered( floatx80 a, floatx80 b, float_status *status ) { if (floatx80_invalid_encoding(a) || floatx80_invalid_encoding(b) || (extractFloatx80Exp(a) == 0x7FFF @@ -5651,7 +5651,7 @@ int floatx80_unordered( floatx80 a, floatx80 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_eq_quiet( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_eq_quiet( floatx80 a, floatx80 b, float_status *status ) { if (floatx80_invalid_encoding(a) || floatx80_invalid_encoding(b)) { @@ -5685,7 +5685,7 @@ int floatx80_eq_quiet( floatx80 a, floatx80 b STATUS_PARAM ) | to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_le_quiet( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_le_quiet( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5725,7 +5725,7 @@ int floatx80_le_quiet( floatx80 a, floatx80 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_lt_quiet( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_lt_quiet( floatx80 a, floatx80 b, float_status *status ) { flag aSign, bSign; @@ -5764,7 +5764,7 @@ int floatx80_lt_quiet( floatx80 a, floatx80 b STATUS_PARAM ) | The comparison is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int floatx80_unordered_quiet( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_unordered_quiet( floatx80 a, floatx80 b, float_status *status ) { if (floatx80_invalid_encoding(a) || floatx80_invalid_encoding(b)) { float_raise(float_flag_invalid STATUS_VAR); @@ -5794,7 +5794,7 @@ int floatx80_unordered_quiet( floatx80 a, floatx80 b STATUS_PARAM ) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int32 float128_to_int32( float128 a STATUS_PARAM ) +int32 float128_to_int32( float128 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -5823,7 +5823,7 @@ int32 float128_to_int32( float128 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int32 float128_to_int32_round_to_zero( float128 a STATUS_PARAM ) +int32 float128_to_int32_round_to_zero( float128 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -5871,7 +5871,7 @@ int32 float128_to_int32_round_to_zero( float128 a STATUS_PARAM ) | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ -int64 float128_to_int64( float128 a STATUS_PARAM ) +int64 float128_to_int64( float128 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -5914,7 +5914,7 @@ int64 float128_to_int64( float128 a STATUS_PARAM ) | returned. *----------------------------------------------------------------------------*/ -int64 float128_to_int64_round_to_zero( float128 a STATUS_PARAM ) +int64 float128_to_int64_round_to_zero( float128 a, float_status *status ) { flag aSign; int32 aExp, shiftCount; @@ -5972,7 +5972,7 @@ int64 float128_to_int64_round_to_zero( float128 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float32 float128_to_float32( float128 a STATUS_PARAM ) +float32 float128_to_float32( float128 a, float_status *status ) { flag aSign; int32 aExp; @@ -6007,7 +6007,7 @@ float32 float128_to_float32( float128 a STATUS_PARAM ) | Arithmetic. *----------------------------------------------------------------------------*/ -float64 float128_to_float64( float128 a STATUS_PARAM ) +float64 float128_to_float64( float128 a, float_status *status ) { flag aSign; int32 aExp; @@ -6040,7 +6040,7 @@ float64 float128_to_float64( float128 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -floatx80 float128_to_floatx80( float128 a STATUS_PARAM ) +floatx80 float128_to_floatx80( float128 a, float_status *status ) { flag aSign; int32 aExp; @@ -6075,7 +6075,7 @@ floatx80 float128_to_floatx80( float128 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_round_to_int( float128 a STATUS_PARAM ) +float128 float128_round_to_int( float128 a, float_status *status ) { flag aSign; int32 aExp; @@ -6214,7 +6214,7 @@ float128 float128_round_to_int( float128 a STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float128 addFloat128Sigs( float128 a, float128 b, flag zSign STATUS_PARAM) +static float128 addFloat128Sigs( float128 a, float128 b, flag zSign, float_status *status) { int32 aExp, bExp, zExp; uint64_t aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2; @@ -6300,7 +6300,7 @@ static float128 addFloat128Sigs( float128 a, float128 b, flag zSign STATUS_PARAM | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -static float128 subFloat128Sigs( float128 a, float128 b, flag zSign STATUS_PARAM) +static float128 subFloat128Sigs( float128 a, float128 b, flag zSign, float_status *status) { int32 aExp, bExp, zExp; uint64_t aSig0, aSig1, bSig0, bSig1, zSig0, zSig1; @@ -6382,7 +6382,7 @@ static float128 subFloat128Sigs( float128 a, float128 b, flag zSign STATUS_PARAM | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_add( float128 a, float128 b STATUS_PARAM ) +float128 float128_add( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6403,7 +6403,7 @@ float128 float128_add( float128 a, float128 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_sub( float128 a, float128 b STATUS_PARAM ) +float128 float128_sub( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6424,7 +6424,7 @@ float128 float128_sub( float128 a, float128 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_mul( float128 a, float128 b STATUS_PARAM ) +float128 float128_mul( float128 a, float128 b, float_status *status ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; @@ -6488,7 +6488,7 @@ float128 float128_mul( float128 a, float128 b STATUS_PARAM ) | the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_div( float128 a, float128 b STATUS_PARAM ) +float128 float128_div( float128 a, float128 b, float_status *status ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; @@ -6572,7 +6572,7 @@ float128 float128_div( float128 a, float128 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_rem( float128 a, float128 b STATUS_PARAM ) +float128 float128_rem( float128 a, float128 b, float_status *status ) { flag aSign, zSign; int32 aExp, bExp, expDiff; @@ -6681,7 +6681,7 @@ float128 float128_rem( float128 a, float128 b STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -float128 float128_sqrt( float128 a STATUS_PARAM ) +float128 float128_sqrt( float128 a, float_status *status ) { flag aSign; int32 aExp, zExp; @@ -6751,7 +6751,7 @@ float128 float128_sqrt( float128 a STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_eq( float128 a, float128 b STATUS_PARAM ) +int float128_eq( float128 a, float128 b, float_status *status ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) @@ -6778,7 +6778,7 @@ int float128_eq( float128 a, float128 b STATUS_PARAM ) | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_le( float128 a, float128 b STATUS_PARAM ) +int float128_le( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6811,7 +6811,7 @@ int float128_le( float128 a, float128 b STATUS_PARAM ) | to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_lt( float128 a, float128 b STATUS_PARAM ) +int float128_lt( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6844,7 +6844,7 @@ int float128_lt( float128 a, float128 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_unordered( float128 a, float128 b STATUS_PARAM ) +int float128_unordered( float128 a, float128 b, float_status *status ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) @@ -6864,7 +6864,7 @@ int float128_unordered( float128 a, float128 b STATUS_PARAM ) | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_eq_quiet( float128 a, float128 b STATUS_PARAM ) +int float128_eq_quiet( float128 a, float128 b, float_status *status ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) @@ -6894,7 +6894,7 @@ int float128_eq_quiet( float128 a, float128 b STATUS_PARAM ) | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_le_quiet( float128 a, float128 b STATUS_PARAM ) +int float128_le_quiet( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6930,7 +6930,7 @@ int float128_le_quiet( float128 a, float128 b STATUS_PARAM ) | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_lt_quiet( float128 a, float128 b STATUS_PARAM ) +int float128_lt_quiet( float128 a, float128 b, float_status *status ) { flag aSign, bSign; @@ -6966,7 +6966,7 @@ int float128_lt_quiet( float128 a, float128 b STATUS_PARAM ) | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ -int float128_unordered_quiet( float128 a, float128 b STATUS_PARAM ) +int float128_unordered_quiet( float128 a, float128 b, float_status *status ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) @@ -6983,17 +6983,17 @@ int float128_unordered_quiet( float128 a, float128 b STATUS_PARAM ) } /* misc functions */ -float32 uint32_to_float32(uint32_t a STATUS_PARAM) +float32 uint32_to_float32(uint32_t a, float_status *status) { return int64_to_float32(a STATUS_VAR); } -float64 uint32_to_float64(uint32_t a STATUS_PARAM) +float64 uint32_to_float64(uint32_t a, float_status *status) { return int64_to_float64(a STATUS_VAR); } -uint32 float32_to_uint32( float32 a STATUS_PARAM ) +uint32 float32_to_uint32( float32 a, float_status *status ) { int64_t v; uint32 res; @@ -7012,7 +7012,7 @@ uint32 float32_to_uint32( float32 a STATUS_PARAM ) return res; } -uint32 float32_to_uint32_round_to_zero( float32 a STATUS_PARAM ) +uint32 float32_to_uint32_round_to_zero( float32 a, float_status *status ) { int64_t v; uint32 res; @@ -7031,7 +7031,7 @@ uint32 float32_to_uint32_round_to_zero( float32 a STATUS_PARAM ) return res; } -int_fast16_t float32_to_int16(float32 a STATUS_PARAM) +int_fast16_t float32_to_int16(float32 a, float_status *status) { int32_t v; int_fast16_t res; @@ -7051,7 +7051,7 @@ int_fast16_t float32_to_int16(float32 a STATUS_PARAM) return res; } -uint_fast16_t float32_to_uint16(float32 a STATUS_PARAM) +uint_fast16_t float32_to_uint16(float32 a, float_status *status) { int32_t v; uint_fast16_t res; @@ -7071,7 +7071,7 @@ uint_fast16_t float32_to_uint16(float32 a STATUS_PARAM) return res; } -uint_fast16_t float32_to_uint16_round_to_zero(float32 a STATUS_PARAM) +uint_fast16_t float32_to_uint16_round_to_zero(float32 a, float_status *status) { int64_t v; uint_fast16_t res; @@ -7090,7 +7090,7 @@ uint_fast16_t float32_to_uint16_round_to_zero(float32 a STATUS_PARAM) return res; } -uint32 float64_to_uint32( float64 a STATUS_PARAM ) +uint32 float64_to_uint32( float64 a, float_status *status ) { uint64_t v; uint32 res; @@ -7107,7 +7107,7 @@ uint32 float64_to_uint32( float64 a STATUS_PARAM ) return res; } -uint32 float64_to_uint32_round_to_zero( float64 a STATUS_PARAM ) +uint32 float64_to_uint32_round_to_zero( float64 a, float_status *status ) { uint64_t v; uint32 res; @@ -7124,7 +7124,7 @@ uint32 float64_to_uint32_round_to_zero( float64 a STATUS_PARAM ) return res; } -int_fast16_t float64_to_int16(float64 a STATUS_PARAM) +int_fast16_t float64_to_int16(float64 a, float_status *status) { int64_t v; int_fast16_t res; @@ -7144,7 +7144,7 @@ int_fast16_t float64_to_int16(float64 a STATUS_PARAM) return res; } -uint_fast16_t float64_to_uint16(float64 a STATUS_PARAM) +uint_fast16_t float64_to_uint16(float64 a, float_status *status) { int64_t v; uint_fast16_t res; @@ -7164,7 +7164,7 @@ uint_fast16_t float64_to_uint16(float64 a STATUS_PARAM) return res; } -uint_fast16_t float64_to_uint16_round_to_zero(float64 a STATUS_PARAM) +uint_fast16_t float64_to_uint16_round_to_zero(float64 a, float_status *status) { int64_t v; uint_fast16_t res; @@ -7195,7 +7195,7 @@ uint_fast16_t float64_to_uint16_round_to_zero(float64 a STATUS_PARAM) | will raise the inexact exception. *----------------------------------------------------------------------------*/ -uint64_t float64_to_uint64(float64 a STATUS_PARAM) +uint64_t float64_to_uint64(float64 a, float_status *status) { flag aSign; int_fast16_t aExp, shiftCount; @@ -7230,7 +7230,7 @@ uint64_t float64_to_uint64(float64 a STATUS_PARAM) return roundAndPackUint64(aSign, aSig, aSigExtra STATUS_VAR); } -uint64_t float64_to_uint64_round_to_zero (float64 a STATUS_PARAM) +uint64_t float64_to_uint64_round_to_zero (float64 a, float_status *status) { int64_t v; signed char current_rounding_mode = STATUS(float_rounding_mode); @@ -7242,7 +7242,7 @@ uint64_t float64_to_uint64_round_to_zero (float64 a STATUS_PARAM) #define COMPARE(s, nan_exp) \ static inline int float ## s ## _compare_internal( float ## s a, float ## s b, \ - int is_quiet STATUS_PARAM ) \ + int is_quiet, float_status *status ) \ { \ flag aSign, bSign; \ uint ## s ## _t av, bv; \ @@ -7280,12 +7280,12 @@ static inline int float ## s ## _compare_internal( float ## s a, float ## s b, } \ } \ \ -int float ## s ## _compare( float ## s a, float ## s b STATUS_PARAM ) \ +int float ## s ## _compare( float ## s a, float ## s b, float_status *status ) \ { \ return float ## s ## _compare_internal(a, b, 0 STATUS_VAR); \ } \ \ -int float ## s ## _compare_quiet( float ## s a, float ## s b STATUS_PARAM ) \ +int float ## s ## _compare_quiet( float ## s a, float ## s b, float_status *status ) \ { \ return float ## s ## _compare_internal(a, b, 1 STATUS_VAR); \ } @@ -7294,7 +7294,7 @@ COMPARE(32, 0xff) COMPARE(64, 0x7ff) static inline int floatx80_compare_internal( floatx80 a, floatx80 b, - int is_quiet STATUS_PARAM ) + int is_quiet, float_status *status ) { flag aSign, bSign; @@ -7333,18 +7333,18 @@ static inline int floatx80_compare_internal( floatx80 a, floatx80 b, } } -int floatx80_compare( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_compare( floatx80 a, floatx80 b, float_status *status ) { return floatx80_compare_internal(a, b, 0 STATUS_VAR); } -int floatx80_compare_quiet( floatx80 a, floatx80 b STATUS_PARAM ) +int floatx80_compare_quiet( floatx80 a, floatx80 b, float_status *status ) { return floatx80_compare_internal(a, b, 1 STATUS_VAR); } static inline int float128_compare_internal( float128 a, float128 b, - int is_quiet STATUS_PARAM ) + int is_quiet, float_status *status ) { flag aSign, bSign; @@ -7377,12 +7377,12 @@ static inline int float128_compare_internal( float128 a, float128 b, } } -int float128_compare( float128 a, float128 b STATUS_PARAM ) +int float128_compare( float128 a, float128 b, float_status *status ) { return float128_compare_internal(a, b, 0 STATUS_VAR); } -int float128_compare_quiet( float128 a, float128 b STATUS_PARAM ) +int float128_compare_quiet( float128 a, float128 b, float_status *status ) { return float128_compare_internal(a, b, 1 STATUS_VAR); } @@ -7404,7 +7404,7 @@ int float128_compare_quiet( float128 a, float128 b STATUS_PARAM ) #define MINMAX(s) \ static inline float ## s float ## s ## _minmax(float ## s a, float ## s b, \ int ismin, int isieee, \ - int ismag STATUS_PARAM) \ + int ismag, float_status *status) \ { \ flag aSign, bSign; \ uint ## s ## _t av, bv, aav, abv; \ @@ -7453,32 +7453,32 @@ static inline float ## s float ## s ## _minmax(float ## s a, float ## s b, \ } \ } \ \ -float ## s float ## s ## _min(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _min(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 1, 0, 0 STATUS_VAR); \ } \ \ -float ## s float ## s ## _max(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _max(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 0, 0, 0 STATUS_VAR); \ } \ \ -float ## s float ## s ## _minnum(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _minnum(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 1, 1, 0 STATUS_VAR); \ } \ \ -float ## s float ## s ## _maxnum(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _maxnum(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 0, 1, 0 STATUS_VAR); \ } \ \ -float ## s float ## s ## _minnummag(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _minnummag(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 1, 1, 1 STATUS_VAR); \ } \ \ -float ## s float ## s ## _maxnummag(float ## s a, float ## s b STATUS_PARAM) \ +float ## s float ## s ## _maxnummag(float ## s a, float ## s b, float_status *status) \ { \ return float ## s ## _minmax(a, b, 0, 1, 1 STATUS_VAR); \ } @@ -7488,7 +7488,7 @@ MINMAX(64) /* Multiply A by 2 raised to the power N. */ -float32 float32_scalbn( float32 a, int n STATUS_PARAM ) +float32 float32_scalbn( float32 a, int n, float_status *status ) { flag aSign; int16_t aExp; @@ -7524,7 +7524,7 @@ float32 float32_scalbn( float32 a, int n STATUS_PARAM ) return normalizeRoundAndPackFloat32( aSign, aExp, aSig STATUS_VAR ); } -float64 float64_scalbn( float64 a, int n STATUS_PARAM ) +float64 float64_scalbn( float64 a, int n, float_status *status ) { flag aSign; int16_t aExp; @@ -7560,7 +7560,7 @@ float64 float64_scalbn( float64 a, int n STATUS_PARAM ) return normalizeRoundAndPackFloat64( aSign, aExp, aSig STATUS_VAR ); } -floatx80 floatx80_scalbn( floatx80 a, int n STATUS_PARAM ) +floatx80 floatx80_scalbn( floatx80 a, int n, float_status *status ) { flag aSign; int32_t aExp; @@ -7599,7 +7599,7 @@ floatx80 floatx80_scalbn( floatx80 a, int n STATUS_PARAM ) aSign, aExp, aSig, 0 STATUS_VAR ); } -float128 float128_scalbn( float128 a, int n STATUS_PARAM ) +float128 float128_scalbn( float128 a, int n, float_status *status ) { flag aSign; int32_t aExp; diff --git a/qemu/include/fpu/softfloat.h b/qemu/include/fpu/softfloat.h index 4b5943b1..a4552382 100644 --- a/qemu/include/fpu/softfloat.h +++ b/qemu/include/fpu/softfloat.h @@ -108,7 +108,6 @@ typedef int64_t int64; #define LIT64( a ) a##LL -#define STATUS_PARAM , float_status *status #define STATUS(field) status->field #define STATUS_VAR , status @@ -229,31 +228,31 @@ typedef struct float_status { flag default_nan_mode; } float_status; -static inline void set_float_detect_tininess(int val STATUS_PARAM) +static inline void set_float_detect_tininess(int val, float_status *status) { STATUS(float_detect_tininess) = val; } -static inline void set_float_rounding_mode(int val STATUS_PARAM) +static inline void set_float_rounding_mode(int val, float_status *status) { STATUS(float_rounding_mode) = val; } -static inline void set_float_exception_flags(int val STATUS_PARAM) +static inline void set_float_exception_flags(int val, float_status *status) { STATUS(float_exception_flags) = val; } -static inline void set_floatx80_rounding_precision(int val STATUS_PARAM) +static inline void set_floatx80_rounding_precision(int val, float_status *status) { STATUS(floatx80_rounding_precision) = val; } -static inline void set_flush_to_zero(flag val STATUS_PARAM) +static inline void set_flush_to_zero(flag val, float_status *status) { STATUS(flush_to_zero) = val; } -static inline void set_flush_inputs_to_zero(flag val STATUS_PARAM) +static inline void set_flush_inputs_to_zero(flag val, float_status *status) { STATUS(flush_inputs_to_zero) = val; } -static inline void set_default_nan_mode(flag val STATUS_PARAM) +static inline void set_default_nan_mode(flag val, float_status *status) { STATUS(default_nan_mode) = val; } @@ -290,14 +289,14 @@ static inline flag get_default_nan_mode(float_status *status) | Routine to raise any or all of the software IEC/IEEE floating-point | exception flags. *----------------------------------------------------------------------------*/ -void float_raise( int8 flags STATUS_PARAM); +void float_raise( int8 flags, float_status *status); /*---------------------------------------------------------------------------- | If `a' is denormal and we are in flush-to-zero mode then set the | input-denormal exception and return zero. Otherwise just return the value. *----------------------------------------------------------------------------*/ -float32 float32_squash_input_denormal(float32 a STATUS_PARAM); -float64 float64_squash_input_denormal(float64 a STATUS_PARAM); +float32 float32_squash_input_denormal(float32 a, float_status *status); +float64 float64_squash_input_denormal(float64 a, float_status *status); /*---------------------------------------------------------------------------- | Options to indicate which negations to perform in float*_muladd() @@ -317,37 +316,37 @@ enum { /*---------------------------------------------------------------------------- | Software IEC/IEEE integer-to-floating-point conversion routines. *----------------------------------------------------------------------------*/ -float32 int32_to_float32(int32_t STATUS_PARAM); -float64 int32_to_float64(int32_t STATUS_PARAM); -float32 uint32_to_float32(uint32_t STATUS_PARAM); -float64 uint32_to_float64(uint32_t STATUS_PARAM); -floatx80 int32_to_floatx80(int32_t STATUS_PARAM); -float128 int32_to_float128(int32_t STATUS_PARAM); -float32 int64_to_float32(int64_t STATUS_PARAM); -float64 int64_to_float64(int64_t STATUS_PARAM); -floatx80 int64_to_floatx80(int64_t STATUS_PARAM); -float128 int64_to_float128(int64_t STATUS_PARAM); -float32 uint64_to_float32(uint64_t STATUS_PARAM); -float64 uint64_to_float64(uint64_t STATUS_PARAM); -float128 uint64_to_float128(uint64_t STATUS_PARAM); +float32 int32_to_float32(int32_t, float_status *status); +float64 int32_to_float64(int32_t, float_status *status); +float32 uint32_to_float32(uint32_t, float_status *status); +float64 uint32_to_float64(uint32_t, float_status *status); +floatx80 int32_to_floatx80(int32_t, float_status *status); +float128 int32_to_float128(int32_t, float_status *status); +float32 int64_to_float32(int64_t, float_status *status); +float64 int64_to_float64(int64_t, float_status *status); +floatx80 int64_to_floatx80(int64_t, float_status *status); +float128 int64_to_float128(int64_t, float_status *status); +float32 uint64_to_float32(uint64_t, float_status *status); +float64 uint64_to_float64(uint64_t, float_status *status); +float128 uint64_to_float128(uint64_t, float_status *status); /* We provide the int16 versions for symmetry of API with float-to-int */ -static inline float32 int16_to_float32(int16_t v STATUS_PARAM) +static inline float32 int16_to_float32(int16_t v, float_status *status) { return int32_to_float32(v STATUS_VAR); } -static inline float32 uint16_to_float32(uint16_t v STATUS_PARAM) +static inline float32 uint16_to_float32(uint16_t v, float_status *status) { return uint32_to_float32(v STATUS_VAR); } -static inline float64 int16_to_float64(int16_t v STATUS_PARAM) +static inline float64 int16_to_float64(int16_t v, float_status *status) { return int32_to_float64(v STATUS_VAR); } -static inline float64 uint16_to_float64(uint16_t v STATUS_PARAM) +static inline float64 uint16_to_float64(uint16_t v, float_status *status) { return uint32_to_float64(v STATUS_VAR); } @@ -355,10 +354,10 @@ static inline float64 uint16_to_float64(uint16_t v STATUS_PARAM) /*---------------------------------------------------------------------------- | Software half-precision conversion routines. *----------------------------------------------------------------------------*/ -float16 float32_to_float16( float32, flag STATUS_PARAM ); -float32 float16_to_float32( float16, flag STATUS_PARAM ); -float16 float64_to_float16(float64 a, flag ieee STATUS_PARAM); -float64 float16_to_float64(float16 a, flag ieee STATUS_PARAM); +float16 float32_to_float16( float32, flag, float_status *status ); +float32 float16_to_float32( float16, flag, float_status *status ); +float16 float64_to_float16(float64 a, flag ieee, float_status *status); +float64 float16_to_float64(float16 a, flag ieee, float_status *status); /*---------------------------------------------------------------------------- | Software half-precision operations. @@ -380,55 +379,55 @@ extern const float16 float16_default_nan; /*---------------------------------------------------------------------------- | Software IEC/IEEE single-precision conversion routines. *----------------------------------------------------------------------------*/ -int_fast16_t float32_to_int16(float32 STATUS_PARAM); -uint_fast16_t float32_to_uint16(float32 STATUS_PARAM); -int_fast16_t float32_to_int16_round_to_zero(float32 STATUS_PARAM); -uint_fast16_t float32_to_uint16_round_to_zero(float32 STATUS_PARAM); -int32 float32_to_int32( float32 STATUS_PARAM ); -int32 float32_to_int32_round_to_zero( float32 STATUS_PARAM ); -uint32 float32_to_uint32( float32 STATUS_PARAM ); -uint32 float32_to_uint32_round_to_zero( float32 STATUS_PARAM ); -int64 float32_to_int64( float32 STATUS_PARAM ); -uint64 float32_to_uint64(float32 STATUS_PARAM); -uint64 float32_to_uint64_round_to_zero(float32 STATUS_PARAM); -int64 float32_to_int64_round_to_zero( float32 STATUS_PARAM ); -float64 float32_to_float64( float32 STATUS_PARAM ); -floatx80 float32_to_floatx80( float32 STATUS_PARAM ); -float128 float32_to_float128( float32 STATUS_PARAM ); +int_fast16_t float32_to_int16(float32, float_status *status); +uint_fast16_t float32_to_uint16(float32, float_status *status); +int_fast16_t float32_to_int16_round_to_zero(float32, float_status *status); +uint_fast16_t float32_to_uint16_round_to_zero(float32, float_status *status); +int32 float32_to_int32( float32, float_status *status ); +int32 float32_to_int32_round_to_zero( float32, float_status *status ); +uint32 float32_to_uint32( float32, float_status *status ); +uint32 float32_to_uint32_round_to_zero( float32, float_status *status ); +int64 float32_to_int64( float32, float_status *status ); +uint64 float32_to_uint64(float32, float_status *status); +uint64 float32_to_uint64_round_to_zero(float32, float_status *status); +int64 float32_to_int64_round_to_zero( float32, float_status *status ); +float64 float32_to_float64( float32, float_status *status ); +floatx80 float32_to_floatx80( float32, float_status *status ); +float128 float32_to_float128( float32, float_status *status ); /*---------------------------------------------------------------------------- | Software IEC/IEEE single-precision operations. *----------------------------------------------------------------------------*/ -float32 float32_round_to_int( float32 STATUS_PARAM ); -float32 float32_add( float32, float32 STATUS_PARAM ); -float32 float32_sub( float32, float32 STATUS_PARAM ); -float32 float32_mul( float32, float32 STATUS_PARAM ); -float32 float32_div( float32, float32 STATUS_PARAM ); -float32 float32_rem( float32, float32 STATUS_PARAM ); -float32 float32_muladd(float32, float32, float32, int STATUS_PARAM); -float32 float32_sqrt( float32 STATUS_PARAM ); -float32 float32_exp2( float32 STATUS_PARAM ); -float32 float32_log2( float32 STATUS_PARAM ); -int float32_eq( float32, float32 STATUS_PARAM ); -int float32_le( float32, float32 STATUS_PARAM ); -int float32_lt( float32, float32 STATUS_PARAM ); -int float32_unordered( float32, float32 STATUS_PARAM ); -int float32_eq_quiet( float32, float32 STATUS_PARAM ); -int float32_le_quiet( float32, float32 STATUS_PARAM ); -int float32_lt_quiet( float32, float32 STATUS_PARAM ); -int float32_unordered_quiet( float32, float32 STATUS_PARAM ); -int float32_compare( float32, float32 STATUS_PARAM ); -int float32_compare_quiet( float32, float32 STATUS_PARAM ); -float32 float32_min(float32, float32 STATUS_PARAM); -float32 float32_max(float32, float32 STATUS_PARAM); -float32 float32_minnum(float32, float32 STATUS_PARAM); -float32 float32_maxnum(float32, float32 STATUS_PARAM); -float32 float32_minnummag(float32, float32 STATUS_PARAM); -float32 float32_maxnummag(float32, float32 STATUS_PARAM); +float32 float32_round_to_int( float32, float_status *status ); +float32 float32_add( float32, float32, float_status *status ); +float32 float32_sub( float32, float32, float_status *status ); +float32 float32_mul( float32, float32, float_status *status ); +float32 float32_div( float32, float32, float_status *status ); +float32 float32_rem( float32, float32, float_status *status ); +float32 float32_muladd(float32, float32, float32, int, float_status *status); +float32 float32_sqrt( float32, float_status *status ); +float32 float32_exp2( float32, float_status *status ); +float32 float32_log2( float32, float_status *status ); +int float32_eq( float32, float32, float_status *status ); +int float32_le( float32, float32, float_status *status ); +int float32_lt( float32, float32, float_status *status ); +int float32_unordered( float32, float32, float_status *status ); +int float32_eq_quiet( float32, float32, float_status *status ); +int float32_le_quiet( float32, float32, float_status *status ); +int float32_lt_quiet( float32, float32, float_status *status ); +int float32_unordered_quiet( float32, float32, float_status *status ); +int float32_compare( float32, float32, float_status *status ); +int float32_compare_quiet( float32, float32, float_status *status ); +float32 float32_min(float32, float32, float_status *status); +float32 float32_max(float32, float32, float_status *status); +float32 float32_minnum(float32, float32, float_status *status); +float32 float32_maxnum(float32, float32, float_status *status); +float32 float32_minnummag(float32, float32, float_status *status); +float32 float32_maxnummag(float32, float32, float_status *status); int float32_is_quiet_nan( float32 ); int float32_is_signaling_nan( float32 ); float32 float32_maybe_silence_nan( float32 ); -float32 float32_scalbn( float32, int STATUS_PARAM ); +float32 float32_scalbn( float32, int, float_status *status ); static inline float32 float32_abs(float32 a) { @@ -492,55 +491,55 @@ extern const float32 float32_default_nan; /*---------------------------------------------------------------------------- | Software IEC/IEEE double-precision conversion routines. *----------------------------------------------------------------------------*/ -int_fast16_t float64_to_int16(float64 STATUS_PARAM); -uint_fast16_t float64_to_uint16(float64 STATUS_PARAM); -int_fast16_t float64_to_int16_round_to_zero(float64 STATUS_PARAM); -uint_fast16_t float64_to_uint16_round_to_zero(float64 STATUS_PARAM); -int32 float64_to_int32( float64 STATUS_PARAM ); -int32 float64_to_int32_round_to_zero( float64 STATUS_PARAM ); -uint32 float64_to_uint32( float64 STATUS_PARAM ); -uint32 float64_to_uint32_round_to_zero( float64 STATUS_PARAM ); -int64 float64_to_int64( float64 STATUS_PARAM ); -int64 float64_to_int64_round_to_zero( float64 STATUS_PARAM ); -uint64 float64_to_uint64 (float64 a STATUS_PARAM); -uint64 float64_to_uint64_round_to_zero (float64 a STATUS_PARAM); -float32 float64_to_float32( float64 STATUS_PARAM ); -floatx80 float64_to_floatx80( float64 STATUS_PARAM ); -float128 float64_to_float128( float64 STATUS_PARAM ); +int_fast16_t float64_to_int16(float64, float_status *status); +uint_fast16_t float64_to_uint16(float64, float_status *status); +int_fast16_t float64_to_int16_round_to_zero(float64, float_status *status); +uint_fast16_t float64_to_uint16_round_to_zero(float64, float_status *status); +int32 float64_to_int32( float64, float_status *status ); +int32 float64_to_int32_round_to_zero( float64, float_status *status ); +uint32 float64_to_uint32( float64, float_status *status ); +uint32 float64_to_uint32_round_to_zero( float64, float_status *status ); +int64 float64_to_int64( float64, float_status *status ); +int64 float64_to_int64_round_to_zero( float64, float_status *status ); +uint64 float64_to_uint64 (float64 a, float_status *status); +uint64 float64_to_uint64_round_to_zero (float64 a, float_status *status); +float32 float64_to_float32( float64, float_status *status ); +floatx80 float64_to_floatx80( float64, float_status *status ); +float128 float64_to_float128( float64, float_status *status ); /*---------------------------------------------------------------------------- | Software IEC/IEEE double-precision operations. *----------------------------------------------------------------------------*/ -float64 float64_round_to_int( float64 STATUS_PARAM ); -float64 float64_trunc_to_int( float64 STATUS_PARAM ); -float64 float64_add( float64, float64 STATUS_PARAM ); -float64 float64_sub( float64, float64 STATUS_PARAM ); -float64 float64_mul( float64, float64 STATUS_PARAM ); -float64 float64_div( float64, float64 STATUS_PARAM ); -float64 float64_rem( float64, float64 STATUS_PARAM ); -float64 float64_muladd(float64, float64, float64, int STATUS_PARAM); -float64 float64_sqrt( float64 STATUS_PARAM ); -float64 float64_log2( float64 STATUS_PARAM ); -int float64_eq( float64, float64 STATUS_PARAM ); -int float64_le( float64, float64 STATUS_PARAM ); -int float64_lt( float64, float64 STATUS_PARAM ); -int float64_unordered( float64, float64 STATUS_PARAM ); -int float64_eq_quiet( float64, float64 STATUS_PARAM ); -int float64_le_quiet( float64, float64 STATUS_PARAM ); -int float64_lt_quiet( float64, float64 STATUS_PARAM ); -int float64_unordered_quiet( float64, float64 STATUS_PARAM ); -int float64_compare( float64, float64 STATUS_PARAM ); -int float64_compare_quiet( float64, float64 STATUS_PARAM ); -float64 float64_min(float64, float64 STATUS_PARAM); -float64 float64_max(float64, float64 STATUS_PARAM); -float64 float64_minnum(float64, float64 STATUS_PARAM); -float64 float64_maxnum(float64, float64 STATUS_PARAM); -float64 float64_minnummag(float64, float64 STATUS_PARAM); -float64 float64_maxnummag(float64, float64 STATUS_PARAM); +float64 float64_round_to_int( float64, float_status *status ); +float64 float64_trunc_to_int( float64, float_status *status ); +float64 float64_add( float64, float64, float_status *status ); +float64 float64_sub( float64, float64, float_status *status ); +float64 float64_mul( float64, float64, float_status *status ); +float64 float64_div( float64, float64, float_status *status ); +float64 float64_rem( float64, float64, float_status *status ); +float64 float64_muladd(float64, float64, float64, int, float_status *status); +float64 float64_sqrt( float64, float_status *status ); +float64 float64_log2( float64, float_status *status ); +int float64_eq( float64, float64, float_status *status ); +int float64_le( float64, float64, float_status *status ); +int float64_lt( float64, float64, float_status *status ); +int float64_unordered( float64, float64, float_status *status ); +int float64_eq_quiet( float64, float64, float_status *status ); +int float64_le_quiet( float64, float64, float_status *status ); +int float64_lt_quiet( float64, float64, float_status *status ); +int float64_unordered_quiet( float64, float64, float_status *status ); +int float64_compare( float64, float64, float_status *status ); +int float64_compare_quiet( float64, float64, float_status *status ); +float64 float64_min(float64, float64, float_status *status); +float64 float64_max(float64, float64, float_status *status); +float64 float64_minnum(float64, float64, float_status *status); +float64 float64_maxnum(float64, float64, float_status *status); +float64 float64_minnummag(float64, float64, float_status *status); +float64 float64_maxnummag(float64, float64, float_status *status); int float64_is_quiet_nan( float64 a ); int float64_is_signaling_nan( float64 ); float64 float64_maybe_silence_nan( float64 ); -float64 float64_scalbn( float64, int STATUS_PARAM ); +float64 float64_scalbn( float64, int, float_status *status ); static inline float64 float64_abs(float64 a) { @@ -604,38 +603,38 @@ extern const float64 float64_default_nan; /*---------------------------------------------------------------------------- | Software IEC/IEEE extended double-precision conversion routines. *----------------------------------------------------------------------------*/ -int32 floatx80_to_int32( floatx80 STATUS_PARAM ); -int32 floatx80_to_int32_round_to_zero( floatx80 STATUS_PARAM ); -int64 floatx80_to_int64( floatx80 STATUS_PARAM ); -int64 floatx80_to_int64_round_to_zero( floatx80 STATUS_PARAM ); -float32 floatx80_to_float32( floatx80 STATUS_PARAM ); -float64 floatx80_to_float64( floatx80 STATUS_PARAM ); -float128 floatx80_to_float128( floatx80 STATUS_PARAM ); +int32 floatx80_to_int32( floatx80, float_status *status ); +int32 floatx80_to_int32_round_to_zero( floatx80, float_status *status ); +int64 floatx80_to_int64( floatx80, float_status *status ); +int64 floatx80_to_int64_round_to_zero( floatx80, float_status *status ); +float32 floatx80_to_float32( floatx80, float_status *status ); +float64 floatx80_to_float64( floatx80, float_status *status ); +float128 floatx80_to_float128( floatx80, float_status *status ); /*---------------------------------------------------------------------------- | Software IEC/IEEE extended double-precision operations. *----------------------------------------------------------------------------*/ -floatx80 floatx80_round_to_int( floatx80 STATUS_PARAM ); -floatx80 floatx80_add( floatx80, floatx80 STATUS_PARAM ); -floatx80 floatx80_sub( floatx80, floatx80 STATUS_PARAM ); -floatx80 floatx80_mul( floatx80, floatx80 STATUS_PARAM ); -floatx80 floatx80_div( floatx80, floatx80 STATUS_PARAM ); -floatx80 floatx80_rem( floatx80, floatx80 STATUS_PARAM ); -floatx80 floatx80_sqrt( floatx80 STATUS_PARAM ); -int floatx80_eq( floatx80, floatx80 STATUS_PARAM ); -int floatx80_le( floatx80, floatx80 STATUS_PARAM ); -int floatx80_lt( floatx80, floatx80 STATUS_PARAM ); -int floatx80_unordered( floatx80, floatx80 STATUS_PARAM ); -int floatx80_eq_quiet( floatx80, floatx80 STATUS_PARAM ); -int floatx80_le_quiet( floatx80, floatx80 STATUS_PARAM ); -int floatx80_lt_quiet( floatx80, floatx80 STATUS_PARAM ); -int floatx80_unordered_quiet( floatx80, floatx80 STATUS_PARAM ); -int floatx80_compare( floatx80, floatx80 STATUS_PARAM ); -int floatx80_compare_quiet( floatx80, floatx80 STATUS_PARAM ); +floatx80 floatx80_round_to_int( floatx80, float_status *status ); +floatx80 floatx80_add( floatx80, floatx80, float_status *status ); +floatx80 floatx80_sub( floatx80, floatx80, float_status *status ); +floatx80 floatx80_mul( floatx80, floatx80, float_status *status ); +floatx80 floatx80_div( floatx80, floatx80, float_status *status ); +floatx80 floatx80_rem( floatx80, floatx80, float_status *status ); +floatx80 floatx80_sqrt( floatx80, float_status *status ); +int floatx80_eq( floatx80, floatx80, float_status *status ); +int floatx80_le( floatx80, floatx80, float_status *status ); +int floatx80_lt( floatx80, floatx80, float_status *status ); +int floatx80_unordered( floatx80, floatx80, float_status *status ); +int floatx80_eq_quiet( floatx80, floatx80, float_status *status ); +int floatx80_le_quiet( floatx80, floatx80, float_status *status ); +int floatx80_lt_quiet( floatx80, floatx80, float_status *status ); +int floatx80_unordered_quiet( floatx80, floatx80, float_status *status ); +int floatx80_compare( floatx80, floatx80, float_status *status ); +int floatx80_compare_quiet( floatx80, floatx80, float_status *status ); int floatx80_is_quiet_nan( floatx80 ); int floatx80_is_signaling_nan( floatx80 ); floatx80 floatx80_maybe_silence_nan( floatx80 ); -floatx80 floatx80_scalbn( floatx80, int STATUS_PARAM ); +floatx80 floatx80_scalbn( floatx80, int, float_status *status ); static inline floatx80 floatx80_abs(floatx80 a) { @@ -704,38 +703,38 @@ extern const floatx80 floatx80_default_nan; /*---------------------------------------------------------------------------- | Software IEC/IEEE quadruple-precision conversion routines. *----------------------------------------------------------------------------*/ -int32 float128_to_int32( float128 STATUS_PARAM ); -int32 float128_to_int32_round_to_zero( float128 STATUS_PARAM ); -int64 float128_to_int64( float128 STATUS_PARAM ); -int64 float128_to_int64_round_to_zero( float128 STATUS_PARAM ); -float32 float128_to_float32( float128 STATUS_PARAM ); -float64 float128_to_float64( float128 STATUS_PARAM ); -floatx80 float128_to_floatx80( float128 STATUS_PARAM ); +int32 float128_to_int32( float128, float_status *status ); +int32 float128_to_int32_round_to_zero( float128, float_status *status ); +int64 float128_to_int64( float128, float_status *status ); +int64 float128_to_int64_round_to_zero( float128, float_status *status ); +float32 float128_to_float32( float128, float_status *status ); +float64 float128_to_float64( float128, float_status *status ); +floatx80 float128_to_floatx80( float128, float_status *status ); /*---------------------------------------------------------------------------- | Software IEC/IEEE quadruple-precision operations. *----------------------------------------------------------------------------*/ -float128 float128_round_to_int( float128 STATUS_PARAM ); -float128 float128_add( float128, float128 STATUS_PARAM ); -float128 float128_sub( float128, float128 STATUS_PARAM ); -float128 float128_mul( float128, float128 STATUS_PARAM ); -float128 float128_div( float128, float128 STATUS_PARAM ); -float128 float128_rem( float128, float128 STATUS_PARAM ); -float128 float128_sqrt( float128 STATUS_PARAM ); -int float128_eq( float128, float128 STATUS_PARAM ); -int float128_le( float128, float128 STATUS_PARAM ); -int float128_lt( float128, float128 STATUS_PARAM ); -int float128_unordered( float128, float128 STATUS_PARAM ); -int float128_eq_quiet( float128, float128 STATUS_PARAM ); -int float128_le_quiet( float128, float128 STATUS_PARAM ); -int float128_lt_quiet( float128, float128 STATUS_PARAM ); -int float128_unordered_quiet( float128, float128 STATUS_PARAM ); -int float128_compare( float128, float128 STATUS_PARAM ); -int float128_compare_quiet( float128, float128 STATUS_PARAM ); +float128 float128_round_to_int( float128, float_status *status ); +float128 float128_add( float128, float128, float_status *status ); +float128 float128_sub( float128, float128, float_status *status ); +float128 float128_mul( float128, float128, float_status *status ); +float128 float128_div( float128, float128, float_status *status ); +float128 float128_rem( float128, float128, float_status *status ); +float128 float128_sqrt( float128, float_status *status ); +int float128_eq( float128, float128, float_status *status ); +int float128_le( float128, float128, float_status *status ); +int float128_lt( float128, float128, float_status *status ); +int float128_unordered( float128, float128, float_status *status ); +int float128_eq_quiet( float128, float128, float_status *status ); +int float128_le_quiet( float128, float128, float_status *status ); +int float128_lt_quiet( float128, float128, float_status *status ); +int float128_unordered_quiet( float128, float128, float_status *status ); +int float128_compare( float128, float128, float_status *status ); +int float128_compare_quiet( float128, float128, float_status *status ); int float128_is_quiet_nan( float128 ); int float128_is_signaling_nan( float128 ); float128 float128_maybe_silence_nan( float128 ); -float128 float128_scalbn( float128, int STATUS_PARAM ); +float128 float128_scalbn( float128, int, float_status *status ); static inline float128 float128_abs(float128 a) { diff --git a/qemu/target-mips/msa_helper.c b/qemu/target-mips/msa_helper.c index 39ccf52b..d1a456c1 100644 --- a/qemu/target-mips/msa_helper.c +++ b/qemu/target-mips/msa_helper.c @@ -1614,7 +1614,7 @@ static inline int get_enabled_exceptions(const CPUMIPSState *env, int c) return c & enable; } -static inline float16 float16_from_float32(int32 a, flag ieee STATUS_PARAM) +static inline float16 float16_from_float32(int32 a, flag ieee, float_status *status) { float16 f_val; @@ -1624,7 +1624,7 @@ static inline float16 float16_from_float32(int32 a, flag ieee STATUS_PARAM) return a < 0 ? (f_val | (1 << 15)) : f_val; } -static inline float32 float32_from_float64(int64 a STATUS_PARAM) +static inline float32 float32_from_float64(int64 a, float_status *status) { float32 f_val; @@ -1634,7 +1634,7 @@ static inline float32 float32_from_float64(int64 a STATUS_PARAM) return a < 0 ? (f_val | (1 << 31)) : f_val; } -static inline float32 float32_from_float16(int16_t a, flag ieee STATUS_PARAM) +static inline float32 float32_from_float16(int16_t a, flag ieee, float_status *status) { float32 f_val; @@ -1644,7 +1644,7 @@ static inline float32 float32_from_float16(int16_t a, flag ieee STATUS_PARAM) return a < 0 ? (f_val | (1 << 31)) : f_val; } -static inline float64 float64_from_float32(int32 a STATUS_PARAM) +static inline float64 float64_from_float32(int32 a, float_status *status) { float64 f_val; @@ -1654,7 +1654,7 @@ static inline float64 float64_from_float32(int32 a STATUS_PARAM) return a < 0 ? (f_val | (1ULL << 63)) : f_val; } -static inline float32 float32_from_q16(int16_t a STATUS_PARAM) +static inline float32 float32_from_q16(int16_t a, float_status *status) { float32 f_val; @@ -1665,7 +1665,7 @@ static inline float32 float32_from_q16(int16_t a STATUS_PARAM) return f_val; } -static inline float64 float64_from_q32(int32 a STATUS_PARAM) +static inline float64 float64_from_q32(int32 a, float_status *status) { float64 f_val; @@ -1676,7 +1676,7 @@ static inline float64 float64_from_q32(int32 a STATUS_PARAM) return f_val; } -static inline int16_t float32_to_q16(float32 a STATUS_PARAM) +static inline int16_t float32_to_q16(float32 a, float_status *status) { int32 q_val; int32 q_min = 0xffff8000; @@ -1728,7 +1728,7 @@ static inline int16_t float32_to_q16(float32 a STATUS_PARAM) return (int16_t)q_val; } -static inline int32 float64_to_q32(float64 a STATUS_PARAM) +static inline int32 float64_to_q32(float64 a, float_status *status) { int64 q_val; int64 q_min = 0xffffffff80000000LL;