Revision 9ee6e8bb fpu/softfloat.c
b/fpu/softfloat.c | ||
---|---|---|
5377 | 5377 |
|
5378 | 5378 |
COMPARE(32, 0xff) |
5379 | 5379 |
COMPARE(64, 0x7ff) |
5380 |
|
|
5381 |
/* Multiply A by 2 raised to the power N. */ |
|
5382 |
float32 float32_scalbn( float32 a, int n STATUS_PARAM ) |
|
5383 |
{ |
|
5384 |
flag aSign; |
|
5385 |
int16 aExp; |
|
5386 |
bits32 aSig; |
|
5387 |
|
|
5388 |
aSig = extractFloat32Frac( a ); |
|
5389 |
aExp = extractFloat32Exp( a ); |
|
5390 |
aSign = extractFloat32Sign( a ); |
|
5391 |
|
|
5392 |
if ( aExp == 0xFF ) { |
|
5393 |
return a; |
|
5394 |
} |
|
5395 |
aExp += n; |
|
5396 |
return roundAndPackFloat32( aSign, aExp, aSig STATUS_VAR ); |
|
5397 |
} |
|
5398 |
|
|
5399 |
float64 float64_scalbn( float64 a, int n STATUS_PARAM ) |
|
5400 |
{ |
|
5401 |
flag aSign; |
|
5402 |
int16 aExp; |
|
5403 |
bits64 aSig; |
|
5404 |
|
|
5405 |
aSig = extractFloat64Frac( a ); |
|
5406 |
aExp = extractFloat64Exp( a ); |
|
5407 |
aSign = extractFloat64Sign( a ); |
|
5408 |
|
|
5409 |
if ( aExp == 0x7FF ) { |
|
5410 |
return a; |
|
5411 |
} |
|
5412 |
aExp += n; |
|
5413 |
return roundAndPackFloat64( aSign, aExp, aSig STATUS_VAR ); |
|
5414 |
} |
|
5415 |
|
|
5416 |
#ifdef FLOATX80 |
|
5417 |
floatx80 floatx80_scalbn( floatx80 a, int n STATUS_PARAM ) |
|
5418 |
{ |
|
5419 |
flag aSign; |
|
5420 |
int16 aExp; |
|
5421 |
bits64 aSig; |
|
5422 |
|
|
5423 |
aSig = extractFloatx80Frac( a ); |
|
5424 |
aExp = extractFloatx80Exp( a ); |
|
5425 |
aSign = extractFloatx80Sign( a ); |
|
5426 |
|
|
5427 |
if ( aExp == 0x7FF ) { |
|
5428 |
return a; |
|
5429 |
} |
|
5430 |
aExp += n; |
|
5431 |
return roundAndPackFloatx80( STATUS(floatx80_rounding_precision), |
|
5432 |
aSign, aExp, aSig, 0 STATUS_VAR ); |
|
5433 |
} |
|
5434 |
#endif |
|
5435 |
|
|
5436 |
#ifdef FLOAT128 |
|
5437 |
float128 float128_scalbn( float128 a, int n STATUS_PARAM ) |
|
5438 |
{ |
|
5439 |
flag aSign; |
|
5440 |
int32 aExp; |
|
5441 |
bits64 aSig0, aSig1; |
|
5442 |
|
|
5443 |
aSig1 = extractFloat128Frac1( a ); |
|
5444 |
aSig0 = extractFloat128Frac0( a ); |
|
5445 |
aExp = extractFloat128Exp( a ); |
|
5446 |
aSign = extractFloat128Sign( a ); |
|
5447 |
if ( aExp == 0x7FFF ) { |
|
5448 |
return a; |
|
5449 |
} |
|
5450 |
aExp += n; |
|
5451 |
return roundAndPackFloat128( aSign, aExp, aSig0, aSig1, 0 STATUS_VAR ); |
|
5452 |
|
|
5453 |
} |
|
5454 |
#endif |
Also available in: Unified diff