aboutsummaryrefslogtreecommitdiff
path: root/source/bf16_to_f32.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/bf16_to_f32.c')
-rw-r--r--source/bf16_to_f32.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/source/bf16_to_f32.c b/source/bf16_to_f32.c
index a76632e..b86482c 100644
--- a/source/bf16_to_f32.c
+++ b/source/bf16_to_f32.c
@@ -74,17 +74,11 @@ float32_t bf16_to_f32( bfloat16_t a )
}
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
- if ( ! exp ) {
- if ( ! frac ) {
- uiZ = packToF32UI( sign, 0, 0 );
- goto uiZ;
- }
- normExpSig = softfloat_normSubnormalBF16Sig( frac );
- exp = normExpSig.exp - 1;
- frac = normExpSig.sig;
- }
- /*------------------------------------------------------------------------
- *------------------------------------------------------------------------*/
+ // packToF32UI simply packs bitfields without any numerical change
+ // which means it can be used directly for any BF16 to f32 conversions which
+ // does not require bits manipulation
+ // (that is everything where the 16-bit are just padded right with 16 zeros, including
+ // subnormal numbers)
uiZ = packToF32UI( sign, exp, ((uint_fast32_t) frac) <<16 );
uiZ:
uZ.ui = uiZ;