Rev 857 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 857 | Rev 1031 | ||
|---|---|---|---|
| Line 27... | Line 27... | ||
| 27 | */ |
27 | */ |
| 28 | 28 | ||
| 29 | #ifndef __SFTYPES_H__ |
29 | #ifndef __SFTYPES_H__ |
| 30 | #define __SFTYPES_H__ |
30 | #define __SFTYPES_H__ |
| 31 | 31 | ||
| 32 | #include <types.h> |
32 | #include <endian.h> |
| 33 | #include <arch.h> |
33 | #include <stdint.h> |
| 34 | 34 | ||
| 35 | typedef union { |
35 | typedef union { |
| 36 | float f; |
36 | float f; |
| 37 | __u32 binary; |
37 | uint32_t binary; |
| 38 | 38 | ||
| 39 | struct { |
39 | struct { |
| 40 | #ifdef __BIG_ENDIAN__ |
40 | #if __BYTE_ORDER == __BIG_ENDIAN |
| 41 | __u32 sign:1; |
41 | uint32_t sign:1; |
| 42 | __u32 exp:8; |
42 | uint32_t exp:8; |
| 43 | __u32 fraction:23; |
43 | uint32_t fraction:23; |
| 44 | #elif defined __LITTLE_ENDIAN__ |
44 | #elif __BYTE_ORDER == __LITTLE_ENDIAN |
| 45 | __u32 fraction:23; |
45 | uint32_t fraction:23; |
| 46 | __u32 exp:8; |
46 | uint32_t exp:8; |
| 47 | __u32 sign:1; |
47 | uint32_t sign:1; |
| 48 | #else |
48 | #else |
| 49 | #error "Unknown endians." |
49 | #error "Unknown endians." |
| 50 | #endif |
50 | #endif |
| 51 | } parts __attribute__ ((packed)); |
51 | } parts __attribute__ ((packed)); |
| 52 | } float32; |
52 | } float32; |
| 53 | 53 | ||
| 54 | typedef union { |
54 | typedef union { |
| 55 | double d; |
55 | double d; |
| 56 | __u64 binary; |
56 | uint64_t binary; |
| 57 | 57 | ||
| 58 | struct { |
58 | struct { |
| 59 | #ifdef __BIG_ENDIAN__ |
59 | #if __BYTE_ORDER == __BIG_ENDIAN |
| 60 | __u64 sign:1; |
60 | uint64_t sign:1; |
| 61 | __u64 exp:11; |
61 | uint64_t exp:11; |
| 62 | __u64 fraction:52; |
62 | uint64_t fraction:52; |
| 63 | #elif defined __LITTLE_ENDIAN__ |
63 | #elif __BYTE_ORDER == __LITTLE_ENDIAN |
| 64 | __u64 fraction:52; |
64 | uint64_t fraction:52; |
| 65 | __u64 exp:11; |
65 | uint64_t exp:11; |
| 66 | __u64 sign:1; |
66 | uint64_t sign:1; |
| 67 | #else |
67 | #else |
| 68 | #error "Unknown endians." |
68 | #error "Unknown endians." |
| 69 | #endif |
69 | #endif |
| 70 | } parts __attribute__ ((packed)); |
70 | } parts __attribute__ ((packed)); |
| 71 | } float64; |
71 | } float64; |
| 72 | 72 | ||
| 73 | #define FLOAT32_MAX 0x7f800000 |
73 | #define FLOAT32_MAX 0x7f800000 |