On Wed, Apr 07, 2010 at 03:42:54PM -0700, Richard Henderson wrote: > A minimal implementation that more or less corresponds to the > user-level version used by target-i386. More hoops will want > to be jumped through when alpha gets system-level emulation.
This patch looks ok, but it mixed host and target changes. Can you please split it? > Signed-off-by: Richard Henderson <r...@twiddle.net> > --- > qemu-timer.h | 13 +++++++++++++ > target-alpha/cpu.h | 1 - > target-alpha/op_helper.c | 5 +++-- > 3 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/qemu-timer.h b/qemu-timer.h > index d2e15f4..6e2d2e1 100644 > --- a/qemu-timer.h > +++ b/qemu-timer.h > @@ -209,6 +209,19 @@ static inline int64_t cpu_get_real_ticks(void) > return (int64_t)(count * cyc_per_count); > } > > +#elif defined(__alpha__) > + > +static inline int64_t cpu_get_real_ticks(void) > +{ > + uint64_t cc; > + uint32_t cur, ofs; > + > + asm volatile("rpcc %0" : "=r"(cc)); > + cur = cc; > + ofs = cc >> 32; > + return cur - ofs; > +} > + > #else > /* The host CPU doesn't have an easily accessible cycle counter. > Just return a monotonically increasing value. This will be > diff --git a/target-alpha/cpu.h b/target-alpha/cpu.h > index dae23e2..c2f6a50 100644 > --- a/target-alpha/cpu.h > +++ b/target-alpha/cpu.h > @@ -355,7 +355,6 @@ struct CPUAlphaState { > uint64_t ir[31]; > float64 fir[31]; > uint64_t pc; > - uint32_t pcc[2]; > uint64_t ipr[IPR_LAST]; > uint64_t ps; > uint64_t unique; > diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c > index bfc095c..ff5ae26 100644 > --- a/target-alpha/op_helper.c > +++ b/target-alpha/op_helper.c > @@ -21,6 +21,7 @@ > #include "host-utils.h" > #include "softfloat.h" > #include "helper.h" > +#include "qemu-timer.h" > > > /*****************************************************************************/ > /* Exceptions processing helpers */ > @@ -33,8 +34,8 @@ void QEMU_NORETURN helper_excp (int excp, int error) > > uint64_t helper_load_pcc (void) > { > - /* XXX: TODO */ > - return 0; > + /* ??? This isn't a timer for which we have any rate info. */ > + return (uint32_t)cpu_get_real_ticks(); > } > > uint64_t helper_load_fpcr (void) > -- > 1.6.6.1 > > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net