FROM:jiaxun yang
Hi Stéphane.
MIPS do have a way to access count register from user space.
Unfortunately there is no GCC intrinsic function for it, you may try
following inline assembly.
static inline unsigned long get_count() {
unsigned long count;
asm volatile ("rdhwr %[rt], $2" : [rt] "=d" (count));
return count;
}
return Val_long (get_count());
Thanks.
- Jiaxun
Mathieu Malaterre <
[email protected]> 于 2021年12月3日周五 下午5:34写道:
Salut Stéphane,
On Fri, Dec 3, 2021 at 10:19 AM Stéphane Glondu <[email protected]> wrote:
Dear MIPS porters,
I am debugging ocaml-mirage-crypto build on mipsel.
It uses the following code:
#if defined (__i386__) || defined (__x86_64__)
return Val_long (__rdtsc ());
#elif defined (__arm__) || defined (__aarch64__)
return Val_long (read_virtual_count ());
#elif defined(__powerpc64__)
return Val_long (read_cycle_counter ());
#elif defined(__riscv) && (64 == __riscv_xlen)
return Val_long (rdcycle64 ());
#elif defined (__s390x__)
return Val_long (getticks ());
#else
#error ("No known cycle-counting instruction.")
#endif
I have trouble finding a suitable implementation for this on mipsel.
Would you have a hint?
All I could find is this code (untested):
https://salsa.debian.org/science-team/nfft/-/blob/debian/master/include/cycle.h#L485-507
<div dir="auto"><div dir="auto">FROM:jiaxun yang</div><div dir="auto"> </div><div dir="auto">Hi Stéphane.</div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto">MIPS do have a way to access count register from
user space.</div><div dir="auto"> </div><div dir="auto">Unfortunately there is no GCC intrinsic function for it, you may try following inline assembly.</div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto">static
inline unsigned long get_count() {</div><div dir="auto"> </div><div dir="auto"> unsigned long count;</div><div dir="auto"> </div><div dir="auto"> asm volatile ("rdhwr %[rt], $2" : [rt] "=d" (count));</div><div dir="auto">
</div><div dir="auto"> return count;</div><div dir="auto"> </div><div dir="auto">}</div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto">return Val_long (get_count());</div><div dir="auto"> </div><div dir="
auto"> </div><div dir="auto"> </div><div dir="auto">Thanks.</div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto"> </div><div dir="auto">- Jiaxun</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Mathieu
Malaterre <<a href="mailto:
[email protected]">
[email protected]</a>> 于 2021年12月3日周五 下午5:34写道:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Salut Stéphane,<br>
On Fri, Dec 3, 2021 at 10:19 AM Stéphane Glondu <<a href="mailto:
[email protected]" target="_blank" rel="noreferrer">
[email protected]</a>> wrote:<br>
><br>
> Dear MIPS porters,<br>
><br>
> I am debugging ocaml-mirage-crypto build on mipsel.<br>
><br>
> It uses the following code:<br>
><br>
> > #if defined (__i386__) || defined (__x86_64__)<br>
> > return Val_long (__rdtsc ());<br>
> > #elif defined (__arm__) || defined (__aarch64__)<br>
> > return Val_long (read_virtual_count ());<br>
> > #elif defined(__powerpc64__)<br>
> > return Val_long (read_cycle_counter ());<br>
> > #elif defined(__riscv) && (64 == __riscv_xlen)<br>
> > return Val_long (rdcycle64 ());<br>
> > #elif defined (__s390x__)<br>
> > return Val_long (getticks ());<br>
> > #else<br>
> > #error ("No known cycle-counting instruction.")<br>
> > #endif<br>
><br>
> I have trouble finding a suitable implementation for this on mipsel.<br> > Would you have a hint?<br>
All I could find is this code (untested):<br>
<a href="
https://salsa.debian.org/science-team/nfft/-/blob/debian/master/include/cycle.h#L485-507" rel="noreferrer noreferrer" target="_blank">
https://salsa.debian.org/science-team/nfft/-/blob/debian/master/include/cycle.h#L485-507</a><br>
</blockquote></div>
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)