xref: /openbmc/qemu/include/qemu/cpu-float.h (revision 9c092804)
1*9c092804SMarkus Armbruster #ifndef QEMU_CPU_FLOAT_H
2*9c092804SMarkus Armbruster #define QEMU_CPU_FLOAT_H
369242e7eSMarc-André Lureau 
469242e7eSMarc-André Lureau #include "fpu/softfloat-types.h"
569242e7eSMarc-André Lureau 
669242e7eSMarc-André Lureau /* Unions for reinterpreting between floats and integers.  */
769242e7eSMarc-André Lureau 
869242e7eSMarc-André Lureau typedef union {
969242e7eSMarc-André Lureau     float32 f;
1069242e7eSMarc-André Lureau     uint32_t l;
1169242e7eSMarc-André Lureau } CPU_FloatU;
1269242e7eSMarc-André Lureau 
1369242e7eSMarc-André Lureau typedef union {
1469242e7eSMarc-André Lureau     float64 d;
1569242e7eSMarc-André Lureau #if HOST_BIG_ENDIAN
1669242e7eSMarc-André Lureau     struct {
1769242e7eSMarc-André Lureau         uint32_t upper;
1869242e7eSMarc-André Lureau         uint32_t lower;
1969242e7eSMarc-André Lureau     } l;
2069242e7eSMarc-André Lureau #else
2169242e7eSMarc-André Lureau     struct {
2269242e7eSMarc-André Lureau         uint32_t lower;
2369242e7eSMarc-André Lureau         uint32_t upper;
2469242e7eSMarc-André Lureau     } l;
2569242e7eSMarc-André Lureau #endif
2669242e7eSMarc-André Lureau     uint64_t ll;
2769242e7eSMarc-André Lureau } CPU_DoubleU;
2869242e7eSMarc-André Lureau 
2969242e7eSMarc-André Lureau typedef union {
3069242e7eSMarc-André Lureau      floatx80 d;
3169242e7eSMarc-André Lureau      struct {
3269242e7eSMarc-André Lureau          uint64_t lower;
3369242e7eSMarc-André Lureau          uint16_t upper;
3469242e7eSMarc-André Lureau      } l;
3569242e7eSMarc-André Lureau } CPU_LDoubleU;
3669242e7eSMarc-André Lureau 
3769242e7eSMarc-André Lureau typedef union {
3869242e7eSMarc-André Lureau     float128 q;
3969242e7eSMarc-André Lureau #if HOST_BIG_ENDIAN
4069242e7eSMarc-André Lureau     struct {
4169242e7eSMarc-André Lureau         uint32_t upmost;
4269242e7eSMarc-André Lureau         uint32_t upper;
4369242e7eSMarc-André Lureau         uint32_t lower;
4469242e7eSMarc-André Lureau         uint32_t lowest;
4569242e7eSMarc-André Lureau     } l;
4669242e7eSMarc-André Lureau     struct {
4769242e7eSMarc-André Lureau         uint64_t upper;
4869242e7eSMarc-André Lureau         uint64_t lower;
4969242e7eSMarc-André Lureau     } ll;
5069242e7eSMarc-André Lureau #else
5169242e7eSMarc-André Lureau     struct {
5269242e7eSMarc-André Lureau         uint32_t lowest;
5369242e7eSMarc-André Lureau         uint32_t lower;
5469242e7eSMarc-André Lureau         uint32_t upper;
5569242e7eSMarc-André Lureau         uint32_t upmost;
5669242e7eSMarc-André Lureau     } l;
5769242e7eSMarc-André Lureau     struct {
5869242e7eSMarc-André Lureau         uint64_t lower;
5969242e7eSMarc-André Lureau         uint64_t upper;
6069242e7eSMarc-André Lureau     } ll;
6169242e7eSMarc-André Lureau #endif
6269242e7eSMarc-André Lureau } CPU_QuadU;
6369242e7eSMarc-André Lureau 
64*9c092804SMarkus Armbruster #endif /* QEMU_CPU_FLOAT_H */
65