Signed-off-by: Juan Quintela <quint...@redhat.com> --- savevm.c | 30 ++++++++++++++++++++++++++++++ vmstate.h | 4 ++++ 2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/savevm.c b/savevm.c index 09a2149..822f078 100644 --- a/savevm.c +++ b/savevm.c @@ -1112,6 +1112,36 @@ const VMStateInfo vmstate_info_float32 = { .put = put_float32, }; +/* 64 bit float */ + +typedef union { + float64 d; + uint64_t l; +} VMStateFloat64; + +static int get_float64(QEMUFile *f, void *pv, size_t size) +{ + float64 *v = pv; + VMStateFloat64 u; + qemu_get_be64s(f, &u.l); + *v = u.d; + return 0; +} + +static void put_float64(QEMUFile *f, void *pv, size_t size) +{ + float64 *v = pv; + VMStateFloat64 u; + u.d = *v; + qemu_put_be64s(f, &u.l); +} + +const VMStateInfo vmstate_info_float64 = { + .name = "float64", + .get = get_float64, + .put = put_float64, +}; + /* timers */ static int get_timer(QEMUFile *f, void *pv, size_t size) diff --git a/vmstate.h b/vmstate.h index 135c5aa..d3fb88c 100644 --- a/vmstate.h +++ b/vmstate.h @@ -131,6 +131,7 @@ extern const VMStateInfo vmstate_info_uint32; extern const VMStateInfo vmstate_info_uint64; extern const VMStateInfo vmstate_info_float32; +extern const VMStateInfo vmstate_info_float64; extern const VMStateInfo vmstate_info_timer; extern const VMStateInfo vmstate_info_buffer; @@ -564,6 +565,9 @@ extern const VMStateDescription vmstate_cpu; #define VMSTATE_FLOAT32_ARRAY(_f, _s, _n) \ VMSTATE_ARRAY(_f, _s, _n, 0, vmstate_info_float32, float32) +#define VMSTATE_FLOAT64_ARRAY(_f, _s, _n) \ + VMSTATE_ARRAY(_f, _s, _n, 0, vmstate_info_float64, float64) + #define VMSTATE_BUFFER_V(_f, _s, _v) \ VMSTATE_STATIC_BUFFER(_f, _s, _v, NULL, 0, sizeof(typeof_field(_s, _f))) -- 1.7.7.6