target-alpha: Use a fixed frequency for the RPCC in system mode.
authorRichard Henderson <rth@twiddle.net>
Tue, 19 Apr 2011 02:53:31 +0000 (19:53 -0700)
committerRichard Henderson <rth@anchor.twiddle.net>
Tue, 31 May 2011 17:18:06 +0000 (10:18 -0700)
Also include the PCC_OFS in the return value.  For user mode we
can pretend the PCC_OFS value is always zero.

Signed-off-by: Richard Henderson <rth@twiddle.net>
target-alpha/op_helper.c

index 91ef90a07cd2eced4de8dfc0d497b103c96f3860..36b82899d0556348468ffe29d5cc47f5859e2d2a 100644 (file)
@@ -65,8 +65,17 @@ static void QEMU_NORETURN arith_excp(int exc, uint64_t mask)
 
 uint64_t helper_load_pcc (void)
 {
-    /* ??? This isn't a timer for which we have any rate info.  */
+#ifndef CONFIG_USER_ONLY
+    /* In system mode we have access to a decent high-resolution clock.
+       In order to make OS-level time accounting work with the RPCC,
+       present it with a well-timed clock fixed at 250MHz.  */
+    return (((uint64_t)env->pcc_ofs << 32)
+            | (uint32_t)(qemu_get_clock_ns(vm_clock) >> 2));
+#else
+    /* In user-mode, vm_clock doesn't exist.  Just pass through the host cpu
+       clock ticks.  Also, don't bother taking PCC_OFS into account.  */
     return (uint32_t)cpu_get_real_ticks();
+#endif
 }
 
 uint64_t helper_load_fpcr (void)