softfloat: Clean code format in fpu/softfloat-specialize.h
fpu/softfloat-specialize.h is the most critical file in SoftFloat library, since it handles numerous differences between platforms in relation to floating point arithmetics. This patch makes the code in this file more consistent format-wise, and hopefully easier to debug and maintain. Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
af39bc8c49
commit
a59eaea646
@ -273,7 +273,7 @@ static commonNaNT float16ToCommonNaN(float16 a, float_status *status)
|
|||||||
}
|
}
|
||||||
z.sign = float16_val(a) >> 15;
|
z.sign = float16_val(a) >> 15;
|
||||||
z.low = 0;
|
z.low = 0;
|
||||||
z.high = ((uint64_t) float16_val(a))<<54;
|
z.high = ((uint64_t) float16_val(a)) << 54;
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ static commonNaNT float16ToCommonNaN(float16 a, float_status *status)
|
|||||||
|
|
||||||
static float16 commonNaNToFloat16(commonNaNT a, float_status *status)
|
static float16 commonNaNToFloat16(commonNaNT a, float_status *status)
|
||||||
{
|
{
|
||||||
uint16_t mantissa = a.high>>54;
|
uint16_t mantissa = a.high >> 54;
|
||||||
|
|
||||||
if (status->default_nan_mode) {
|
if (status->default_nan_mode) {
|
||||||
return float16_default_nan(status);
|
return float16_default_nan(status);
|
||||||
@ -372,9 +372,9 @@ static commonNaNT float32ToCommonNaN(float32 a, float_status *status)
|
|||||||
if (float32_is_signaling_nan(a, status)) {
|
if (float32_is_signaling_nan(a, status)) {
|
||||||
float_raise(float_flag_invalid, status);
|
float_raise(float_flag_invalid, status);
|
||||||
}
|
}
|
||||||
z.sign = float32_val(a)>>31;
|
z.sign = float32_val(a) >> 31;
|
||||||
z.low = 0;
|
z.low = 0;
|
||||||
z.high = ( (uint64_t) float32_val(a) )<<41;
|
z.high = ((uint64_t)float32_val(a)) << 41;
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,7 +385,7 @@ static commonNaNT float32ToCommonNaN(float32 a, float_status *status)
|
|||||||
|
|
||||||
static float32 commonNaNToFloat32(commonNaNT a, float_status *status)
|
static float32 commonNaNToFloat32(commonNaNT a, float_status *status)
|
||||||
{
|
{
|
||||||
uint32_t mantissa = a.high>>41;
|
uint32_t mantissa = a.high >> 41;
|
||||||
|
|
||||||
if (status->default_nan_mode) {
|
if (status->default_nan_mode) {
|
||||||
return float32_default_nan(status);
|
return float32_default_nan(status);
|
||||||
@ -393,7 +393,7 @@ static float32 commonNaNToFloat32(commonNaNT a, float_status *status)
|
|||||||
|
|
||||||
if (mantissa) {
|
if (mantissa) {
|
||||||
return make_float32(
|
return make_float32(
|
||||||
( ( (uint32_t) a.sign )<<31 ) | 0x7F800000 | ( a.high>>41 ) );
|
(((uint32_t)a.sign) << 31) | 0x7F800000 | (a.high >> 41));
|
||||||
} else {
|
} else {
|
||||||
return float32_default_nan(status);
|
return float32_default_nan(status);
|
||||||
}
|
}
|
||||||
@ -498,11 +498,10 @@ static int pickNaN(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN,
|
|||||||
return aIsLargerSignificand ? 0 : 1;
|
return aIsLargerSignificand ? 0 : 1;
|
||||||
}
|
}
|
||||||
return bIsQNaN ? 1 : 0;
|
return bIsQNaN ? 1 : 0;
|
||||||
}
|
} else if (aIsQNaN) {
|
||||||
else if (aIsQNaN) {
|
if (bIsSNaN || !bIsQNaN) {
|
||||||
if (bIsSNaN || !bIsQNaN)
|
|
||||||
return 0;
|
return 0;
|
||||||
else {
|
} else {
|
||||||
return aIsLargerSignificand ? 0 : 1;
|
return aIsLargerSignificand ? 0 : 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -645,9 +644,9 @@ static float32 propagateFloat32NaN(float32 a, float32 b, float_status *status)
|
|||||||
return float32_default_nan(status);
|
return float32_default_nan(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uint32_t)(av<<1) < (uint32_t)(bv<<1)) {
|
if ((uint32_t)(av << 1) < (uint32_t)(bv << 1)) {
|
||||||
aIsLargerSignificand = 0;
|
aIsLargerSignificand = 0;
|
||||||
} else if ((uint32_t)(bv<<1) < (uint32_t)(av<<1)) {
|
} else if ((uint32_t)(bv << 1) < (uint32_t)(av << 1)) {
|
||||||
aIsLargerSignificand = 1;
|
aIsLargerSignificand = 1;
|
||||||
} else {
|
} else {
|
||||||
aIsLargerSignificand = (av < bv) ? 1 : 0;
|
aIsLargerSignificand = (av < bv) ? 1 : 0;
|
||||||
@ -789,9 +788,9 @@ static commonNaNT float64ToCommonNaN(float64 a, float_status *status)
|
|||||||
if (float64_is_signaling_nan(a, status)) {
|
if (float64_is_signaling_nan(a, status)) {
|
||||||
float_raise(float_flag_invalid, status);
|
float_raise(float_flag_invalid, status);
|
||||||
}
|
}
|
||||||
z.sign = float64_val(a)>>63;
|
z.sign = float64_val(a) >> 63;
|
||||||
z.low = 0;
|
z.low = 0;
|
||||||
z.high = float64_val(a)<<12;
|
z.high = float64_val(a) << 12;
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -802,7 +801,7 @@ static commonNaNT float64ToCommonNaN(float64 a, float_status *status)
|
|||||||
|
|
||||||
static float64 commonNaNToFloat64(commonNaNT a, float_status *status)
|
static float64 commonNaNToFloat64(commonNaNT a, float_status *status)
|
||||||
{
|
{
|
||||||
uint64_t mantissa = a.high>>12;
|
uint64_t mantissa = a.high >> 12;
|
||||||
|
|
||||||
if (status->default_nan_mode) {
|
if (status->default_nan_mode) {
|
||||||
return float64_default_nan(status);
|
return float64_default_nan(status);
|
||||||
@ -810,9 +809,9 @@ static float64 commonNaNToFloat64(commonNaNT a, float_status *status)
|
|||||||
|
|
||||||
if (mantissa) {
|
if (mantissa) {
|
||||||
return make_float64(
|
return make_float64(
|
||||||
( ( (uint64_t) a.sign )<<63 )
|
(((uint64_t) a.sign) << 63)
|
||||||
| LIT64( 0x7FF0000000000000 )
|
| LIT64(0x7FF0000000000000)
|
||||||
| ( a.high>>12 ));
|
| (a.high >> 12));
|
||||||
} else {
|
} else {
|
||||||
return float64_default_nan(status);
|
return float64_default_nan(status);
|
||||||
}
|
}
|
||||||
@ -845,9 +844,9 @@ static float64 propagateFloat64NaN(float64 a, float64 b, float_status *status)
|
|||||||
return float64_default_nan(status);
|
return float64_default_nan(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uint64_t)(av<<1) < (uint64_t)(bv<<1)) {
|
if ((uint64_t)(av << 1) < (uint64_t)(bv << 1)) {
|
||||||
aIsLargerSignificand = 0;
|
aIsLargerSignificand = 0;
|
||||||
} else if ((uint64_t)(bv<<1) < (uint64_t)(av<<1)) {
|
} else if ((uint64_t)(bv << 1) < (uint64_t)(av << 1)) {
|
||||||
aIsLargerSignificand = 1;
|
aIsLargerSignificand = 1;
|
||||||
} else {
|
} else {
|
||||||
aIsLargerSignificand = (av < bv) ? 1 : 0;
|
aIsLargerSignificand = (av < bv) ? 1 : 0;
|
||||||
@ -999,7 +998,7 @@ static commonNaNT floatx80ToCommonNaN(floatx80 a, float_status *status)
|
|||||||
if (floatx80_is_signaling_nan(a, status)) {
|
if (floatx80_is_signaling_nan(a, status)) {
|
||||||
float_raise(float_flag_invalid, status);
|
float_raise(float_flag_invalid, status);
|
||||||
}
|
}
|
||||||
if ( a.low >> 63 ) {
|
if (a.low >> 63) {
|
||||||
z.sign = a.high >> 15;
|
z.sign = a.high >> 15;
|
||||||
z.low = 0;
|
z.low = 0;
|
||||||
z.high = a.low << 1;
|
z.high = a.low << 1;
|
||||||
@ -1026,8 +1025,8 @@ static floatx80 commonNaNToFloatx80(commonNaNT a, float_status *status)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (a.high >> 1) {
|
if (a.high >> 1) {
|
||||||
z.low = LIT64( 0x8000000000000000 ) | a.high >> 1;
|
z.low = LIT64(0x8000000000000000) | a.high >> 1;
|
||||||
z.high = ( ( (uint16_t) a.sign )<<15 ) | 0x7FFF;
|
z.high = (((uint16_t)a.sign) << 15) | 0x7FFF;
|
||||||
} else {
|
} else {
|
||||||
z = floatx80_default_nan(status);
|
z = floatx80_default_nan(status);
|
||||||
}
|
}
|
||||||
@ -1150,8 +1149,8 @@ static commonNaNT float128ToCommonNaN(float128 a, float_status *status)
|
|||||||
if (float128_is_signaling_nan(a, status)) {
|
if (float128_is_signaling_nan(a, status)) {
|
||||||
float_raise(float_flag_invalid, status);
|
float_raise(float_flag_invalid, status);
|
||||||
}
|
}
|
||||||
z.sign = a.high>>63;
|
z.sign = a.high >> 63;
|
||||||
shortShift128Left( a.high, a.low, 16, &z.high, &z.low );
|
shortShift128Left(a.high, a.low, 16, &z.high, &z.low);
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,8 +1167,8 @@ static float128 commonNaNToFloat128(commonNaNT a, float_status *status)
|
|||||||
return float128_default_nan(status);
|
return float128_default_nan(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
shift128Right( a.high, a.low, 16, &z.high, &z.low );
|
shift128Right(a.high, a.low, 16, &z.high, &z.low);
|
||||||
z.high |= ( ( (uint64_t) a.sign )<<63 ) | LIT64( 0x7FFF000000000000 );
|
z.high |= (((uint64_t)a.sign) << 63) | LIT64(0x7FFF000000000000);
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1198,9 +1197,9 @@ static float128 propagateFloat128NaN(float128 a, float128 b,
|
|||||||
return float128_default_nan(status);
|
return float128_default_nan(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lt128(a.high<<1, a.low, b.high<<1, b.low)) {
|
if (lt128(a.high << 1, a.low, b.high << 1, b.low)) {
|
||||||
aIsLargerSignificand = 0;
|
aIsLargerSignificand = 0;
|
||||||
} else if (lt128(b.high<<1, b.low, a.high<<1, a.low)) {
|
} else if (lt128(b.high << 1, b.low, a.high << 1, a.low)) {
|
||||||
aIsLargerSignificand = 1;
|
aIsLargerSignificand = 1;
|
||||||
} else {
|
} else {
|
||||||
aIsLargerSignificand = (a.high < b.high) ? 1 : 0;
|
aIsLargerSignificand = (a.high < b.high) ? 1 : 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user