static void restore_native_fp_fxrstor(CPUState *env)

{

    struct fpxstate *fp = &fpx1;

    int i, j, fptag;



    fp->fpuc = env->fpuc;

    fp->fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;

    fptag = 0;

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

        fptag |= (env->fptags[i] << i);

    fp->fptag = fptag ^ 0xff;



    j = env->fpstt;

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

        memcpy(&fp->fpregs1[i * 16], &env->fpregs[j].d, 10);

        j = (j + 1) & 7;

    }

    if (env->cpuid_features & CPUID_SSE) {

        fp->mxcsr = env->mxcsr;

        /* XXX: check if DAZ is not available */

        fp->mxcsr_mask = 0xffff;

        memcpy(fp->xmm_regs, env->xmm_regs, CPU_NB_REGS * 16);

    }

    asm volatile ("fxrstor %0" : "=m" (*fp));

}

static void restore_native_fp_fxrstor(CPUState *env)

{

    struct fpxstate *fp = &fpx1;

    int i, j, fptag;



    fp->fpuc = env->fpuc;

    fp->fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;

    fptag = 0;

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

        fptag |= (env->fptags[i] << i);

    fp->fptag = fptag ^ 0xff;



    j = env->fpstt;

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

        memcpy(&fp->fpregs1[i * 16], &env->fpregs[j].d, 10);

        j = (j + 1) & 7;

    }

    if (env->cpuid_features & CPUID_SSE) {

        fp->mxcsr = env->mxcsr;

        

        fp->mxcsr_mask = 0xffff;

        memcpy(fp->xmm_regs, env->xmm_regs, CPU_NB_REGS * 16);

    }

    asm volatile ("fxrstor %0" : "=m" (*fp));

}

static void FUNC_0(CPUState *VAR_0)

{

    struct fpxstate *VAR_1 = &fpx1;

    int VAR_2, VAR_3, VAR_4;



    VAR_1->fpuc = VAR_0->fpuc;

    VAR_1->fpus = (VAR_0->fpus & ~0x3800) | (VAR_0->fpstt & 0x7) << 11;

    VAR_4 = 0;

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

        VAR_4 |= (VAR_0->fptags[VAR_2] << VAR_2);

    VAR_1->VAR_4 = VAR_4 ^ 0xff;



    VAR_3 = VAR_0->fpstt;

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

        memcpy(&VAR_1->fpregs1[VAR_2 * 16], &VAR_0->fpregs[VAR_3].d, 10);

        VAR_3 = (VAR_3 + 1) & 7;

    }

    if (VAR_0->cpuid_features & CPUID_SSE) {

        VAR_1->mxcsr = VAR_0->mxcsr;

        

        VAR_1->mxcsr_mask = 0xffff;

        memcpy(VAR_1->xmm_regs, VAR_0->xmm_regs, CPU_NB_REGS * 16);

    }

    asm volatile ("fxrstor %0" : "=m" (*VAR_1));

}

static void FUNC_0(CPUState *VAR_0)
{ struct fpxstate *VAR_1 = &fpx1; int VAR_2, VAR_3, VAR_4; VAR_1->fpuc = VAR_0->fpuc; VAR_1->fpus = (VAR_0->fpus & ~0x3800) | (VAR_0->fpstt & 0x7) << 11; VAR_4 = 0; for(VAR_2 = 0; VAR_2 < 8; VAR_2++) VAR_4 |= (VAR_0->fptags[VAR_2] << VAR_2); VAR_1->VAR_4 = VAR_4 ^ 0xff; VAR_3 = VAR_0->fpstt; for(VAR_2 = 0;VAR_2 < 8; VAR_2++) { memcpy(&VAR_1->fpregs1[VAR_2 * 16], &VAR_0->fpregs[VAR_3].d, 10); VAR_3 = (VAR_3 + 1) & 7; } if (VAR_0->cpuid_features & CPUID_SSE) { VAR_1->mxcsr = VAR_0->mxcsr; VAR_1->mxcsr_mask = 0xffff; memcpy(VAR_1->xmm_regs, VAR_0->xmm_regs, CPU_NB_REGS * 16); } asm volatile ("fxrstor %0" : "=m" (*VAR_1)); }