mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-25 17:31:04 +00:00
fpu/softfloat: move the extract functions to the top of the file
This is pure code-motion during re-factoring as the helpers will be needed earlier. Backports commit d97544c94a37371347402bcbee19dd3748d70e48 from qemu
This commit is contained in:
parent
b5fdc7b411
commit
562f14adcc
|
@ -132,6 +132,60 @@ static inline flag extractFloat16Sign(float16 a)
|
||||||
return float16_val(a)>>15;
|
return float16_val(a)>>15;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the fraction bits of the single-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline uint32_t extractFloat32Frac(float32 a)
|
||||||
|
{
|
||||||
|
return float32_val(a) & 0x007FFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the exponent bits of the single-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline int extractFloat32Exp(float32 a)
|
||||||
|
{
|
||||||
|
return (float32_val(a) >> 23) & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the sign bit of the single-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline flag extractFloat32Sign(float32 a)
|
||||||
|
{
|
||||||
|
return float32_val(a) >> 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the fraction bits of the double-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline uint64_t extractFloat64Frac(float64 a)
|
||||||
|
{
|
||||||
|
return float64_val(a) & LIT64(0x000FFFFFFFFFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the exponent bits of the double-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline int extractFloat64Exp(float64 a)
|
||||||
|
{
|
||||||
|
return (float64_val(a) >> 52) & 0x7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns the sign bit of the double-precision floating-point value `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static inline flag extractFloat64Sign(float64 a)
|
||||||
|
{
|
||||||
|
return float64_val(a) >> 63;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6
|
| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6
|
||||||
| and 7, and returns the properly rounded 32-bit integer corresponding to the
|
| and 7, and returns the properly rounded 32-bit integer corresponding to the
|
||||||
|
@ -294,39 +348,6 @@ static int64_t roundAndPackUint64(flag zSign, uint64_t absZ0,
|
||||||
return absZ0;
|
return absZ0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the fraction bits of the single-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline uint32_t extractFloat32Frac( float32 a )
|
|
||||||
{
|
|
||||||
|
|
||||||
return float32_val(a) & 0x007FFFFF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the exponent bits of the single-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline int extractFloat32Exp(float32 a)
|
|
||||||
{
|
|
||||||
|
|
||||||
return ( float32_val(a)>>23 ) & 0xFF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the sign bit of the single-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline flag extractFloat32Sign( float32 a )
|
|
||||||
{
|
|
||||||
|
|
||||||
return float32_val(a)>>31;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| If `a' is denormal and we are in flush-to-zero mode then set the
|
| 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.
|
| input-denormal exception and return zero. Otherwise just return the value.
|
||||||
|
@ -481,39 +502,6 @@ static float32
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the fraction bits of the double-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline uint64_t extractFloat64Frac( float64 a )
|
|
||||||
{
|
|
||||||
|
|
||||||
return float64_val(a) & LIT64( 0x000FFFFFFFFFFFFF );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the exponent bits of the double-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline int extractFloat64Exp(float64 a)
|
|
||||||
{
|
|
||||||
|
|
||||||
return ( float64_val(a)>>52 ) & 0x7FF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
|
||||||
| Returns the sign bit of the double-precision floating-point value `a'.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static inline flag extractFloat64Sign( float64 a )
|
|
||||||
{
|
|
||||||
|
|
||||||
return float64_val(a)>>63;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| If `a' is denormal and we are in flush-to-zero mode then set the
|
| 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.
|
| input-denormal exception and return zero. Otherwise just return the value.
|
||||||
|
|
Loading…
Reference in a new issue