1*01804448SPhilippe Mathieu-Daudé /* 2*01804448SPhilippe Mathieu-Daudé * QEMU Alpha clock helpers. 3*01804448SPhilippe Mathieu-Daudé * 4*01804448SPhilippe Mathieu-Daudé * Copyright (c) 2007 Jocelyn Mayer 5*01804448SPhilippe Mathieu-Daudé * 6*01804448SPhilippe Mathieu-Daudé * SPDX-License-Identifier: LGPL-2.1-or-later 7*01804448SPhilippe Mathieu-Daudé */ 8*01804448SPhilippe Mathieu-Daudé 9*01804448SPhilippe Mathieu-Daudé #include "qemu/osdep.h" 10*01804448SPhilippe Mathieu-Daudé #include "qemu/timer.h" 11*01804448SPhilippe Mathieu-Daudé #include "exec/helper-proto.h" 12*01804448SPhilippe Mathieu-Daudé #include "cpu.h" 13*01804448SPhilippe Mathieu-Daudé helper_load_pcc(CPUAlphaState * env)14*01804448SPhilippe Mathieu-Daudéuint64_t helper_load_pcc(CPUAlphaState *env) 15*01804448SPhilippe Mathieu-Daudé { 16*01804448SPhilippe Mathieu-Daudé #ifndef CONFIG_USER_ONLY 17*01804448SPhilippe Mathieu-Daudé /* 18*01804448SPhilippe Mathieu-Daudé * In system mode we have access to a decent high-resolution clock. 19*01804448SPhilippe Mathieu-Daudé * In order to make OS-level time accounting work with the RPCC, 20*01804448SPhilippe Mathieu-Daudé * present it with a well-timed clock fixed at 250MHz. 21*01804448SPhilippe Mathieu-Daudé */ 22*01804448SPhilippe Mathieu-Daudé return (((uint64_t)env->pcc_ofs << 32) 23*01804448SPhilippe Mathieu-Daudé | (uint32_t)(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) >> 2)); 24*01804448SPhilippe Mathieu-Daudé #else 25*01804448SPhilippe Mathieu-Daudé /* 26*01804448SPhilippe Mathieu-Daudé * In user-mode, QEMU_CLOCK_VIRTUAL doesn't exist. Just pass through 27*01804448SPhilippe Mathieu-Daudé * the host cpu clock ticks. Also, don't bother taking PCC_OFS into 28*01804448SPhilippe Mathieu-Daudé * account. 29*01804448SPhilippe Mathieu-Daudé */ 30*01804448SPhilippe Mathieu-Daudé return (uint32_t)cpu_get_host_ticks(); 31*01804448SPhilippe Mathieu-Daudé #endif 32*01804448SPhilippe Mathieu-Daudé } 33