int kvmppc_put_books_sregs(PowerPCCPU *cpu)

{

    CPUPPCState *env = &cpu->env;

    struct kvm_sregs sregs;

    int i;



    sregs.pvr = env->spr[SPR_PVR];



    sregs.u.s.sdr1 = env->spr[SPR_SDR1];



    /* Sync SLB */

#ifdef TARGET_PPC64

    for (i = 0; i < ARRAY_SIZE(env->slb); i++) {

        sregs.u.s.ppc64.slb[i].slbe = env->slb[i].esid;

        if (env->slb[i].esid & SLB_ESID_V) {

            sregs.u.s.ppc64.slb[i].slbe |= i;

        }

        sregs.u.s.ppc64.slb[i].slbv = env->slb[i].vsid;

    }

#endif



    /* Sync SRs */

    for (i = 0; i < 16; i++) {

        sregs.u.s.ppc32.sr[i] = env->sr[i];

    }



    /* Sync BATs */

    for (i = 0; i < 8; i++) {

        /* Beware. We have to swap upper and lower bits here */

        sregs.u.s.ppc32.dbat[i] = ((uint64_t)env->DBAT[0][i] << 32)

            | env->DBAT[1][i];

        sregs.u.s.ppc32.ibat[i] = ((uint64_t)env->IBAT[0][i] << 32)

            | env->IBAT[1][i];

    }



    return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs);

}

int kvmppc_put_books_sregs(PowerPCCPU *cpu)

{

    CPUPPCState *env = &cpu->env;

    struct kvm_sregs sregs;

    int i;



    sregs.pvr = env->spr[SPR_PVR];



    sregs.u.s.sdr1 = env->spr[SPR_SDR1];



    

#ifdef TARGET_PPC64

    for (i = 0; i < ARRAY_SIZE(env->slb); i++) {

        sregs.u.s.ppc64.slb[i].slbe = env->slb[i].esid;

        if (env->slb[i].esid & SLB_ESID_V) {

            sregs.u.s.ppc64.slb[i].slbe |= i;

        }

        sregs.u.s.ppc64.slb[i].slbv = env->slb[i].vsid;

    }

#endif



    

    for (i = 0; i < 16; i++) {

        sregs.u.s.ppc32.sr[i] = env->sr[i];

    }



    

    for (i = 0; i < 8; i++) {

        

        sregs.u.s.ppc32.dbat[i] = ((uint64_t)env->DBAT[0][i] << 32)

            | env->DBAT[1][i];

        sregs.u.s.ppc32.ibat[i] = ((uint64_t)env->IBAT[0][i] << 32)

            | env->IBAT[1][i];

    }



    return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs);

}

int FUNC_0(PowerPCCPU *VAR_0)

{

    CPUPPCState *env = &VAR_0->env;

    struct kvm_sregs VAR_1;

    int VAR_2;



    VAR_1.pvr = env->spr[SPR_PVR];



    VAR_1.u.s.sdr1 = env->spr[SPR_SDR1];



    

#ifdef TARGET_PPC64

    for (VAR_2 = 0; VAR_2 < ARRAY_SIZE(env->slb); VAR_2++) {

        VAR_1.u.s.ppc64.slb[VAR_2].slbe = env->slb[VAR_2].esid;

        if (env->slb[VAR_2].esid & SLB_ESID_V) {

            VAR_1.u.s.ppc64.slb[VAR_2].slbe |= VAR_2;

        }

        VAR_1.u.s.ppc64.slb[VAR_2].slbv = env->slb[VAR_2].vsid;

    }

#endif



    

    for (VAR_2 = 0; VAR_2 < 16; VAR_2++) {

        VAR_1.u.s.ppc32.sr[VAR_2] = env->sr[VAR_2];

    }



    

    for (VAR_2 = 0; VAR_2 < 8; VAR_2++) {

        

        VAR_1.u.s.ppc32.dbat[VAR_2] = ((uint64_t)env->DBAT[0][VAR_2] << 32)

            | env->DBAT[1][VAR_2];

        VAR_1.u.s.ppc32.ibat[VAR_2] = ((uint64_t)env->IBAT[0][VAR_2] << 32)

            | env->IBAT[1][VAR_2];

    }



    return kvm_vcpu_ioctl(CPU(VAR_0), KVM_SET_SREGS, &VAR_1);

}

int FUNC_0(PowerPCCPU *VAR_0)
{ CPUPPCState *env = &VAR_0->env; struct kvm_sregs VAR_1; int VAR_2; VAR_1.pvr = env->spr[SPR_PVR]; VAR_1.u.s.sdr1 = env->spr[SPR_SDR1]; #ifdef TARGET_PPC64
for (VAR_2 = 0; VAR_2 < ARRAY_SIZE(env->slb); VAR_2++) { VAR_1.u.s.ppc64.slb[VAR_2].slbe = env->slb[VAR_2].esid; if (env->slb[VAR_2].esid & SLB_ESID_V) { VAR_1.u.s.ppc64.slb[VAR_2].slbe |= VAR_2; } VAR_1.u.s.ppc64.slb[VAR_2].slbv = env->slb[VAR_2].vsid; } #endif
for (VAR_2 = 0; VAR_2 < 16; VAR_2++) { VAR_1.u.s.ppc32.sr[VAR_2] = env->sr[VAR_2]; } for (VAR_2 = 0; VAR_2 < 8; VAR_2++) { VAR_1.u.s.ppc32.dbat[VAR_2] = ((uint64_t)env->DBAT[0][VAR_2] << 32)
| env->DBAT[1][VAR_2]; VAR_1.u.s.ppc32.ibat[VAR_2] = ((uint64_t)env->IBAT[0][VAR_2] << 32)
| env->IBAT[1][VAR_2]; } return kvm_vcpu_ioctl(CPU(VAR_0), KVM_SET_SREGS, &VAR_1); }