| 1 | #ifndef QEMU_CPU_FLOAT_H |
| 2 | #define QEMU_CPU_FLOAT_H |
| 3 | |
| 4 | #include "fpu/softfloat-types.h" |
| 5 | |
| 6 | /* Unions for reinterpreting between floats and integers. */ |
| 7 | |
| 8 | typedef union { |
| 9 | float32 f; |
| 10 | uint32_t l; |
| 11 | } CPU_FloatU; |
| 12 | |
| 13 | typedef union { |
| 14 | float64 d; |
| 15 | #if HOST_BIG_ENDIAN |
| 16 | struct { |
| 17 | uint32_t upper; |
| 18 | uint32_t lower; |
| 19 | } l; |
| 20 | #else |
| 21 | struct { |
| 22 | uint32_t lower; |
| 23 | uint32_t upper; |
| 24 | } l; |
| 25 | #endif |
| 26 | uint64_t ll; |
| 27 | } CPU_DoubleU; |
| 28 | |
| 29 | typedef union { |
| 30 | floatx80 d; |
| 31 | struct { |
| 32 | uint64_t lower; |
| 33 | uint16_t upper; |
| 34 | } l; |
| 35 | } CPU_LDoubleU; |
| 36 | |
| 37 | typedef union { |
| 38 | float128 q; |
| 39 | #if HOST_BIG_ENDIAN |
| 40 | struct { |
| 41 | uint32_t upmost; |
| 42 | uint32_t upper; |
| 43 | uint32_t lower; |
| 44 | uint32_t lowest; |
| 45 | } l; |
| 46 | struct { |
| 47 | uint64_t upper; |
| 48 | uint64_t lower; |
| 49 | } ll; |
| 50 | #else |
| 51 | struct { |
| 52 | uint32_t lowest; |
| 53 | uint32_t lower; |
| 54 | uint32_t upper; |
| 55 | uint32_t upmost; |
| 56 | } l; |
| 57 | struct { |
| 58 | uint64_t lower; |
| 59 | uint64_t upper; |
| 60 | } ll; |
| 61 | #endif |
| 62 | } CPU_QuadU; |
| 63 | |
| 64 | #endif /* QEMU_CPU_FLOAT_H */ |