File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+
2+ #include <stdbool.h>
3+ #include <stdint.h>
4+ #include "platform.h"
5+ #include "internals.h"
6+ #include "specialize.h"
7+ #include "softfloat.h"
8+
9+ uint_fast16_t f32_classify ( float32_t a )
10+ {
11+ union ui32_f32 uA ;
12+ uint_fast32_t uiA ;
13+
14+ uA .f = a ;
15+ uiA = uA .ui ;
16+
17+ uint_fast16_t infOrNaN = expF32UI ( uiA ) == 0xFF ;
18+ uint_fast16_t subnormalOrZero = expF32UI ( uiA ) == 0 ;
19+ bool sign = signF32UI ( uiA );
20+ bool fracZero = fracF32UI ( uiA ) == 0 ;
21+ bool isNaN = isNaNF32UI ( uiA );
22+ bool isSNaN = softfloat_isSigNaNF32UI ( uiA );
23+
24+ return
25+ ( sign && infOrNaN && fracZero ) << 0 |
26+ ( sign && !infOrNaN && !subnormalOrZero ) << 1 |
27+ ( sign && subnormalOrZero && !fracZero ) << 2 |
28+ ( sign && subnormalOrZero && fracZero ) << 3 |
29+ ( !sign && infOrNaN && fracZero ) << 7 |
30+ ( !sign && !infOrNaN && !subnormalOrZero ) << 6 |
31+ ( !sign && subnormalOrZero && !fracZero ) << 5 |
32+ ( !sign && subnormalOrZero && fracZero ) << 4 |
33+ ( isNaN && isSNaN ) << 8 |
34+ ( isNaN && !isSNaN ) << 9 ;
35+ }
36+
Original file line number Diff line number Diff line change 1+
2+ #include <stdbool.h>
3+ #include <stdint.h>
4+ #include "platform.h"
5+ #include "internals.h"
6+ #include "specialize.h"
7+ #include "softfloat.h"
8+
9+ uint_fast16_t f64_classify ( float64_t a )
10+ {
11+ union ui64_f64 uA ;
12+ uint_fast64_t uiA ;
13+
14+ uA .f = a ;
15+ uiA = uA .ui ;
16+
17+ uint_fast16_t infOrNaN = expF64UI ( uiA ) == 0x7FF ;
18+ uint_fast16_t subnormalOrZero = expF64UI ( uiA ) == 0 ;
19+ bool sign = signF64UI ( uiA );
20+ bool fracZero = fracF64UI ( uiA ) == 0 ;
21+ bool isNaN = isNaNF64UI ( uiA );
22+ bool isSNaN = softfloat_isSigNaNF64UI ( uiA );
23+
24+ return
25+ ( sign && infOrNaN && fracZero ) << 0 |
26+ ( sign && !infOrNaN && !subnormalOrZero ) << 1 |
27+ ( sign && subnormalOrZero && !fracZero ) << 2 |
28+ ( sign && subnormalOrZero && fracZero ) << 3 |
29+ ( !sign && infOrNaN && fracZero ) << 7 |
30+ ( !sign && !infOrNaN && !subnormalOrZero ) << 6 |
31+ ( !sign && subnormalOrZero && !fracZero ) << 5 |
32+ ( !sign && subnormalOrZero && fracZero ) << 4 |
33+ ( isNaN && isSNaN ) << 8 |
34+ ( isNaN && !isSNaN ) << 9 ;
35+ }
36+
You can’t perform that action at this time.
0 commit comments