ulong guest_owned_ext;
 #endif
        u32 mmucr;
-       ulong sprg0;
-       ulong sprg1;
-       ulong sprg2;
-       ulong sprg3;
        ulong sprg4;
        ulong sprg5;
        ulong sprg6;
 
 #include <linux/types.h>
 
 struct kvm_vcpu_arch_shared {
+       __u64 sprg0;
+       __u64 sprg1;
+       __u64 sprg2;
+       __u64 sprg3;
        __u64 srr0;
        __u64 srr1;
        __u64 dar;
 
        regs->srr0 = vcpu->arch.shared->srr0;
        regs->srr1 = vcpu->arch.shared->srr1;
        regs->pid = vcpu->arch.pid;
-       regs->sprg0 = vcpu->arch.sprg0;
-       regs->sprg1 = vcpu->arch.sprg1;
-       regs->sprg2 = vcpu->arch.sprg2;
-       regs->sprg3 = vcpu->arch.sprg3;
+       regs->sprg0 = vcpu->arch.shared->sprg0;
+       regs->sprg1 = vcpu->arch.shared->sprg1;
+       regs->sprg2 = vcpu->arch.shared->sprg2;
+       regs->sprg3 = vcpu->arch.shared->sprg3;
        regs->sprg5 = vcpu->arch.sprg4;
        regs->sprg6 = vcpu->arch.sprg5;
        regs->sprg7 = vcpu->arch.sprg6;
        kvmppc_set_msr(vcpu, regs->msr);
        vcpu->arch.shared->srr0 = regs->srr0;
        vcpu->arch.shared->srr1 = regs->srr1;
-       vcpu->arch.sprg0 = regs->sprg0;
-       vcpu->arch.sprg1 = regs->sprg1;
-       vcpu->arch.sprg2 = regs->sprg2;
-       vcpu->arch.sprg3 = regs->sprg3;
+       vcpu->arch.shared->sprg0 = regs->sprg0;
+       vcpu->arch.shared->sprg1 = regs->sprg1;
+       vcpu->arch.shared->sprg2 = regs->sprg2;
+       vcpu->arch.shared->sprg3 = regs->sprg3;
        vcpu->arch.sprg5 = regs->sprg4;
        vcpu->arch.sprg6 = regs->sprg5;
        vcpu->arch.sprg7 = regs->sprg6;
 
        regs->srr0 = vcpu->arch.shared->srr0;
        regs->srr1 = vcpu->arch.shared->srr1;
        regs->pid = vcpu->arch.pid;
-       regs->sprg0 = vcpu->arch.sprg0;
-       regs->sprg1 = vcpu->arch.sprg1;
-       regs->sprg2 = vcpu->arch.sprg2;
-       regs->sprg3 = vcpu->arch.sprg3;
+       regs->sprg0 = vcpu->arch.shared->sprg0;
+       regs->sprg1 = vcpu->arch.shared->sprg1;
+       regs->sprg2 = vcpu->arch.shared->sprg2;
+       regs->sprg3 = vcpu->arch.shared->sprg3;
        regs->sprg5 = vcpu->arch.sprg4;
        regs->sprg6 = vcpu->arch.sprg5;
        regs->sprg7 = vcpu->arch.sprg6;
        kvmppc_set_msr(vcpu, regs->msr);
        vcpu->arch.shared->srr0 = regs->srr0;
        vcpu->arch.shared->srr1 = regs->srr1;
-       vcpu->arch.sprg0 = regs->sprg0;
-       vcpu->arch.sprg1 = regs->sprg1;
-       vcpu->arch.sprg2 = regs->sprg2;
-       vcpu->arch.sprg3 = regs->sprg3;
+       vcpu->arch.shared->sprg0 = regs->sprg0;
+       vcpu->arch.shared->sprg1 = regs->sprg1;
+       vcpu->arch.shared->sprg2 = regs->sprg2;
+       vcpu->arch.shared->sprg3 = regs->sprg3;
        vcpu->arch.sprg5 = regs->sprg4;
        vcpu->arch.sprg6 = regs->sprg5;
        vcpu->arch.sprg7 = regs->sprg6;
 
                                kvmppc_set_gpr(vcpu, rt, get_tb()); break;
 
                        case SPRN_SPRG0:
-                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg0); break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->sprg0);
+                               break;
                        case SPRN_SPRG1:
-                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg1); break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->sprg1);
+                               break;
                        case SPRN_SPRG2:
-                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg2); break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->sprg2);
+                               break;
                        case SPRN_SPRG3:
-                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.sprg3); break;
+                               kvmppc_set_gpr(vcpu, rt, vcpu->arch.shared->sprg3);
+                               break;
                        /* Note: SPRG4-7 are user-readable, so we don't get
                         * a trap. */
 
                                break;
 
                        case SPRN_SPRG0:
-                               vcpu->arch.sprg0 = kvmppc_get_gpr(vcpu, rs); break;
+                               vcpu->arch.shared->sprg0 = kvmppc_get_gpr(vcpu, rs);
+                               break;
                        case SPRN_SPRG1:
-                               vcpu->arch.sprg1 = kvmppc_get_gpr(vcpu, rs); break;
+                               vcpu->arch.shared->sprg1 = kvmppc_get_gpr(vcpu, rs);
+                               break;
                        case SPRN_SPRG2:
-                               vcpu->arch.sprg2 = kvmppc_get_gpr(vcpu, rs); break;
+                               vcpu->arch.shared->sprg2 = kvmppc_get_gpr(vcpu, rs);
+                               break;
                        case SPRN_SPRG3:
-                               vcpu->arch.sprg3 = kvmppc_get_gpr(vcpu, rs); break;
+                               vcpu->arch.shared->sprg3 = kvmppc_get_gpr(vcpu, rs);
+                               break;
 
                        default:
                                emulated = kvmppc_core_emulate_mtspr(vcpu, sprn, rs);