/* Store Clock Extended */ uint32_t HELPER(stcke)(CPUS390XState *env, uint64_t a1) { cpu_stb_data(env, a1, 0); /* basically the same value as stck */ cpu_stq_data(env, a1 + 1, clock_value(env) | env->cpu_num); /* more fine grained than stck */ cpu_stq_data(env, a1 + 9, 0); /* XXX programmable fields */ cpu_stw_data(env, a1 + 17, 0); return 0; }
/* Set Clock Comparator */ void HELPER(sckc)(CPUS390XState *env, uint64_t time) { if (time == -1ULL) { return; } /* difference between now and then */ time -= clock_value(env); /* nanoseconds */ time = (time * 125) >> 9; timer_mod(env->tod_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + time); }
/* Set Clock Comparator */ void HELPER(sckc)(CPUS390XState *env, uint64_t a1) { uint64_t time = cpu_ldq_data(env, a1); if (time == -1ULL) { return; } /* difference between now and then */ time -= clock_value(env); /* nanoseconds */ time = (time * 125) >> 9; qemu_mod_timer(env->tod_timer, qemu_get_clock_ns(vm_clock) + time); }
/* Store Clock */ uint32_t HELPER(stck)(CPUS390XState *env, uint64_t a1) { cpu_stq_data(env, a1, clock_value(env)); return 0; }
/* Store Clock */ uint64_t HELPER(stck)(CPUS390XState *env) { return clock_value(env); }