Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1906 | serge | 1 | #include |
2 | |||
3 | /* 'fxam' sets FPU flags C3,C2,C0 'fstsw' stores: |
||
4 | FP_NAN 001 0x0100 |
||
5 | FP_NORMAL 010 0x0400 |
||
6 | FP_INFINITE 011 0x0500 |
||
7 | FP_ZERO 100 0x4000 |
||
8 | FP_SUBNORMAL 110 0x4400 |
||
9 | |||
10 | and sets C1 flag (signbit) if neg */ |
||
11 | |||
12 | int __fpclassify (double _x){ |
||
13 | unsigned short sw; |
||
14 | __asm__ ( |
||
15 | "fxam; fstsw %%ax;" |
||
16 | : "=a" (sw) |
||
17 | : "t" (_x) |
||
18 | ); |
||
19 | return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); |
||
20 | } |