Support debug system bus access.
[riscv-isa-sim.git] / softfloat / f32_classify.c
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