static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t *nextp,

                                 QEMUTimer *timer,

                                 void (*raise_excp)(PowerPCCPU *),

                                 uint32_t decr, uint32_t value,

                                 int is_excp)

{

    CPUPPCState *env = &cpu->env;

    ppc_tb_t *tb_env = env->tb_env;

    uint64_t now, next;



    LOG_TB("%s: %08" PRIx32 " => %08" PRIx32 "\n", __func__,

                decr, value);



    if (kvm_enabled()) {

        /* KVM handles decrementer exceptions, we don't need our own timer */

        return;

    }



    now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);

    next = now + muldiv64(value, get_ticks_per_sec(), tb_env->decr_freq);

    if (is_excp) {

        next += *nextp - now;

    }

    if (next == now) {

        next++;

    }

    *nextp = next;

    /* Adjust timer */

    timer_mod(timer, next);



    /* If we set a negative value and the decrementer was positive, raise an

     * exception.

     */

    if ((tb_env->flags & PPC_DECR_UNDERFLOW_TRIGGERED)

        && (value & 0x80000000)

        && !(decr & 0x80000000)) {

        (*raise_excp)(cpu);

    }

}

static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t *nextp,

                                 QEMUTimer *timer,

                                 void (*raise_excp)(PowerPCCPU *),

                                 uint32_t decr, uint32_t value,

                                 int is_excp)

{

    CPUPPCState *env = &cpu->env;

    ppc_tb_t *tb_env = env->tb_env;

    uint64_t now, next;



    LOG_TB("%s: %08" PRIx32 " => %08" PRIx32 "\n", __func__,

                decr, value);



    if (kvm_enabled()) {

        

        return;

    }



    now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);

    next = now + muldiv64(value, get_ticks_per_sec(), tb_env->decr_freq);

    if (is_excp) {

        next += *nextp - now;

    }

    if (next == now) {

        next++;

    }

    *nextp = next;

    

    timer_mod(timer, next);



    





    if ((tb_env->flags & PPC_DECR_UNDERFLOW_TRIGGERED)

        && (value & 0x80000000)

        && !(decr & 0x80000000)) {

        (*raise_excp)(cpu);

    }

}

VAR_4staticVAR_4 VAR_4voidVAR_4 VAR_4__cpu_ppc_store_decrVAR_4(VAR_4PowerPCCPUVAR_4 *VAR_4VAR_0VAR_4, VAR_4uint64_tVAR_4 *VAR_4VAR_1VAR_4,

                                 VAR_4QEMUTimerVAR_4 *VAR_4VAR_2VAR_4,

                                 VAR_4voidVAR_4 (*VAR_4VAR_3VAR_4)(VAR_4PowerPCCPUVAR_4 *),

                                 VAR_4uint32_tVAR_4 VAR_4decrVAR_4, VAR_4uint32_tVAR_4 VAR_4valueVAR_4,

                                 VAR_4intVAR_4 VAR_4is_excpVAR_4)

{

    VAR_4CPUPPCStateVAR_4 *VAR_4envVAR_4 = &VAR_4VAR_0VAR_4->VAR_4envVAR_4;

    VAR_4ppc_tb_tVAR_4 *VAR_4tb_envVAR_4 = VAR_4envVAR_4->VAR_4tb_envVAR_4;

    VAR_4uint64_tVAR_4 VAR_4nowVAR_4, VAR_4nextVAR_4;



    VAR_4LOG_TBVAR_4("%VAR_4sVAR_4: %VAR_408VAR_4" VAR_4PRIx32VAR_4 " => %VAR_408VAR_4" VAR_4PRIx32VAR_4 "\VAR_4nVAR_4", VAR_4__func__VAR_4,

                VAR_4decrVAR_4, VAR_4valueVAR_4);



    VAR_4ifVAR_4 (VAR_4kvm_enabledVAR_4()) {

        

        VAR_4returnVAR_4;

    }



    VAR_4nowVAR_4 = VAR_4qemu_clock_get_nsVAR_4(VAR_4QEMU_CLOCK_VIRTUALVAR_4);

    VAR_4nextVAR_4 = VAR_4nowVAR_4 + VAR_4muldiv64VAR_4(VAR_4valueVAR_4, VAR_4get_ticks_per_secVAR_4(), VAR_4tb_envVAR_4->VAR_4decr_freqVAR_4);

    VAR_4ifVAR_4 (VAR_4is_excpVAR_4) {

        VAR_4nextVAR_4 += *VAR_4VAR_1VAR_4 - VAR_4nowVAR_4;

    }

    VAR_4ifVAR_4 (VAR_4nextVAR_4 == VAR_4nowVAR_4) {

        VAR_4nextVAR_4++;

    }

    *VAR_4VAR_1VAR_4 = VAR_4nextVAR_4;

    

    VAR_4timer_modVAR_4(VAR_4VAR_2VAR_4, VAR_4nextVAR_4);



    





    VAR_4ifVAR_4 ((VAR_4tb_envVAR_4->VAR_4flagsVAR_4 & VAR_4PPC_DECR_UNDERFLOW_TRIGGEREDVAR_4)

        && (VAR_4valueVAR_4 & VAR_40x80000000VAR_4)

        && !(VAR_4decrVAR_4 & VAR_40x80000000VAR_4)) {

        (*VAR_4VAR_3VAR_4)(VAR_4VAR_0VAR_4);

    }

}

VAR_4staticVAR_4 VAR_4voidVAR_4 VAR_4__cpu_ppc_store_decrVAR_4(VAR_4PowerPCCPUVAR_4 *VAR_4VAR_0VAR_4, VAR_4uint64_tVAR_4 *VAR_4VAR_1VAR_4,
VAR_4QEMUTimerVAR_4 *VAR_4VAR_2VAR_4,
VAR_4voidVAR_4 (*VAR_4VAR_3VAR_4)(VAR_4PowerPCCPUVAR_4 *),
VAR_4uint32_tVAR_4 VAR_4decrVAR_4, VAR_4uint32_tVAR_4 VAR_4valueVAR_4,
VAR_4intVAR_4 VAR_4is_excpVAR_4)
{ VAR_4CPUPPCStateVAR_4 *VAR_4envVAR_4 = &VAR_4VAR_0VAR_4->VAR_4envVAR_4; VAR_4ppc_tb_tVAR_4 *VAR_4tb_envVAR_4 = VAR_4envVAR_4->VAR_4tb_envVAR_4; VAR_4uint64_tVAR_4 VAR_4nowVAR_4, VAR_4nextVAR_4; VAR_4LOG_TBVAR_4("%VAR_4sVAR_4: %VAR_408VAR_4" VAR_4PRIx32VAR_4 " => %VAR_408VAR_4" VAR_4PRIx32VAR_4 "\VAR_4nVAR_4", VAR_4__func__VAR_4,
VAR_4decrVAR_4, VAR_4valueVAR_4); VAR_4ifVAR_4 (VAR_4kvm_enabledVAR_4()) { VAR_4returnVAR_4; } VAR_4nowVAR_4 = VAR_4qemu_clock_get_nsVAR_4(VAR_4QEMU_CLOCK_VIRTUALVAR_4); VAR_4nextVAR_4 = VAR_4nowVAR_4 + VAR_4muldiv64VAR_4(VAR_4valueVAR_4, VAR_4get_ticks_per_secVAR_4(), VAR_4tb_envVAR_4->VAR_4decr_freqVAR_4); VAR_4ifVAR_4 (VAR_4is_excpVAR_4) { VAR_4nextVAR_4 += *VAR_4VAR_1VAR_4 - VAR_4nowVAR_4; } VAR_4ifVAR_4 (VAR_4nextVAR_4 == VAR_4nowVAR_4) { VAR_4nextVAR_4++; } *VAR_4VAR_1VAR_4 = VAR_4nextVAR_4; VAR_4timer_modVAR_4(VAR_4VAR_2VAR_4, VAR_4nextVAR_4); VAR_4ifVAR_4 ((VAR_4tb_envVAR_4->VAR_4flagsVAR_4 & VAR_4PPC_DECR_UNDERFLOW_TRIGGEREDVAR_4)
&& (VAR_4valueVAR_4 & VAR_40x80000000VAR_4)
&& !(VAR_4decrVAR_4 & VAR_40x80000000VAR_4)) { (*VAR_4VAR_3VAR_4)(VAR_4VAR_0VAR_4); } }