]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/omap/fpi.h
audiohda: fix syntax error
[plan9front.git] / sys / src / 9 / omap / fpi.h
1 typedef long Word;
2 typedef unsigned long Single;
3 typedef struct {
4         unsigned long l;
5         unsigned long h;
6 } Double;
7
8 enum {
9         FractBits       = 28,
10         CarryBit        = 0x10000000,
11         HiddenBit       = 0x08000000,
12         MsBit           = HiddenBit,
13         NGuardBits      = 3,
14         GuardMask       = 0x07,
15         LsBit           = (1<<NGuardBits),
16
17         SingleExpBias   = 127,
18         SingleExpMax    = 255,
19         DoubleExpBias   = 1023,
20         DoubleExpMax    = 2047,
21
22         ExpBias         = DoubleExpBias,
23         ExpInfinity     = DoubleExpMax,
24 };
25
26 typedef struct {
27         unsigned char s;
28         short e;
29         long l;                         /* 0000FFFFFFFFFFFFFFFFFFFFFFFFFGGG */
30         long h;                         /* 0000HFFFFFFFFFFFFFFFFFFFFFFFFFFF */
31 } Internal;
32
33 #define IsWeird(n)      ((n)->e >= ExpInfinity)
34 #define IsInfinity(n)   (IsWeird(n) && (n)->h == HiddenBit && (n)->l == 0)
35 #define SetInfinity(n)  ((n)->e = ExpInfinity, (n)->h = HiddenBit, (n)->l = 0)
36 #define IsNaN(n)        (IsWeird(n) && (((n)->h & ~HiddenBit) || (n)->l))
37 #define SetQNaN(n)      ((n)->s = 0, (n)->e = ExpInfinity,              \
38                          (n)->h = HiddenBit|(LsBit<<1), (n)->l = 0)
39 #define IsZero(n)       ((n)->e == 1 && (n)->h == 0 && (n)->l == 0)
40 #define SetZero(n)      ((n)->e = 1, (n)->h = 0, (n)->l = 0)
41
42 /*
43  * fpi.c
44  */
45 extern void fpiround(Internal *);
46 extern void fpiadd(Internal *, Internal *, Internal *);
47 extern void fpisub(Internal *, Internal *, Internal *);
48 extern void fpimul(Internal *, Internal *, Internal *);
49 extern void fpidiv(Internal *, Internal *, Internal *);
50 extern int fpicmp(Internal *, Internal *);
51 extern void fpinormalise(Internal*);
52
53 /*
54  * fpimem.c
55  */
56 extern void fpis2i(Internal *, void *);
57 extern void fpid2i(Internal *, void *);
58 extern void fpiw2i(Internal *, void *);
59 extern void fpii2s(void *, Internal *);
60 extern void fpii2d(void *, Internal *);
61 extern void fpii2w(Word *, Internal *);