Skip to content

Commit 5290ed7

Browse files
committed
Update vector FP classify to support FP8
1 parent c838464 commit 5290ed7

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

softfloat/f8_classify.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdbool.h>
2+
#include <stdint.h>
3+
#include "platform.h"
4+
#include "internals.h"
5+
#include "specialize.h"
6+
#include "softfloat.h"
7+
8+
uint_fast16_t f8_classify( float8_t a )
9+
{
10+
union ui8_f8 uA;
11+
uint_fast16_t uiA;
12+
13+
uA.f = a;
14+
uiA = uA.ui;
15+
16+
uint_fast16_t infOrNaN = isInfF8UI(uiA) || isNaNF8UI(uiA);
17+
uint_fast16_t subnormalOrZero = expF8UI( uiA ) == 0;
18+
bool sign = signF8UI( uiA );
19+
bool fracZero = fracF8UI( uiA ) == 0;
20+
bool isNaN = isNaNF8UI( uiA );
21+
bool isSNaN = false;
22+
23+
return
24+
( sign && infOrNaN && fracZero ) << 0 |
25+
( sign && !infOrNaN && !subnormalOrZero ) << 1 |
26+
( sign && subnormalOrZero && !fracZero ) << 2 |
27+
( sign && subnormalOrZero && fracZero ) << 3 |
28+
( !sign && infOrNaN && fracZero ) << 7 |
29+
( !sign && !infOrNaN && !subnormalOrZero ) << 6 |
30+
( !sign && subnormalOrZero && !fracZero ) << 5 |
31+
( !sign && subnormalOrZero && fracZero ) << 4 |
32+
( isNaN && isSNaN ) << 8 |
33+
( isNaN && !isSNaN ) << 9;
34+
}

softfloat/softfloat.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ uint_fast16_t f8_to_ui16( float8_t, uint_fast8_t, bool );
159159
float8_t f8_sub( float8_t, float8_t );
160160
float8_t f8_add( float8_t, float8_t );
161161
float8_t f8_mulAdd( float8_t, float8_t , float8_t );
162+
uint_fast16_t f8_classify( float8_t );
162163

163164
float8_t f8_emulation_3_operands(float8_t a8, float8_t b8, float8_t c8, float16_t (*operation)(float16_t, float16_t, float16_t));
164165
float8_t f8_emulation_2_operands(float8_t a8, float8_t b8, float16_t (*operation)(float16_t, float16_t));

softfloat/softfloat.mk.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ softfloat_c_srcs = \
4848
f16_lt_quiet.c \
4949
f16_mulAdd.c \
5050
f16_mul.c \
51+
f8_classify.c \
5152
f8_add.c \
5253
f8_sub.c \
5354
f8_mul.c \

0 commit comments

Comments
 (0)