Skip to content

Commit 343abf2

Browse files
Omar Almatovrbuchner-aril
authored andcommitted
(3/4) Support e4m3/e5m2 modes in f8 to f16 conversion
1 parent 5e65f49 commit 343abf2

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

softfloat/f8_to_f16.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,37 @@ float16_t f8_to_f16( float8_t a )
5656
*------------------------------------------------------------------------*/
5757
uA.f = a;
5858
uiA = uA.ui;
59+
5960
sign = signF8UI( uiA );
6061
exp = expF8UI( uiA );
6162
frac = fracF8UI( uiA );
6263
/*------------------------------------------------------------------------
6364
*------------------------------------------------------------------------*/
64-
if ( isNaNF8UI(uiA) ) {
65-
uiZ = defaultNaNF16UI;
66-
goto uiZ;
67-
}
68-
if ( isInfF8UI(uiA) ) {
69-
uiZ = packToF16UI( sign, 0x1F, 0 );
70-
goto uiZ;
65+
switch ( softfloat_fp8Mode ) {
66+
case softfloat_fp8_e4m3:
67+
// No Infinity in E4M3 mode.
68+
if ( isE4M3NaNF8UI( uiA ) ) {
69+
uiZ = defaultNaNF16UI;
70+
goto uiZ;
71+
}
72+
case softfloat_fp8_e5m2:
73+
if ( isE5M2NaNF8UI( uiA ) ) {
74+
uiZ = defaultNaNF16UI;
75+
goto uiZ;
76+
}
77+
if ( isE5M2InfF8UI( uiA ) ) {
78+
uiZ = packToF16UI( sign, 0x1F, 0 );
79+
goto uiZ;
80+
}
81+
default:
82+
if ( isNaNF8UI(uiA) ) {
83+
uiZ = defaultNaNF16UI;
84+
goto uiZ;
85+
}
86+
if ( isInfF8UI(uiA) ) {
87+
uiZ = packToF16UI( sign, 0x1F, 0 );
88+
goto uiZ;
89+
}
7190
}
7291
/*------------------------------------------------------------------------
7392
*------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)