void cpsr_write(CPUARMState *env, uint32_t val, uint32_t mask)

{

    if (mask & CPSR_NZCV) {

        env->ZF = (~val) & CPSR_Z;

        env->NF = val;

        env->CF = (val >> 29) & 1;

        env->VF = (val << 3) & 0x80000000;

    }

    if (mask & CPSR_Q)

        env->QF = ((val & CPSR_Q) != 0);

    if (mask & CPSR_T)

        env->thumb = ((val & CPSR_T) != 0);

    if (mask & CPSR_IT_0_1) {

        env->condexec_bits &= ~3;

        env->condexec_bits |= (val >> 25) & 3;

    }

    if (mask & CPSR_IT_2_7) {

        env->condexec_bits &= 3;

        env->condexec_bits |= (val >> 8) & 0xfc;

    }

    if (mask & CPSR_GE) {

        env->GE = (val >> 16) & 0xf;

    }



    if ((env->uncached_cpsr ^ val) & mask & CPSR_M) {

        switch_mode(env, val & CPSR_M);

    }

    mask &= ~CACHED_CPSR_BITS;

    env->uncached_cpsr = (env->uncached_cpsr & ~mask) | (val & mask);

}

void cpsr_write(CPUARMState *env, uint32_t val, uint32_t mask)

{

    if (mask & CPSR_NZCV) {

        env->ZF = (~val) & CPSR_Z;

        env->NF = val;

        env->CF = (val >> 29) & 1;

        env->VF = (val << 3) & 0x80000000;

    }

    if (mask & CPSR_Q)

        env->QF = ((val & CPSR_Q) != 0);

    if (mask & CPSR_T)

        env->thumb = ((val & CPSR_T) != 0);

    if (mask & CPSR_IT_0_1) {

        env->condexec_bits &= ~3;

        env->condexec_bits |= (val >> 25) & 3;

    }

    if (mask & CPSR_IT_2_7) {

        env->condexec_bits &= 3;

        env->condexec_bits |= (val >> 8) & 0xfc;

    }

    if (mask & CPSR_GE) {

        env->GE = (val >> 16) & 0xf;

    }



    if ((env->uncached_cpsr ^ val) & mask & CPSR_M) {

        switch_mode(env, val & CPSR_M);

    }

    mask &= ~CACHED_CPSR_BITS;

    env->uncached_cpsr = (env->uncached_cpsr & ~mask) | (val & mask);

}

        switch_mode(env, val & CPSR_M);
void FUNC_0(CPUARMState *VAR_0, uint32_t VAR_1, uint32_t VAR_2)

{

    if (VAR_2 & CPSR_NZCV) {

        VAR_0->ZF = (~VAR_1) & CPSR_Z;

        VAR_0->NF = VAR_1;

        VAR_0->CF = (VAR_1 >> 29) & 1;

        VAR_0->VF = (VAR_1 << 3) & 0x80000000;

    }

    if (VAR_2 & CPSR_Q)

        VAR_0->QF = ((VAR_1 & CPSR_Q) != 0);

    if (VAR_2 & CPSR_T)

        VAR_0->thumb = ((VAR_1 & CPSR_T) != 0);

    if (VAR_2 & CPSR_IT_0_1) {

        VAR_0->condexec_bits &= ~3;

        VAR_0->condexec_bits |= (VAR_1 >> 25) & 3;

    }

    if (VAR_2 & CPSR_IT_2_7) {

        VAR_0->condexec_bits &= 3;

        VAR_0->condexec_bits |= (VAR_1 >> 8) & 0xfc;

    }

    if (VAR_2 & CPSR_GE) {

        VAR_0->GE = (VAR_1 >> 16) & 0xf;

    }



    if ((VAR_0->uncached_cpsr ^ VAR_1) & VAR_2 & CPSR_M) {

        switch_mode(VAR_0, VAR_1 & CPSR_M);

    }

    VAR_2 &= ~CACHED_CPSR_BITS;

    VAR_0->uncached_cpsr = (VAR_0->uncached_cpsr & ~VAR_2) | (VAR_1 & VAR_2);

}

void FUNC_0(CPUARMState *VAR_0, uint32_t VAR_1, uint32_t VAR_2)
{ if (VAR_2 & CPSR_NZCV) { VAR_0->ZF = (~VAR_1) & CPSR_Z; VAR_0->NF = VAR_1; VAR_0->CF = (VAR_1 >> 29) & 1; VAR_0->VF = (VAR_1 << 3) & 0x80000000; } if (VAR_2 & CPSR_Q)
VAR_0->QF = ((VAR_1 & CPSR_Q) != 0); if (VAR_2 & CPSR_T)
VAR_0->thumb = ((VAR_1 & CPSR_T) != 0); if (VAR_2 & CPSR_IT_0_1) { VAR_0->condexec_bits &= ~3; VAR_0->condexec_bits |= (VAR_1 >> 25) & 3; } if (VAR_2 & CPSR_IT_2_7) { VAR_0->condexec_bits &= 3; VAR_0->condexec_bits |= (VAR_1 >> 8) & 0xfc; } if (VAR_2 & CPSR_GE) { VAR_0->GE = (VAR_1 >> 16) & 0xf; } if ((VAR_0->uncached_cpsr ^ VAR_1) & VAR_2 & CPSR_M) { switch_mode(VAR_0, VAR_1 & CPSR_M); } VAR_2 &= ~CACHED_CPSR_BITS; VAR_0->uncached_cpsr = (VAR_0->uncached_cpsr & ~VAR_2) | (VAR_1 & VAR_2); }