Right now, AVX and AVX512 registers are stored part in the SSE registers, part in separate fields that follow the XSAVE format.
This series instead uses a single 512-bit field for each of the 32 registers. It makes the marshalling a bit more complicated but keeps the madness out of CPUX86State's public interface. Also, a hypothetical XSAVE implementation of TCG would probably need something like this too, and it could share most of the implementation with KVM's kvm_get_xsave/kvm_put_xsave wrappers. As a bonus, patch 1 fixes a real bug found while inspecting uses of xmm_regs. Paolo Paolo Bonzini (4): target-i386: fix movntsd on big-endian hosts target-i386: do not memcpy in and out of xmm_regs target-i386: use vmstate_offset_sub_array for AVX registers target-i386: make xmm_regs 512-bit wide include/migration/vmstate.h | 10 +++++++ target-i386/cpu.h | 68 +++++------------------------------------ target-i386/kvm.c | 62 +++++++++++++++++++++++++++----------- target-i386/machine.c | 73 +++++++++++++++++++++++---------------------- target-i386/translate.c | 11 +++---- 5 files changed, 106 insertions(+), 118 deletions(-) -- 1.8.3.1