@@ -483,20 +482,14 @@ int kvm_arch_put_registers(CPUState *cs, int level)
cs->kvm_run->psw_addr = env->psw.addr;
cs->kvm_run->psw_mask = env->psw.mask;
- if (can_sync_regs(cs, KVM_SYNC_GPRS)) {
- for (i = 0; i < 16; i++) {
- cs->kvm_run->s.regs.gprs[i] = env->regs[i];
- cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_GPRS;
- }
- } else {
- for (i = 0; i < 16; i++) {
- regs.gprs[i] = env->regs[i];
- }
- r = kvm_vcpu_ioctl(cs, KVM_SET_REGS, ®s);
- if (r < 0) {
- return r;
- }
- }
+ g_assert((cs->kvm_run->kvm_valid_regs & KVM_SYNC_REQUIRED_BITS) ==
+ KVM_SYNC_REQUIRED_BITS);
+ cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_REQUIRED_BITS;
+ memcpy(cs->kvm_run->s.regs.gprs, env->regs,
sizeof(cs->kvm_run->s.regs.gprs));
+ memcpy(cs->kvm_run->s.regs.acrs, env->aregs,
sizeof(cs->kvm_run->s.regs.acrs));
+ memcpy(cs->kvm_run->s.regs.crs, env->cregs,
sizeof(cs->kvm_run->s.regs.crs));
+
+ cs->kvm_run->s.regs.prefix = env->psa;